![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /var/www/html/keeview_app/html/ |
Upload File : |
'use strict' var ZipWorkerClass = Object.freeze(function () { var core = {}; var retval = {}; var blobcore = {}; blobcore.compressContent = function (params, callbackfunc) { var zip = new JSZip(); zip.file("untitled.dat", params.params.content); zip.generateAsync({type:"string", compression: "DEFLATE"}).then(function(content) { callbackfunc(content); }); }; blobcore.compress = function (params, callbackfunc) { var zip = new JSZip(); var i, addf; addf = function (folder, content) { var i, tfolder; if (!EncodingClass.type.isArray(content)) content = [content]; for (i = 0; i < content.length; i++) { if (content[i].type == "file") { folder.file(content[i].name, content[i].content); } else if ((content[i].type == "folder") || (content[i].type == "directory")) { tfolder = folder.folder(content[i].name); addf(tfolder, content[i].content); } } }; addf(zip, params.params); zip.generateAsync({type:"string", compression: "DEFLATE"}).then(function(content) { callbackfunc(content); }); }; blobcore.extract = function (params, callbackfunc) { var zip = new JSZip(); zip.loadAsync(params.params[0].content).then(function (me, callbackfunc) { return function (zip) { var i; var keys = Object.keys(zip.files); for (i = 0; i < keys.length; i++) { me.file(keys[i]).async("string").then(function (host) { return function (r) { var i, rv = {}; host["_data"].uncompressedContent = r; for (i = 0; i < keys.length; i++) { if (zip.files[keys[i]]["_data"].uncompressedContent === undefined) return; } for (i = 0; i < keys.length; i++) { rv[keys[i]] = { name: zip.files[keys[i]].name, date: zip.files[keys[i]].date, size: zip.files[keys[i]]["_data"].uncompressedSize, content: zip.files[keys[i]]["_data"].uncompressedContent }; } callbackfunc(rv); } } (zip.files[keys[i]])); } } } (zip, callbackfunc)); }; blobcore.compressContentu8 = function (params, callbackfunc) { var zip = new JSZip(); zip.file("untitled.dat", params.params.content); zip.generateAsync({type:"uint8array", compression: "DEFLATE"}).then(function(content) { callbackfunc(content, [content.buffer]); }); }; blobcore.compressu8 = function (params, callbackfunc) { var zip = new JSZip(); var i, addf; addf = function (folder, content) { var i, tfolder; if (!EncodingClass.type.isArray(content)) content = [content]; for (i = 0; i < content.length; i++) { if (content[i].type == "file") { folder.file(content[i].name, content[i].content); } else if ((content[i].type == "folder") || (content[i].type == "directory")) { tfolder = folder.folder(content[i].name); addf(tfolder, content[i].content); } } }; addf(zip, params.params); zip.generateAsync({type:"uint8array", compression: "DEFLATE"}).then(function(content) { callbackfunc(content, [content.buffer]); }); }; blobcore.extractu8 = function (params, callbackfunc) { var zip = new JSZip(); zip.loadAsync(params.params[0].content).then(function (me, callbackfunc) { return function (zip) { var i; var keys = Object.keys(zip.files); for (i = 0; i < keys.length; i++) { me.file(keys[i]).async("uint8array").then(function (host) { return function (r) { var i, rv = {}, transferList = []; host["_data"].uncompressedContent = r; for (i = 0; i < keys.length; i++) { if (zip.files[keys[i]]["_data"].uncompressedContent === undefined) return; } for (i = 0; i < keys.length; i++) { rv[keys[i]] = { name: zip.files[keys[i]].name, date: zip.files[keys[i]].date, size: zip.files[keys[i]]["_data"].uncompressedSize, content: zip.files[keys[i]]["_data"].uncompressedContent }; if (zip.files[keys[i]]["_data"].uncompressedSize != zip.files[keys[i]]["_data"].uncompressedContent.buffer.byteLength) { console.log("zipsize error", zip.files[keys[i]]["_data"].uncompressedSize, zip.files[keys[i]]["_data"].uncompressedContent.buffer.byteLength); } transferList.push(zip.files[keys[i]]["_data"].uncompressedContent.buffer); } callbackfunc(rv, transferList); } } (zip.files[keys[i]])); } } } (zip, callbackfunc)); }; var wCode = EncodingClass.base64.decode( "LyohCgpKU1ppcCB2My41LjAgLSBBIEphdmFTY3JpcHQgY2xhc3MgZm9yIGdlbmVyYXRpbmcgYW5kIHJlYWRpbmcgemlwIGZpbGVzCjxodHRwOi8vc3R1YXJ0ay5jb20vanN6aXA+CgooYykgMjAwOS0yMDE2IFN0" + "dWFydCBLbmlnaHRsZXkgPHN0dWFydCBbYXRdIHN0dWFydGsuY29tPgpEdWFsIGxpY2VuY2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBvciBHUEx2My4gU2VlIGh0dHBzOi8vcmF3LmdpdGh1Yi5jb20vU3R1ay9q" + "c3ppcC9tYXN0ZXIvTElDRU5TRS5tYXJrZG93bi4KCkpTWmlwIHVzZXMgdGhlIGxpYnJhcnkgcGFrbyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgOgpodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL3Bh" + "a28vYmxvYi9tYXN0ZXIvTElDRU5TRQoqLwoKKGZ1bmN0aW9uKGYpe2lmKHR5cGVvZiBleHBvcnRzPT09Im9iamVjdCImJnR5cGVvZiBtb2R1bGUhPT0idW5kZWZpbmVkIil7bW9kdWxlLmV4cG9ydHM9ZigpfWVs" + "c2UgaWYodHlwZW9mIGRlZmluZT09PSJmdW5jdGlvbiImJmRlZmluZS5hbWQpe2RlZmluZShbXSxmKX1lbHNle3ZhciBnO2lmKHR5cGVvZiB3aW5kb3chPT0idW5kZWZpbmVkIil7Zz13aW5kb3d9ZWxzZSBpZih0" + "eXBlb2YgZ2xvYmFsIT09InVuZGVmaW5lZCIpe2c9Z2xvYmFsfWVsc2UgaWYodHlwZW9mIHNlbGYhPT0idW5kZWZpbmVkIil7Zz1zZWxmfWVsc2V7Zz10aGlzfWcuSlNaaXAgPSBmKCl9fSkoZnVuY3Rpb24oKXt2" + "YXIgZGVmaW5lLG1vZHVsZSxleHBvcnRzO3JldHVybiAoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PSJmdW5jdGlvbiIm" + "JnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitvKyInIik7dGhyb3cgZi5jb2RlPSJNT0RVTEVf" + "Tk9UX0ZPVU5EIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUs" + "dCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PSJmdW5jdGlvbiImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pKHsxOltm" + "dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwp2YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7CnZhciBzdXBwb3J0ID0gcmVxdWlyZSgnLi9zdXBwb3J0Jyk7Ci8vIHBy" + "aXZhdGUgcHJvcGVydHkKdmFyIF9rZXlTdHIgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iOwoKCi8vIHB1YmxpYyBtZXRob2QgZm9y" + "IGVuY29kaW5nCmV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24oaW5wdXQpIHsKICAgIHZhciBvdXRwdXQgPSBbXTsKICAgIHZhciBjaHIxLCBjaHIyLCBjaHIzLCBlbmMxLCBlbmMyLCBlbmMzLCBlbmM0OwogICAg" + "dmFyIGkgPSAwLCBsZW4gPSBpbnB1dC5sZW5ndGgsIHJlbWFpbmluZ0J5dGVzID0gbGVuOwoKICAgIHZhciBpc0FycmF5ID0gdXRpbHMuZ2V0VHlwZU9mKGlucHV0KSAhPT0gInN0cmluZyI7CiAgICB3aGlsZSAo" + "aSA8IGlucHV0Lmxlbmd0aCkgewogICAgICAgIHJlbWFpbmluZ0J5dGVzID0gbGVuIC0gaTsKCiAgICAgICAgaWYgKCFpc0FycmF5KSB7CiAgICAgICAgICAgIGNocjEgPSBpbnB1dC5jaGFyQ29kZUF0KGkrKyk7" + "CiAgICAgICAgICAgIGNocjIgPSBpIDwgbGVuID8gaW5wdXQuY2hhckNvZGVBdChpKyspIDogMDsKICAgICAgICAgICAgY2hyMyA9IGkgPCBsZW4gPyBpbnB1dC5jaGFyQ29kZUF0KGkrKykgOiAwOwogICAgICAg" + "IH0gZWxzZSB7CiAgICAgICAgICAgIGNocjEgPSBpbnB1dFtpKytdOwogICAgICAgICAgICBjaHIyID0gaSA8IGxlbiA/IGlucHV0W2krK10gOiAwOwogICAgICAgICAgICBjaHIzID0gaSA8IGxlbiA/IGlucHV0" + "W2krK10gOiAwOwogICAgICAgIH0KCiAgICAgICAgZW5jMSA9IGNocjEgPj4gMjsKICAgICAgICBlbmMyID0gKChjaHIxICYgMykgPDwgNCkgfCAoY2hyMiA+PiA0KTsKICAgICAgICBlbmMzID0gcmVtYWluaW5n" + "Qnl0ZXMgPiAxID8gKCgoY2hyMiAmIDE1KSA8PCAyKSB8IChjaHIzID4+IDYpKSA6IDY0OwogICAgICAgIGVuYzQgPSByZW1haW5pbmdCeXRlcyA+IDIgPyAoY2hyMyAmIDYzKSA6IDY0OwoKICAgICAgICBvdXRw" + "dXQucHVzaChfa2V5U3RyLmNoYXJBdChlbmMxKSArIF9rZXlTdHIuY2hhckF0KGVuYzIpICsgX2tleVN0ci5jaGFyQXQoZW5jMykgKyBfa2V5U3RyLmNoYXJBdChlbmM0KSk7CgogICAgfQoKICAgIHJldHVybiBv" + "dXRwdXQuam9pbigiIik7Cn07CgovLyBwdWJsaWMgbWV0aG9kIGZvciBkZWNvZGluZwpleHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uKGlucHV0KSB7CiAgICB2YXIgY2hyMSwgY2hyMiwgY2hyMzsKICAgIHZhciBl" + "bmMxLCBlbmMyLCBlbmMzLCBlbmM0OwogICAgdmFyIGkgPSAwLCByZXN1bHRJbmRleCA9IDA7CgogICAgdmFyIGRhdGFVcmxQcmVmaXggPSAiZGF0YToiOwoKICAgIGlmIChpbnB1dC5zdWJzdHIoMCwgZGF0YVVy" + "bFByZWZpeC5sZW5ndGgpID09PSBkYXRhVXJsUHJlZml4KSB7CiAgICAgICAgLy8gVGhpcyBpcyBhIGNvbW1vbiBlcnJvcjogcGVvcGxlIGdpdmUgYSBkYXRhIHVybAogICAgICAgIC8vIChkYXRhOmltYWdlL3Bu" + "ZztiYXNlNjQsaVZCT1IuLi4pIHdpdGggYSB7YmFzZTY0OiB0cnVlfSBhbmQKICAgICAgICAvLyB3b25kZXJzIHdoeSB0aGluZ3MgZG9uJ3Qgd29yay4KICAgICAgICAvLyBXZSBjYW4gZGV0ZWN0IHRoYXQgdGhl" + "IHN0cmluZyBpbnB1dCBsb29rcyBsaWtlIGEgZGF0YSB1cmwgYnV0IHdlCiAgICAgICAgLy8gKmNhbid0KiBiZSBzdXJlIGl0IGlzIG9uZTogcmVtb3ZpbmcgZXZlcnl0aGluZyB1cCB0byB0aGUgY29tbWEgd291" + "bGQKICAgICAgICAvLyBiZSB0b28gZGFuZ2Vyb3VzLgogICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBiYXNlNjQgaW5wdXQsIGl0IGxvb2tzIGxpa2UgYSBkYXRhIHVybC4iKTsKICAgIH0KCiAgICBp" + "bnB1dCA9IGlucHV0LnJlcGxhY2UoL1teQS1aYS16MC05XCtcL1w9XS9nLCAiIik7CgogICAgdmFyIHRvdGFsTGVuZ3RoID0gaW5wdXQubGVuZ3RoICogMyAvIDQ7CiAgICBpZihpbnB1dC5jaGFyQXQoaW5wdXQu" + "bGVuZ3RoIC0gMSkgPT09IF9rZXlTdHIuY2hhckF0KDY0KSkgewogICAgICAgIHRvdGFsTGVuZ3RoLS07CiAgICB9CiAgICBpZihpbnB1dC5jaGFyQXQoaW5wdXQubGVuZ3RoIC0gMikgPT09IF9rZXlTdHIuY2hh" + "ckF0KDY0KSkgewogICAgICAgIHRvdGFsTGVuZ3RoLS07CiAgICB9CiAgICBpZiAodG90YWxMZW5ndGggJSAxICE9PSAwKSB7CiAgICAgICAgLy8gdG90YWxMZW5ndGggaXMgbm90IGFuIGludGVnZXIsIHRoZSBs" + "ZW5ndGggZG9lcyBub3QgbWF0Y2ggYSB2YWxpZAogICAgICAgIC8vIGJhc2U2NCBjb250ZW50LiBUaGF0IGNhbiBoYXBwZW4gaWY6CiAgICAgICAgLy8gLSB0aGUgaW5wdXQgaXMgbm90IGEgYmFzZTY0IGNvbnRl" + "bnQKICAgICAgICAvLyAtIHRoZSBpbnB1dCBpcyAqYWxtb3N0KiBhIGJhc2U2NCBjb250ZW50LCB3aXRoIGEgZXh0cmEgY2hhcnMgYXQgdGhlCiAgICAgICAgLy8gICBiZWdpbm5pbmcgb3IgYXQgdGhlIGVuZAog" + "ICAgICAgIC8vIC0gdGhlIGlucHV0IHVzZXMgYSBiYXNlNjQgdmFyaWFudCAoYmFzZTY0dXJsIGZvciBleGFtcGxlKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBiYXNlNjQgaW5wdXQsIGJhZCBj" + "b250ZW50IGxlbmd0aC4iKTsKICAgIH0KICAgIHZhciBvdXRwdXQ7CiAgICBpZiAoc3VwcG9ydC51aW50OGFycmF5KSB7CiAgICAgICAgb3V0cHV0ID0gbmV3IFVpbnQ4QXJyYXkodG90YWxMZW5ndGh8MCk7CiAg" + "ICB9IGVsc2UgewogICAgICAgIG91dHB1dCA9IG5ldyBBcnJheSh0b3RhbExlbmd0aHwwKTsKICAgIH0KCiAgICB3aGlsZSAoaSA8IGlucHV0Lmxlbmd0aCkgewoKICAgICAgICBlbmMxID0gX2tleVN0ci5pbmRl" + "eE9mKGlucHV0LmNoYXJBdChpKyspKTsKICAgICAgICBlbmMyID0gX2tleVN0ci5pbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTsKICAgICAgICBlbmMzID0gX2tleVN0ci5pbmRleE9mKGlucHV0LmNoYXJBdChp" + "KyspKTsKICAgICAgICBlbmM0ID0gX2tleVN0ci5pbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTsKCiAgICAgICAgY2hyMSA9IChlbmMxIDw8IDIpIHwgKGVuYzIgPj4gNCk7CiAgICAgICAgY2hyMiA9ICgoZW5j" + "MiAmIDE1KSA8PCA0KSB8IChlbmMzID4+IDIpOwogICAgICAgIGNocjMgPSAoKGVuYzMgJiAzKSA8PCA2KSB8IGVuYzQ7CgogICAgICAgIG91dHB1dFtyZXN1bHRJbmRleCsrXSA9IGNocjE7CgogICAgICAgIGlm" + "IChlbmMzICE9PSA2NCkgewogICAgICAgICAgICBvdXRwdXRbcmVzdWx0SW5kZXgrK10gPSBjaHIyOwogICAgICAgIH0KICAgICAgICBpZiAoZW5jNCAhPT0gNjQpIHsKICAgICAgICAgICAgb3V0cHV0W3Jlc3Vs" + "dEluZGV4KytdID0gY2hyMzsKICAgICAgICB9CgogICAgfQoKICAgIHJldHVybiBvdXRwdXQ7Cn07Cgp9LHsiLi9zdXBwb3J0IjozMCwiLi91dGlscyI6MzJ9XSwyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxl" + "eHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwoKdmFyIGV4dGVybmFsID0gcmVxdWlyZSgiLi9leHRlcm5hbCIpOwp2YXIgRGF0YVdvcmtlciA9IHJlcXVpcmUoJy4vc3RyZWFtL0RhdGFXb3JrZXInKTsKdmFyIERhdGFM" + "ZW5ndGhQcm9iZSA9IHJlcXVpcmUoJy4vc3RyZWFtL0RhdGFMZW5ndGhQcm9iZScpOwp2YXIgQ3JjMzJQcm9iZSA9IHJlcXVpcmUoJy4vc3RyZWFtL0NyYzMyUHJvYmUnKTsKdmFyIERhdGFMZW5ndGhQcm9iZSA9" + "IHJlcXVpcmUoJy4vc3RyZWFtL0RhdGFMZW5ndGhQcm9iZScpOwoKLyoqCiAqIFJlcHJlc2VudCBhIGNvbXByZXNzZWQgb2JqZWN0LCB3aXRoIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIGRlY29tcHJlc3MgaXQuCiAq" + "IEBjb25zdHJ1Y3RvcgogKiBAcGFyYW0ge251bWJlcn0gY29tcHJlc3NlZFNpemUgdGhlIHNpemUgb2YgdGhlIGRhdGEgY29tcHJlc3NlZC4KICogQHBhcmFtIHtudW1iZXJ9IHVuY29tcHJlc3NlZFNpemUgdGhl" + "IHNpemUgb2YgdGhlIGRhdGEgYWZ0ZXIgZGVjb21wcmVzc2lvbi4KICogQHBhcmFtIHtudW1iZXJ9IGNyYzMyIHRoZSBjcmMzMiBvZiB0aGUgZGVjb21wcmVzc2VkIGZpbGUuCiAqIEBwYXJhbSB7b2JqZWN0fSBj" + "b21wcmVzc2lvbiB0aGUgdHlwZSBvZiBjb21wcmVzc2lvbiwgc2VlIGxpYi9jb21wcmVzc2lvbnMuanMuCiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5QnVmZmVyfFVpbnQ4QXJyYXl8QnVmZmVyfSBkYXRhIHRoZSBj" + "b21wcmVzc2VkIGRhdGEuCiAqLwpmdW5jdGlvbiBDb21wcmVzc2VkT2JqZWN0KGNvbXByZXNzZWRTaXplLCB1bmNvbXByZXNzZWRTaXplLCBjcmMzMiwgY29tcHJlc3Npb24sIGRhdGEpIHsKICAgIHRoaXMuY29t" + "cHJlc3NlZFNpemUgPSBjb21wcmVzc2VkU2l6ZTsKICAgIHRoaXMudW5jb21wcmVzc2VkU2l6ZSA9IHVuY29tcHJlc3NlZFNpemU7CiAgICB0aGlzLmNyYzMyID0gY3JjMzI7CiAgICB0aGlzLmNvbXByZXNzaW9u" + "ID0gY29tcHJlc3Npb247CiAgICB0aGlzLmNvbXByZXNzZWRDb250ZW50ID0gZGF0YTsKfQoKQ29tcHJlc3NlZE9iamVjdC5wcm90b3R5cGUgPSB7CiAgICAvKioKICAgICAqIENyZWF0ZSBhIHdvcmtlciB0byBn" + "ZXQgdGhlIHVuY29tcHJlc3NlZCBjb250ZW50LgogICAgICogQHJldHVybiB7R2VuZXJpY1dvcmtlcn0gdGhlIHdvcmtlci4KICAgICAqLwogICAgZ2V0Q29udGVudFdvcmtlciA6IGZ1bmN0aW9uICgpIHsKICAg" + "ICAgICB2YXIgd29ya2VyID0gbmV3IERhdGFXb3JrZXIoZXh0ZXJuYWwuUHJvbWlzZS5yZXNvbHZlKHRoaXMuY29tcHJlc3NlZENvbnRlbnQpKQogICAgICAgIC5waXBlKHRoaXMuY29tcHJlc3Npb24udW5jb21w" + "cmVzc1dvcmtlcigpKQogICAgICAgIC5waXBlKG5ldyBEYXRhTGVuZ3RoUHJvYmUoImRhdGFfbGVuZ3RoIikpOwoKICAgICAgICB2YXIgdGhhdCA9IHRoaXM7CiAgICAgICAgd29ya2VyLm9uKCJlbmQiLCBmdW5j" + "dGlvbiAoKSB7CiAgICAgICAgICAgIGlmKHRoaXMuc3RyZWFtSW5mb1snZGF0YV9sZW5ndGgnXSAhPT0gdGhhdC51bmNvbXByZXNzZWRTaXplKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJ1" + "ZyA6IHVuY29tcHJlc3NlZCBkYXRhIHNpemUgbWlzbWF0Y2giKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9LAogICAgLyoqCiAgICAgKiBDcmVhdGUgYSB3" + "b3JrZXIgdG8gZ2V0IHRoZSBjb21wcmVzc2VkIGNvbnRlbnQuCiAgICAgKiBAcmV0dXJuIHtHZW5lcmljV29ya2VyfSB0aGUgd29ya2VyLgogICAgICovCiAgICBnZXRDb21wcmVzc2VkV29ya2VyIDogZnVuY3Rp" + "b24gKCkgewogICAgICAgIHJldHVybiBuZXcgRGF0YVdvcmtlcihleHRlcm5hbC5Qcm9taXNlLnJlc29sdmUodGhpcy5jb21wcmVzc2VkQ29udGVudCkpCiAgICAgICAgLndpdGhTdHJlYW1JbmZvKCJjb21wcmVz" + "c2VkU2l6ZSIsIHRoaXMuY29tcHJlc3NlZFNpemUpCiAgICAgICAgLndpdGhTdHJlYW1JbmZvKCJ1bmNvbXByZXNzZWRTaXplIiwgdGhpcy51bmNvbXByZXNzZWRTaXplKQogICAgICAgIC53aXRoU3RyZWFtSW5m" + "bygiY3JjMzIiLCB0aGlzLmNyYzMyKQogICAgICAgIC53aXRoU3RyZWFtSW5mbygiY29tcHJlc3Npb24iLCB0aGlzLmNvbXByZXNzaW9uKQogICAgICAgIDsKICAgIH0KfTsKCi8qKgogKiBDaGFpbiB0aGUgZ2l2" + "ZW4gd29ya2VyIHdpdGggb3RoZXIgd29ya2VycyB0byBjb21wcmVzcyB0aGUgY29udGVudCB3aXRoIHRoZQogKiBnaXZlbiBjb21wcmVzc2lvbi4KICogQHBhcmFtIHtHZW5lcmljV29ya2VyfSB1bmNvbXByZXNz" + "ZWRXb3JrZXIgdGhlIHdvcmtlciB0byBwaXBlLgogKiBAcGFyYW0ge09iamVjdH0gY29tcHJlc3Npb24gdGhlIGNvbXByZXNzaW9uIG9iamVjdC4KICogQHBhcmFtIHtPYmplY3R9IGNvbXByZXNzaW9uT3B0aW9u" + "cyB0aGUgb3B0aW9ucyB0byB1c2Ugd2hlbiBjb21wcmVzc2luZy4KICogQHJldHVybiB7R2VuZXJpY1dvcmtlcn0gdGhlIG5ldyB3b3JrZXIgY29tcHJlc3NpbmcgdGhlIGNvbnRlbnQuCiAqLwpDb21wcmVzc2Vk" + "T2JqZWN0LmNyZWF0ZVdvcmtlckZyb20gPSBmdW5jdGlvbiAodW5jb21wcmVzc2VkV29ya2VyLCBjb21wcmVzc2lvbiwgY29tcHJlc3Npb25PcHRpb25zKSB7CiAgICByZXR1cm4gdW5jb21wcmVzc2VkV29ya2Vy" + "CiAgICAucGlwZShuZXcgQ3JjMzJQcm9iZSgpKQogICAgLnBpcGUobmV3IERhdGFMZW5ndGhQcm9iZSgidW5jb21wcmVzc2VkU2l6ZSIpKQogICAgLnBpcGUoY29tcHJlc3Npb24uY29tcHJlc3NXb3JrZXIoY29t" + "cHJlc3Npb25PcHRpb25zKSkKICAgIC5waXBlKG5ldyBEYXRhTGVuZ3RoUHJvYmUoImNvbXByZXNzZWRTaXplIikpCiAgICAud2l0aFN0cmVhbUluZm8oImNvbXByZXNzaW9uIiwgY29tcHJlc3Npb24pOwp9OwoK" + "bW9kdWxlLmV4cG9ydHMgPSBDb21wcmVzc2VkT2JqZWN0OwoKfSx7Ii4vZXh0ZXJuYWwiOjYsIi4vc3RyZWFtL0NyYzMyUHJvYmUiOjI1LCIuL3N0cmVhbS9EYXRhTGVuZ3RoUHJvYmUiOjI2LCIuL3N0cmVhbS9E" + "YXRhV29ya2VyIjoyN31dLDM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewondXNlIHN0cmljdCc7Cgp2YXIgR2VuZXJpY1dvcmtlciA9IHJlcXVpcmUoIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXIi" + "KTsKCmV4cG9ydHMuU1RPUkUgPSB7CiAgICBtYWdpYzogIlx4MDBceDAwIiwKICAgIGNvbXByZXNzV29ya2VyIDogZnVuY3Rpb24gKGNvbXByZXNzaW9uT3B0aW9ucykgewogICAgICAgIHJldHVybiBuZXcgR2Vu" + "ZXJpY1dvcmtlcigiU1RPUkUgY29tcHJlc3Npb24iKTsKICAgIH0sCiAgICB1bmNvbXByZXNzV29ya2VyIDogZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiBuZXcgR2VuZXJpY1dvcmtlcigiU1RPUkUgZGVj" + "b21wcmVzc2lvbiIpOwogICAgfQp9OwpleHBvcnRzLkRFRkxBVEUgPSByZXF1aXJlKCcuL2ZsYXRlJyk7Cgp9LHsiLi9mbGF0ZSI6NywiLi9zdHJlYW0vR2VuZXJpY1dvcmtlciI6Mjh9XSw0OltmdW5jdGlvbihy" + "ZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwoKdmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpOwoKLyoqCiAqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGNvbWUgZnJvbSBwYWtvLCBm" + "cm9tIHBha28vbGliL3psaWIvY3JjMzIuanMKICogcmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLCBzZWUgcGFrbyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL3Bha28vCiAqLwoKLy8gVXNlIG9yZGlu" + "YXJ5IGFycmF5LCBzaW5jZSB1bnR5cGVkIG1ha2VzIG5vIGJvb3N0IGhlcmUKZnVuY3Rpb24gbWFrZVRhYmxlKCkgewogICAgdmFyIGMsIHRhYmxlID0gW107CgogICAgZm9yKHZhciBuID0wOyBuIDwgMjU2OyBu" + "KyspewogICAgICAgIGMgPSBuOwogICAgICAgIGZvcih2YXIgayA9MDsgayA8IDg7IGsrKyl7CiAgICAgICAgICAgIGMgPSAoKGMmMSkgPyAoMHhFREI4ODMyMCBeIChjID4+PiAxKSkgOiAoYyA+Pj4gMSkpOwog" + "ICAgICAgIH0KICAgICAgICB0YWJsZVtuXSA9IGM7CiAgICB9CgogICAgcmV0dXJuIHRhYmxlOwp9CgovLyBDcmVhdGUgdGFibGUgb24gbG9hZC4gSnVzdCAyNTUgc2lnbmVkIGxvbmdzLiBOb3QgYSBwcm9ibGVt" + "Lgp2YXIgY3JjVGFibGUgPSBtYWtlVGFibGUoKTsKCgpmdW5jdGlvbiBjcmMzMihjcmMsIGJ1ZiwgbGVuLCBwb3MpIHsKICAgIHZhciB0ID0gY3JjVGFibGUsIGVuZCA9IHBvcyArIGxlbjsKCiAgICBjcmMgPSBj" + "cmMgXiAoLTEpOwoKICAgIGZvciAodmFyIGkgPSBwb3M7IGkgPCBlbmQ7IGkrKyApIHsKICAgICAgICBjcmMgPSAoY3JjID4+PiA4KSBeIHRbKGNyYyBeIGJ1ZltpXSkgJiAweEZGXTsKICAgIH0KCiAgICByZXR1" + "cm4gKGNyYyBeICgtMSkpOyAvLyA+Pj4gMDsKfQoKLy8gVGhhdCdzIGFsbCBmb3IgdGhlIHBha28gZnVuY3Rpb25zLgoKLyoqCiAqIENvbXB1dGUgdGhlIGNyYzMyIG9mIGEgc3RyaW5nLgogKiBUaGlzIGlzIGFs" + "bW9zdCB0aGUgc2FtZSBhcyB0aGUgZnVuY3Rpb24gY3JjMzIsIGJ1dCBmb3Igc3RyaW5ncy4gVXNpbmcgdGhlCiAqIHNhbWUgZnVuY3Rpb24gZm9yIHRoZSB0d28gdXNlIGNhc2VzIGxlYWRzIHRvIGhvcnJpYmxl" + "IHBlcmZvcm1hbmNlcy4KICogQHBhcmFtIHtOdW1iZXJ9IGNyYyB0aGUgc3RhcnRpbmcgdmFsdWUgb2YgdGhlIGNyYy4KICogQHBhcmFtIHtTdHJpbmd9IHN0ciB0aGUgc3RyaW5nIHRvIHVzZS4KICogQHBhcmFt" + "IHtOdW1iZXJ9IGxlbiB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcuCiAqIEBwYXJhbSB7TnVtYmVyfSBwb3MgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIGZvciB0aGUgY3JjMzIgY29tcHV0YXRpb24uCiAqIEByZXR1" + "cm4ge051bWJlcn0gdGhlIGNvbXB1dGVkIGNyYzMyLgogKi8KZnVuY3Rpb24gY3JjMzJzdHIoY3JjLCBzdHIsIGxlbiwgcG9zKSB7CiAgICB2YXIgdCA9IGNyY1RhYmxlLCBlbmQgPSBwb3MgKyBsZW47CgogICAg" + "Y3JjID0gY3JjIF4gKC0xKTsKCiAgICBmb3IgKHZhciBpID0gcG9zOyBpIDwgZW5kOyBpKysgKSB7CiAgICAgICAgY3JjID0gKGNyYyA+Pj4gOCkgXiB0WyhjcmMgXiBzdHIuY2hhckNvZGVBdChpKSkgJiAweEZG" + "XTsKICAgIH0KCiAgICByZXR1cm4gKGNyYyBeICgtMSkpOyAvLyA+Pj4gMDsKfQoKbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmMzMndyYXBwZXIoaW5wdXQsIGNyYykgewogICAgaWYgKHR5cGVvZiBpbnB1" + "dCA9PT0gInVuZGVmaW5lZCIgfHwgIWlucHV0Lmxlbmd0aCkgewogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIHZhciBpc0FycmF5ID0gdXRpbHMuZ2V0VHlwZU9mKGlucHV0KSAhPT0gInN0cmluZyI7Cgog" + "ICAgaWYoaXNBcnJheSkgewogICAgICAgIHJldHVybiBjcmMzMihjcmN8MCwgaW5wdXQsIGlucHV0Lmxlbmd0aCwgMCk7CiAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBjcmMzMnN0cihjcmN8MCwgaW5wdXQs" + "IGlucHV0Lmxlbmd0aCwgMCk7CiAgICB9Cn07Cgp9LHsiLi91dGlscyI6MzJ9XSw1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwpleHBvcnRzLmJhc2U2NCA9IGZhbHNl" + "OwpleHBvcnRzLmJpbmFyeSA9IGZhbHNlOwpleHBvcnRzLmRpciA9IGZhbHNlOwpleHBvcnRzLmNyZWF0ZUZvbGRlcnMgPSB0cnVlOwpleHBvcnRzLmRhdGUgPSBudWxsOwpleHBvcnRzLmNvbXByZXNzaW9uID0g" + "bnVsbDsKZXhwb3J0cy5jb21wcmVzc2lvbk9wdGlvbnMgPSBudWxsOwpleHBvcnRzLmNvbW1lbnQgPSBudWxsOwpleHBvcnRzLnVuaXhQZXJtaXNzaW9ucyA9IG51bGw7CmV4cG9ydHMuZG9zUGVybWlzc2lvbnMg" + "PSBudWxsOwoKfSx7fV0sNjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci8qIGdsb2JhbCBQcm9taXNlICovCid1c2Ugc3RyaWN0JzsKCi8vIGxvYWQgdGhlIGdsb2JhbCBvYmplY3QgZmlyc3Q6" + "Ci8vIC0gaXQgc2hvdWxkIGJlIGJldHRlciBpbnRlZ3JhdGVkIGluIHRoZSBzeXN0ZW0gKHVuaGFuZGxlZFJlamVjdGlvbiBpbiBub2RlKQovLyAtIHRoZSBlbnZpcm9ubWVudCBtYXkgaGF2ZSBhIGN1c3RvbSBQ" + "cm9taXNlIGltcGxlbWVudGF0aW9uIChzZWUgem9uZS5qcykKdmFyIEVTNlByb21pc2UgPSBudWxsOwppZiAodHlwZW9mIFByb21pc2UgIT09ICJ1bmRlZmluZWQiKSB7CiAgICBFUzZQcm9taXNlID0gUHJvbWlz" + "ZTsKfSBlbHNlIHsKICAgIEVTNlByb21pc2UgPSByZXF1aXJlKCJsaWUiKTsKfQoKLyoqCiAqIExldCB0aGUgdXNlciB1c2UvY2hhbmdlIHNvbWUgaW1wbGVtZW50YXRpb25zLgogKi8KbW9kdWxlLmV4cG9ydHMg" + "PSB7CiAgICBQcm9taXNlOiBFUzZQcm9taXNlCn07Cgp9LHsibGllIjozN31dLDc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewondXNlIHN0cmljdCc7CnZhciBVU0VfVFlQRURBUlJBWSA9ICh0" + "eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcpICYmICh0eXBlb2YgVWludDE2QXJyYXkgIT09ICd1bmRlZmluZWQnKSAmJiAodHlwZW9mIFVpbnQzMkFycmF5ICE9PSAndW5kZWZpbmVkJyk7Cgp2YXIg" + "cGFrbyA9IHJlcXVpcmUoInBha28iKTsKdmFyIHV0aWxzID0gcmVxdWlyZSgiLi91dGlscyIpOwp2YXIgR2VuZXJpY1dvcmtlciA9IHJlcXVpcmUoIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXIiKTsKCnZhciBBUlJB" + "WV9UWVBFID0gVVNFX1RZUEVEQVJSQVkgPyAidWludDhhcnJheSIgOiAiYXJyYXkiOwoKZXhwb3J0cy5tYWdpYyA9ICJceDA4XHgwMCI7CgovKioKICogQ3JlYXRlIGEgd29ya2VyIHRoYXQgdXNlcyBwYWtvIHRv" + "IGluZmxhdGUvZGVmbGF0ZS4KICogQGNvbnN0cnVjdG9yCiAqIEBwYXJhbSB7U3RyaW5nfSBhY3Rpb24gdGhlIG5hbWUgb2YgdGhlIHBha28gZnVuY3Rpb24gdG8gY2FsbCA6IGVpdGhlciAiRGVmbGF0ZSIgb3Ig" + "IkluZmxhdGUiLgogKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyB0aGUgb3B0aW9ucyB0byB1c2Ugd2hlbiAoZGUpY29tcHJlc3NpbmcuCiAqLwpmdW5jdGlvbiBGbGF0ZVdvcmtlcihhY3Rpb24sIG9wdGlvbnMp" + "IHsKICAgIEdlbmVyaWNXb3JrZXIuY2FsbCh0aGlzLCAiRmxhdGVXb3JrZXIvIiArIGFjdGlvbik7CgogICAgdGhpcy5fcGFrbyA9IG51bGw7CiAgICB0aGlzLl9wYWtvQWN0aW9uID0gYWN0aW9uOwogICAgdGhp" + "cy5fcGFrb09wdGlvbnMgPSBvcHRpb25zOwogICAgLy8gdGhlIGBtZXRhYCBvYmplY3QgZnJvbSB0aGUgbGFzdCBjaHVuayByZWNlaXZlZAogICAgLy8gdGhpcyBhbGxvdyB0aGlzIHdvcmtlciB0byBwYXNzIGFy" + "b3VuZCBtZXRhZGF0YQogICAgdGhpcy5tZXRhID0ge307Cn0KCnV0aWxzLmluaGVyaXRzKEZsYXRlV29ya2VyLCBHZW5lcmljV29ya2VyKTsKCi8qKgogKiBAc2VlIEdlbmVyaWNXb3JrZXIucHJvY2Vzc0NodW5r" + "CiAqLwpGbGF0ZVdvcmtlci5wcm90b3R5cGUucHJvY2Vzc0NodW5rID0gZnVuY3Rpb24gKGNodW5rKSB7CiAgICB0aGlzLm1ldGEgPSBjaHVuay5tZXRhOwogICAgaWYgKHRoaXMuX3Bha28gPT09IG51bGwpIHsK" + "ICAgICAgICB0aGlzLl9jcmVhdGVQYWtvKCk7CiAgICB9CiAgICB0aGlzLl9wYWtvLnB1c2godXRpbHMudHJhbnNmb3JtVG8oQVJSQVlfVFlQRSwgY2h1bmsuZGF0YSksIGZhbHNlKTsKfTsKCi8qKgogKiBAc2Vl" + "IEdlbmVyaWNXb3JrZXIuZmx1c2gKICovCkZsYXRlV29ya2VyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpIHsKICAgIEdlbmVyaWNXb3JrZXIucHJvdG90eXBlLmZsdXNoLmNhbGwodGhpcyk7CiAgICBp" + "ZiAodGhpcy5fcGFrbyA9PT0gbnVsbCkgewogICAgICAgIHRoaXMuX2NyZWF0ZVBha28oKTsKICAgIH0KICAgIHRoaXMuX3Bha28ucHVzaChbXSwgdHJ1ZSk7Cn07Ci8qKgogKiBAc2VlIEdlbmVyaWNXb3JrZXIu" + "Y2xlYW5VcAogKi8KRmxhdGVXb3JrZXIucHJvdG90eXBlLmNsZWFuVXAgPSBmdW5jdGlvbiAoKSB7CiAgICBHZW5lcmljV29ya2VyLnByb3RvdHlwZS5jbGVhblVwLmNhbGwodGhpcyk7CiAgICB0aGlzLl9wYWtv" + "ID0gbnVsbDsKfTsKCi8qKgogKiBDcmVhdGUgdGhlIF9wYWtvIG9iamVjdC4KICogVE9ETzogbGF6eS1sb2FkaW5nIHRoaXMgb2JqZWN0IGlzbid0IHRoZSBiZXN0IHNvbHV0aW9uIGJ1dCBpdCdzIHRoZQogKiBx" + "dWlja2VzdC4gVGhlIGJlc3Qgc29sdXRpb24gaXMgdG8gbGF6eS1sb2FkIHRoZSB3b3JrZXIgbGlzdC4gU2VlIGFsc28gdGhlCiAqIGlzc3VlICM0NDYuCiAqLwpGbGF0ZVdvcmtlci5wcm90b3R5cGUuX2NyZWF0" + "ZVBha28gPSBmdW5jdGlvbiAoKSB7CiAgICB0aGlzLl9wYWtvID0gbmV3IHBha29bdGhpcy5fcGFrb0FjdGlvbl0oewogICAgICAgIHJhdzogdHJ1ZSwKICAgICAgICBsZXZlbDogdGhpcy5fcGFrb09wdGlvbnMu" + "bGV2ZWwgfHwgLTEgLy8gZGVmYXVsdCBjb21wcmVzc2lvbgogICAgfSk7CiAgICB2YXIgc2VsZiA9IHRoaXM7CiAgICB0aGlzLl9wYWtvLm9uRGF0YSA9IGZ1bmN0aW9uKGRhdGEpIHsKICAgICAgICBzZWxmLnB1" + "c2goewogICAgICAgICAgICBkYXRhIDogZGF0YSwKICAgICAgICAgICAgbWV0YSA6IHNlbGYubWV0YQogICAgICAgIH0pOwogICAgfTsKfTsKCmV4cG9ydHMuY29tcHJlc3NXb3JrZXIgPSBmdW5jdGlvbiAoY29t" + "cHJlc3Npb25PcHRpb25zKSB7CiAgICByZXR1cm4gbmV3IEZsYXRlV29ya2VyKCJEZWZsYXRlIiwgY29tcHJlc3Npb25PcHRpb25zKTsKfTsKZXhwb3J0cy51bmNvbXByZXNzV29ya2VyID0gZnVuY3Rpb24gKCkg" + "ewogICAgcmV0dXJuIG5ldyBGbGF0ZVdvcmtlcigiSW5mbGF0ZSIsIHt9KTsKfTsKCn0seyIuL3N0cmVhbS9HZW5lcmljV29ya2VyIjoyOCwiLi91dGlscyI6MzIsInBha28iOjM4fV0sODpbZnVuY3Rpb24ocmVx" + "dWlyZSxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsKCnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7CnZhciBHZW5lcmljV29ya2VyID0gcmVxdWlyZSgnLi4vc3RyZWFtL0dlbmVyaWNXb3Jr" + "ZXInKTsKdmFyIHV0ZjggPSByZXF1aXJlKCcuLi91dGY4Jyk7CnZhciBjcmMzMiA9IHJlcXVpcmUoJy4uL2NyYzMyJyk7CnZhciBzaWduYXR1cmUgPSByZXF1aXJlKCcuLi9zaWduYXR1cmUnKTsKCi8qKgogKiBU" + "cmFuc2Zvcm0gYW4gaW50ZWdlciBpbnRvIGEgc3RyaW5nIGluIGhleGFkZWNpbWFsLgogKiBAcHJpdmF0ZQogKiBAcGFyYW0ge251bWJlcn0gZGVjIHRoZSBudW1iZXIgdG8gY29udmVydC4KICogQHBhcmFtIHtu" + "dW1iZXJ9IGJ5dGVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gZ2VuZXJhdGUuCiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSByZXN1bHQuCiAqLwp2YXIgZGVjVG9IZXggPSBmdW5jdGlvbihkZWMsIGJ5dGVzKSB7" + "CiAgICB2YXIgaGV4ID0gIiIsIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYnl0ZXM7IGkrKykgewogICAgICAgIGhleCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGRlYyAmIDB4ZmYpOwogICAgICAgIGRlYyA9IGRl" + "YyA+Pj4gODsKICAgIH0KICAgIHJldHVybiBoZXg7Cn07CgovKioKICogR2VuZXJhdGUgdGhlIFVOSVggcGFydCBvZiB0aGUgZXh0ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzLgogKiBAcGFyYW0ge09iamVjdH0gdW5p" + "eFBlcm1pc3Npb25zIHRoZSB1bml4IHBlcm1pc3Npb25zIG9yIG51bGwuCiAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNEaXIgdHJ1ZSBpZiB0aGUgZW50cnkgaXMgYSBkaXJlY3RvcnksIGZhbHNlIG90aGVyd2lzZS4K" + "ICogQHJldHVybiB7TnVtYmVyfSBhIDMyIGJpdCBpbnRlZ2VyLgogKgogKiBhZGFwdGVkIGZyb20gaHR0cDovL3VuaXguc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzE0NzA1L3RoZS16aXAtZm9ybWF0cy1l" + "eHRlcm5hbC1maWxlLWF0dHJpYnV0ZSA6CiAqCiAqIFRUVFRzc3Ryd3hyd3hyd3gwMDAwMDAwMDAwQURWU0hSCiAqIF5eXl5fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGZpbGUgdHlwZSwgc2VlIHppcGlu" + "Zm8uYyAoVU5YXyopCiAqICAgICBeXl5fX19fX19fX19fX19fX19fX19fX19fX19fIHNldHVpZCwgc2V0Z2lkLCBzdGlja3kKICogICAgICAgIF5eXl5eXl5eXl9fX19fX19fX19fX19fX18gcGVybWlzc2lvbnMK" + "ICogICAgICAgICAgICAgICAgIF5eXl5eXl5eXl5fX19fX18gbm90IHVzZWQgPwogKiAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXiBET1MgYXR0cmlidXRlIGJpdHMgOiBBcmNoaXZlLCBEaXJlY3Rv" + "cnksIFZvbHVtZSBsYWJlbCwgU3lzdGVtIGZpbGUsIEhpZGRlbiwgUmVhZCBvbmx5CiAqLwp2YXIgZ2VuZXJhdGVVbml4RXh0ZXJuYWxGaWxlQXR0ciA9IGZ1bmN0aW9uICh1bml4UGVybWlzc2lvbnMsIGlzRGly" + "KSB7CgogICAgdmFyIHJlc3VsdCA9IHVuaXhQZXJtaXNzaW9uczsKICAgIGlmICghdW5peFBlcm1pc3Npb25zKSB7CiAgICAgICAgLy8gSSBjYW4ndCB1c2Ugb2N0YWwgdmFsdWVzIGluIHN0cmljdCBtb2RlLCBo" + "ZW5jZSB0aGUgaGV4YS4KICAgICAgICAvLyAgMDQwNzc1ID0+IDB4NDFmZAogICAgICAgIC8vIDAxMDA2NjQgPT4gMHg4MWI0CiAgICAgICAgcmVzdWx0ID0gaXNEaXIgPyAweDQxZmQgOiAweDgxYjQ7CiAgICB9" + "CiAgICByZXR1cm4gKHJlc3VsdCAmIDB4RkZGRikgPDwgMTY7Cn07CgovKioKICogR2VuZXJhdGUgdGhlIERPUyBwYXJ0IG9mIHRoZSBleHRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMuCiAqIEBwYXJhbSB7T2JqZWN0" + "fSBkb3NQZXJtaXNzaW9ucyB0aGUgZG9zIHBlcm1pc3Npb25zIG9yIG51bGwuCiAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNEaXIgdHJ1ZSBpZiB0aGUgZW50cnkgaXMgYSBkaXJlY3RvcnksIGZhbHNlIG90aGVyd2lz" + "ZS4KICogQHJldHVybiB7TnVtYmVyfSBhIDMyIGJpdCBpbnRlZ2VyLgogKgogKiBCaXQgMCAgICAgUmVhZC1Pbmx5CiAqIEJpdCAxICAgICBIaWRkZW4KICogQml0IDIgICAgIFN5c3RlbQogKiBCaXQgMyAgICAg" + "Vm9sdW1lIExhYmVsCiAqIEJpdCA0ICAgICBEaXJlY3RvcnkKICogQml0IDUgICAgIEFyY2hpdmUKICovCnZhciBnZW5lcmF0ZURvc0V4dGVybmFsRmlsZUF0dHIgPSBmdW5jdGlvbiAoZG9zUGVybWlzc2lvbnMs" + "IGlzRGlyKSB7CgogICAgLy8gdGhlIGRpciBmbGFnIGlzIGFscmVhZHkgc2V0IGZvciBjb21wYXRpYmlsaXR5CiAgICByZXR1cm4gKGRvc1Blcm1pc3Npb25zIHx8IDApICAmIDB4M0Y7Cn07CgovKioKICogR2Vu" + "ZXJhdGUgdGhlIHZhcmlvdXMgcGFydHMgdXNlZCBpbiB0aGUgY29uc3RydWN0aW9uIG9mIHRoZSBmaW5hbCB6aXAgZmlsZS4KICogQHBhcmFtIHtPYmplY3R9IHN0cmVhbUluZm8gdGhlIGhhc2ggd2l0aCBpbmZv" + "cm1hdGlvbiBhYm91dCB0aGUgY29tcHJlc3NlZCBmaWxlLgogKiBAcGFyYW0ge0Jvb2xlYW59IHN0cmVhbWVkQ29udGVudCBpcyB0aGUgY29udGVudCBzdHJlYW1lZCA/CiAqIEBwYXJhbSB7Qm9vbGVhbn0gc3Ry" + "ZWFtaW5nRW5kZWQgaXMgdGhlIHN0cmVhbSBmaW5pc2hlZCA/CiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgdGhlIGN1cnJlbnQgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSB6aXAgZmlsZS4KICogQHBh" + "cmFtIHtTdHJpbmd9IHBsYXRmb3JtIGxldCdzIHByZXRlbmQgd2UgYXJlIHRoaXMgcGxhdGZvcm0gKGNoYW5nZSBwbGF0Zm9ybSBkZXBlbmRlbnRzIGZpZWxkcykKICogQHBhcmFtIHtGdW5jdGlvbn0gZW5jb2Rl" + "RmlsZU5hbWUgdGhlIGZ1bmN0aW9uIHRvIGVuY29kZSB0aGUgZmlsZSBuYW1lIC8gY29tbWVudC4KICogQHJldHVybiB7T2JqZWN0fSB0aGUgemlwIHBhcnRzLgogKi8KdmFyIGdlbmVyYXRlWmlwUGFydHMgPSBm" + "dW5jdGlvbihzdHJlYW1JbmZvLCBzdHJlYW1lZENvbnRlbnQsIHN0cmVhbWluZ0VuZGVkLCBvZmZzZXQsIHBsYXRmb3JtLCBlbmNvZGVGaWxlTmFtZSkgewogICAgdmFyIGZpbGUgPSBzdHJlYW1JbmZvWydmaWxl" + "J10sCiAgICBjb21wcmVzc2lvbiA9IHN0cmVhbUluZm9bJ2NvbXByZXNzaW9uJ10sCiAgICB1c2VDdXN0b21FbmNvZGluZyA9IGVuY29kZUZpbGVOYW1lICE9PSB1dGY4LnV0ZjhlbmNvZGUsCiAgICBlbmNvZGVk" + "RmlsZU5hbWUgPSB1dGlscy50cmFuc2Zvcm1Ubygic3RyaW5nIiwgZW5jb2RlRmlsZU5hbWUoZmlsZS5uYW1lKSksCiAgICB1dGZFbmNvZGVkRmlsZU5hbWUgPSB1dGlscy50cmFuc2Zvcm1Ubygic3RyaW5nIiwg" + "dXRmOC51dGY4ZW5jb2RlKGZpbGUubmFtZSkpLAogICAgY29tbWVudCA9IGZpbGUuY29tbWVudCwKICAgIGVuY29kZWRDb21tZW50ID0gdXRpbHMudHJhbnNmb3JtVG8oInN0cmluZyIsIGVuY29kZUZpbGVOYW1l" + "KGNvbW1lbnQpKSwKICAgIHV0ZkVuY29kZWRDb21tZW50ID0gdXRpbHMudHJhbnNmb3JtVG8oInN0cmluZyIsIHV0ZjgudXRmOGVuY29kZShjb21tZW50KSksCiAgICB1c2VVVEY4Rm9yRmlsZU5hbWUgPSB1dGZF" + "bmNvZGVkRmlsZU5hbWUubGVuZ3RoICE9PSBmaWxlLm5hbWUubGVuZ3RoLAogICAgdXNlVVRGOEZvckNvbW1lbnQgPSB1dGZFbmNvZGVkQ29tbWVudC5sZW5ndGggIT09IGNvbW1lbnQubGVuZ3RoLAogICAgZG9z" + "VGltZSwKICAgIGRvc0RhdGUsCiAgICBleHRyYUZpZWxkcyA9ICIiLAogICAgdW5pY29kZVBhdGhFeHRyYUZpZWxkID0gIiIsCiAgICB1bmljb2RlQ29tbWVudEV4dHJhRmllbGQgPSAiIiwKICAgIGRpciA9IGZp" + "bGUuZGlyLAogICAgZGF0ZSA9IGZpbGUuZGF0ZTsKCgogICAgdmFyIGRhdGFJbmZvID0gewogICAgICAgIGNyYzMyIDogMCwKICAgICAgICBjb21wcmVzc2VkU2l6ZSA6IDAsCiAgICAgICAgdW5jb21wcmVzc2Vk" + "U2l6ZSA6IDAKICAgIH07CgogICAgLy8gaWYgdGhlIGNvbnRlbnQgaXMgc3RyZWFtZWQsIHRoZSBzaXplcy9jcmMzMiBhcmUgb25seSBhdmFpbGFibGUgQUZURVIKICAgIC8vIHRoZSBlbmQgb2YgdGhlIHN0cmVh" + "bS4KICAgIGlmICghc3RyZWFtZWRDb250ZW50IHx8IHN0cmVhbWluZ0VuZGVkKSB7CiAgICAgICAgZGF0YUluZm8uY3JjMzIgPSBzdHJlYW1JbmZvWydjcmMzMiddOwogICAgICAgIGRhdGFJbmZvLmNvbXByZXNz" + "ZWRTaXplID0gc3RyZWFtSW5mb1snY29tcHJlc3NlZFNpemUnXTsKICAgICAgICBkYXRhSW5mby51bmNvbXByZXNzZWRTaXplID0gc3RyZWFtSW5mb1sndW5jb21wcmVzc2VkU2l6ZSddOwogICAgfQoKICAgIHZh" + "ciBiaXRmbGFnID0gMDsKICAgIGlmIChzdHJlYW1lZENvbnRlbnQpIHsKICAgICAgICAvLyBCaXQgMzogdGhlIHNpemVzL2NyYzMyIGFyZSBzZXQgdG8gemVybyBpbiB0aGUgbG9jYWwgaGVhZGVyLgogICAgICAg" + "IC8vIFRoZSBjb3JyZWN0IHZhbHVlcyBhcmUgcHV0IGluIHRoZSBkYXRhIGRlc2NyaXB0b3IgaW1tZWRpYXRlbHkKICAgICAgICAvLyBmb2xsb3dpbmcgdGhlIGNvbXByZXNzZWQgZGF0YS4KICAgICAgICBiaXRm" + "bGFnIHw9IDB4MDAwODsKICAgIH0KICAgIGlmICghdXNlQ3VzdG9tRW5jb2RpbmcgJiYgKHVzZVVURjhGb3JGaWxlTmFtZSB8fCB1c2VVVEY4Rm9yQ29tbWVudCkpIHsKICAgICAgICAvLyBCaXQgMTE6IExhbmd1" + "YWdlIGVuY29kaW5nIGZsYWcgKEVGUykuCiAgICAgICAgYml0ZmxhZyB8PSAweDA4MDA7CiAgICB9CgoKICAgIHZhciBleHRGaWxlQXR0ciA9IDA7CiAgICB2YXIgdmVyc2lvbk1hZGVCeSA9IDA7CiAgICBpZiAo" + "ZGlyKSB7CiAgICAgICAgLy8gZG9zIG9yIHVuaXgsIHdlIHNldCB0aGUgZG9zIGRpciBmbGFnCiAgICAgICAgZXh0RmlsZUF0dHIgfD0gMHgwMDAxMDsKICAgIH0KICAgIGlmKHBsYXRmb3JtID09PSAiVU5JWCIp" + "IHsKICAgICAgICB2ZXJzaW9uTWFkZUJ5ID0gMHgwMzFFOyAvLyBVTklYLCB2ZXJzaW9uIDMuMAogICAgICAgIGV4dEZpbGVBdHRyIHw9IGdlbmVyYXRlVW5peEV4dGVybmFsRmlsZUF0dHIoZmlsZS51bml4UGVy" + "bWlzc2lvbnMsIGRpcik7CiAgICB9IGVsc2UgeyAvLyBET1Mgb3Igb3RoZXIsIGZhbGxiYWNrIHRvIERPUwogICAgICAgIHZlcnNpb25NYWRlQnkgPSAweDAwMTQ7IC8vIERPUywgdmVyc2lvbiAyLjAKICAgICAg" + "ICBleHRGaWxlQXR0ciB8PSBnZW5lcmF0ZURvc0V4dGVybmFsRmlsZUF0dHIoZmlsZS5kb3NQZXJtaXNzaW9ucywgZGlyKTsKICAgIH0KCiAgICAvLyBkYXRlCiAgICAvLyBAc2VlIGh0dHA6Ly93d3cuZGVsb3Jp" + "ZS5jb20vZGpncHAvZG9jL3JiaW50ZXIvaXQvNTIvMTMuaHRtbAogICAgLy8gQHNlZSBodHRwOi8vd3d3LmRlbG9yaWUuY29tL2RqZ3BwL2RvYy9yYmludGVyL2l0LzY1LzE2Lmh0bWwKICAgIC8vIEBzZWUgaHR0" + "cDovL3d3dy5kZWxvcmllLmNvbS9kamdwcC9kb2MvcmJpbnRlci9pdC82Ni8xNi5odG1sCgogICAgZG9zVGltZSA9IGRhdGUuZ2V0VVRDSG91cnMoKTsKICAgIGRvc1RpbWUgPSBkb3NUaW1lIDw8IDY7CiAgICBk" + "b3NUaW1lID0gZG9zVGltZSB8IGRhdGUuZ2V0VVRDTWludXRlcygpOwogICAgZG9zVGltZSA9IGRvc1RpbWUgPDwgNTsKICAgIGRvc1RpbWUgPSBkb3NUaW1lIHwgZGF0ZS5nZXRVVENTZWNvbmRzKCkgLyAyOwoK" + "ICAgIGRvc0RhdGUgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgLSAxOTgwOwogICAgZG9zRGF0ZSA9IGRvc0RhdGUgPDwgNDsKICAgIGRvc0RhdGUgPSBkb3NEYXRlIHwgKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEp" + "OwogICAgZG9zRGF0ZSA9IGRvc0RhdGUgPDwgNTsKICAgIGRvc0RhdGUgPSBkb3NEYXRlIHwgZGF0ZS5nZXRVVENEYXRlKCk7CgogICAgaWYgKHVzZVVURjhGb3JGaWxlTmFtZSkgewogICAgICAgIC8vIHNldCB0" + "aGUgdW5pY29kZSBwYXRoIGV4dHJhIGZpZWxkLiB1bnppcCBuZWVkcyBhdCBsZWFzdCBvbmUgZXh0cmEKICAgICAgICAvLyBmaWVsZCB0byBjb3JyZWN0bHkgaGFuZGxlIHVuaWNvZGUgcGF0aCwgc28gdXNpbmcg" + "dGhlIHBhdGggaXMgYXMgZ29vZAogICAgICAgIC8vIGFzIGFueSBvdGhlciBpbmZvcm1hdGlvbi4gVGhpcyBjb3VsZCBpbXByb3ZlIHRoZSBzaXR1YXRpb24gd2l0aAogICAgICAgIC8vIG90aGVyIGFyY2hpdmUg" + "bWFuYWdlcnMgdG9vLgogICAgICAgIC8vIFRoaXMgZmllbGQgaXMgdXN1YWxseSB1c2VkIHdpdGhvdXQgdGhlIHV0ZjggZmxhZywgd2l0aCBhIG5vbgogICAgICAgIC8vIHVuaWNvZGUgcGF0aCBpbiB0aGUgaGVh" + "ZGVyICh3aW5yYXIsIHdpbnppcCkuIFRoaXMgaGVscHMgKGEgYml0KQogICAgICAgIC8vIHdpdGggdGhlIG1lc3N5IFdpbmRvd3MnIGRlZmF1bHQgY29tcHJlc3NlZCBmb2xkZXJzIGZlYXR1cmUgYnV0CiAgICAg" + "ICAgLy8gYnJlYWtzIG9uIHA3emlwIHdoaWNoIGRvZXNuJ3Qgc2VlayB0aGUgdW5pY29kZSBwYXRoIGV4dHJhIGZpZWxkLgogICAgICAgIC8vIFNvIGZvciBub3csIFVURi04IGV2ZXJ5d2hlcmUgIQogICAgICAg" + "IHVuaWNvZGVQYXRoRXh0cmFGaWVsZCA9CiAgICAgICAgICAgIC8vIFZlcnNpb24KICAgICAgICAgICAgZGVjVG9IZXgoMSwgMSkgKwogICAgICAgICAgICAvLyBOYW1lQ1JDMzIKICAgICAgICAgICAgZGVjVG9I" + "ZXgoY3JjMzIoZW5jb2RlZEZpbGVOYW1lKSwgNCkgKwogICAgICAgICAgICAvLyBVbmljb2RlTmFtZQogICAgICAgICAgICB1dGZFbmNvZGVkRmlsZU5hbWU7CgogICAgICAgIGV4dHJhRmllbGRzICs9CiAgICAg" + "ICAgICAgIC8vIEluZm8tWklQIFVuaWNvZGUgUGF0aCBFeHRyYSBGaWVsZAogICAgICAgICAgICAiXHg3NVx4NzAiICsKICAgICAgICAgICAgLy8gc2l6ZQogICAgICAgICAgICBkZWNUb0hleCh1bmljb2RlUGF0" + "aEV4dHJhRmllbGQubGVuZ3RoLCAyKSArCiAgICAgICAgICAgIC8vIGNvbnRlbnQKICAgICAgICAgICAgdW5pY29kZVBhdGhFeHRyYUZpZWxkOwogICAgfQoKICAgIGlmKHVzZVVURjhGb3JDb21tZW50KSB7Cgog" + "ICAgICAgIHVuaWNvZGVDb21tZW50RXh0cmFGaWVsZCA9CiAgICAgICAgICAgIC8vIFZlcnNpb24KICAgICAgICAgICAgZGVjVG9IZXgoMSwgMSkgKwogICAgICAgICAgICAvLyBDb21tZW50Q1JDMzIKICAgICAg" + "ICAgICAgZGVjVG9IZXgoY3JjMzIoZW5jb2RlZENvbW1lbnQpLCA0KSArCiAgICAgICAgICAgIC8vIFVuaWNvZGVOYW1lCiAgICAgICAgICAgIHV0ZkVuY29kZWRDb21tZW50OwoKICAgICAgICBleHRyYUZpZWxk" + "cyArPQogICAgICAgICAgICAvLyBJbmZvLVpJUCBVbmljb2RlIFBhdGggRXh0cmEgRmllbGQKICAgICAgICAgICAgIlx4NzVceDYzIiArCiAgICAgICAgICAgIC8vIHNpemUKICAgICAgICAgICAgZGVjVG9IZXgo" + "dW5pY29kZUNvbW1lbnRFeHRyYUZpZWxkLmxlbmd0aCwgMikgKwogICAgICAgICAgICAvLyBjb250ZW50CiAgICAgICAgICAgIHVuaWNvZGVDb21tZW50RXh0cmFGaWVsZDsKICAgIH0KCiAgICB2YXIgaGVhZGVy" + "ID0gIiI7CgogICAgLy8gdmVyc2lvbiBuZWVkZWQgdG8gZXh0cmFjdAogICAgaGVhZGVyICs9ICJceDBBXHgwMCI7CiAgICAvLyBnZW5lcmFsIHB1cnBvc2UgYml0IGZsYWcKICAgIGhlYWRlciArPSBkZWNUb0hl" + "eChiaXRmbGFnLCAyKTsKICAgIC8vIGNvbXByZXNzaW9uIG1ldGhvZAogICAgaGVhZGVyICs9IGNvbXByZXNzaW9uLm1hZ2ljOwogICAgLy8gbGFzdCBtb2QgZmlsZSB0aW1lCiAgICBoZWFkZXIgKz0gZGVjVG9I" + "ZXgoZG9zVGltZSwgMik7CiAgICAvLyBsYXN0IG1vZCBmaWxlIGRhdGUKICAgIGhlYWRlciArPSBkZWNUb0hleChkb3NEYXRlLCAyKTsKICAgIC8vIGNyYy0zMgogICAgaGVhZGVyICs9IGRlY1RvSGV4KGRhdGFJ" + "bmZvLmNyYzMyLCA0KTsKICAgIC8vIGNvbXByZXNzZWQgc2l6ZQogICAgaGVhZGVyICs9IGRlY1RvSGV4KGRhdGFJbmZvLmNvbXByZXNzZWRTaXplLCA0KTsKICAgIC8vIHVuY29tcHJlc3NlZCBzaXplCiAgICBo" + "ZWFkZXIgKz0gZGVjVG9IZXgoZGF0YUluZm8udW5jb21wcmVzc2VkU2l6ZSwgNCk7CiAgICAvLyBmaWxlIG5hbWUgbGVuZ3RoCiAgICBoZWFkZXIgKz0gZGVjVG9IZXgoZW5jb2RlZEZpbGVOYW1lLmxlbmd0aCwg" + "Mik7CiAgICAvLyBleHRyYSBmaWVsZCBsZW5ndGgKICAgIGhlYWRlciArPSBkZWNUb0hleChleHRyYUZpZWxkcy5sZW5ndGgsIDIpOwoKCiAgICB2YXIgZmlsZVJlY29yZCA9IHNpZ25hdHVyZS5MT0NBTF9GSUxF" + "X0hFQURFUiArIGhlYWRlciArIGVuY29kZWRGaWxlTmFtZSArIGV4dHJhRmllbGRzOwoKICAgIHZhciBkaXJSZWNvcmQgPSBzaWduYXR1cmUuQ0VOVFJBTF9GSUxFX0hFQURFUiArCiAgICAgICAgLy8gdmVyc2lv" + "biBtYWRlIGJ5ICgwMDogRE9TKQogICAgICAgIGRlY1RvSGV4KHZlcnNpb25NYWRlQnksIDIpICsKICAgICAgICAvLyBmaWxlIGhlYWRlciAoY29tbW9uIHRvIGZpbGUgYW5kIGNlbnRyYWwgZGlyZWN0b3J5KQog" + "ICAgICAgIGhlYWRlciArCiAgICAgICAgLy8gZmlsZSBjb21tZW50IGxlbmd0aAogICAgICAgIGRlY1RvSGV4KGVuY29kZWRDb21tZW50Lmxlbmd0aCwgMikgKwogICAgICAgIC8vIGRpc2sgbnVtYmVyIHN0YXJ0" + "CiAgICAgICAgIlx4MDBceDAwIiArCiAgICAgICAgLy8gaW50ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzIFRPRE8KICAgICAgICAiXHgwMFx4MDAiICsKICAgICAgICAvLyBleHRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMK" + "ICAgICAgICBkZWNUb0hleChleHRGaWxlQXR0ciwgNCkgKwogICAgICAgIC8vIHJlbGF0aXZlIG9mZnNldCBvZiBsb2NhbCBoZWFkZXIKICAgICAgICBkZWNUb0hleChvZmZzZXQsIDQpICsKICAgICAgICAvLyBm" + "aWxlIG5hbWUKICAgICAgICBlbmNvZGVkRmlsZU5hbWUgKwogICAgICAgIC8vIGV4dHJhIGZpZWxkCiAgICAgICAgZXh0cmFGaWVsZHMgKwogICAgICAgIC8vIGZpbGUgY29tbWVudAogICAgICAgIGVuY29kZWRD" + "b21tZW50OwoKICAgIHJldHVybiB7CiAgICAgICAgZmlsZVJlY29yZDogZmlsZVJlY29yZCwKICAgICAgICBkaXJSZWNvcmQ6IGRpclJlY29yZAogICAgfTsKfTsKCi8qKgogKiBHZW5lcmF0ZSB0aGUgRU9DRCBy" + "ZWNvcmQuCiAqIEBwYXJhbSB7TnVtYmVyfSBlbnRyaWVzQ291bnQgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSB6aXAgZmlsZS4KICogQHBhcmFtIHtOdW1iZXJ9IGNlbnRyYWxEaXJMZW5ndGggdGhlIGxl" + "bmd0aCAoaW4gYnl0ZXMpIG9mIHRoZSBjZW50cmFsIGRpci4KICogQHBhcmFtIHtOdW1iZXJ9IGxvY2FsRGlyTGVuZ3RoIHRoZSBsZW5ndGggKGluIGJ5dGVzKSBvZiB0aGUgbG9jYWwgZGlyLgogKiBAcGFyYW0g" + "e1N0cmluZ30gY29tbWVudCB0aGUgemlwIGZpbGUgY29tbWVudCBhcyBhIGJpbmFyeSBzdHJpbmcuCiAqIEBwYXJhbSB7RnVuY3Rpb259IGVuY29kZUZpbGVOYW1lIHRoZSBmdW5jdGlvbiB0byBlbmNvZGUgdGhl" + "IGNvbW1lbnQuCiAqIEByZXR1cm4ge1N0cmluZ30gdGhlIEVPQ0QgcmVjb3JkLgogKi8KdmFyIGdlbmVyYXRlQ2VudHJhbERpcmVjdG9yeUVuZCA9IGZ1bmN0aW9uIChlbnRyaWVzQ291bnQsIGNlbnRyYWxEaXJM" + "ZW5ndGgsIGxvY2FsRGlyTGVuZ3RoLCBjb21tZW50LCBlbmNvZGVGaWxlTmFtZSkgewogICAgdmFyIGRpckVuZCA9ICIiOwogICAgdmFyIGVuY29kZWRDb21tZW50ID0gdXRpbHMudHJhbnNmb3JtVG8oInN0cmlu" + "ZyIsIGVuY29kZUZpbGVOYW1lKGNvbW1lbnQpKTsKCiAgICAvLyBlbmQgb2YgY2VudHJhbCBkaXIgc2lnbmF0dXJlCiAgICBkaXJFbmQgPSBzaWduYXR1cmUuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EICsKICAgICAg" + "ICAvLyBudW1iZXIgb2YgdGhpcyBkaXNrCiAgICAgICAgIlx4MDBceDAwIiArCiAgICAgICAgLy8gbnVtYmVyIG9mIHRoZSBkaXNrIHdpdGggdGhlIHN0YXJ0IG9mIHRoZSBjZW50cmFsIGRpcmVjdG9yeQogICAg" + "ICAgICJceDAwXHgwMCIgKwogICAgICAgIC8vIHRvdGFsIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBjZW50cmFsIGRpcmVjdG9yeSBvbiB0aGlzIGRpc2sKICAgICAgICBkZWNUb0hleChlbnRyaWVzQ291bnQs" + "IDIpICsKICAgICAgICAvLyB0b3RhbCBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgY2VudHJhbCBkaXJlY3RvcnkKICAgICAgICBkZWNUb0hleChlbnRyaWVzQ291bnQsIDIpICsKICAgICAgICAvLyBzaXplIG9m" + "IHRoZSBjZW50cmFsIGRpcmVjdG9yeSAgIDQgYnl0ZXMKICAgICAgICBkZWNUb0hleChjZW50cmFsRGlyTGVuZ3RoLCA0KSArCiAgICAgICAgLy8gb2Zmc2V0IG9mIHN0YXJ0IG9mIGNlbnRyYWwgZGlyZWN0b3J5" + "IHdpdGggcmVzcGVjdCB0byB0aGUgc3RhcnRpbmcgZGlzayBudW1iZXIKICAgICAgICBkZWNUb0hleChsb2NhbERpckxlbmd0aCwgNCkgKwogICAgICAgIC8vIC5aSVAgZmlsZSBjb21tZW50IGxlbmd0aAogICAg" + "ICAgIGRlY1RvSGV4KGVuY29kZWRDb21tZW50Lmxlbmd0aCwgMikgKwogICAgICAgIC8vIC5aSVAgZmlsZSBjb21tZW50CiAgICAgICAgZW5jb2RlZENvbW1lbnQ7CgogICAgcmV0dXJuIGRpckVuZDsKfTsKCi8q" + "KgogKiBHZW5lcmF0ZSBkYXRhIGRlc2NyaXB0b3JzIGZvciBhIGZpbGUgZW50cnkuCiAqIEBwYXJhbSB7T2JqZWN0fSBzdHJlYW1JbmZvIHRoZSBoYXNoIGdlbmVyYXRlZCBieSBhIHdvcmtlciwgY29udGFpbmlu" + "ZyBpbmZvcm1hdGlvbgogKiBvbiB0aGUgZmlsZSBlbnRyeS4KICogQHJldHVybiB7U3RyaW5nfSB0aGUgZGF0YSBkZXNjcmlwdG9ycy4KICovCnZhciBnZW5lcmF0ZURhdGFEZXNjcmlwdG9ycyA9IGZ1bmN0aW9u" + "IChzdHJlYW1JbmZvKSB7CiAgICB2YXIgZGVzY3JpcHRvciA9ICIiOwogICAgZGVzY3JpcHRvciA9IHNpZ25hdHVyZS5EQVRBX0RFU0NSSVBUT1IgKwogICAgICAgIC8vIGNyYy0zMiAgICAgICAgICAgICAgICAg" + "ICAgICAgICAgNCBieXRlcwogICAgICAgIGRlY1RvSGV4KHN0cmVhbUluZm9bJ2NyYzMyJ10sIDQpICsKICAgICAgICAvLyBjb21wcmVzc2VkIHNpemUgICAgICAgICAgICAgICAgIDQgYnl0ZXMKICAgICAgICBk" + "ZWNUb0hleChzdHJlYW1JbmZvWydjb21wcmVzc2VkU2l6ZSddLCA0KSArCiAgICAgICAgLy8gdW5jb21wcmVzc2VkIHNpemUgICAgICAgICAgICAgICA0IGJ5dGVzCiAgICAgICAgZGVjVG9IZXgoc3RyZWFtSW5m" + "b1sndW5jb21wcmVzc2VkU2l6ZSddLCA0KTsKCiAgICByZXR1cm4gZGVzY3JpcHRvcjsKfTsKCgovKioKICogQSB3b3JrZXIgdG8gY29uY2F0ZW5hdGUgb3RoZXIgd29ya2VycyB0byBjcmVhdGUgYSB6aXAgZmls" + "ZS4KICogQHBhcmFtIHtCb29sZWFufSBzdHJlYW1GaWxlcyBgdHJ1ZWAgdG8gc3RyZWFtIHRoZSBjb250ZW50IG9mIHRoZSBmaWxlcywKICogYGZhbHNlYCB0byBhY2N1bXVsYXRlIGl0LgogKiBAcGFyYW0ge1N0" + "cmluZ30gY29tbWVudCB0aGUgY29tbWVudCB0byB1c2UuCiAqIEBwYXJhbSB7U3RyaW5nfSBwbGF0Zm9ybSB0aGUgcGxhdGZvcm0gdG8gdXNlLCAiVU5JWCIgb3IgIkRPUyIuCiAqIEBwYXJhbSB7RnVuY3Rpb259" + "IGVuY29kZUZpbGVOYW1lIHRoZSBmdW5jdGlvbiB0byBlbmNvZGUgZmlsZSBuYW1lcyBhbmQgY29tbWVudHMuCiAqLwpmdW5jdGlvbiBaaXBGaWxlV29ya2VyKHN0cmVhbUZpbGVzLCBjb21tZW50LCBwbGF0Zm9y" + "bSwgZW5jb2RlRmlsZU5hbWUpIHsKICAgIEdlbmVyaWNXb3JrZXIuY2FsbCh0aGlzLCAiWmlwRmlsZVdvcmtlciIpOwogICAgLy8gVGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIHNvIGZhci4gVGhpcyBkb2Vz" + "bid0IGNvdW50IGFjY3VtdWxhdGVkIGNodW5rcy4KICAgIHRoaXMuYnl0ZXNXcml0dGVuID0gMDsKICAgIC8vIFRoZSBjb21tZW50IG9mIHRoZSB6aXAgZmlsZQogICAgdGhpcy56aXBDb21tZW50ID0gY29tbWVu" + "dDsKICAgIC8vIFRoZSBwbGF0Zm9ybSAiZ2VuZXJhdGluZyIgdGhlIHppcCBmaWxlLgogICAgdGhpcy56aXBQbGF0Zm9ybSA9IHBsYXRmb3JtOwogICAgLy8gdGhlIGZ1bmN0aW9uIHRvIGVuY29kZSBmaWxlIG5h" + "bWVzIGFuZCBjb21tZW50cy4KICAgIHRoaXMuZW5jb2RlRmlsZU5hbWUgPSBlbmNvZGVGaWxlTmFtZTsKICAgIC8vIFNob3VsZCB3ZSBzdHJlYW0gdGhlIGNvbnRlbnQgb2YgdGhlIGZpbGVzID8KICAgIHRoaXMu" + "c3RyZWFtRmlsZXMgPSBzdHJlYW1GaWxlczsKICAgIC8vIElmIGBzdHJlYW1GaWxlc2AgaXMgZmFsc2UsIHdlIHdpbGwgbmVlZCB0byBhY2N1bXVsYXRlIHRoZSBjb250ZW50IG9mIHRoZQogICAgLy8gZmlsZXMg" + "dG8gY2FsY3VsYXRlIHNpemVzIC8gY3JjMzIgKGFuZCB3cml0ZSB0aGVtICpiZWZvcmUqIHRoZSBjb250ZW50KS4KICAgIC8vIFRoaXMgYm9vbGVhbiBpbmRpY2F0ZXMgaWYgd2UgYXJlIGFjY3VtdWxhdGluZyBj" + "aHVua3MgKGl0IHdpbGwgY2hhbmdlIGEgbG90CiAgICAvLyBkdXJpbmcgdGhlIGxpZmV0aW1lIG9mIHRoaXMgd29ya2VyKS4KICAgIHRoaXMuYWNjdW11bGF0ZSA9IGZhbHNlOwogICAgLy8gVGhlIGJ1ZmZlciBy" + "ZWNlaXZpbmcgY2h1bmtzIHdoZW4gYWNjdW11bGF0aW5nIGNvbnRlbnQuCiAgICB0aGlzLmNvbnRlbnRCdWZmZXIgPSBbXTsKICAgIC8vIFRoZSBsaXN0IG9mIGdlbmVyYXRlZCBkaXJlY3RvcnkgcmVjb3Jkcy4K" + "ICAgIHRoaXMuZGlyUmVjb3JkcyA9IFtdOwogICAgLy8gVGhlIG9mZnNldCAoaW4gYnl0ZXMpIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgemlwIGZpbGUgZm9yIHRoZSBjdXJyZW50IHNvdXJjZS4KICAgIHRo" + "aXMuY3VycmVudFNvdXJjZU9mZnNldCA9IDA7CiAgICAvLyBUaGUgdG90YWwgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhpcyB6aXAgZmlsZS4KICAgIHRoaXMuZW50cmllc0NvdW50ID0gMDsKICAgIC8vIHRoZSBu" + "YW1lIG9mIHRoZSBmaWxlIGN1cnJlbnRseSBiZWluZyBhZGRlZCwgbnVsbCB3aGVuIGhhbmRsaW5nIHRoZSBlbmQgb2YgdGhlIHppcCBmaWxlLgogICAgLy8gVXNlZCBmb3IgdGhlIGVtaXR0ZWQgbWV0YWRhdGEu" + "CiAgICB0aGlzLmN1cnJlbnRGaWxlID0gbnVsbDsKCgoKICAgIHRoaXMuX3NvdXJjZXMgPSBbXTsKfQp1dGlscy5pbmhlcml0cyhaaXBGaWxlV29ya2VyLCBHZW5lcmljV29ya2VyKTsKCi8qKgogKiBAc2VlIEdl" + "bmVyaWNXb3JrZXIucHVzaAogKi8KWmlwRmlsZVdvcmtlci5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaykgewoKICAgIHZhciBjdXJyZW50RmlsZVBlcmNlbnQgPSBjaHVuay5tZXRhLnBlcmNlbnQg" + "fHwgMDsKICAgIHZhciBlbnRyaWVzQ291bnQgPSB0aGlzLmVudHJpZXNDb3VudDsKICAgIHZhciByZW1haW5pbmdGaWxlcyA9IHRoaXMuX3NvdXJjZXMubGVuZ3RoOwoKICAgIGlmKHRoaXMuYWNjdW11bGF0ZSkg" + "ewogICAgICAgIHRoaXMuY29udGVudEJ1ZmZlci5wdXNoKGNodW5rKTsKICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5ieXRlc1dyaXR0ZW4gKz0gY2h1bmsuZGF0YS5sZW5ndGg7CgogICAgICAgIEdlbmVyaWNX" + "b3JrZXIucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCB7CiAgICAgICAgICAgIGRhdGEgOiBjaHVuay5kYXRhLAogICAgICAgICAgICBtZXRhIDogewogICAgICAgICAgICAgICAgY3VycmVudEZpbGUgOiB0aGlz" + "LmN1cnJlbnRGaWxlLAogICAgICAgICAgICAgICAgcGVyY2VudCA6IGVudHJpZXNDb3VudCA/IChjdXJyZW50RmlsZVBlcmNlbnQgKyAxMDAgKiAoZW50cmllc0NvdW50IC0gcmVtYWluaW5nRmlsZXMgLSAxKSkg" + "LyBlbnRyaWVzQ291bnQgOiAxMDAKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9OwoKLyoqCiAqIFRoZSB3b3JrZXIgc3RhcnRlZCBhIG5ldyBzb3VyY2UgKGFuIG90aGVyIHdvcmtlcikuCiAqIEBw" + "YXJhbSB7T2JqZWN0fSBzdHJlYW1JbmZvIHRoZSBzdHJlYW1JbmZvIG9iamVjdCBmcm9tIHRoZSBuZXcgc291cmNlLgogKi8KWmlwRmlsZVdvcmtlci5wcm90b3R5cGUub3BlbmVkU291cmNlID0gZnVuY3Rpb24g" + "KHN0cmVhbUluZm8pIHsKICAgIHRoaXMuY3VycmVudFNvdXJjZU9mZnNldCA9IHRoaXMuYnl0ZXNXcml0dGVuOwogICAgdGhpcy5jdXJyZW50RmlsZSA9IHN0cmVhbUluZm9bJ2ZpbGUnXS5uYW1lOwoKICAgIHZh" + "ciBzdHJlYW1lZENvbnRlbnQgPSB0aGlzLnN0cmVhbUZpbGVzICYmICFzdHJlYW1JbmZvWydmaWxlJ10uZGlyOwoKICAgIC8vIGRvbid0IHN0cmVhbSBmb2xkZXJzIChiZWNhdXNlIHRoZXkgZG9uJ3QgaGF2ZSBh" + "bnkgY29udGVudCkKICAgIGlmKHN0cmVhbWVkQ29udGVudCkgewogICAgICAgIHZhciByZWNvcmQgPSBnZW5lcmF0ZVppcFBhcnRzKHN0cmVhbUluZm8sIHN0cmVhbWVkQ29udGVudCwgZmFsc2UsIHRoaXMuY3Vy" + "cmVudFNvdXJjZU9mZnNldCwgdGhpcy56aXBQbGF0Zm9ybSwgdGhpcy5lbmNvZGVGaWxlTmFtZSk7CiAgICAgICAgdGhpcy5wdXNoKHsKICAgICAgICAgICAgZGF0YSA6IHJlY29yZC5maWxlUmVjb3JkLAogICAg" + "ICAgICAgICBtZXRhIDoge3BlcmNlbnQ6MH0KICAgICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgICAgLy8gd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgd2hvbGUgZmlsZSBiZWZvcmUgcHVzaGluZyBhbnl0aGlu" + "ZwogICAgICAgIHRoaXMuYWNjdW11bGF0ZSA9IHRydWU7CiAgICB9Cn07CgovKioKICogVGhlIHdvcmtlciBmaW5pc2hlZCBhIHNvdXJjZSAoYW4gb3RoZXIgd29ya2VyKS4KICogQHBhcmFtIHtPYmplY3R9IHN0" + "cmVhbUluZm8gdGhlIHN0cmVhbUluZm8gb2JqZWN0IGZyb20gdGhlIGZpbmlzaGVkIHNvdXJjZS4KICovClppcEZpbGVXb3JrZXIucHJvdG90eXBlLmNsb3NlZFNvdXJjZSA9IGZ1bmN0aW9uIChzdHJlYW1JbmZv" + "KSB7CiAgICB0aGlzLmFjY3VtdWxhdGUgPSBmYWxzZTsKICAgIHZhciBzdHJlYW1lZENvbnRlbnQgPSB0aGlzLnN0cmVhbUZpbGVzICYmICFzdHJlYW1JbmZvWydmaWxlJ10uZGlyOwogICAgdmFyIHJlY29yZCA9" + "IGdlbmVyYXRlWmlwUGFydHMoc3RyZWFtSW5mbywgc3RyZWFtZWRDb250ZW50LCB0cnVlLCB0aGlzLmN1cnJlbnRTb3VyY2VPZmZzZXQsIHRoaXMuemlwUGxhdGZvcm0sIHRoaXMuZW5jb2RlRmlsZU5hbWUpOwoK" + "ICAgIHRoaXMuZGlyUmVjb3Jkcy5wdXNoKHJlY29yZC5kaXJSZWNvcmQpOwogICAgaWYoc3RyZWFtZWRDb250ZW50KSB7CiAgICAgICAgLy8gYWZ0ZXIgdGhlIHN0cmVhbWVkIGZpbGUsIHdlIHB1dCBkYXRhIGRl" + "c2NyaXB0b3JzCiAgICAgICAgdGhpcy5wdXNoKHsKICAgICAgICAgICAgZGF0YSA6IGdlbmVyYXRlRGF0YURlc2NyaXB0b3JzKHN0cmVhbUluZm8pLAogICAgICAgICAgICBtZXRhIDoge3BlcmNlbnQ6MTAwfQog" + "ICAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgICAvLyB0aGUgY29udGVudCB3YXNuJ3Qgc3RyZWFtZWQsIHdlIG5lZWQgdG8gcHVzaCBldmVyeXRoaW5nIG5vdwogICAgICAgIC8vIGZpcnN0IHRoZSBmaWxl" + "IHJlY29yZCwgdGhlbiB0aGUgY29udGVudAogICAgICAgIHRoaXMucHVzaCh7CiAgICAgICAgICAgIGRhdGEgOiByZWNvcmQuZmlsZVJlY29yZCwKICAgICAgICAgICAgbWV0YSA6IHtwZXJjZW50OjB9CiAgICAg" + "ICAgfSk7CiAgICAgICAgd2hpbGUodGhpcy5jb250ZW50QnVmZmVyLmxlbmd0aCkgewogICAgICAgICAgICB0aGlzLnB1c2godGhpcy5jb250ZW50QnVmZmVyLnNoaWZ0KCkpOwogICAgICAgIH0KICAgIH0KICAg" + "IHRoaXMuY3VycmVudEZpbGUgPSBudWxsOwp9OwoKLyoqCiAqIEBzZWUgR2VuZXJpY1dvcmtlci5mbHVzaAogKi8KWmlwRmlsZVdvcmtlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKSB7CgogICAgdmFy" + "IGxvY2FsRGlyTGVuZ3RoID0gdGhpcy5ieXRlc1dyaXR0ZW47CiAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5kaXJSZWNvcmRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdGhpcy5wdXNoKHsKICAgICAgICAg" + "ICAgZGF0YSA6IHRoaXMuZGlyUmVjb3Jkc1tpXSwKICAgICAgICAgICAgbWV0YSA6IHtwZXJjZW50OjEwMH0KICAgICAgICB9KTsKICAgIH0KICAgIHZhciBjZW50cmFsRGlyTGVuZ3RoID0gdGhpcy5ieXRlc1dy" + "aXR0ZW4gLSBsb2NhbERpckxlbmd0aDsKCiAgICB2YXIgZGlyRW5kID0gZ2VuZXJhdGVDZW50cmFsRGlyZWN0b3J5RW5kKHRoaXMuZGlyUmVjb3Jkcy5sZW5ndGgsIGNlbnRyYWxEaXJMZW5ndGgsIGxvY2FsRGly" + "TGVuZ3RoLCB0aGlzLnppcENvbW1lbnQsIHRoaXMuZW5jb2RlRmlsZU5hbWUpOwoKICAgIHRoaXMucHVzaCh7CiAgICAgICAgZGF0YSA6IGRpckVuZCwKICAgICAgICBtZXRhIDoge3BlcmNlbnQ6MTAwfQogICAg" + "fSk7Cn07CgovKioKICogUHJlcGFyZSB0aGUgbmV4dCBzb3VyY2UgdG8gYmUgcmVhZC4KICovClppcEZpbGVXb3JrZXIucHJvdG90eXBlLnByZXBhcmVOZXh0U291cmNlID0gZnVuY3Rpb24gKCkgewogICAgdGhp" + "cy5wcmV2aW91cyA9IHRoaXMuX3NvdXJjZXMuc2hpZnQoKTsKICAgIHRoaXMub3BlbmVkU291cmNlKHRoaXMucHJldmlvdXMuc3RyZWFtSW5mbyk7CiAgICBpZiAodGhpcy5pc1BhdXNlZCkgewogICAgICAgIHRo" + "aXMucHJldmlvdXMucGF1c2UoKTsKICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5wcmV2aW91cy5yZXN1bWUoKTsKICAgIH0KfTsKCi8qKgogKiBAc2VlIEdlbmVyaWNXb3JrZXIucmVnaXN0ZXJQcmV2aW91cwog" + "Ki8KWmlwRmlsZVdvcmtlci5wcm90b3R5cGUucmVnaXN0ZXJQcmV2aW91cyA9IGZ1bmN0aW9uIChwcmV2aW91cykgewogICAgdGhpcy5fc291cmNlcy5wdXNoKHByZXZpb3VzKTsKICAgIHZhciBzZWxmID0gdGhp" + "czsKCiAgICBwcmV2aW91cy5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgewogICAgICAgIHNlbGYucHJvY2Vzc0NodW5rKGNodW5rKTsKICAgIH0pOwogICAgcHJldmlvdXMub24oJ2VuZCcsIGZ1bmN0aW9u" + "ICgpIHsKICAgICAgICBzZWxmLmNsb3NlZFNvdXJjZShzZWxmLnByZXZpb3VzLnN0cmVhbUluZm8pOwogICAgICAgIGlmKHNlbGYuX3NvdXJjZXMubGVuZ3RoKSB7CiAgICAgICAgICAgIHNlbGYucHJlcGFyZU5l" + "eHRTb3VyY2UoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzZWxmLmVuZCgpOwogICAgICAgIH0KICAgIH0pOwogICAgcHJldmlvdXMub24oJ2Vycm9yJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICBz" + "ZWxmLmVycm9yKGUpOwogICAgfSk7CiAgICByZXR1cm4gdGhpczsKfTsKCi8qKgogKiBAc2VlIEdlbmVyaWNXb3JrZXIucmVzdW1lCiAqLwpaaXBGaWxlV29ya2VyLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlv" + "biAoKSB7CiAgICBpZighR2VuZXJpY1dvcmtlci5wcm90b3R5cGUucmVzdW1lLmNhbGwodGhpcykpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKCF0aGlzLnByZXZpb3VzICYmIHRoaXMu" + "X3NvdXJjZXMubGVuZ3RoKSB7CiAgICAgICAgdGhpcy5wcmVwYXJlTmV4dFNvdXJjZSgpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKCF0aGlzLnByZXZpb3VzICYmICF0aGlzLl9zb3VyY2Vz" + "Lmxlbmd0aCAmJiAhdGhpcy5nZW5lcmF0ZWRFcnJvcikgewogICAgICAgIHRoaXMuZW5kKCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9Cn07CgovKioKICogQHNlZSBHZW5lcmljV29ya2VyLmVycm9yCiAq" + "LwpaaXBGaWxlV29ya2VyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlKSB7CiAgICB2YXIgc291cmNlcyA9IHRoaXMuX3NvdXJjZXM7CiAgICBpZighR2VuZXJpY1dvcmtlci5wcm90b3R5cGUuZXJyb3Iu" + "Y2FsbCh0aGlzLCBlKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzb3VyY2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgc291" + "cmNlc1tpXS5lcnJvcihlKTsKICAgICAgICB9IGNhdGNoKGUpIHsKICAgICAgICAgICAgLy8gdGhlIGBlcnJvcmAgZXhwbG9kZWQsIG5vdGhpbmcgdG8gZG8KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1" + "ZTsKfTsKCi8qKgogKiBAc2VlIEdlbmVyaWNXb3JrZXIubG9jawogKi8KWmlwRmlsZVdvcmtlci5wcm90b3R5cGUubG9jayA9IGZ1bmN0aW9uICgpIHsKICAgIEdlbmVyaWNXb3JrZXIucHJvdG90eXBlLmxvY2su" + "Y2FsbCh0aGlzKTsKICAgIHZhciBzb3VyY2VzID0gdGhpcy5fc291cmNlczsKICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzb3VyY2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgc291cmNlc1tpXS5sb2NrKCk7CiAg" + "ICB9Cn07Cgptb2R1bGUuZXhwb3J0cyA9IFppcEZpbGVXb3JrZXI7Cgp9LHsiLi4vY3JjMzIiOjQsIi4uL3NpZ25hdHVyZSI6MjMsIi4uL3N0cmVhbS9HZW5lcmljV29ya2VyIjoyOCwiLi4vdXRmOCI6MzEsIi4u" + "L3V0aWxzIjozMn1dLDk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewondXNlIHN0cmljdCc7Cgp2YXIgY29tcHJlc3Npb25zID0gcmVxdWlyZSgnLi4vY29tcHJlc3Npb25zJyk7CnZhciBaaXBG" + "aWxlV29ya2VyID0gcmVxdWlyZSgnLi9aaXBGaWxlV29ya2VyJyk7CgovKioKICogRmluZCB0aGUgY29tcHJlc3Npb24gdG8gdXNlLgogKiBAcGFyYW0ge1N0cmluZ30gZmlsZUNvbXByZXNzaW9uIHRoZSBjb21w" + "cmVzc2lvbiBkZWZpbmVkIGF0IHRoZSBmaWxlIGxldmVsLCBpZiBhbnkuCiAqIEBwYXJhbSB7U3RyaW5nfSB6aXBDb21wcmVzc2lvbiB0aGUgY29tcHJlc3Npb24gZGVmaW5lZCBhdCB0aGUgbG9hZCgpIGxldmVs" + "LgogKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBjb21wcmVzc2lvbiBvYmplY3QgdG8gdXNlLgogKi8KdmFyIGdldENvbXByZXNzaW9uID0gZnVuY3Rpb24gKGZpbGVDb21wcmVzc2lvbiwgemlwQ29tcHJlc3Npb24p" + "IHsKCiAgICB2YXIgY29tcHJlc3Npb25OYW1lID0gZmlsZUNvbXByZXNzaW9uIHx8IHppcENvbXByZXNzaW9uOwogICAgdmFyIGNvbXByZXNzaW9uID0gY29tcHJlc3Npb25zW2NvbXByZXNzaW9uTmFtZV07CiAg" + "ICBpZiAoIWNvbXByZXNzaW9uKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNvbXByZXNzaW9uTmFtZSArICIgaXMgbm90IGEgdmFsaWQgY29tcHJlc3Npb24gbWV0aG9kICEiKTsKICAgIH0KICAgIHJldHVy" + "biBjb21wcmVzc2lvbjsKfTsKCi8qKgogKiBDcmVhdGUgYSB3b3JrZXIgdG8gZ2VuZXJhdGUgYSB6aXAgZmlsZS4KICogQHBhcmFtIHtKU1ppcH0gemlwIHRoZSBKU1ppcCBpbnN0YW5jZSBhdCB0aGUgcmlnaHQg" + "cm9vdCBsZXZlbC4KICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgdG8gZ2VuZXJhdGUgdGhlIHppcCBmaWxlLgogKiBAcGFyYW0ge1N0cmluZ30gY29tbWVudCB0aGUgY29tbWVudCB0byB1c2UuCiAqLwpleHBv" + "cnRzLmdlbmVyYXRlV29ya2VyID0gZnVuY3Rpb24gKHppcCwgb3B0aW9ucywgY29tbWVudCkgewoKICAgIHZhciB6aXBGaWxlV29ya2VyID0gbmV3IFppcEZpbGVXb3JrZXIob3B0aW9ucy5zdHJlYW1GaWxlcywg" + "Y29tbWVudCwgb3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucy5lbmNvZGVGaWxlTmFtZSk7CiAgICB2YXIgZW50cmllc0NvdW50ID0gMDsKICAgIHRyeSB7CgogICAgICAgIHppcC5mb3JFYWNoKGZ1bmN0aW9uIChy" + "ZWxhdGl2ZVBhdGgsIGZpbGUpIHsKICAgICAgICAgICAgZW50cmllc0NvdW50Kys7CiAgICAgICAgICAgIHZhciBjb21wcmVzc2lvbiA9IGdldENvbXByZXNzaW9uKGZpbGUub3B0aW9ucy5jb21wcmVzc2lvbiwg" + "b3B0aW9ucy5jb21wcmVzc2lvbik7CiAgICAgICAgICAgIHZhciBjb21wcmVzc2lvbk9wdGlvbnMgPSBmaWxlLm9wdGlvbnMuY29tcHJlc3Npb25PcHRpb25zIHx8IG9wdGlvbnMuY29tcHJlc3Npb25PcHRpb25z" + "IHx8IHt9OwogICAgICAgICAgICB2YXIgZGlyID0gZmlsZS5kaXIsIGRhdGUgPSBmaWxlLmRhdGU7CgogICAgICAgICAgICBmaWxlLl9jb21wcmVzc1dvcmtlcihjb21wcmVzc2lvbiwgY29tcHJlc3Npb25PcHRp" + "b25zKQogICAgICAgICAgICAud2l0aFN0cmVhbUluZm8oImZpbGUiLCB7CiAgICAgICAgICAgICAgICBuYW1lIDogcmVsYXRpdmVQYXRoLAogICAgICAgICAgICAgICAgZGlyIDogZGlyLAogICAgICAgICAgICAg" + "ICAgZGF0ZSA6IGRhdGUsCiAgICAgICAgICAgICAgICBjb21tZW50IDogZmlsZS5jb21tZW50IHx8ICIiLAogICAgICAgICAgICAgICAgdW5peFBlcm1pc3Npb25zIDogZmlsZS51bml4UGVybWlzc2lvbnMsCiAg" + "ICAgICAgICAgICAgICBkb3NQZXJtaXNzaW9ucyA6IGZpbGUuZG9zUGVybWlzc2lvbnMKICAgICAgICAgICAgfSkKICAgICAgICAgICAgLnBpcGUoemlwRmlsZVdvcmtlcik7CiAgICAgICAgfSk7CiAgICAgICAg" + "emlwRmlsZVdvcmtlci5lbnRyaWVzQ291bnQgPSBlbnRyaWVzQ291bnQ7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgemlwRmlsZVdvcmtlci5lcnJvcihlKTsKICAgIH0KCiAgICByZXR1cm4gemlwRmlsZVdv" + "cmtlcjsKfTsKCn0seyIuLi9jb21wcmVzc2lvbnMiOjMsIi4vWmlwRmlsZVdvcmtlciI6OH1dLDEwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwoKLyoqCiAqIFJlcHJl" + "c2VudGF0aW9uIGEgb2YgemlwIGZpbGUgaW4ganMKICogQGNvbnN0cnVjdG9yCiAqLwpmdW5jdGlvbiBKU1ppcCgpIHsKICAgIC8vIGlmIHRoaXMgY29uc3RydWN0b3IgaXMgdXNlZCB3aXRob3V0IGBuZXdgLCBp" + "dCBhZGRzIGBuZXdgIGJlZm9yZSBpdHNlbGY6CiAgICBpZighKHRoaXMgaW5zdGFuY2VvZiBKU1ppcCkpIHsKICAgICAgICByZXR1cm4gbmV3IEpTWmlwKCk7CiAgICB9CgogICAgaWYoYXJndW1lbnRzLmxlbmd0" + "aCkgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiVGhlIGNvbnN0cnVjdG9yIHdpdGggcGFyYW1ldGVycyBoYXMgYmVlbiByZW1vdmVkIGluIEpTWmlwIDMuMCwgcGxlYXNlIGNoZWNrIHRoZSB1cGdyYWRlIGd1" + "aWRlLiIpOwogICAgfQoKICAgIC8vIG9iamVjdCBjb250YWluaW5nIHRoZSBmaWxlcyA6CiAgICAvLyB7CiAgICAvLyAgICJmb2xkZXIvIiA6IHsuLi59LAogICAgLy8gICAiZm9sZGVyL2RhdGEudHh0IiA6IHsu" + "Li59CiAgICAvLyB9CiAgICB0aGlzLmZpbGVzID0ge307CgogICAgdGhpcy5jb21tZW50ID0gbnVsbDsKCiAgICAvLyBXaGVyZSB3ZSBhcmUgaW4gdGhlIGhpZXJhcmNoeQogICAgdGhpcy5yb290ID0gIiI7CiAg" + "ICB0aGlzLmNsb25lID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIG5ld09iaiA9IG5ldyBKU1ppcCgpOwogICAgICAgIGZvciAodmFyIGkgaW4gdGhpcykgewogICAgICAgICAgICBpZiAodHlwZW9mIHRoaXNb" + "aV0gIT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICAgIG5ld09ialtpXSA9IHRoaXNbaV07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ld09iajsKICAgIH07Cn0KSlNaaXAu" + "cHJvdG90eXBlID0gcmVxdWlyZSgnLi9vYmplY3QnKTsKSlNaaXAucHJvdG90eXBlLmxvYWRBc3luYyA9IHJlcXVpcmUoJy4vbG9hZCcpOwpKU1ppcC5zdXBwb3J0ID0gcmVxdWlyZSgnLi9zdXBwb3J0Jyk7CkpT" + "WmlwLmRlZmF1bHRzID0gcmVxdWlyZSgnLi9kZWZhdWx0cycpOwoKLy8gVE9ETyBmaW5kIGEgYmV0dGVyIHdheSB0byBoYW5kbGUgdGhpcyB2ZXJzaW9uLAovLyBhIHJlcXVpcmUoJ3BhY2thZ2UuanNvbicpLnZl" + "cnNpb24gZG9lc24ndCB3b3JrIHdpdGggd2VicGFjaywgc2VlICMzMjcKSlNaaXAudmVyc2lvbiA9ICIzLjUuMCI7CgpKU1ppcC5sb2FkQXN5bmMgPSBmdW5jdGlvbiAoY29udGVudCwgb3B0aW9ucykgewogICAg" + "cmV0dXJuIG5ldyBKU1ppcCgpLmxvYWRBc3luYyhjb250ZW50LCBvcHRpb25zKTsKfTsKCkpTWmlwLmV4dGVybmFsID0gcmVxdWlyZSgiLi9leHRlcm5hbCIpOwptb2R1bGUuZXhwb3J0cyA9IEpTWmlwOwoKfSx7" + "Ii4vZGVmYXVsdHMiOjUsIi4vZXh0ZXJuYWwiOjYsIi4vbG9hZCI6MTEsIi4vb2JqZWN0IjoxNSwiLi9zdXBwb3J0IjozMH1dLDExOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJp" + "Y3QnOwp2YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7CnZhciBleHRlcm5hbCA9IHJlcXVpcmUoIi4vZXh0ZXJuYWwiKTsKdmFyIHV0ZjggPSByZXF1aXJlKCcuL3V0ZjgnKTsKdmFyIHV0aWxzID0gcmVx" + "dWlyZSgnLi91dGlscycpOwp2YXIgWmlwRW50cmllcyA9IHJlcXVpcmUoJy4vemlwRW50cmllcycpOwp2YXIgQ3JjMzJQcm9iZSA9IHJlcXVpcmUoJy4vc3RyZWFtL0NyYzMyUHJvYmUnKTsKdmFyIG5vZGVqc1V0" + "aWxzID0gcmVxdWlyZSgiLi9ub2RlanNVdGlscyIpOwoKLyoqCiAqIENoZWNrIHRoZSBDUkMzMiBvZiBhbiBlbnRyeS4KICogQHBhcmFtIHtaaXBFbnRyeX0gemlwRW50cnkgdGhlIHppcCBlbnRyeSB0byBjaGVj" + "ay4KICogQHJldHVybiB7UHJvbWlzZX0gdGhlIHJlc3VsdC4KICovCmZ1bmN0aW9uIGNoZWNrRW50cnlDUkMzMih6aXBFbnRyeSkgewogICAgcmV0dXJuIG5ldyBleHRlcm5hbC5Qcm9taXNlKGZ1bmN0aW9uIChy" + "ZXNvbHZlLCByZWplY3QpIHsKICAgICAgICB2YXIgd29ya2VyID0gemlwRW50cnkuZGVjb21wcmVzc2VkLmdldENvbnRlbnRXb3JrZXIoKS5waXBlKG5ldyBDcmMzMlByb2JlKCkpOwogICAgICAgIHdvcmtlci5v" + "bigiZXJyb3IiLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICByZWplY3QoZSk7CiAgICAgICAgfSkKICAgICAgICAub24oImVuZCIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgaWYgKHdvcmtlci5zdHJl" + "YW1JbmZvLmNyYzMyICE9PSB6aXBFbnRyeS5kZWNvbXByZXNzZWQuY3JjMzIpIHsKICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgOiBDUkMzMiBtaXNtYXRjaCIpKTsKICAg" + "ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgfQogICAgICAgIH0pCiAgICAgICAgLnJlc3VtZSgpOwogICAgfSk7Cn0KCm1vZHVsZS5leHBvcnRzID0gZnVu" + "Y3Rpb24oZGF0YSwgb3B0aW9ucykgewogICAgdmFyIHppcCA9IHRoaXM7CiAgICBvcHRpb25zID0gdXRpbHMuZXh0ZW5kKG9wdGlvbnMgfHwge30sIHsKICAgICAgICBiYXNlNjQ6IGZhbHNlLAogICAgICAgIGNo" + "ZWNrQ1JDMzI6IGZhbHNlLAogICAgICAgIG9wdGltaXplZEJpbmFyeVN0cmluZzogZmFsc2UsCiAgICAgICAgY3JlYXRlRm9sZGVyczogZmFsc2UsCiAgICAgICAgZGVjb2RlRmlsZU5hbWU6IHV0ZjgudXRmOGRl" + "Y29kZQogICAgfSk7CgogICAgaWYgKG5vZGVqc1V0aWxzLmlzTm9kZSAmJiBub2RlanNVdGlscy5pc1N0cmVhbShkYXRhKSkgewogICAgICAgIHJldHVybiBleHRlcm5hbC5Qcm9taXNlLnJlamVjdChuZXcgRXJy" + "b3IoIkpTWmlwIGNhbid0IGFjY2VwdCBhIHN0cmVhbSB3aGVuIGxvYWRpbmcgYSB6aXAgZmlsZS4iKSk7CiAgICB9CgogICAgcmV0dXJuIHV0aWxzLnByZXBhcmVDb250ZW50KCJ0aGUgbG9hZGVkIHppcCBmaWxl" + "IiwgZGF0YSwgdHJ1ZSwgb3B0aW9ucy5vcHRpbWl6ZWRCaW5hcnlTdHJpbmcsIG9wdGlvbnMuYmFzZTY0KQogICAgLnRoZW4oZnVuY3Rpb24oZGF0YSkgewogICAgICAgIHZhciB6aXBFbnRyaWVzID0gbmV3IFpp" + "cEVudHJpZXMob3B0aW9ucyk7CiAgICAgICAgemlwRW50cmllcy5sb2FkKGRhdGEpOwogICAgICAgIHJldHVybiB6aXBFbnRyaWVzOwogICAgfSkudGhlbihmdW5jdGlvbiBjaGVja0NSQzMyKHppcEVudHJpZXMp" + "IHsKICAgICAgICB2YXIgcHJvbWlzZXMgPSBbZXh0ZXJuYWwuUHJvbWlzZS5yZXNvbHZlKHppcEVudHJpZXMpXTsKICAgICAgICB2YXIgZmlsZXMgPSB6aXBFbnRyaWVzLmZpbGVzOwogICAgICAgIGlmIChvcHRp" + "b25zLmNoZWNrQ1JDMzIpIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChjaGVja0VudHJ5Q1JDMzIoZmls" + "ZXNbaV0pKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZXh0ZXJuYWwuUHJvbWlzZS5hbGwocHJvbWlzZXMpOwogICAgfSkudGhlbihmdW5jdGlvbiBhZGRGaWxlcyhyZXN1bHRzKSB7" + "CiAgICAgICAgdmFyIHppcEVudHJpZXMgPSByZXN1bHRzLnNoaWZ0KCk7CiAgICAgICAgdmFyIGZpbGVzID0gemlwRW50cmllcy5maWxlczsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbGVzLmxlbmd0" + "aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGZpbGVzW2ldOwogICAgICAgICAgICB6aXAuZmlsZShpbnB1dC5maWxlTmFtZVN0ciwgaW5wdXQuZGVjb21wcmVzc2VkLCB7CiAgICAgICAgICAgICAg" + "ICBiaW5hcnk6IHRydWUsCiAgICAgICAgICAgICAgICBvcHRpbWl6ZWRCaW5hcnlTdHJpbmc6IHRydWUsCiAgICAgICAgICAgICAgICBkYXRlOiBpbnB1dC5kYXRlLAogICAgICAgICAgICAgICAgZGlyOiBpbnB1" + "dC5kaXIsCiAgICAgICAgICAgICAgICBjb21tZW50IDogaW5wdXQuZmlsZUNvbW1lbnRTdHIubGVuZ3RoID8gaW5wdXQuZmlsZUNvbW1lbnRTdHIgOiBudWxsLAogICAgICAgICAgICAgICAgdW5peFBlcm1pc3Np" + "b25zIDogaW5wdXQudW5peFBlcm1pc3Npb25zLAogICAgICAgICAgICAgICAgZG9zUGVybWlzc2lvbnMgOiBpbnB1dC5kb3NQZXJtaXNzaW9ucywKICAgICAgICAgICAgICAgIGNyZWF0ZUZvbGRlcnM6IG9wdGlv" + "bnMuY3JlYXRlRm9sZGVycwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgaWYgKHppcEVudHJpZXMuemlwQ29tbWVudC5sZW5ndGgpIHsKICAgICAgICAgICAgemlwLmNvbW1lbnQgPSB6aXBFbnRy" + "aWVzLnppcENvbW1lbnQ7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gemlwOwogICAgfSk7Cn07Cgp9LHsiLi9leHRlcm5hbCI6NiwiLi9ub2RlanNVdGlscyI6MTQsIi4vc3RyZWFtL0NyYzMyUHJvYmUiOjI1" + "LCIuL3V0ZjgiOjMxLCIuL3V0aWxzIjozMiwiLi96aXBFbnRyaWVzIjozM31dLDEyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKInVzZSBzdHJpY3QiOwoKdmFyIHV0aWxzID0gcmVxdWlyZSgn" + "Li4vdXRpbHMnKTsKdmFyIEdlbmVyaWNXb3JrZXIgPSByZXF1aXJlKCcuLi9zdHJlYW0vR2VuZXJpY1dvcmtlcicpOwoKLyoqCiAqIEEgd29ya2VyIHRoYXQgdXNlIGEgbm9kZWpzIHN0cmVhbSBhcyBzb3VyY2Uu" + "CiAqIEBjb25zdHJ1Y3RvcgogKiBAcGFyYW0ge1N0cmluZ30gZmlsZW5hbWUgdGhlIG5hbWUgb2YgdGhlIGZpbGUgZW50cnkgZm9yIHRoaXMgc3RyZWFtLgogKiBAcGFyYW0ge1JlYWRhYmxlfSBzdHJlYW0gdGhl" + "IG5vZGVqcyBzdHJlYW0uCiAqLwpmdW5jdGlvbiBOb2RlanNTdHJlYW1JbnB1dEFkYXB0ZXIoZmlsZW5hbWUsIHN0cmVhbSkgewogICAgR2VuZXJpY1dvcmtlci5jYWxsKHRoaXMsICJOb2RlanMgc3RyZWFtIGlu" + "cHV0IGFkYXB0ZXIgZm9yICIgKyBmaWxlbmFtZSk7CiAgICB0aGlzLl91cHN0cmVhbUVuZGVkID0gZmFsc2U7CiAgICB0aGlzLl9iaW5kU3RyZWFtKHN0cmVhbSk7Cn0KCnV0aWxzLmluaGVyaXRzKE5vZGVqc1N0" + "cmVhbUlucHV0QWRhcHRlciwgR2VuZXJpY1dvcmtlcik7CgovKioKICogUHJlcGFyZSB0aGUgc3RyZWFtIGFuZCBiaW5kIHRoZSBjYWxsYmFja3Mgb24gaXQuCiAqIERvIHRoaXMgQVNBUCBvbiBub2RlIDAuMTAg" + "ISBBIGxhenkgYmluZGluZyBkb2Vzbid0IGFsd2F5cyB3b3JrLgogKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIHRoZSBub2RlanMgc3RyZWFtIHRvIHVzZS4KICovCk5vZGVqc1N0cmVhbUlucHV0QWRhcHRlci5w" + "cm90b3R5cGUuX2JpbmRTdHJlYW0gPSBmdW5jdGlvbiAoc3RyZWFtKSB7CiAgICB2YXIgc2VsZiA9IHRoaXM7CiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07CiAgICBzdHJlYW0ucGF1c2UoKTsKICAgIHN0cmVh" + "bQogICAgLm9uKCJkYXRhIiwgZnVuY3Rpb24gKGNodW5rKSB7CiAgICAgICAgc2VsZi5wdXNoKHsKICAgICAgICAgICAgZGF0YTogY2h1bmssCiAgICAgICAgICAgIG1ldGEgOiB7CiAgICAgICAgICAgICAgICBw" + "ZXJjZW50IDogMAogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KQogICAgLm9uKCJlcnJvciIsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgaWYoc2VsZi5pc1BhdXNlZCkgewogICAgICAgICAgICB0aGlz" + "LmdlbmVyYXRlZEVycm9yID0gZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzZWxmLmVycm9yKGUpOwogICAgICAgIH0KICAgIH0pCiAgICAub24oImVuZCIsIGZ1bmN0aW9uICgpIHsKICAgICAgICBp" + "ZihzZWxmLmlzUGF1c2VkKSB7CiAgICAgICAgICAgIHNlbGYuX3Vwc3RyZWFtRW5kZWQgPSB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNlbGYuZW5kKCk7CiAgICAgICAgfQogICAgfSk7Cn07" + "Ck5vZGVqc1N0cmVhbUlucHV0QWRhcHRlci5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAoKSB7CiAgICBpZighR2VuZXJpY1dvcmtlci5wcm90b3R5cGUucGF1c2UuY2FsbCh0aGlzKSkgewogICAgICAgIHJl" + "dHVybiBmYWxzZTsKICAgIH0KICAgIHRoaXMuX3N0cmVhbS5wYXVzZSgpOwogICAgcmV0dXJuIHRydWU7Cn07Ck5vZGVqc1N0cmVhbUlucHV0QWRhcHRlci5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24gKCkg" + "ewogICAgaWYoIUdlbmVyaWNXb3JrZXIucHJvdG90eXBlLnJlc3VtZS5jYWxsKHRoaXMpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmKHRoaXMuX3Vwc3RyZWFtRW5kZWQpIHsKICAgICAg" + "ICB0aGlzLmVuZCgpOwogICAgfSBlbHNlIHsKICAgICAgICB0aGlzLl9zdHJlYW0ucmVzdW1lKCk7CiAgICB9CgogICAgcmV0dXJuIHRydWU7Cn07Cgptb2R1bGUuZXhwb3J0cyA9IE5vZGVqc1N0cmVhbUlucHV0" + "QWRhcHRlcjsKCn0seyIuLi9zdHJlYW0vR2VuZXJpY1dvcmtlciI6MjgsIi4uL3V0aWxzIjozMn1dLDEzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwoKdmFyIFJlYWRh" + "YmxlID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtJykuUmVhZGFibGU7Cgp2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpOwp1dGlscy5pbmhlcml0cyhOb2RlanNTdHJlYW1PdXRwdXRBZGFwdGVyLCBS" + "ZWFkYWJsZSk7CgovKioKKiBBIG5vZGVqcyBzdHJlYW0gdXNpbmcgYSB3b3JrZXIgYXMgc291cmNlLgoqIEBzZWUgdGhlIFNvdXJjZVdyYXBwZXIgaW4gaHR0cDovL25vZGVqcy5vcmcvYXBpL3N0cmVhbS5odG1s" + "CiogQGNvbnN0cnVjdG9yCiogQHBhcmFtIHtTdHJlYW1IZWxwZXJ9IGhlbHBlciB0aGUgaGVscGVyIHdyYXBwaW5nIHRoZSB3b3JrZXIKKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyB0aGUgbm9kZWpzIHN0cmVh" + "bSBvcHRpb25zCiogQHBhcmFtIHtGdW5jdGlvbn0gdXBkYXRlQ2IgdGhlIHVwZGF0ZSBjYWxsYmFjay4KKi8KZnVuY3Rpb24gTm9kZWpzU3RyZWFtT3V0cHV0QWRhcHRlcihoZWxwZXIsIG9wdGlvbnMsIHVwZGF0" + "ZUNiKSB7CiAgICBSZWFkYWJsZS5jYWxsKHRoaXMsIG9wdGlvbnMpOwogICAgdGhpcy5faGVscGVyID0gaGVscGVyOwoKICAgIHZhciBzZWxmID0gdGhpczsKICAgIGhlbHBlci5vbigiZGF0YSIsIGZ1bmN0aW9u" + "IChkYXRhLCBtZXRhKSB7CiAgICAgICAgaWYgKCFzZWxmLnB1c2goZGF0YSkpIHsKICAgICAgICAgICAgc2VsZi5faGVscGVyLnBhdXNlKCk7CiAgICAgICAgfQogICAgICAgIGlmKHVwZGF0ZUNiKSB7CiAgICAg" + "ICAgICAgIHVwZGF0ZUNiKG1ldGEpOwogICAgICAgIH0KICAgIH0pCiAgICAub24oImVycm9yIiwgZnVuY3Rpb24oZSkgewogICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlKTsKICAgIH0pCiAgICAub24oImVu" + "ZCIsIGZ1bmN0aW9uICgpIHsKICAgICAgICBzZWxmLnB1c2gobnVsbCk7CiAgICB9KTsKfQoKCk5vZGVqc1N0cmVhbU91dHB1dEFkYXB0ZXIucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24oKSB7CiAgICB0aGlz" + "Ll9oZWxwZXIucmVzdW1lKCk7Cn07Cgptb2R1bGUuZXhwb3J0cyA9IE5vZGVqc1N0cmVhbU91dHB1dEFkYXB0ZXI7Cgp9LHsiLi4vdXRpbHMiOjMyLCJyZWFkYWJsZS1zdHJlYW0iOjE2fV0sMTQ6W2Z1bmN0aW9u" + "KHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewondXNlIHN0cmljdCc7Cgptb2R1bGUuZXhwb3J0cyA9IHsKICAgIC8qKgogICAgICogVHJ1ZSBpZiB0aGlzIGlzIHJ1bm5pbmcgaW4gTm9kZWpzLCB3aWxsIGJlIHVu" + "ZGVmaW5lZCBpbiBhIGJyb3dzZXIuCiAgICAgKiBJbiBhIGJyb3dzZXIsIGJyb3dzZXJpZnkgd29uJ3QgaW5jbHVkZSB0aGlzIGZpbGUgYW5kIHRoZSB3aG9sZSBtb2R1bGUKICAgICAqIHdpbGwgYmUgcmVzb2x2" + "ZWQgYW4gZW1wdHkgb2JqZWN0LgogICAgICovCiAgICBpc05vZGUgOiB0eXBlb2YgQnVmZmVyICE9PSAidW5kZWZpbmVkIiwKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IG5vZGVqcyBCdWZmZXIgZnJvbSBh" + "biBleGlzdGluZyBjb250ZW50LgogICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEgdGhlIGRhdGEgdG8gcGFzcyB0byB0aGUgY29uc3RydWN0b3IuCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZW5jb2RpbmcgdGhl" + "IGVuY29kaW5nIHRvIHVzZS4KICAgICAqIEByZXR1cm4ge0J1ZmZlcn0gYSBuZXcgQnVmZmVyLgogICAgICovCiAgICBuZXdCdWZmZXJGcm9tOiBmdW5jdGlvbihkYXRhLCBlbmNvZGluZykgewogICAgICAgIGlm" + "IChCdWZmZXIuZnJvbSAmJiBCdWZmZXIuZnJvbSAhPT0gVWludDhBcnJheS5mcm9tKSB7CiAgICAgICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShkYXRhLCBlbmNvZGluZyk7CiAgICAgICAgfSBlbHNlIHsKICAg" + "ICAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAibnVtYmVyIikgewogICAgICAgICAgICAgICAgLy8gU2FmZWd1YXJkIGZvciBvbGQgTm9kZS5qcyB2ZXJzaW9ucy4gT24gbmV3ZXIgdmVyc2lvbnMsCiAgICAg" + "ICAgICAgICAgICAvLyBCdWZmZXIuZnJvbShudW1iZXIpIC8gQnVmZmVyKG51bWJlciwgZW5jb2RpbmcpIGFscmVhZHkgdGhyb3cuCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlRoZSBcImRhdGFc" + "IiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBuZXcgQnVmZmVyKGRhdGEsIGVuY29kaW5nKTsKICAgICAgICB9CiAgICB9LAogICAgLyoq" + "CiAgICAgKiBDcmVhdGUgYSBuZXcgbm9kZWpzIEJ1ZmZlciB3aXRoIHRoZSBzcGVjaWZpZWQgc2l6ZS4KICAgICAqIEBwYXJhbSB7SW50ZWdlcn0gc2l6ZSB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyLgogICAgICog" + "QHJldHVybiB7QnVmZmVyfSBhIG5ldyBCdWZmZXIuCiAgICAgKi8KICAgIGFsbG9jQnVmZmVyOiBmdW5jdGlvbiAoc2l6ZSkgewogICAgICAgIGlmIChCdWZmZXIuYWxsb2MpIHsKICAgICAgICAgICAgcmV0dXJu" + "IEJ1ZmZlci5hbGxvYyhzaXplKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgYnVmID0gbmV3IEJ1ZmZlcihzaXplKTsKICAgICAgICAgICAgYnVmLmZpbGwoMCk7CiAgICAgICAgICAgIHJldHVy" + "biBidWY7CiAgICAgICAgfQogICAgfSwKICAgIC8qKgogICAgICogRmluZCBvdXQgaWYgYW4gb2JqZWN0IGlzIGEgQnVmZmVyLgogICAgICogQHBhcmFtIHtPYmplY3R9IGIgdGhlIG9iamVjdCB0byB0ZXN0Lgog" + "ICAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGEgQnVmZmVyLCBmYWxzZSBvdGhlcndpc2UuCiAgICAgKi8KICAgIGlzQnVmZmVyIDogZnVuY3Rpb24oYil7CiAgICAgICAgcmV0" + "dXJuIEJ1ZmZlci5pc0J1ZmZlcihiKTsKICAgIH0sCgogICAgaXNTdHJlYW0gOiBmdW5jdGlvbiAob2JqKSB7CiAgICAgICAgcmV0dXJuIG9iaiAmJgogICAgICAgICAgICB0eXBlb2Ygb2JqLm9uID09PSAiZnVu" + "Y3Rpb24iICYmCiAgICAgICAgICAgIHR5cGVvZiBvYmoucGF1c2UgPT09ICJmdW5jdGlvbiIgJiYKICAgICAgICAgICAgdHlwZW9mIG9iai5yZXN1bWUgPT09ICJmdW5jdGlvbiI7CiAgICB9Cn07Cgp9LHt9XSwx" + "NTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsKdmFyIHV0ZjggPSByZXF1aXJlKCcuL3V0ZjgnKTsKdmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpOwp2YXIgR2Vu" + "ZXJpY1dvcmtlciA9IHJlcXVpcmUoJy4vc3RyZWFtL0dlbmVyaWNXb3JrZXInKTsKdmFyIFN0cmVhbUhlbHBlciA9IHJlcXVpcmUoJy4vc3RyZWFtL1N0cmVhbUhlbHBlcicpOwp2YXIgZGVmYXVsdHMgPSByZXF1" + "aXJlKCcuL2RlZmF1bHRzJyk7CnZhciBDb21wcmVzc2VkT2JqZWN0ID0gcmVxdWlyZSgnLi9jb21wcmVzc2VkT2JqZWN0Jyk7CnZhciBaaXBPYmplY3QgPSByZXF1aXJlKCcuL3ppcE9iamVjdCcpOwp2YXIgZ2Vu" + "ZXJhdGUgPSByZXF1aXJlKCIuL2dlbmVyYXRlIik7CnZhciBub2RlanNVdGlscyA9IHJlcXVpcmUoIi4vbm9kZWpzVXRpbHMiKTsKdmFyIE5vZGVqc1N0cmVhbUlucHV0QWRhcHRlciA9IHJlcXVpcmUoIi4vbm9k" + "ZWpzL05vZGVqc1N0cmVhbUlucHV0QWRhcHRlciIpOwoKCi8qKgogKiBBZGQgYSBmaWxlIGluIHRoZSBjdXJyZW50IGZvbGRlci4KICogQHByaXZhdGUKICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgdGhlIG5hbWUg" + "b2YgdGhlIGZpbGUKICogQHBhcmFtIHtTdHJpbmd8QXJyYXlCdWZmZXJ8VWludDhBcnJheXxCdWZmZXJ9IGRhdGEgdGhlIGRhdGEgb2YgdGhlIGZpbGUKICogQHBhcmFtIHtPYmplY3R9IG9yaWdpbmFsT3B0aW9u" + "cyB0aGUgb3B0aW9ucyBvZiB0aGUgZmlsZQogKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBuZXcgZmlsZS4KICovCnZhciBmaWxlQWRkID0gZnVuY3Rpb24obmFtZSwgZGF0YSwgb3JpZ2luYWxPcHRpb25zKSB7CiAg" + "ICAvLyBiZSBzdXJlIHN1YiBmb2xkZXJzIGV4aXN0CiAgICB2YXIgZGF0YVR5cGUgPSB1dGlscy5nZXRUeXBlT2YoZGF0YSksCiAgICAgICAgcGFyZW50OwoKCiAgICAvKgogICAgICogQ29ycmVjdCBvcHRpb25z" + "LgogICAgICovCgogICAgdmFyIG8gPSB1dGlscy5leHRlbmQob3JpZ2luYWxPcHRpb25zIHx8IHt9LCBkZWZhdWx0cyk7CiAgICBvLmRhdGUgPSBvLmRhdGUgfHwgbmV3IERhdGUoKTsKICAgIGlmIChvLmNvbXBy" + "ZXNzaW9uICE9PSBudWxsKSB7CiAgICAgICAgby5jb21wcmVzc2lvbiA9IG8uY29tcHJlc3Npb24udG9VcHBlckNhc2UoKTsKICAgIH0KCiAgICBpZiAodHlwZW9mIG8udW5peFBlcm1pc3Npb25zID09PSAic3Ry" + "aW5nIikgewogICAgICAgIG8udW5peFBlcm1pc3Npb25zID0gcGFyc2VJbnQoby51bml4UGVybWlzc2lvbnMsIDgpOwogICAgfQoKICAgIC8vIFVOWF9JRkRJUiAgMDA0MDAwMCBzZWUgemlwaW5mby5jCiAgICBp" + "ZiAoby51bml4UGVybWlzc2lvbnMgJiYgKG8udW5peFBlcm1pc3Npb25zICYgMHg0MDAwKSkgewogICAgICAgIG8uZGlyID0gdHJ1ZTsKICAgIH0KICAgIC8vIEJpdCA0ICAgIERpcmVjdG9yeQogICAgaWYgKG8u" + "ZG9zUGVybWlzc2lvbnMgJiYgKG8uZG9zUGVybWlzc2lvbnMgJiAweDAwMTApKSB7CiAgICAgICAgby5kaXIgPSB0cnVlOwogICAgfQoKICAgIGlmIChvLmRpcikgewogICAgICAgIG5hbWUgPSBmb3JjZVRyYWls" + "aW5nU2xhc2gobmFtZSk7CiAgICB9CiAgICBpZiAoby5jcmVhdGVGb2xkZXJzICYmIChwYXJlbnQgPSBwYXJlbnRGb2xkZXIobmFtZSkpKSB7CiAgICAgICAgZm9sZGVyQWRkLmNhbGwodGhpcywgcGFyZW50LCB0" + "cnVlKTsKICAgIH0KCiAgICB2YXIgaXNVbmljb2RlU3RyaW5nID0gZGF0YVR5cGUgPT09ICJzdHJpbmciICYmIG8uYmluYXJ5ID09PSBmYWxzZSAmJiBvLmJhc2U2NCA9PT0gZmFsc2U7CiAgICBpZiAoIW9yaWdp" + "bmFsT3B0aW9ucyB8fCB0eXBlb2Ygb3JpZ2luYWxPcHRpb25zLmJpbmFyeSA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICBvLmJpbmFyeSA9ICFpc1VuaWNvZGVTdHJpbmc7CiAgICB9CgoKICAgIHZhciBpc0Nv" + "bXByZXNzZWRFbXB0eSA9IChkYXRhIGluc3RhbmNlb2YgQ29tcHJlc3NlZE9iamVjdCkgJiYgZGF0YS51bmNvbXByZXNzZWRTaXplID09PSAwOwoKICAgIGlmIChpc0NvbXByZXNzZWRFbXB0eSB8fCBvLmRpciB8" + "fCAhZGF0YSB8fCBkYXRhLmxlbmd0aCA9PT0gMCkgewogICAgICAgIG8uYmFzZTY0ID0gZmFsc2U7CiAgICAgICAgby5iaW5hcnkgPSB0cnVlOwogICAgICAgIGRhdGEgPSAiIjsKICAgICAgICBvLmNvbXByZXNz" + "aW9uID0gIlNUT1JFIjsKICAgICAgICBkYXRhVHlwZSA9ICJzdHJpbmciOwogICAgfQoKICAgIC8qCiAgICAgKiBDb252ZXJ0IGNvbnRlbnQgdG8gZml0LgogICAgICovCgogICAgdmFyIHppcE9iamVjdENvbnRl" + "bnQgPSBudWxsOwogICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBDb21wcmVzc2VkT2JqZWN0IHx8IGRhdGEgaW5zdGFuY2VvZiBHZW5lcmljV29ya2VyKSB7CiAgICAgICAgemlwT2JqZWN0Q29udGVudCA9IGRhdGE7" + "CiAgICB9IGVsc2UgaWYgKG5vZGVqc1V0aWxzLmlzTm9kZSAmJiBub2RlanNVdGlscy5pc1N0cmVhbShkYXRhKSkgewogICAgICAgIHppcE9iamVjdENvbnRlbnQgPSBuZXcgTm9kZWpzU3RyZWFtSW5wdXRBZGFw" + "dGVyKG5hbWUsIGRhdGEpOwogICAgfSBlbHNlIHsKICAgICAgICB6aXBPYmplY3RDb250ZW50ID0gdXRpbHMucHJlcGFyZUNvbnRlbnQobmFtZSwgZGF0YSwgby5iaW5hcnksIG8ub3B0aW1pemVkQmluYXJ5U3Ry" + "aW5nLCBvLmJhc2U2NCk7CiAgICB9CgogICAgdmFyIG9iamVjdCA9IG5ldyBaaXBPYmplY3QobmFtZSwgemlwT2JqZWN0Q29udGVudCwgbyk7CiAgICB0aGlzLmZpbGVzW25hbWVdID0gb2JqZWN0OwogICAgLyoK" + "ICAgIFRPRE86IHdlIGNhbid0IHRocm93IGFuIGV4Y2VwdGlvbiBiZWNhdXNlIHdlIGhhdmUgYXN5bmMgcHJvbWlzZXMKICAgICh3ZSBjYW4gaGF2ZSBhIHByb21pc2Ugb2YgYSBEYXRlKCkgZm9yIGV4YW1wbGUp" + "IGJ1dCByZXR1cm5pbmcgYQogICAgcHJvbWlzZSBpcyB1c2VsZXNzIGJlY2F1c2UgZmlsZShuYW1lLCBkYXRhKSByZXR1cm5zIHRoZSBKU1ppcAogICAgb2JqZWN0IGZvciBjaGFpbmluZy4gU2hvdWxkIHdlIGJy" + "ZWFrIHRoYXQgdG8gYWxsb3cgdGhlIHVzZXIKICAgIHRvIGNhdGNoIHRoZSBlcnJvciA/CgogICAgcmV0dXJuIGV4dGVybmFsLlByb21pc2UucmVzb2x2ZSh6aXBPYmplY3RDb250ZW50KQogICAgLnRoZW4oZnVu" + "Y3Rpb24gKCkgewogICAgICAgIHJldHVybiBvYmplY3Q7CiAgICB9KTsKICAgICovCn07CgovKioKICogRmluZCB0aGUgcGFyZW50IGZvbGRlciBvZiB0aGUgcGF0aC4KICogQHByaXZhdGUKICogQHBhcmFtIHtz" + "dHJpbmd9IHBhdGggdGhlIHBhdGggdG8gdXNlCiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIHBhcmVudCBmb2xkZXIsIG9yICIiCiAqLwp2YXIgcGFyZW50Rm9sZGVyID0gZnVuY3Rpb24gKHBhdGgpIHsKICAgIGlm" + "IChwYXRoLnNsaWNlKC0xKSA9PT0gJy8nKSB7CiAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGVuZ3RoIC0gMSk7CiAgICB9CiAgICB2YXIgbGFzdFNsYXNoID0gcGF0aC5sYXN0SW5kZXhP" + "ZignLycpOwogICAgcmV0dXJuIChsYXN0U2xhc2ggPiAwKSA/IHBhdGguc3Vic3RyaW5nKDAsIGxhc3RTbGFzaCkgOiAiIjsKfTsKCi8qKgogKiBSZXR1cm5zIHRoZSBwYXRoIHdpdGggYSBzbGFzaCBhdCB0aGUg" + "ZW5kLgogKiBAcHJpdmF0ZQogKiBAcGFyYW0ge1N0cmluZ30gcGF0aCB0aGUgcGF0aCB0byBjaGVjay4KICogQHJldHVybiB7U3RyaW5nfSB0aGUgcGF0aCB3aXRoIGEgdHJhaWxpbmcgc2xhc2guCiAqLwp2YXIg" + "Zm9yY2VUcmFpbGluZ1NsYXNoID0gZnVuY3Rpb24ocGF0aCkgewogICAgLy8gQ2hlY2sgdGhlIG5hbWUgZW5kcyB3aXRoIGEgLwogICAgaWYgKHBhdGguc2xpY2UoLTEpICE9PSAiLyIpIHsKICAgICAgICBwYXRo" + "ICs9ICIvIjsgLy8gSUUgZG9lc24ndCBsaWtlIHN1YnN0cigtMSkKICAgIH0KICAgIHJldHVybiBwYXRoOwp9OwoKLyoqCiAqIEFkZCBhIChzdWIpIGZvbGRlciBpbiB0aGUgY3VycmVudCBmb2xkZXIuCiAqIEBw" + "cml2YXRlCiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIHRoZSBmb2xkZXIncyBuYW1lCiAqIEBwYXJhbSB7Ym9vbGVhbj19IFtjcmVhdGVGb2xkZXJzXSBJZiB0cnVlLCBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBzdWIK" + "ICogIGZvbGRlcnMuIERlZmF1bHRzIHRvIGZhbHNlLgogKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBuZXcgZm9sZGVyLgogKi8KdmFyIGZvbGRlckFkZCA9IGZ1bmN0aW9uKG5hbWUsIGNyZWF0ZUZvbGRlcnMpIHsK" + "ICAgIGNyZWF0ZUZvbGRlcnMgPSAodHlwZW9mIGNyZWF0ZUZvbGRlcnMgIT09ICd1bmRlZmluZWQnKSA/IGNyZWF0ZUZvbGRlcnMgOiBkZWZhdWx0cy5jcmVhdGVGb2xkZXJzOwoKICAgIG5hbWUgPSBmb3JjZVRy" + "YWlsaW5nU2xhc2gobmFtZSk7CgogICAgLy8gRG9lcyB0aGlzIGZvbGRlciBhbHJlYWR5IGV4aXN0PwogICAgaWYgKCF0aGlzLmZpbGVzW25hbWVdKSB7CiAgICAgICAgZmlsZUFkZC5jYWxsKHRoaXMsIG5hbWUs" + "IG51bGwsIHsKICAgICAgICAgICAgZGlyOiB0cnVlLAogICAgICAgICAgICBjcmVhdGVGb2xkZXJzOiBjcmVhdGVGb2xkZXJzCiAgICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gdGhpcy5maWxlc1tuYW1lXTsK" + "fTsKCi8qKgoqIENyb3NzLXdpbmRvdywgY3Jvc3MtTm9kZS1jb250ZXh0IHJlZ3VsYXIgZXhwcmVzc2lvbiBkZXRlY3Rpb24KKiBAcGFyYW0gIHtPYmplY3R9ICBvYmplY3QgQW55dGhpbmcKKiBAcmV0dXJuIHtC" + "b29sZWFufSAgICAgICAgdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGEgcmVndWxhciBleHByZXNzaW9uLAoqIGZhbHNlIG90aGVyd2lzZQoqLwpmdW5jdGlvbiBpc1JlZ0V4cChvYmplY3QpIHsKICAgIHJldHVybiBP" + "YmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PT0gIltvYmplY3QgUmVnRXhwXSI7Cn0KCi8vIHJldHVybiB0aGUgYWN0dWFsIHByb3RvdHlwZSBvZiBKU1ppcAp2YXIgb3V0ID0gewogICAg" + "LyoqCiAgICAgKiBAc2VlIGxvYWRBc3luYwogICAgICovCiAgICBsb2FkOiBmdW5jdGlvbigpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbW92ZWQgaW4gSlNaaXAg" + "My4wLCBwbGVhc2UgY2hlY2sgdGhlIHVwZ3JhZGUgZ3VpZGUuIik7CiAgICB9LAoKCiAgICAvKioKICAgICAqIENhbGwgYSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBlbnRyeSBhdCB0aGlzIGZvbGRlciBs" + "ZXZlbC4KICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNiIHRoZSBjYWxsYmFjayBmdW5jdGlvbjoKICAgICAqIGZ1bmN0aW9uIChyZWxhdGl2ZVBhdGgsIGZpbGUpIHsuLi59CiAgICAgKiBJdCB0YWtlcyAyIGFy" + "Z3VtZW50cyA6IHRoZSByZWxhdGl2ZSBwYXRoIGFuZCB0aGUgZmlsZS4KICAgICAqLwogICAgZm9yRWFjaDogZnVuY3Rpb24oY2IpIHsKICAgICAgICB2YXIgZmlsZW5hbWUsIHJlbGF0aXZlUGF0aCwgZmlsZTsK" + "ICAgICAgICBmb3IgKGZpbGVuYW1lIGluIHRoaXMuZmlsZXMpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLmZpbGVzLmhhc093blByb3BlcnR5KGZpbGVuYW1lKSkgewogICAgICAgICAgICAgICAgY29udGludWU7" + "CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZmlsZSA9IHRoaXMuZmlsZXNbZmlsZW5hbWVdOwogICAgICAgICAgICByZWxhdGl2ZVBhdGggPSBmaWxlbmFtZS5zbGljZSh0aGlzLnJvb3QubGVuZ3RoLCBmaWxl" + "bmFtZS5sZW5ndGgpOwogICAgICAgICAgICBpZiAocmVsYXRpdmVQYXRoICYmIGZpbGVuYW1lLnNsaWNlKDAsIHRoaXMucm9vdC5sZW5ndGgpID09PSB0aGlzLnJvb3QpIHsgLy8gdGhlIGZpbGUgaXMgaW4gdGhl" + "IGN1cnJlbnQgcm9vdAogICAgICAgICAgICAgICAgY2IocmVsYXRpdmVQYXRoLCBmaWxlKTsgLy8gVE9ETyByZXZlcnNlIHRoZSBwYXJhbWV0ZXJzID8gbmVlZCB0byBiZSBjbGVhbiBBTkQgY29uc2lzdGVudCB3" + "aXRoIHRoZSBmaWx0ZXIgc2VhcmNoIGZuLi4uCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9LAoKICAgIC8qKgogICAgICogRmlsdGVyIG5lc3RlZCBmaWxlcy9mb2xkZXJzIHdpdGggdGhlIHNwZWNpZmll" + "ZCBmdW5jdGlvbi4KICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHNlYXJjaCB0aGUgcHJlZGljYXRlIHRvIHVzZSA6CiAgICAgKiBmdW5jdGlvbiAocmVsYXRpdmVQYXRoLCBmaWxlKSB7Li4ufQogICAgICogSXQg" + "dGFrZXMgMiBhcmd1bWVudHMgOiB0aGUgcmVsYXRpdmUgcGF0aCBhbmQgdGhlIGZpbGUuCiAgICAgKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2YgbWF0Y2hpbmcgZWxlbWVudHMuCiAgICAgKi8KICAgIGZp" + "bHRlcjogZnVuY3Rpb24oc2VhcmNoKSB7CiAgICAgICAgdmFyIHJlc3VsdCA9IFtdOwogICAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAocmVsYXRpdmVQYXRoLCBlbnRyeSkgewogICAgICAgICAgICBpZiAo" + "c2VhcmNoKHJlbGF0aXZlUGF0aCwgZW50cnkpKSB7IC8vIHRoZSBmaWxlIG1hdGNoZXMgdGhlIGZ1bmN0aW9uCiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChlbnRyeSk7CiAgICAgICAgICAgIH0KCiAgICAg" + "ICAgfSk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0sCgogICAgLyoqCiAgICAgKiBBZGQgYSBmaWxlIHRvIHRoZSB6aXAgZmlsZSwgb3Igc2VhcmNoIGEgZmlsZS4KICAgICAqIEBwYXJhbSAgIHtzdHJp" + "bmd8UmVnRXhwfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGFkZCAoaWYgZGF0YSBpcyBkZWZpbmVkKSwKICAgICAqIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGZpbmQgKGlmIG5vIGRhdGEpIG9yIGEg" + "cmVnZXggdG8gbWF0Y2ggZmlsZXMuCiAgICAgKiBAcGFyYW0gICB7U3RyaW5nfEFycmF5QnVmZmVyfFVpbnQ4QXJyYXl8QnVmZmVyfSBkYXRhICBUaGUgZmlsZSBkYXRhLCBlaXRoZXIgcmF3IG9yIGJhc2U2NCBl" + "bmNvZGVkCiAgICAgKiBAcGFyYW0gICB7T2JqZWN0fSBvICAgICBGaWxlIG9wdGlvbnMKICAgICAqIEByZXR1cm4gIHtKU1ppcHxPYmplY3R8QXJyYXl9IHRoaXMgSlNaaXAgb2JqZWN0ICh3aGVuIGFkZGluZyBh" + "IGZpbGUpLAogICAgICogYSBmaWxlICh3aGVuIHNlYXJjaGluZyBieSBzdHJpbmcpIG9yIGFuIGFycmF5IG9mIGZpbGVzICh3aGVuIHNlYXJjaGluZyBieSByZWdleCkuCiAgICAgKi8KICAgIGZpbGU6IGZ1bmN0" + "aW9uKG5hbWUsIGRhdGEsIG8pIHsKICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkgewogICAgICAgICAgICBpZiAoaXNSZWdFeHAobmFtZSkpIHsKICAgICAgICAgICAgICAgIHZhciByZWdleHAg" + "PSBuYW1lOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKHJlbGF0aXZlUGF0aCwgZmlsZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAhZmlsZS5kaXIgJiYgcmVnZXhw" + "LnRlc3QocmVsYXRpdmVQYXRoKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgeyAvLyB0ZXh0CiAgICAgICAgICAgICAgICB2YXIgb2JqID0gdGhpcy5maWxlc1t0" + "aGlzLnJvb3QgKyBuYW1lXTsKICAgICAgICAgICAgICAgIGlmIChvYmogJiYgIW9iai5kaXIpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg" + "ICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsgLy8gbW9yZSB0aGFuIG9uZSBhcmd1bWVudCA6IHdlIGhhdmUg" + "ZGF0YSAhCiAgICAgICAgICAgIG5hbWUgPSB0aGlzLnJvb3QgKyBuYW1lOwogICAgICAgICAgICBmaWxlQWRkLmNhbGwodGhpcywgbmFtZSwgZGF0YSwgbyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlz" + "OwogICAgfSwKCiAgICAvKioKICAgICAqIEFkZCBhIGRpcmVjdG9yeSB0byB0aGUgemlwIGZpbGUsIG9yIHNlYXJjaC4KICAgICAqIEBwYXJhbSAgIHtTdHJpbmd8UmVnRXhwfSBhcmcgVGhlIG5hbWUgb2YgdGhl" + "IGRpcmVjdG9yeSB0byBhZGQsIG9yIGEgcmVnZXggdG8gc2VhcmNoIGZvbGRlcnMuCiAgICAgKiBAcmV0dXJuICB7SlNaaXB9IGFuIG9iamVjdCB3aXRoIHRoZSBuZXcgZGlyZWN0b3J5IGFzIHRoZSByb290LCBv" + "ciBhbiBhcnJheSBjb250YWluaW5nIG1hdGNoaW5nIGZvbGRlcnMuCiAgICAgKi8KICAgIGZvbGRlcjogZnVuY3Rpb24oYXJnKSB7CiAgICAgICAgaWYgKCFhcmcpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXM7" + "CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNSZWdFeHAoYXJnKSkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24ocmVsYXRpdmVQYXRoLCBmaWxlKSB7CiAgICAgICAgICAgICAgICBy" + "ZXR1cm4gZmlsZS5kaXIgJiYgYXJnLnRlc3QocmVsYXRpdmVQYXRoKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICAvLyBlbHNlLCBuYW1lIGlzIGEgbmV3IGZvbGRlcgogICAgICAgIHZhciBu" + "YW1lID0gdGhpcy5yb290ICsgYXJnOwogICAgICAgIHZhciBuZXdGb2xkZXIgPSBmb2xkZXJBZGQuY2FsbCh0aGlzLCBuYW1lKTsKCiAgICAgICAgLy8gQWxsb3cgY2hhaW5pbmcgYnkgcmV0dXJuaW5nIGEgbmV3" + "IG9iamVjdCB3aXRoIHRoaXMgZm9sZGVyIGFzIHRoZSByb290CiAgICAgICAgdmFyIHJldCA9IHRoaXMuY2xvbmUoKTsKICAgICAgICByZXQucm9vdCA9IG5ld0ZvbGRlci5uYW1lOwogICAgICAgIHJldHVybiBy" + "ZXQ7CiAgICB9LAoKICAgIC8qKgogICAgICogRGVsZXRlIGEgZmlsZSwgb3IgYSBkaXJlY3RvcnkgYW5kIGFsbCBzdWItZmlsZXMsIGZyb20gdGhlIHppcAogICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgdGhl" + "IG5hbWUgb2YgdGhlIGZpbGUgdG8gZGVsZXRlCiAgICAgKiBAcmV0dXJuIHtKU1ppcH0gdGhpcyBKU1ppcCBvYmplY3QKICAgICAqLwogICAgcmVtb3ZlOiBmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgbmFtZSA9" + "IHRoaXMucm9vdCArIG5hbWU7CiAgICAgICAgdmFyIGZpbGUgPSB0aGlzLmZpbGVzW25hbWVdOwogICAgICAgIGlmICghZmlsZSkgewogICAgICAgICAgICAvLyBMb29rIGZvciBhbnkgZm9sZGVycwogICAgICAg" + "ICAgICBpZiAobmFtZS5zbGljZSgtMSkgIT09ICIvIikgewogICAgICAgICAgICAgICAgbmFtZSArPSAiLyI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZmlsZSA9IHRoaXMuZmlsZXNbbmFtZV07CiAgICAg" + "ICAgfQoKICAgICAgICBpZiAoZmlsZSAmJiAhZmlsZS5kaXIpIHsKICAgICAgICAgICAgLy8gZmlsZQogICAgICAgICAgICBkZWxldGUgdGhpcy5maWxlc1tuYW1lXTsKICAgICAgICB9IGVsc2UgewogICAgICAg" + "ICAgICAvLyBtYXliZSBhIGZvbGRlciwgZGVsZXRlIHJlY3Vyc2l2ZWx5CiAgICAgICAgICAgIHZhciBraWRzID0gdGhpcy5maWx0ZXIoZnVuY3Rpb24ocmVsYXRpdmVQYXRoLCBmaWxlKSB7CiAgICAgICAgICAg" + "ICAgICByZXR1cm4gZmlsZS5uYW1lLnNsaWNlKDAsIG5hbWUubGVuZ3RoKSA9PT0gbmFtZTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2lkcy5sZW5ndGg7IGkrKykg" + "ewogICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZmlsZXNba2lkc1tpXS5uYW1lXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICB9LAoKICAgIC8qKgogICAgICog" + "R2VuZXJhdGUgdGhlIGNvbXBsZXRlIHppcCBmaWxlCiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyB0aGUgb3B0aW9ucyB0byBnZW5lcmF0ZSB0aGUgemlwIGZpbGUgOgogICAgICogLSBjb21wcmVzc2lv" + "biwgIlNUT1JFIiBieSBkZWZhdWx0LgogICAgICogLSB0eXBlLCAiYmFzZTY0IiBieSBkZWZhdWx0LiBWYWx1ZXMgYXJlIDogc3RyaW5nLCBiYXNlNjQsIHVpbnQ4YXJyYXksIGFycmF5YnVmZmVyLCBibG9iLgog" + "ICAgICogQHJldHVybiB7U3RyaW5nfFVpbnQ4QXJyYXl8QXJyYXlCdWZmZXJ8QnVmZmVyfEJsb2J9IHRoZSB6aXAgZmlsZQogICAgICovCiAgICBnZW5lcmF0ZTogZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAg" + "IHRocm93IG5ldyBFcnJvcigiVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVtb3ZlZCBpbiBKU1ppcCAzLjAsIHBsZWFzZSBjaGVjayB0aGUgdXBncmFkZSBndWlkZS4iKTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBH" + "ZW5lcmF0ZSB0aGUgY29tcGxldGUgemlwIGZpbGUgYXMgYW4gaW50ZXJuYWwgc3RyZWFtLgogICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgdGhlIG9wdGlvbnMgdG8gZ2VuZXJhdGUgdGhlIHppcCBmaWxl" + "IDoKICAgICAqIC0gY29tcHJlc3Npb24sICJTVE9SRSIgYnkgZGVmYXVsdC4KICAgICAqIC0gdHlwZSwgImJhc2U2NCIgYnkgZGVmYXVsdC4gVmFsdWVzIGFyZSA6IHN0cmluZywgYmFzZTY0LCB1aW50OGFycmF5" + "LCBhcnJheWJ1ZmZlciwgYmxvYi4KICAgICAqIEByZXR1cm4ge1N0cmVhbUhlbHBlcn0gdGhlIHN0cmVhbWVkIHppcCBmaWxlLgogICAgICovCiAgICBnZW5lcmF0ZUludGVybmFsU3RyZWFtOiBmdW5jdGlvbihv" + "cHRpb25zKSB7CiAgICAgIHZhciB3b3JrZXIsIG9wdHMgPSB7fTsKICAgICAgdHJ5IHsKICAgICAgICAgIG9wdHMgPSB1dGlscy5leHRlbmQob3B0aW9ucyB8fCB7fSwgewogICAgICAgICAgICAgIHN0cmVhbUZp" + "bGVzOiBmYWxzZSwKICAgICAgICAgICAgICBjb21wcmVzc2lvbjogIlNUT1JFIiwKICAgICAgICAgICAgICBjb21wcmVzc2lvbk9wdGlvbnMgOiBudWxsLAogICAgICAgICAgICAgIHR5cGU6ICIiLAogICAgICAg" + "ICAgICAgIHBsYXRmb3JtOiAiRE9TIiwKICAgICAgICAgICAgICBjb21tZW50OiBudWxsLAogICAgICAgICAgICAgIG1pbWVUeXBlOiAnYXBwbGljYXRpb24vemlwJywKICAgICAgICAgICAgICBlbmNvZGVGaWxl" + "TmFtZTogdXRmOC51dGY4ZW5jb2RlCiAgICAgICAgICB9KTsKCiAgICAgICAgICBvcHRzLnR5cGUgPSBvcHRzLnR5cGUudG9Mb3dlckNhc2UoKTsKICAgICAgICAgIG9wdHMuY29tcHJlc3Npb24gPSBvcHRzLmNv" + "bXByZXNzaW9uLnRvVXBwZXJDYXNlKCk7CgogICAgICAgICAgLy8gImJpbmFyeXN0cmluZyIgaXMgcHJlZmVycmVkIGJ1dCB0aGUgaW50ZXJuYWxzIHVzZSAic3RyaW5nIi4KICAgICAgICAgIGlmKG9wdHMudHlw" + "ZSA9PT0gImJpbmFyeXN0cmluZyIpIHsKICAgICAgICAgICAgb3B0cy50eXBlID0gInN0cmluZyI7CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKCFvcHRzLnR5cGUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3" + "IEVycm9yKCJObyBvdXRwdXQgdHlwZSBzcGVjaWZpZWQuIik7CiAgICAgICAgICB9CgogICAgICAgICAgdXRpbHMuY2hlY2tTdXBwb3J0KG9wdHMudHlwZSk7CgogICAgICAgICAgLy8gYWNjZXB0IG5vZGVqcyBg" + "cHJvY2Vzcy5wbGF0Zm9ybWAKICAgICAgICAgIGlmKAogICAgICAgICAgICAgIG9wdHMucGxhdGZvcm0gPT09ICdkYXJ3aW4nIHx8CiAgICAgICAgICAgICAgb3B0cy5wbGF0Zm9ybSA9PT0gJ2ZyZWVic2QnIHx8" + "CiAgICAgICAgICAgICAgb3B0cy5wbGF0Zm9ybSA9PT0gJ2xpbnV4JyB8fAogICAgICAgICAgICAgIG9wdHMucGxhdGZvcm0gPT09ICdzdW5vcycKICAgICAgICAgICkgewogICAgICAgICAgICAgIG9wdHMucGxh" + "dGZvcm0gPSAiVU5JWCI7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAob3B0cy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykgewogICAgICAgICAgICAgIG9wdHMucGxhdGZvcm0gPSAiRE9TIjsKICAgICAgICAgIH0K" + "CiAgICAgICAgICB2YXIgY29tbWVudCA9IG9wdHMuY29tbWVudCB8fCB0aGlzLmNvbW1lbnQgfHwgIiI7CiAgICAgICAgICB3b3JrZXIgPSBnZW5lcmF0ZS5nZW5lcmF0ZVdvcmtlcih0aGlzLCBvcHRzLCBjb21t" + "ZW50KTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIHdvcmtlciA9IG5ldyBHZW5lcmljV29ya2VyKCJlcnJvciIpOwogICAgICAgIHdvcmtlci5lcnJvcihlKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3" + "IFN0cmVhbUhlbHBlcih3b3JrZXIsIG9wdHMudHlwZSB8fCAic3RyaW5nIiwgb3B0cy5taW1lVHlwZSk7CiAgICB9LAogICAgLyoqCiAgICAgKiBHZW5lcmF0ZSB0aGUgY29tcGxldGUgemlwIGZpbGUgYXN5bmNo" + "cm9ub3VzbHkuCiAgICAgKiBAc2VlIGdlbmVyYXRlSW50ZXJuYWxTdHJlYW0KICAgICAqLwogICAgZ2VuZXJhdGVBc3luYzogZnVuY3Rpb24ob3B0aW9ucywgb25VcGRhdGUpIHsKICAgICAgICByZXR1cm4gdGhp" + "cy5nZW5lcmF0ZUludGVybmFsU3RyZWFtKG9wdGlvbnMpLmFjY3VtdWxhdGUob25VcGRhdGUpOwogICAgfSwKICAgIC8qKgogICAgICogR2VuZXJhdGUgdGhlIGNvbXBsZXRlIHppcCBmaWxlIGFzeW5jaHJvbm91" + "c2x5LgogICAgICogQHNlZSBnZW5lcmF0ZUludGVybmFsU3RyZWFtCiAgICAgKi8KICAgIGdlbmVyYXRlTm9kZVN0cmVhbTogZnVuY3Rpb24ob3B0aW9ucywgb25VcGRhdGUpIHsKICAgICAgICBvcHRpb25zID0g" + "b3B0aW9ucyB8fCB7fTsKICAgICAgICBpZiAoIW9wdGlvbnMudHlwZSkgewogICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAibm9kZWJ1ZmZlciI7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLmdlbmVy" + "YXRlSW50ZXJuYWxTdHJlYW0ob3B0aW9ucykudG9Ob2RlanNTdHJlYW0ob25VcGRhdGUpOwogICAgfQp9Owptb2R1bGUuZXhwb3J0cyA9IG91dDsKCn0seyIuL2NvbXByZXNzZWRPYmplY3QiOjIsIi4vZGVmYXVs" + "dHMiOjUsIi4vZ2VuZXJhdGUiOjksIi4vbm9kZWpzL05vZGVqc1N0cmVhbUlucHV0QWRhcHRlciI6MTIsIi4vbm9kZWpzVXRpbHMiOjE0LCIuL3N0cmVhbS9HZW5lcmljV29ya2VyIjoyOCwiLi9zdHJlYW0vU3Ry" + "ZWFtSGVscGVyIjoyOSwiLi91dGY4IjozMSwiLi91dGlscyI6MzIsIi4vemlwT2JqZWN0IjozNX1dLDE2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLyoKICogVGhpcyBmaWxlIGlzIHVzZWQg" + "YnkgbW9kdWxlIGJ1bmRsZXJzIChicm93c2VyaWZ5L3dlYnBhY2svZXRjKSB3aGVuCiAqIGluY2x1ZGluZyBhIHN0cmVhbSBpbXBsZW1lbnRhdGlvbi4gV2UgdXNlICJyZWFkYWJsZS1zdHJlYW0iIHRvIGdldCBh" + "CiAqIGNvbnNpc3RlbnQgYmVoYXZpb3IgYmV0d2VlbiBub2RlanMgdmVyc2lvbnMgYnV0IGJ1bmRsZXJzIG9mdGVuIGhhdmUgYSBzaGltCiAqIGZvciAic3RyZWFtIi4gVXNpbmcgdGhpcyBzaGltIGdyZWF0bHkg" + "aW1wcm92ZSB0aGUgY29tcGF0aWJpbGl0eSBhbmQgZ3JlYXRseQogKiByZWR1Y2UgdGhlIGZpbmFsIHNpemUgb2YgdGhlIGJ1bmRsZSAob25seSBvbmUgc3RyZWFtIGltcGxlbWVudGF0aW9uLCBub3QKICogdHdv" + "KS4KICovCm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgic3RyZWFtIik7Cgp9LHsic3RyZWFtIjp1bmRlZmluZWR9XSwxNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsK" + "dmFyIERhdGFSZWFkZXIgPSByZXF1aXJlKCcuL0RhdGFSZWFkZXInKTsKdmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTsKCmZ1bmN0aW9uIEFycmF5UmVhZGVyKGRhdGEpIHsKICAgIERhdGFSZWFkZXIu" + "Y2FsbCh0aGlzLCBkYXRhKTsKCWZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHsKCQlkYXRhW2ldID0gZGF0YVtpXSAmIDB4RkY7Cgl9Cn0KdXRpbHMuaW5oZXJpdHMoQXJyYXlSZWFk" + "ZXIsIERhdGFSZWFkZXIpOwovKioKICogQHNlZSBEYXRhUmVhZGVyLmJ5dGVBdAogKi8KQXJyYXlSZWFkZXIucHJvdG90eXBlLmJ5dGVBdCA9IGZ1bmN0aW9uKGkpIHsKICAgIHJldHVybiB0aGlzLmRhdGFbdGhp" + "cy56ZXJvICsgaV07Cn07Ci8qKgogKiBAc2VlIERhdGFSZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUKICovCkFycmF5UmVhZGVyLnByb3RvdHlwZS5sYXN0SW5kZXhPZlNpZ25hdHVyZSA9IGZ1bmN0aW9uKHNp" + "ZykgewogICAgdmFyIHNpZzAgPSBzaWcuY2hhckNvZGVBdCgwKSwKICAgICAgICBzaWcxID0gc2lnLmNoYXJDb2RlQXQoMSksCiAgICAgICAgc2lnMiA9IHNpZy5jaGFyQ29kZUF0KDIpLAogICAgICAgIHNpZzMg" + "PSBzaWcuY2hhckNvZGVBdCgzKTsKICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aCAtIDQ7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgaWYgKHRoaXMuZGF0YVtpXSA9PT0gc2lnMCAmJiB0aGlzLmRhdGFbaSAr" + "IDFdID09PSBzaWcxICYmIHRoaXMuZGF0YVtpICsgMl0gPT09IHNpZzIgJiYgdGhpcy5kYXRhW2kgKyAzXSA9PT0gc2lnMykgewogICAgICAgICAgICByZXR1cm4gaSAtIHRoaXMuemVybzsKICAgICAgICB9CiAg" + "ICB9CgogICAgcmV0dXJuIC0xOwp9OwovKioKICogQHNlZSBEYXRhUmVhZGVyLnJlYWRBbmRDaGVja1NpZ25hdHVyZQogKi8KQXJyYXlSZWFkZXIucHJvdG90eXBlLnJlYWRBbmRDaGVja1NpZ25hdHVyZSA9IGZ1" + "bmN0aW9uIChzaWcpIHsKICAgIHZhciBzaWcwID0gc2lnLmNoYXJDb2RlQXQoMCksCiAgICAgICAgc2lnMSA9IHNpZy5jaGFyQ29kZUF0KDEpLAogICAgICAgIHNpZzIgPSBzaWcuY2hhckNvZGVBdCgyKSwKICAg" + "ICAgICBzaWczID0gc2lnLmNoYXJDb2RlQXQoMyksCiAgICAgICAgZGF0YSA9IHRoaXMucmVhZERhdGEoNCk7CiAgICByZXR1cm4gc2lnMCA9PT0gZGF0YVswXSAmJiBzaWcxID09PSBkYXRhWzFdICYmIHNpZzIg" + "PT09IGRhdGFbMl0gJiYgc2lnMyA9PT0gZGF0YVszXTsKfTsKLyoqCiAqIEBzZWUgRGF0YVJlYWRlci5yZWFkRGF0YQogKi8KQXJyYXlSZWFkZXIucHJvdG90eXBlLnJlYWREYXRhID0gZnVuY3Rpb24oc2l6ZSkg" + "ewogICAgdGhpcy5jaGVja09mZnNldChzaXplKTsKICAgIGlmKHNpemUgPT09IDApIHsKICAgICAgICByZXR1cm4gW107CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gdGhpcy5kYXRhLnNsaWNlKHRoaXMuemVybyAr" + "IHRoaXMuaW5kZXgsIHRoaXMuemVybyArIHRoaXMuaW5kZXggKyBzaXplKTsKICAgIHRoaXMuaW5kZXggKz0gc2l6ZTsKICAgIHJldHVybiByZXN1bHQ7Cn07Cm1vZHVsZS5leHBvcnRzID0gQXJyYXlSZWFkZXI7" + "Cgp9LHsiLi4vdXRpbHMiOjMyLCIuL0RhdGFSZWFkZXIiOjE4fV0sMTg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewondXNlIHN0cmljdCc7CnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxz" + "Jyk7CgpmdW5jdGlvbiBEYXRhUmVhZGVyKGRhdGEpIHsKICAgIHRoaXMuZGF0YSA9IGRhdGE7IC8vIHR5cGUgOiBzZWUgaW1wbGVtZW50YXRpb24KICAgIHRoaXMubGVuZ3RoID0gZGF0YS5sZW5ndGg7CiAgICB0" + "aGlzLmluZGV4ID0gMDsKICAgIHRoaXMuemVybyA9IDA7Cn0KRGF0YVJlYWRlci5wcm90b3R5cGUgPSB7CiAgICAvKioKICAgICAqIENoZWNrIHRoYXQgdGhlIG9mZnNldCB3aWxsIG5vdCBnbyB0b28gZmFyLgog" + "ICAgICogQHBhcmFtIHtzdHJpbmd9IG9mZnNldCB0aGUgYWRkaXRpb25hbCBvZmZzZXQgdG8gY2hlY2suCiAgICAgKiBAdGhyb3dzIHtFcnJvcn0gYW4gRXJyb3IgaWYgdGhlIG9mZnNldCBpcyBvdXQgb2YgYm91" + "bmRzLgogICAgICovCiAgICBjaGVja09mZnNldDogZnVuY3Rpb24ob2Zmc2V0KSB7CiAgICAgICAgdGhpcy5jaGVja0luZGV4KHRoaXMuaW5kZXggKyBvZmZzZXQpOwogICAgfSwKICAgIC8qKgogICAgICogQ2hl" + "Y2sgdGhhdCB0aGUgc3BlY2lmaWVkIGluZGV4IHdpbGwgbm90IGJlIHRvbyBmYXIuCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3SW5kZXggdGhlIGluZGV4IHRvIGNoZWNrLgogICAgICogQHRocm93cyB7RXJy" + "b3J9IGFuIEVycm9yIGlmIHRoZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzLgogICAgICovCiAgICBjaGVja0luZGV4OiBmdW5jdGlvbihuZXdJbmRleCkgewogICAgICAgIGlmICh0aGlzLmxlbmd0aCA8IHRoaXMu" + "emVybyArIG5ld0luZGV4IHx8IG5ld0luZGV4IDwgMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkVuZCBvZiBkYXRhIHJlYWNoZWQgKGRhdGEgbGVuZ3RoID0gIiArIHRoaXMubGVuZ3RoICsgIiwg" + "YXNrZWQgaW5kZXggPSAiICsgKG5ld0luZGV4KSArICIpLiBDb3JydXB0ZWQgemlwID8iKTsKICAgICAgICB9CiAgICB9LAogICAgLyoqCiAgICAgKiBDaGFuZ2UgdGhlIGluZGV4LgogICAgICogQHBhcmFtIHtu" + "dW1iZXJ9IG5ld0luZGV4IFRoZSBuZXcgaW5kZXguCiAgICAgKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIG5ldyBpbmRleCBpcyBvdXQgb2YgdGhlIGRhdGEuCiAgICAgKi8KICAgIHNldEluZGV4OiBmdW5jdGlv" + "bihuZXdJbmRleCkgewogICAgICAgIHRoaXMuY2hlY2tJbmRleChuZXdJbmRleCk7CiAgICAgICAgdGhpcy5pbmRleCA9IG5ld0luZGV4OwogICAgfSwKICAgIC8qKgogICAgICogU2tpcCB0aGUgbmV4dCBuIGJ5" + "dGVzLgogICAgICogQHBhcmFtIHtudW1iZXJ9IG4gdGhlIG51bWJlciBvZiBieXRlcyB0byBza2lwLgogICAgICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBuZXcgaW5kZXggaXMgb3V0IG9mIHRoZSBkYXRhLgog" + "ICAgICovCiAgICBza2lwOiBmdW5jdGlvbihuKSB7CiAgICAgICAgdGhpcy5zZXRJbmRleCh0aGlzLmluZGV4ICsgbik7CiAgICB9LAogICAgLyoqCiAgICAgKiBHZXQgdGhlIGJ5dGUgYXQgdGhlIHNwZWNpZmll" + "ZCBpbmRleC4KICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpIHRoZSBpbmRleCB0byB1c2UuCiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IGEgYnl0ZS4KICAgICAqLwogICAgYnl0ZUF0OiBmdW5jdGlvbihpKSB7CiAg" + "ICAgICAgLy8gc2VlIGltcGxlbWVudGF0aW9ucwogICAgfSwKICAgIC8qKgogICAgICogR2V0IHRoZSBuZXh0IG51bWJlciB3aXRoIGEgZ2l2ZW4gYnl0ZSBzaXplLgogICAgICogQHBhcmFtIHtudW1iZXJ9IHNp" + "emUgdGhlIG51bWJlciBvZiBieXRlcyB0byByZWFkLgogICAgICogQHJldHVybiB7bnVtYmVyfSB0aGUgY29ycmVzcG9uZGluZyBudW1iZXIuCiAgICAgKi8KICAgIHJlYWRJbnQ6IGZ1bmN0aW9uKHNpemUpIHsK" + "ICAgICAgICB2YXIgcmVzdWx0ID0gMCwKICAgICAgICAgICAgaTsKICAgICAgICB0aGlzLmNoZWNrT2Zmc2V0KHNpemUpOwogICAgICAgIGZvciAoaSA9IHRoaXMuaW5kZXggKyBzaXplIC0gMTsgaSA+PSB0aGlz" + "LmluZGV4OyBpLS0pIHsKICAgICAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCA8PCA4KSArIHRoaXMuYnl0ZUF0KGkpOwogICAgICAgIH0KICAgICAgICB0aGlzLmluZGV4ICs9IHNpemU7CiAgICAgICAgcmV0dXJu" + "IHJlc3VsdDsKICAgIH0sCiAgICAvKioKICAgICAqIEdldCB0aGUgbmV4dCBzdHJpbmcgd2l0aCBhIGdpdmVuIGJ5dGUgc2l6ZS4KICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzaXplIHRoZSBudW1iZXIgb2YgYnl0" + "ZXMgdG8gcmVhZC4KICAgICAqIEByZXR1cm4ge3N0cmluZ30gdGhlIGNvcnJlc3BvbmRpbmcgc3RyaW5nLgogICAgICovCiAgICByZWFkU3RyaW5nOiBmdW5jdGlvbihzaXplKSB7CiAgICAgICAgcmV0dXJuIHV0" + "aWxzLnRyYW5zZm9ybVRvKCJzdHJpbmciLCB0aGlzLnJlYWREYXRhKHNpemUpKTsKICAgIH0sCiAgICAvKioKICAgICAqIEdldCByYXcgZGF0YSB3aXRob3V0IGNvbnZlcnNpb24sIDxzaXplPiBieXRlcy4KICAg" + "ICAqIEBwYXJhbSB7bnVtYmVyfSBzaXplIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC4KICAgICAqIEByZXR1cm4ge09iamVjdH0gdGhlIHJhdyBkYXRhLCBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYy4KICAg" + "ICAqLwogICAgcmVhZERhdGE6IGZ1bmN0aW9uKHNpemUpIHsKICAgICAgICAvLyBzZWUgaW1wbGVtZW50YXRpb25zCiAgICB9LAogICAgLyoqCiAgICAgKiBGaW5kIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgYSB6" + "aXAgc2lnbmF0dXJlICg0IGJ5dGVzKS4KICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzaWcgdGhlIHNpZ25hdHVyZSB0byBmaW5kLgogICAgICogQHJldHVybiB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIGxhc3Qg" + "b2NjdXJyZW5jZSwgLTEgaWYgbm90IGZvdW5kLgogICAgICovCiAgICBsYXN0SW5kZXhPZlNpZ25hdHVyZTogZnVuY3Rpb24oc2lnKSB7CiAgICAgICAgLy8gc2VlIGltcGxlbWVudGF0aW9ucwogICAgfSwKICAg" + "IC8qKgogICAgICogUmVhZCB0aGUgc2lnbmF0dXJlICg0IGJ5dGVzKSBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiBhbmQgY29tcGFyZSBpdCB3aXRoIHNpZy4KICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzaWcgdGhl" + "IGV4cGVjdGVkIHNpZ25hdHVyZQogICAgICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgc2lnbmF0dXJlIG1hdGNoZXMsIGZhbHNlIG90aGVyd2lzZS4KICAgICAqLwogICAgcmVhZEFuZENoZWNrU2ln" + "bmF0dXJlOiBmdW5jdGlvbihzaWcpIHsKICAgICAgICAvLyBzZWUgaW1wbGVtZW50YXRpb25zCiAgICB9LAogICAgLyoqCiAgICAgKiBHZXQgdGhlIG5leHQgZGF0ZS4KICAgICAqIEByZXR1cm4ge0RhdGV9IHRo" + "ZSBkYXRlLgogICAgICovCiAgICByZWFkRGF0ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGRvc3RpbWUgPSB0aGlzLnJlYWRJbnQoNCk7CiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKAogICAg" + "ICAgICgoZG9zdGltZSA+PiAyNSkgJiAweDdmKSArIDE5ODAsIC8vIHllYXIKICAgICAgICAoKGRvc3RpbWUgPj4gMjEpICYgMHgwZikgLSAxLCAvLyBtb250aAogICAgICAgIChkb3N0aW1lID4+IDE2KSAmIDB4" + "MWYsIC8vIGRheQogICAgICAgIChkb3N0aW1lID4+IDExKSAmIDB4MWYsIC8vIGhvdXIKICAgICAgICAoZG9zdGltZSA+PiA1KSAmIDB4M2YsIC8vIG1pbnV0ZQogICAgICAgIChkb3N0aW1lICYgMHgxZikgPDwg" + "MSkpOyAvLyBzZWNvbmQKICAgIH0KfTsKbW9kdWxlLmV4cG9ydHMgPSBEYXRhUmVhZGVyOwoKfSx7Ii4uL3V0aWxzIjozMn1dLDE5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJp" + "Y3QnOwp2YXIgVWludDhBcnJheVJlYWRlciA9IHJlcXVpcmUoJy4vVWludDhBcnJheVJlYWRlcicpOwp2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpOwoKZnVuY3Rpb24gTm9kZUJ1ZmZlclJlYWRlcihk" + "YXRhKSB7CiAgICBVaW50OEFycmF5UmVhZGVyLmNhbGwodGhpcywgZGF0YSk7Cn0KdXRpbHMuaW5oZXJpdHMoTm9kZUJ1ZmZlclJlYWRlciwgVWludDhBcnJheVJlYWRlcik7CgovKioKICogQHNlZSBEYXRhUmVh" + "ZGVyLnJlYWREYXRhCiAqLwpOb2RlQnVmZmVyUmVhZGVyLnByb3RvdHlwZS5yZWFkRGF0YSA9IGZ1bmN0aW9uKHNpemUpIHsKICAgIHRoaXMuY2hlY2tPZmZzZXQoc2l6ZSk7CiAgICB2YXIgcmVzdWx0ID0gdGhp" + "cy5kYXRhLnNsaWNlKHRoaXMuemVybyArIHRoaXMuaW5kZXgsIHRoaXMuemVybyArIHRoaXMuaW5kZXggKyBzaXplKTsKICAgIHRoaXMuaW5kZXggKz0gc2l6ZTsKICAgIHJldHVybiByZXN1bHQ7Cn07Cm1vZHVs" + "ZS5leHBvcnRzID0gTm9kZUJ1ZmZlclJlYWRlcjsKCn0seyIuLi91dGlscyI6MzIsIi4vVWludDhBcnJheVJlYWRlciI6MjF9XSwyMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3Ry" + "aWN0JzsKdmFyIERhdGFSZWFkZXIgPSByZXF1aXJlKCcuL0RhdGFSZWFkZXInKTsKdmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTsKCmZ1bmN0aW9uIFN0cmluZ1JlYWRlcihkYXRhKSB7CiAgICBEYXRh" + "UmVhZGVyLmNhbGwodGhpcywgZGF0YSk7Cn0KdXRpbHMuaW5oZXJpdHMoU3RyaW5nUmVhZGVyLCBEYXRhUmVhZGVyKTsKLyoqCiAqIEBzZWUgRGF0YVJlYWRlci5ieXRlQXQKICovClN0cmluZ1JlYWRlci5wcm90" + "b3R5cGUuYnl0ZUF0ID0gZnVuY3Rpb24oaSkgewogICAgcmV0dXJuIHRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMuemVybyArIGkpOwp9OwovKioKICogQHNlZSBEYXRhUmVhZGVyLmxhc3RJbmRleE9mU2lnbmF0" + "dXJlCiAqLwpTdHJpbmdSZWFkZXIucHJvdG90eXBlLmxhc3RJbmRleE9mU2lnbmF0dXJlID0gZnVuY3Rpb24oc2lnKSB7CiAgICByZXR1cm4gdGhpcy5kYXRhLmxhc3RJbmRleE9mKHNpZykgLSB0aGlzLnplcm87" + "Cn07Ci8qKgogKiBAc2VlIERhdGFSZWFkZXIucmVhZEFuZENoZWNrU2lnbmF0dXJlCiAqLwpTdHJpbmdSZWFkZXIucHJvdG90eXBlLnJlYWRBbmRDaGVja1NpZ25hdHVyZSA9IGZ1bmN0aW9uIChzaWcpIHsKICAg" + "IHZhciBkYXRhID0gdGhpcy5yZWFkRGF0YSg0KTsKICAgIHJldHVybiBzaWcgPT09IGRhdGE7Cn07Ci8qKgogKiBAc2VlIERhdGFSZWFkZXIucmVhZERhdGEKICovClN0cmluZ1JlYWRlci5wcm90b3R5cGUucmVh" + "ZERhdGEgPSBmdW5jdGlvbihzaXplKSB7CiAgICB0aGlzLmNoZWNrT2Zmc2V0KHNpemUpOwogICAgLy8gdGhpcyB3aWxsIHdvcmsgYmVjYXVzZSB0aGUgY29uc3RydWN0b3IgYXBwbGllZCB0aGUgIiYgMHhmZiIg" + "bWFzay4KICAgIHZhciByZXN1bHQgPSB0aGlzLmRhdGEuc2xpY2UodGhpcy56ZXJvICsgdGhpcy5pbmRleCwgdGhpcy56ZXJvICsgdGhpcy5pbmRleCArIHNpemUpOwogICAgdGhpcy5pbmRleCArPSBzaXplOwog" + "ICAgcmV0dXJuIHJlc3VsdDsKfTsKbW9kdWxlLmV4cG9ydHMgPSBTdHJpbmdSZWFkZXI7Cgp9LHsiLi4vdXRpbHMiOjMyLCIuL0RhdGFSZWFkZXIiOjE4fV0sMjE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4" + "cG9ydHMpewondXNlIHN0cmljdCc7CnZhciBBcnJheVJlYWRlciA9IHJlcXVpcmUoJy4vQXJyYXlSZWFkZXInKTsKdmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTsKCmZ1bmN0aW9uIFVpbnQ4QXJyYXlS" + "ZWFkZXIoZGF0YSkgewogICAgQXJyYXlSZWFkZXIuY2FsbCh0aGlzLCBkYXRhKTsKfQp1dGlscy5pbmhlcml0cyhVaW50OEFycmF5UmVhZGVyLCBBcnJheVJlYWRlcik7Ci8qKgogKiBAc2VlIERhdGFSZWFkZXIu" + "cmVhZERhdGEKICovClVpbnQ4QXJyYXlSZWFkZXIucHJvdG90eXBlLnJlYWREYXRhID0gZnVuY3Rpb24oc2l6ZSkgewogICAgdGhpcy5jaGVja09mZnNldChzaXplKTsKICAgIGlmKHNpemUgPT09IDApIHsKICAg" + "ICAgICAvLyBpbiBJRTEwLCB3aGVuIHVzaW5nIHN1YmFycmF5KGlkeCwgaWR4KSwgd2UgZ2V0IHRoZSBhcnJheSBbMHgwMF0gaW5zdGVhZCBvZiBbXS4KICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7" + "CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gdGhpcy5kYXRhLnN1YmFycmF5KHRoaXMuemVybyArIHRoaXMuaW5kZXgsIHRoaXMuemVybyArIHRoaXMuaW5kZXggKyBzaXplKTsKICAgIHRoaXMuaW5kZXggKz0gc2l6" + "ZTsKICAgIHJldHVybiByZXN1bHQ7Cn07Cm1vZHVsZS5leHBvcnRzID0gVWludDhBcnJheVJlYWRlcjsKCn0seyIuLi91dGlscyI6MzIsIi4vQXJyYXlSZWFkZXIiOjE3fV0sMjI6W2Z1bmN0aW9uKHJlcXVpcmUs" + "bW9kdWxlLGV4cG9ydHMpewondXNlIHN0cmljdCc7Cgp2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpOwp2YXIgc3VwcG9ydCA9IHJlcXVpcmUoJy4uL3N1cHBvcnQnKTsKdmFyIEFycmF5UmVhZGVyID0g" + "cmVxdWlyZSgnLi9BcnJheVJlYWRlcicpOwp2YXIgU3RyaW5nUmVhZGVyID0gcmVxdWlyZSgnLi9TdHJpbmdSZWFkZXInKTsKdmFyIE5vZGVCdWZmZXJSZWFkZXIgPSByZXF1aXJlKCcuL05vZGVCdWZmZXJSZWFk" + "ZXInKTsKdmFyIFVpbnQ4QXJyYXlSZWFkZXIgPSByZXF1aXJlKCcuL1VpbnQ4QXJyYXlSZWFkZXInKTsKCi8qKgogKiBDcmVhdGUgYSByZWFkZXIgYWRhcHRlZCB0byB0aGUgZGF0YS4KICogQHBhcmFtIHtTdHJp" + "bmd8QXJyYXlCdWZmZXJ8VWludDhBcnJheXxCdWZmZXJ9IGRhdGEgdGhlIGRhdGEgdG8gcmVhZC4KICogQHJldHVybiB7RGF0YVJlYWRlcn0gdGhlIGRhdGEgcmVhZGVyLgogKi8KbW9kdWxlLmV4cG9ydHMgPSBm" + "dW5jdGlvbiAoZGF0YSkgewogICAgdmFyIHR5cGUgPSB1dGlscy5nZXRUeXBlT2YoZGF0YSk7CiAgICB1dGlscy5jaGVja1N1cHBvcnQodHlwZSk7CiAgICBpZiAodHlwZSA9PT0gInN0cmluZyIgJiYgIXN1cHBv" + "cnQudWludDhhcnJheSkgewogICAgICAgIHJldHVybiBuZXcgU3RyaW5nUmVhZGVyKGRhdGEpOwogICAgfQogICAgaWYgKHR5cGUgPT09ICJub2RlYnVmZmVyIikgewogICAgICAgIHJldHVybiBuZXcgTm9kZUJ1" + "ZmZlclJlYWRlcihkYXRhKTsKICAgIH0KICAgIGlmIChzdXBwb3J0LnVpbnQ4YXJyYXkpIHsKICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXlSZWFkZXIodXRpbHMudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXki" + "LCBkYXRhKSk7CiAgICB9CiAgICByZXR1cm4gbmV3IEFycmF5UmVhZGVyKHV0aWxzLnRyYW5zZm9ybVRvKCJhcnJheSIsIGRhdGEpKTsKfTsKCn0seyIuLi9zdXBwb3J0IjozMCwiLi4vdXRpbHMiOjMyLCIuL0Fy" + "cmF5UmVhZGVyIjoxNywiLi9Ob2RlQnVmZmVyUmVhZGVyIjoxOSwiLi9TdHJpbmdSZWFkZXIiOjIwLCIuL1VpbnQ4QXJyYXlSZWFkZXIiOjIxfV0sMjM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMp" + "ewondXNlIHN0cmljdCc7CmV4cG9ydHMuTE9DQUxfRklMRV9IRUFERVIgPSAiUEtceDAzXHgwNCI7CmV4cG9ydHMuQ0VOVFJBTF9GSUxFX0hFQURFUiA9ICJQS1x4MDFceDAyIjsKZXhwb3J0cy5DRU5UUkFMX0RJ" + "UkVDVE9SWV9FTkQgPSAiUEtceDA1XHgwNiI7CmV4cG9ydHMuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUiA9ICJQS1x4MDZceDA3IjsKZXhwb3J0cy5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQg" + "PSAiUEtceDA2XHgwNiI7CmV4cG9ydHMuREFUQV9ERVNDUklQVE9SID0gIlBLXHgwN1x4MDgiOwoKfSx7fV0sMjQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewondXNlIHN0cmljdCc7Cgp2YXIg" + "R2VuZXJpY1dvcmtlciA9IHJlcXVpcmUoJy4vR2VuZXJpY1dvcmtlcicpOwp2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpOwoKLyoqCiAqIEEgd29ya2VyIHdoaWNoIGNvbnZlcnQgY2h1bmtzIHRvIGEg" + "c3BlY2lmaWVkIHR5cGUuCiAqIEBjb25zdHJ1Y3RvcgogKiBAcGFyYW0ge1N0cmluZ30gZGVzdFR5cGUgdGhlIGRlc3RpbmF0aW9uIHR5cGUuCiAqLwpmdW5jdGlvbiBDb252ZXJ0V29ya2VyKGRlc3RUeXBlKSB7" + "CiAgICBHZW5lcmljV29ya2VyLmNhbGwodGhpcywgIkNvbnZlcnRXb3JrZXIgdG8gIiArIGRlc3RUeXBlKTsKICAgIHRoaXMuZGVzdFR5cGUgPSBkZXN0VHlwZTsKfQp1dGlscy5pbmhlcml0cyhDb252ZXJ0V29y" + "a2VyLCBHZW5lcmljV29ya2VyKTsKCi8qKgogKiBAc2VlIEdlbmVyaWNXb3JrZXIucHJvY2Vzc0NodW5rCiAqLwpDb252ZXJ0V29ya2VyLnByb3RvdHlwZS5wcm9jZXNzQ2h1bmsgPSBmdW5jdGlvbiAoY2h1bmsp" + "IHsKICAgIHRoaXMucHVzaCh7CiAgICAgICAgZGF0YSA6IHV0aWxzLnRyYW5zZm9ybVRvKHRoaXMuZGVzdFR5cGUsIGNodW5rLmRhdGEpLAogICAgICAgIG1ldGEgOiBjaHVuay5tZXRhCiAgICB9KTsKfTsKbW9k" + "dWxlLmV4cG9ydHMgPSBDb252ZXJ0V29ya2VyOwoKfSx7Ii4uL3V0aWxzIjozMiwiLi9HZW5lcmljV29ya2VyIjoyOH1dLDI1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3Qn" + "OwoKdmFyIEdlbmVyaWNXb3JrZXIgPSByZXF1aXJlKCcuL0dlbmVyaWNXb3JrZXInKTsKdmFyIGNyYzMyID0gcmVxdWlyZSgnLi4vY3JjMzInKTsKdmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTsKCi8q" + "KgogKiBBIHdvcmtlciB3aGljaCBjYWxjdWxhdGUgdGhlIGNyYzMyIG9mIHRoZSBkYXRhIGZsb3dpbmcgdGhyb3VnaC4KICogQGNvbnN0cnVjdG9yCiAqLwpmdW5jdGlvbiBDcmMzMlByb2JlKCkgewogICAgR2Vu" + "ZXJpY1dvcmtlci5jYWxsKHRoaXMsICJDcmMzMlByb2JlIik7CiAgICB0aGlzLndpdGhTdHJlYW1JbmZvKCJjcmMzMiIsIDApOwp9CnV0aWxzLmluaGVyaXRzKENyYzMyUHJvYmUsIEdlbmVyaWNXb3JrZXIpOwoK" + "LyoqCiAqIEBzZWUgR2VuZXJpY1dvcmtlci5wcm9jZXNzQ2h1bmsKICovCkNyYzMyUHJvYmUucHJvdG90eXBlLnByb2Nlc3NDaHVuayA9IGZ1bmN0aW9uIChjaHVuaykgewogICAgdGhpcy5zdHJlYW1JbmZvLmNy" + "YzMyID0gY3JjMzIoY2h1bmsuZGF0YSwgdGhpcy5zdHJlYW1JbmZvLmNyYzMyIHx8IDApOwogICAgdGhpcy5wdXNoKGNodW5rKTsKfTsKbW9kdWxlLmV4cG9ydHMgPSBDcmMzMlByb2JlOwoKfSx7Ii4uL2NyYzMy" + "Ijo0LCIuLi91dGlscyI6MzIsIi4vR2VuZXJpY1dvcmtlciI6Mjh9XSwyNjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsKCnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0" + "aWxzJyk7CnZhciBHZW5lcmljV29ya2VyID0gcmVxdWlyZSgnLi9HZW5lcmljV29ya2VyJyk7CgovKioKICogQSB3b3JrZXIgd2hpY2ggY2FsY3VsYXRlIHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIGRhdGEgZmxv" + "d2luZyB0aHJvdWdoLgogKiBAY29uc3RydWN0b3IKICogQHBhcmFtIHtTdHJpbmd9IHByb3BOYW1lIHRoZSBuYW1lIHVzZWQgdG8gZXhwb3NlIHRoZSBsZW5ndGgKICovCmZ1bmN0aW9uIERhdGFMZW5ndGhQcm9i" + "ZShwcm9wTmFtZSkgewogICAgR2VuZXJpY1dvcmtlci5jYWxsKHRoaXMsICJEYXRhTGVuZ3RoUHJvYmUgZm9yICIgKyBwcm9wTmFtZSk7CiAgICB0aGlzLnByb3BOYW1lID0gcHJvcE5hbWU7CiAgICB0aGlzLndp" + "dGhTdHJlYW1JbmZvKHByb3BOYW1lLCAwKTsKfQp1dGlscy5pbmhlcml0cyhEYXRhTGVuZ3RoUHJvYmUsIEdlbmVyaWNXb3JrZXIpOwoKLyoqCiAqIEBzZWUgR2VuZXJpY1dvcmtlci5wcm9jZXNzQ2h1bmsKICov" + "CkRhdGFMZW5ndGhQcm9iZS5wcm90b3R5cGUucHJvY2Vzc0NodW5rID0gZnVuY3Rpb24gKGNodW5rKSB7CiAgICBpZihjaHVuaykgewogICAgICAgIHZhciBsZW5ndGggPSB0aGlzLnN0cmVhbUluZm9bdGhpcy5w" + "cm9wTmFtZV0gfHwgMDsKICAgICAgICB0aGlzLnN0cmVhbUluZm9bdGhpcy5wcm9wTmFtZV0gPSBsZW5ndGggKyBjaHVuay5kYXRhLmxlbmd0aDsKICAgIH0KICAgIEdlbmVyaWNXb3JrZXIucHJvdG90eXBlLnBy" + "b2Nlc3NDaHVuay5jYWxsKHRoaXMsIGNodW5rKTsKfTsKbW9kdWxlLmV4cG9ydHMgPSBEYXRhTGVuZ3RoUHJvYmU7CgoKfSx7Ii4uL3V0aWxzIjozMiwiLi9HZW5lcmljV29ya2VyIjoyOH1dLDI3OltmdW5jdGlv" + "bihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwoKdmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTsKdmFyIEdlbmVyaWNXb3JrZXIgPSByZXF1aXJlKCcuL0dlbmVyaWNXb3JrZXIn" + "KTsKCi8vIHRoZSBzaXplIG9mIHRoZSBnZW5lcmF0ZWQgY2h1bmtzCi8vIFRPRE8gZXhwb3NlIHRoaXMgYXMgYSBwdWJsaWMgdmFyaWFibGUKdmFyIERFRkFVTFRfQkxPQ0tfU0laRSA9IDE2ICogMTAyNDsKCi8q" + "KgogKiBBIHdvcmtlciB0aGF0IHJlYWRzIGEgY29udGVudCBhbmQgZW1pdHMgY2h1bmtzLgogKiBAY29uc3RydWN0b3IKICogQHBhcmFtIHtQcm9taXNlfSBkYXRhUCB0aGUgcHJvbWlzZSBvZiB0aGUgZGF0YSB0" + "byBzcGxpdAogKi8KZnVuY3Rpb24gRGF0YVdvcmtlcihkYXRhUCkgewogICAgR2VuZXJpY1dvcmtlci5jYWxsKHRoaXMsICJEYXRhV29ya2VyIik7CiAgICB2YXIgc2VsZiA9IHRoaXM7CiAgICB0aGlzLmRhdGFJ" + "c1JlYWR5ID0gZmFsc2U7CiAgICB0aGlzLmluZGV4ID0gMDsKICAgIHRoaXMubWF4ID0gMDsKICAgIHRoaXMuZGF0YSA9IG51bGw7CiAgICB0aGlzLnR5cGUgPSAiIjsKCiAgICB0aGlzLl90aWNrU2NoZWR1bGVk" + "ID0gZmFsc2U7CgogICAgZGF0YVAudGhlbihmdW5jdGlvbiAoZGF0YSkgewogICAgICAgIHNlbGYuZGF0YUlzUmVhZHkgPSB0cnVlOwogICAgICAgIHNlbGYuZGF0YSA9IGRhdGE7CiAgICAgICAgc2VsZi5tYXgg" + "PSBkYXRhICYmIGRhdGEubGVuZ3RoIHx8IDA7CiAgICAgICAgc2VsZi50eXBlID0gdXRpbHMuZ2V0VHlwZU9mKGRhdGEpOwogICAgICAgIGlmKCFzZWxmLmlzUGF1c2VkKSB7CiAgICAgICAgICAgIHNlbGYuX3Rp" + "Y2tBbmRSZXBlYXQoKTsKICAgICAgICB9CiAgICB9LCBmdW5jdGlvbiAoZSkgewogICAgICAgIHNlbGYuZXJyb3IoZSk7CiAgICB9KTsKfQoKdXRpbHMuaW5oZXJpdHMoRGF0YVdvcmtlciwgR2VuZXJpY1dvcmtl" + "cik7CgovKioKICogQHNlZSBHZW5lcmljV29ya2VyLmNsZWFuVXAKICovCkRhdGFXb3JrZXIucHJvdG90eXBlLmNsZWFuVXAgPSBmdW5jdGlvbiAoKSB7CiAgICBHZW5lcmljV29ya2VyLnByb3RvdHlwZS5jbGVh" + "blVwLmNhbGwodGhpcyk7CiAgICB0aGlzLmRhdGEgPSBudWxsOwp9OwoKLyoqCiAqIEBzZWUgR2VuZXJpY1dvcmtlci5yZXN1bWUKICovCkRhdGFXb3JrZXIucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uICgp" + "IHsKICAgIGlmKCFHZW5lcmljV29ya2VyLnByb3RvdHlwZS5yZXN1bWUuY2FsbCh0aGlzKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAoIXRoaXMuX3RpY2tTY2hlZHVsZWQgJiYgdGhp" + "cy5kYXRhSXNSZWFkeSkgewogICAgICAgIHRoaXMuX3RpY2tTY2hlZHVsZWQgPSB0cnVlOwogICAgICAgIHV0aWxzLmRlbGF5KHRoaXMuX3RpY2tBbmRSZXBlYXQsIFtdLCB0aGlzKTsKICAgIH0KICAgIHJldHVy" + "biB0cnVlOwp9OwoKLyoqCiAqIFRyaWdnZXIgYSB0aWNrIGEgc2NoZWR1bGUgYW4gb3RoZXIgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLgogKi8KRGF0YVdvcmtlci5wcm90b3R5cGUuX3RpY2tBbmRSZXBlYXQgPSBm" + "dW5jdGlvbigpIHsKICAgIHRoaXMuX3RpY2tTY2hlZHVsZWQgPSBmYWxzZTsKICAgIGlmKHRoaXMuaXNQYXVzZWQgfHwgdGhpcy5pc0ZpbmlzaGVkKSB7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5f" + "dGljaygpOwogICAgaWYoIXRoaXMuaXNGaW5pc2hlZCkgewogICAgICAgIHV0aWxzLmRlbGF5KHRoaXMuX3RpY2tBbmRSZXBlYXQsIFtdLCB0aGlzKTsKICAgICAgICB0aGlzLl90aWNrU2NoZWR1bGVkID0gdHJ1" + "ZTsKICAgIH0KfTsKCi8qKgogKiBSZWFkIGFuZCBwdXNoIGEgY2h1bmsuCiAqLwpEYXRhV29ya2VyLnByb3RvdHlwZS5fdGljayA9IGZ1bmN0aW9uKCkgewoKICAgIGlmKHRoaXMuaXNQYXVzZWQgfHwgdGhpcy5p" + "c0ZpbmlzaGVkKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHZhciBzaXplID0gREVGQVVMVF9CTE9DS19TSVpFOwogICAgdmFyIGRhdGEgPSBudWxsLCBuZXh0SW5kZXggPSBNYXRoLm1pbih0" + "aGlzLm1heCwgdGhpcy5pbmRleCArIHNpemUpOwogICAgaWYgKHRoaXMuaW5kZXggPj0gdGhpcy5tYXgpIHsKICAgICAgICAvLyBFT0YKICAgICAgICByZXR1cm4gdGhpcy5lbmQoKTsKICAgIH0gZWxzZSB7CiAg" + "ICAgICAgc3dpdGNoKHRoaXMudHlwZSkgewogICAgICAgICAgICBjYXNlICJzdHJpbmciOgogICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMuZGF0YS5zdWJzdHJpbmcodGhpcy5pbmRleCwgbmV4dEluZGV4KTsK" + "ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInVpbnQ4YXJyYXkiOgogICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMuZGF0YS5zdWJhcnJheSh0aGlzLmluZGV4LCBuZXh0SW5kZXgpOwogICAg" + "ICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXJyYXkiOgogICAgICAgICAgICBjYXNlICJub2RlYnVmZmVyIjoKICAgICAgICAgICAgICAgIGRhdGEgPSB0aGlzLmRhdGEuc2xpY2UodGhpcy5pbmRl" + "eCwgbmV4dEluZGV4KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHRoaXMuaW5kZXggPSBuZXh0SW5kZXg7CiAgICAgICAgcmV0dXJuIHRoaXMucHVzaCh7CiAgICAgICAgICAgIGRhdGEg" + "OiBkYXRhLAogICAgICAgICAgICBtZXRhIDogewogICAgICAgICAgICAgICAgcGVyY2VudCA6IHRoaXMubWF4ID8gdGhpcy5pbmRleCAvIHRoaXMubWF4ICogMTAwIDogMAogICAgICAgICAgICB9CiAgICAgICAg" + "fSk7CiAgICB9Cn07Cgptb2R1bGUuZXhwb3J0cyA9IERhdGFXb3JrZXI7Cgp9LHsiLi4vdXRpbHMiOjMyLCIuL0dlbmVyaWNXb3JrZXIiOjI4fV0sMjg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMp" + "ewondXNlIHN0cmljdCc7CgovKioKICogQSB3b3JrZXIgdGhhdCBkb2VzIG5vdGhpbmcgYnV0IHBhc3NpbmcgY2h1bmtzIHRvIHRoZSBuZXh0IG9uZS4gVGhpcyBpcyBsaWtlCiAqIGEgbm9kZWpzIHN0cmVhbSBi" + "dXQgd2l0aCBzb21lIGRpZmZlcmVuY2VzLiBPbiB0aGUgZ29vZCBzaWRlIDoKICogLSBpdCB3b3JrcyBvbiBJRSA2LTkgd2l0aG91dCBhbnkgaXNzdWUgLyBwb2x5ZmlsbAogKiAtIGl0IHdlaWdodHMgbGVzcyB0" + "aGFuIHRoZSBmdWxsIGRlcGVuZGVuY2llcyBidW5kbGVkIHdpdGggYnJvd3NlcmlmeQogKiAtIGl0IGZvcndhcmRzIGVycm9ycyAobm8gbmVlZCB0byBkZWNsYXJlIGFuIGVycm9yIGhhbmRsZXIgRVZFUllXSEVS" + "RSkKICoKICogQSBjaHVuayBpcyBhbiBvYmplY3Qgd2l0aCAyIGF0dHJpYnV0ZXMgOiBgbWV0YWAgYW5kIGBkYXRhYC4gVGhlIGZvcm1lciBpcyBhbgogKiBvYmplY3QgY29udGFpbmluZyBhbnl0aGluZyAoYHBl" + "cmNlbnRgIGZvciBleGFtcGxlKSwgc2VlIGVhY2ggd29ya2VyIGZvciBtb3JlCiAqIGRldGFpbHMuIFRoZSBsYXR0ZXIgaXMgdGhlIHJlYWwgZGF0YSAoU3RyaW5nLCBVaW50OEFycmF5LCBldGMpLgogKgogKiBA" + "Y29uc3RydWN0b3IKICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIG5hbWUgb2YgdGhlIHN0cmVhbSAobWFpbmx5IHVzZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcykKICovCmZ1bmN0aW9uIEdlbmVyaWNXb3Jr" + "ZXIobmFtZSkgewogICAgLy8gdGhlIG5hbWUgb2YgdGhlIHdvcmtlcgogICAgdGhpcy5uYW1lID0gbmFtZSB8fCAiZGVmYXVsdCI7CiAgICAvLyBhbiBvYmplY3QgY29udGFpbmluZyBtZXRhZGF0YSBhYm91dCB0" + "aGUgd29ya2VycyBjaGFpbgogICAgdGhpcy5zdHJlYW1JbmZvID0ge307CiAgICAvLyBhbiBlcnJvciB3aGljaCBoYXBwZW5lZCB3aGVuIHRoZSB3b3JrZXIgd2FzIHBhdXNlZAogICAgdGhpcy5nZW5lcmF0ZWRF" + "cnJvciA9IG51bGw7CiAgICAvLyBhbiBvYmplY3QgY29udGFpbmluZyBtZXRhZGF0YSB0byBiZSBtZXJnZWQgYnkgdGhpcyB3b3JrZXIgaW50byB0aGUgZ2VuZXJhbCBtZXRhZGF0YQogICAgdGhpcy5leHRyYVN0" + "cmVhbUluZm8gPSB7fTsKICAgIC8vIHRydWUgaWYgdGhlIHN0cmVhbSBpcyBwYXVzZWQgKGFuZCBzaG91bGQgbm90IGRvIGFueXRoaW5nKSwgZmFsc2Ugb3RoZXJ3aXNlCiAgICB0aGlzLmlzUGF1c2VkID0gdHJ1" + "ZTsKICAgIC8vIHRydWUgaWYgdGhlIHN0cmVhbSBpcyBmaW5pc2hlZCAoYW5kIHNob3VsZCBub3QgZG8gYW55dGhpbmcpLCBmYWxzZSBvdGhlcndpc2UKICAgIHRoaXMuaXNGaW5pc2hlZCA9IGZhbHNlOwogICAg" + "Ly8gdHJ1ZSBpZiB0aGUgc3RyZWFtIGlzIGxvY2tlZCB0byBwcmV2ZW50IGZ1cnRoZXIgc3RydWN0dXJlIHVwZGF0ZXMgKHBpcGUpLCBmYWxzZSBvdGhlcndpc2UKICAgIHRoaXMuaXNMb2NrZWQgPSBmYWxzZTsK" + "ICAgIC8vIHRoZSBldmVudCBsaXN0ZW5lcnMKICAgIHRoaXMuX2xpc3RlbmVycyA9IHsKICAgICAgICAnZGF0YSc6W10sCiAgICAgICAgJ2VuZCc6W10sCiAgICAgICAgJ2Vycm9yJzpbXQogICAgfTsKICAgIC8v" + "IHRoZSBwcmV2aW91cyB3b3JrZXIsIGlmIGFueQogICAgdGhpcy5wcmV2aW91cyA9IG51bGw7Cn0KCkdlbmVyaWNXb3JrZXIucHJvdG90eXBlID0gewogICAgLyoqCiAgICAgKiBQdXNoIGEgY2h1bmsgdG8gdGhl" + "IG5leHQgd29ya2Vycy4KICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjaHVuayB0aGUgY2h1bmsgdG8gcHVzaAogICAgICovCiAgICBwdXNoIDogZnVuY3Rpb24gKGNodW5rKSB7CiAgICAgICAgdGhpcy5lbWl0KCJk" + "YXRhIiwgY2h1bmspOwogICAgfSwKICAgIC8qKgogICAgICogRW5kIHRoZSBzdHJlYW0uCiAgICAgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlmIHRoaXMgY2FsbCBlbmRlZCB0aGUgd29ya2VyLCBmYWxzZSBv" + "dGhlcndpc2UuCiAgICAgKi8KICAgIGVuZCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICBpZiAodGhpcy5pc0ZpbmlzaGVkKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIHRo" + "aXMuZmx1c2goKTsKICAgICAgICB0cnkgewogICAgICAgICAgICB0aGlzLmVtaXQoImVuZCIpOwogICAgICAgICAgICB0aGlzLmNsZWFuVXAoKTsKICAgICAgICAgICAgdGhpcy5pc0ZpbmlzaGVkID0gdHJ1ZTsK" + "ICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIHRoaXMuZW1pdCgiZXJyb3IiLCBlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9LAogICAgLyoqCiAgICAgKiBFbmQgdGhlIHN0" + "cmVhbSB3aXRoIGFuIGVycm9yLgogICAgICogQHBhcmFtIHtFcnJvcn0gZSB0aGUgZXJyb3Igd2hpY2ggY2F1c2VkIHRoZSBwcmVtYXR1cmUgZW5kLgogICAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiB0" + "aGlzIGNhbGwgZW5kZWQgdGhlIHdvcmtlciB3aXRoIGFuIGVycm9yLCBmYWxzZSBvdGhlcndpc2UuCiAgICAgKi8KICAgIGVycm9yIDogZnVuY3Rpb24gKGUpIHsKICAgICAgICBpZiAodGhpcy5pc0ZpbmlzaGVk" + "KSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGlmKHRoaXMuaXNQYXVzZWQpIHsKICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZWRFcnJvciA9IGU7CiAgICAgICAgfSBlbHNl" + "IHsKICAgICAgICAgICAgdGhpcy5pc0ZpbmlzaGVkID0gdHJ1ZTsKCiAgICAgICAgICAgIHRoaXMuZW1pdCgiZXJyb3IiLCBlKTsKCiAgICAgICAgICAgIC8vIGluIHRoZSB3b3JrZXJzIGNoYWluIGV4cGxvZGVk" + "IGluIHRoZSBtaWRkbGUgb2YgdGhlIGNoYWluLAogICAgICAgICAgICAvLyB0aGUgZXJyb3IgZXZlbnQgd2lsbCBnbyBkb3dud2FyZCBidXQgd2UgYWxzbyBuZWVkIHRvIG5vdGlmeQogICAgICAgICAgICAvLyB3" + "b3JrZXJzIHVwd2FyZCB0aGF0IHRoZXJlIGhhcyBiZWVuIGFuIGVycm9yLgogICAgICAgICAgICBpZih0aGlzLnByZXZpb3VzKSB7CiAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzLmVycm9yKGUpOwogICAg" + "ICAgICAgICB9CgogICAgICAgICAgICB0aGlzLmNsZWFuVXAoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9LAogICAgLyoqCiAgICAgKiBBZGQgYSBjYWxsYmFjayBvbiBhbiBldmVudC4K" + "ICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBldmVudCAoZGF0YSwgZW5kLCBlcnJvcikKICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIHRoZSBmdW5jdGlvbiB0byBj" + "YWxsIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZAogICAgICogQHJldHVybiB7R2VuZXJpY1dvcmtlcn0gdGhlIGN1cnJlbnQgb2JqZWN0IGZvciBjaGFpbmFiaWxpdHkKICAgICAqLwogICAgb24gOiBmdW5j" + "dGlvbiAobmFtZSwgbGlzdGVuZXIpIHsKICAgICAgICB0aGlzLl9saXN0ZW5lcnNbbmFtZV0ucHVzaChsaXN0ZW5lcik7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICB9LAogICAgLyoqCiAgICAgKiBDbGVhbiBh" + "bnkgcmVmZXJlbmNlcyB3aGVuIGEgd29ya2VyIGlzIGVuZGluZy4KICAgICAqLwogICAgY2xlYW5VcCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICB0aGlzLnN0cmVhbUluZm8gPSB0aGlzLmdlbmVyYXRlZEVycm9y" + "ID0gdGhpcy5leHRyYVN0cmVhbUluZm8gPSBudWxsOwogICAgICAgIHRoaXMuX2xpc3RlbmVycyA9IFtdOwogICAgfSwKICAgIC8qKgogICAgICogVHJpZ2dlciBhbiBldmVudC4gVGhpcyB3aWxsIGNhbGwgcmVn" + "aXN0ZXJlZCBjYWxsYmFjayB3aXRoIHRoZSBwcm92aWRlZCBhcmcuCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgKGRhdGEsIGVuZCwgZXJyb3IpCiAgICAgKiBAcGFy" + "YW0ge09iamVjdH0gYXJnIHRoZSBhcmd1bWVudCB0byBjYWxsIHRoZSBjYWxsYmFjayB3aXRoLgogICAgICovCiAgICBlbWl0IDogZnVuY3Rpb24gKG5hbWUsIGFyZykgewogICAgICAgIGlmICh0aGlzLl9saXN0" + "ZW5lcnNbbmFtZV0pIHsKICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMuX2xpc3RlbmVyc1tuYW1lXS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgdGhpcy5fbGlzdGVuZXJzW25hbWVd" + "W2ldLmNhbGwodGhpcywgYXJnKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0sCiAgICAvKioKICAgICAqIENoYWluIGEgd29ya2VyIHdpdGggYW4gb3RoZXIuCiAgICAgKiBAcGFyYW0ge1dvcmtlcn0g" + "bmV4dCB0aGUgd29ya2VyIHJlY2VpdmluZyBldmVudHMgZnJvbSB0aGUgY3VycmVudCBvbmUuCiAgICAgKiBAcmV0dXJuIHt3b3JrZXJ9IHRoZSBuZXh0IHdvcmtlciBmb3IgY2hhaW5hYmlsaXR5CiAgICAgKi8K" + "ICAgIHBpcGUgOiBmdW5jdGlvbiAobmV4dCkgewogICAgICAgIHJldHVybiBuZXh0LnJlZ2lzdGVyUHJldmlvdXModGhpcyk7CiAgICB9LAogICAgLyoqCiAgICAgKiBTYW1lIGFzIGBwaXBlYCBpbiB0aGUgb3Ro" + "ZXIgZGlyZWN0aW9uLgogICAgICogVXNpbmcgYW4gQVBJIHdpdGggYHBpcGUobmV4dClgIGlzIHZlcnkgZWFzeS4KICAgICAqIEltcGxlbWVudGluZyB0aGUgQVBJIHdpdGggdGhlIHBvaW50IG9mIHZpZXcgb2Yg" + "dGhlIG5leHQgb25lIHJlZ2lzdGVyaW5nCiAgICAgKiBhIHNvdXJjZSBpcyBlYXNpZXIsIHNlZSB0aGUgWmlwRmlsZVdvcmtlci4KICAgICAqIEBwYXJhbSB7V29ya2VyfSBwcmV2aW91cyB0aGUgcHJldmlvdXMg" + "d29ya2VyLCBzZW5kaW5nIGV2ZW50cyB0byB0aGlzIG9uZQogICAgICogQHJldHVybiB7V29ya2VyfSB0aGUgY3VycmVudCB3b3JrZXIgZm9yIGNoYWluYWJpbGl0eQogICAgICovCiAgICByZWdpc3RlclByZXZp" + "b3VzIDogZnVuY3Rpb24gKHByZXZpb3VzKSB7CiAgICAgICAgaWYgKHRoaXMuaXNMb2NrZWQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUaGUgc3RyZWFtICciICsgdGhpcyArICInIGhhcyBhbHJl" + "YWR5IGJlZW4gdXNlZC4iKTsKICAgICAgICB9CgogICAgICAgIC8vIHNoYXJpbmcgdGhlIHN0cmVhbUluZm8uLi4KICAgICAgICB0aGlzLnN0cmVhbUluZm8gPSBwcmV2aW91cy5zdHJlYW1JbmZvOwogICAgICAg" + "IC8vIC4uLiBhbmQgYWRkaW5nIG91ciBvd24gYml0cwogICAgICAgIHRoaXMubWVyZ2VTdHJlYW1JbmZvKCk7CiAgICAgICAgdGhpcy5wcmV2aW91cyA9ICBwcmV2aW91czsKICAgICAgICB2YXIgc2VsZiA9IHRo" + "aXM7CiAgICAgICAgcHJldmlvdXMub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsKICAgICAgICAgICAgc2VsZi5wcm9jZXNzQ2h1bmsoY2h1bmspOwogICAgICAgIH0pOwogICAgICAgIHByZXZpb3VzLm9u" + "KCdlbmQnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHNlbGYuZW5kKCk7CiAgICAgICAgfSk7CiAgICAgICAgcHJldmlvdXMub24oJ2Vycm9yJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgc2VsZi5l" + "cnJvcihlKTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gdGhpczsKICAgIH0sCiAgICAvKioKICAgICAqIFBhdXNlIHRoZSBzdHJlYW0gc28gaXQgZG9lc24ndCBzZW5kIGV2ZW50cyBhbnltb3JlLgogICAg" + "ICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGlzIGNhbGwgcGF1c2VkIHRoZSB3b3JrZXIsIGZhbHNlIG90aGVyd2lzZS4KICAgICAqLwogICAgcGF1c2UgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYo" + "dGhpcy5pc1BhdXNlZCB8fCB0aGlzLmlzRmluaXNoZWQpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICB0aGlzLmlzUGF1c2VkID0gdHJ1ZTsKCiAgICAgICAgaWYodGhpcy5w" + "cmV2aW91cykgewogICAgICAgICAgICB0aGlzLnByZXZpb3VzLnBhdXNlKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgfSwKICAgIC8qKgogICAgICogUmVzdW1lIGEgcGF1c2VkIHN0cmVh" + "bS4KICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgdGhpcyBjYWxsIHJlc3VtZWQgdGhlIHdvcmtlciwgZmFsc2Ugb3RoZXJ3aXNlLgogICAgICovCiAgICByZXN1bWUgOiBmdW5jdGlvbiAoKSB7CiAg" + "ICAgICAgaWYoIXRoaXMuaXNQYXVzZWQgfHwgdGhpcy5pc0ZpbmlzaGVkKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgdGhpcy5pc1BhdXNlZCA9IGZhbHNlOwoKICAgICAg" + "ICAvLyBpZiB0cnVlLCB0aGUgd29ya2VyIHRyaWVkIHRvIHJlc3VtZSBidXQgZmFpbGVkCiAgICAgICAgdmFyIHdpdGhFcnJvciA9IGZhbHNlOwogICAgICAgIGlmKHRoaXMuZ2VuZXJhdGVkRXJyb3IpIHsKICAg" + "ICAgICAgICAgdGhpcy5lcnJvcih0aGlzLmdlbmVyYXRlZEVycm9yKTsKICAgICAgICAgICAgd2l0aEVycm9yID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYodGhpcy5wcmV2aW91cykgewogICAgICAgICAg" + "ICB0aGlzLnByZXZpb3VzLnJlc3VtZSgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICF3aXRoRXJyb3I7CiAgICB9LAogICAgLyoqCiAgICAgKiBGbHVzaCBhbnkgcmVtYWluaW5nIGJ5dGVzIGFzIHRoZSBz" + "dHJlYW0gaXMgZW5kaW5nLgogICAgICovCiAgICBmbHVzaCA6IGZ1bmN0aW9uICgpIHt9LAogICAgLyoqCiAgICAgKiBQcm9jZXNzIGEgY2h1bmsuIFRoaXMgaXMgdXN1YWxseSB0aGUgbWV0aG9kIG92ZXJyaWRk" + "ZW4uCiAgICAgKiBAcGFyYW0ge09iamVjdH0gY2h1bmsgdGhlIGNodW5rIHRvIHByb2Nlc3MuCiAgICAgKi8KICAgIHByb2Nlc3NDaHVuayA6IGZ1bmN0aW9uKGNodW5rKSB7CiAgICAgICAgdGhpcy5wdXNoKGNo" + "dW5rKTsKICAgIH0sCiAgICAvKioKICAgICAqIEFkZCBhIGtleS92YWx1ZSB0byBiZSBhZGRlZCBpbiB0aGUgd29ya2VycyBjaGFpbiBzdHJlYW1JbmZvIG9uY2UgYWN0aXZhdGVkLgogICAgICogQHBhcmFtIHtT" + "dHJpbmd9IGtleSB0aGUga2V5IHRvIHVzZQogICAgICogQHBhcmFtIHtPYmplY3R9IHZhbHVlIHRoZSBhc3NvY2lhdGVkIHZhbHVlCiAgICAgKiBAcmV0dXJuIHtXb3JrZXJ9IHRoZSBjdXJyZW50IHdvcmtlciBm" + "b3IgY2hhaW5hYmlsaXR5CiAgICAgKi8KICAgIHdpdGhTdHJlYW1JbmZvIDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHsKICAgICAgICB0aGlzLmV4dHJhU3RyZWFtSW5mb1trZXldID0gdmFsdWU7CiAgICAgICAg" + "dGhpcy5tZXJnZVN0cmVhbUluZm8oKTsKICAgICAgICByZXR1cm4gdGhpczsKICAgIH0sCiAgICAvKioKICAgICAqIE1lcmdlIHRoaXMgd29ya2VyJ3Mgc3RyZWFtSW5mbyBpbnRvIHRoZSBjaGFpbidzIHN0cmVh" + "bUluZm8uCiAgICAgKi8KICAgIG1lcmdlU3RyZWFtSW5mbyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICBmb3IodmFyIGtleSBpbiB0aGlzLmV4dHJhU3RyZWFtSW5mbykgewogICAgICAgICAgICBpZiAoIXRoaXMu" + "ZXh0cmFTdHJlYW1JbmZvLmhhc093blByb3BlcnR5KGtleSkpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuc3RyZWFtSW5mb1trZXldID0gdGhpcy5l" + "eHRyYVN0cmVhbUluZm9ba2V5XTsKICAgICAgICB9CiAgICB9LAoKICAgIC8qKgogICAgICogTG9jayB0aGUgc3RyZWFtIHRvIHByZXZlbnQgZnVydGhlciB1cGRhdGVzIG9uIHRoZSB3b3JrZXJzIGNoYWluLgog" + "ICAgICogQWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgYWxsIGNhbGxzIHRvIHBpcGUgd2lsbCBmYWlsLgogICAgICovCiAgICBsb2NrOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKHRoaXMuaXNMb2NrZWQp" + "IHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUaGUgc3RyZWFtICciICsgdGhpcyArICInIGhhcyBhbHJlYWR5IGJlZW4gdXNlZC4iKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5pc0xvY2tlZCA9IHRy" + "dWU7CiAgICAgICAgaWYgKHRoaXMucHJldmlvdXMpIHsKICAgICAgICAgICAgdGhpcy5wcmV2aW91cy5sb2NrKCk7CiAgICAgICAgfQogICAgfSwKCiAgICAvKioKICAgICAqCiAgICAgKiBQcmV0dHkgcHJpbnQg" + "dGhlIHdvcmtlcnMgY2hhaW4uCiAgICAgKi8KICAgIHRvU3RyaW5nIDogZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBtZSA9ICJXb3JrZXIgIiArIHRoaXMubmFtZTsKICAgICAgICBpZiAodGhpcy5wcmV2aW91" + "cykgewogICAgICAgICAgICByZXR1cm4gdGhpcy5wcmV2aW91cyArICIgLT4gIiArIG1lOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBtZTsKICAgICAgICB9CiAgICB9Cn07Cgptb2R1bGUu" + "ZXhwb3J0cyA9IEdlbmVyaWNXb3JrZXI7Cgp9LHt9XSwyOTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsKCnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7CnZh" + "ciBDb252ZXJ0V29ya2VyID0gcmVxdWlyZSgnLi9Db252ZXJ0V29ya2VyJyk7CnZhciBHZW5lcmljV29ya2VyID0gcmVxdWlyZSgnLi9HZW5lcmljV29ya2VyJyk7CnZhciBiYXNlNjQgPSByZXF1aXJlKCcuLi9i" + "YXNlNjQnKTsKdmFyIHN1cHBvcnQgPSByZXF1aXJlKCIuLi9zdXBwb3J0Iik7CnZhciBleHRlcm5hbCA9IHJlcXVpcmUoIi4uL2V4dGVybmFsIik7Cgp2YXIgTm9kZWpzU3RyZWFtT3V0cHV0QWRhcHRlciA9IG51" + "bGw7CmlmIChzdXBwb3J0Lm5vZGVzdHJlYW0pIHsKICAgIHRyeSB7CiAgICAgICAgTm9kZWpzU3RyZWFtT3V0cHV0QWRhcHRlciA9IHJlcXVpcmUoJy4uL25vZGVqcy9Ob2RlanNTdHJlYW1PdXRwdXRBZGFwdGVy" + "Jyk7CiAgICB9IGNhdGNoKGUpIHt9Cn0KCi8qKgogKiBBcHBseSB0aGUgZmluYWwgdHJhbnNmb3JtYXRpb24gb2YgdGhlIGRhdGEuIElmIHRoZSB1c2VyIHdhbnRzIGEgQmxvYiBmb3IKICogZXhhbXBsZSwgaXQn" + "cyBlYXNpZXIgdG8gd29yayB3aXRoIGFuIFU4aW50QXJyYXkgYW5kIGZpbmFsbHkgZG8gdGhlCiAqIEFycmF5QnVmZmVyL0Jsb2IgY29udmVyc2lvbi4KICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgdGhlIG5hbWUg" + "b2YgdGhlIGZpbmFsIHR5cGUKICogQHBhcmFtIHtTdHJpbmd8VWludDhBcnJheXxCdWZmZXJ9IGNvbnRlbnQgdGhlIGNvbnRlbnQgdG8gdHJhbnNmb3JtCiAqIEBwYXJhbSB7U3RyaW5nfSBtaW1lVHlwZSB0aGUg" + "bWltZSB0eXBlIG9mIHRoZSBjb250ZW50LCBpZiBhcHBsaWNhYmxlLgogKiBAcmV0dXJuIHtTdHJpbmd8VWludDhBcnJheXxBcnJheUJ1ZmZlcnxCdWZmZXJ8QmxvYn0gdGhlIGNvbnRlbnQgaW4gdGhlIHJpZ2h0" + "IGZvcm1hdC4KICovCmZ1bmN0aW9uIHRyYW5zZm9ybVppcE91dHB1dCh0eXBlLCBjb250ZW50LCBtaW1lVHlwZSkgewogICAgc3dpdGNoKHR5cGUpIHsKICAgICAgICBjYXNlICJibG9iIiA6CiAgICAgICAgICAg" + "IHJldHVybiB1dGlscy5uZXdCbG9iKHV0aWxzLnRyYW5zZm9ybVRvKCJhcnJheWJ1ZmZlciIsIGNvbnRlbnQpLCBtaW1lVHlwZSk7CiAgICAgICAgY2FzZSAiYmFzZTY0IiA6CiAgICAgICAgICAgIHJldHVybiBi" + "YXNlNjQuZW5jb2RlKGNvbnRlbnQpOwogICAgICAgIGRlZmF1bHQgOgogICAgICAgICAgICByZXR1cm4gdXRpbHMudHJhbnNmb3JtVG8odHlwZSwgY29udGVudCk7CiAgICB9Cn0KCi8qKgogKiBDb25jYXRlbmF0" + "ZSBhbiBhcnJheSBvZiBkYXRhIG9mIHRoZSBnaXZlbiB0eXBlLgogKiBAcGFyYW0ge1N0cmluZ30gdHlwZSB0aGUgdHlwZSBvZiB0aGUgZGF0YSBpbiB0aGUgZ2l2ZW4gYXJyYXkuCiAqIEBwYXJhbSB7QXJyYXl9" + "IGRhdGFBcnJheSB0aGUgYXJyYXkgY29udGFpbmluZyB0aGUgZGF0YSBjaHVua3MgdG8gY29uY2F0ZW5hdGUKICogQHJldHVybiB7U3RyaW5nfFVpbnQ4QXJyYXl8QnVmZmVyfSB0aGUgY29uY2F0ZW5hdGVkIGRh" + "dGEKICogQHRocm93cyBFcnJvciBpZiB0aGUgYXNrZWQgdHlwZSBpcyB1bnN1cHBvcnRlZAogKi8KZnVuY3Rpb24gY29uY2F0ICh0eXBlLCBkYXRhQXJyYXkpIHsKICAgIHZhciBpLCBpbmRleCA9IDAsIHJlcyA9" + "IG51bGwsIHRvdGFsTGVuZ3RoID0gMDsKICAgIGZvcihpID0gMDsgaSA8IGRhdGFBcnJheS5sZW5ndGg7IGkrKykgewogICAgICAgIHRvdGFsTGVuZ3RoICs9IGRhdGFBcnJheVtpXS5sZW5ndGg7CiAgICB9CiAg" + "ICBzd2l0Y2godHlwZSkgewogICAgICAgIGNhc2UgInN0cmluZyI6CiAgICAgICAgICAgIHJldHVybiBkYXRhQXJyYXkuam9pbigiIik7CiAgICAgICAgICBjYXNlICJhcnJheSI6CiAgICAgICAgICAgIHJldHVy" + "biBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBkYXRhQXJyYXkpOwogICAgICAgIGNhc2UgInVpbnQ4YXJyYXkiOgogICAgICAgICAgICByZXMgPSBuZXcgVWludDhBcnJheSh0b3RhbExlbmd0aCk7" + "CiAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IGRhdGFBcnJheS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgcmVzLnNldChkYXRhQXJyYXlbaV0sIGluZGV4KTsKICAgICAgICAgICAgICAgIGluZGV4" + "ICs9IGRhdGFBcnJheVtpXS5sZW5ndGg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlczsKICAgICAgICBjYXNlICJub2RlYnVmZmVyIjoKICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5jb25j" + "YXQoZGF0YUFycmF5KTsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImNvbmNhdCA6IHVuc3VwcG9ydGVkIHR5cGUgJyIgICsgdHlwZSArICInIik7CiAgICB9Cn0KCi8qKgog" + "KiBMaXN0ZW4gYSBTdHJlYW1IZWxwZXIsIGFjY3VtdWxhdGUgaXRzIGNvbnRlbnQgYW5kIGNvbmNhdGVuYXRlIGl0IGludG8gYQogKiBjb21wbGV0ZSBibG9jay4KICogQHBhcmFtIHtTdHJlYW1IZWxwZXJ9IGhl" + "bHBlciB0aGUgaGVscGVyIHRvIHVzZS4KICogQHBhcmFtIHtGdW5jdGlvbn0gdXBkYXRlQ2FsbGJhY2sgYSBjYWxsYmFjayBjYWxsZWQgb24gZWFjaCB1cGRhdGUuIENhbGxlZAogKiB3aXRoIG9uZSBhcmcgOgog" + "KiAtIHRoZSBtZXRhZGF0YSBsaW5rZWQgdG8gdGhlIHVwZGF0ZSByZWNlaXZlZC4KICogQHJldHVybiBQcm9taXNlIHRoZSBwcm9taXNlIGZvciB0aGUgYWNjdW11bGF0aW9uLgogKi8KZnVuY3Rpb24gYWNjdW11" + "bGF0ZShoZWxwZXIsIHVwZGF0ZUNhbGxiYWNrKSB7CiAgICByZXR1cm4gbmV3IGV4dGVybmFsLlByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCl7CiAgICAgICAgdmFyIGRhdGFBcnJheSA9IFtdOwog" + "ICAgICAgIHZhciBjaHVua1R5cGUgPSBoZWxwZXIuX2ludGVybmFsVHlwZSwKICAgICAgICAgICAgcmVzdWx0VHlwZSA9IGhlbHBlci5fb3V0cHV0VHlwZSwKICAgICAgICAgICAgbWltZVR5cGUgPSBoZWxwZXIu" + "X21pbWVUeXBlOwogICAgICAgIGhlbHBlcgogICAgICAgIC5vbignZGF0YScsIGZ1bmN0aW9uIChkYXRhLCBtZXRhKSB7CiAgICAgICAgICAgIGRhdGFBcnJheS5wdXNoKGRhdGEpOwogICAgICAgICAgICBpZih1" + "cGRhdGVDYWxsYmFjaykgewogICAgICAgICAgICAgICAgdXBkYXRlQ2FsbGJhY2sobWV0YSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KQogICAgICAgIC5vbignZXJyb3InLCBmdW5jdGlvbihlcnIpIHsKICAg" + "ICAgICAgICAgZGF0YUFycmF5ID0gW107CiAgICAgICAgICAgIHJlamVjdChlcnIpOwogICAgICAgIH0pCiAgICAgICAgLm9uKCdlbmQnLCBmdW5jdGlvbiAoKXsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAg" + "ICAgICAgIHZhciByZXN1bHQgPSB0cmFuc2Zvcm1aaXBPdXRwdXQocmVzdWx0VHlwZSwgY29uY2F0KGNodW5rVHlwZSwgZGF0YUFycmF5KSwgbWltZVR5cGUpOwogICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1" + "bHQpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICByZWplY3QoZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGF0YUFycmF5ID0gW107CiAgICAgICAgfSkKICAgICAgICAu" + "cmVzdW1lKCk7CiAgICB9KTsKfQoKLyoqCiAqIEFuIGhlbHBlciB0byBlYXNpbHkgdXNlIHdvcmtlcnMgb3V0c2lkZSBvZiBKU1ppcC4KICogQGNvbnN0cnVjdG9yCiAqIEBwYXJhbSB7V29ya2VyfSB3b3JrZXIg" + "dGhlIHdvcmtlciB0byB3cmFwCiAqIEBwYXJhbSB7U3RyaW5nfSBvdXRwdXRUeXBlIHRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgYnkgdGhlIHVzZQogKiBAcGFyYW0ge1N0cmluZ30gbWltZVR5cGUgdGhlIG1p" + "bWUgdHlwZSBvZiB0aGUgY29udGVudCwgaWYgYXBwbGljYWJsZS4KICovCmZ1bmN0aW9uIFN0cmVhbUhlbHBlcih3b3JrZXIsIG91dHB1dFR5cGUsIG1pbWVUeXBlKSB7CiAgICB2YXIgaW50ZXJuYWxUeXBlID0g" + "b3V0cHV0VHlwZTsKICAgIHN3aXRjaChvdXRwdXRUeXBlKSB7CiAgICAgICAgY2FzZSAiYmxvYiI6CiAgICAgICAgY2FzZSAiYXJyYXlidWZmZXIiOgogICAgICAgICAgICBpbnRlcm5hbFR5cGUgPSAidWludDhh" + "cnJheSI7CiAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiYmFzZTY0IjoKICAgICAgICAgICAgaW50ZXJuYWxUeXBlID0gInN0cmluZyI7CiAgICAgICAgYnJlYWs7CiAgICB9CgogICAgdHJ5IHsKICAgICAg" + "ICAvLyB0aGUgdHlwZSB1c2VkIGludGVybmFsbHkKICAgICAgICB0aGlzLl9pbnRlcm5hbFR5cGUgPSBpbnRlcm5hbFR5cGU7CiAgICAgICAgLy8gdGhlIHR5cGUgdXNlZCB0byBvdXRwdXQgcmVzdWx0cwogICAg" + "ICAgIHRoaXMuX291dHB1dFR5cGUgPSBvdXRwdXRUeXBlOwogICAgICAgIC8vIHRoZSBtaW1lIHR5cGUKICAgICAgICB0aGlzLl9taW1lVHlwZSA9IG1pbWVUeXBlOwogICAgICAgIHV0aWxzLmNoZWNrU3VwcG9y" + "dChpbnRlcm5hbFR5cGUpOwogICAgICAgIHRoaXMuX3dvcmtlciA9IHdvcmtlci5waXBlKG5ldyBDb252ZXJ0V29ya2VyKGludGVybmFsVHlwZSkpOwogICAgICAgIC8vIHRoZSBsYXN0IHdvcmtlcnMgY2FuIGJl" + "IHJld2lyZWQgd2l0aG91dCBpc3N1ZXMgYnV0IHdlIG5lZWQgdG8KICAgICAgICAvLyBwcmV2ZW50IGFueSB1cGRhdGVzIG9uIHByZXZpb3VzIHdvcmtlcnMuCiAgICAgICAgd29ya2VyLmxvY2soKTsKICAgIH0g" + "Y2F0Y2goZSkgewogICAgICAgIHRoaXMuX3dvcmtlciA9IG5ldyBHZW5lcmljV29ya2VyKCJlcnJvciIpOwogICAgICAgIHRoaXMuX3dvcmtlci5lcnJvcihlKTsKICAgIH0KfQoKU3RyZWFtSGVscGVyLnByb3Rv" + "dHlwZSA9IHsKICAgIC8qKgogICAgICogTGlzdGVuIGEgU3RyZWFtSGVscGVyLCBhY2N1bXVsYXRlIGl0cyBjb250ZW50IGFuZCBjb25jYXRlbmF0ZSBpdCBpbnRvIGEKICAgICAqIGNvbXBsZXRlIGJsb2NrLgog" + "ICAgICogQHBhcmFtIHtGdW5jdGlvbn0gdXBkYXRlQ2IgdGhlIHVwZGF0ZSBjYWxsYmFjay4KICAgICAqIEByZXR1cm4gUHJvbWlzZSB0aGUgcHJvbWlzZSBmb3IgdGhlIGFjY3VtdWxhdGlvbi4KICAgICAqLwog" + "ICAgYWNjdW11bGF0ZSA6IGZ1bmN0aW9uICh1cGRhdGVDYikgewogICAgICAgIHJldHVybiBhY2N1bXVsYXRlKHRoaXMsIHVwZGF0ZUNiKTsKICAgIH0sCiAgICAvKioKICAgICAqIEFkZCBhIGxpc3RlbmVyIG9u" + "IGFuIGV2ZW50IHRyaWdnZXJlZCBvbiBhIHN0cmVhbS4KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBldnQgdGhlIG5hbWUgb2YgdGhlIGV2ZW50CiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiB0aGUgbGlzdGVu" + "ZXIKICAgICAqIEByZXR1cm4ge1N0cmVhbUhlbHBlcn0gdGhlIGN1cnJlbnQgaGVscGVyLgogICAgICovCiAgICBvbiA6IGZ1bmN0aW9uIChldnQsIGZuKSB7CiAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwoKICAg" + "ICAgICBpZihldnQgPT09ICJkYXRhIikgewogICAgICAgICAgICB0aGlzLl93b3JrZXIub24oZXZ0LCBmdW5jdGlvbiAoY2h1bmspIHsKICAgICAgICAgICAgICAgIGZuLmNhbGwoc2VsZiwgY2h1bmsuZGF0YSwg" + "Y2h1bmsubWV0YSk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuX3dvcmtlci5vbihldnQsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHV0aWxzLmRlbGF5" + "KGZuLCBhcmd1bWVudHMsIHNlbGYpOwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICB9LAogICAgLyoqCiAgICAgKiBSZXN1bWUgdGhlIGZsb3cgb2YgY2h1bmtzLgog" + "ICAgICogQHJldHVybiB7U3RyZWFtSGVscGVyfSB0aGUgY3VycmVudCBoZWxwZXIuCiAgICAgKi8KICAgIHJlc3VtZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICB1dGlscy5kZWxheSh0aGlzLl93b3JrZXIucmVz" + "dW1lLCBbXSwgdGhpcy5fd29ya2VyKTsKICAgICAgICByZXR1cm4gdGhpczsKICAgIH0sCiAgICAvKioKICAgICAqIFBhdXNlIHRoZSBmbG93IG9mIGNodW5rcy4KICAgICAqIEByZXR1cm4ge1N0cmVhbUhlbHBl" + "cn0gdGhlIGN1cnJlbnQgaGVscGVyLgogICAgICovCiAgICBwYXVzZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICB0aGlzLl93b3JrZXIucGF1c2UoKTsKICAgICAgICByZXR1cm4gdGhpczsKICAgIH0sCiAgICAv" + "KioKICAgICAqIFJldHVybiBhIG5vZGVqcyBzdHJlYW0gZm9yIHRoaXMgaGVscGVyLgogICAgICogQHBhcmFtIHtGdW5jdGlvbn0gdXBkYXRlQ2IgdGhlIHVwZGF0ZSBjYWxsYmFjay4KICAgICAqIEByZXR1cm4g" + "e05vZGVqc1N0cmVhbU91dHB1dEFkYXB0ZXJ9IHRoZSBub2RlanMgc3RyZWFtLgogICAgICovCiAgICB0b05vZGVqc1N0cmVhbSA6IGZ1bmN0aW9uICh1cGRhdGVDYikgewogICAgICAgIHV0aWxzLmNoZWNrU3Vw" + "cG9ydCgibm9kZXN0cmVhbSIpOwogICAgICAgIGlmICh0aGlzLl9vdXRwdXRUeXBlICE9PSAibm9kZWJ1ZmZlciIpIHsKICAgICAgICAgICAgLy8gYW4gb2JqZWN0IHN0cmVhbSBjb250YWluaW5nIGJsb2IvYXJy" + "YXlidWZmZXIvdWludDhhcnJheS9zdHJpbmcKICAgICAgICAgICAgLy8gaXMgc3RyYW5nZSBhbmQgSSBkb24ndCBrbm93IGlmIGl0IHdvdWxkIGJlIHVzZWZ1bC4KICAgICAgICAgICAgLy8gSSB5b3UgZmluZCB0" + "aGlzIGNvbW1lbnQgYW5kIGhhdmUgYSBnb29kIHVzZWNhc2UsIHBsZWFzZSBvcGVuIGEKICAgICAgICAgICAgLy8gYnVnIHJlcG9ydCAhCiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih0aGlzLl9vdXRwdXRU" + "eXBlICsgIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgbWV0aG9kIik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IE5vZGVqc1N0cmVhbU91dHB1dEFkYXB0ZXIodGhpcywgewogICAgICAgICAgICBv" + "YmplY3RNb2RlIDogdGhpcy5fb3V0cHV0VHlwZSAhPT0gIm5vZGVidWZmZXIiCiAgICAgICAgfSwgdXBkYXRlQ2IpOwogICAgfQp9OwoKCm1vZHVsZS5leHBvcnRzID0gU3RyZWFtSGVscGVyOwoKfSx7Ii4uL2Jh" + "c2U2NCI6MSwiLi4vZXh0ZXJuYWwiOjYsIi4uL25vZGVqcy9Ob2RlanNTdHJlYW1PdXRwdXRBZGFwdGVyIjoxMywiLi4vc3VwcG9ydCI6MzAsIi4uL3V0aWxzIjozMiwiLi9Db252ZXJ0V29ya2VyIjoyNCwiLi9H" + "ZW5lcmljV29ya2VyIjoyOH1dLDMwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwoKZXhwb3J0cy5iYXNlNjQgPSB0cnVlOwpleHBvcnRzLmFycmF5ID0gdHJ1ZTsKZXhw" + "b3J0cy5zdHJpbmcgPSB0cnVlOwpleHBvcnRzLmFycmF5YnVmZmVyID0gdHlwZW9mIEFycmF5QnVmZmVyICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgVWludDhBcnJheSAhPT0gInVuZGVmaW5lZCI7CmV4cG9y" + "dHMubm9kZWJ1ZmZlciA9IHR5cGVvZiBCdWZmZXIgIT09ICJ1bmRlZmluZWQiOwovLyBjb250YWlucyB0cnVlIGlmIEpTWmlwIGNhbiByZWFkL2dlbmVyYXRlIFVpbnQ4QXJyYXksIGZhbHNlIG90aGVyd2lzZS4K" + "ZXhwb3J0cy51aW50OGFycmF5ID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICJ1bmRlZmluZWQiOwoKaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gInVuZGVmaW5lZCIpIHsKICAgIGV4cG9ydHMuYmxvYiA9IGZh" + "bHNlOwp9CmVsc2UgewogICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcigwKTsKICAgIHRyeSB7CiAgICAgICAgZXhwb3J0cy5ibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHsKICAgICAgICAgICAgdHlw" + "ZTogImFwcGxpY2F0aW9uL3ppcCIKICAgICAgICB9KS5zaXplID09PSAwOwogICAgfQogICAgY2F0Y2ggKGUpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICB2YXIgQnVpbGRlciA9IHNlbGYuQmxvYkJ1aWxk" + "ZXIgfHwgc2VsZi5XZWJLaXRCbG9iQnVpbGRlciB8fCBzZWxmLk1vekJsb2JCdWlsZGVyIHx8IHNlbGYuTVNCbG9iQnVpbGRlcjsKICAgICAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpOwogICAg" + "ICAgICAgICBidWlsZGVyLmFwcGVuZChidWZmZXIpOwogICAgICAgICAgICBleHBvcnRzLmJsb2IgPSBidWlsZGVyLmdldEJsb2IoJ2FwcGxpY2F0aW9uL3ppcCcpLnNpemUgPT09IDA7CiAgICAgICAgfQogICAg" + "ICAgIGNhdGNoIChlKSB7CiAgICAgICAgICAgIGV4cG9ydHMuYmxvYiA9IGZhbHNlOwogICAgICAgIH0KICAgIH0KfQoKdHJ5IHsKICAgIGV4cG9ydHMubm9kZXN0cmVhbSA9ICEhcmVxdWlyZSgncmVhZGFibGUt" + "c3RyZWFtJykuUmVhZGFibGU7Cn0gY2F0Y2goZSkgewogICAgZXhwb3J0cy5ub2Rlc3RyZWFtID0gZmFsc2U7Cn0KCn0seyJyZWFkYWJsZS1zdHJlYW0iOjE2fV0sMzE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxl" + "LGV4cG9ydHMpewondXNlIHN0cmljdCc7Cgp2YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7CnZhciBzdXBwb3J0ID0gcmVxdWlyZSgnLi9zdXBwb3J0Jyk7CnZhciBub2RlanNVdGlscyA9IHJlcXVpcmUo" + "Jy4vbm9kZWpzVXRpbHMnKTsKdmFyIEdlbmVyaWNXb3JrZXIgPSByZXF1aXJlKCcuL3N0cmVhbS9HZW5lcmljV29ya2VyJyk7CgovKioKICogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgY29tZSBmcm9tIHBha28s" + "IGZyb20gcGFrby9saWIvdXRpbHMvc3RyaW5ncwogKiByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UsIHNlZSBwYWtvIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvcGFrby8KICovCgovLyBUYWJsZSB3" + "aXRoIHV0ZjggbGVuZ3RocyAoY2FsY3VsYXRlZCBieSBmaXJzdCBieXRlIG9mIHNlcXVlbmNlKQovLyBOb3RlLCB0aGF0IDUgJiA2LWJ5dGUgdmFsdWVzIGFuZCBzb21lIDQtYnl0ZSB2YWx1ZXMgY2FuIG5vdCBi" + "ZSByZXByZXNlbnRlZCBpbiBKUywKLy8gYmVjYXVzZSBtYXggcG9zc2libGUgY29kZXBvaW50IGlzIDB4MTBmZmZmCnZhciBfdXRmOGxlbiA9IG5ldyBBcnJheSgyNTYpOwpmb3IgKHZhciBpPTA7IGk8MjU2OyBp" + "KyspIHsKICBfdXRmOGxlbltpXSA9IChpID49IDI1MiA/IDYgOiBpID49IDI0OCA/IDUgOiBpID49IDI0MCA/IDQgOiBpID49IDIyNCA/IDMgOiBpID49IDE5MiA/IDIgOiAxKTsKfQpfdXRmOGxlblsyNTRdPV91" + "dGY4bGVuWzI1NF09MTsgLy8gSW52YWxpZCBzZXF1ZW5jZSBzdGFydAoKLy8gY29udmVydCBzdHJpbmcgdG8gYXJyYXkgKHR5cGVkLCB3aGVuIHBvc3NpYmxlKQp2YXIgc3RyaW5nMmJ1ZiA9IGZ1bmN0aW9uIChz" + "dHIpIHsKICAgIHZhciBidWYsIGMsIGMyLCBtX3BvcywgaSwgc3RyX2xlbiA9IHN0ci5sZW5ndGgsIGJ1Zl9sZW4gPSAwOwoKICAgIC8vIGNvdW50IGJpbmFyeSBzaXplCiAgICBmb3IgKG1fcG9zID0gMDsgbV9w" + "b3MgPCBzdHJfbGVuOyBtX3BvcysrKSB7CiAgICAgICAgYyA9IHN0ci5jaGFyQ29kZUF0KG1fcG9zKTsKICAgICAgICBpZiAoKGMgJiAweGZjMDApID09PSAweGQ4MDAgJiYgKG1fcG9zKzEgPCBzdHJfbGVuKSkg" + "ewogICAgICAgICAgICBjMiA9IHN0ci5jaGFyQ29kZUF0KG1fcG9zKzEpOwogICAgICAgICAgICBpZiAoKGMyICYgMHhmYzAwKSA9PT0gMHhkYzAwKSB7CiAgICAgICAgICAgICAgICBjID0gMHgxMDAwMCArICgo" + "YyAtIDB4ZDgwMCkgPDwgMTApICsgKGMyIC0gMHhkYzAwKTsKICAgICAgICAgICAgICAgIG1fcG9zKys7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYnVmX2xlbiArPSBjIDwgMHg4MCA/IDEgOiBj" + "IDwgMHg4MDAgPyAyIDogYyA8IDB4MTAwMDAgPyAzIDogNDsKICAgIH0KCiAgICAvLyBhbGxvY2F0ZSBidWZmZXIKICAgIGlmIChzdXBwb3J0LnVpbnQ4YXJyYXkpIHsKICAgICAgICBidWYgPSBuZXcgVWludDhB" + "cnJheShidWZfbGVuKTsKICAgIH0gZWxzZSB7CiAgICAgICAgYnVmID0gbmV3IEFycmF5KGJ1Zl9sZW4pOwogICAgfQoKICAgIC8vIGNvbnZlcnQKICAgIGZvciAoaT0wLCBtX3BvcyA9IDA7IGkgPCBidWZfbGVu" + "OyBtX3BvcysrKSB7CiAgICAgICAgYyA9IHN0ci5jaGFyQ29kZUF0KG1fcG9zKTsKICAgICAgICBpZiAoKGMgJiAweGZjMDApID09PSAweGQ4MDAgJiYgKG1fcG9zKzEgPCBzdHJfbGVuKSkgewogICAgICAgICAg" + "ICBjMiA9IHN0ci5jaGFyQ29kZUF0KG1fcG9zKzEpOwogICAgICAgICAgICBpZiAoKGMyICYgMHhmYzAwKSA9PT0gMHhkYzAwKSB7CiAgICAgICAgICAgICAgICBjID0gMHgxMDAwMCArICgoYyAtIDB4ZDgwMCkg" + "PDwgMTApICsgKGMyIC0gMHhkYzAwKTsKICAgICAgICAgICAgICAgIG1fcG9zKys7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGMgPCAweDgwKSB7CiAgICAgICAgICAgIC8qIG9uZSBieXRl" + "ICovCiAgICAgICAgICAgIGJ1ZltpKytdID0gYzsKICAgICAgICB9IGVsc2UgaWYgKGMgPCAweDgwMCkgewogICAgICAgICAgICAvKiB0d28gYnl0ZXMgKi8KICAgICAgICAgICAgYnVmW2krK10gPSAweEMwIHwg" + "KGMgPj4+IDYpOwogICAgICAgICAgICBidWZbaSsrXSA9IDB4ODAgfCAoYyAmIDB4M2YpOwogICAgICAgIH0gZWxzZSBpZiAoYyA8IDB4MTAwMDApIHsKICAgICAgICAgICAgLyogdGhyZWUgYnl0ZXMgKi8KICAg" + "ICAgICAgICAgYnVmW2krK10gPSAweEUwIHwgKGMgPj4+IDEyKTsKICAgICAgICAgICAgYnVmW2krK10gPSAweDgwIHwgKGMgPj4+IDYgJiAweDNmKTsKICAgICAgICAgICAgYnVmW2krK10gPSAweDgwIHwgKGMg" + "JiAweDNmKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvKiBmb3VyIGJ5dGVzICovCiAgICAgICAgICAgIGJ1ZltpKytdID0gMHhmMCB8IChjID4+PiAxOCk7CiAgICAgICAgICAgIGJ1ZltpKytdID0g" + "MHg4MCB8IChjID4+PiAxMiAmIDB4M2YpOwogICAgICAgICAgICBidWZbaSsrXSA9IDB4ODAgfCAoYyA+Pj4gNiAmIDB4M2YpOwogICAgICAgICAgICBidWZbaSsrXSA9IDB4ODAgfCAoYyAmIDB4M2YpOwogICAg" + "ICAgIH0KICAgIH0KCiAgICByZXR1cm4gYnVmOwp9OwoKLy8gQ2FsY3VsYXRlIG1heCBwb3NzaWJsZSBwb3NpdGlvbiBpbiB1dGY4IGJ1ZmZlciwKLy8gdGhhdCB3aWxsIG5vdCBicmVhayBzZXF1ZW5jZS4gSWYg" + "dGhhdCdzIG5vdCBwb3NzaWJsZQovLyAtICh2ZXJ5IHNtYWxsIGxpbWl0cykgcmV0dXJuIG1heCBzaXplIGFzIGlzLgovLwovLyBidWZbXSAtIHV0ZjggYnl0ZXMgYXJyYXkKLy8gbWF4ICAgLSBsZW5ndGggbGlt" + "aXQgKG1hbmRhdG9yeSk7CnZhciB1dGY4Ym9yZGVyID0gZnVuY3Rpb24oYnVmLCBtYXgpIHsKICAgIHZhciBwb3M7CgogICAgbWF4ID0gbWF4IHx8IGJ1Zi5sZW5ndGg7CiAgICBpZiAobWF4ID4gYnVmLmxlbmd0" + "aCkgeyBtYXggPSBidWYubGVuZ3RoOyB9CgogICAgLy8gZ28gYmFjayBmcm9tIGxhc3QgcG9zaXRpb24sIHVudGlsIHN0YXJ0IG9mIHNlcXVlbmNlIGZvdW5kCiAgICBwb3MgPSBtYXgtMTsKICAgIHdoaWxlIChw" + "b3MgPj0gMCAmJiAoYnVmW3Bvc10gJiAweEMwKSA9PT0gMHg4MCkgeyBwb3MtLTsgfQoKICAgIC8vIEZ1Y2t1cCAtIHZlcnkgc21hbGwgYW5kIGJyb2tlbiBzZXF1ZW5jZSwKICAgIC8vIHJldHVybiBtYXgsIGJl" + "Y2F1c2Ugd2Ugc2hvdWxkIHJldHVybiBzb21ldGhpbmcgYW55d2F5LgogICAgaWYgKHBvcyA8IDApIHsgcmV0dXJuIG1heDsgfQoKICAgIC8vIElmIHdlIGNhbWUgdG8gc3RhcnQgb2YgYnVmZmVyIC0gdGhhdCBt" + "ZWFucyB2dWZmZXIgaXMgdG9vIHNtYWxsLAogICAgLy8gcmV0dXJuIG1heCB0b28uCiAgICBpZiAocG9zID09PSAwKSB7IHJldHVybiBtYXg7IH0KCiAgICByZXR1cm4gKHBvcyArIF91dGY4bGVuW2J1Zltwb3Nd" + "XSA+IG1heCkgPyBwb3MgOiBtYXg7Cn07CgovLyBjb252ZXJ0IGFycmF5IHRvIHN0cmluZwp2YXIgYnVmMnN0cmluZyA9IGZ1bmN0aW9uIChidWYpIHsKICAgIHZhciBzdHIsIGksIG91dCwgYywgY19sZW47CiAg" + "ICB2YXIgbGVuID0gYnVmLmxlbmd0aDsKCiAgICAvLyBSZXNlcnZlIG1heCBwb3NzaWJsZSBsZW5ndGggKDIgd29yZHMgcGVyIGNoYXIpCiAgICAvLyBOQjogYnkgdW5rbm93biByZWFzb25zLCBBcnJheSBpcyBz" + "aWduaWZpY2FudGx5IGZhc3RlciBmb3IKICAgIC8vICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5IHRoYW4gVWludDE2QXJyYXkuCiAgICB2YXIgdXRmMTZidWYgPSBuZXcgQXJyYXkobGVuKjIpOwoKICAg" + "IGZvciAob3V0PTAsIGk9MDsgaTxsZW47KSB7CiAgICAgICAgYyA9IGJ1ZltpKytdOwogICAgICAgIC8vIHF1aWNrIHByb2Nlc3MgYXNjaWkKICAgICAgICBpZiAoYyA8IDB4ODApIHsgdXRmMTZidWZbb3V0Kytd" + "ID0gYzsgY29udGludWU7IH0KCiAgICAgICAgY19sZW4gPSBfdXRmOGxlbltjXTsKICAgICAgICAvLyBza2lwIDUgJiA2IGJ5dGUgY29kZXMKICAgICAgICBpZiAoY19sZW4gPiA0KSB7IHV0ZjE2YnVmW291dCsr" + "XSA9IDB4ZmZmZDsgaSArPSBjX2xlbi0xOyBjb250aW51ZTsgfQoKICAgICAgICAvLyBhcHBseSBtYXNrIG9uIGZpcnN0IGJ5dGUKICAgICAgICBjICY9IGNfbGVuID09PSAyID8gMHgxZiA6IGNfbGVuID09PSAz" + "ID8gMHgwZiA6IDB4MDc7CiAgICAgICAgLy8gam9pbiB0aGUgcmVzdAogICAgICAgIHdoaWxlIChjX2xlbiA+IDEgJiYgaSA8IGxlbikgewogICAgICAgICAgICBjID0gKGMgPDwgNikgfCAoYnVmW2krK10gJiAw" + "eDNmKTsKICAgICAgICAgICAgY19sZW4tLTsKICAgICAgICB9CgogICAgICAgIC8vIHRlcm1pbmF0ZWQgYnkgZW5kIG9mIHN0cmluZz8KICAgICAgICBpZiAoY19sZW4gPiAxKSB7IHV0ZjE2YnVmW291dCsrXSA9" + "IDB4ZmZmZDsgY29udGludWU7IH0KCiAgICAgICAgaWYgKGMgPCAweDEwMDAwKSB7CiAgICAgICAgICAgIHV0ZjE2YnVmW291dCsrXSA9IGM7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYyAtPSAweDEw" + "MDAwOwogICAgICAgICAgICB1dGYxNmJ1ZltvdXQrK10gPSAweGQ4MDAgfCAoKGMgPj4gMTApICYgMHgzZmYpOwogICAgICAgICAgICB1dGYxNmJ1ZltvdXQrK10gPSAweGRjMDAgfCAoYyAmIDB4M2ZmKTsKICAg" + "ICAgICB9CiAgICB9CgogICAgLy8gc2hyaW5rQnVmKHV0ZjE2YnVmLCBvdXQpCiAgICBpZiAodXRmMTZidWYubGVuZ3RoICE9PSBvdXQpIHsKICAgICAgICBpZih1dGYxNmJ1Zi5zdWJhcnJheSkgewogICAgICAg" + "ICAgICB1dGYxNmJ1ZiA9IHV0ZjE2YnVmLnN1YmFycmF5KDAsIG91dCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdXRmMTZidWYubGVuZ3RoID0gb3V0OwogICAgICAgIH0KICAgIH0KCiAgICAvLyBy" + "ZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCB1dGYxNmJ1Zik7CiAgICByZXR1cm4gdXRpbHMuYXBwbHlGcm9tQ2hhckNvZGUodXRmMTZidWYpOwp9OwoKCi8vIFRoYXQncyBhbGwgZm9yIHRo" + "ZSBwYWtvIGZ1bmN0aW9ucy4KCgovKioKICogVHJhbnNmb3JtIGEgamF2YXNjcmlwdCBzdHJpbmcgaW50byBhbiBhcnJheSAodHlwZWQgaWYgcG9zc2libGUpIG9mIGJ5dGVzLAogKiBVVEYtOCBlbmNvZGVkLgog" + "KiBAcGFyYW0ge1N0cmluZ30gc3RyIHRoZSBzdHJpbmcgdG8gZW5jb2RlCiAqIEByZXR1cm4ge0FycmF5fFVpbnQ4QXJyYXl8QnVmZmVyfSB0aGUgVVRGLTggZW5jb2RlZCBzdHJpbmcuCiAqLwpleHBvcnRzLnV0" + "ZjhlbmNvZGUgPSBmdW5jdGlvbiB1dGY4ZW5jb2RlKHN0cikgewogICAgaWYgKHN1cHBvcnQubm9kZWJ1ZmZlcikgewogICAgICAgIHJldHVybiBub2RlanNVdGlscy5uZXdCdWZmZXJGcm9tKHN0ciwgInV0Zi04" + "Iik7CiAgICB9CgogICAgcmV0dXJuIHN0cmluZzJidWYoc3RyKTsKfTsKCgovKioKICogVHJhbnNmb3JtIGEgYnl0ZXMgYXJyYXkgKG9yIGEgcmVwcmVzZW50YXRpb24pIHJlcHJlc2VudGluZyBhbiBVVEYtOCBl" + "bmNvZGVkCiAqIHN0cmluZyBpbnRvIGEgamF2YXNjcmlwdCBzdHJpbmcuCiAqIEBwYXJhbSB7QXJyYXl8VWludDhBcnJheXxCdWZmZXJ9IGJ1ZiB0aGUgZGF0YSBkZSBkZWNvZGUKICogQHJldHVybiB7U3RyaW5n" + "fSB0aGUgZGVjb2RlZCBzdHJpbmcuCiAqLwpleHBvcnRzLnV0ZjhkZWNvZGUgPSBmdW5jdGlvbiB1dGY4ZGVjb2RlKGJ1ZikgewogICAgaWYgKHN1cHBvcnQubm9kZWJ1ZmZlcikgewogICAgICAgIHJldHVybiB1" + "dGlscy50cmFuc2Zvcm1Ubygibm9kZWJ1ZmZlciIsIGJ1ZikudG9TdHJpbmcoInV0Zi04Iik7CiAgICB9CgogICAgYnVmID0gdXRpbHMudHJhbnNmb3JtVG8oc3VwcG9ydC51aW50OGFycmF5ID8gInVpbnQ4YXJy" + "YXkiIDogImFycmF5IiwgYnVmKTsKCiAgICByZXR1cm4gYnVmMnN0cmluZyhidWYpOwp9OwoKLyoqCiAqIEEgd29ya2VyIHRvIGRlY29kZSB1dGY4IGVuY29kZWQgYmluYXJ5IGNodW5rcyBpbnRvIHN0cmluZyBj" + "aHVua3MuCiAqIEBjb25zdHJ1Y3RvcgogKi8KZnVuY3Rpb24gVXRmOERlY29kZVdvcmtlcigpIHsKICAgIEdlbmVyaWNXb3JrZXIuY2FsbCh0aGlzLCAidXRmLTggZGVjb2RlIik7CiAgICAvLyB0aGUgbGFzdCBi" + "eXRlcyBpZiBhIGNodW5rIGRpZG4ndCBlbmQgd2l0aCBhIGNvbXBsZXRlIGNvZGVwb2ludC4KICAgIHRoaXMubGVmdE92ZXIgPSBudWxsOwp9CnV0aWxzLmluaGVyaXRzKFV0ZjhEZWNvZGVXb3JrZXIsIEdlbmVy" + "aWNXb3JrZXIpOwoKLyoqCiAqIEBzZWUgR2VuZXJpY1dvcmtlci5wcm9jZXNzQ2h1bmsKICovClV0ZjhEZWNvZGVXb3JrZXIucHJvdG90eXBlLnByb2Nlc3NDaHVuayA9IGZ1bmN0aW9uIChjaHVuaykgewoKICAg" + "IHZhciBkYXRhID0gdXRpbHMudHJhbnNmb3JtVG8oc3VwcG9ydC51aW50OGFycmF5ID8gInVpbnQ4YXJyYXkiIDogImFycmF5IiwgY2h1bmsuZGF0YSk7CgogICAgLy8gMXN0IHN0ZXAsIHJlLXVzZSB3aGF0J3Mg" + "bGVmdCBvZiB0aGUgcHJldmlvdXMgY2h1bmsKICAgIGlmICh0aGlzLmxlZnRPdmVyICYmIHRoaXMubGVmdE92ZXIubGVuZ3RoKSB7CiAgICAgICAgaWYoc3VwcG9ydC51aW50OGFycmF5KSB7CiAgICAgICAgICAg" + "IHZhciBwcmV2aW91c0RhdGEgPSBkYXRhOwogICAgICAgICAgICBkYXRhID0gbmV3IFVpbnQ4QXJyYXkocHJldmlvdXNEYXRhLmxlbmd0aCArIHRoaXMubGVmdE92ZXIubGVuZ3RoKTsKICAgICAgICAgICAgZGF0" + "YS5zZXQodGhpcy5sZWZ0T3ZlciwgMCk7CiAgICAgICAgICAgIGRhdGEuc2V0KHByZXZpb3VzRGF0YSwgdGhpcy5sZWZ0T3Zlci5sZW5ndGgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGRhdGEgPSB0" + "aGlzLmxlZnRPdmVyLmNvbmNhdChkYXRhKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5sZWZ0T3ZlciA9IG51bGw7CiAgICB9CgogICAgdmFyIG5leHRCb3VuZGFyeSA9IHV0Zjhib3JkZXIoZGF0YSk7CiAgICB2" + "YXIgdXNhYmxlRGF0YSA9IGRhdGE7CiAgICBpZiAobmV4dEJvdW5kYXJ5ICE9PSBkYXRhLmxlbmd0aCkgewogICAgICAgIGlmIChzdXBwb3J0LnVpbnQ4YXJyYXkpIHsKICAgICAgICAgICAgdXNhYmxlRGF0YSA9" + "IGRhdGEuc3ViYXJyYXkoMCwgbmV4dEJvdW5kYXJ5KTsKICAgICAgICAgICAgdGhpcy5sZWZ0T3ZlciA9IGRhdGEuc3ViYXJyYXkobmV4dEJvdW5kYXJ5LCBkYXRhLmxlbmd0aCk7CiAgICAgICAgfSBlbHNlIHsK" + "ICAgICAgICAgICAgdXNhYmxlRGF0YSA9IGRhdGEuc2xpY2UoMCwgbmV4dEJvdW5kYXJ5KTsKICAgICAgICAgICAgdGhpcy5sZWZ0T3ZlciA9IGRhdGEuc2xpY2UobmV4dEJvdW5kYXJ5LCBkYXRhLmxlbmd0aCk7" + "CiAgICAgICAgfQogICAgfQoKICAgIHRoaXMucHVzaCh7CiAgICAgICAgZGF0YSA6IGV4cG9ydHMudXRmOGRlY29kZSh1c2FibGVEYXRhKSwKICAgICAgICBtZXRhIDogY2h1bmsubWV0YQogICAgfSk7Cn07Cgov" + "KioKICogQHNlZSBHZW5lcmljV29ya2VyLmZsdXNoCiAqLwpVdGY4RGVjb2RlV29ya2VyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpIHsKICAgIGlmKHRoaXMubGVmdE92ZXIgJiYgdGhpcy5sZWZ0T3Zl" + "ci5sZW5ndGgpIHsKICAgICAgICB0aGlzLnB1c2goewogICAgICAgICAgICBkYXRhIDogZXhwb3J0cy51dGY4ZGVjb2RlKHRoaXMubGVmdE92ZXIpLAogICAgICAgICAgICBtZXRhIDoge30KICAgICAgICB9KTsK" + "ICAgICAgICB0aGlzLmxlZnRPdmVyID0gbnVsbDsKICAgIH0KfTsKZXhwb3J0cy5VdGY4RGVjb2RlV29ya2VyID0gVXRmOERlY29kZVdvcmtlcjsKCi8qKgogKiBBIHdvcmtlciB0byBlbmRjb2RlIHN0cmluZyBj" + "aHVua3MgaW50byB1dGY4IGVuY29kZWQgYmluYXJ5IGNodW5rcy4KICogQGNvbnN0cnVjdG9yCiAqLwpmdW5jdGlvbiBVdGY4RW5jb2RlV29ya2VyKCkgewogICAgR2VuZXJpY1dvcmtlci5jYWxsKHRoaXMsICJ1" + "dGYtOCBlbmNvZGUiKTsKfQp1dGlscy5pbmhlcml0cyhVdGY4RW5jb2RlV29ya2VyLCBHZW5lcmljV29ya2VyKTsKCi8qKgogKiBAc2VlIEdlbmVyaWNXb3JrZXIucHJvY2Vzc0NodW5rCiAqLwpVdGY4RW5jb2Rl" + "V29ya2VyLnByb3RvdHlwZS5wcm9jZXNzQ2h1bmsgPSBmdW5jdGlvbiAoY2h1bmspIHsKICAgIHRoaXMucHVzaCh7CiAgICAgICAgZGF0YSA6IGV4cG9ydHMudXRmOGVuY29kZShjaHVuay5kYXRhKSwKICAgICAg" + "ICBtZXRhIDogY2h1bmsubWV0YQogICAgfSk7Cn07CmV4cG9ydHMuVXRmOEVuY29kZVdvcmtlciA9IFV0ZjhFbmNvZGVXb3JrZXI7Cgp9LHsiLi9ub2RlanNVdGlscyI6MTQsIi4vc3RyZWFtL0dlbmVyaWNXb3Jr" + "ZXIiOjI4LCIuL3N1cHBvcnQiOjMwLCIuL3V0aWxzIjozMn1dLDMyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwoKdmFyIHN1cHBvcnQgPSByZXF1aXJlKCcuL3N1cHBv" + "cnQnKTsKdmFyIGJhc2U2NCA9IHJlcXVpcmUoJy4vYmFzZTY0Jyk7CnZhciBub2RlanNVdGlscyA9IHJlcXVpcmUoJy4vbm9kZWpzVXRpbHMnKTsKdmFyIHNldEltbWVkaWF0ZSA9IHJlcXVpcmUoJ3NldC1pbW1l" + "ZGlhdGUtc2hpbScpOwp2YXIgZXh0ZXJuYWwgPSByZXF1aXJlKCIuL2V4dGVybmFsIik7CgoKLyoqCiAqIENvbnZlcnQgYSBzdHJpbmcgdGhhdCBwYXNzIGFzIGEgImJpbmFyeSBzdHJpbmciOiBpdCBzaG91bGQg" + "cmVwcmVzZW50IGEgYnl0ZQogKiBhcnJheSBidXQgbWF5IGhhdmUgPiAyNTUgY2hhciBjb2Rlcy4gQmUgc3VyZSB0byB0YWtlIG9ubHkgdGhlIGZpcnN0IGJ5dGUKICogYW5kIHJldHVybnMgdGhlIGJ5dGUgYXJy" + "YXkuCiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgdGhlIHN0cmluZyB0byB0cmFuc2Zvcm0uCiAqIEByZXR1cm4ge0FycmF5fFVpbnQ4QXJyYXl9IHRoZSBzdHJpbmcgaW4gYSBiaW5hcnkgZm9ybWF0LgogKi8KZnVu" + "Y3Rpb24gc3RyaW5nMmJpbmFyeShzdHIpIHsKICAgIHZhciByZXN1bHQgPSBudWxsOwogICAgaWYgKHN1cHBvcnQudWludDhhcnJheSkgewogICAgICByZXN1bHQgPSBuZXcgVWludDhBcnJheShzdHIubGVuZ3Ro" + "KTsKICAgIH0gZWxzZSB7CiAgICAgIHJlc3VsdCA9IG5ldyBBcnJheShzdHIubGVuZ3RoKTsKICAgIH0KICAgIHJldHVybiBzdHJpbmdUb0FycmF5TGlrZShzdHIsIHJlc3VsdCk7Cn0KCi8qKgogKiBDcmVhdGUg" + "YSBuZXcgYmxvYiB3aXRoIHRoZSBnaXZlbiBjb250ZW50IGFuZCB0aGUgZ2l2ZW4gdHlwZS4KICogQHBhcmFtIHtTdHJpbmd8QXJyYXlCdWZmZXJ9IHBhcnQgdGhlIGNvbnRlbnQgdG8gcHV0IGluIHRoZSBibG9i" + "LiBETyBOT1QgdXNlCiAqIGFuIFVpbnQ4QXJyYXkgYmVjYXVzZSB0aGUgc3RvY2sgYnJvd3NlciBvZiBhbmRyb2lkIDQgd29uJ3QgYWNjZXB0IGl0IChpdAogKiB3aWxsIGJlIHNpbGVudGx5IGNvbnZlcnRlZCB0" + "byBhIHN0cmluZywgIltvYmplY3QgVWludDhBcnJheV0iKS4KICoKICogVXNlIG9ubHkgT05FIHBhcnQgdG8gYnVpbGQgdGhlIGJsb2IgdG8gYXZvaWQgYSBtZW1vcnkgbGVhayBpbiBJRTExIC8gRWRnZToKICog" + "d2hlbiBhIGxhcmdlIGFtb3VudCBvZiBBcnJheSBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgQmxvYiwgdGhlIGFtb3VudCBvZgogKiBtZW1vcnkgY29uc3VtZWQgaXMgbmVhcmx5IDEwMCB0aW1lcyB0aGUgb3JpZ2lu" + "YWwgZGF0YSBhbW91bnQuCiAqCiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIHRoZSBtaW1lIHR5cGUgb2YgdGhlIGJsb2IuCiAqIEByZXR1cm4ge0Jsb2J9IHRoZSBjcmVhdGVkIGJsb2IuCiAqLwpleHBvcnRzLm5l" + "d0Jsb2IgPSBmdW5jdGlvbihwYXJ0LCB0eXBlKSB7CiAgICBleHBvcnRzLmNoZWNrU3VwcG9ydCgiYmxvYiIpOwoKICAgIHRyeSB7CiAgICAgICAgLy8gQmxvYiBjb25zdHJ1Y3RvcgogICAgICAgIHJldHVybiBu" + "ZXcgQmxvYihbcGFydF0sIHsKICAgICAgICAgICAgdHlwZTogdHlwZQogICAgICAgIH0pOwogICAgfQogICAgY2F0Y2ggKGUpIHsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgLy8gZGVwcmVjYXRlZCwgYnJv" + "d3NlciBvbmx5LCBvbGQgd2F5CiAgICAgICAgICAgIHZhciBCdWlsZGVyID0gc2VsZi5CbG9iQnVpbGRlciB8fCBzZWxmLldlYktpdEJsb2JCdWlsZGVyIHx8IHNlbGYuTW96QmxvYkJ1aWxkZXIgfHwgc2VsZi5N" + "U0Jsb2JCdWlsZGVyOwogICAgICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCk7CiAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHBhcnQpOwogICAgICAgICAgICByZXR1cm4gYnVpbGRlci5nZXRC" + "bG9iKHR5cGUpOwogICAgICAgIH0KICAgICAgICBjYXRjaCAoZSkgewoKICAgICAgICAgICAgLy8gd2VsbCwgZnVjayA/IQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJ1ZyA6IGNhbid0IGNvbnN0cnVj" + "dCB0aGUgQmxvYi4iKTsKICAgICAgICB9CiAgICB9CgoKfTsKLyoqCiAqIFRoZSBpZGVudGl0eSBmdW5jdGlvbi4KICogQHBhcmFtIHtPYmplY3R9IGlucHV0IHRoZSBpbnB1dC4KICogQHJldHVybiB7T2JqZWN0" + "fSB0aGUgc2FtZSBpbnB1dC4KICovCmZ1bmN0aW9uIGlkZW50aXR5KGlucHV0KSB7CiAgICByZXR1cm4gaW5wdXQ7Cn0KCi8qKgogKiBGaWxsIGluIGFuIGFycmF5IHdpdGggYSBzdHJpbmcuCiAqIEBwYXJhbSB7" + "U3RyaW5nfSBzdHIgdGhlIHN0cmluZyB0byB1c2UuCiAqIEBwYXJhbSB7QXJyYXl8QXJyYXlCdWZmZXJ8VWludDhBcnJheXxCdWZmZXJ9IGFycmF5IHRoZSBhcnJheSB0byBmaWxsIGluICh3aWxsIGJlIG11dGF0" + "ZWQpLgogKiBAcmV0dXJuIHtBcnJheXxBcnJheUJ1ZmZlcnxVaW50OEFycmF5fEJ1ZmZlcn0gdGhlIHVwZGF0ZWQgYXJyYXkuCiAqLwpmdW5jdGlvbiBzdHJpbmdUb0FycmF5TGlrZShzdHIsIGFycmF5KSB7CiAg" + "ICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkgewogICAgICAgIGFycmF5W2ldID0gc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGOwogICAgfQogICAgcmV0dXJuIGFycmF5Owp9CgovKioKICog" + "QW4gaGVscGVyIGZvciB0aGUgZnVuY3Rpb24gYXJyYXlMaWtlVG9TdHJpbmcuCiAqIFRoaXMgY29udGFpbnMgc3RhdGljIGluZm9ybWF0aW9uIGFuZCBmdW5jdGlvbnMgdGhhdAogKiBjYW4gYmUgb3B0aW1pemVk" + "IGJ5IHRoZSBicm93c2VyIEpJVCBjb21waWxlci4KICovCnZhciBhcnJheVRvU3RyaW5nSGVscGVyID0gewogICAgLyoqCiAgICAgKiBUcmFuc2Zvcm0gYW4gYXJyYXkgb2YgaW50IGludG8gYSBzdHJpbmcsIGNo" + "dW5rIGJ5IGNodW5rLgogICAgICogU2VlIHRoZSBwZXJmb3JtYW5jZXMgbm90ZXMgb24gYXJyYXlMaWtlVG9TdHJpbmcuCiAgICAgKiBAcGFyYW0ge0FycmF5fEFycmF5QnVmZmVyfFVpbnQ4QXJyYXl8QnVmZmVy" + "fSBhcnJheSB0aGUgYXJyYXkgdG8gdHJhbnNmb3JtLgogICAgICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgdGhlIHR5cGUgb2YgdGhlIGFycmF5LgogICAgICogQHBhcmFtIHtJbnRlZ2VyfSBjaHVuayB0aGUgY2h1" + "bmsgc2l6ZS4KICAgICAqIEByZXR1cm4ge1N0cmluZ30gdGhlIHJlc3VsdGluZyBzdHJpbmcuCiAgICAgKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBjaHVuayBpcyB0b28gYmlnIGZvciB0aGUgc3RhY2suCiAgICAg" + "Ki8KICAgIHN0cmluZ2lmeUJ5Q2h1bms6IGZ1bmN0aW9uKGFycmF5LCB0eXBlLCBjaHVuaykgewogICAgICAgIHZhciByZXN1bHQgPSBbXSwgayA9IDAsIGxlbiA9IGFycmF5Lmxlbmd0aDsKICAgICAgICAvLyBz" + "aG9ydGN1dAogICAgICAgIGlmIChsZW4gPD0gY2h1bmspIHsKICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgYXJyYXkpOwogICAgICAgIH0KICAgICAgICB3aGlsZSAo" + "ayA8IGxlbikgewogICAgICAgICAgICBpZiAodHlwZSA9PT0gImFycmF5IiB8fCB0eXBlID09PSAibm9kZWJ1ZmZlciIpIHsKICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUu" + "YXBwbHkobnVsbCwgYXJyYXkuc2xpY2UoaywgTWF0aC5taW4oayArIGNodW5rLCBsZW4pKSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goU3Ry" + "aW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBhcnJheS5zdWJhcnJheShrLCBNYXRoLm1pbihrICsgY2h1bmssIGxlbikpKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgayArPSBjaHVuazsKICAgICAg" + "ICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdC5qb2luKCIiKTsKICAgIH0sCiAgICAvKioKICAgICAqIENhbGwgU3RyaW5nLmZyb21DaGFyQ29kZSBvbiBldmVyeSBpdGVtIGluIHRoZSBhcnJheS4KICAgICAqIFRo" + "aXMgaXMgdGhlIG5haXZlIGltcGxlbWVudGF0aW9uLCB3aGljaCBnZW5lcmF0ZSBBIExPVCBvZiBpbnRlcm1lZGlhdGUgc3RyaW5nLgogICAgICogVGhpcyBzaG91bGQgYmUgdXNlZCB3aGVuIGV2ZXJ5dGhpbmcg" + "ZWxzZSBmYWlsLgogICAgICogQHBhcmFtIHtBcnJheXxBcnJheUJ1ZmZlcnxVaW50OEFycmF5fEJ1ZmZlcn0gYXJyYXkgdGhlIGFycmF5IHRvIHRyYW5zZm9ybS4KICAgICAqIEByZXR1cm4ge1N0cmluZ30gdGhl" + "IHJlc3VsdC4KICAgICAqLwogICAgc3RyaW5naWZ5QnlDaGFyOiBmdW5jdGlvbihhcnJheSl7CiAgICAgICAgdmFyIHJlc3VsdFN0ciA9ICIiOwogICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5n" + "dGg7IGkrKykgewogICAgICAgICAgICByZXN1bHRTdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShhcnJheVtpXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHRTdHI7CiAgICB9LAogICAgYXBwbHlD" + "YW5CZVVzZWQgOiB7CiAgICAgICAgLyoqCiAgICAgICAgICogdHJ1ZSBpZiB0aGUgYnJvd3NlciBhY2NlcHRzIHRvIHVzZSBTdHJpbmcuZnJvbUNoYXJDb2RlIG9uIFVpbnQ4QXJyYXkKICAgICAgICAgKi8KICAg" + "ICAgICB1aW50OGFycmF5IDogKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHJldHVybiBzdXBwb3J0LnVpbnQ4YXJyYXkgJiYgU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBs" + "eShudWxsLCBuZXcgVWludDhBcnJheSgxKSkubGVuZ3RoID09PSAxOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9" + "KSgpLAogICAgICAgIC8qKgogICAgICAgICAqIHRydWUgaWYgdGhlIGJyb3dzZXIgYWNjZXB0cyB0byB1c2UgU3RyaW5nLmZyb21DaGFyQ29kZSBvbiBub2RlanMgQnVmZmVyLgogICAgICAgICAqLwogICAgICAg" + "IG5vZGVidWZmZXIgOiAoZnVuY3Rpb24gKCkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgcmV0dXJuIHN1cHBvcnQubm9kZWJ1ZmZlciAmJiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51" + "bGwsIG5vZGVqc1V0aWxzLmFsbG9jQnVmZmVyKDEpKS5sZW5ndGggPT09IDE7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAg" + "ICAgIH0pKCkKICAgIH0KfTsKCi8qKgogKiBUcmFuc2Zvcm0gYW4gYXJyYXktbGlrZSBvYmplY3QgdG8gYSBzdHJpbmcuCiAqIEBwYXJhbSB7QXJyYXl8QXJyYXlCdWZmZXJ8VWludDhBcnJheXxCdWZmZXJ9IGFy" + "cmF5IHRoZSBhcnJheSB0byB0cmFuc2Zvcm0uCiAqIEByZXR1cm4ge1N0cmluZ30gdGhlIHJlc3VsdC4KICovCmZ1bmN0aW9uIGFycmF5TGlrZVRvU3RyaW5nKGFycmF5KSB7CiAgICAvLyBQZXJmb3JtYW5jZXMg" + "bm90ZXMgOgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgYXJyYXkpIGlzIHRoZSBmYXN0ZXN0LCBzZWUKICAgIC8vIHNlZSBodHRwOi8v" + "anNwZXJmLmNvbS9jb252ZXJ0aW5nLWEtdWludDhhcnJheS10by1hLXN0cmluZy8yCiAgICAvLyBidXQgdGhlIHN0YWNrIGlzIGxpbWl0ZWQgKGFuZCB3ZSBjYW4gZ2V0IGh1Z2UgYXJyYXlzICEpLgogICAgLy8K" + "ICAgIC8vIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGFycmF5W2ldKTsgZ2VuZXJhdGUgdG9vIG1hbnkgc3RyaW5ncyAhCiAgICAvLwogICAgLy8gVGhpcyBjb2RlIGlzIGluc3BpcmVkIGJ5IGh0dHA6" + "Ly9qc3BlcmYuY29tL2FycmF5YnVmZmVyLXRvLXN0cmluZy1hcHBseS1wZXJmb3JtYW5jZS8yCiAgICAvLyBUT0RPIDogd2Ugbm93IGhhdmUgd29ya2VycyB0aGF0IHNwbGl0IHRoZSB3b3JrLiBEbyB3ZSBzdGls" + "bCBuZWVkIHRoYXQgPwogICAgdmFyIGNodW5rID0gNjU1MzYsCiAgICAgICAgdHlwZSA9IGV4cG9ydHMuZ2V0VHlwZU9mKGFycmF5KSwKICAgICAgICBjYW5Vc2VBcHBseSA9IHRydWU7CiAgICBpZiAodHlwZSA9" + "PT0gInVpbnQ4YXJyYXkiKSB7CiAgICAgICAgY2FuVXNlQXBwbHkgPSBhcnJheVRvU3RyaW5nSGVscGVyLmFwcGx5Q2FuQmVVc2VkLnVpbnQ4YXJyYXk7CiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICJub2RlYnVm" + "ZmVyIikgewogICAgICAgIGNhblVzZUFwcGx5ID0gYXJyYXlUb1N0cmluZ0hlbHBlci5hcHBseUNhbkJlVXNlZC5ub2RlYnVmZmVyOwogICAgfQoKICAgIGlmIChjYW5Vc2VBcHBseSkgewogICAgICAgIHdoaWxl" + "IChjaHVuayA+IDEpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHJldHVybiBhcnJheVRvU3RyaW5nSGVscGVyLnN0cmluZ2lmeUJ5Q2h1bmsoYXJyYXksIHR5cGUsIGNodW5rKTsKICAgICAg" + "ICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgY2h1bmsgPSBNYXRoLmZsb29yKGNodW5rIC8gMik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLy8gbm8gYXBwbHkgb3IgY2h1" + "bmsgZXJyb3IgOiBzbG93IGFuZCBwYWluZnVsIGFsZ29yaXRobQogICAgLy8gZGVmYXVsdCBicm93c2VyIG9uIGFuZHJvaWQgNC4qCiAgICByZXR1cm4gYXJyYXlUb1N0cmluZ0hlbHBlci5zdHJpbmdpZnlCeUNo" + "YXIoYXJyYXkpOwp9CgpleHBvcnRzLmFwcGx5RnJvbUNoYXJDb2RlID0gYXJyYXlMaWtlVG9TdHJpbmc7CgoKLyoqCiAqIENvcHkgdGhlIGRhdGEgZnJvbSBhbiBhcnJheS1saWtlIHRvIGFuIG90aGVyIGFycmF5" + "LWxpa2UuCiAqIEBwYXJhbSB7QXJyYXl8QXJyYXlCdWZmZXJ8VWludDhBcnJheXxCdWZmZXJ9IGFycmF5RnJvbSB0aGUgb3JpZ2luIGFycmF5LgogKiBAcGFyYW0ge0FycmF5fEFycmF5QnVmZmVyfFVpbnQ4QXJy" + "YXl8QnVmZmVyfSBhcnJheVRvIHRoZSBkZXN0aW5hdGlvbiBhcnJheSB3aGljaCB3aWxsIGJlIG11dGF0ZWQuCiAqIEByZXR1cm4ge0FycmF5fEFycmF5QnVmZmVyfFVpbnQ4QXJyYXl8QnVmZmVyfSB0aGUgdXBk" + "YXRlZCBkZXN0aW5hdGlvbiBhcnJheS4KICovCmZ1bmN0aW9uIGFycmF5TGlrZVRvQXJyYXlMaWtlKGFycmF5RnJvbSwgYXJyYXlUbykgewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheUZyb20ubGVuZ3Ro" + "OyBpKyspIHsKICAgICAgICBhcnJheVRvW2ldID0gYXJyYXlGcm9tW2ldOwogICAgfQogICAgcmV0dXJuIGFycmF5VG87Cn0KCi8vIGEgbWF0cml4IGNvbnRhaW5pbmcgZnVuY3Rpb25zIHRvIHRyYW5zZm9ybSBl" + "dmVyeXRoaW5nIGludG8gZXZlcnl0aGluZy4KdmFyIHRyYW5zZm9ybSA9IHt9OwoKLy8gc3RyaW5nIHRvID8KdHJhbnNmb3JtWyJzdHJpbmciXSA9IHsKICAgICJzdHJpbmciOiBpZGVudGl0eSwKICAgICJhcnJh" + "eSI6IGZ1bmN0aW9uKGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHN0cmluZ1RvQXJyYXlMaWtlKGlucHV0LCBuZXcgQXJyYXkoaW5wdXQubGVuZ3RoKSk7CiAgICB9LAogICAgImFycmF5YnVmZmVyIjogZnVuY3Rp" + "b24oaW5wdXQpIHsKICAgICAgICByZXR1cm4gdHJhbnNmb3JtWyJzdHJpbmciXVsidWludDhhcnJheSJdKGlucHV0KS5idWZmZXI7CiAgICB9LAogICAgInVpbnQ4YXJyYXkiOiBmdW5jdGlvbihpbnB1dCkgewog" + "ICAgICAgIHJldHVybiBzdHJpbmdUb0FycmF5TGlrZShpbnB1dCwgbmV3IFVpbnQ4QXJyYXkoaW5wdXQubGVuZ3RoKSk7CiAgICB9LAogICAgIm5vZGVidWZmZXIiOiBmdW5jdGlvbihpbnB1dCkgewogICAgICAg" + "IHJldHVybiBzdHJpbmdUb0FycmF5TGlrZShpbnB1dCwgbm9kZWpzVXRpbHMuYWxsb2NCdWZmZXIoaW5wdXQubGVuZ3RoKSk7CiAgICB9Cn07CgovLyBhcnJheSB0byA/CnRyYW5zZm9ybVsiYXJyYXkiXSA9IHsK" + "ICAgICJzdHJpbmciOiBhcnJheUxpa2VUb1N0cmluZywKICAgICJhcnJheSI6IGlkZW50aXR5LAogICAgImFycmF5YnVmZmVyIjogZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICByZXR1cm4gKG5ldyBVaW50OEFy" + "cmF5KGlucHV0KSkuYnVmZmVyOwogICAgfSwKICAgICJ1aW50OGFycmF5IjogZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoaW5wdXQpOwogICAgfSwKICAgICJub2RlYnVm" + "ZmVyIjogZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICByZXR1cm4gbm9kZWpzVXRpbHMubmV3QnVmZmVyRnJvbShpbnB1dCk7CiAgICB9Cn07CgovLyBhcnJheWJ1ZmZlciB0byA/CnRyYW5zZm9ybVsiYXJyYXli" + "dWZmZXIiXSA9IHsKICAgICJzdHJpbmciOiBmdW5jdGlvbihpbnB1dCkgewogICAgICAgIHJldHVybiBhcnJheUxpa2VUb1N0cmluZyhuZXcgVWludDhBcnJheShpbnB1dCkpOwogICAgfSwKICAgICJhcnJheSI6" + "IGZ1bmN0aW9uKGlucHV0KSB7CiAgICAgICAgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXlMaWtlKG5ldyBVaW50OEFycmF5KGlucHV0KSwgbmV3IEFycmF5KGlucHV0LmJ5dGVMZW5ndGgpKTsKICAgIH0sCiAgICAi" + "YXJyYXlidWZmZXIiOiBpZGVudGl0eSwKICAgICJ1aW50OGFycmF5IjogZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoaW5wdXQpOwogICAgfSwKICAgICJub2RlYnVmZmVy" + "IjogZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICByZXR1cm4gbm9kZWpzVXRpbHMubmV3QnVmZmVyRnJvbShuZXcgVWludDhBcnJheShpbnB1dCkpOwogICAgfQp9OwoKLy8gdWludDhhcnJheSB0byA/CnRyYW5z" + "Zm9ybVsidWludDhhcnJheSJdID0gewogICAgInN0cmluZyI6IGFycmF5TGlrZVRvU3RyaW5nLAogICAgImFycmF5IjogZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICByZXR1cm4gYXJyYXlMaWtlVG9BcnJheUxp" + "a2UoaW5wdXQsIG5ldyBBcnJheShpbnB1dC5sZW5ndGgpKTsKICAgIH0sCiAgICAiYXJyYXlidWZmZXIiOiBmdW5jdGlvbihpbnB1dCkgewogICAgICAgIHJldHVybiBpbnB1dC5idWZmZXI7CiAgICB9LAogICAg" + "InVpbnQ4YXJyYXkiOiBpZGVudGl0eSwKICAgICJub2RlYnVmZmVyIjogZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICByZXR1cm4gbm9kZWpzVXRpbHMubmV3QnVmZmVyRnJvbShpbnB1dCk7CiAgICB9Cn07Cgov" + "LyBub2RlYnVmZmVyIHRvID8KdHJhbnNmb3JtWyJub2RlYnVmZmVyIl0gPSB7CiAgICAic3RyaW5nIjogYXJyYXlMaWtlVG9TdHJpbmcsCiAgICAiYXJyYXkiOiBmdW5jdGlvbihpbnB1dCkgewogICAgICAgIHJl" + "dHVybiBhcnJheUxpa2VUb0FycmF5TGlrZShpbnB1dCwgbmV3IEFycmF5KGlucHV0Lmxlbmd0aCkpOwogICAgfSwKICAgICJhcnJheWJ1ZmZlciI6IGZ1bmN0aW9uKGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRy" + "YW5zZm9ybVsibm9kZWJ1ZmZlciJdWyJ1aW50OGFycmF5Il0oaW5wdXQpLmJ1ZmZlcjsKICAgIH0sCiAgICAidWludDhhcnJheSI6IGZ1bmN0aW9uKGlucHV0KSB7CiAgICAgICAgcmV0dXJuIGFycmF5TGlrZVRv" + "QXJyYXlMaWtlKGlucHV0LCBuZXcgVWludDhBcnJheShpbnB1dC5sZW5ndGgpKTsKICAgIH0sCiAgICAibm9kZWJ1ZmZlciI6IGlkZW50aXR5Cn07CgovKioKICogVHJhbnNmb3JtIGFuIGlucHV0IGludG8gYW55" + "IHR5cGUuCiAqIFRoZSBzdXBwb3J0ZWQgb3V0cHV0IHR5cGUgYXJlIDogc3RyaW5nLCBhcnJheSwgdWludDhhcnJheSwgYXJyYXlidWZmZXIsIG5vZGVidWZmZXIuCiAqIElmIG5vIG91dHB1dCB0eXBlIGlzIHNw" + "ZWNpZmllZCwgdGhlIHVubW9kaWZpZWQgaW5wdXQgd2lsbCBiZSByZXR1cm5lZC4KICogQHBhcmFtIHtTdHJpbmd9IG91dHB1dFR5cGUgdGhlIG91dHB1dCB0eXBlLgogKiBAcGFyYW0ge1N0cmluZ3xBcnJheXxB" + "cnJheUJ1ZmZlcnxVaW50OEFycmF5fEJ1ZmZlcn0gaW5wdXQgdGhlIGlucHV0IHRvIGNvbnZlcnQuCiAqIEB0aHJvd3Mge0Vycm9yfSBhbiBFcnJvciBpZiB0aGUgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgdGhl" + "IHJlcXVlc3RlZCBvdXRwdXQgdHlwZS4KICovCmV4cG9ydHMudHJhbnNmb3JtVG8gPSBmdW5jdGlvbihvdXRwdXRUeXBlLCBpbnB1dCkgewogICAgaWYgKCFpbnB1dCkgewogICAgICAgIC8vIHVuZGVmaW5lZCwg" + "bnVsbCwgZXRjCiAgICAgICAgLy8gYW4gZW1wdHkgc3RyaW5nIHdvbid0IGhhcm0uCiAgICAgICAgaW5wdXQgPSAiIjsKICAgIH0KICAgIGlmICghb3V0cHV0VHlwZSkgewogICAgICAgIHJldHVybiBpbnB1dDsK" + "ICAgIH0KICAgIGV4cG9ydHMuY2hlY2tTdXBwb3J0KG91dHB1dFR5cGUpOwogICAgdmFyIGlucHV0VHlwZSA9IGV4cG9ydHMuZ2V0VHlwZU9mKGlucHV0KTsKICAgIHZhciByZXN1bHQgPSB0cmFuc2Zvcm1baW5w" + "dXRUeXBlXVtvdXRwdXRUeXBlXShpbnB1dCk7CiAgICByZXR1cm4gcmVzdWx0Owp9OwoKLyoqCiAqIFJldHVybiB0aGUgdHlwZSBvZiB0aGUgaW5wdXQuCiAqIFRoZSB0eXBlIHdpbGwgYmUgaW4gYSBmb3JtYXQg" + "dmFsaWQgZm9yIEpTWmlwLnV0aWxzLnRyYW5zZm9ybVRvIDogc3RyaW5nLCBhcnJheSwgdWludDhhcnJheSwgYXJyYXlidWZmZXIuCiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dCB0aGUgaW5wdXQgdG8gaWRlbnRp" + "ZnkuCiAqIEByZXR1cm4ge1N0cmluZ30gdGhlIChsb3dlcmNhc2UpIHR5cGUgb2YgdGhlIGlucHV0LgogKi8KZXhwb3J0cy5nZXRUeXBlT2YgPSBmdW5jdGlvbihpbnB1dCkgewogICAgaWYgKHR5cGVvZiBpbnB1" + "dCA9PT0gInN0cmluZyIpIHsKICAgICAgICByZXR1cm4gInN0cmluZyI7CiAgICB9CiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gIltvYmplY3QgQXJyYXldIikgewog" + "ICAgICAgIHJldHVybiAiYXJyYXkiOwogICAgfQogICAgaWYgKHN1cHBvcnQubm9kZWJ1ZmZlciAmJiBub2RlanNVdGlscy5pc0J1ZmZlcihpbnB1dCkpIHsKICAgICAgICByZXR1cm4gIm5vZGVidWZmZXIiOwog" + "ICAgfQogICAgaWYgKHN1cHBvcnQudWludDhhcnJheSAmJiBpbnB1dCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHsKICAgICAgICByZXR1cm4gInVpbnQ4YXJyYXkiOwogICAgfQogICAgaWYgKHN1cHBvcnQuYXJy" + "YXlidWZmZXIgJiYgaW5wdXQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgewogICAgICAgIHJldHVybiAiYXJyYXlidWZmZXIiOwogICAgfQp9OwoKLyoqCiAqIFRocm93IGFuIGV4Y2VwdGlvbiBpZiB0aGUgdHlw" + "ZSBpcyBub3Qgc3VwcG9ydGVkLgogKiBAcGFyYW0ge1N0cmluZ30gdHlwZSB0aGUgdHlwZSB0byBjaGVjay4KICogQHRocm93cyB7RXJyb3J9IGFuIEVycm9yIGlmIHRoZSBicm93c2VyIGRvZXNuJ3Qgc3VwcG9y" + "dCB0aGUgcmVxdWVzdGVkIHR5cGUuCiAqLwpleHBvcnRzLmNoZWNrU3VwcG9ydCA9IGZ1bmN0aW9uKHR5cGUpIHsKICAgIHZhciBzdXBwb3J0ZWQgPSBzdXBwb3J0W3R5cGUudG9Mb3dlckNhc2UoKV07CiAgICBp" + "ZiAoIXN1cHBvcnRlZCkgewogICAgICAgIHRocm93IG5ldyBFcnJvcih0eXBlICsgIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgcGxhdGZvcm0iKTsKICAgIH0KfTsKCmV4cG9ydHMuTUFYX1ZBTFVFXzE2QklU" + "UyA9IDY1NTM1OwpleHBvcnRzLk1BWF9WQUxVRV8zMkJJVFMgPSAtMTsgLy8gd2VsbCwgIlx4RkZceEZGXHhGRlx4RkZceEZGXHhGRlx4RkZceEZGIiBpcyBwYXJzZWQgYXMgLTEKCi8qKgogKiBQcmV0dGlmeSBh" + "IHN0cmluZyByZWFkIGFzIGJpbmFyeS4KICogQHBhcmFtIHtzdHJpbmd9IHN0ciB0aGUgc3RyaW5nIHRvIHByZXR0aWZ5LgogKiBAcmV0dXJuIHtzdHJpbmd9IGEgcHJldHR5IHN0cmluZy4KICovCmV4cG9ydHMu" + "cHJldHR5ID0gZnVuY3Rpb24oc3RyKSB7CiAgICB2YXIgcmVzID0gJycsCiAgICAgICAgY29kZSwgaTsKICAgIGZvciAoaSA9IDA7IGkgPCAoc3RyIHx8ICIiKS5sZW5ndGg7IGkrKykgewogICAgICAgIGNvZGUg" + "PSBzdHIuY2hhckNvZGVBdChpKTsKICAgICAgICByZXMgKz0gJ1xceCcgKyAoY29kZSA8IDE2ID8gIjAiIDogIiIpICsgY29kZS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTsKICAgIH0KICAgIHJldHVybiBy" + "ZXM7Cn07CgovKioKICogRGVmZXIgdGhlIGNhbGwgb2YgYSBmdW5jdGlvbi4KICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgdGhlIGZ1bmN0aW9uIHRvIGNhbGwgYXN5bmNocm9ub3VzbHkuCiAqIEBwYXJh" + "bSB7QXJyYXl9IGFyZ3MgdGhlIGFyZ3VtZW50cyB0byBnaXZlIHRvIHRoZSBjYWxsYmFjay4KICovCmV4cG9ydHMuZGVsYXkgPSBmdW5jdGlvbihjYWxsYmFjaywgYXJncywgc2VsZikgewogICAgc2V0SW1tZWRp" + "YXRlKGZ1bmN0aW9uICgpIHsKICAgICAgICBjYWxsYmFjay5hcHBseShzZWxmIHx8IG51bGwsIGFyZ3MgfHwgW10pOwogICAgfSk7Cn07CgovKioKICogRXh0ZW5kcyBhIHByb3RvdHlwZSB3aXRoIGFuIG90aGVy" + "LCB3aXRob3V0IGNhbGxpbmcgYSBjb25zdHJ1Y3RvciB3aXRoCiAqIHNpZGUgZWZmZWN0cy4gSW5zcGlyZWQgYnkgbm9kZWpzJyBgdXRpbHMuaW5oZXJpdHNgCiAqIEBwYXJhbSB7RnVuY3Rpb259IGN0b3IgdGhl" + "IGNvbnN0cnVjdG9yIHRvIGF1Z21lbnQKICogQHBhcmFtIHtGdW5jdGlvbn0gc3VwZXJDdG9yIHRoZSBwYXJlbnQgY29uc3RydWN0b3IgdG8gdXNlCiAqLwpleHBvcnRzLmluaGVyaXRzID0gZnVuY3Rpb24gKGN0" + "b3IsIHN1cGVyQ3RvcikgewogICAgdmFyIE9iaiA9IGZ1bmN0aW9uKCkge307CiAgICBPYmoucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZTsKICAgIGN0b3IucHJvdG90eXBlID0gbmV3IE9iaigpOwp9" + "OwoKLyoqCiAqIE1lcmdlIHRoZSBvYmplY3RzIHBhc3NlZCBhcyBwYXJhbWV0ZXJzIGludG8gYSBuZXcgb25lLgogKiBAcHJpdmF0ZQogKiBAcGFyYW0gey4uLk9iamVjdH0gdmFyX2FyZ3MgQWxsIG9iamVjdHMg" + "dG8gbWVyZ2UuCiAqIEByZXR1cm4ge09iamVjdH0gYSBuZXcgb2JqZWN0IHdpdGggdGhlIGRhdGEgb2YgdGhlIG90aGVycy4KICovCmV4cG9ydHMuZXh0ZW5kID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgcmVzdWx0" + "ID0ge30sIGksIGF0dHI7CiAgICBmb3IgKGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IC8vIGFyZ3VtZW50cyBpcyBub3QgZW51bWVyYWJsZSBpbiBzb21lIGJyb3dzZXJzCiAgICAgICAgZm9y" + "IChhdHRyIGluIGFyZ3VtZW50c1tpXSkgewogICAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldLmhhc093blByb3BlcnR5KGF0dHIpICYmIHR5cGVvZiByZXN1bHRbYXR0cl0gPT09ICJ1bmRlZmluZWQiKSB7CiAg" + "ICAgICAgICAgICAgICByZXN1bHRbYXR0cl0gPSBhcmd1bWVudHNbaV1bYXR0cl07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0Owp9OwoKLyoqCiAqIFRyYW5zZm9ybSBh" + "cmJpdHJhcnkgY29udGVudCBpbnRvIGEgUHJvbWlzZS4KICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgYSBuYW1lIGZvciB0aGUgY29udGVudCBiZWluZyBwcm9jZXNzZWQuCiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1" + "dERhdGEgdGhlIGNvbnRlbnQgdG8gcHJvY2Vzcy4KICogQHBhcmFtIHtCb29sZWFufSBpc0JpbmFyeSB0cnVlIGlmIHRoZSBjb250ZW50IGlzIG5vdCBhbiB1bmljb2RlIHN0cmluZwogKiBAcGFyYW0ge0Jvb2xl" + "YW59IGlzT3B0aW1pemVkQmluYXJ5U3RyaW5nIHRydWUgaWYgdGhlIHN0cmluZyBjb250ZW50IG9ubHkgaGFzIG9uZSBieXRlIHBlciBjaGFyYWN0ZXIuCiAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNCYXNlNjQgdHJ1" + "ZSBpZiB0aGUgc3RyaW5nIGNvbnRlbnQgaXMgZW5jb2RlZCB3aXRoIGJhc2U2NC4KICogQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlIGluIGEgZm9ybWF0IHVzYWJsZSBieSBKU1ppcC4KICovCmV4cG9ydHMu" + "cHJlcGFyZUNvbnRlbnQgPSBmdW5jdGlvbihuYW1lLCBpbnB1dERhdGEsIGlzQmluYXJ5LCBpc09wdGltaXplZEJpbmFyeVN0cmluZywgaXNCYXNlNjQpIHsKCiAgICAvLyBpZiBpbnB1dERhdGEgaXMgYWxyZWFk" + "eSBhIHByb21pc2UsIHRoaXMgZmxhdHRlbiBpdC4KICAgIHZhciBwcm9taXNlID0gZXh0ZXJuYWwuUHJvbWlzZS5yZXNvbHZlKGlucHV0RGF0YSkudGhlbihmdW5jdGlvbihkYXRhKSB7CgoKICAgICAgICB2YXIg" + "aXNCbG9iID0gc3VwcG9ydC5ibG9iICYmIChkYXRhIGluc3RhbmNlb2YgQmxvYiB8fCBbJ1tvYmplY3QgRmlsZV0nLCAnW29iamVjdCBCbG9iXSddLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5j" + "YWxsKGRhdGEpKSAhPT0gLTEpOwoKICAgICAgICBpZiAoaXNCbG9iICYmIHR5cGVvZiBGaWxlUmVhZGVyICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgICByZXR1cm4gbmV3IGV4dGVybmFsLlByb21pc2Uo" + "ZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICAgICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CgogICAgICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUp" + "IHsKICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGUudGFyZ2V0LnJlc3VsdCk7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSBmdW5jdGlvbihlKSB7CiAgICAg" + "ICAgICAgICAgICAgICAgcmVqZWN0KGUudGFyZ2V0LmVycm9yKTsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZGF0YSk7CiAgICAgICAgICAgIH0p" + "OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBkYXRhOwogICAgICAgIH0KICAgIH0pOwoKICAgIHJldHVybiBwcm9taXNlLnRoZW4oZnVuY3Rpb24oZGF0YSkgewogICAgICAgIHZhciBkYXRh" + "VHlwZSA9IGV4cG9ydHMuZ2V0VHlwZU9mKGRhdGEpOwoKICAgICAgICBpZiAoIWRhdGFUeXBlKSB7CiAgICAgICAgICAgIHJldHVybiBleHRlcm5hbC5Qcm9taXNlLnJlamVjdCgKICAgICAgICAgICAgICAgIG5l" + "dyBFcnJvcigiQ2FuJ3QgcmVhZCB0aGUgZGF0YSBvZiAnIiArIG5hbWUgKyAiJy4gSXMgaXQgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgImluIGEgc3VwcG9ydGVkIEphdmFTY3JpcHQgdHlwZSAoU3Ry" + "aW5nLCBCbG9iLCBBcnJheUJ1ZmZlciwgZXRjKSA/IikKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgLy8gc3BlY2lhbCBjYXNlIDogaXQncyB3YXkgZWFzaWVyIHRvIHdvcmsgd2l0aCBVaW50OEFy" + "cmF5IHRoYW4gd2l0aCBBcnJheUJ1ZmZlcgogICAgICAgIGlmIChkYXRhVHlwZSA9PT0gImFycmF5YnVmZmVyIikgewogICAgICAgICAgICBkYXRhID0gZXhwb3J0cy50cmFuc2Zvcm1UbygidWludDhhcnJheSIs" + "IGRhdGEpOwogICAgICAgIH0gZWxzZSBpZiAoZGF0YVR5cGUgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIGlmIChpc0Jhc2U2NCkgewogICAgICAgICAgICAgICAgZGF0YSA9IGJhc2U2NC5kZWNvZGUoZGF0" + "YSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoaXNCaW5hcnkpIHsKICAgICAgICAgICAgICAgIC8vIG9wdGltaXplZEJpbmFyeVN0cmluZyA9PT0gdHJ1ZSBtZWFucyB0aGF0IHRoZSBmaWxl" + "IGhhcyBhbHJlYWR5IGJlZW4gZmlsdGVyZWQgd2l0aCBhIDB4RkYgbWFzawogICAgICAgICAgICAgICAgaWYgKGlzT3B0aW1pemVkQmluYXJ5U3RyaW5nICE9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAg" + "Ly8gdGhpcyBpcyBhIHN0cmluZywgbm90IGluIGEgYmFzZTY0IGZvcm1hdC4KICAgICAgICAgICAgICAgICAgICAvLyBCZSBzdXJlIHRoYXQgdGhpcyBpcyBhIGNvcnJlY3QgImJpbmFyeSBzdHJpbmciCiAgICAg" + "ICAgICAgICAgICAgICAgZGF0YSA9IHN0cmluZzJiaW5hcnkoZGF0YSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGRhdGE7CiAgICB9KTsKfTsKCn0s" + "eyIuL2Jhc2U2NCI6MSwiLi9leHRlcm5hbCI6NiwiLi9ub2RlanNVdGlscyI6MTQsIi4vc3VwcG9ydCI6MzAsInNldC1pbW1lZGlhdGUtc2hpbSI6NTR9XSwzMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhw" + "b3J0cyl7Cid1c2Ugc3RyaWN0JzsKdmFyIHJlYWRlckZvciA9IHJlcXVpcmUoJy4vcmVhZGVyL3JlYWRlckZvcicpOwp2YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7CnZhciBzaWcgPSByZXF1aXJlKCcu" + "L3NpZ25hdHVyZScpOwp2YXIgWmlwRW50cnkgPSByZXF1aXJlKCcuL3ppcEVudHJ5Jyk7CnZhciB1dGY4ID0gcmVxdWlyZSgnLi91dGY4Jyk7CnZhciBzdXBwb3J0ID0gcmVxdWlyZSgnLi9zdXBwb3J0Jyk7Ci8v" + "ICBjbGFzcyBaaXBFbnRyaWVzIHt7ewovKioKICogQWxsIHRoZSBlbnRyaWVzIGluIHRoZSB6aXAgZmlsZS4KICogQGNvbnN0cnVjdG9yCiAqIEBwYXJhbSB7T2JqZWN0fSBsb2FkT3B0aW9ucyBPcHRpb25zIGZv" + "ciBsb2FkaW5nIHRoZSBzdHJlYW0uCiAqLwpmdW5jdGlvbiBaaXBFbnRyaWVzKGxvYWRPcHRpb25zKSB7CiAgICB0aGlzLmZpbGVzID0gW107CiAgICB0aGlzLmxvYWRPcHRpb25zID0gbG9hZE9wdGlvbnM7Cn0K" + "WmlwRW50cmllcy5wcm90b3R5cGUgPSB7CiAgICAvKioKICAgICAqIENoZWNrIHRoYXQgdGhlIHJlYWRlciBpcyBvbiB0aGUgc3BlY2lmaWVkIHNpZ25hdHVyZS4KICAgICAqIEBwYXJhbSB7c3RyaW5nfSBleHBl" + "Y3RlZFNpZ25hdHVyZSB0aGUgZXhwZWN0ZWQgc2lnbmF0dXJlLgogICAgICogQHRocm93cyB7RXJyb3J9IGlmIGl0IGlzIGFuIG90aGVyIHNpZ25hdHVyZS4KICAgICAqLwogICAgY2hlY2tTaWduYXR1cmU6IGZ1" + "bmN0aW9uKGV4cGVjdGVkU2lnbmF0dXJlKSB7CiAgICAgICAgaWYgKCF0aGlzLnJlYWRlci5yZWFkQW5kQ2hlY2tTaWduYXR1cmUoZXhwZWN0ZWRTaWduYXR1cmUpKSB7CiAgICAgICAgICAgIHRoaXMucmVhZGVy" + "LmluZGV4IC09IDQ7CiAgICAgICAgICAgIHZhciBzaWduYXR1cmUgPSB0aGlzLnJlYWRlci5yZWFkU3RyaW5nKDQpOwogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgb3IgYnVnOiB1" + "bmV4cGVjdGVkIHNpZ25hdHVyZSAiICsgIigiICsgdXRpbHMucHJldHR5KHNpZ25hdHVyZSkgKyAiLCBleHBlY3RlZCAiICsgdXRpbHMucHJldHR5KGV4cGVjdGVkU2lnbmF0dXJlKSArICIpIik7CiAgICAgICAg" + "fQogICAgfSwKICAgIC8qKgogICAgICogQ2hlY2sgaWYgdGhlIGdpdmVuIHNpZ25hdHVyZSBpcyBhdCB0aGUgZ2l2ZW4gaW5kZXguCiAgICAgKiBAcGFyYW0ge251bWJlcn0gYXNrZWRJbmRleCB0aGUgaW5kZXgg" + "dG8gY2hlY2suCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXhwZWN0ZWRTaWduYXR1cmUgdGhlIHNpZ25hdHVyZSB0byBleHBlY3QuCiAgICAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHRoZSBzaWduYXR1" + "cmUgaXMgaGVyZSwgZmFsc2Ugb3RoZXJ3aXNlLgogICAgICovCiAgICBpc1NpZ25hdHVyZTogZnVuY3Rpb24oYXNrZWRJbmRleCwgZXhwZWN0ZWRTaWduYXR1cmUpIHsKICAgICAgICB2YXIgY3VycmVudEluZGV4" + "ID0gdGhpcy5yZWFkZXIuaW5kZXg7CiAgICAgICAgdGhpcy5yZWFkZXIuc2V0SW5kZXgoYXNrZWRJbmRleCk7CiAgICAgICAgdmFyIHNpZ25hdHVyZSA9IHRoaXMucmVhZGVyLnJlYWRTdHJpbmcoNCk7CiAgICAg" + "ICAgdmFyIHJlc3VsdCA9IHNpZ25hdHVyZSA9PT0gZXhwZWN0ZWRTaWduYXR1cmU7CiAgICAgICAgdGhpcy5yZWFkZXIuc2V0SW5kZXgoY3VycmVudEluZGV4KTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg" + "fSwKICAgIC8qKgogICAgICogUmVhZCB0aGUgZW5kIG9mIHRoZSBjZW50cmFsIGRpcmVjdG9yeS4KICAgICAqLwogICAgcmVhZEJsb2NrRW5kT2ZDZW50cmFsOiBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmRp" + "c2tOdW1iZXIgPSB0aGlzLnJlYWRlci5yZWFkSW50KDIpOwogICAgICAgIHRoaXMuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQgPSB0aGlzLnJlYWRlci5yZWFkSW50KDIpOwogICAgICAgIHRoaXMuY2VudHJhbERp" + "clJlY29yZHNPblRoaXNEaXNrID0gdGhpcy5yZWFkZXIucmVhZEludCgyKTsKICAgICAgICB0aGlzLmNlbnRyYWxEaXJSZWNvcmRzID0gdGhpcy5yZWFkZXIucmVhZEludCgyKTsKICAgICAgICB0aGlzLmNlbnRy" + "YWxEaXJTaXplID0gdGhpcy5yZWFkZXIucmVhZEludCg0KTsKICAgICAgICB0aGlzLmNlbnRyYWxEaXJPZmZzZXQgPSB0aGlzLnJlYWRlci5yZWFkSW50KDQpOwoKICAgICAgICB0aGlzLnppcENvbW1lbnRMZW5n" + "dGggPSB0aGlzLnJlYWRlci5yZWFkSW50KDIpOwogICAgICAgIC8vIHdhcm5pbmcgOiB0aGUgZW5jb2RpbmcgZGVwZW5kcyBvZiB0aGUgc3lzdGVtIGxvY2FsZQogICAgICAgIC8vIE9uIGEgbGludXggbWFjaGlu" + "ZSB3aXRoIExBTkc9ZW5fVVMudXRmOCwgdGhpcyBmaWVsZCBpcyB1dGY4IGVuY29kZWQuCiAgICAgICAgLy8gT24gYSB3aW5kb3dzIG1hY2hpbmUsIHRoaXMgZmllbGQgaXMgZW5jb2RlZCB3aXRoIHRoZSBsb2Nh" + "bGl6ZWQgd2luZG93cyBjb2RlIHBhZ2UuCiAgICAgICAgdmFyIHppcENvbW1lbnQgPSB0aGlzLnJlYWRlci5yZWFkRGF0YSh0aGlzLnppcENvbW1lbnRMZW5ndGgpOwogICAgICAgIHZhciBkZWNvZGVQYXJhbVR5" + "cGUgPSBzdXBwb3J0LnVpbnQ4YXJyYXkgPyAidWludDhhcnJheSIgOiAiYXJyYXkiOwogICAgICAgIC8vIFRvIGdldCBjb25zaXN0ZW50IGJlaGF2aW9yIHdpdGggdGhlIGdlbmVyYXRpb24gcGFydCwgd2Ugd2ls" + "bCBhc3N1bWUgdGhhdAogICAgICAgIC8vIHRoaXMgaXMgdXRmOCBlbmNvZGVkIHVubGVzcyBzcGVjaWZpZWQgb3RoZXJ3aXNlLgogICAgICAgIHZhciBkZWNvZGVDb250ZW50ID0gdXRpbHMudHJhbnNmb3JtVG8o" + "ZGVjb2RlUGFyYW1UeXBlLCB6aXBDb21tZW50KTsKICAgICAgICB0aGlzLnppcENvbW1lbnQgPSB0aGlzLmxvYWRPcHRpb25zLmRlY29kZUZpbGVOYW1lKGRlY29kZUNvbnRlbnQpOwogICAgfSwKICAgIC8qKgog" + "ICAgICogUmVhZCB0aGUgZW5kIG9mIHRoZSBaaXAgNjQgY2VudHJhbCBkaXJlY3RvcnkuCiAgICAgKiBOb3QgbWVyZ2VkIHdpdGggdGhlIG1ldGhvZCByZWFkRW5kT2ZDZW50cmFsIDoKICAgICAqIFRoZSBlbmQg" + "b2YgY2VudHJhbCBjYW4gY29leGlzdCB3aXRoIGl0cyBaaXA2NCBicm90aGVyLAogICAgICogSSBkb24ndCB3YW50IHRvIHJlYWQgdGhlIHdyb25nIG51bWJlciBvZiBieXRlcyAhCiAgICAgKi8KICAgIHJlYWRC" + "bG9ja1ppcDY0RW5kT2ZDZW50cmFsOiBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLnppcDY0RW5kT2ZDZW50cmFsU2l6ZSA9IHRoaXMucmVhZGVyLnJlYWRJbnQoOCk7CiAgICAgICAgdGhpcy5yZWFkZXIuc2tp" + "cCg0KTsKICAgICAgICAvLyB0aGlzLnZlcnNpb25NYWRlQnkgPSB0aGlzLnJlYWRlci5yZWFkU3RyaW5nKDIpOwogICAgICAgIC8vIHRoaXMudmVyc2lvbk5lZWRlZCA9IHRoaXMucmVhZGVyLnJlYWRJbnQoMik7" + "CiAgICAgICAgdGhpcy5kaXNrTnVtYmVyID0gdGhpcy5yZWFkZXIucmVhZEludCg0KTsKICAgICAgICB0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0ID0gdGhpcy5yZWFkZXIucmVhZEludCg0KTsKICAgICAg" + "ICB0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzayA9IHRoaXMucmVhZGVyLnJlYWRJbnQoOCk7CiAgICAgICAgdGhpcy5jZW50cmFsRGlyUmVjb3JkcyA9IHRoaXMucmVhZGVyLnJlYWRJbnQoOCk7CiAg" + "ICAgICAgdGhpcy5jZW50cmFsRGlyU2l6ZSA9IHRoaXMucmVhZGVyLnJlYWRJbnQoOCk7CiAgICAgICAgdGhpcy5jZW50cmFsRGlyT2Zmc2V0ID0gdGhpcy5yZWFkZXIucmVhZEludCg4KTsKCiAgICAgICAgdGhp" + "cy56aXA2NEV4dGVuc2libGVEYXRhID0ge307CiAgICAgICAgdmFyIGV4dHJhRGF0YVNpemUgPSB0aGlzLnppcDY0RW5kT2ZDZW50cmFsU2l6ZSAtIDQ0LAogICAgICAgICAgICBpbmRleCA9IDAsCiAgICAgICAg" + "ICAgIGV4dHJhRmllbGRJZCwKICAgICAgICAgICAgZXh0cmFGaWVsZExlbmd0aCwKICAgICAgICAgICAgZXh0cmFGaWVsZFZhbHVlOwogICAgICAgIHdoaWxlIChpbmRleCA8IGV4dHJhRGF0YVNpemUpIHsKICAg" + "ICAgICAgICAgZXh0cmFGaWVsZElkID0gdGhpcy5yZWFkZXIucmVhZEludCgyKTsKICAgICAgICAgICAgZXh0cmFGaWVsZExlbmd0aCA9IHRoaXMucmVhZGVyLnJlYWRJbnQoNCk7CiAgICAgICAgICAgIGV4dHJh" + "RmllbGRWYWx1ZSA9IHRoaXMucmVhZGVyLnJlYWREYXRhKGV4dHJhRmllbGRMZW5ndGgpOwogICAgICAgICAgICB0aGlzLnppcDY0RXh0ZW5zaWJsZURhdGFbZXh0cmFGaWVsZElkXSA9IHsKICAgICAgICAgICAg" + "ICAgIGlkOiBleHRyYUZpZWxkSWQsCiAgICAgICAgICAgICAgICBsZW5ndGg6IGV4dHJhRmllbGRMZW5ndGgsCiAgICAgICAgICAgICAgICB2YWx1ZTogZXh0cmFGaWVsZFZhbHVlCiAgICAgICAgICAgIH07CiAg" + "ICAgICAgfQogICAgfSwKICAgIC8qKgogICAgICogUmVhZCB0aGUgZW5kIG9mIHRoZSBaaXAgNjQgY2VudHJhbCBkaXJlY3RvcnkgbG9jYXRvci4KICAgICAqLwogICAgcmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRy" + "YWxMb2NhdG9yOiBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmRpc2tXaXRoWmlwNjRDZW50cmFsRGlyU3RhcnQgPSB0aGlzLnJlYWRlci5yZWFkSW50KDQpOwogICAgICAgIHRoaXMucmVsYXRpdmVPZmZzZXRF" + "bmRPZlppcDY0Q2VudHJhbERpciA9IHRoaXMucmVhZGVyLnJlYWRJbnQoOCk7CiAgICAgICAgdGhpcy5kaXNrc0NvdW50ID0gdGhpcy5yZWFkZXIucmVhZEludCg0KTsKICAgICAgICBpZiAodGhpcy5kaXNrc0Nv" + "dW50ID4gMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk11bHRpLXZvbHVtZXMgemlwIGFyZSBub3Qgc3VwcG9ydGVkIik7CiAgICAgICAgfQogICAgfSwKICAgIC8qKgogICAgICogUmVhZCB0aGUg" + "bG9jYWwgZmlsZXMsIGJhc2VkIG9uIHRoZSBvZmZzZXQgcmVhZCBpbiB0aGUgY2VudHJhbCBwYXJ0LgogICAgICovCiAgICByZWFkTG9jYWxGaWxlczogZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGksIGZpbGU7" + "CiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZmlsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgZmlsZSA9IHRoaXMuZmlsZXNbaV07CiAgICAgICAgICAgIHRoaXMucmVhZGVyLnNldEluZGV4KGZp" + "bGUubG9jYWxIZWFkZXJPZmZzZXQpOwogICAgICAgICAgICB0aGlzLmNoZWNrU2lnbmF0dXJlKHNpZy5MT0NBTF9GSUxFX0hFQURFUik7CiAgICAgICAgICAgIGZpbGUucmVhZExvY2FsUGFydCh0aGlzLnJlYWRl" + "cik7CiAgICAgICAgICAgIGZpbGUuaGFuZGxlVVRGOCgpOwogICAgICAgICAgICBmaWxlLnByb2Nlc3NBdHRyaWJ1dGVzKCk7CiAgICAgICAgfQogICAgfSwKICAgIC8qKgogICAgICogUmVhZCB0aGUgY2VudHJh" + "bCBkaXJlY3RvcnkuCiAgICAgKi8KICAgIHJlYWRDZW50cmFsRGlyOiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgZmlsZTsKCiAgICAgICAgdGhpcy5yZWFkZXIuc2V0SW5kZXgodGhpcy5jZW50cmFsRGlyT2Zm" + "c2V0KTsKICAgICAgICB3aGlsZSAodGhpcy5yZWFkZXIucmVhZEFuZENoZWNrU2lnbmF0dXJlKHNpZy5DRU5UUkFMX0ZJTEVfSEVBREVSKSkgewogICAgICAgICAgICBmaWxlID0gbmV3IFppcEVudHJ5KHsKICAg" + "ICAgICAgICAgICAgIHppcDY0OiB0aGlzLnppcDY0CiAgICAgICAgICAgIH0sIHRoaXMubG9hZE9wdGlvbnMpOwogICAgICAgICAgICBmaWxlLnJlYWRDZW50cmFsUGFydCh0aGlzLnJlYWRlcik7CiAgICAgICAg" + "ICAgIHRoaXMuZmlsZXMucHVzaChmaWxlKTsKICAgICAgICB9CgogICAgICAgIGlmICh0aGlzLmNlbnRyYWxEaXJSZWNvcmRzICE9PSB0aGlzLmZpbGVzLmxlbmd0aCkgewogICAgICAgICAgICBpZiAodGhpcy5j" + "ZW50cmFsRGlyUmVjb3JkcyAhPT0gMCAmJiB0aGlzLmZpbGVzLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgICAgLy8gV2UgZXhwZWN0ZWQgc29tZSByZWNvcmRzIGJ1dCBjb3VsZG4ndCBmaW5kIEFOWS4K" + "ICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgcmVhbGx5IHN1c3BpY2lvdXMsIGFzIGlmIHNvbWV0aGluZyB3ZW50IHdyb25nLgogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlw" + "IG9yIGJ1ZzogZXhwZWN0ZWQgIiArIHRoaXMuY2VudHJhbERpclJlY29yZHMgKyAiIHJlY29yZHMgaW4gY2VudHJhbCBkaXIsIGdvdCAiICsgdGhpcy5maWxlcy5sZW5ndGgpOwogICAgICAgICAgICB9IGVsc2Ug" + "ewogICAgICAgICAgICAgICAgLy8gV2UgZm91bmQgc29tZSByZWNvcmRzIGJ1dCBub3QgYWxsLgogICAgICAgICAgICAgICAgLy8gU29tZXRoaW5nIGlzIHdyb25nIGJ1dCB3ZSBnb3Qgc29tZXRoaW5nIGZvciB0" + "aGUgdXNlcjogbm8gZXJyb3IgaGVyZS4KICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUud2FybigiZXhwZWN0ZWQiLCB0aGlzLmNlbnRyYWxEaXJSZWNvcmRzLCAicmVjb3JkcyBpbiBjZW50cmFsIGRpciwgZ290" + "IiwgdGhpcy5maWxlcy5sZW5ndGgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSwKICAgIC8qKgogICAgICogUmVhZCB0aGUgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5LgogICAgICovCiAgICByZWFk" + "RW5kT2ZDZW50cmFsOiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5yZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUoc2lnLkNFTlRSQUxfRElSRUNUT1JZX0VORCk7CiAgICAgICAgaWYg" + "KG9mZnNldCA8IDApIHsKICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGNvbnRlbnQgaXMgYSB0cnVuY2F0ZWQgemlwIG9yIGNvbXBsZXRlIGdhcmJhZ2UuCiAgICAgICAgICAgIC8vIEEgIkxPQ0FMX0ZJTEVf" + "SEVBREVSIiBpcyBub3QgcmVxdWlyZWQgYXQgdGhlIGJlZ2lubmluZyAoYXV0bwogICAgICAgICAgICAvLyBleHRyYWN0aWJsZSB6aXAgZm9yIGV4YW1wbGUpIGJ1dCBpdCBjYW4gZ2l2ZSBhIGdvb2QgaGludC4K" + "ICAgICAgICAgICAgLy8gSWYgYW4gYWpheCByZXF1ZXN0IHdhcyB1c2VkIHdpdGhvdXQgcmVzcG9uc2VUeXBlLCB3ZSB3aWxsIGFsc28KICAgICAgICAgICAgLy8gZ2V0IHVucmVhZGFibGUgZGF0YS4KICAgICAg" + "ICAgICAgdmFyIGlzR2FyYmFnZSA9ICF0aGlzLmlzU2lnbmF0dXJlKDAsIHNpZy5MT0NBTF9GSUxFX0hFQURFUik7CgogICAgICAgICAgICBpZiAoaXNHYXJiYWdlKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBu" + "ZXcgRXJyb3IoIkNhbid0IGZpbmQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5IDogaXMgdGhpcyBhIHppcCBmaWxlID8gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklmIGl0IGlzLCBzZWUg" + "aHR0cHM6Ly9zdHVrLmdpdGh1Yi5pby9qc3ppcC9kb2N1bWVudGF0aW9uL2hvd3RvL3JlYWRfemlwLmh0bWwiKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigi" + "Q29ycnVwdGVkIHppcDogY2FuJ3QgZmluZCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkiKTsKICAgICAgICAgICAgfQoKICAgICAgICB9CiAgICAgICAgdGhpcy5yZWFkZXIuc2V0SW5kZXgob2Zmc2V0KTsKICAg" + "ICAgICB2YXIgZW5kT2ZDZW50cmFsRGlyT2Zmc2V0ID0gb2Zmc2V0OwogICAgICAgIHRoaXMuY2hlY2tTaWduYXR1cmUoc2lnLkNFTlRSQUxfRElSRUNUT1JZX0VORCk7CiAgICAgICAgdGhpcy5yZWFkQmxvY2tF" + "bmRPZkNlbnRyYWwoKTsKCgogICAgICAgIC8qIGV4dHJhY3QgZnJvbSB0aGUgemlwIHNwZWMgOgogICAgICAgICAgICA0KSAgSWYgb25lIG9mIHRoZSBmaWVsZHMgaW4gdGhlIGVuZCBvZiBjZW50cmFsIGRpcmVj" + "dG9yeQogICAgICAgICAgICAgICAgcmVjb3JkIGlzIHRvbyBzbWFsbCB0byBob2xkIHJlcXVpcmVkIGRhdGEsIHRoZSBmaWVsZAogICAgICAgICAgICAgICAgc2hvdWxkIGJlIHNldCB0byAtMSAoMHhGRkZGIG9y" + "IDB4RkZGRkZGRkYpIGFuZCB0aGUKICAgICAgICAgICAgICAgIFpJUDY0IGZvcm1hdCByZWNvcmQgc2hvdWxkIGJlIGNyZWF0ZWQuCiAgICAgICAgICAgIDUpICBUaGUgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5" + "IHJlY29yZCBhbmQgdGhlCiAgICAgICAgICAgICAgICBaaXA2NCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkgbG9jYXRvciByZWNvcmQgbXVzdAogICAgICAgICAgICAgICAgcmVzaWRlIG9uIHRoZSBzYW1lIGRp" + "c2sgd2hlbiBzcGxpdHRpbmcgb3Igc3Bhbm5pbmcKICAgICAgICAgICAgICAgIGFuIGFyY2hpdmUuCiAgICAgICAgICovCiAgICAgICAgaWYgKHRoaXMuZGlza051bWJlciA9PT0gdXRpbHMuTUFYX1ZBTFVFXzE2" + "QklUUyB8fCB0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0ID09PSB1dGlscy5NQVhfVkFMVUVfMTZCSVRTIHx8IHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrID09PSB1dGlscy5NQVhfVkFMVUVf" + "MTZCSVRTIHx8IHRoaXMuY2VudHJhbERpclJlY29yZHMgPT09IHV0aWxzLk1BWF9WQUxVRV8xNkJJVFMgfHwgdGhpcy5jZW50cmFsRGlyU2l6ZSA9PT0gdXRpbHMuTUFYX1ZBTFVFXzMyQklUUyB8fCB0aGlzLmNl" + "bnRyYWxEaXJPZmZzZXQgPT09IHV0aWxzLk1BWF9WQUxVRV8zMkJJVFMpIHsKICAgICAgICAgICAgdGhpcy56aXA2NCA9IHRydWU7CgogICAgICAgICAgICAvKgogICAgICAgICAgICBXYXJuaW5nIDogdGhlIHpp" + "cDY0IGV4dGVuc2lvbiBpcyBzdXBwb3J0ZWQsIGJ1dCBPTkxZIGlmIHRoZSA2NGJpdHMgaW50ZWdlciByZWFkIGZyb20KICAgICAgICAgICAgdGhlIHppcCBmaWxlIGNhbiBmaXQgaW50byBhIDMyYml0cyBpbnRl" + "Z2VyLiBUaGlzIGNhbm5vdCBiZSBzb2x2ZWQgOiBKYXZhU2NyaXB0IHJlcHJlc2VudHMKICAgICAgICAgICAgYWxsIG51bWJlcnMgYXMgNjQtYml0IGRvdWJsZSBwcmVjaXNpb24gSUVFRSA3NTQgZmxvYXRpbmcg" + "cG9pbnQgbnVtYmVycy4KICAgICAgICAgICAgU28sIHdlIGhhdmUgNTNiaXRzIGZvciBpbnRlZ2VycyBhbmQgYml0d2lzZSBvcGVyYXRpb25zIHRyZWF0IGV2ZXJ5dGhpbmcgYXMgMzJiaXRzLgogICAgICAgICAg" + "ICBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PcGVyYXRvcnMvQml0d2lzZV9PcGVyYXRvcnMKICAgICAgICAgICAgYW5kIGh0dHA6Ly93" + "d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9wdWJsaWNhdGlvbnMvZmlsZXMvRUNNQS1TVC9FQ01BLTI2Mi5wZGYgc2VjdGlvbiA4LjUKICAgICAgICAgICAgKi8KCiAgICAgICAgICAgIC8vIHNob3VsZCBsb29r" + "IGZvciBhIHppcDY0IEVPQ0QgbG9jYXRvcgogICAgICAgICAgICBvZmZzZXQgPSB0aGlzLnJlYWRlci5sYXN0SW5kZXhPZlNpZ25hdHVyZShzaWcuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUik7CiAg" + "ICAgICAgICAgIGlmIChvZmZzZXQgPCAwKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXA6IGNhbid0IGZpbmQgdGhlIFpJUDY0IGVuZCBvZiBjZW50cmFsIGRpcmVjdG9y" + "eSBsb2NhdG9yIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5yZWFkZXIuc2V0SW5kZXgob2Zmc2V0KTsKICAgICAgICAgICAgdGhpcy5jaGVja1NpZ25hdHVyZShzaWcuWklQNjRfQ0VOVFJBTF9E" + "SVJFQ1RPUllfTE9DQVRPUik7CiAgICAgICAgICAgIHRoaXMucmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWxMb2NhdG9yKCk7CgogICAgICAgICAgICAvLyBub3cgdGhlIHppcDY0IEVPQ0QgcmVjb3JkCiAgICAg" + "ICAgICAgIGlmICghdGhpcy5pc1NpZ25hdHVyZSh0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXIsIHNpZy5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQpKSB7CiAgICAgICAgICAgICAg" + "ICAvLyBjb25zb2xlLndhcm4oIlpJUDY0IGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSBub3Qgd2hlcmUgZXhwZWN0ZWQuIik7CiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENl" + "bnRyYWxEaXIgPSB0aGlzLnJlYWRlci5sYXN0SW5kZXhPZlNpZ25hdHVyZShzaWcuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKTsKICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlbGF0aXZlT2Zmc2V0RW5k" + "T2ZaaXA2NENlbnRyYWxEaXIgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwOiBjYW4ndCBmaW5kIHRoZSBaSVA2NCBlbmQgb2YgY2VudHJhbCBkaXJlY3Rv" + "cnkiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnJlYWRlci5zZXRJbmRleCh0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXIpOwogICAgICAg" + "ICAgICB0aGlzLmNoZWNrU2lnbmF0dXJlKHNpZy5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQpOwogICAgICAgICAgICB0aGlzLnJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsKCk7CiAgICAgICAgfQoKICAg" + "ICAgICB2YXIgZXhwZWN0ZWRFbmRPZkNlbnRyYWxEaXJPZmZzZXQgPSB0aGlzLmNlbnRyYWxEaXJPZmZzZXQgKyB0aGlzLmNlbnRyYWxEaXJTaXplOwogICAgICAgIGlmICh0aGlzLnppcDY0KSB7CiAgICAgICAg" + "ICAgIGV4cGVjdGVkRW5kT2ZDZW50cmFsRGlyT2Zmc2V0ICs9IDIwOyAvLyBlbmQgb2YgY2VudHJhbCBkaXIgNjQgbG9jYXRvcgogICAgICAgICAgICBleHBlY3RlZEVuZE9mQ2VudHJhbERpck9mZnNldCArPSAx" + "MiAvKiBzaG91bGQgbm90IGluY2x1ZGUgdGhlIGxlYWRpbmcgMTIgYnl0ZXMgKi8gKyB0aGlzLnppcDY0RW5kT2ZDZW50cmFsU2l6ZTsKICAgICAgICB9CgogICAgICAgIHZhciBleHRyYUJ5dGVzID0gZW5kT2ZD" + "ZW50cmFsRGlyT2Zmc2V0IC0gZXhwZWN0ZWRFbmRPZkNlbnRyYWxEaXJPZmZzZXQ7CgogICAgICAgIGlmIChleHRyYUJ5dGVzID4gMCkgewogICAgICAgICAgICAvLyBjb25zb2xlLndhcm4oZXh0cmFCeXRlcywg" + "ImV4dHJhIGJ5dGVzIGF0IGJlZ2lubmluZyBvciB3aXRoaW4gemlwZmlsZSIpOwogICAgICAgICAgICBpZiAodGhpcy5pc1NpZ25hdHVyZShlbmRPZkNlbnRyYWxEaXJPZmZzZXQsIHNpZy5DRU5UUkFMX0ZJTEVf" + "SEVBREVSKSkgewogICAgICAgICAgICAgICAgLy8gVGhlIG9mZnNldHMgc2VlbSB3cm9uZywgYnV0IHdlIGhhdmUgc29tZXRoaW5nIGF0IHRoZSBzcGVjaWZpZWQgb2Zmc2V0LgogICAgICAgICAgICAgICAgLy8g" + "U28mIHdlIGtlZXAgaXQuCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyB0aGUgb2Zmc2V0IGlzIHdyb25nLCB1cGRhdGUgdGhlICJ6ZXJvIiBvZiB0aGUgcmVhZGVyCiAgICAgICAgICAg" + "ICAgICAvLyB0aGlzIGhhcHBlbnMgaWYgZGF0YSBoYXMgYmVlbiBwcmVwZW5kZWQgKGNyeCBmaWxlcyBmb3IgZXhhbXBsZSkKICAgICAgICAgICAgICAgIHRoaXMucmVhZGVyLnplcm8gPSBleHRyYUJ5dGVzOwog" + "ICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChleHRyYUJ5dGVzIDwgMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXA6IG1pc3NpbmcgIiArIE1hdGguYWJzKGV4dHJh" + "Qnl0ZXMpICsgIiBieXRlcy4iKTsKICAgICAgICB9CiAgICB9LAogICAgcHJlcGFyZVJlYWRlcjogZnVuY3Rpb24oZGF0YSkgewogICAgICAgIHRoaXMucmVhZGVyID0gcmVhZGVyRm9yKGRhdGEpOwogICAgfSwK" + "ICAgIC8qKgogICAgICogUmVhZCBhIHppcCBmaWxlIGFuZCBjcmVhdGUgWmlwRW50cmllcy4KICAgICAqIEBwYXJhbSB7U3RyaW5nfEFycmF5QnVmZmVyfFVpbnQ4QXJyYXl8QnVmZmVyfSBkYXRhIHRoZSBiaW5h" + "cnkgc3RyaW5nIHJlcHJlc2VudGluZyBhIHppcCBmaWxlLgogICAgICovCiAgICBsb2FkOiBmdW5jdGlvbihkYXRhKSB7CiAgICAgICAgdGhpcy5wcmVwYXJlUmVhZGVyKGRhdGEpOwogICAgICAgIHRoaXMucmVh" + "ZEVuZE9mQ2VudHJhbCgpOwogICAgICAgIHRoaXMucmVhZENlbnRyYWxEaXIoKTsKICAgICAgICB0aGlzLnJlYWRMb2NhbEZpbGVzKCk7CiAgICB9Cn07Ci8vIH19fSBlbmQgb2YgWmlwRW50cmllcwptb2R1bGUu" + "ZXhwb3J0cyA9IFppcEVudHJpZXM7Cgp9LHsiLi9yZWFkZXIvcmVhZGVyRm9yIjoyMiwiLi9zaWduYXR1cmUiOjIzLCIuL3N1cHBvcnQiOjMwLCIuL3V0ZjgiOjMxLCIuL3V0aWxzIjozMiwiLi96aXBFbnRyeSI6" + "MzR9XSwzNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsKdmFyIHJlYWRlckZvciA9IHJlcXVpcmUoJy4vcmVhZGVyL3JlYWRlckZvcicpOwp2YXIgdXRpbHMgPSByZXF1" + "aXJlKCcuL3V0aWxzJyk7CnZhciBDb21wcmVzc2VkT2JqZWN0ID0gcmVxdWlyZSgnLi9jb21wcmVzc2VkT2JqZWN0Jyk7CnZhciBjcmMzMmZuID0gcmVxdWlyZSgnLi9jcmMzMicpOwp2YXIgdXRmOCA9IHJlcXVp" + "cmUoJy4vdXRmOCcpOwp2YXIgY29tcHJlc3Npb25zID0gcmVxdWlyZSgnLi9jb21wcmVzc2lvbnMnKTsKdmFyIHN1cHBvcnQgPSByZXF1aXJlKCcuL3N1cHBvcnQnKTsKCnZhciBNQURFX0JZX0RPUyA9IDB4MDA7" + "CnZhciBNQURFX0JZX1VOSVggPSAweDAzOwoKLyoqCiAqIEZpbmQgYSBjb21wcmVzc2lvbiByZWdpc3RlcmVkIGluIEpTWmlwLgogKiBAcGFyYW0ge3N0cmluZ30gY29tcHJlc3Npb25NZXRob2QgdGhlIG1ldGhv" + "ZCBtYWdpYyB0byBmaW5kLgogKiBAcmV0dXJuIHtPYmplY3R8bnVsbH0gdGhlIEpTWmlwIGNvbXByZXNzaW9uIG9iamVjdCwgbnVsbCBpZiBub25lIGZvdW5kLgogKi8KdmFyIGZpbmRDb21wcmVzc2lvbiA9IGZ1" + "bmN0aW9uKGNvbXByZXNzaW9uTWV0aG9kKSB7CiAgICBmb3IgKHZhciBtZXRob2QgaW4gY29tcHJlc3Npb25zKSB7CiAgICAgICAgaWYgKCFjb21wcmVzc2lvbnMuaGFzT3duUHJvcGVydHkobWV0aG9kKSkgewog" + "ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKGNvbXByZXNzaW9uc1ttZXRob2RdLm1hZ2ljID09PSBjb21wcmVzc2lvbk1ldGhvZCkgewogICAgICAgICAgICByZXR1cm4gY29tcHJl" + "c3Npb25zW21ldGhvZF07CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7Cn07CgovLyBjbGFzcyBaaXBFbnRyeSB7e3sKLyoqCiAqIEFuIGVudHJ5IGluIHRoZSB6aXAgZmlsZS4KICogQGNvbnN0cnVj" + "dG9yCiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIE9wdGlvbnMgb2YgdGhlIGN1cnJlbnQgZmlsZS4KICogQHBhcmFtIHtPYmplY3R9IGxvYWRPcHRpb25zIE9wdGlvbnMgZm9yIGxvYWRpbmcgdGhlIHN0cmVh" + "bS4KICovCmZ1bmN0aW9uIFppcEVudHJ5KG9wdGlvbnMsIGxvYWRPcHRpb25zKSB7CiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOwogICAgdGhpcy5sb2FkT3B0aW9ucyA9IGxvYWRPcHRpb25zOwp9ClppcEVu" + "dHJ5LnByb3RvdHlwZSA9IHsKICAgIC8qKgogICAgICogc2F5IGlmIHRoZSBmaWxlIGlzIGVuY3J5cHRlZC4KICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdGhlIGZpbGUgaXMgZW5jcnlwdGVkLCBm" + "YWxzZSBvdGhlcndpc2UuCiAgICAgKi8KICAgIGlzRW5jcnlwdGVkOiBmdW5jdGlvbigpIHsKICAgICAgICAvLyBiaXQgMSBpcyBzZXQKICAgICAgICByZXR1cm4gKHRoaXMuYml0RmxhZyAmIDB4MDAwMSkgPT09" + "IDB4MDAwMTsKICAgIH0sCiAgICAvKioKICAgICAqIHNheSBpZiB0aGUgZmlsZSBoYXMgdXRmLTggZmlsZW5hbWUvY29tbWVudC4KICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdGhlIGZpbGVuYW1l" + "L2NvbW1lbnQgaXMgaW4gdXRmLTgsIGZhbHNlIG90aGVyd2lzZS4KICAgICAqLwogICAgdXNlVVRGODogZnVuY3Rpb24oKSB7CiAgICAgICAgLy8gYml0IDExIGlzIHNldAogICAgICAgIHJldHVybiAodGhpcy5i" + "aXRGbGFnICYgMHgwODAwKSA9PT0gMHgwODAwOwogICAgfSwKICAgIC8qKgogICAgICogUmVhZCB0aGUgbG9jYWwgcGFydCBvZiBhIHppcCBmaWxlIGFuZCBhZGQgdGhlIGluZm8gaW4gdGhpcyBvYmplY3QuCiAg" + "ICAgKiBAcGFyYW0ge0RhdGFSZWFkZXJ9IHJlYWRlciB0aGUgcmVhZGVyIHRvIHVzZS4KICAgICAqLwogICAgcmVhZExvY2FsUGFydDogZnVuY3Rpb24ocmVhZGVyKSB7CiAgICAgICAgdmFyIGNvbXByZXNzaW9u" + "LCBsb2NhbEV4dHJhRmllbGRzTGVuZ3RoOwoKICAgICAgICAvLyB3ZSBhbHJlYWR5IGtub3cgZXZlcnl0aGluZyBmcm9tIHRoZSBjZW50cmFsIGRpciAhCiAgICAgICAgLy8gSWYgdGhlIGNlbnRyYWwgZGlyIGRh" + "dGEgYXJlIGZhbHNlLCB3ZSBhcmUgZG9vbWVkLgogICAgICAgIC8vIE9uIHRoZSBicmlnaHQgc2lkZSwgdGhlIGxvY2FsIHBhcnQgaXMgc2NhcnkgIDogemlwNjQsIGRhdGEgZGVzY3JpcHRvcnMsIGJvdGgsIGV0" + "Yy4KICAgICAgICAvLyBUaGUgbGVzcyBkYXRhIHdlIGdldCBoZXJlLCB0aGUgbW9yZSByZWxpYWJsZSB0aGlzIHNob3VsZCBiZS4KICAgICAgICAvLyBMZXQncyBza2lwIHRoZSB3aG9sZSBoZWFkZXIgYW5kIGRh" + "c2ggdG8gdGhlIGRhdGEgIQogICAgICAgIHJlYWRlci5za2lwKDIyKTsKICAgICAgICAvLyBpbiBzb21lIHppcCBjcmVhdGVkIG9uIHdpbmRvd3MsIHRoZSBmaWxlbmFtZSBzdG9yZWQgaW4gdGhlIGNlbnRyYWwg" + "ZGlyIGNvbnRhaW5zIFwgaW5zdGVhZCBvZiAvLgogICAgICAgIC8vIFN0cmFuZ2VseSwgdGhlIGZpbGVuYW1lIGhlcmUgaXMgT0suCiAgICAgICAgLy8gSSB3b3VsZCBsb3ZlIHRvIHRyZWF0IHRoZXNlIHppcCBm" + "aWxlcyBhcyBjb3JydXB0ZWQgKHNlZSBodHRwOi8vd3d3LmluZm8temlwLm9yZy9GQVEuaHRtbCNiYWNrc2xhc2hlcwogICAgICAgIC8vIG9yIEFQUE5PVEUjNC40LjE3LjEsICJBbGwgc2xhc2hlcyBNVVNUIGJl" + "IGZvcndhcmQgc2xhc2hlcyAnLyciKSBidXQgdGhlcmUgYXJlIGEgbG90IG9mIGJhZCB6aXAgZ2VuZXJhdG9ycy4uLgogICAgICAgIC8vIFNlYXJjaCAidW56aXAgbWlzbWF0Y2hpbmcgImxvY2FsIiBmaWxlbmFt" + "ZSBjb250aW51aW5nIHdpdGggImNlbnRyYWwiIGZpbGVuYW1lIHZlcnNpb24iIG9uCiAgICAgICAgLy8gdGhlIGludGVybmV0LgogICAgICAgIC8vCiAgICAgICAgLy8gSSB0aGluayBJIHNlZSB0aGUgbG9naWMg" + "aGVyZSA6IHRoZSBjZW50cmFsIGRpcmVjdG9yeSBpcyB1c2VkIHRvIGRpc3BsYXkKICAgICAgICAvLyBjb250ZW50IGFuZCB0aGUgbG9jYWwgZGlyZWN0b3J5IGlzIHVzZWQgdG8gZXh0cmFjdCB0aGUgZmlsZXMu" + "IE1peGluZyAvIGFuZCBcCiAgICAgICAgLy8gbWF5IGJlIHVzZWQgdG8gZGlzcGxheSBcIHRvIHdpbmRvd3MgdXNlcnMgYW5kIHVzZSAvIHdoZW4gZXh0cmFjdGluZyB0aGUgZmlsZXMuCiAgICAgICAgLy8gVW5m" + "b3J0dW5hdGVseSwgdGhpcyBsZWFkIGFsc28gdG8gc29tZSBpc3N1ZXMgOiBodHRwOi8vc2VjbGlzdHMub3JnL2Z1bGxkaXNjbG9zdXJlLzIwMDkvU2VwLzM5NAogICAgICAgIHRoaXMuZmlsZU5hbWVMZW5ndGgg" + "PSByZWFkZXIucmVhZEludCgyKTsKICAgICAgICBsb2NhbEV4dHJhRmllbGRzTGVuZ3RoID0gcmVhZGVyLnJlYWRJbnQoMik7IC8vIGNhbid0IGJlIHN1cmUgdGhpcyB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSBj" + "ZW50cmFsIGRpcgogICAgICAgIC8vIHRoZSBmaWxlTmFtZSBpcyBzdG9yZWQgYXMgYmluYXJ5IGRhdGEsIHRoZSBoYW5kbGVVVEY4IG1ldGhvZCB3aWxsIHRha2UgY2FyZSBvZiB0aGUgZW5jb2RpbmcuCiAgICAg" + "ICAgdGhpcy5maWxlTmFtZSA9IHJlYWRlci5yZWFkRGF0YSh0aGlzLmZpbGVOYW1lTGVuZ3RoKTsKICAgICAgICByZWFkZXIuc2tpcChsb2NhbEV4dHJhRmllbGRzTGVuZ3RoKTsKCiAgICAgICAgaWYgKHRoaXMu" + "Y29tcHJlc3NlZFNpemUgPT09IC0xIHx8IHRoaXMudW5jb21wcmVzc2VkU2l6ZSA9PT0gLTEpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCdWcgb3IgY29ycnVwdGVkIHppcCA6IGRpZG4ndCBnZXQg" + "ZW5vdWdoIGluZm9ybWF0aW9uIGZyb20gdGhlIGNlbnRyYWwgZGlyZWN0b3J5ICIgKyAiKGNvbXByZXNzZWRTaXplID09PSAtMSB8fCB1bmNvbXByZXNzZWRTaXplID09PSAtMSkiKTsKICAgICAgICB9CgogICAg" + "ICAgIGNvbXByZXNzaW9uID0gZmluZENvbXByZXNzaW9uKHRoaXMuY29tcHJlc3Npb25NZXRob2QpOwogICAgICAgIGlmIChjb21wcmVzc2lvbiA9PT0gbnVsbCkgeyAvLyBubyBjb21wcmVzc2lvbiBmb3VuZAog" + "ICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgOiBjb21wcmVzc2lvbiAiICsgdXRpbHMucHJldHR5KHRoaXMuY29tcHJlc3Npb25NZXRob2QpICsgIiB1bmtub3duIChpbm5lciBmaWxl" + "IDogIiArIHV0aWxzLnRyYW5zZm9ybVRvKCJzdHJpbmciLCB0aGlzLmZpbGVOYW1lKSArICIpIik7CiAgICAgICAgfQogICAgICAgIHRoaXMuZGVjb21wcmVzc2VkID0gbmV3IENvbXByZXNzZWRPYmplY3QodGhp" + "cy5jb21wcmVzc2VkU2l6ZSwgdGhpcy51bmNvbXByZXNzZWRTaXplLCB0aGlzLmNyYzMyLCBjb21wcmVzc2lvbiwgcmVhZGVyLnJlYWREYXRhKHRoaXMuY29tcHJlc3NlZFNpemUpKTsKICAgIH0sCgogICAgLyoq" + "CiAgICAgKiBSZWFkIHRoZSBjZW50cmFsIHBhcnQgb2YgYSB6aXAgZmlsZSBhbmQgYWRkIHRoZSBpbmZvIGluIHRoaXMgb2JqZWN0LgogICAgICogQHBhcmFtIHtEYXRhUmVhZGVyfSByZWFkZXIgdGhlIHJlYWRl" + "ciB0byB1c2UuCiAgICAgKi8KICAgIHJlYWRDZW50cmFsUGFydDogZnVuY3Rpb24ocmVhZGVyKSB7CiAgICAgICAgdGhpcy52ZXJzaW9uTWFkZUJ5ID0gcmVhZGVyLnJlYWRJbnQoMik7CiAgICAgICAgcmVhZGVy" + "LnNraXAoMik7CiAgICAgICAgLy8gdGhpcy52ZXJzaW9uTmVlZGVkID0gcmVhZGVyLnJlYWRJbnQoMik7CiAgICAgICAgdGhpcy5iaXRGbGFnID0gcmVhZGVyLnJlYWRJbnQoMik7CiAgICAgICAgdGhpcy5jb21w" + "cmVzc2lvbk1ldGhvZCA9IHJlYWRlci5yZWFkU3RyaW5nKDIpOwogICAgICAgIHRoaXMuZGF0ZSA9IHJlYWRlci5yZWFkRGF0ZSgpOwogICAgICAgIHRoaXMuY3JjMzIgPSByZWFkZXIucmVhZEludCg0KTsKICAg" + "ICAgICB0aGlzLmNvbXByZXNzZWRTaXplID0gcmVhZGVyLnJlYWRJbnQoNCk7CiAgICAgICAgdGhpcy51bmNvbXByZXNzZWRTaXplID0gcmVhZGVyLnJlYWRJbnQoNCk7CiAgICAgICAgdmFyIGZpbGVOYW1lTGVu" + "Z3RoID0gcmVhZGVyLnJlYWRJbnQoMik7CiAgICAgICAgdGhpcy5leHRyYUZpZWxkc0xlbmd0aCA9IHJlYWRlci5yZWFkSW50KDIpOwogICAgICAgIHRoaXMuZmlsZUNvbW1lbnRMZW5ndGggPSByZWFkZXIucmVh" + "ZEludCgyKTsKICAgICAgICB0aGlzLmRpc2tOdW1iZXJTdGFydCA9IHJlYWRlci5yZWFkSW50KDIpOwogICAgICAgIHRoaXMuaW50ZXJuYWxGaWxlQXR0cmlidXRlcyA9IHJlYWRlci5yZWFkSW50KDIpOwogICAg" + "ICAgIHRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyA9IHJlYWRlci5yZWFkSW50KDQpOwogICAgICAgIHRoaXMubG9jYWxIZWFkZXJPZmZzZXQgPSByZWFkZXIucmVhZEludCg0KTsKCiAgICAgICAgaWYgKHRo" + "aXMuaXNFbmNyeXB0ZWQoKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRlZCB6aXAgYXJlIG5vdCBzdXBwb3J0ZWQiKTsKICAgICAgICB9CgogICAgICAgIC8vIHdpbGwgYmUgcmVhZCBp" + "biB0aGUgbG9jYWwgcGFydCwgc2VlIHRoZSBjb21tZW50cyB0aGVyZQogICAgICAgIHJlYWRlci5za2lwKGZpbGVOYW1lTGVuZ3RoKTsKICAgICAgICB0aGlzLnJlYWRFeHRyYUZpZWxkcyhyZWFkZXIpOwogICAg" + "ICAgIHRoaXMucGFyc2VaSVA2NEV4dHJhRmllbGQocmVhZGVyKTsKICAgICAgICB0aGlzLmZpbGVDb21tZW50ID0gcmVhZGVyLnJlYWREYXRhKHRoaXMuZmlsZUNvbW1lbnRMZW5ndGgpOwogICAgfSwKCiAgICAv" + "KioKICAgICAqIFBhcnNlIHRoZSBleHRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMgYW5kIGdldCB0aGUgdW5peC9kb3MgcGVybWlzc2lvbnMuCiAgICAgKi8KICAgIHByb2Nlc3NBdHRyaWJ1dGVzOiBmdW5jdGlvbiAo" + "KSB7CiAgICAgICAgdGhpcy51bml4UGVybWlzc2lvbnMgPSBudWxsOwogICAgICAgIHRoaXMuZG9zUGVybWlzc2lvbnMgPSBudWxsOwogICAgICAgIHZhciBtYWRlQnkgPSB0aGlzLnZlcnNpb25NYWRlQnkgPj4g" + "ODsKCiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSB0aGUgRE9TIGRpcmVjdG9yeSBmbGFnIHNldC4KICAgICAgICAvLyBXZSBsb29rIGZvciBpdCBpbiB0aGUgRE9TIGFuZCBVTklYIHBlcm1pc3Npb25zCiAg" + "ICAgICAgLy8gYnV0IHNvbWUgdW5rbm93biBwbGF0Zm9ybSBjb3VsZCBzZXQgaXQgYXMgYSBjb21wYXRpYmlsaXR5IGZsYWcuCiAgICAgICAgdGhpcy5kaXIgPSB0aGlzLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXMg" + "JiAweDAwMTAgPyB0cnVlIDogZmFsc2U7CgogICAgICAgIGlmKG1hZGVCeSA9PT0gTUFERV9CWV9ET1MpIHsKICAgICAgICAgICAgLy8gZmlyc3QgNiBiaXRzICgwIHRvIDUpCiAgICAgICAgICAgIHRoaXMuZG9z" + "UGVybWlzc2lvbnMgPSB0aGlzLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXMgJiAweDNGOwogICAgICAgIH0KCiAgICAgICAgaWYobWFkZUJ5ID09PSBNQURFX0JZX1VOSVgpIHsKICAgICAgICAgICAgdGhpcy51bml4" + "UGVybWlzc2lvbnMgPSAodGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzID4+IDE2KSAmIDB4RkZGRjsKICAgICAgICAgICAgLy8gdGhlIG9jdGFsIHBlcm1pc3Npb25zIGFyZSBpbiAodGhpcy51bml4UGVybWlz" + "c2lvbnMgJiAweDAxRkYpLnRvU3RyaW5nKDgpOwogICAgICAgIH0KCiAgICAgICAgLy8gZmFpbCBzYWZlIDogaWYgdGhlIG5hbWUgZW5kcyB3aXRoIGEgLyBpdCBwcm9iYWJseSBtZWFucyBhIGZvbGRlcgogICAg" + "ICAgIGlmICghdGhpcy5kaXIgJiYgdGhpcy5maWxlTmFtZVN0ci5zbGljZSgtMSkgPT09ICcvJykgewogICAgICAgICAgICB0aGlzLmRpciA9IHRydWU7CiAgICAgICAgfQogICAgfSwKCiAgICAvKioKICAgICAq" + "IFBhcnNlIHRoZSBaSVA2NCBleHRyYSBmaWVsZCBhbmQgbWVyZ2UgdGhlIGluZm8gaW4gdGhlIGN1cnJlbnQgWmlwRW50cnkuCiAgICAgKiBAcGFyYW0ge0RhdGFSZWFkZXJ9IHJlYWRlciB0aGUgcmVhZGVyIHRv" + "IHVzZS4KICAgICAqLwogICAgcGFyc2VaSVA2NEV4dHJhRmllbGQ6IGZ1bmN0aW9uKHJlYWRlcikgewoKICAgICAgICBpZiAoIXRoaXMuZXh0cmFGaWVsZHNbMHgwMDAxXSkgewogICAgICAgICAgICByZXR1cm47" + "CiAgICAgICAgfQoKICAgICAgICAvLyBzaG91bGQgYmUgc29tZXRoaW5nLCBwcmVwYXJpbmcgdGhlIGV4dHJhIHJlYWRlcgogICAgICAgIHZhciBleHRyYVJlYWRlciA9IHJlYWRlckZvcih0aGlzLmV4dHJhRmll" + "bGRzWzB4MDAwMV0udmFsdWUpOwoKICAgICAgICAvLyBJIHJlYWxseSBob3BlIHRoYXQgdGhlc2UgNjRiaXRzIGludGVnZXIgY2FuIGZpdCBpbiAzMiBiaXRzIGludGVnZXIsIGJlY2F1c2UganMKICAgICAgICAv" + "LyB3b24ndCBsZXQgdXMgaGF2ZSBtb3JlLgogICAgICAgIGlmICh0aGlzLnVuY29tcHJlc3NlZFNpemUgPT09IHV0aWxzLk1BWF9WQUxVRV8zMkJJVFMpIHsKICAgICAgICAgICAgdGhpcy51bmNvbXByZXNzZWRT" + "aXplID0gZXh0cmFSZWFkZXIucmVhZEludCg4KTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuY29tcHJlc3NlZFNpemUgPT09IHV0aWxzLk1BWF9WQUxVRV8zMkJJVFMpIHsKICAgICAgICAgICAgdGhpcy5j" + "b21wcmVzc2VkU2l6ZSA9IGV4dHJhUmVhZGVyLnJlYWRJbnQoOCk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0ID09PSB1dGlscy5NQVhfVkFMVUVfMzJCSVRTKSB7CiAgICAg" + "ICAgICAgIHRoaXMubG9jYWxIZWFkZXJPZmZzZXQgPSBleHRyYVJlYWRlci5yZWFkSW50KDgpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5kaXNrTnVtYmVyU3RhcnQgPT09IHV0aWxzLk1BWF9WQUxVRV8z" + "MkJJVFMpIHsKICAgICAgICAgICAgdGhpcy5kaXNrTnVtYmVyU3RhcnQgPSBleHRyYVJlYWRlci5yZWFkSW50KDQpOwogICAgICAgIH0KICAgIH0sCiAgICAvKioKICAgICAqIFJlYWQgdGhlIGNlbnRyYWwgcGFy" + "dCBvZiBhIHppcCBmaWxlIGFuZCBhZGQgdGhlIGluZm8gaW4gdGhpcyBvYmplY3QuCiAgICAgKiBAcGFyYW0ge0RhdGFSZWFkZXJ9IHJlYWRlciB0aGUgcmVhZGVyIHRvIHVzZS4KICAgICAqLwogICAgcmVhZEV4" + "dHJhRmllbGRzOiBmdW5jdGlvbihyZWFkZXIpIHsKICAgICAgICB2YXIgZW5kID0gcmVhZGVyLmluZGV4ICsgdGhpcy5leHRyYUZpZWxkc0xlbmd0aCwKICAgICAgICAgICAgZXh0cmFGaWVsZElkLAogICAgICAg" + "ICAgICBleHRyYUZpZWxkTGVuZ3RoLAogICAgICAgICAgICBleHRyYUZpZWxkVmFsdWU7CgogICAgICAgIGlmICghdGhpcy5leHRyYUZpZWxkcykgewogICAgICAgICAgICB0aGlzLmV4dHJhRmllbGRzID0ge307" + "CiAgICAgICAgfQoKICAgICAgICB3aGlsZSAocmVhZGVyLmluZGV4ICsgNCA8IGVuZCkgewogICAgICAgICAgICBleHRyYUZpZWxkSWQgPSByZWFkZXIucmVhZEludCgyKTsKICAgICAgICAgICAgZXh0cmFGaWVs" + "ZExlbmd0aCA9IHJlYWRlci5yZWFkSW50KDIpOwogICAgICAgICAgICBleHRyYUZpZWxkVmFsdWUgPSByZWFkZXIucmVhZERhdGEoZXh0cmFGaWVsZExlbmd0aCk7CgogICAgICAgICAgICB0aGlzLmV4dHJhRmll" + "bGRzW2V4dHJhRmllbGRJZF0gPSB7CiAgICAgICAgICAgICAgICBpZDogZXh0cmFGaWVsZElkLAogICAgICAgICAgICAgICAgbGVuZ3RoOiBleHRyYUZpZWxkTGVuZ3RoLAogICAgICAgICAgICAgICAgdmFsdWU6" + "IGV4dHJhRmllbGRWYWx1ZQogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgcmVhZGVyLnNldEluZGV4KGVuZCk7CiAgICB9LAogICAgLyoqCiAgICAgKiBBcHBseSBhbiBVVEY4IHRyYW5zZm9ybWF0" + "aW9uIGlmIG5lZWRlZC4KICAgICAqLwogICAgaGFuZGxlVVRGODogZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGRlY29kZVBhcmFtVHlwZSA9IHN1cHBvcnQudWludDhhcnJheSA/ICJ1aW50OGFycmF5IiA6ICJh" + "cnJheSI7CiAgICAgICAgaWYgKHRoaXMudXNlVVRGOCgpKSB7CiAgICAgICAgICAgIHRoaXMuZmlsZU5hbWVTdHIgPSB1dGY4LnV0ZjhkZWNvZGUodGhpcy5maWxlTmFtZSk7CiAgICAgICAgICAgIHRoaXMuZmls" + "ZUNvbW1lbnRTdHIgPSB1dGY4LnV0ZjhkZWNvZGUodGhpcy5maWxlQ29tbWVudCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIHVwYXRoID0gdGhpcy5maW5kRXh0cmFGaWVsZFVuaWNvZGVQYXRo" + "KCk7CiAgICAgICAgICAgIGlmICh1cGF0aCAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgdGhpcy5maWxlTmFtZVN0ciA9IHVwYXRoOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8g" + "QVNDSUkgdGV4dCBvciB1bnN1cHBvcnRlZCBjb2RlIHBhZ2UKICAgICAgICAgICAgICAgIHZhciBmaWxlTmFtZUJ5dGVBcnJheSA9ICB1dGlscy50cmFuc2Zvcm1UbyhkZWNvZGVQYXJhbVR5cGUsIHRoaXMuZmls" + "ZU5hbWUpOwogICAgICAgICAgICAgICAgdGhpcy5maWxlTmFtZVN0ciA9IHRoaXMubG9hZE9wdGlvbnMuZGVjb2RlRmlsZU5hbWUoZmlsZU5hbWVCeXRlQXJyYXkpOwogICAgICAgICAgICB9CgogICAgICAgICAg" + "ICB2YXIgdWNvbW1lbnQgPSB0aGlzLmZpbmRFeHRyYUZpZWxkVW5pY29kZUNvbW1lbnQoKTsKICAgICAgICAgICAgaWYgKHVjb21tZW50ICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICB0aGlzLmZpbGVDb21t" + "ZW50U3RyID0gdWNvbW1lbnQ7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBBU0NJSSB0ZXh0IG9yIHVuc3VwcG9ydGVkIGNvZGUgcGFnZQogICAgICAgICAgICAgICAgdmFyIGNvbW1l" + "bnRCeXRlQXJyYXkgPSAgdXRpbHMudHJhbnNmb3JtVG8oZGVjb2RlUGFyYW1UeXBlLCB0aGlzLmZpbGVDb21tZW50KTsKICAgICAgICAgICAgICAgIHRoaXMuZmlsZUNvbW1lbnRTdHIgPSB0aGlzLmxvYWRPcHRp" + "b25zLmRlY29kZUZpbGVOYW1lKGNvbW1lbnRCeXRlQXJyYXkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSwKCiAgICAvKioKICAgICAqIEZpbmQgdGhlIHVuaWNvZGUgcGF0aCBkZWNsYXJlZCBpbiB0" + "aGUgZXh0cmEgZmllbGQsIGlmIGFueS4KICAgICAqIEByZXR1cm4ge1N0cmluZ30gdGhlIHVuaWNvZGUgcGF0aCwgbnVsbCBvdGhlcndpc2UuCiAgICAgKi8KICAgIGZpbmRFeHRyYUZpZWxkVW5pY29kZVBhdGg6" + "IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciB1cGF0aEZpZWxkID0gdGhpcy5leHRyYUZpZWxkc1sweDcwNzVdOwogICAgICAgIGlmICh1cGF0aEZpZWxkKSB7CiAgICAgICAgICAgIHZhciBleHRyYVJlYWRlciA9" + "IHJlYWRlckZvcih1cGF0aEZpZWxkLnZhbHVlKTsKCiAgICAgICAgICAgIC8vIHdyb25nIHZlcnNpb24KICAgICAgICAgICAgaWYgKGV4dHJhUmVhZGVyLnJlYWRJbnQoMSkgIT09IDEpIHsKICAgICAgICAgICAg" + "ICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyB0aGUgY3JjIG9mIHRoZSBmaWxlbmFtZSBjaGFuZ2VkLCB0aGlzIGZpZWxkIGlzIG91dCBvZiBkYXRlLgogICAgICAgICAgICBp" + "ZiAoY3JjMzJmbih0aGlzLmZpbGVOYW1lKSAhPT0gZXh0cmFSZWFkZXIucmVhZEludCg0KSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiB1" + "dGY4LnV0ZjhkZWNvZGUoZXh0cmFSZWFkZXIucmVhZERhdGEodXBhdGhGaWVsZC5sZW5ndGggLSA1KSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfSwKCiAgICAvKioKICAgICAqIEZpbmQg" + "dGhlIHVuaWNvZGUgY29tbWVudCBkZWNsYXJlZCBpbiB0aGUgZXh0cmEgZmllbGQsIGlmIGFueS4KICAgICAqIEByZXR1cm4ge1N0cmluZ30gdGhlIHVuaWNvZGUgY29tbWVudCwgbnVsbCBvdGhlcndpc2UuCiAg" + "ICAgKi8KICAgIGZpbmRFeHRyYUZpZWxkVW5pY29kZUNvbW1lbnQ6IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciB1Y29tbWVudEZpZWxkID0gdGhpcy5leHRyYUZpZWxkc1sweDYzNzVdOwogICAgICAgIGlmICh1" + "Y29tbWVudEZpZWxkKSB7CiAgICAgICAgICAgIHZhciBleHRyYVJlYWRlciA9IHJlYWRlckZvcih1Y29tbWVudEZpZWxkLnZhbHVlKTsKCiAgICAgICAgICAgIC8vIHdyb25nIHZlcnNpb24KICAgICAgICAgICAg" + "aWYgKGV4dHJhUmVhZGVyLnJlYWRJbnQoMSkgIT09IDEpIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyB0aGUgY3JjIG9mIHRoZSBjb21tZW50IGNo" + "YW5nZWQsIHRoaXMgZmllbGQgaXMgb3V0IG9mIGRhdGUuCiAgICAgICAgICAgIGlmIChjcmMzMmZuKHRoaXMuZmlsZUNvbW1lbnQpICE9PSBleHRyYVJlYWRlci5yZWFkSW50KDQpKSB7CiAgICAgICAgICAgICAg" + "ICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHV0ZjgudXRmOGRlY29kZShleHRyYVJlYWRlci5yZWFkRGF0YSh1Y29tbWVudEZpZWxkLmxlbmd0aCAtIDUpKTsKICAgICAg" + "ICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9Cn07Cm1vZHVsZS5leHBvcnRzID0gWmlwRW50cnk7Cgp9LHsiLi9jb21wcmVzc2VkT2JqZWN0IjoyLCIuL2NvbXByZXNzaW9ucyI6MywiLi9jcmMzMiI6NCwi" + "Li9yZWFkZXIvcmVhZGVyRm9yIjoyMiwiLi9zdXBwb3J0IjozMCwiLi91dGY4IjozMSwiLi91dGlscyI6MzJ9XSwzNTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsKCnZh" + "ciBTdHJlYW1IZWxwZXIgPSByZXF1aXJlKCcuL3N0cmVhbS9TdHJlYW1IZWxwZXInKTsKdmFyIERhdGFXb3JrZXIgPSByZXF1aXJlKCcuL3N0cmVhbS9EYXRhV29ya2VyJyk7CnZhciB1dGY4ID0gcmVxdWlyZSgn" + "Li91dGY4Jyk7CnZhciBDb21wcmVzc2VkT2JqZWN0ID0gcmVxdWlyZSgnLi9jb21wcmVzc2VkT2JqZWN0Jyk7CnZhciBHZW5lcmljV29ya2VyID0gcmVxdWlyZSgnLi9zdHJlYW0vR2VuZXJpY1dvcmtlcicpOwoK" + "LyoqCiAqIEEgc2ltcGxlIG9iamVjdCByZXByZXNlbnRpbmcgYSBmaWxlIGluIHRoZSB6aXAgZmlsZS4KICogQGNvbnN0cnVjdG9yCiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBmaWxl" + "CiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5QnVmZmVyfFVpbnQ4QXJyYXl8QnVmZmVyfSBkYXRhIHRoZSBkYXRhCiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIHRoZSBvcHRpb25zIG9mIHRoZSBmaWxlCiAqLwp2" + "YXIgWmlwT2JqZWN0ID0gZnVuY3Rpb24obmFtZSwgZGF0YSwgb3B0aW9ucykgewogICAgdGhpcy5uYW1lID0gbmFtZTsKICAgIHRoaXMuZGlyID0gb3B0aW9ucy5kaXI7CiAgICB0aGlzLmRhdGUgPSBvcHRpb25z" + "LmRhdGU7CiAgICB0aGlzLmNvbW1lbnQgPSBvcHRpb25zLmNvbW1lbnQ7CiAgICB0aGlzLnVuaXhQZXJtaXNzaW9ucyA9IG9wdGlvbnMudW5peFBlcm1pc3Npb25zOwogICAgdGhpcy5kb3NQZXJtaXNzaW9ucyA9" + "IG9wdGlvbnMuZG9zUGVybWlzc2lvbnM7CgogICAgdGhpcy5fZGF0YSA9IGRhdGE7CiAgICB0aGlzLl9kYXRhQmluYXJ5ID0gb3B0aW9ucy5iaW5hcnk7CiAgICAvLyBrZWVwIG9ubHkgdGhlIGNvbXByZXNzaW9u" + "CiAgICB0aGlzLm9wdGlvbnMgPSB7CiAgICAgICAgY29tcHJlc3Npb24gOiBvcHRpb25zLmNvbXByZXNzaW9uLAogICAgICAgIGNvbXByZXNzaW9uT3B0aW9ucyA6IG9wdGlvbnMuY29tcHJlc3Npb25PcHRpb25z" + "CiAgICB9Owp9OwoKWmlwT2JqZWN0LnByb3RvdHlwZSA9IHsKICAgIC8qKgogICAgICogQ3JlYXRlIGFuIGludGVybmFsIHN0cmVhbSBmb3IgdGhlIGNvbnRlbnQgb2YgdGhpcyBvYmplY3QuCiAgICAgKiBAcGFy" + "YW0ge1N0cmluZ30gdHlwZSB0aGUgdHlwZSBvZiBlYWNoIGNodW5rLgogICAgICogQHJldHVybiBTdHJlYW1IZWxwZXIgdGhlIHN0cmVhbS4KICAgICAqLwogICAgaW50ZXJuYWxTdHJlYW06IGZ1bmN0aW9uICh0" + "eXBlKSB7CiAgICAgICAgdmFyIHJlc3VsdCA9IG51bGwsIG91dHB1dFR5cGUgPSAic3RyaW5nIjsKICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAoIXR5cGUpIHsKICAgICAgICAgICAgICAgIHRocm93IG5l" + "dyBFcnJvcigiTm8gb3V0cHV0IHR5cGUgc3BlY2lmaWVkLiIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG91dHB1dFR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgIHZhciBhc2tVbmlj" + "b2RlU3RyaW5nID0gb3V0cHV0VHlwZSA9PT0gInN0cmluZyIgfHwgb3V0cHV0VHlwZSA9PT0gInRleHQiOwogICAgICAgICAgICBpZiAob3V0cHV0VHlwZSA9PT0gImJpbmFyeXN0cmluZyIgfHwgb3V0cHV0VHlw" + "ZSA9PT0gInRleHQiKSB7CiAgICAgICAgICAgICAgICBvdXRwdXRUeXBlID0gInN0cmluZyI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5fZGVjb21wcmVzc1dvcmtlcigpOwoKICAg" + "ICAgICAgICAgdmFyIGlzVW5pY29kZVN0cmluZyA9ICF0aGlzLl9kYXRhQmluYXJ5OwoKICAgICAgICAgICAgaWYgKGlzVW5pY29kZVN0cmluZyAmJiAhYXNrVW5pY29kZVN0cmluZykgewogICAgICAgICAgICAg" + "ICAgcmVzdWx0ID0gcmVzdWx0LnBpcGUobmV3IHV0ZjguVXRmOEVuY29kZVdvcmtlcigpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIWlzVW5pY29kZVN0cmluZyAmJiBhc2tVbmljb2RlU3RyaW5n" + "KSB7CiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQucGlwZShuZXcgdXRmOC5VdGY4RGVjb2RlV29ya2VyKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICBy" + "ZXN1bHQgPSBuZXcgR2VuZXJpY1dvcmtlcigiZXJyb3IiKTsKICAgICAgICAgICAgcmVzdWx0LmVycm9yKGUpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW1IZWxwZXIocmVzdWx0LCBvdXRw" + "dXRUeXBlLCAiIik7CiAgICB9LAoKICAgIC8qKgogICAgICogUHJlcGFyZSB0aGUgY29udGVudCBpbiB0aGUgYXNrZWQgdHlwZS4KICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIHRoZSB0eXBlIG9mIHRoZSBy" + "ZXN1bHQuCiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvblVwZGF0ZSBhIGZ1bmN0aW9uIHRvIGNhbGwgb24gZWFjaCBpbnRlcm5hbCB1cGRhdGUuCiAgICAgKiBAcmV0dXJuIFByb21pc2UgdGhlIHByb21pc2Ug" + "b2YgdGhlIHJlc3VsdC4KICAgICAqLwogICAgYXN5bmM6IGZ1bmN0aW9uICh0eXBlLCBvblVwZGF0ZSkgewogICAgICAgIHJldHVybiB0aGlzLmludGVybmFsU3RyZWFtKHR5cGUpLmFjY3VtdWxhdGUob25VcGRh" + "dGUpOwogICAgfSwKCiAgICAvKioKICAgICAqIFByZXBhcmUgdGhlIGNvbnRlbnQgYXMgYSBub2RlanMgc3RyZWFtLgogICAgICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgdGhlIHR5cGUgb2YgZWFjaCBjaHVuay4K" + "ICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG9uVXBkYXRlIGEgZnVuY3Rpb24gdG8gY2FsbCBvbiBlYWNoIGludGVybmFsIHVwZGF0ZS4KICAgICAqIEByZXR1cm4gU3RyZWFtIHRoZSBzdHJlYW0uCiAgICAgKi8K" + "ICAgIG5vZGVTdHJlYW06IGZ1bmN0aW9uICh0eXBlLCBvblVwZGF0ZSkgewogICAgICAgIHJldHVybiB0aGlzLmludGVybmFsU3RyZWFtKHR5cGUgfHwgIm5vZGVidWZmZXIiKS50b05vZGVqc1N0cmVhbShvblVw" + "ZGF0ZSk7CiAgICB9LAoKICAgIC8qKgogICAgICogUmV0dXJuIGEgd29ya2VyIGZvciB0aGUgY29tcHJlc3NlZCBjb250ZW50LgogICAgICogQHByaXZhdGUKICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb21wcmVz" + "c2lvbiB0aGUgY29tcHJlc3Npb24gb2JqZWN0IHRvIHVzZS4KICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb21wcmVzc2lvbk9wdGlvbnMgdGhlIG9wdGlvbnMgdG8gdXNlIHdoZW4gY29tcHJlc3NpbmcuCiAgICAg" + "KiBAcmV0dXJuIFdvcmtlciB0aGUgd29ya2VyLgogICAgICovCiAgICBfY29tcHJlc3NXb3JrZXI6IGZ1bmN0aW9uIChjb21wcmVzc2lvbiwgY29tcHJlc3Npb25PcHRpb25zKSB7CiAgICAgICAgaWYgKAogICAg" + "ICAgICAgICB0aGlzLl9kYXRhIGluc3RhbmNlb2YgQ29tcHJlc3NlZE9iamVjdCAmJgogICAgICAgICAgICB0aGlzLl9kYXRhLmNvbXByZXNzaW9uLm1hZ2ljID09PSBjb21wcmVzc2lvbi5tYWdpYwogICAgICAg" + "ICkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5fZGF0YS5nZXRDb21wcmVzc2VkV29ya2VyKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2RlY29tcHJlc3NXb3Jr" + "ZXIoKTsKICAgICAgICAgICAgaWYoIXRoaXMuX2RhdGFCaW5hcnkpIHsKICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5waXBlKG5ldyB1dGY4LlV0ZjhFbmNvZGVXb3JrZXIoKSk7CiAgICAgICAgICAg" + "IH0KICAgICAgICAgICAgcmV0dXJuIENvbXByZXNzZWRPYmplY3QuY3JlYXRlV29ya2VyRnJvbShyZXN1bHQsIGNvbXByZXNzaW9uLCBjb21wcmVzc2lvbk9wdGlvbnMpOwogICAgICAgIH0KICAgIH0sCiAgICAv" + "KioKICAgICAqIFJldHVybiBhIHdvcmtlciBmb3IgdGhlIGRlY29tcHJlc3NlZCBjb250ZW50LgogICAgICogQHByaXZhdGUKICAgICAqIEByZXR1cm4gV29ya2VyIHRoZSB3b3JrZXIuCiAgICAgKi8KICAgIF9k" + "ZWNvbXByZXNzV29ya2VyIDogZnVuY3Rpb24gKCkgewogICAgICAgIGlmICh0aGlzLl9kYXRhIGluc3RhbmNlb2YgQ29tcHJlc3NlZE9iamVjdCkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5fZGF0YS5nZXRD" + "b250ZW50V29ya2VyKCk7CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9kYXRhIGluc3RhbmNlb2YgR2VuZXJpY1dvcmtlcikgewogICAgICAgICAgICByZXR1cm4gdGhpcy5fZGF0YTsKICAgICAgICB9IGVsc2Ug" + "ewogICAgICAgICAgICByZXR1cm4gbmV3IERhdGFXb3JrZXIodGhpcy5fZGF0YSk7CiAgICAgICAgfQogICAgfQp9OwoKdmFyIHJlbW92ZWRNZXRob2RzID0gWyJhc1RleHQiLCAiYXNCaW5hcnkiLCAiYXNOb2Rl" + "QnVmZmVyIiwgImFzVWludDhBcnJheSIsICJhc0FycmF5QnVmZmVyIl07CnZhciByZW1vdmVkRm4gPSBmdW5jdGlvbiAoKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIlRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbW92" + "ZWQgaW4gSlNaaXAgMy4wLCBwbGVhc2UgY2hlY2sgdGhlIHVwZ3JhZGUgZ3VpZGUuIik7Cn07Cgpmb3IodmFyIGkgPSAwOyBpIDwgcmVtb3ZlZE1ldGhvZHMubGVuZ3RoOyBpKyspIHsKICAgIFppcE9iamVjdC5w" + "cm90b3R5cGVbcmVtb3ZlZE1ldGhvZHNbaV1dID0gcmVtb3ZlZEZuOwp9Cm1vZHVsZS5leHBvcnRzID0gWmlwT2JqZWN0OwoKfSx7Ii4vY29tcHJlc3NlZE9iamVjdCI6MiwiLi9zdHJlYW0vRGF0YVdvcmtlciI6" + "MjcsIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXIiOjI4LCIuL3N0cmVhbS9TdHJlYW1IZWxwZXIiOjI5LCIuL3V0ZjgiOjMxfV0sMzY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewooZnVuY3Rpb24g" + "KGdsb2JhbCl7Cid1c2Ugc3RyaWN0JzsKdmFyIE11dGF0aW9uID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7Cgp2YXIgc2NoZWR1bGVEcmFpbjsKCnsK" + "ICBpZiAoTXV0YXRpb24pIHsKICAgIHZhciBjYWxsZWQgPSAwOwogICAgdmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uKG5leHRUaWNrKTsKICAgIHZhciBlbGVtZW50ID0gZ2xvYmFsLmRvY3VtZW50LmNyZWF0" + "ZVRleHROb2RlKCcnKTsKICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgewogICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlCiAgICB9KTsKICAgIHNjaGVkdWxlRHJhaW4gPSBmdW5jdGlvbiAoKSB7CiAgICAg" + "IGVsZW1lbnQuZGF0YSA9IChjYWxsZWQgPSArK2NhbGxlZCAlIDIpOwogICAgfTsKICB9IGVsc2UgaWYgKCFnbG9iYWwuc2V0SW1tZWRpYXRlICYmIHR5cGVvZiBnbG9iYWwuTWVzc2FnZUNoYW5uZWwgIT09ICd1" + "bmRlZmluZWQnKSB7CiAgICB2YXIgY2hhbm5lbCA9IG5ldyBnbG9iYWwuTWVzc2FnZUNoYW5uZWwoKTsKICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbmV4dFRpY2s7CiAgICBzY2hlZHVsZURyYWluID0g" + "ZnVuY3Rpb24gKCkgewogICAgICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKDApOwogICAgfTsKICB9IGVsc2UgaWYgKCdkb2N1bWVudCcgaW4gZ2xvYmFsICYmICdvbnJlYWR5c3RhdGVjaGFuZ2UnIGluIGds" + "b2JhbC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKSkgewogICAgc2NoZWR1bGVEcmFpbiA9IGZ1bmN0aW9uICgpIHsKCiAgICAgIC8vIENyZWF0ZSBhIDxzY3JpcHQ+IGVsZW1lbnQ7IGl0cyByZWFk" + "eXN0YXRlY2hhbmdlIGV2ZW50IHdpbGwgYmUgZmlyZWQgYXN5bmNocm9ub3VzbHkgb25jZSBpdCBpcyBpbnNlcnRlZAogICAgICAvLyBpbnRvIHRoZSBkb2N1bWVudC4gRG8gc28sIHRodXMgcXVldWluZyB1cCB0" + "aGUgdGFzay4gUmVtZW1iZXIgdG8gY2xlYW4gdXAgb25jZSBpdCdzIGJlZW4gY2FsbGVkLgogICAgICB2YXIgc2NyaXB0RWwgPSBnbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CiAgICAg" + "IHNjcmlwdEVsLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICBuZXh0VGljaygpOwoKICAgICAgICBzY3JpcHRFbC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsOwogICAgICAgIHNj" + "cmlwdEVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2NyaXB0RWwpOwogICAgICAgIHNjcmlwdEVsID0gbnVsbDsKICAgICAgfTsKICAgICAgZ2xvYmFsLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hcHBlbmRD" + "aGlsZChzY3JpcHRFbCk7CiAgICB9OwogIH0gZWxzZSB7CiAgICBzY2hlZHVsZURyYWluID0gZnVuY3Rpb24gKCkgewogICAgICBzZXRUaW1lb3V0KG5leHRUaWNrLCAwKTsKICAgIH07CiAgfQp9Cgp2YXIgZHJh" + "aW5pbmc7CnZhciBxdWV1ZSA9IFtdOwovL25hbWVkIG5leHRUaWNrIGZvciBsZXNzIGNvbmZ1c2luZyBzdGFjayB0cmFjZXMKZnVuY3Rpb24gbmV4dFRpY2soKSB7CiAgZHJhaW5pbmcgPSB0cnVlOwogIHZhciBp" + "LCBvbGRRdWV1ZTsKICB2YXIgbGVuID0gcXVldWUubGVuZ3RoOwogIHdoaWxlIChsZW4pIHsKICAgIG9sZFF1ZXVlID0gcXVldWU7CiAgICBxdWV1ZSA9IFtdOwogICAgaSA9IC0xOwogICAgd2hpbGUgKCsraSA8" + "IGxlbikgewogICAgICBvbGRRdWV1ZVtpXSgpOwogICAgfQogICAgbGVuID0gcXVldWUubGVuZ3RoOwogIH0KICBkcmFpbmluZyA9IGZhbHNlOwp9Cgptb2R1bGUuZXhwb3J0cyA9IGltbWVkaWF0ZTsKZnVuY3Rp" + "b24gaW1tZWRpYXRlKHRhc2spIHsKICBpZiAocXVldWUucHVzaCh0YXNrKSA9PT0gMSAmJiAhZHJhaW5pbmcpIHsKICAgIHNjaGVkdWxlRHJhaW4oKTsKICB9Cn0KCn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFs" + "ICE9PSAidW5kZWZpbmVkIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSAidW5kZWZpbmVkIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdyA6IHt9KQp9LHt9XSwzNzpb" + "ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsKdmFyIGltbWVkaWF0ZSA9IHJlcXVpcmUoJ2ltbWVkaWF0ZScpOwoKLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8KZnVuY3Rp" + "b24gSU5URVJOQUwoKSB7fQoKdmFyIGhhbmRsZXJzID0ge307Cgp2YXIgUkVKRUNURUQgPSBbJ1JFSkVDVEVEJ107CnZhciBGVUxGSUxMRUQgPSBbJ0ZVTEZJTExFRCddOwp2YXIgUEVORElORyA9IFsnUEVORElO" + "RyddOwoKbW9kdWxlLmV4cG9ydHMgPSBQcm9taXNlOwoKZnVuY3Rpb24gUHJvbWlzZShyZXNvbHZlcikgewogIGlmICh0eXBlb2YgcmVzb2x2ZXIgIT09ICdmdW5jdGlvbicpIHsKICAgIHRocm93IG5ldyBUeXBl" + "RXJyb3IoJ3Jlc29sdmVyIG11c3QgYmUgYSBmdW5jdGlvbicpOwogIH0KICB0aGlzLnN0YXRlID0gUEVORElORzsKICB0aGlzLnF1ZXVlID0gW107CiAgdGhpcy5vdXRjb21lID0gdm9pZCAwOwogIGlmIChyZXNv" + "bHZlciAhPT0gSU5URVJOQUwpIHsKICAgIHNhZmVseVJlc29sdmVUaGVuYWJsZSh0aGlzLCByZXNvbHZlcik7CiAgfQp9CgpQcm9taXNlLnByb3RvdHlwZVsiZmluYWxseSJdID0gZnVuY3Rpb24gKGNhbGxiYWNr" + "KSB7CiAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykgewogICAgcmV0dXJuIHRoaXM7CiAgfQogIHZhciBwID0gdGhpcy5jb25zdHJ1Y3RvcjsKICByZXR1cm4gdGhpcy50aGVuKHJlc29sdmUs" + "IHJlamVjdCk7CgogIGZ1bmN0aW9uIHJlc29sdmUodmFsdWUpIHsKICAgIGZ1bmN0aW9uIHllcyAoKSB7CiAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KICAgIHJldHVybiBwLnJlc29sdmUoY2FsbGJhY2soKSku" + "dGhlbih5ZXMpOwogIH0KICBmdW5jdGlvbiByZWplY3QocmVhc29uKSB7CiAgICBmdW5jdGlvbiBubyAoKSB7CiAgICAgIHRocm93IHJlYXNvbjsKICAgIH0KICAgIHJldHVybiBwLnJlc29sdmUoY2FsbGJhY2so" + "KSkudGhlbihubyk7CiAgfQp9OwpQcm9taXNlLnByb3RvdHlwZVsiY2F0Y2giXSA9IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7CiAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGVkKTsKfTsKUHJvbWlz" + "ZS5wcm90b3R5cGUudGhlbiA9IGZ1bmN0aW9uIChvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkgewogIGlmICh0eXBlb2Ygb25GdWxmaWxsZWQgIT09ICdmdW5jdGlvbicgJiYgdGhpcy5zdGF0ZSA9PT0gRlVMRklM" + "TEVEIHx8CiAgICB0eXBlb2Ygb25SZWplY3RlZCAhPT0gJ2Z1bmN0aW9uJyAmJiB0aGlzLnN0YXRlID09PSBSRUpFQ1RFRCkgewogICAgcmV0dXJuIHRoaXM7CiAgfQogIHZhciBwcm9taXNlID0gbmV3IHRoaXMu" + "Y29uc3RydWN0b3IoSU5URVJOQUwpOwogIGlmICh0aGlzLnN0YXRlICE9PSBQRU5ESU5HKSB7CiAgICB2YXIgcmVzb2x2ZXIgPSB0aGlzLnN0YXRlID09PSBGVUxGSUxMRUQgPyBvbkZ1bGZpbGxlZCA6IG9uUmVq" + "ZWN0ZWQ7CiAgICB1bndyYXAocHJvbWlzZSwgcmVzb2x2ZXIsIHRoaXMub3V0Y29tZSk7CiAgfSBlbHNlIHsKICAgIHRoaXMucXVldWUucHVzaChuZXcgUXVldWVJdGVtKHByb21pc2UsIG9uRnVsZmlsbGVkLCBv" + "blJlamVjdGVkKSk7CiAgfQoKICByZXR1cm4gcHJvbWlzZTsKfTsKZnVuY3Rpb24gUXVldWVJdGVtKHByb21pc2UsIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7CiAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTsK" + "ICBpZiAodHlwZW9mIG9uRnVsZmlsbGVkID09PSAnZnVuY3Rpb24nKSB7CiAgICB0aGlzLm9uRnVsZmlsbGVkID0gb25GdWxmaWxsZWQ7CiAgICB0aGlzLmNhbGxGdWxmaWxsZWQgPSB0aGlzLm90aGVyQ2FsbEZ1" + "bGZpbGxlZDsKICB9CiAgaWYgKHR5cGVvZiBvblJlamVjdGVkID09PSAnZnVuY3Rpb24nKSB7CiAgICB0aGlzLm9uUmVqZWN0ZWQgPSBvblJlamVjdGVkOwogICAgdGhpcy5jYWxsUmVqZWN0ZWQgPSB0aGlzLm90" + "aGVyQ2FsbFJlamVjdGVkOwogIH0KfQpRdWV1ZUl0ZW0ucHJvdG90eXBlLmNhbGxGdWxmaWxsZWQgPSBmdW5jdGlvbiAodmFsdWUpIHsKICBoYW5kbGVycy5yZXNvbHZlKHRoaXMucHJvbWlzZSwgdmFsdWUpOwp9" + "OwpRdWV1ZUl0ZW0ucHJvdG90eXBlLm90aGVyQ2FsbEZ1bGZpbGxlZCA9IGZ1bmN0aW9uICh2YWx1ZSkgewogIHVud3JhcCh0aGlzLnByb21pc2UsIHRoaXMub25GdWxmaWxsZWQsIHZhbHVlKTsKfTsKUXVldWVJ" + "dGVtLnByb3RvdHlwZS5jYWxsUmVqZWN0ZWQgPSBmdW5jdGlvbiAodmFsdWUpIHsKICBoYW5kbGVycy5yZWplY3QodGhpcy5wcm9taXNlLCB2YWx1ZSk7Cn07ClF1ZXVlSXRlbS5wcm90b3R5cGUub3RoZXJDYWxs" + "UmVqZWN0ZWQgPSBmdW5jdGlvbiAodmFsdWUpIHsKICB1bndyYXAodGhpcy5wcm9taXNlLCB0aGlzLm9uUmVqZWN0ZWQsIHZhbHVlKTsKfTsKCmZ1bmN0aW9uIHVud3JhcChwcm9taXNlLCBmdW5jLCB2YWx1ZSkg" + "ewogIGltbWVkaWF0ZShmdW5jdGlvbiAoKSB7CiAgICB2YXIgcmV0dXJuVmFsdWU7CiAgICB0cnkgewogICAgICByZXR1cm5WYWx1ZSA9IGZ1bmModmFsdWUpOwogICAgfSBjYXRjaCAoZSkgewogICAgICByZXR1" + "cm4gaGFuZGxlcnMucmVqZWN0KHByb21pc2UsIGUpOwogICAgfQogICAgaWYgKHJldHVyblZhbHVlID09PSBwcm9taXNlKSB7CiAgICAgIGhhbmRsZXJzLnJlamVjdChwcm9taXNlLCBuZXcgVHlwZUVycm9yKCdD" + "YW5ub3QgcmVzb2x2ZSBwcm9taXNlIHdpdGggaXRzZWxmJykpOwogICAgfSBlbHNlIHsKICAgICAgaGFuZGxlcnMucmVzb2x2ZShwcm9taXNlLCByZXR1cm5WYWx1ZSk7CiAgICB9CiAgfSk7Cn0KCmhhbmRsZXJz" + "LnJlc29sdmUgPSBmdW5jdGlvbiAoc2VsZiwgdmFsdWUpIHsKICB2YXIgcmVzdWx0ID0gdHJ5Q2F0Y2goZ2V0VGhlbiwgdmFsdWUpOwogIGlmIChyZXN1bHQuc3RhdHVzID09PSAnZXJyb3InKSB7CiAgICByZXR1" + "cm4gaGFuZGxlcnMucmVqZWN0KHNlbGYsIHJlc3VsdC52YWx1ZSk7CiAgfQogIHZhciB0aGVuYWJsZSA9IHJlc3VsdC52YWx1ZTsKCiAgaWYgKHRoZW5hYmxlKSB7CiAgICBzYWZlbHlSZXNvbHZlVGhlbmFibGUo" + "c2VsZiwgdGhlbmFibGUpOwogIH0gZWxzZSB7CiAgICBzZWxmLnN0YXRlID0gRlVMRklMTEVEOwogICAgc2VsZi5vdXRjb21lID0gdmFsdWU7CiAgICB2YXIgaSA9IC0xOwogICAgdmFyIGxlbiA9IHNlbGYucXVl" + "dWUubGVuZ3RoOwogICAgd2hpbGUgKCsraSA8IGxlbikgewogICAgICBzZWxmLnF1ZXVlW2ldLmNhbGxGdWxmaWxsZWQodmFsdWUpOwogICAgfQogIH0KICByZXR1cm4gc2VsZjsKfTsKaGFuZGxlcnMucmVqZWN0" + "ID0gZnVuY3Rpb24gKHNlbGYsIGVycm9yKSB7CiAgc2VsZi5zdGF0ZSA9IFJFSkVDVEVEOwogIHNlbGYub3V0Y29tZSA9IGVycm9yOwogIHZhciBpID0gLTE7CiAgdmFyIGxlbiA9IHNlbGYucXVldWUubGVuZ3Ro" + "OwogIHdoaWxlICgrK2kgPCBsZW4pIHsKICAgIHNlbGYucXVldWVbaV0uY2FsbFJlamVjdGVkKGVycm9yKTsKICB9CiAgcmV0dXJuIHNlbGY7Cn07CgpmdW5jdGlvbiBnZXRUaGVuKG9iaikgewogIC8vIE1ha2Ug" + "c3VyZSB3ZSBvbmx5IGFjY2VzcyB0aGUgYWNjZXNzb3Igb25jZSBhcyByZXF1aXJlZCBieSB0aGUgc3BlYwogIHZhciB0aGVuID0gb2JqICYmIG9iai50aGVuOwogIGlmIChvYmogJiYgKHR5cGVvZiBvYmogPT09" + "ICdvYmplY3QnIHx8IHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpICYmIHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7CiAgICByZXR1cm4gZnVuY3Rpb24gYXBweVRoZW4oKSB7CiAgICAgIHRoZW4uYXBw" + "bHkob2JqLCBhcmd1bWVudHMpOwogICAgfTsKICB9Cn0KCmZ1bmN0aW9uIHNhZmVseVJlc29sdmVUaGVuYWJsZShzZWxmLCB0aGVuYWJsZSkgewogIC8vIEVpdGhlciBmdWxmaWxsLCByZWplY3Qgb3IgcmVqZWN0" + "IHdpdGggZXJyb3IKICB2YXIgY2FsbGVkID0gZmFsc2U7CiAgZnVuY3Rpb24gb25FcnJvcih2YWx1ZSkgewogICAgaWYgKGNhbGxlZCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBjYWxsZWQgPSB0cnVlOwog" + "ICAgaGFuZGxlcnMucmVqZWN0KHNlbGYsIHZhbHVlKTsKICB9CgogIGZ1bmN0aW9uIG9uU3VjY2Vzcyh2YWx1ZSkgewogICAgaWYgKGNhbGxlZCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBjYWxsZWQgPSB0" + "cnVlOwogICAgaGFuZGxlcnMucmVzb2x2ZShzZWxmLCB2YWx1ZSk7CiAgfQoKICBmdW5jdGlvbiB0cnlUb1Vud3JhcCgpIHsKICAgIHRoZW5hYmxlKG9uU3VjY2Vzcywgb25FcnJvcik7CiAgfQoKICB2YXIgcmVz" + "dWx0ID0gdHJ5Q2F0Y2godHJ5VG9VbndyYXApOwogIGlmIChyZXN1bHQuc3RhdHVzID09PSAnZXJyb3InKSB7CiAgICBvbkVycm9yKHJlc3VsdC52YWx1ZSk7CiAgfQp9CgpmdW5jdGlvbiB0cnlDYXRjaChmdW5j" + "LCB2YWx1ZSkgewogIHZhciBvdXQgPSB7fTsKICB0cnkgewogICAgb3V0LnZhbHVlID0gZnVuYyh2YWx1ZSk7CiAgICBvdXQuc3RhdHVzID0gJ3N1Y2Nlc3MnOwogIH0gY2F0Y2ggKGUpIHsKICAgIG91dC5zdGF0" + "dXMgPSAnZXJyb3InOwogICAgb3V0LnZhbHVlID0gZTsKICB9CiAgcmV0dXJuIG91dDsKfQoKUHJvbWlzZS5yZXNvbHZlID0gcmVzb2x2ZTsKZnVuY3Rpb24gcmVzb2x2ZSh2YWx1ZSkgewogIGlmICh2YWx1ZSBp" + "bnN0YW5jZW9mIHRoaXMpIHsKICAgIHJldHVybiB2YWx1ZTsKICB9CiAgcmV0dXJuIGhhbmRsZXJzLnJlc29sdmUobmV3IHRoaXMoSU5URVJOQUwpLCB2YWx1ZSk7Cn0KClByb21pc2UucmVqZWN0ID0gcmVqZWN0" + "OwpmdW5jdGlvbiByZWplY3QocmVhc29uKSB7CiAgdmFyIHByb21pc2UgPSBuZXcgdGhpcyhJTlRFUk5BTCk7CiAgcmV0dXJuIGhhbmRsZXJzLnJlamVjdChwcm9taXNlLCByZWFzb24pOwp9CgpQcm9taXNlLmFs" + "bCA9IGFsbDsKZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKSB7CiAgdmFyIHNlbGYgPSB0aGlzOwogIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaXRlcmFibGUpICE9PSAnW29iamVjdCBBcnJheV0n" + "KSB7CiAgICByZXR1cm4gdGhpcy5yZWplY3QobmV3IFR5cGVFcnJvcignbXVzdCBiZSBhbiBhcnJheScpKTsKICB9CgogIHZhciBsZW4gPSBpdGVyYWJsZS5sZW5ndGg7CiAgdmFyIGNhbGxlZCA9IGZhbHNlOwog" + "IGlmICghbGVuKSB7CiAgICByZXR1cm4gdGhpcy5yZXNvbHZlKFtdKTsKICB9CgogIHZhciB2YWx1ZXMgPSBuZXcgQXJyYXkobGVuKTsKICB2YXIgcmVzb2x2ZWQgPSAwOwogIHZhciBpID0gLTE7CiAgdmFyIHBy" + "b21pc2UgPSBuZXcgdGhpcyhJTlRFUk5BTCk7CgogIHdoaWxlICgrK2kgPCBsZW4pIHsKICAgIGFsbFJlc29sdmVyKGl0ZXJhYmxlW2ldLCBpKTsKICB9CiAgcmV0dXJuIHByb21pc2U7CiAgZnVuY3Rpb24gYWxs" + "UmVzb2x2ZXIodmFsdWUsIGkpIHsKICAgIHNlbGYucmVzb2x2ZSh2YWx1ZSkudGhlbihyZXNvbHZlRnJvbUFsbCwgZnVuY3Rpb24gKGVycm9yKSB7CiAgICAgIGlmICghY2FsbGVkKSB7CiAgICAgICAgY2FsbGVk" + "ID0gdHJ1ZTsKICAgICAgICBoYW5kbGVycy5yZWplY3QocHJvbWlzZSwgZXJyb3IpOwogICAgICB9CiAgICB9KTsKICAgIGZ1bmN0aW9uIHJlc29sdmVGcm9tQWxsKG91dFZhbHVlKSB7CiAgICAgIHZhbHVlc1tp" + "XSA9IG91dFZhbHVlOwogICAgICBpZiAoKytyZXNvbHZlZCA9PT0gbGVuICYmICFjYWxsZWQpIHsKICAgICAgICBjYWxsZWQgPSB0cnVlOwogICAgICAgIGhhbmRsZXJzLnJlc29sdmUocHJvbWlzZSwgdmFsdWVz" + "KTsKICAgICAgfQogICAgfQogIH0KfQoKUHJvbWlzZS5yYWNlID0gcmFjZTsKZnVuY3Rpb24gcmFjZShpdGVyYWJsZSkgewogIHZhciBzZWxmID0gdGhpczsKICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmlu" + "Zy5jYWxsKGl0ZXJhYmxlKSAhPT0gJ1tvYmplY3QgQXJyYXldJykgewogICAgcmV0dXJuIHRoaXMucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ211c3QgYmUgYW4gYXJyYXknKSk7CiAgfQoKICB2YXIgbGVuID0gaXRl" + "cmFibGUubGVuZ3RoOwogIHZhciBjYWxsZWQgPSBmYWxzZTsKICBpZiAoIWxlbikgewogICAgcmV0dXJuIHRoaXMucmVzb2x2ZShbXSk7CiAgfQoKICB2YXIgaSA9IC0xOwogIHZhciBwcm9taXNlID0gbmV3IHRo" + "aXMoSU5URVJOQUwpOwoKICB3aGlsZSAoKytpIDwgbGVuKSB7CiAgICByZXNvbHZlcihpdGVyYWJsZVtpXSk7CiAgfQogIHJldHVybiBwcm9taXNlOwogIGZ1bmN0aW9uIHJlc29sdmVyKHZhbHVlKSB7CiAgICBz" + "ZWxmLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgIGlmICghY2FsbGVkKSB7CiAgICAgICAgY2FsbGVkID0gdHJ1ZTsKICAgICAgICBoYW5kbGVycy5yZXNvbHZlKHByb21p" + "c2UsIHJlc3BvbnNlKTsKICAgICAgfQogICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7CiAgICAgIGlmICghY2FsbGVkKSB7CiAgICAgICAgY2FsbGVkID0gdHJ1ZTsKICAgICAgICBoYW5kbGVycy5yZWplY3QocHJv" + "bWlzZSwgZXJyb3IpOwogICAgICB9CiAgICB9KTsKICB9Cn0KCn0seyJpbW1lZGlhdGUiOjM2fV0sMzg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewovLyBUb3AgbGV2ZWwgZmlsZSBpcyBqdXN0" + "IGEgbWl4aW4gb2Ygc3VibW9kdWxlcyAmIGNvbnN0YW50cwondXNlIHN0cmljdCc7Cgp2YXIgYXNzaWduICAgID0gcmVxdWlyZSgnLi9saWIvdXRpbHMvY29tbW9uJykuYXNzaWduOwoKdmFyIGRlZmxhdGUgICA9" + "IHJlcXVpcmUoJy4vbGliL2RlZmxhdGUnKTsKdmFyIGluZmxhdGUgICA9IHJlcXVpcmUoJy4vbGliL2luZmxhdGUnKTsKdmFyIGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vbGliL3psaWIvY29uc3RhbnRzJyk7Cgp2" + "YXIgcGFrbyA9IHt9OwoKYXNzaWduKHBha28sIGRlZmxhdGUsIGluZmxhdGUsIGNvbnN0YW50cyk7Cgptb2R1bGUuZXhwb3J0cyA9IHBha287Cgp9LHsiLi9saWIvZGVmbGF0ZSI6MzksIi4vbGliL2luZmxhdGUi" + "OjQwLCIuL2xpYi91dGlscy9jb21tb24iOjQxLCIuL2xpYi96bGliL2NvbnN0YW50cyI6NDR9XSwzOTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsKCgp2YXIgemxpYl9k" + "ZWZsYXRlID0gcmVxdWlyZSgnLi96bGliL2RlZmxhdGUnKTsKdmFyIHV0aWxzICAgICAgICA9IHJlcXVpcmUoJy4vdXRpbHMvY29tbW9uJyk7CnZhciBzdHJpbmdzICAgICAgPSByZXF1aXJlKCcuL3V0aWxzL3N0" + "cmluZ3MnKTsKdmFyIG1zZyAgICAgICAgICA9IHJlcXVpcmUoJy4vemxpYi9tZXNzYWdlcycpOwp2YXIgWlN0cmVhbSAgICAgID0gcmVxdWlyZSgnLi96bGliL3pzdHJlYW0nKTsKCnZhciB0b1N0cmluZyA9IE9i" + "amVjdC5wcm90b3R5cGUudG9TdHJpbmc7CgovKiBQdWJsaWMgY29uc3RhbnRzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwovKiA9PT09PT09PT09" + "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwoKdmFyIFpfTk9fRkxVU0ggICAgICA9IDA7CnZhciBaX0ZJTklTSCAgICAgICAgPSA0OwoK" + "dmFyIFpfT0sgICAgICAgICAgICA9IDA7CnZhciBaX1NUUkVBTV9FTkQgICAgPSAxOwp2YXIgWl9TWU5DX0ZMVVNIICAgID0gMjsKCnZhciBaX0RFRkFVTFRfQ09NUFJFU1NJT04gPSAtMTsKCnZhciBaX0RFRkFV" + "TFRfU1RSQVRFR1kgICAgPSAwOwoKdmFyIFpfREVGTEFURUQgID0gODsKCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09" + "PSovCgoKLyoqCiAqIGNsYXNzIERlZmxhdGUKICoKICogR2VuZXJpYyBKUy1zdHlsZSB3cmFwcGVyIGZvciB6bGliIGNhbGxzLiBJZiB5b3UgZG9uJ3QgbmVlZAogKiBzdHJlYW1pbmcgYmVoYXZpb3VyIC0gdXNl" + "IG1vcmUgc2ltcGxlIGZ1bmN0aW9uczogW1tkZWZsYXRlXV0sCiAqIFtbZGVmbGF0ZVJhd11dIGFuZCBbW2d6aXBdXS4KICoqLwoKLyogaW50ZXJuYWwKICogRGVmbGF0ZS5jaHVua3MgLT4gQXJyYXkKICoKICog" + "Q2h1bmtzIG9mIG91dHB1dCBkYXRhLCBpZiBbW0RlZmxhdGUjb25EYXRhXV0gbm90IG92ZXJyaWRlbi4KICoqLwoKLyoqCiAqIERlZmxhdGUucmVzdWx0IC0+IFVpbnQ4QXJyYXl8QXJyYXkKICoKICogQ29tcHJl" + "c3NlZCByZXN1bHQsIGdlbmVyYXRlZCBieSBkZWZhdWx0IFtbRGVmbGF0ZSNvbkRhdGFdXQogKiBhbmQgW1tEZWZsYXRlI29uRW5kXV0gaGFuZGxlcnMuIEZpbGxlZCBhZnRlciB5b3UgcHVzaCBsYXN0IGNodW5r" + "CiAqIChjYWxsIFtbRGVmbGF0ZSNwdXNoXV0gd2l0aCBgWl9GSU5JU0hgIC8gYHRydWVgIHBhcmFtKSAgb3IgaWYgeW91CiAqIHB1c2ggYSBjaHVuayB3aXRoIGV4cGxpY2l0IGZsdXNoIChjYWxsIFtbRGVmbGF0" + "ZSNwdXNoXV0gd2l0aAogKiBgWl9TWU5DX0ZMVVNIYCBwYXJhbSkuCiAqKi8KCi8qKgogKiBEZWZsYXRlLmVyciAtPiBOdW1iZXIKICoKICogRXJyb3IgY29kZSBhZnRlciBkZWZsYXRlIGZpbmlzaGVkLiAwICha" + "X09LKSBvbiBzdWNjZXNzLgogKiBZb3Ugd2lsbCBub3QgbmVlZCBpdCBpbiByZWFsIGxpZmUsIGJlY2F1c2UgZGVmbGF0ZSBlcnJvcnMKICogYXJlIHBvc3NpYmxlIG9ubHkgb24gd3Jvbmcgb3B0aW9ucyBvciBi" + "YWQgYG9uRGF0YWAgLyBgb25FbmRgCiAqIGN1c3RvbSBoYW5kbGVycy4KICoqLwoKLyoqCiAqIERlZmxhdGUubXNnIC0+IFN0cmluZwogKgogKiBFcnJvciBtZXNzYWdlLCBpZiBbW0RlZmxhdGUuZXJyXV0gIT0g" + "MAogKiovCgoKLyoqCiAqIG5ldyBEZWZsYXRlKG9wdGlvbnMpCiAqIC0gb3B0aW9ucyAoT2JqZWN0KTogemxpYiBkZWZsYXRlIG9wdGlvbnMuCiAqCiAqIENyZWF0ZXMgbmV3IGRlZmxhdG9yIGluc3RhbmNlIHdp" + "dGggc3BlY2lmaWVkIHBhcmFtcy4gVGhyb3dzIGV4Y2VwdGlvbgogKiBvbiBiYWQgcGFyYW1zLiBTdXBwb3J0ZWQgb3B0aW9uczoKICoKICogLSBgbGV2ZWxgCiAqIC0gYHdpbmRvd0JpdHNgCiAqIC0gYG1lbUxl" + "dmVsYAogKiAtIGBzdHJhdGVneWAKICogLSBgZGljdGlvbmFyeWAKICoKICogW2h0dHA6Ly96bGliLm5ldC9tYW51YWwuaHRtbCNBZHZhbmNlZF0oaHR0cDovL3psaWIubmV0L21hbnVhbC5odG1sI0FkdmFuY2Vk" + "KQogKiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVzZS4KICoKICogQWRkaXRpb25hbCBvcHRpb25zLCBmb3IgaW50ZXJuYWwgbmVlZHM6CiAqCiAqIC0gYGNodW5rU2l6ZWAgLSBzaXplIG9mIGdlbmVyYXRl" + "ZCBkYXRhIGNodW5rcyAoMTZLIGJ5IGRlZmF1bHQpCiAqIC0gYHJhd2AgKEJvb2xlYW4pIC0gZG8gcmF3IGRlZmxhdGUKICogLSBgZ3ppcGAgKEJvb2xlYW4pIC0gY3JlYXRlIGd6aXAgd3JhcHBlcgogKiAtIGB0" + "b2AgKFN0cmluZykgLSBpZiBlcXVhbCB0byAnc3RyaW5nJywgdGhlbiByZXN1bHQgd2lsbCBiZSAiYmluYXJ5IHN0cmluZyIKICogICAgKGVhY2ggY2hhciBjb2RlIFswLi4yNTVdKQogKiAtIGBoZWFkZXJgIChP" + "YmplY3QpIC0gY3VzdG9tIGhlYWRlciBmb3IgZ3ppcAogKiAgIC0gYHRleHRgIChCb29sZWFuKSAtIHRydWUgaWYgY29tcHJlc3NlZCBkYXRhIGJlbGlldmVkIHRvIGJlIHRleHQKICogICAtIGB0aW1lYCAoTnVt" + "YmVyKSAtIG1vZGlmaWNhdGlvbiB0aW1lLCB1bml4IHRpbWVzdGFtcAogKiAgIC0gYG9zYCAoTnVtYmVyKSAtIG9wZXJhdGlvbiBzeXN0ZW0gY29kZQogKiAgIC0gYGV4dHJhYCAoQXJyYXkpIC0gYXJyYXkgb2Yg" + "Ynl0ZXMgd2l0aCBleHRyYSBkYXRhIChtYXggNjU1MzYpCiAqICAgLSBgbmFtZWAgKFN0cmluZykgLSBmaWxlIG5hbWUgKGJpbmFyeSBzdHJpbmcpCiAqICAgLSBgY29tbWVudGAgKFN0cmluZykgLSBjb21tZW50" + "IChiaW5hcnkgc3RyaW5nKQogKiAgIC0gYGhjcmNgIChCb29sZWFuKSAtIHRydWUgaWYgaGVhZGVyIGNyYyBzaG91bGQgYmUgYWRkZWQKICoKICogIyMjIyMgRXhhbXBsZToKICoKICogYGBgamF2YXNjcmlwdAog" + "KiB2YXIgcGFrbyA9IHJlcXVpcmUoJ3Bha28nKQogKiAgICwgY2h1bmsxID0gVWludDhBcnJheShbMSwyLDMsNCw1LDYsNyw4LDldKQogKiAgICwgY2h1bmsyID0gVWludDhBcnJheShbMTAsMTEsMTIsMTMsMTQs" + "MTUsMTYsMTcsMTgsMTldKTsKICoKICogdmFyIGRlZmxhdGUgPSBuZXcgcGFrby5EZWZsYXRlKHsgbGV2ZWw6IDN9KTsKICoKICogZGVmbGF0ZS5wdXNoKGNodW5rMSwgZmFsc2UpOwogKiBkZWZsYXRlLnB1c2go" + "Y2h1bmsyLCB0cnVlKTsgIC8vIHRydWUgLT4gbGFzdCBjaHVuawogKgogKiBpZiAoZGVmbGF0ZS5lcnIpIHsgdGhyb3cgbmV3IEVycm9yKGRlZmxhdGUuZXJyKTsgfQogKgogKiBjb25zb2xlLmxvZyhkZWZsYXRl" + "LnJlc3VsdCk7CiAqIGBgYAogKiovCmZ1bmN0aW9uIERlZmxhdGUob3B0aW9ucykgewogIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEZWZsYXRlKSkgcmV0dXJuIG5ldyBEZWZsYXRlKG9wdGlvbnMpOwoKICB0aGlz" + "Lm9wdGlvbnMgPSB1dGlscy5hc3NpZ24oewogICAgbGV2ZWw6IFpfREVGQVVMVF9DT01QUkVTU0lPTiwKICAgIG1ldGhvZDogWl9ERUZMQVRFRCwKICAgIGNodW5rU2l6ZTogMTYzODQsCiAgICB3aW5kb3dCaXRz" + "OiAxNSwKICAgIG1lbUxldmVsOiA4LAogICAgc3RyYXRlZ3k6IFpfREVGQVVMVF9TVFJBVEVHWSwKICAgIHRvOiAnJwogIH0sIG9wdGlvbnMgfHwge30pOwoKICB2YXIgb3B0ID0gdGhpcy5vcHRpb25zOwoKICBp" + "ZiAob3B0LnJhdyAmJiAob3B0LndpbmRvd0JpdHMgPiAwKSkgewogICAgb3B0LndpbmRvd0JpdHMgPSAtb3B0LndpbmRvd0JpdHM7CiAgfQoKICBlbHNlIGlmIChvcHQuZ3ppcCAmJiAob3B0LndpbmRvd0JpdHMg" + "PiAwKSAmJiAob3B0LndpbmRvd0JpdHMgPCAxNikpIHsKICAgIG9wdC53aW5kb3dCaXRzICs9IDE2OwogIH0KCiAgdGhpcy5lcnIgICAgPSAwOyAgICAgIC8vIGVycm9yIGNvZGUsIGlmIGhhcHBlbnMgKDAgPSBa" + "X09LKQogIHRoaXMubXNnICAgID0gJyc7ICAgICAvLyBlcnJvciBtZXNzYWdlCiAgdGhpcy5lbmRlZCAgPSBmYWxzZTsgIC8vIHVzZWQgdG8gYXZvaWQgbXVsdGlwbGUgb25FbmQoKSBjYWxscwogIHRoaXMuY2h1" + "bmtzID0gW107ICAgICAvLyBjaHVua3Mgb2YgY29tcHJlc3NlZCBkYXRhCgogIHRoaXMuc3RybSA9IG5ldyBaU3RyZWFtKCk7CiAgdGhpcy5zdHJtLmF2YWlsX291dCA9IDA7CgogIHZhciBzdGF0dXMgPSB6bGli" + "X2RlZmxhdGUuZGVmbGF0ZUluaXQyKAogICAgdGhpcy5zdHJtLAogICAgb3B0LmxldmVsLAogICAgb3B0Lm1ldGhvZCwKICAgIG9wdC53aW5kb3dCaXRzLAogICAgb3B0Lm1lbUxldmVsLAogICAgb3B0LnN0cmF0" + "ZWd5CiAgKTsKCiAgaWYgKHN0YXR1cyAhPT0gWl9PSykgewogICAgdGhyb3cgbmV3IEVycm9yKG1zZ1tzdGF0dXNdKTsKICB9CgogIGlmIChvcHQuaGVhZGVyKSB7CiAgICB6bGliX2RlZmxhdGUuZGVmbGF0ZVNl" + "dEhlYWRlcih0aGlzLnN0cm0sIG9wdC5oZWFkZXIpOwogIH0KCiAgaWYgKG9wdC5kaWN0aW9uYXJ5KSB7CiAgICB2YXIgZGljdDsKICAgIC8vIENvbnZlcnQgZGF0YSBpZiBuZWVkZWQKICAgIGlmICh0eXBlb2Yg" + "b3B0LmRpY3Rpb25hcnkgPT09ICdzdHJpbmcnKSB7CiAgICAgIC8vIElmIHdlIG5lZWQgdG8gY29tcHJlc3MgdGV4dCwgY2hhbmdlIGVuY29kaW5nIHRvIHV0ZjguCiAgICAgIGRpY3QgPSBzdHJpbmdzLnN0cmlu" + "ZzJidWYob3B0LmRpY3Rpb25hcnkpOwogICAgfSBlbHNlIGlmICh0b1N0cmluZy5jYWxsKG9wdC5kaWN0aW9uYXJ5KSA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJykgewogICAgICBkaWN0ID0gbmV3IFVpbnQ4" + "QXJyYXkob3B0LmRpY3Rpb25hcnkpOwogICAgfSBlbHNlIHsKICAgICAgZGljdCA9IG9wdC5kaWN0aW9uYXJ5OwogICAgfQoKICAgIHN0YXR1cyA9IHpsaWJfZGVmbGF0ZS5kZWZsYXRlU2V0RGljdGlvbmFyeSh0" + "aGlzLnN0cm0sIGRpY3QpOwoKICAgIGlmIChzdGF0dXMgIT09IFpfT0spIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZ1tzdGF0dXNdKTsKICAgIH0KCiAgICB0aGlzLl9kaWN0X3NldCA9IHRydWU7CiAgfQp9" + "CgovKioKICogRGVmbGF0ZSNwdXNoKGRhdGFbLCBtb2RlXSkgLT4gQm9vbGVhbgogKiAtIGRhdGEgKFVpbnQ4QXJyYXl8QXJyYXl8QXJyYXlCdWZmZXJ8U3RyaW5nKTogaW5wdXQgZGF0YS4gU3RyaW5ncyB3aWxs" + "IGJlCiAqICAgY29udmVydGVkIHRvIHV0ZjggYnl0ZSBzZXF1ZW5jZS4KICogLSBtb2RlIChOdW1iZXJ8Qm9vbGVhbik6IDAuLjYgZm9yIGNvcnJlc3BvbmRpbmcgWl9OT19GTFVTSC4uWl9UUkVFIG1vZGVzLgog" + "KiAgIFNlZSBjb25zdGFudHMuIFNraXBwZWQgb3IgYGZhbHNlYCBtZWFucyBaX05PX0ZMVVNILCBgdHJ1ZWAgbWVhbnNoIFpfRklOSVNILgogKgogKiBTZW5kcyBpbnB1dCBkYXRhIHRvIGRlZmxhdGUgcGlwZSwg" + "Z2VuZXJhdGluZyBbW0RlZmxhdGUjb25EYXRhXV0gY2FsbHMgd2l0aAogKiBuZXcgY29tcHJlc3NlZCBjaHVua3MuIFJldHVybnMgYHRydWVgIG9uIHN1Y2Nlc3MuIFRoZSBsYXN0IGRhdGEgYmxvY2sgbXVzdCBo" + "YXZlCiAqIG1vZGUgWl9GSU5JU0ggKG9yIGB0cnVlYCkuIFRoYXQgd2lsbCBmbHVzaCBpbnRlcm5hbCBwZW5kaW5nIGJ1ZmZlcnMgYW5kIGNhbGwKICogW1tEZWZsYXRlI29uRW5kXV0uIEZvciBpbnRlcmltIGV4" + "cGxpY2l0IGZsdXNoZXMgKHdpdGhvdXQgZW5kaW5nIHRoZSBzdHJlYW0pIHlvdQogKiBjYW4gdXNlIG1vZGUgWl9TWU5DX0ZMVVNILCBrZWVwaW5nIHRoZSBjb21wcmVzc2lvbiBjb250ZXh0LgogKgogKiBPbiBm" + "YWlsIGNhbGwgW1tEZWZsYXRlI29uRW5kXV0gd2l0aCBlcnJvciBjb2RlIGFuZCByZXR1cm4gZmFsc2UuCiAqCiAqIFdlIHN0cm9uZ2x5IHJlY29tbWVuZCB0byB1c2UgYFVpbnQ4QXJyYXlgIG9uIGlucHV0IGZv" + "ciBiZXN0IHNwZWVkIChvdXRwdXQKICogYXJyYXkgZm9ybWF0IGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHkpLiBBbHNvLCBkb24ndCBza2lwIGxhc3QgcGFyYW0gYW5kIGFsd2F5cwogKiB1c2UgdGhlIHNhbWUg" + "dHlwZSBpbiB5b3VyIGNvZGUgKGJvb2xlYW4gb3IgbnVtYmVyKS4gVGhhdCB3aWxsIGltcHJvdmUgSlMgc3BlZWQuCiAqCiAqIEZvciByZWd1bGFyIGBBcnJheWAtcyBtYWtlIHN1cmUgYWxsIGVsZW1lbnRzIGFy" + "ZSBbMC4uMjU1XS4KICoKICogIyMjIyMgRXhhbXBsZQogKgogKiBgYGBqYXZhc2NyaXB0CiAqIHB1c2goY2h1bmssIGZhbHNlKTsgLy8gcHVzaCBvbmUgb2YgZGF0YSBjaHVua3MKICogLi4uCiAqIHB1c2goY2h1" + "bmssIHRydWUpOyAgLy8gcHVzaCBsYXN0IGNodW5rCiAqIGBgYAogKiovCkRlZmxhdGUucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgbW9kZSkgewogIHZhciBzdHJtID0gdGhpcy5zdHJtOwogIHZh" + "ciBjaHVua1NpemUgPSB0aGlzLm9wdGlvbnMuY2h1bmtTaXplOwogIHZhciBzdGF0dXMsIF9tb2RlOwoKICBpZiAodGhpcy5lbmRlZCkgeyByZXR1cm4gZmFsc2U7IH0KCiAgX21vZGUgPSAobW9kZSA9PT0gfn5t" + "b2RlKSA/IG1vZGUgOiAoKG1vZGUgPT09IHRydWUpID8gWl9GSU5JU0ggOiBaX05PX0ZMVVNIKTsKCiAgLy8gQ29udmVydCBkYXRhIGlmIG5lZWRlZAogIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHsK" + "ICAgIC8vIElmIHdlIG5lZWQgdG8gY29tcHJlc3MgdGV4dCwgY2hhbmdlIGVuY29kaW5nIHRvIHV0ZjguCiAgICBzdHJtLmlucHV0ID0gc3RyaW5ncy5zdHJpbmcyYnVmKGRhdGEpOwogIH0gZWxzZSBpZiAodG9T" + "dHJpbmcuY2FsbChkYXRhKSA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJykgewogICAgc3RybS5pbnB1dCA9IG5ldyBVaW50OEFycmF5KGRhdGEpOwogIH0gZWxzZSB7CiAgICBzdHJtLmlucHV0ID0gZGF0YTsK" + "ICB9CgogIHN0cm0ubmV4dF9pbiA9IDA7CiAgc3RybS5hdmFpbF9pbiA9IHN0cm0uaW5wdXQubGVuZ3RoOwoKICBkbyB7CiAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgc3RybS5vdXRwdXQg" + "PSBuZXcgdXRpbHMuQnVmOChjaHVua1NpemUpOwogICAgICBzdHJtLm5leHRfb3V0ID0gMDsKICAgICAgc3RybS5hdmFpbF9vdXQgPSBjaHVua1NpemU7CiAgICB9CiAgICBzdGF0dXMgPSB6bGliX2RlZmxhdGUu" + "ZGVmbGF0ZShzdHJtLCBfbW9kZSk7ICAgIC8qIG5vIGJhZCByZXR1cm4gdmFsdWUgKi8KCiAgICBpZiAoc3RhdHVzICE9PSBaX1NUUkVBTV9FTkQgJiYgc3RhdHVzICE9PSBaX09LKSB7CiAgICAgIHRoaXMub25F" + "bmQoc3RhdHVzKTsKICAgICAgdGhpcy5lbmRlZCA9IHRydWU7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChzdHJtLmF2YWlsX291dCA9PT0gMCB8fCAoc3RybS5hdmFpbF9pbiA9PT0gMCAmJiAo" + "X21vZGUgPT09IFpfRklOSVNIIHx8IF9tb2RlID09PSBaX1NZTkNfRkxVU0gpKSkgewogICAgICBpZiAodGhpcy5vcHRpb25zLnRvID09PSAnc3RyaW5nJykgewogICAgICAgIHRoaXMub25EYXRhKHN0cmluZ3Mu" + "YnVmMmJpbnN0cmluZyh1dGlscy5zaHJpbmtCdWYoc3RybS5vdXRwdXQsIHN0cm0ubmV4dF9vdXQpKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5vbkRhdGEodXRpbHMuc2hyaW5rQnVmKHN0cm0ub3V0" + "cHV0LCBzdHJtLm5leHRfb3V0KSk7CiAgICAgIH0KICAgIH0KICB9IHdoaWxlICgoc3RybS5hdmFpbF9pbiA+IDAgfHwgc3RybS5hdmFpbF9vdXQgPT09IDApICYmIHN0YXR1cyAhPT0gWl9TVFJFQU1fRU5EKTsK" + "CiAgLy8gRmluYWxpemUgb24gdGhlIGxhc3QgY2h1bmsuCiAgaWYgKF9tb2RlID09PSBaX0ZJTklTSCkgewogICAgc3RhdHVzID0gemxpYl9kZWZsYXRlLmRlZmxhdGVFbmQodGhpcy5zdHJtKTsKICAgIHRoaXMu" + "b25FbmQoc3RhdHVzKTsKICAgIHRoaXMuZW5kZWQgPSB0cnVlOwogICAgcmV0dXJuIHN0YXR1cyA9PT0gWl9PSzsKICB9CgogIC8vIGNhbGxiYWNrIGludGVyaW0gcmVzdWx0cyBpZiBaX1NZTkNfRkxVU0guCiAg" + "aWYgKF9tb2RlID09PSBaX1NZTkNfRkxVU0gpIHsKICAgIHRoaXMub25FbmQoWl9PSyk7CiAgICBzdHJtLmF2YWlsX291dCA9IDA7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIHJldHVybiB0cnVlOwp9OwoKCi8q" + "KgogKiBEZWZsYXRlI29uRGF0YShjaHVuaykgLT4gVm9pZAogKiAtIGNodW5rIChVaW50OEFycmF5fEFycmF5fFN0cmluZyk6IG91cHV0IGRhdGEuIFR5cGUgb2YgYXJyYXkgZGVwZW5kcwogKiAgIG9uIGpzIGVu" + "Z2luZSBzdXBwb3J0LiBXaGVuIHN0cmluZyBvdXRwdXQgcmVxdWVzdGVkLCBlYWNoIGNodW5rCiAqICAgd2lsbCBiZSBzdHJpbmcuCiAqCiAqIEJ5IGRlZmF1bHQsIHN0b3JlcyBkYXRhIGJsb2NrcyBpbiBgY2h1" + "bmtzW11gIHByb3BlcnR5IGFuZCBnbHVlCiAqIHRob3NlIGluIGBvbkVuZGAuIE92ZXJyaWRlIHRoaXMgaGFuZGxlciwgaWYgeW91IG5lZWQgYW5vdGhlciBiZWhhdmlvdXIuCiAqKi8KRGVmbGF0ZS5wcm90b3R5" + "cGUub25EYXRhID0gZnVuY3Rpb24gKGNodW5rKSB7CiAgdGhpcy5jaHVua3MucHVzaChjaHVuayk7Cn07CgoKLyoqCiAqIERlZmxhdGUjb25FbmQoc3RhdHVzKSAtPiBWb2lkCiAqIC0gc3RhdHVzIChOdW1iZXIp" + "OiBkZWZsYXRlIHN0YXR1cy4gMCAoWl9PSykgb24gc3VjY2VzcywKICogICBvdGhlciBpZiBub3QuCiAqCiAqIENhbGxlZCBvbmNlIGFmdGVyIHlvdSB0ZWxsIGRlZmxhdGUgdGhhdCB0aGUgaW5wdXQgc3RyZWFt" + "IGlzCiAqIGNvbXBsZXRlIChaX0ZJTklTSCkgb3Igc2hvdWxkIGJlIGZsdXNoZWQgKFpfU1lOQ19GTFVTSCkKICogb3IgaWYgYW4gZXJyb3IgaGFwcGVuZWQuIEJ5IGRlZmF1bHQgLSBqb2luIGNvbGxlY3RlZCBj" + "aHVua3MsCiAqIGZyZWUgbWVtb3J5IGFuZCBmaWxsIGByZXN1bHRzYCAvIGBlcnJgIHByb3BlcnRpZXMuCiAqKi8KRGVmbGF0ZS5wcm90b3R5cGUub25FbmQgPSBmdW5jdGlvbiAoc3RhdHVzKSB7CiAgLy8gT24g" + "c3VjY2VzcyAtIGpvaW4KICBpZiAoc3RhdHVzID09PSBaX09LKSB7CiAgICBpZiAodGhpcy5vcHRpb25zLnRvID09PSAnc3RyaW5nJykgewogICAgICB0aGlzLnJlc3VsdCA9IHRoaXMuY2h1bmtzLmpvaW4oJycp" + "OwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5yZXN1bHQgPSB1dGlscy5mbGF0dGVuQ2h1bmtzKHRoaXMuY2h1bmtzKTsKICAgIH0KICB9CiAgdGhpcy5jaHVua3MgPSBbXTsKICB0aGlzLmVyciA9IHN0YXR1czsK" + "ICB0aGlzLm1zZyA9IHRoaXMuc3RybS5tc2c7Cn07CgoKLyoqCiAqIGRlZmxhdGUoZGF0YVssIG9wdGlvbnNdKSAtPiBVaW50OEFycmF5fEFycmF5fFN0cmluZwogKiAtIGRhdGEgKFVpbnQ4QXJyYXl8QXJyYXl8" + "U3RyaW5nKTogaW5wdXQgZGF0YSB0byBjb21wcmVzcy4KICogLSBvcHRpb25zIChPYmplY3QpOiB6bGliIGRlZmxhdGUgb3B0aW9ucy4KICoKICogQ29tcHJlc3MgYGRhdGFgIHdpdGggZGVmbGF0ZSBhbGdvcml0" + "aG0gYW5kIGBvcHRpb25zYC4KICoKICogU3VwcG9ydGVkIG9wdGlvbnMgYXJlOgogKgogKiAtIGxldmVsCiAqIC0gd2luZG93Qml0cwogKiAtIG1lbUxldmVsCiAqIC0gc3RyYXRlZ3kKICogLSBkaWN0aW9uYXJ5" + "CiAqCiAqIFtodHRwOi8vemxpYi5uZXQvbWFudWFsLmh0bWwjQWR2YW5jZWRdKGh0dHA6Ly96bGliLm5ldC9tYW51YWwuaHRtbCNBZHZhbmNlZCkKICogZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlc2UuCiAq" + "CiAqIFN1Z2FyIChvcHRpb25zKToKICoKICogLSBgcmF3YCAoQm9vbGVhbikgLSBzYXkgdGhhdCB3ZSB3b3JrIHdpdGggcmF3IHN0cmVhbSwgaWYgeW91IGRvbid0IHdpc2ggdG8gc3BlY2lmeQogKiAgIG5lZ2F0" + "aXZlIHdpbmRvd0JpdHMgaW1wbGljaXRseS4KICogLSBgdG9gIChTdHJpbmcpIC0gaWYgZXF1YWwgdG8gJ3N0cmluZycsIHRoZW4gcmVzdWx0IHdpbGwgYmUgImJpbmFyeSBzdHJpbmciCiAqICAgIChlYWNoIGNo" + "YXIgY29kZSBbMC4uMjU1XSkKICoKICogIyMjIyMgRXhhbXBsZToKICoKICogYGBgamF2YXNjcmlwdAogKiB2YXIgcGFrbyA9IHJlcXVpcmUoJ3Bha28nKQogKiAgICwgZGF0YSA9IFVpbnQ4QXJyYXkoWzEsMiwz" + "LDQsNSw2LDcsOCw5XSk7CiAqCiAqIGNvbnNvbGUubG9nKHBha28uZGVmbGF0ZShkYXRhKSk7CiAqIGBgYAogKiovCmZ1bmN0aW9uIGRlZmxhdGUoaW5wdXQsIG9wdGlvbnMpIHsKICB2YXIgZGVmbGF0b3IgPSBu" + "ZXcgRGVmbGF0ZShvcHRpb25zKTsKCiAgZGVmbGF0b3IucHVzaChpbnB1dCwgdHJ1ZSk7CgogIC8vIFRoYXQgd2lsbCBuZXZlciBoYXBwZW5zLCBpZiB5b3UgZG9uJ3QgY2hlYXQgd2l0aCBvcHRpb25zIDopCiAg" + "aWYgKGRlZmxhdG9yLmVycikgeyB0aHJvdyBkZWZsYXRvci5tc2cgfHwgbXNnW2RlZmxhdG9yLmVycl07IH0KCiAgcmV0dXJuIGRlZmxhdG9yLnJlc3VsdDsKfQoKCi8qKgogKiBkZWZsYXRlUmF3KGRhdGFbLCBv" + "cHRpb25zXSkgLT4gVWludDhBcnJheXxBcnJheXxTdHJpbmcKICogLSBkYXRhIChVaW50OEFycmF5fEFycmF5fFN0cmluZyk6IGlucHV0IGRhdGEgdG8gY29tcHJlc3MuCiAqIC0gb3B0aW9ucyAoT2JqZWN0KTog" + "emxpYiBkZWZsYXRlIG9wdGlvbnMuCiAqCiAqIFRoZSBzYW1lIGFzIFtbZGVmbGF0ZV1dLCBidXQgY3JlYXRlcyByYXcgZGF0YSwgd2l0aG91dCB3cmFwcGVyCiAqIChoZWFkZXIgYW5kIGFkbGVyMzIgY3JjKS4K" + "ICoqLwpmdW5jdGlvbiBkZWZsYXRlUmF3KGlucHV0LCBvcHRpb25zKSB7CiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgb3B0aW9ucy5yYXcgPSB0cnVlOwogIHJldHVybiBkZWZsYXRlKGlucHV0LCBvcHRp" + "b25zKTsKfQoKCi8qKgogKiBnemlwKGRhdGFbLCBvcHRpb25zXSkgLT4gVWludDhBcnJheXxBcnJheXxTdHJpbmcKICogLSBkYXRhIChVaW50OEFycmF5fEFycmF5fFN0cmluZyk6IGlucHV0IGRhdGEgdG8gY29t" + "cHJlc3MuCiAqIC0gb3B0aW9ucyAoT2JqZWN0KTogemxpYiBkZWZsYXRlIG9wdGlvbnMuCiAqCiAqIFRoZSBzYW1lIGFzIFtbZGVmbGF0ZV1dLCBidXQgY3JlYXRlIGd6aXAgd3JhcHBlciBpbnN0ZWFkIG9mCiAq" + "IGRlZmxhdGUgb25lLgogKiovCmZ1bmN0aW9uIGd6aXAoaW5wdXQsIG9wdGlvbnMpIHsKICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICBvcHRpb25zLmd6aXAgPSB0cnVlOwogIHJldHVybiBkZWZsYXRlKGlu" + "cHV0LCBvcHRpb25zKTsKfQoKCmV4cG9ydHMuRGVmbGF0ZSA9IERlZmxhdGU7CmV4cG9ydHMuZGVmbGF0ZSA9IGRlZmxhdGU7CmV4cG9ydHMuZGVmbGF0ZVJhdyA9IGRlZmxhdGVSYXc7CmV4cG9ydHMuZ3ppcCA9" + "IGd6aXA7Cgp9LHsiLi91dGlscy9jb21tb24iOjQxLCIuL3V0aWxzL3N0cmluZ3MiOjQyLCIuL3psaWIvZGVmbGF0ZSI6NDYsIi4vemxpYi9tZXNzYWdlcyI6NTEsIi4vemxpYi96c3RyZWFtIjo1M31dLDQwOltm" + "dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwoKCnZhciB6bGliX2luZmxhdGUgPSByZXF1aXJlKCcuL3psaWIvaW5mbGF0ZScpOwp2YXIgdXRpbHMgICAgICAgID0gcmVxdWly" + "ZSgnLi91dGlscy9jb21tb24nKTsKdmFyIHN0cmluZ3MgICAgICA9IHJlcXVpcmUoJy4vdXRpbHMvc3RyaW5ncycpOwp2YXIgYyAgICAgICAgICAgID0gcmVxdWlyZSgnLi96bGliL2NvbnN0YW50cycpOwp2YXIg" + "bXNnICAgICAgICAgID0gcmVxdWlyZSgnLi96bGliL21lc3NhZ2VzJyk7CnZhciBaU3RyZWFtICAgICAgPSByZXF1aXJlKCcuL3psaWIvenN0cmVhbScpOwp2YXIgR1poZWFkZXIgICAgID0gcmVxdWlyZSgnLi96" + "bGliL2d6aGVhZGVyJyk7Cgp2YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nOwoKLyoqCiAqIGNsYXNzIEluZmxhdGUKICoKICogR2VuZXJpYyBKUy1zdHlsZSB3cmFwcGVyIGZvciB6bGli" + "IGNhbGxzLiBJZiB5b3UgZG9uJ3QgbmVlZAogKiBzdHJlYW1pbmcgYmVoYXZpb3VyIC0gdXNlIG1vcmUgc2ltcGxlIGZ1bmN0aW9uczogW1tpbmZsYXRlXV0KICogYW5kIFtbaW5mbGF0ZVJhd11dLgogKiovCgov" + "KiBpbnRlcm5hbAogKiBpbmZsYXRlLmNodW5rcyAtPiBBcnJheQogKgogKiBDaHVua3Mgb2Ygb3V0cHV0IGRhdGEsIGlmIFtbSW5mbGF0ZSNvbkRhdGFdXSBub3Qgb3ZlcnJpZGVuLgogKiovCgovKioKICogSW5m" + "bGF0ZS5yZXN1bHQgLT4gVWludDhBcnJheXxBcnJheXxTdHJpbmcKICoKICogVW5jb21wcmVzc2VkIHJlc3VsdCwgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQgW1tJbmZsYXRlI29uRGF0YV1dCiAqIGFuZCBbW0luZmxh" + "dGUjb25FbmRdXSBoYW5kbGVycy4gRmlsbGVkIGFmdGVyIHlvdSBwdXNoIGxhc3QgY2h1bmsKICogKGNhbGwgW1tJbmZsYXRlI3B1c2hdXSB3aXRoIGBaX0ZJTklTSGAgLyBgdHJ1ZWAgcGFyYW0pIG9yIGlmIHlv" + "dQogKiBwdXNoIGEgY2h1bmsgd2l0aCBleHBsaWNpdCBmbHVzaCAoY2FsbCBbW0luZmxhdGUjcHVzaF1dIHdpdGgKICogYFpfU1lOQ19GTFVTSGAgcGFyYW0pLgogKiovCgovKioKICogSW5mbGF0ZS5lcnIgLT4g" + "TnVtYmVyCiAqCiAqIEVycm9yIGNvZGUgYWZ0ZXIgaW5mbGF0ZSBmaW5pc2hlZC4gMCAoWl9PSykgb24gc3VjY2Vzcy4KICogU2hvdWxkIGJlIGNoZWNrZWQgaWYgYnJva2VuIGRhdGEgcG9zc2libGUuCiAqKi8K" + "Ci8qKgogKiBJbmZsYXRlLm1zZyAtPiBTdHJpbmcKICoKICogRXJyb3IgbWVzc2FnZSwgaWYgW1tJbmZsYXRlLmVycl1dICE9IDAKICoqLwoKCi8qKgogKiBuZXcgSW5mbGF0ZShvcHRpb25zKQogKiAtIG9wdGlv" + "bnMgKE9iamVjdCk6IHpsaWIgaW5mbGF0ZSBvcHRpb25zLgogKgogKiBDcmVhdGVzIG5ldyBpbmZsYXRvciBpbnN0YW5jZSB3aXRoIHNwZWNpZmllZCBwYXJhbXMuIFRocm93cyBleGNlcHRpb24KICogb24gYmFk" + "IHBhcmFtcy4gU3VwcG9ydGVkIG9wdGlvbnM6CiAqCiAqIC0gYHdpbmRvd0JpdHNgCiAqIC0gYGRpY3Rpb25hcnlgCiAqCiAqIFtodHRwOi8vemxpYi5uZXQvbWFudWFsLmh0bWwjQWR2YW5jZWRdKGh0dHA6Ly96" + "bGliLm5ldC9tYW51YWwuaHRtbCNBZHZhbmNlZCkKICogZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlc2UuCiAqCiAqIEFkZGl0aW9uYWwgb3B0aW9ucywgZm9yIGludGVybmFsIG5lZWRzOgogKgogKiAtIGBj" + "aHVua1NpemVgIC0gc2l6ZSBvZiBnZW5lcmF0ZWQgZGF0YSBjaHVua3MgKDE2SyBieSBkZWZhdWx0KQogKiAtIGByYXdgIChCb29sZWFuKSAtIGRvIHJhdyBpbmZsYXRlCiAqIC0gYHRvYCAoU3RyaW5nKSAtIGlm" + "IGVxdWFsIHRvICdzdHJpbmcnLCB0aGVuIHJlc3VsdCB3aWxsIGJlIGNvbnZlcnRlZAogKiAgIGZyb20gdXRmOCB0byB1dGYxNiAoamF2YXNjcmlwdCkgc3RyaW5nLiBXaGVuIHN0cmluZyBvdXRwdXQgcmVxdWVz" + "dGVkLAogKiAgIGNodW5rIGxlbmd0aCBjYW4gZGlmZmVyIGZyb20gYGNodW5rU2l6ZWAsIGRlcGVuZGluZyBvbiBjb250ZW50LgogKgogKiBCeSBkZWZhdWx0LCB3aGVuIG5vIG9wdGlvbnMgc2V0LCBhdXRvZGV0" + "ZWN0IGRlZmxhdGUvZ3ppcCBkYXRhIGZvcm1hdCB2aWEKICogd3JhcHBlciBoZWFkZXIuCiAqCiAqICMjIyMjIEV4YW1wbGU6CiAqCiAqIGBgYGphdmFzY3JpcHQKICogdmFyIHBha28gPSByZXF1aXJlKCdwYWtv" + "JykKICogICAsIGNodW5rMSA9IFVpbnQ4QXJyYXkoWzEsMiwzLDQsNSw2LDcsOCw5XSkKICogICAsIGNodW5rMiA9IFVpbnQ4QXJyYXkoWzEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5XSk7CiAqCiAqIHZh" + "ciBpbmZsYXRlID0gbmV3IHBha28uSW5mbGF0ZSh7IGxldmVsOiAzfSk7CiAqCiAqIGluZmxhdGUucHVzaChjaHVuazEsIGZhbHNlKTsKICogaW5mbGF0ZS5wdXNoKGNodW5rMiwgdHJ1ZSk7ICAvLyB0cnVlIC0+" + "IGxhc3QgY2h1bmsKICoKICogaWYgKGluZmxhdGUuZXJyKSB7IHRocm93IG5ldyBFcnJvcihpbmZsYXRlLmVycik7IH0KICoKICogY29uc29sZS5sb2coaW5mbGF0ZS5yZXN1bHQpOwogKiBgYGAKICoqLwpmdW5j" + "dGlvbiBJbmZsYXRlKG9wdGlvbnMpIHsKICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSW5mbGF0ZSkpIHJldHVybiBuZXcgSW5mbGF0ZShvcHRpb25zKTsKCiAgdGhpcy5vcHRpb25zID0gdXRpbHMuYXNzaWduKHsK" + "ICAgIGNodW5rU2l6ZTogMTYzODQsCiAgICB3aW5kb3dCaXRzOiAwLAogICAgdG86ICcnCiAgfSwgb3B0aW9ucyB8fCB7fSk7CgogIHZhciBvcHQgPSB0aGlzLm9wdGlvbnM7CgogIC8vIEZvcmNlIHdpbmRvdyBz" + "aXplIGZvciBgcmF3YCBkYXRhLCBpZiBub3Qgc2V0IGRpcmVjdGx5LAogIC8vIGJlY2F1c2Ugd2UgaGF2ZSBubyBoZWFkZXIgZm9yIGF1dG9kZXRlY3QuCiAgaWYgKG9wdC5yYXcgJiYgKG9wdC53aW5kb3dCaXRz" + "ID49IDApICYmIChvcHQud2luZG93Qml0cyA8IDE2KSkgewogICAgb3B0LndpbmRvd0JpdHMgPSAtb3B0LndpbmRvd0JpdHM7CiAgICBpZiAob3B0LndpbmRvd0JpdHMgPT09IDApIHsgb3B0LndpbmRvd0JpdHMg" + "PSAtMTU7IH0KICB9CgogIC8vIElmIGB3aW5kb3dCaXRzYCBub3QgZGVmaW5lZCAoYW5kIG1vZGUgbm90IHJhdykgLSBzZXQgYXV0b2RldGVjdCBmbGFnIGZvciBnemlwL2RlZmxhdGUKICBpZiAoKG9wdC53aW5k" + "b3dCaXRzID49IDApICYmIChvcHQud2luZG93Qml0cyA8IDE2KSAmJgogICAgICAhKG9wdGlvbnMgJiYgb3B0aW9ucy53aW5kb3dCaXRzKSkgewogICAgb3B0LndpbmRvd0JpdHMgKz0gMzI7CiAgfQoKICAvLyBH" + "emlwIGhlYWRlciBoYXMgbm8gaW5mbyBhYm91dCB3aW5kb3dzIHNpemUsIHdlIGNhbiBkbyBhdXRvZGV0ZWN0IG9ubHkKICAvLyBmb3IgZGVmbGF0ZS4gU28sIGlmIHdpbmRvdyBzaXplIG5vdCBzZXQsIGZvcmNl" + "IGl0IHRvIG1heCB3aGVuIGd6aXAgcG9zc2libGUKICBpZiAoKG9wdC53aW5kb3dCaXRzID4gMTUpICYmIChvcHQud2luZG93Qml0cyA8IDQ4KSkgewogICAgLy8gYml0IDMgKDE2KSAtPiBnemlwcGVkIGRhdGEK" + "ICAgIC8vIGJpdCA0ICgzMikgLT4gYXV0b2RldGVjdCBnemlwL2RlZmxhdGUKICAgIGlmICgob3B0LndpbmRvd0JpdHMgJiAxNSkgPT09IDApIHsKICAgICAgb3B0LndpbmRvd0JpdHMgfD0gMTU7CiAgICB9CiAg" + "fQoKICB0aGlzLmVyciAgICA9IDA7ICAgICAgLy8gZXJyb3IgY29kZSwgaWYgaGFwcGVucyAoMCA9IFpfT0spCiAgdGhpcy5tc2cgICAgPSAnJzsgICAgIC8vIGVycm9yIG1lc3NhZ2UKICB0aGlzLmVuZGVkICA9" + "IGZhbHNlOyAgLy8gdXNlZCB0byBhdm9pZCBtdWx0aXBsZSBvbkVuZCgpIGNhbGxzCiAgdGhpcy5jaHVua3MgPSBbXTsgICAgIC8vIGNodW5rcyBvZiBjb21wcmVzc2VkIGRhdGEKCiAgdGhpcy5zdHJtICAgPSBu" + "ZXcgWlN0cmVhbSgpOwogIHRoaXMuc3RybS5hdmFpbF9vdXQgPSAwOwoKICB2YXIgc3RhdHVzICA9IHpsaWJfaW5mbGF0ZS5pbmZsYXRlSW5pdDIoCiAgICB0aGlzLnN0cm0sCiAgICBvcHQud2luZG93Qml0cwog" + "ICk7CgogIGlmIChzdGF0dXMgIT09IGMuWl9PSykgewogICAgdGhyb3cgbmV3IEVycm9yKG1zZ1tzdGF0dXNdKTsKICB9CgogIHRoaXMuaGVhZGVyID0gbmV3IEdaaGVhZGVyKCk7CgogIHpsaWJfaW5mbGF0ZS5p" + "bmZsYXRlR2V0SGVhZGVyKHRoaXMuc3RybSwgdGhpcy5oZWFkZXIpOwp9CgovKioKICogSW5mbGF0ZSNwdXNoKGRhdGFbLCBtb2RlXSkgLT4gQm9vbGVhbgogKiAtIGRhdGEgKFVpbnQ4QXJyYXl8QXJyYXl8QXJy" + "YXlCdWZmZXJ8U3RyaW5nKTogaW5wdXQgZGF0YQogKiAtIG1vZGUgKE51bWJlcnxCb29sZWFuKTogMC4uNiBmb3IgY29ycmVzcG9uZGluZyBaX05PX0ZMVVNILi5aX1RSRUUgbW9kZXMuCiAqICAgU2VlIGNvbnN0" + "YW50cy4gU2tpcHBlZCBvciBgZmFsc2VgIG1lYW5zIFpfTk9fRkxVU0gsIGB0cnVlYCBtZWFuc2ggWl9GSU5JU0guCiAqCiAqIFNlbmRzIGlucHV0IGRhdGEgdG8gaW5mbGF0ZSBwaXBlLCBnZW5lcmF0aW5nIFtb" + "SW5mbGF0ZSNvbkRhdGFdXSBjYWxscyB3aXRoCiAqIG5ldyBvdXRwdXQgY2h1bmtzLiBSZXR1cm5zIGB0cnVlYCBvbiBzdWNjZXNzLiBUaGUgbGFzdCBkYXRhIGJsb2NrIG11c3QgaGF2ZQogKiBtb2RlIFpfRklO" + "SVNIIChvciBgdHJ1ZWApLiBUaGF0IHdpbGwgZmx1c2ggaW50ZXJuYWwgcGVuZGluZyBidWZmZXJzIGFuZCBjYWxsCiAqIFtbSW5mbGF0ZSNvbkVuZF1dLiBGb3IgaW50ZXJpbSBleHBsaWNpdCBmbHVzaGVzICh3" + "aXRob3V0IGVuZGluZyB0aGUgc3RyZWFtKSB5b3UKICogY2FuIHVzZSBtb2RlIFpfU1lOQ19GTFVTSCwga2VlcGluZyB0aGUgZGVjb21wcmVzc2lvbiBjb250ZXh0LgogKgogKiBPbiBmYWlsIGNhbGwgW1tJbmZs" + "YXRlI29uRW5kXV0gd2l0aCBlcnJvciBjb2RlIGFuZCByZXR1cm4gZmFsc2UuCiAqCiAqIFdlIHN0cm9uZ2x5IHJlY29tbWVuZCB0byB1c2UgYFVpbnQ4QXJyYXlgIG9uIGlucHV0IGZvciBiZXN0IHNwZWVkIChv" + "dXRwdXQKICogZm9ybWF0IGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHkpLiBBbHNvLCBkb24ndCBza2lwIGxhc3QgcGFyYW0gYW5kIGFsd2F5cwogKiB1c2UgdGhlIHNhbWUgdHlwZSBpbiB5b3VyIGNvZGUgKGJv" + "b2xlYW4gb3IgbnVtYmVyKS4gVGhhdCB3aWxsIGltcHJvdmUgSlMgc3BlZWQuCiAqCiAqIEZvciByZWd1bGFyIGBBcnJheWAtcyBtYWtlIHN1cmUgYWxsIGVsZW1lbnRzIGFyZSBbMC4uMjU1XS4KICoKICogIyMj" + "IyMgRXhhbXBsZQogKgogKiBgYGBqYXZhc2NyaXB0CiAqIHB1c2goY2h1bmssIGZhbHNlKTsgLy8gcHVzaCBvbmUgb2YgZGF0YSBjaHVua3MKICogLi4uCiAqIHB1c2goY2h1bmssIHRydWUpOyAgLy8gcHVzaCBs" + "YXN0IGNodW5rCiAqIGBgYAogKiovCkluZmxhdGUucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgbW9kZSkgewogIHZhciBzdHJtID0gdGhpcy5zdHJtOwogIHZhciBjaHVua1NpemUgPSB0aGlzLm9w" + "dGlvbnMuY2h1bmtTaXplOwogIHZhciBkaWN0aW9uYXJ5ID0gdGhpcy5vcHRpb25zLmRpY3Rpb25hcnk7CiAgdmFyIHN0YXR1cywgX21vZGU7CiAgdmFyIG5leHRfb3V0X3V0ZjgsIHRhaWwsIHV0ZjhzdHI7CiAg" + "dmFyIGRpY3Q7CgogIC8vIEZsYWcgdG8gcHJvcGVybHkgcHJvY2VzcyBaX0JVRl9FUlJPUiBvbiB0ZXN0aW5nIGluZmxhdGUgY2FsbAogIC8vIHdoZW4gd2UgY2hlY2sgdGhhdCBhbGwgb3V0cHV0IGRhdGEgd2Fz" + "IGZsdXNoZWQuCiAgdmFyIGFsbG93QnVmRXJyb3IgPSBmYWxzZTsKCiAgaWYgKHRoaXMuZW5kZWQpIHsgcmV0dXJuIGZhbHNlOyB9CiAgX21vZGUgPSAobW9kZSA9PT0gfn5tb2RlKSA/IG1vZGUgOiAoKG1vZGUg" + "PT09IHRydWUpID8gYy5aX0ZJTklTSCA6IGMuWl9OT19GTFVTSCk7CgogIC8vIENvbnZlcnQgZGF0YSBpZiBuZWVkZWQKICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7CiAgICAvLyBPbmx5IGJpbmFy" + "eSBzdHJpbmdzIGNhbiBiZSBkZWNvbXByZXNzZWQgb24gcHJhY3RpY2UKICAgIHN0cm0uaW5wdXQgPSBzdHJpbmdzLmJpbnN0cmluZzJidWYoZGF0YSk7CiAgfSBlbHNlIGlmICh0b1N0cmluZy5jYWxsKGRhdGEp" + "ID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nKSB7CiAgICBzdHJtLmlucHV0ID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7CiAgfSBlbHNlIHsKICAgIHN0cm0uaW5wdXQgPSBkYXRhOwogIH0KCiAgc3RybS5uZXh0" + "X2luID0gMDsKICBzdHJtLmF2YWlsX2luID0gc3RybS5pbnB1dC5sZW5ndGg7CgogIGRvIHsKICAgIGlmIChzdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICBzdHJtLm91dHB1dCA9IG5ldyB1dGlscy5CdWY4" + "KGNodW5rU2l6ZSk7CiAgICAgIHN0cm0ubmV4dF9vdXQgPSAwOwogICAgICBzdHJtLmF2YWlsX291dCA9IGNodW5rU2l6ZTsKICAgIH0KCiAgICBzdGF0dXMgPSB6bGliX2luZmxhdGUuaW5mbGF0ZShzdHJtLCBj" + "LlpfTk9fRkxVU0gpOyAgICAvKiBubyBiYWQgcmV0dXJuIHZhbHVlICovCgogICAgaWYgKHN0YXR1cyA9PT0gYy5aX05FRURfRElDVCAmJiBkaWN0aW9uYXJ5KSB7CiAgICAgIC8vIENvbnZlcnQgZGF0YSBpZiBu" + "ZWVkZWQKICAgICAgaWYgKHR5cGVvZiBkaWN0aW9uYXJ5ID09PSAnc3RyaW5nJykgewogICAgICAgIGRpY3QgPSBzdHJpbmdzLnN0cmluZzJidWYoZGljdGlvbmFyeSk7CiAgICAgIH0gZWxzZSBpZiAodG9TdHJp" + "bmcuY2FsbChkaWN0aW9uYXJ5KSA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJykgewogICAgICAgIGRpY3QgPSBuZXcgVWludDhBcnJheShkaWN0aW9uYXJ5KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBkaWN0" + "ID0gZGljdGlvbmFyeTsKICAgICAgfQoKICAgICAgc3RhdHVzID0gemxpYl9pbmZsYXRlLmluZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSwgZGljdCk7CgogICAgfQoKICAgIGlmIChzdGF0dXMgPT09IGMu" + "Wl9CVUZfRVJST1IgJiYgYWxsb3dCdWZFcnJvciA9PT0gdHJ1ZSkgewogICAgICBzdGF0dXMgPSBjLlpfT0s7CiAgICAgIGFsbG93QnVmRXJyb3IgPSBmYWxzZTsKICAgIH0KCiAgICBpZiAoc3RhdHVzICE9PSBj" + "LlpfU1RSRUFNX0VORCAmJiBzdGF0dXMgIT09IGMuWl9PSykgewogICAgICB0aGlzLm9uRW5kKHN0YXR1cyk7CiAgICAgIHRoaXMuZW5kZWQgPSB0cnVlOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAg" + "aWYgKHN0cm0ubmV4dF9vdXQpIHsKICAgICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwIHx8IHN0YXR1cyA9PT0gYy5aX1NUUkVBTV9FTkQgfHwgKHN0cm0uYXZhaWxfaW4gPT09IDAgJiYgKF9tb2RlID09PSBj" + "LlpfRklOSVNIIHx8IF9tb2RlID09PSBjLlpfU1lOQ19GTFVTSCkpKSB7CgogICAgICAgIGlmICh0aGlzLm9wdGlvbnMudG8gPT09ICdzdHJpbmcnKSB7CgogICAgICAgICAgbmV4dF9vdXRfdXRmOCA9IHN0cmlu" + "Z3MudXRmOGJvcmRlcihzdHJtLm91dHB1dCwgc3RybS5uZXh0X291dCk7CgogICAgICAgICAgdGFpbCA9IHN0cm0ubmV4dF9vdXQgLSBuZXh0X291dF91dGY4OwogICAgICAgICAgdXRmOHN0ciA9IHN0cmluZ3Mu" + "YnVmMnN0cmluZyhzdHJtLm91dHB1dCwgbmV4dF9vdXRfdXRmOCk7CgogICAgICAgICAgLy8gbW92ZSB0YWlsCiAgICAgICAgICBzdHJtLm5leHRfb3V0ID0gdGFpbDsKICAgICAgICAgIHN0cm0uYXZhaWxfb3V0" + "ID0gY2h1bmtTaXplIC0gdGFpbDsKICAgICAgICAgIGlmICh0YWlsKSB7IHV0aWxzLmFycmF5U2V0KHN0cm0ub3V0cHV0LCBzdHJtLm91dHB1dCwgbmV4dF9vdXRfdXRmOCwgdGFpbCwgMCk7IH0KCiAgICAgICAg" + "ICB0aGlzLm9uRGF0YSh1dGY4c3RyKTsKCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMub25EYXRhKHV0aWxzLnNocmlua0J1ZihzdHJtLm91dHB1dCwgc3RybS5uZXh0X291dCkpOwogICAgICAgIH0K" + "ICAgICAgfQogICAgfQoKICAgIC8vIFdoZW4gbm8gbW9yZSBpbnB1dCBkYXRhLCB3ZSBzaG91bGQgY2hlY2sgdGhhdCBpbnRlcm5hbCBpbmZsYXRlIGJ1ZmZlcnMKICAgIC8vIGFyZSBmbHVzaGVkLiBUaGUgb25s" + "eSB3YXkgdG8gZG8gaXQgd2hlbiBhdmFpbF9vdXQgPSAwIC0gcnVuIG9uZSBtb3JlCiAgICAvLyBpbmZsYXRlIHBhc3MuIEJ1dCBpZiBvdXRwdXQgZGF0YSBub3QgZXhpc3RzLCBpbmZsYXRlIHJldHVybiBaX0JV" + "Rl9FUlJPUi4KICAgIC8vIEhlcmUgd2Ugc2V0IGZsYWcgdG8gcHJvY2VzcyB0aGlzIGVycm9yIHByb3Blcmx5LgogICAgLy8KICAgIC8vIE5PVEUuIERlZmxhdGUgZG9lcyBub3QgcmV0dXJuIGVycm9yIGluIHRo" + "aXMgY2FzZSBhbmQgZG9lcyBub3QgbmVlZHMgc3VjaAogICAgLy8gbG9naWMuCiAgICBpZiAoc3RybS5hdmFpbF9pbiA9PT0gMCAmJiBzdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICBhbGxvd0J1ZkVycm9y" + "ID0gdHJ1ZTsKICAgIH0KCiAgfSB3aGlsZSAoKHN0cm0uYXZhaWxfaW4gPiAwIHx8IHN0cm0uYXZhaWxfb3V0ID09PSAwKSAmJiBzdGF0dXMgIT09IGMuWl9TVFJFQU1fRU5EKTsKCiAgaWYgKHN0YXR1cyA9PT0g" + "Yy5aX1NUUkVBTV9FTkQpIHsKICAgIF9tb2RlID0gYy5aX0ZJTklTSDsKICB9CgogIC8vIEZpbmFsaXplIG9uIHRoZSBsYXN0IGNodW5rLgogIGlmIChfbW9kZSA9PT0gYy5aX0ZJTklTSCkgewogICAgc3RhdHVz" + "ID0gemxpYl9pbmZsYXRlLmluZmxhdGVFbmQodGhpcy5zdHJtKTsKICAgIHRoaXMub25FbmQoc3RhdHVzKTsKICAgIHRoaXMuZW5kZWQgPSB0cnVlOwogICAgcmV0dXJuIHN0YXR1cyA9PT0gYy5aX09LOwogIH0K" + "CiAgLy8gY2FsbGJhY2sgaW50ZXJpbSByZXN1bHRzIGlmIFpfU1lOQ19GTFVTSC4KICBpZiAoX21vZGUgPT09IGMuWl9TWU5DX0ZMVVNIKSB7CiAgICB0aGlzLm9uRW5kKGMuWl9PSyk7CiAgICBzdHJtLmF2YWls" + "X291dCA9IDA7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIHJldHVybiB0cnVlOwp9OwoKCi8qKgogKiBJbmZsYXRlI29uRGF0YShjaHVuaykgLT4gVm9pZAogKiAtIGNodW5rIChVaW50OEFycmF5fEFycmF5fFN0" + "cmluZyk6IG91cHV0IGRhdGEuIFR5cGUgb2YgYXJyYXkgZGVwZW5kcwogKiAgIG9uIGpzIGVuZ2luZSBzdXBwb3J0LiBXaGVuIHN0cmluZyBvdXRwdXQgcmVxdWVzdGVkLCBlYWNoIGNodW5rCiAqICAgd2lsbCBi" + "ZSBzdHJpbmcuCiAqCiAqIEJ5IGRlZmF1bHQsIHN0b3JlcyBkYXRhIGJsb2NrcyBpbiBgY2h1bmtzW11gIHByb3BlcnR5IGFuZCBnbHVlCiAqIHRob3NlIGluIGBvbkVuZGAuIE92ZXJyaWRlIHRoaXMgaGFuZGxl" + "ciwgaWYgeW91IG5lZWQgYW5vdGhlciBiZWhhdmlvdXIuCiAqKi8KSW5mbGF0ZS5wcm90b3R5cGUub25EYXRhID0gZnVuY3Rpb24gKGNodW5rKSB7CiAgdGhpcy5jaHVua3MucHVzaChjaHVuayk7Cn07CgoKLyoq" + "CiAqIEluZmxhdGUjb25FbmQoc3RhdHVzKSAtPiBWb2lkCiAqIC0gc3RhdHVzIChOdW1iZXIpOiBpbmZsYXRlIHN0YXR1cy4gMCAoWl9PSykgb24gc3VjY2VzcywKICogICBvdGhlciBpZiBub3QuCiAqCiAqIENh" + "bGxlZCBlaXRoZXIgYWZ0ZXIgeW91IHRlbGwgaW5mbGF0ZSB0aGF0IHRoZSBpbnB1dCBzdHJlYW0gaXMKICogY29tcGxldGUgKFpfRklOSVNIKSBvciBzaG91bGQgYmUgZmx1c2hlZCAoWl9TWU5DX0ZMVVNIKQog" + "KiBvciBpZiBhbiBlcnJvciBoYXBwZW5lZC4gQnkgZGVmYXVsdCAtIGpvaW4gY29sbGVjdGVkIGNodW5rcywKICogZnJlZSBtZW1vcnkgYW5kIGZpbGwgYHJlc3VsdHNgIC8gYGVycmAgcHJvcGVydGllcy4KICoq" + "LwpJbmZsYXRlLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uIChzdGF0dXMpIHsKICAvLyBPbiBzdWNjZXNzIC0gam9pbgogIGlmIChzdGF0dXMgPT09IGMuWl9PSykgewogICAgaWYgKHRoaXMub3B0aW9ucy50" + "byA9PT0gJ3N0cmluZycpIHsKICAgICAgLy8gR2x1ZSAmIGNvbnZlcnQgaGVyZSwgdW50aWwgd2UgdGVhY2ggcGFrbyB0byBzZW5kCiAgICAgIC8vIHV0ZjggYWxsaWduZWQgc3RyaW5ncyB0byBvbkRhdGEKICAg" + "ICAgdGhpcy5yZXN1bHQgPSB0aGlzLmNodW5rcy5qb2luKCcnKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMucmVzdWx0ID0gdXRpbHMuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcyk7CiAgICB9CiAgfQogIHRo" + "aXMuY2h1bmtzID0gW107CiAgdGhpcy5lcnIgPSBzdGF0dXM7CiAgdGhpcy5tc2cgPSB0aGlzLnN0cm0ubXNnOwp9OwoKCi8qKgogKiBpbmZsYXRlKGRhdGFbLCBvcHRpb25zXSkgLT4gVWludDhBcnJheXxBcnJh" + "eXxTdHJpbmcKICogLSBkYXRhIChVaW50OEFycmF5fEFycmF5fFN0cmluZyk6IGlucHV0IGRhdGEgdG8gZGVjb21wcmVzcy4KICogLSBvcHRpb25zIChPYmplY3QpOiB6bGliIGluZmxhdGUgb3B0aW9ucy4KICoK" + "ICogRGVjb21wcmVzcyBgZGF0YWAgd2l0aCBpbmZsYXRlL3VuZ3ppcCBhbmQgYG9wdGlvbnNgLiBBdXRvZGV0ZWN0CiAqIGZvcm1hdCB2aWEgd3JhcHBlciBoZWFkZXIgYnkgZGVmYXVsdC4gVGhhdCdzIHdoeSB3" + "ZSBkb24ndCBwcm92aWRlCiAqIHNlcGFyYXRlIGB1bmd6aXBgIG1ldGhvZC4KICoKICogU3VwcG9ydGVkIG9wdGlvbnMgYXJlOgogKgogKiAtIHdpbmRvd0JpdHMKICoKICogW2h0dHA6Ly96bGliLm5ldC9tYW51" + "YWwuaHRtbCNBZHZhbmNlZF0oaHR0cDovL3psaWIubmV0L21hbnVhbC5odG1sI0FkdmFuY2VkKQogKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICoKICogU3VnYXIgKG9wdGlvbnMpOgogKgogKiAtIGByYXdgIChC" + "b29sZWFuKSAtIHNheSB0aGF0IHdlIHdvcmsgd2l0aCByYXcgc3RyZWFtLCBpZiB5b3UgZG9uJ3Qgd2lzaCB0byBzcGVjaWZ5CiAqICAgbmVnYXRpdmUgd2luZG93Qml0cyBpbXBsaWNpdGx5LgogKiAtIGB0b2Ag" + "KFN0cmluZykgLSBpZiBlcXVhbCB0byAnc3RyaW5nJywgdGhlbiByZXN1bHQgd2lsbCBiZSBjb252ZXJ0ZWQKICogICBmcm9tIHV0ZjggdG8gdXRmMTYgKGphdmFzY3JpcHQpIHN0cmluZy4gV2hlbiBzdHJpbmcg" + "b3V0cHV0IHJlcXVlc3RlZCwKICogICBjaHVuayBsZW5ndGggY2FuIGRpZmZlciBmcm9tIGBjaHVua1NpemVgLCBkZXBlbmRpbmcgb24gY29udGVudC4KICoKICoKICogIyMjIyMgRXhhbXBsZToKICoKICogYGBg" + "amF2YXNjcmlwdAogKiB2YXIgcGFrbyA9IHJlcXVpcmUoJ3Bha28nKQogKiAgICwgaW5wdXQgPSBwYWtvLmRlZmxhdGUoWzEsMiwzLDQsNSw2LDcsOCw5XSkKICogICAsIG91dHB1dDsKICoKICogdHJ5IHsKICog" + "ICBvdXRwdXQgPSBwYWtvLmluZmxhdGUoaW5wdXQpOwogKiB9IGNhdGNoIChlcnIpCiAqICAgY29uc29sZS5sb2coZXJyKTsKICogfQogKiBgYGAKICoqLwpmdW5jdGlvbiBpbmZsYXRlKGlucHV0LCBvcHRpb25z" + "KSB7CiAgdmFyIGluZmxhdG9yID0gbmV3IEluZmxhdGUob3B0aW9ucyk7CgogIGluZmxhdG9yLnB1c2goaW5wdXQsIHRydWUpOwoKICAvLyBUaGF0IHdpbGwgbmV2ZXIgaGFwcGVucywgaWYgeW91IGRvbid0IGNo" + "ZWF0IHdpdGggb3B0aW9ucyA6KQogIGlmIChpbmZsYXRvci5lcnIpIHsgdGhyb3cgaW5mbGF0b3IubXNnIHx8IG1zZ1tpbmZsYXRvci5lcnJdOyB9CgogIHJldHVybiBpbmZsYXRvci5yZXN1bHQ7Cn0KCgovKioK" + "ICogaW5mbGF0ZVJhdyhkYXRhWywgb3B0aW9uc10pIC0+IFVpbnQ4QXJyYXl8QXJyYXl8U3RyaW5nCiAqIC0gZGF0YSAoVWludDhBcnJheXxBcnJheXxTdHJpbmcpOiBpbnB1dCBkYXRhIHRvIGRlY29tcHJlc3Mu" + "CiAqIC0gb3B0aW9ucyAoT2JqZWN0KTogemxpYiBpbmZsYXRlIG9wdGlvbnMuCiAqCiAqIFRoZSBzYW1lIGFzIFtbaW5mbGF0ZV1dLCBidXQgY3JlYXRlcyByYXcgZGF0YSwgd2l0aG91dCB3cmFwcGVyCiAqICho" + "ZWFkZXIgYW5kIGFkbGVyMzIgY3JjKS4KICoqLwpmdW5jdGlvbiBpbmZsYXRlUmF3KGlucHV0LCBvcHRpb25zKSB7CiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgb3B0aW9ucy5yYXcgPSB0cnVlOwogIHJl" + "dHVybiBpbmZsYXRlKGlucHV0LCBvcHRpb25zKTsKfQoKCi8qKgogKiB1bmd6aXAoZGF0YVssIG9wdGlvbnNdKSAtPiBVaW50OEFycmF5fEFycmF5fFN0cmluZwogKiAtIGRhdGEgKFVpbnQ4QXJyYXl8QXJyYXl8" + "U3RyaW5nKTogaW5wdXQgZGF0YSB0byBkZWNvbXByZXNzLgogKiAtIG9wdGlvbnMgKE9iamVjdCk6IHpsaWIgaW5mbGF0ZSBvcHRpb25zLgogKgogKiBKdXN0IHNob3J0Y3V0IHRvIFtbaW5mbGF0ZV1dLCBiZWNh" + "dXNlIGl0IGF1dG9kZXRlY3RzIGZvcm1hdAogKiBieSBoZWFkZXIuY29udGVudC4gRG9uZSBmb3IgY29udmVuaWVuY2UuCiAqKi8KCgpleHBvcnRzLkluZmxhdGUgPSBJbmZsYXRlOwpleHBvcnRzLmluZmxhdGUg" + "PSBpbmZsYXRlOwpleHBvcnRzLmluZmxhdGVSYXcgPSBpbmZsYXRlUmF3OwpleHBvcnRzLnVuZ3ppcCAgPSBpbmZsYXRlOwoKfSx7Ii4vdXRpbHMvY29tbW9uIjo0MSwiLi91dGlscy9zdHJpbmdzIjo0MiwiLi96" + "bGliL2NvbnN0YW50cyI6NDQsIi4vemxpYi9nemhlYWRlciI6NDcsIi4vemxpYi9pbmZsYXRlIjo0OSwiLi96bGliL21lc3NhZ2VzIjo1MSwiLi96bGliL3pzdHJlYW0iOjUzfV0sNDE6W2Z1bmN0aW9uKHJlcXVp" + "cmUsbW9kdWxlLGV4cG9ydHMpewondXNlIHN0cmljdCc7CgoKdmFyIFRZUEVEX09LID0gICh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcpICYmCiAgICAgICAgICAgICAgICAodHlwZW9mIFVpbnQx" + "NkFycmF5ICE9PSAndW5kZWZpbmVkJykgJiYKICAgICAgICAgICAgICAgICh0eXBlb2YgSW50MzJBcnJheSAhPT0gJ3VuZGVmaW5lZCcpOwoKCmV4cG9ydHMuYXNzaWduID0gZnVuY3Rpb24gKG9iaiAvKmZyb20x" + "LCBmcm9tMiwgZnJvbTMsIC4uLiovKSB7CiAgdmFyIHNvdXJjZXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOwogIHdoaWxlIChzb3VyY2VzLmxlbmd0aCkgewogICAgdmFyIHNv" + "dXJjZSA9IHNvdXJjZXMuc2hpZnQoKTsKICAgIGlmICghc291cmNlKSB7IGNvbnRpbnVlOyB9CgogICAgaWYgKHR5cGVvZiBzb3VyY2UgIT09ICdvYmplY3QnKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3Io" + "c291cmNlICsgJ211c3QgYmUgbm9uLW9iamVjdCcpOwogICAgfQoKICAgIGZvciAodmFyIHAgaW4gc291cmNlKSB7CiAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkocCkpIHsKICAgICAgICBvYmpbcF0g" + "PSBzb3VyY2VbcF07CiAgICAgIH0KICAgIH0KICB9CgogIHJldHVybiBvYmo7Cn07CgoKLy8gcmVkdWNlIGJ1ZmZlciBzaXplLCBhdm9pZGluZyBtZW0gY29weQpleHBvcnRzLnNocmlua0J1ZiA9IGZ1bmN0aW9u" + "IChidWYsIHNpemUpIHsKICBpZiAoYnVmLmxlbmd0aCA9PT0gc2l6ZSkgeyByZXR1cm4gYnVmOyB9CiAgaWYgKGJ1Zi5zdWJhcnJheSkgeyByZXR1cm4gYnVmLnN1YmFycmF5KDAsIHNpemUpOyB9CiAgYnVmLmxl" + "bmd0aCA9IHNpemU7CiAgcmV0dXJuIGJ1ZjsKfTsKCgp2YXIgZm5UeXBlZCA9IHsKICBhcnJheVNldDogZnVuY3Rpb24gKGRlc3QsIHNyYywgc3JjX29mZnMsIGxlbiwgZGVzdF9vZmZzKSB7CiAgICBpZiAoc3Jj" + "LnN1YmFycmF5ICYmIGRlc3Quc3ViYXJyYXkpIHsKICAgICAgZGVzdC5zZXQoc3JjLnN1YmFycmF5KHNyY19vZmZzLCBzcmNfb2ZmcyArIGxlbiksIGRlc3Rfb2Zmcyk7CiAgICAgIHJldHVybjsKICAgIH0KICAg" + "IC8vIEZhbGxiYWNrIHRvIG9yZGluYXJ5IGFycmF5CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIGRlc3RbZGVzdF9vZmZzICsgaV0gPSBzcmNbc3JjX29mZnMgKyBpXTsKICAgIH0K" + "ICB9LAogIC8vIEpvaW4gYXJyYXkgb2YgY2h1bmtzIHRvIHNpbmdsZSBhcnJheS4KICBmbGF0dGVuQ2h1bmtzOiBmdW5jdGlvbiAoY2h1bmtzKSB7CiAgICB2YXIgaSwgbCwgbGVuLCBwb3MsIGNodW5rLCByZXN1" + "bHQ7CgogICAgLy8gY2FsY3VsYXRlIGRhdGEgbGVuZ3RoCiAgICBsZW4gPSAwOwogICAgZm9yIChpID0gMCwgbCA9IGNodW5rcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgbGVuICs9IGNodW5rc1tpXS5s" + "ZW5ndGg7CiAgICB9CgogICAgLy8gam9pbiBjaHVua3MKICAgIHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGxlbik7CiAgICBwb3MgPSAwOwogICAgZm9yIChpID0gMCwgbCA9IGNodW5rcy5sZW5ndGg7IGkgPCBs" + "OyBpKyspIHsKICAgICAgY2h1bmsgPSBjaHVua3NbaV07CiAgICAgIHJlc3VsdC5zZXQoY2h1bmssIHBvcyk7CiAgICAgIHBvcyArPSBjaHVuay5sZW5ndGg7CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9" + "Cn07Cgp2YXIgZm5VbnR5cGVkID0gewogIGFycmF5U2V0OiBmdW5jdGlvbiAoZGVzdCwgc3JjLCBzcmNfb2ZmcywgbGVuLCBkZXN0X29mZnMpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsK" + "ICAgICAgZGVzdFtkZXN0X29mZnMgKyBpXSA9IHNyY1tzcmNfb2ZmcyArIGldOwogICAgfQogIH0sCiAgLy8gSm9pbiBhcnJheSBvZiBjaHVua3MgdG8gc2luZ2xlIGFycmF5LgogIGZsYXR0ZW5DaHVua3M6IGZ1" + "bmN0aW9uIChjaHVua3MpIHsKICAgIHJldHVybiBbXS5jb25jYXQuYXBwbHkoW10sIGNodW5rcyk7CiAgfQp9OwoKCi8vIEVuYWJsZS9EaXNhYmxlIHR5cGVkIGFycmF5cyB1c2UsIGZvciB0ZXN0aW5nCi8vCmV4" + "cG9ydHMuc2V0VHlwZWQgPSBmdW5jdGlvbiAob24pIHsKICBpZiAob24pIHsKICAgIGV4cG9ydHMuQnVmOCAgPSBVaW50OEFycmF5OwogICAgZXhwb3J0cy5CdWYxNiA9IFVpbnQxNkFycmF5OwogICAgZXhwb3J0" + "cy5CdWYzMiA9IEludDMyQXJyYXk7CiAgICBleHBvcnRzLmFzc2lnbihleHBvcnRzLCBmblR5cGVkKTsKICB9IGVsc2UgewogICAgZXhwb3J0cy5CdWY4ICA9IEFycmF5OwogICAgZXhwb3J0cy5CdWYxNiA9IEFy" + "cmF5OwogICAgZXhwb3J0cy5CdWYzMiA9IEFycmF5OwogICAgZXhwb3J0cy5hc3NpZ24oZXhwb3J0cywgZm5VbnR5cGVkKTsKICB9Cn07CgpleHBvcnRzLnNldFR5cGVkKFRZUEVEX09LKTsKCn0se31dLDQyOltm" + "dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLy8gU3RyaW5nIGVuY29kZS9kZWNvZGUgaGVscGVycwondXNlIHN0cmljdCc7CgoKdmFyIHV0aWxzID0gcmVxdWlyZSgnLi9jb21tb24nKTsKCgovLyBR" + "dWljayBjaGVjayBpZiB3ZSBjYW4gdXNlIGZhc3QgYXJyYXkgdG8gYmluIHN0cmluZyBjb252ZXJzaW9uCi8vCi8vIC0gYXBwbHkoQXJyYXkpIGNhbiBmYWlsIG9uIEFuZHJvaWQgMi4yCi8vIC0gYXBwbHkoVWlu" + "dDhBcnJheSkgY2FuIGZhaWwgb24gaU9TIDUuMSBTYWZhcnkKLy8KdmFyIFNUUl9BUFBMWV9PSyA9IHRydWU7CnZhciBTVFJfQVBQTFlfVUlBX09LID0gdHJ1ZTsKCnRyeSB7IFN0cmluZy5mcm9tQ2hhckNvZGUu" + "YXBwbHkobnVsbCwgWyAwIF0pOyB9IGNhdGNoIChfXykgeyBTVFJfQVBQTFlfT0sgPSBmYWxzZTsgfQp0cnkgeyBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIG5ldyBVaW50OEFycmF5KDEpKTsgfSBj" + "YXRjaCAoX18pIHsgU1RSX0FQUExZX1VJQV9PSyA9IGZhbHNlOyB9CgoKLy8gVGFibGUgd2l0aCB1dGY4IGxlbmd0aHMgKGNhbGN1bGF0ZWQgYnkgZmlyc3QgYnl0ZSBvZiBzZXF1ZW5jZSkKLy8gTm90ZSwgdGhh" + "dCA1ICYgNi1ieXRlIHZhbHVlcyBhbmQgc29tZSA0LWJ5dGUgdmFsdWVzIGNhbiBub3QgYmUgcmVwcmVzZW50ZWQgaW4gSlMsCi8vIGJlY2F1c2UgbWF4IHBvc3NpYmxlIGNvZGVwb2ludCBpcyAweDEwZmZmZgp2" + "YXIgX3V0ZjhsZW4gPSBuZXcgdXRpbHMuQnVmOCgyNTYpOwpmb3IgKHZhciBxID0gMDsgcSA8IDI1NjsgcSsrKSB7CiAgX3V0ZjhsZW5bcV0gPSAocSA+PSAyNTIgPyA2IDogcSA+PSAyNDggPyA1IDogcSA+PSAy" + "NDAgPyA0IDogcSA+PSAyMjQgPyAzIDogcSA+PSAxOTIgPyAyIDogMSk7Cn0KX3V0ZjhsZW5bMjU0XSA9IF91dGY4bGVuWzI1NF0gPSAxOyAvLyBJbnZhbGlkIHNlcXVlbmNlIHN0YXJ0CgoKLy8gY29udmVydCBz" + "dHJpbmcgdG8gYXJyYXkgKHR5cGVkLCB3aGVuIHBvc3NpYmxlKQpleHBvcnRzLnN0cmluZzJidWYgPSBmdW5jdGlvbiAoc3RyKSB7CiAgdmFyIGJ1ZiwgYywgYzIsIG1fcG9zLCBpLCBzdHJfbGVuID0gc3RyLmxl" + "bmd0aCwgYnVmX2xlbiA9IDA7CgogIC8vIGNvdW50IGJpbmFyeSBzaXplCiAgZm9yIChtX3BvcyA9IDA7IG1fcG9zIDwgc3RyX2xlbjsgbV9wb3MrKykgewogICAgYyA9IHN0ci5jaGFyQ29kZUF0KG1fcG9zKTsK" + "ICAgIGlmICgoYyAmIDB4ZmMwMCkgPT09IDB4ZDgwMCAmJiAobV9wb3MgKyAxIDwgc3RyX2xlbikpIHsKICAgICAgYzIgPSBzdHIuY2hhckNvZGVBdChtX3BvcyArIDEpOwogICAgICBpZiAoKGMyICYgMHhmYzAw" + "KSA9PT0gMHhkYzAwKSB7CiAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgLSAweGQ4MDApIDw8IDEwKSArIChjMiAtIDB4ZGMwMCk7CiAgICAgICAgbV9wb3MrKzsKICAgICAgfQogICAgfQogICAgYnVmX2xlbiAr" + "PSBjIDwgMHg4MCA/IDEgOiBjIDwgMHg4MDAgPyAyIDogYyA8IDB4MTAwMDAgPyAzIDogNDsKICB9CgogIC8vIGFsbG9jYXRlIGJ1ZmZlcgogIGJ1ZiA9IG5ldyB1dGlscy5CdWY4KGJ1Zl9sZW4pOwoKICAvLyBj" + "b252ZXJ0CiAgZm9yIChpID0gMCwgbV9wb3MgPSAwOyBpIDwgYnVmX2xlbjsgbV9wb3MrKykgewogICAgYyA9IHN0ci5jaGFyQ29kZUF0KG1fcG9zKTsKICAgIGlmICgoYyAmIDB4ZmMwMCkgPT09IDB4ZDgwMCAm" + "JiAobV9wb3MgKyAxIDwgc3RyX2xlbikpIHsKICAgICAgYzIgPSBzdHIuY2hhckNvZGVBdChtX3BvcyArIDEpOwogICAgICBpZiAoKGMyICYgMHhmYzAwKSA9PT0gMHhkYzAwKSB7CiAgICAgICAgYyA9IDB4MTAw" + "MDAgKyAoKGMgLSAweGQ4MDApIDw8IDEwKSArIChjMiAtIDB4ZGMwMCk7CiAgICAgICAgbV9wb3MrKzsKICAgICAgfQogICAgfQogICAgaWYgKGMgPCAweDgwKSB7CiAgICAgIC8qIG9uZSBieXRlICovCiAgICAg" + "IGJ1ZltpKytdID0gYzsKICAgIH0gZWxzZSBpZiAoYyA8IDB4ODAwKSB7CiAgICAgIC8qIHR3byBieXRlcyAqLwogICAgICBidWZbaSsrXSA9IDB4QzAgfCAoYyA+Pj4gNik7CiAgICAgIGJ1ZltpKytdID0gMHg4" + "MCB8IChjICYgMHgzZik7CiAgICB9IGVsc2UgaWYgKGMgPCAweDEwMDAwKSB7CiAgICAgIC8qIHRocmVlIGJ5dGVzICovCiAgICAgIGJ1ZltpKytdID0gMHhFMCB8IChjID4+PiAxMik7CiAgICAgIGJ1ZltpKytd" + "ID0gMHg4MCB8IChjID4+PiA2ICYgMHgzZik7CiAgICAgIGJ1ZltpKytdID0gMHg4MCB8IChjICYgMHgzZik7CiAgICB9IGVsc2UgewogICAgICAvKiBmb3VyIGJ5dGVzICovCiAgICAgIGJ1ZltpKytdID0gMHhm" + "MCB8IChjID4+PiAxOCk7CiAgICAgIGJ1ZltpKytdID0gMHg4MCB8IChjID4+PiAxMiAmIDB4M2YpOwogICAgICBidWZbaSsrXSA9IDB4ODAgfCAoYyA+Pj4gNiAmIDB4M2YpOwogICAgICBidWZbaSsrXSA9IDB4" + "ODAgfCAoYyAmIDB4M2YpOwogICAgfQogIH0KCiAgcmV0dXJuIGJ1ZjsKfTsKCi8vIEhlbHBlciAodXNlZCBpbiAyIHBsYWNlcykKZnVuY3Rpb24gYnVmMmJpbnN0cmluZyhidWYsIGxlbikgewogIC8vIHVzZSBm" + "YWxsYmFjayBmb3IgYmlnIGFycmF5cyB0byBhdm9pZCBzdGFjayBvdmVyZmxvdwogIGlmIChsZW4gPCA2NTUzNykgewogICAgaWYgKChidWYuc3ViYXJyYXkgJiYgU1RSX0FQUExZX1VJQV9PSykgfHwgKCFidWYu" + "c3ViYXJyYXkgJiYgU1RSX0FQUExZX09LKSkgewogICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCB1dGlscy5zaHJpbmtCdWYoYnVmLCBsZW4pKTsKICAgIH0KICB9CgogIHZhciBy" + "ZXN1bHQgPSAnJzsKICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CgoKLy8gQ29u" + "dmVydCBieXRlIGFycmF5IHRvIGJpbmFyeSBzdHJpbmcKZXhwb3J0cy5idWYyYmluc3RyaW5nID0gZnVuY3Rpb24gKGJ1ZikgewogIHJldHVybiBidWYyYmluc3RyaW5nKGJ1ZiwgYnVmLmxlbmd0aCk7Cn07CgoK" + "Ly8gQ29udmVydCBiaW5hcnkgc3RyaW5nICh0eXBlZCwgd2hlbiBwb3NzaWJsZSkKZXhwb3J0cy5iaW5zdHJpbmcyYnVmID0gZnVuY3Rpb24gKHN0cikgewogIHZhciBidWYgPSBuZXcgdXRpbHMuQnVmOChzdHIu" + "bGVuZ3RoKTsKICBmb3IgKHZhciBpID0gMCwgbGVuID0gYnVmLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICBidWZbaV0gPSBzdHIuY2hhckNvZGVBdChpKTsKICB9CiAgcmV0dXJuIGJ1ZjsKfTsKCgovLyBj" + "b252ZXJ0IGFycmF5IHRvIHN0cmluZwpleHBvcnRzLmJ1ZjJzdHJpbmcgPSBmdW5jdGlvbiAoYnVmLCBtYXgpIHsKICB2YXIgaSwgb3V0LCBjLCBjX2xlbjsKICB2YXIgbGVuID0gbWF4IHx8IGJ1Zi5sZW5ndGg7" + "CgogIC8vIFJlc2VydmUgbWF4IHBvc3NpYmxlIGxlbmd0aCAoMiB3b3JkcyBwZXIgY2hhcikKICAvLyBOQjogYnkgdW5rbm93biByZWFzb25zLCBBcnJheSBpcyBzaWduaWZpY2FudGx5IGZhc3RlciBmb3IKICAv" + "LyAgICAgU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseSB0aGFuIFVpbnQxNkFycmF5LgogIHZhciB1dGYxNmJ1ZiA9IG5ldyBBcnJheShsZW4gKiAyKTsKCiAgZm9yIChvdXQgPSAwLCBpID0gMDsgaSA8IGxlbjsp" + "IHsKICAgIGMgPSBidWZbaSsrXTsKICAgIC8vIHF1aWNrIHByb2Nlc3MgYXNjaWkKICAgIGlmIChjIDwgMHg4MCkgeyB1dGYxNmJ1ZltvdXQrK10gPSBjOyBjb250aW51ZTsgfQoKICAgIGNfbGVuID0gX3V0Zjhs" + "ZW5bY107CiAgICAvLyBza2lwIDUgJiA2IGJ5dGUgY29kZXMKICAgIGlmIChjX2xlbiA+IDQpIHsgdXRmMTZidWZbb3V0KytdID0gMHhmZmZkOyBpICs9IGNfbGVuIC0gMTsgY29udGludWU7IH0KCiAgICAvLyBh" + "cHBseSBtYXNrIG9uIGZpcnN0IGJ5dGUKICAgIGMgJj0gY19sZW4gPT09IDIgPyAweDFmIDogY19sZW4gPT09IDMgPyAweDBmIDogMHgwNzsKICAgIC8vIGpvaW4gdGhlIHJlc3QKICAgIHdoaWxlIChjX2xlbiA+" + "IDEgJiYgaSA8IGxlbikgewogICAgICBjID0gKGMgPDwgNikgfCAoYnVmW2krK10gJiAweDNmKTsKICAgICAgY19sZW4tLTsKICAgIH0KCiAgICAvLyB0ZXJtaW5hdGVkIGJ5IGVuZCBvZiBzdHJpbmc/CiAgICBp" + "ZiAoY19sZW4gPiAxKSB7IHV0ZjE2YnVmW291dCsrXSA9IDB4ZmZmZDsgY29udGludWU7IH0KCiAgICBpZiAoYyA8IDB4MTAwMDApIHsKICAgICAgdXRmMTZidWZbb3V0KytdID0gYzsKICAgIH0gZWxzZSB7CiAg" + "ICAgIGMgLT0gMHgxMDAwMDsKICAgICAgdXRmMTZidWZbb3V0KytdID0gMHhkODAwIHwgKChjID4+IDEwKSAmIDB4M2ZmKTsKICAgICAgdXRmMTZidWZbb3V0KytdID0gMHhkYzAwIHwgKGMgJiAweDNmZik7CiAg" + "ICB9CiAgfQoKICByZXR1cm4gYnVmMmJpbnN0cmluZyh1dGYxNmJ1Ziwgb3V0KTsKfTsKCgovLyBDYWxjdWxhdGUgbWF4IHBvc3NpYmxlIHBvc2l0aW9uIGluIHV0ZjggYnVmZmVyLAovLyB0aGF0IHdpbGwgbm90" + "IGJyZWFrIHNlcXVlbmNlLiBJZiB0aGF0J3Mgbm90IHBvc3NpYmxlCi8vIC0gKHZlcnkgc21hbGwgbGltaXRzKSByZXR1cm4gbWF4IHNpemUgYXMgaXMuCi8vCi8vIGJ1ZltdIC0gdXRmOCBieXRlcyBhcnJheQov" + "LyBtYXggICAtIGxlbmd0aCBsaW1pdCAobWFuZGF0b3J5KTsKZXhwb3J0cy51dGY4Ym9yZGVyID0gZnVuY3Rpb24gKGJ1ZiwgbWF4KSB7CiAgdmFyIHBvczsKCiAgbWF4ID0gbWF4IHx8IGJ1Zi5sZW5ndGg7CiAg" + "aWYgKG1heCA+IGJ1Zi5sZW5ndGgpIHsgbWF4ID0gYnVmLmxlbmd0aDsgfQoKICAvLyBnbyBiYWNrIGZyb20gbGFzdCBwb3NpdGlvbiwgdW50aWwgc3RhcnQgb2Ygc2VxdWVuY2UgZm91bmQKICBwb3MgPSBtYXgg" + "LSAxOwogIHdoaWxlIChwb3MgPj0gMCAmJiAoYnVmW3Bvc10gJiAweEMwKSA9PT0gMHg4MCkgeyBwb3MtLTsgfQoKICAvLyBGdWNrdXAgLSB2ZXJ5IHNtYWxsIGFuZCBicm9rZW4gc2VxdWVuY2UsCiAgLy8gcmV0" + "dXJuIG1heCwgYmVjYXVzZSB3ZSBzaG91bGQgcmV0dXJuIHNvbWV0aGluZyBhbnl3YXkuCiAgaWYgKHBvcyA8IDApIHsgcmV0dXJuIG1heDsgfQoKICAvLyBJZiB3ZSBjYW1lIHRvIHN0YXJ0IG9mIGJ1ZmZlciAt" + "IHRoYXQgbWVhbnMgdnVmZmVyIGlzIHRvbyBzbWFsbCwKICAvLyByZXR1cm4gbWF4IHRvby4KICBpZiAocG9zID09PSAwKSB7IHJldHVybiBtYXg7IH0KCiAgcmV0dXJuIChwb3MgKyBfdXRmOGxlbltidWZbcG9z" + "XV0gPiBtYXgpID8gcG9zIDogbWF4Owp9OwoKfSx7Ii4vY29tbW9uIjo0MX1dLDQzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwoKLy8gTm90ZTogYWRsZXIzMiB0YWtl" + "cyAxMiUgZm9yIGxldmVsIDAgYW5kIDIlIGZvciBsZXZlbCA2LgovLyBJdCBkb2Vzbid0IHdvcnRoIHRvIG1ha2UgYWRkaXRpb25hbCBvcHRpbWl6YXRpb25hIGFzIGluIG9yaWdpbmFsLgovLyBTbWFsbCBzaXpl" + "IGlzIHByZWZlcmFibGUuCgovLyAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKLy8gKEMpIDIwMTQtMjAxNyBWaXRhbHkgUHV6cmluIGFuZCBBbmRyZXkgVHVwaXRzaW4KLy8K" + "Ly8gVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKLy8gd2FycmFudHkuIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBs" + "aWFibGUgZm9yIGFueSBkYW1hZ2VzCi8vIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCi8vCi8vIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdh" + "cmUgZm9yIGFueSBwdXJwb3NlLAovLyBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0Ci8vIGZyZWVseSwgc3ViamVjdCB0byB0aGUg" + "Zm9sbG93aW5nIHJlc3RyaWN0aW9uczoKLy8KLy8gMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKLy8gICBjbGFpbSB0aGF0IHlv" + "dSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQovLyAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlv" + "biB3b3VsZCBiZQovLyAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCi8vIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qg" + "bm90IGJlCi8vICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgovLyAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3Vy" + "Y2UgZGlzdHJpYnV0aW9uLgoKZnVuY3Rpb24gYWRsZXIzMihhZGxlciwgYnVmLCBsZW4sIHBvcykgewogIHZhciBzMSA9IChhZGxlciAmIDB4ZmZmZikgfDAsCiAgICAgIHMyID0gKChhZGxlciA+Pj4gMTYpICYg" + "MHhmZmZmKSB8MCwKICAgICAgbiA9IDA7CgogIHdoaWxlIChsZW4gIT09IDApIHsKICAgIC8vIFNldCBsaW1pdCB+IHR3aWNlIGxlc3MgdGhhbiA1NTUyLCB0byBrZWVwCiAgICAvLyBzMiBpbiAzMS1iaXRzLCBi" + "ZWNhdXNlIHdlIGZvcmNlIHNpZ25lZCBpbnRzLgogICAgLy8gaW4gb3RoZXIgY2FzZSAlPSB3aWxsIGZhaWwuCiAgICBuID0gbGVuID4gMjAwMCA/IDIwMDAgOiBsZW47CiAgICBsZW4gLT0gbjsKCiAgICBkbyB7" + "CiAgICAgIHMxID0gKHMxICsgYnVmW3BvcysrXSkgfDA7CiAgICAgIHMyID0gKHMyICsgczEpIHwwOwogICAgfSB3aGlsZSAoLS1uKTsKCiAgICBzMSAlPSA2NTUyMTsKICAgIHMyICU9IDY1NTIxOwogIH0KCiAg" + "cmV0dXJuIChzMSB8IChzMiA8PCAxNikpIHwwOwp9CgoKbW9kdWxlLmV4cG9ydHMgPSBhZGxlcjMyOwoKfSx7fV0sNDQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewondXNlIHN0cmljdCc7Cgov" + "LyAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKLy8gKEMpIDIwMTQtMjAxNyBWaXRhbHkgUHV6cmluIGFuZCBBbmRyZXkgVHVwaXRzaW4KLy8KLy8gVGhpcyBzb2Z0d2FyZSBp" + "cyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKLy8gd2FycmFudHkuIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1h" + "Z2VzCi8vIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCi8vCi8vIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3Nl" + "LAovLyBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0Ci8vIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0" + "aW9uczoKLy8KLy8gMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKLy8gICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2lu" + "YWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQovLyAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQovLyAgIGFw" + "cHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCi8vIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCi8vICAgbWlzcmVw" + "cmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgovLyAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgoK" + "bW9kdWxlLmV4cG9ydHMgPSB7CgogIC8qIEFsbG93ZWQgZmx1c2ggdmFsdWVzOyBzZWUgZGVmbGF0ZSgpIGFuZCBpbmZsYXRlKCkgYmVsb3cgZm9yIGRldGFpbHMgKi8KICBaX05PX0ZMVVNIOiAgICAgICAgIDAs" + "CiAgWl9QQVJUSUFMX0ZMVVNIOiAgICAxLAogIFpfU1lOQ19GTFVTSDogICAgICAgMiwKICBaX0ZVTExfRkxVU0g6ICAgICAgIDMsCiAgWl9GSU5JU0g6ICAgICAgICAgICA0LAogIFpfQkxPQ0s6ICAgICAgICAg" + "ICAgNSwKICBaX1RSRUVTOiAgICAgICAgICAgIDYsCgogIC8qIFJldHVybiBjb2RlcyBmb3IgdGhlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gZnVuY3Rpb25zLiBOZWdhdGl2ZSB2YWx1ZXMKICAqIGFyZSBl" + "cnJvcnMsIHBvc2l0aXZlIHZhbHVlcyBhcmUgdXNlZCBmb3Igc3BlY2lhbCBidXQgbm9ybWFsIGV2ZW50cy4KICAqLwogIFpfT0s6ICAgICAgICAgICAgICAgMCwKICBaX1NUUkVBTV9FTkQ6ICAgICAgIDEsCiAg" + "Wl9ORUVEX0RJQ1Q6ICAgICAgICAyLAogIFpfRVJSTk86ICAgICAgICAgICAtMSwKICBaX1NUUkVBTV9FUlJPUjogICAgLTIsCiAgWl9EQVRBX0VSUk9SOiAgICAgIC0zLAogIC8vWl9NRU1fRVJST1I6ICAgICAt" + "NCwKICBaX0JVRl9FUlJPUjogICAgICAgLTUsCiAgLy9aX1ZFUlNJT05fRVJST1I6IC02LAoKICAvKiBjb21wcmVzc2lvbiBsZXZlbHMgKi8KICBaX05PX0NPTVBSRVNTSU9OOiAgICAgICAgIDAsCiAgWl9CRVNU" + "X1NQRUVEOiAgICAgICAgICAgICAxLAogIFpfQkVTVF9DT01QUkVTU0lPTjogICAgICAgOSwKICBaX0RFRkFVTFRfQ09NUFJFU1NJT046ICAgLTEsCgoKICBaX0ZJTFRFUkVEOiAgICAgICAgICAgICAgIDEsCiAg" + "Wl9IVUZGTUFOX09OTFk6ICAgICAgICAgICAyLAogIFpfUkxFOiAgICAgICAgICAgICAgICAgICAgMywKICBaX0ZJWEVEOiAgICAgICAgICAgICAgICAgIDQsCiAgWl9ERUZBVUxUX1NUUkFURUdZOiAgICAgICAw" + "LAoKICAvKiBQb3NzaWJsZSB2YWx1ZXMgb2YgdGhlIGRhdGFfdHlwZSBmaWVsZCAodGhvdWdoIHNlZSBpbmZsYXRlKCkpICovCiAgWl9CSU5BUlk6ICAgICAgICAgICAgICAgICAwLAogIFpfVEVYVDogICAgICAg" + "ICAgICAgICAgICAgMSwKICAvL1pfQVNDSUk6ICAgICAgICAgICAgICAgIDEsIC8vID0gWl9URVhUIChkZXByZWNhdGVkKQogIFpfVU5LTk9XTjogICAgICAgICAgICAgICAgMiwKCiAgLyogVGhlIGRlZmxhdGUg" + "Y29tcHJlc3Npb24gbWV0aG9kICovCiAgWl9ERUZMQVRFRDogICAgICAgICAgICAgICA4CiAgLy9aX05VTEw6ICAgICAgICAgICAgICAgICBudWxsIC8vIFVzZSAtMSBvciBudWxsIGlubGluZSwgZGVwZW5kaW5n" + "IG9uIHZhciB0eXBlCn07Cgp9LHt9XSw0NTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsKCi8vIE5vdGU6IHdlIGNhbid0IGdldCBzaWduaWZpY2FudCBzcGVlZCBib29z" + "dCBoZXJlLgovLyBTbyB3cml0ZSBjb2RlIHRvIG1pbmltaXplIHNpemUgLSBubyBwcmVnZW5lcmF0ZWQgdGFibGVzCi8vIGFuZCBhcnJheSB0b29scyBkZXBlbmRlbmNpZXMuCgovLyAoQykgMTk5NS0yMDEzIEpl" + "YW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKLy8gKEMpIDIwMTQtMjAxNyBWaXRhbHkgUHV6cmluIGFuZCBBbmRyZXkgVHVwaXRzaW4KLy8KLy8gVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMn" + "LCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKLy8gd2FycmFudHkuIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCi8vIGFyaXNpbmcgZnJv" + "bSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCi8vCi8vIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAovLyBpbmNsdWRpbmcgY29t" + "bWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0Ci8vIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKLy8KLy8gMS4gVGhl" + "IG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKLy8gICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlv" + "dSB1c2UgdGhpcyBzb2Z0d2FyZQovLyAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQovLyAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBu" + "b3QgcmVxdWlyZWQuCi8vIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCi8vICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcg" + "dGhlIG9yaWdpbmFsIHNvZnR3YXJlLgovLyAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgoKLy8gVXNlIG9yZGluYXJ5IGFy" + "cmF5LCBzaW5jZSB1bnR5cGVkIG1ha2VzIG5vIGJvb3N0IGhlcmUKZnVuY3Rpb24gbWFrZVRhYmxlKCkgewogIHZhciBjLCB0YWJsZSA9IFtdOwoKICBmb3IgKHZhciBuID0gMDsgbiA8IDI1NjsgbisrKSB7CiAg" + "ICBjID0gbjsKICAgIGZvciAodmFyIGsgPSAwOyBrIDwgODsgaysrKSB7CiAgICAgIGMgPSAoKGMgJiAxKSA/ICgweEVEQjg4MzIwIF4gKGMgPj4+IDEpKSA6IChjID4+PiAxKSk7CiAgICB9CiAgICB0YWJsZVtu" + "XSA9IGM7CiAgfQoKICByZXR1cm4gdGFibGU7Cn0KCi8vIENyZWF0ZSB0YWJsZSBvbiBsb2FkLiBKdXN0IDI1NSBzaWduZWQgbG9uZ3MuIE5vdCBhIHByb2JsZW0uCnZhciBjcmNUYWJsZSA9IG1ha2VUYWJsZSgp" + "OwoKCmZ1bmN0aW9uIGNyYzMyKGNyYywgYnVmLCBsZW4sIHBvcykgewogIHZhciB0ID0gY3JjVGFibGUsCiAgICAgIGVuZCA9IHBvcyArIGxlbjsKCiAgY3JjIF49IC0xOwoKICBmb3IgKHZhciBpID0gcG9zOyBp" + "IDwgZW5kOyBpKyspIHsKICAgIGNyYyA9IChjcmMgPj4+IDgpIF4gdFsoY3JjIF4gYnVmW2ldKSAmIDB4RkZdOwogIH0KCiAgcmV0dXJuIChjcmMgXiAoLTEpKTsgLy8gPj4+IDA7Cn0KCgptb2R1bGUuZXhwb3J0" + "cyA9IGNyYzMyOwoKfSx7fV0sNDY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewondXNlIHN0cmljdCc7CgovLyAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIK" + "Ly8gKEMpIDIwMTQtMjAxNyBWaXRhbHkgUHV6cmluIGFuZCBBbmRyZXkgVHVwaXRzaW4KLy8KLy8gVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxp" + "ZWQKLy8gd2FycmFudHkuIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCi8vIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCi8v" + "Ci8vIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAovLyBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBh" + "bHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0Ci8vIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKLy8KLy8gMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qg" + "bm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKLy8gICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQovLyAgIGluIGEg" + "cHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQovLyAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCi8vIDIuIEFsdGVyZWQgc291" + "cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCi8vICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgovLyAzLiBU" + "aGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgoKdmFyIHV0aWxzICAgPSByZXF1aXJlKCcuLi91dGlscy9jb21tb24nKTsKdmFyIHRy" + "ZWVzICAgPSByZXF1aXJlKCcuL3RyZWVzJyk7CnZhciBhZGxlcjMyID0gcmVxdWlyZSgnLi9hZGxlcjMyJyk7CnZhciBjcmMzMiAgID0gcmVxdWlyZSgnLi9jcmMzMicpOwp2YXIgbXNnICAgICA9IHJlcXVpcmUo" + "Jy4vbWVzc2FnZXMnKTsKCi8qIFB1YmxpYyBjb25zdGFudHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi8qID09PT09PT09PT09PT09PT09PT09" + "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCgoKLyogQWxsb3dlZCBmbHVzaCB2YWx1ZXM7IHNlZSBkZWZsYXRlKCkgYW5kIGluZmxhdGUoKSBiZWxvdyBm" + "b3IgZGV0YWlscyAqLwp2YXIgWl9OT19GTFVTSCAgICAgID0gMDsKdmFyIFpfUEFSVElBTF9GTFVTSCA9IDE7Ci8vdmFyIFpfU1lOQ19GTFVTSCAgICA9IDI7CnZhciBaX0ZVTExfRkxVU0ggICAgPSAzOwp2YXIg" + "Wl9GSU5JU0ggICAgICAgID0gNDsKdmFyIFpfQkxPQ0sgICAgICAgICA9IDU7Ci8vdmFyIFpfVFJFRVMgICAgICAgICA9IDY7CgoKLyogUmV0dXJuIGNvZGVzIGZvciB0aGUgY29tcHJlc3Npb24vZGVjb21wcmVz" + "c2lvbiBmdW5jdGlvbnMuIE5lZ2F0aXZlIHZhbHVlcwogKiBhcmUgZXJyb3JzLCBwb3NpdGl2ZSB2YWx1ZXMgYXJlIHVzZWQgZm9yIHNwZWNpYWwgYnV0IG5vcm1hbCBldmVudHMuCiAqLwp2YXIgWl9PSyAgICAg" + "ICAgICAgID0gMDsKdmFyIFpfU1RSRUFNX0VORCAgICA9IDE7Ci8vdmFyIFpfTkVFRF9ESUNUICAgICA9IDI7Ci8vdmFyIFpfRVJSTk8gICAgICAgICA9IC0xOwp2YXIgWl9TVFJFQU1fRVJST1IgID0gLTI7CnZh" + "ciBaX0RBVEFfRVJST1IgICAgPSAtMzsKLy92YXIgWl9NRU1fRVJST1IgICAgID0gLTQ7CnZhciBaX0JVRl9FUlJPUiAgICAgPSAtNTsKLy92YXIgWl9WRVJTSU9OX0VSUk9SID0gLTY7CgoKLyogY29tcHJlc3Np" + "b24gbGV2ZWxzICovCi8vdmFyIFpfTk9fQ09NUFJFU1NJT04gICAgICA9IDA7Ci8vdmFyIFpfQkVTVF9TUEVFRCAgICAgICAgICA9IDE7Ci8vdmFyIFpfQkVTVF9DT01QUkVTU0lPTiAgICA9IDk7CnZhciBaX0RF" + "RkFVTFRfQ09NUFJFU1NJT04gPSAtMTsKCgp2YXIgWl9GSUxURVJFRCAgICAgICAgICAgID0gMTsKdmFyIFpfSFVGRk1BTl9PTkxZICAgICAgICA9IDI7CnZhciBaX1JMRSAgICAgICAgICAgICAgICAgPSAzOwp2" + "YXIgWl9GSVhFRCAgICAgICAgICAgICAgID0gNDsKdmFyIFpfREVGQVVMVF9TVFJBVEVHWSAgICA9IDA7CgovKiBQb3NzaWJsZSB2YWx1ZXMgb2YgdGhlIGRhdGFfdHlwZSBmaWVsZCAodGhvdWdoIHNlZSBpbmZs" + "YXRlKCkpICovCi8vdmFyIFpfQklOQVJZICAgICAgICAgICAgICA9IDA7Ci8vdmFyIFpfVEVYVCAgICAgICAgICAgICAgICA9IDE7Ci8vdmFyIFpfQVNDSUkgICAgICAgICAgICAgICA9IDE7IC8vID0gWl9URVhU" + "CnZhciBaX1VOS05PV04gICAgICAgICAgICAgPSAyOwoKCi8qIFRoZSBkZWZsYXRlIGNvbXByZXNzaW9uIG1ldGhvZCAqLwp2YXIgWl9ERUZMQVRFRCAgPSA4OwoKLyo9PT09PT09PT09PT09PT09PT09PT09PT09" + "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCgp2YXIgTUFYX01FTV9MRVZFTCA9IDk7Ci8qIE1heGltdW0gdmFsdWUgZm9yIG1lbUxldmVsIGluIGRlZmxhdGVJ" + "bml0MiAqLwp2YXIgTUFYX1dCSVRTID0gMTU7Ci8qIDMySyBMWjc3IHdpbmRvdyAqLwp2YXIgREVGX01FTV9MRVZFTCA9IDg7CgoKdmFyIExFTkdUSF9DT0RFUyAgPSAyOTsKLyogbnVtYmVyIG9mIGxlbmd0aCBj" + "b2Rlcywgbm90IGNvdW50aW5nIHRoZSBzcGVjaWFsIEVORF9CTE9DSyBjb2RlICovCnZhciBMSVRFUkFMUyAgICAgID0gMjU2OwovKiBudW1iZXIgb2YgbGl0ZXJhbCBieXRlcyAwLi4yNTUgKi8KdmFyIExfQ09E" + "RVMgICAgICAgPSBMSVRFUkFMUyArIDEgKyBMRU5HVEhfQ09ERVM7Ci8qIG51bWJlciBvZiBMaXRlcmFsIG9yIExlbmd0aCBjb2RlcywgaW5jbHVkaW5nIHRoZSBFTkRfQkxPQ0sgY29kZSAqLwp2YXIgRF9DT0RF" + "UyAgICAgICA9IDMwOwovKiBudW1iZXIgb2YgZGlzdGFuY2UgY29kZXMgKi8KdmFyIEJMX0NPREVTICAgICAgPSAxOTsKLyogbnVtYmVyIG9mIGNvZGVzIHVzZWQgdG8gdHJhbnNmZXIgdGhlIGJpdCBsZW5ndGhz" + "ICovCnZhciBIRUFQX1NJWkUgICAgID0gMiAqIExfQ09ERVMgKyAxOwovKiBtYXhpbXVtIGhlYXAgc2l6ZSAqLwp2YXIgTUFYX0JJVFMgID0gMTU7Ci8qIEFsbCBjb2RlcyBtdXN0IG5vdCBleGNlZWQgTUFYX0JJ" + "VFMgYml0cyAqLwoKdmFyIE1JTl9NQVRDSCA9IDM7CnZhciBNQVhfTUFUQ0ggPSAyNTg7CnZhciBNSU5fTE9PS0FIRUFEID0gKE1BWF9NQVRDSCArIE1JTl9NQVRDSCArIDEpOwoKdmFyIFBSRVNFVF9ESUNUID0g" + "MHgyMDsKCnZhciBJTklUX1NUQVRFID0gNDI7CnZhciBFWFRSQV9TVEFURSA9IDY5Owp2YXIgTkFNRV9TVEFURSA9IDczOwp2YXIgQ09NTUVOVF9TVEFURSA9IDkxOwp2YXIgSENSQ19TVEFURSA9IDEwMzsKdmFy" + "IEJVU1lfU1RBVEUgPSAxMTM7CnZhciBGSU5JU0hfU1RBVEUgPSA2NjY7Cgp2YXIgQlNfTkVFRF9NT1JFICAgICAgPSAxOyAvKiBibG9jayBub3QgY29tcGxldGVkLCBuZWVkIG1vcmUgaW5wdXQgb3IgbW9yZSBv" + "dXRwdXQgKi8KdmFyIEJTX0JMT0NLX0RPTkUgICAgID0gMjsgLyogYmxvY2sgZmx1c2ggcGVyZm9ybWVkICovCnZhciBCU19GSU5JU0hfU1RBUlRFRCA9IDM7IC8qIGZpbmlzaCBzdGFydGVkLCBuZWVkIG9ubHkg" + "bW9yZSBvdXRwdXQgYXQgbmV4dCBkZWZsYXRlICovCnZhciBCU19GSU5JU0hfRE9ORSAgICA9IDQ7IC8qIGZpbmlzaCBkb25lLCBhY2NlcHQgbm8gbW9yZSBpbnB1dCBvciBvdXRwdXQgKi8KCnZhciBPU19DT0RF" + "ID0gMHgwMzsgLy8gVW5peCA6KSAuIERvbid0IGRldGVjdCwgdXNlIHRoaXMgZGVmYXVsdC4KCmZ1bmN0aW9uIGVycihzdHJtLCBlcnJvckNvZGUpIHsKICBzdHJtLm1zZyA9IG1zZ1tlcnJvckNvZGVdOwogIHJl" + "dHVybiBlcnJvckNvZGU7Cn0KCmZ1bmN0aW9uIHJhbmsoZikgewogIHJldHVybiAoKGYpIDw8IDEpIC0gKChmKSA+IDQgPyA5IDogMCk7Cn0KCmZ1bmN0aW9uIHplcm8oYnVmKSB7IHZhciBsZW4gPSBidWYubGVu" + "Z3RoOyB3aGlsZSAoLS1sZW4gPj0gMCkgeyBidWZbbGVuXSA9IDA7IH0gfQoKCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09" + "PT0KICogRmx1c2ggYXMgbXVjaCBwZW5kaW5nIG91dHB1dCBhcyBwb3NzaWJsZS4gQWxsIGRlZmxhdGUoKSBvdXRwdXQgZ29lcwogKiB0aHJvdWdoIHRoaXMgZnVuY3Rpb24gc28gc29tZSBhcHBsaWNhdGlvbnMg" + "bWF5IHdpc2ggdG8gbW9kaWZ5IGl0CiAqIHRvIGF2b2lkIGFsbG9jYXRpbmcgYSBsYXJnZSBzdHJtLT5vdXRwdXQgYnVmZmVyIGFuZCBjb3B5aW5nIGludG8gaXQuCiAqIChTZWUgYWxzbyByZWFkX2J1ZigpKS4K" + "ICovCmZ1bmN0aW9uIGZsdXNoX3BlbmRpbmcoc3RybSkgewogIHZhciBzID0gc3RybS5zdGF0ZTsKCiAgLy9fdHJfZmx1c2hfYml0cyhzKTsKICB2YXIgbGVuID0gcy5wZW5kaW5nOwogIGlmIChsZW4gPiBzdHJt" + "LmF2YWlsX291dCkgewogICAgbGVuID0gc3RybS5hdmFpbF9vdXQ7CiAgfQogIGlmIChsZW4gPT09IDApIHsgcmV0dXJuOyB9CgogIHV0aWxzLmFycmF5U2V0KHN0cm0ub3V0cHV0LCBzLnBlbmRpbmdfYnVmLCBz" + "LnBlbmRpbmdfb3V0LCBsZW4sIHN0cm0ubmV4dF9vdXQpOwogIHN0cm0ubmV4dF9vdXQgKz0gbGVuOwogIHMucGVuZGluZ19vdXQgKz0gbGVuOwogIHN0cm0udG90YWxfb3V0ICs9IGxlbjsKICBzdHJtLmF2YWls" + "X291dCAtPSBsZW47CiAgcy5wZW5kaW5nIC09IGxlbjsKICBpZiAocy5wZW5kaW5nID09PSAwKSB7CiAgICBzLnBlbmRpbmdfb3V0ID0gMDsKICB9Cn0KCgpmdW5jdGlvbiBmbHVzaF9ibG9ja19vbmx5KHMsIGxh" + "c3QpIHsKICB0cmVlcy5fdHJfZmx1c2hfYmxvY2socywgKHMuYmxvY2tfc3RhcnQgPj0gMCA/IHMuYmxvY2tfc3RhcnQgOiAtMSksIHMuc3Ryc3RhcnQgLSBzLmJsb2NrX3N0YXJ0LCBsYXN0KTsKICBzLmJsb2Nr" + "X3N0YXJ0ID0gcy5zdHJzdGFydDsKICBmbHVzaF9wZW5kaW5nKHMuc3RybSk7Cn0KCgpmdW5jdGlvbiBwdXRfYnl0ZShzLCBiKSB7CiAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSBiOwp9CgoKLyogPT09" + "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBQdXQgYSBzaG9ydCBpbiB0aGUgcGVuZGluZyBidWZmZXIuIFRoZSAxNi1iaXQg" + "dmFsdWUgaXMgcHV0IGluIE1TQiBvcmRlci4KICogSU4gYXNzZXJ0aW9uOiB0aGUgc3RyZWFtIHN0YXRlIGlzIGNvcnJlY3QgYW5kIHRoZXJlIGlzIGVub3VnaCByb29tIGluCiAqIHBlbmRpbmdfYnVmLgogKi8K" + "ZnVuY3Rpb24gcHV0U2hvcnRNU0IocywgYikgewovLyAgcHV0X2J5dGUocywgKEJ5dGUpKGIgPj4gOCkpOwovLyAgcHV0X2J5dGUocywgKEJ5dGUpKGIgJiAweGZmKSk7CiAgcy5wZW5kaW5nX2J1ZltzLnBlbmRp" + "bmcrK10gPSAoYiA+Pj4gOCkgJiAweGZmOwogIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gYiAmIDB4ZmY7Cn0KCgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09" + "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogUmVhZCBhIG5ldyBidWZmZXIgZnJvbSB0aGUgY3VycmVudCBpbnB1dCBzdHJlYW0sIHVwZGF0ZSB0aGUgYWRsZXIzMgogKiBhbmQgdG90YWwgbnVtYmVy" + "IG9mIGJ5dGVzIHJlYWQuICBBbGwgZGVmbGF0ZSgpIGlucHV0IGdvZXMgdGhyb3VnaAogKiB0aGlzIGZ1bmN0aW9uIHNvIHNvbWUgYXBwbGljYXRpb25zIG1heSB3aXNoIHRvIG1vZGlmeSBpdCB0byBhdm9pZAog" + "KiBhbGxvY2F0aW5nIGEgbGFyZ2Ugc3RybS0+aW5wdXQgYnVmZmVyIGFuZCBjb3B5aW5nIGZyb20gaXQuCiAqIChTZWUgYWxzbyBmbHVzaF9wZW5kaW5nKCkpLgogKi8KZnVuY3Rpb24gcmVhZF9idWYoc3RybSwg" + "YnVmLCBzdGFydCwgc2l6ZSkgewogIHZhciBsZW4gPSBzdHJtLmF2YWlsX2luOwoKICBpZiAobGVuID4gc2l6ZSkgeyBsZW4gPSBzaXplOyB9CiAgaWYgKGxlbiA9PT0gMCkgeyByZXR1cm4gMDsgfQoKICBzdHJt" + "LmF2YWlsX2luIC09IGxlbjsKCiAgLy8gem1lbWNweShidWYsIHN0cm0tPm5leHRfaW4sIGxlbik7CiAgdXRpbHMuYXJyYXlTZXQoYnVmLCBzdHJtLmlucHV0LCBzdHJtLm5leHRfaW4sIGxlbiwgc3RhcnQpOwog" + "IGlmIChzdHJtLnN0YXRlLndyYXAgPT09IDEpIHsKICAgIHN0cm0uYWRsZXIgPSBhZGxlcjMyKHN0cm0uYWRsZXIsIGJ1ZiwgbGVuLCBzdGFydCk7CiAgfQoKICBlbHNlIGlmIChzdHJtLnN0YXRlLndyYXAgPT09" + "IDIpIHsKICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBidWYsIGxlbiwgc3RhcnQpOwogIH0KCiAgc3RybS5uZXh0X2luICs9IGxlbjsKICBzdHJtLnRvdGFsX2luICs9IGxlbjsKCiAgcmV0dXJu" + "IGxlbjsKfQoKCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBTZXQgbWF0Y2hfc3RhcnQgdG8gdGhlIGxvbmdl" + "c3QgbWF0Y2ggc3RhcnRpbmcgYXQgdGhlIGdpdmVuIHN0cmluZyBhbmQKICogcmV0dXJuIGl0cyBsZW5ndGguIE1hdGNoZXMgc2hvcnRlciBvciBlcXVhbCB0byBwcmV2X2xlbmd0aCBhcmUgZGlzY2FyZGVkLAog" + "KiBpbiB3aGljaCBjYXNlIHRoZSByZXN1bHQgaXMgZXF1YWwgdG8gcHJldl9sZW5ndGggYW5kIG1hdGNoX3N0YXJ0IGlzCiAqIGdhcmJhZ2UuCiAqIElOIGFzc2VydGlvbnM6IGN1cl9tYXRjaCBpcyB0aGUgaGVh" + "ZCBvZiB0aGUgaGFzaCBjaGFpbiBmb3IgdGhlIGN1cnJlbnQKICogICBzdHJpbmcgKHN0cnN0YXJ0KSBhbmQgaXRzIGRpc3RhbmNlIGlzIDw9IE1BWF9ESVNULCBhbmQgcHJldl9sZW5ndGggPj0gMQogKiBPVVQg" + "YXNzZXJ0aW9uOiB0aGUgbWF0Y2ggbGVuZ3RoIGlzIG5vdCBncmVhdGVyIHRoYW4gcy0+bG9va2FoZWFkLgogKi8KZnVuY3Rpb24gbG9uZ2VzdF9tYXRjaChzLCBjdXJfbWF0Y2gpIHsKICB2YXIgY2hhaW5fbGVu" + "Z3RoID0gcy5tYXhfY2hhaW5fbGVuZ3RoOyAgICAgIC8qIG1heCBoYXNoIGNoYWluIGxlbmd0aCAqLwogIHZhciBzY2FuID0gcy5zdHJzdGFydDsgLyogY3VycmVudCBzdHJpbmcgKi8KICB2YXIgbWF0Y2g7ICAg" + "ICAgICAgICAgICAgICAgICAgICAvKiBtYXRjaGVkIHN0cmluZyAqLwogIHZhciBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoIG9mIGN1cnJlbnQgbWF0Y2ggKi8KICB2YXIgYmVzdF9s" + "ZW4gPSBzLnByZXZfbGVuZ3RoOyAgICAgICAgICAgICAgLyogYmVzdCBtYXRjaCBsZW5ndGggc28gZmFyICovCiAgdmFyIG5pY2VfbWF0Y2ggPSBzLm5pY2VfbWF0Y2g7ICAgICAgICAgICAgIC8qIHN0b3AgaWYg" + "bWF0Y2ggbG9uZyBlbm91Z2ggKi8KICB2YXIgbGltaXQgPSAocy5zdHJzdGFydCA+IChzLndfc2l6ZSAtIE1JTl9MT09LQUhFQUQpKSA/CiAgICAgIHMuc3Ryc3RhcnQgLSAocy53X3NpemUgLSBNSU5fTE9PS0FI" + "RUFEKSA6IDAvKk5JTCovOwoKICB2YXIgX3dpbiA9IHMud2luZG93OyAvLyBzaG9ydGN1dAoKICB2YXIgd21hc2sgPSBzLndfbWFzazsKICB2YXIgcHJldiAgPSBzLnByZXY7CgogIC8qIFN0b3Agd2hlbiBjdXJf" + "bWF0Y2ggYmVjb21lcyA8PSBsaW1pdC4gVG8gc2ltcGxpZnkgdGhlIGNvZGUsCiAgICogd2UgcHJldmVudCBtYXRjaGVzIHdpdGggdGhlIHN0cmluZyBvZiB3aW5kb3cgaW5kZXggMC4KICAgKi8KCiAgdmFyIHN0" + "cmVuZCA9IHMuc3Ryc3RhcnQgKyBNQVhfTUFUQ0g7CiAgdmFyIHNjYW5fZW5kMSAgPSBfd2luW3NjYW4gKyBiZXN0X2xlbiAtIDFdOwogIHZhciBzY2FuX2VuZCAgID0gX3dpbltzY2FuICsgYmVzdF9sZW5dOwoK" + "ICAvKiBUaGUgY29kZSBpcyBvcHRpbWl6ZWQgZm9yIEhBU0hfQklUUyA+PSA4IGFuZCBNQVhfTUFUQ0gtMiBtdWx0aXBsZSBvZiAxNi4KICAgKiBJdCBpcyBlYXN5IHRvIGdldCByaWQgb2YgdGhpcyBvcHRpbWl6" + "YXRpb24gaWYgbmVjZXNzYXJ5LgogICAqLwogIC8vIEFzc2VydChzLT5oYXNoX2JpdHMgPj0gOCAmJiBNQVhfTUFUQ0ggPT0gMjU4LCAiQ29kZSB0b28gY2xldmVyIik7CgogIC8qIERvIG5vdCB3YXN0ZSB0b28g" + "bXVjaCB0aW1lIGlmIHdlIGFscmVhZHkgaGF2ZSBhIGdvb2QgbWF0Y2g6ICovCiAgaWYgKHMucHJldl9sZW5ndGggPj0gcy5nb29kX21hdGNoKSB7CiAgICBjaGFpbl9sZW5ndGggPj49IDI7CiAgfQogIC8qIERv" + "IG5vdCBsb29rIGZvciBtYXRjaGVzIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBpbnB1dC4gVGhpcyBpcyBuZWNlc3NhcnkKICAgKiB0byBtYWtlIGRlZmxhdGUgZGV0ZXJtaW5pc3RpYy4KICAgKi8KICBpZiAobmlj" + "ZV9tYXRjaCA+IHMubG9va2FoZWFkKSB7IG5pY2VfbWF0Y2ggPSBzLmxvb2thaGVhZDsgfQoKICAvLyBBc3NlcnQoKHVsZylzLT5zdHJzdGFydCA8PSBzLT53aW5kb3dfc2l6ZS1NSU5fTE9PS0FIRUFELCAibmVl" + "ZCBsb29rYWhlYWQiKTsKCiAgZG8gewogICAgLy8gQXNzZXJ0KGN1cl9tYXRjaCA8IHMtPnN0cnN0YXJ0LCAibm8gZnV0dXJlIik7CiAgICBtYXRjaCA9IGN1cl9tYXRjaDsKCiAgICAvKiBTa2lwIHRvIG5leHQg" + "bWF0Y2ggaWYgdGhlIG1hdGNoIGxlbmd0aCBjYW5ub3QgaW5jcmVhc2UKICAgICAqIG9yIGlmIHRoZSBtYXRjaCBsZW5ndGggaXMgbGVzcyB0aGFuIDIuICBOb3RlIHRoYXQgdGhlIGNoZWNrcyBiZWxvdwogICAg" + "ICogZm9yIGluc3VmZmljaWVudCBsb29rYWhlYWQgb25seSBvY2N1ciBvY2Nhc2lvbmFsbHkgZm9yIHBlcmZvcm1hbmNlCiAgICAgKiByZWFzb25zLiAgVGhlcmVmb3JlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdp" + "bGwgYmUgYWNjZXNzZWQsIGFuZAogICAgICogY29uZGl0aW9uYWwganVtcHMgd2lsbCBiZSBtYWRlIHRoYXQgZGVwZW5kIG9uIHRob3NlIHZhbHVlcy4KICAgICAqIEhvd2V2ZXIgdGhlIGxlbmd0aCBvZiB0aGUg" + "bWF0Y2ggaXMgbGltaXRlZCB0byB0aGUgbG9va2FoZWFkLCBzbwogICAgICogdGhlIG91dHB1dCBvZiBkZWZsYXRlIGlzIG5vdCBhZmZlY3RlZCBieSB0aGUgdW5pbml0aWFsaXplZCB2YWx1ZXMuCiAgICAgKi8K" + "CiAgICBpZiAoX3dpblttYXRjaCArIGJlc3RfbGVuXSAgICAgIT09IHNjYW5fZW5kICB8fAogICAgICAgIF93aW5bbWF0Y2ggKyBiZXN0X2xlbiAtIDFdICE9PSBzY2FuX2VuZDEgfHwKICAgICAgICBfd2luW21h" + "dGNoXSAgICAgICAgICAgICAgICAhPT0gX3dpbltzY2FuXSB8fAogICAgICAgIF93aW5bKyttYXRjaF0gICAgICAgICAgICAgICE9PSBfd2luW3NjYW4gKyAxXSkgewogICAgICBjb250aW51ZTsKICAgIH0KCiAg" + "ICAvKiBUaGUgY2hlY2sgYXQgYmVzdF9sZW4tMSBjYW4gYmUgcmVtb3ZlZCBiZWNhdXNlIGl0IHdpbGwgYmUgbWFkZQogICAgICogYWdhaW4gbGF0ZXIuIChUaGlzIGhldXJpc3RpYyBpcyBub3QgYWx3YXlzIGEg" + "d2luLikKICAgICAqIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gY29tcGFyZSBzY2FuWzJdIGFuZCBtYXRjaFsyXSBzaW5jZSB0aGV5CiAgICAgKiBhcmUgYWx3YXlzIGVxdWFsIHdoZW4gdGhlIG90aGVyIGJ5dGVz" + "IG1hdGNoLCBnaXZlbiB0aGF0CiAgICAgKiB0aGUgaGFzaCBrZXlzIGFyZSBlcXVhbCBhbmQgdGhhdCBIQVNIX0JJVFMgPj0gOC4KICAgICAqLwogICAgc2NhbiArPSAyOwogICAgbWF0Y2grKzsKICAgIC8vIEFz" + "c2VydCgqc2NhbiA9PSAqbWF0Y2gsICJtYXRjaFsyXT8iKTsKCiAgICAvKiBXZSBjaGVjayBmb3IgaW5zdWZmaWNpZW50IGxvb2thaGVhZCBvbmx5IGV2ZXJ5IDh0aCBjb21wYXJpc29uOwogICAgICogdGhlIDI1" + "NnRoIGNoZWNrIHdpbGwgYmUgbWFkZSBhdCBzdHJzdGFydCsyNTguCiAgICAgKi8KICAgIGRvIHsKICAgICAgLypqc2hpbnQgbm9lbXB0eTpmYWxzZSovCiAgICB9IHdoaWxlIChfd2luWysrc2Nhbl0gPT09IF93" + "aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmCiAgICAgICAgICAgICBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysr" + "bWF0Y2hdICYmCiAgICAgICAgICAgICBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmCiAgICAgICAgICAgICBfd2luWysrc2Nhbl0gPT09" + "IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmCiAgICAgICAgICAgICBzY2FuIDwgc3RyZW5kKTsKCiAgICAvLyBBc3NlcnQoc2NhbiA8PSBzLT53aW5kb3crKHVuc2ln" + "bmVkKShzLT53aW5kb3dfc2l6ZS0xKSwgIndpbGQgc2NhbiIpOwoKICAgIGxlbiA9IE1BWF9NQVRDSCAtIChzdHJlbmQgLSBzY2FuKTsKICAgIHNjYW4gPSBzdHJlbmQgLSBNQVhfTUFUQ0g7CgogICAgaWYgKGxl" + "biA+IGJlc3RfbGVuKSB7CiAgICAgIHMubWF0Y2hfc3RhcnQgPSBjdXJfbWF0Y2g7CiAgICAgIGJlc3RfbGVuID0gbGVuOwogICAgICBpZiAobGVuID49IG5pY2VfbWF0Y2gpIHsKICAgICAgICBicmVhazsKICAg" + "ICAgfQogICAgICBzY2FuX2VuZDEgID0gX3dpbltzY2FuICsgYmVzdF9sZW4gLSAxXTsKICAgICAgc2Nhbl9lbmQgICA9IF93aW5bc2NhbiArIGJlc3RfbGVuXTsKICAgIH0KICB9IHdoaWxlICgoY3VyX21hdGNo" + "ID0gcHJldltjdXJfbWF0Y2ggJiB3bWFza10pID4gbGltaXQgJiYgLS1jaGFpbl9sZW5ndGggIT09IDApOwoKICBpZiAoYmVzdF9sZW4gPD0gcy5sb29rYWhlYWQpIHsKICAgIHJldHVybiBiZXN0X2xlbjsKICB9" + "CiAgcmV0dXJuIHMubG9va2FoZWFkOwp9CgoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIEZpbGwgdGhlIHdp" + "bmRvdyB3aGVuIHRoZSBsb29rYWhlYWQgYmVjb21lcyBpbnN1ZmZpY2llbnQuCiAqIFVwZGF0ZXMgc3Ryc3RhcnQgYW5kIGxvb2thaGVhZC4KICoKICogSU4gYXNzZXJ0aW9uOiBsb29rYWhlYWQgPCBNSU5fTE9P" + "S0FIRUFECiAqIE9VVCBhc3NlcnRpb25zOiBzdHJzdGFydCA8PSB3aW5kb3dfc2l6ZS1NSU5fTE9PS0FIRUFECiAqICAgIEF0IGxlYXN0IG9uZSBieXRlIGhhcyBiZWVuIHJlYWQsIG9yIGF2YWlsX2luID09IDA7" + "IHJlYWRzIGFyZQogKiAgICBwZXJmb3JtZWQgZm9yIGF0IGxlYXN0IHR3byBieXRlcyAocmVxdWlyZWQgZm9yIHRoZSB6aXAgdHJhbnNsYXRlX2VvbAogKiAgICBvcHRpb24gLS0gbm90IHN1cHBvcnRlZCBoZXJl" + "KS4KICovCmZ1bmN0aW9uIGZpbGxfd2luZG93KHMpIHsKICB2YXIgX3dfc2l6ZSA9IHMud19zaXplOwogIHZhciBwLCBuLCBtLCBtb3JlLCBzdHI7CgogIC8vQXNzZXJ0KHMtPmxvb2thaGVhZCA8IE1JTl9MT09L" + "QUhFQUQsICJhbHJlYWR5IGVub3VnaCBsb29rYWhlYWQiKTsKCiAgZG8gewogICAgbW9yZSA9IHMud2luZG93X3NpemUgLSBzLmxvb2thaGVhZCAtIHMuc3Ryc3RhcnQ7CgogICAgLy8gSlMgaW50cyBoYXZlIDMy" + "IGJpdCwgYmxvY2sgYmVsb3cgbm90IG5lZWRlZAogICAgLyogRGVhbCB3aXRoICFAIyQlIDY0SyBsaW1pdDogKi8KICAgIC8vaWYgKHNpemVvZihpbnQpIDw9IDIpIHsKICAgIC8vICAgIGlmIChtb3JlID09IDAg" + "JiYgcy0+c3Ryc3RhcnQgPT0gMCAmJiBzLT5sb29rYWhlYWQgPT0gMCkgewogICAgLy8gICAgICAgIG1vcmUgPSB3c2l6ZTsKICAgIC8vCiAgICAvLyAgfSBlbHNlIGlmIChtb3JlID09ICh1bnNpZ25lZCkoLTEp" + "KSB7CiAgICAvLyAgICAgICAgLyogVmVyeSB1bmxpa2VseSwgYnV0IHBvc3NpYmxlIG9uIDE2IGJpdCBtYWNoaW5lIGlmCiAgICAvLyAgICAgICAgICogc3Ryc3RhcnQgPT0gMCAmJiBsb29rYWhlYWQgPT0gMSAo" + "aW5wdXQgZG9uZSBhIGJ5dGUgYXQgdGltZSkKICAgIC8vICAgICAgICAgKi8KICAgIC8vICAgICAgICBtb3JlLS07CiAgICAvLyAgICB9CiAgICAvL30KCgogICAgLyogSWYgdGhlIHdpbmRvdyBpcyBhbG1vc3Qg" + "ZnVsbCBhbmQgdGhlcmUgaXMgaW5zdWZmaWNpZW50IGxvb2thaGVhZCwKICAgICAqIG1vdmUgdGhlIHVwcGVyIGhhbGYgdG8gdGhlIGxvd2VyIG9uZSB0byBtYWtlIHJvb20gaW4gdGhlIHVwcGVyIGhhbGYuCiAg" + "ICAgKi8KICAgIGlmIChzLnN0cnN0YXJ0ID49IF93X3NpemUgKyAoX3dfc2l6ZSAtIE1JTl9MT09LQUhFQUQpKSB7CgogICAgICB1dGlscy5hcnJheVNldChzLndpbmRvdywgcy53aW5kb3csIF93X3NpemUsIF93" + "X3NpemUsIDApOwogICAgICBzLm1hdGNoX3N0YXJ0IC09IF93X3NpemU7CiAgICAgIHMuc3Ryc3RhcnQgLT0gX3dfc2l6ZTsKICAgICAgLyogd2Ugbm93IGhhdmUgc3Ryc3RhcnQgPj0gTUFYX0RJU1QgKi8KICAg" + "ICAgcy5ibG9ja19zdGFydCAtPSBfd19zaXplOwoKICAgICAgLyogU2xpZGUgdGhlIGhhc2ggdGFibGUgKGNvdWxkIGJlIGF2b2lkZWQgd2l0aCAzMiBiaXQgdmFsdWVzCiAgICAgICBhdCB0aGUgZXhwZW5zZSBv" + "ZiBtZW1vcnkgdXNhZ2UpLiBXZSBzbGlkZSBldmVuIHdoZW4gbGV2ZWwgPT0gMAogICAgICAgdG8ga2VlcCB0aGUgaGFzaCB0YWJsZSBjb25zaXN0ZW50IGlmIHdlIHN3aXRjaCBiYWNrIHRvIGxldmVsID4gMAog" + "ICAgICAgbGF0ZXIuIChVc2luZyBsZXZlbCAwIHBlcm1hbmVudGx5IGlzIG5vdCBhbiBvcHRpbWFsIHVzYWdlIG9mCiAgICAgICB6bGliLCBzbyB3ZSBkb24ndCBjYXJlIGFib3V0IHRoaXMgcGF0aG9sb2dpY2Fs" + "IGNhc2UuKQogICAgICAgKi8KCiAgICAgIG4gPSBzLmhhc2hfc2l6ZTsKICAgICAgcCA9IG47CiAgICAgIGRvIHsKICAgICAgICBtID0gcy5oZWFkWy0tcF07CiAgICAgICAgcy5oZWFkW3BdID0gKG0gPj0gX3df" + "c2l6ZSA/IG0gLSBfd19zaXplIDogMCk7CiAgICAgIH0gd2hpbGUgKC0tbik7CgogICAgICBuID0gX3dfc2l6ZTsKICAgICAgcCA9IG47CiAgICAgIGRvIHsKICAgICAgICBtID0gcy5wcmV2Wy0tcF07CiAgICAg" + "ICAgcy5wcmV2W3BdID0gKG0gPj0gX3dfc2l6ZSA/IG0gLSBfd19zaXplIDogMCk7CiAgICAgICAgLyogSWYgbiBpcyBub3Qgb24gYW55IGhhc2ggY2hhaW4sIHByZXZbbl0gaXMgZ2FyYmFnZSBidXQKICAgICAg" + "ICAgKiBpdHMgdmFsdWUgd2lsbCBuZXZlciBiZSB1c2VkLgogICAgICAgICAqLwogICAgICB9IHdoaWxlICgtLW4pOwoKICAgICAgbW9yZSArPSBfd19zaXplOwogICAgfQogICAgaWYgKHMuc3RybS5hdmFpbF9p" + "biA9PT0gMCkgewogICAgICBicmVhazsKICAgIH0KCiAgICAvKiBJZiB0aGVyZSB3YXMgbm8gc2xpZGluZzoKICAgICAqICAgIHN0cnN0YXJ0IDw9IFdTSVpFK01BWF9ESVNULTEgJiYgbG9va2FoZWFkIDw9IE1J" + "Tl9MT09LQUhFQUQgLSAxICYmCiAgICAgKiAgICBtb3JlID09IHdpbmRvd19zaXplIC0gbG9va2FoZWFkIC0gc3Ryc3RhcnQKICAgICAqID0+IG1vcmUgPj0gd2luZG93X3NpemUgLSAoTUlOX0xPT0tBSEVBRC0x" + "ICsgV1NJWkUgKyBNQVhfRElTVC0xKQogICAgICogPT4gbW9yZSA+PSB3aW5kb3dfc2l6ZSAtIDIqV1NJWkUgKyAyCiAgICAgKiBJbiB0aGUgQklHX01FTSBvciBNTUFQIGNhc2UgKG5vdCB5ZXQgc3VwcG9ydGVk" + "KSwKICAgICAqICAgd2luZG93X3NpemUgPT0gaW5wdXRfc2l6ZSArIE1JTl9MT09LQUhFQUQgICYmCiAgICAgKiAgIHN0cnN0YXJ0ICsgcy0+bG9va2FoZWFkIDw9IGlucHV0X3NpemUgPT4gbW9yZSA+PSBNSU5f" + "TE9PS0FIRUFELgogICAgICogT3RoZXJ3aXNlLCB3aW5kb3dfc2l6ZSA9PSAyKldTSVpFIHNvIG1vcmUgPj0gMi4KICAgICAqIElmIHRoZXJlIHdhcyBzbGlkaW5nLCBtb3JlID49IFdTSVpFLiBTbyBpbiBhbGwg" + "Y2FzZXMsIG1vcmUgPj0gMi4KICAgICAqLwogICAgLy9Bc3NlcnQobW9yZSA+PSAyLCAibW9yZSA8IDIiKTsKICAgIG4gPSByZWFkX2J1ZihzLnN0cm0sIHMud2luZG93LCBzLnN0cnN0YXJ0ICsgcy5sb29rYWhl" + "YWQsIG1vcmUpOwogICAgcy5sb29rYWhlYWQgKz0gbjsKCiAgICAvKiBJbml0aWFsaXplIHRoZSBoYXNoIHZhbHVlIG5vdyB0aGF0IHdlIGhhdmUgc29tZSBpbnB1dDogKi8KICAgIGlmIChzLmxvb2thaGVhZCAr" + "IHMuaW5zZXJ0ID49IE1JTl9NQVRDSCkgewogICAgICBzdHIgPSBzLnN0cnN0YXJ0IC0gcy5pbnNlcnQ7CiAgICAgIHMuaW5zX2ggPSBzLndpbmRvd1tzdHJdOwoKICAgICAgLyogVVBEQVRFX0hBU0gocywgcy0+" + "aW5zX2gsIHMtPndpbmRvd1tzdHIgKyAxXSk7ICovCiAgICAgIHMuaW5zX2ggPSAoKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0KSBeIHMud2luZG93W3N0ciArIDFdKSAmIHMuaGFzaF9tYXNrOwovLyNpZiBNSU5f" + "TUFUQ0ggIT0gMwovLyAgICAgICAgQ2FsbCB1cGRhdGVfaGFzaCgpIE1JTl9NQVRDSC0zIG1vcmUgdGltZXMKLy8jZW5kaWYKICAgICAgd2hpbGUgKHMuaW5zZXJ0KSB7CiAgICAgICAgLyogVVBEQVRFX0hBU0go" + "cywgcy0+aW5zX2gsIHMtPndpbmRvd1tzdHIgKyBNSU5fTUFUQ0gtMV0pOyAqLwogICAgICAgIHMuaW5zX2ggPSAoKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0KSBeIHMud2luZG93W3N0ciArIE1JTl9NQVRDSCAt" + "IDFdKSAmIHMuaGFzaF9tYXNrOwoKICAgICAgICBzLnByZXZbc3RyICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdOwogICAgICAgIHMuaGVhZFtzLmluc19oXSA9IHN0cjsKICAgICAgICBzdHIrKzsKICAg" + "ICAgICBzLmluc2VydC0tOwogICAgICAgIGlmIChzLmxvb2thaGVhZCArIHMuaW5zZXJ0IDwgTUlOX01BVENIKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIC8qIElmIHRo" + "ZSB3aG9sZSBpbnB1dCBoYXMgbGVzcyB0aGFuIE1JTl9NQVRDSCBieXRlcywgaW5zX2ggaXMgZ2FyYmFnZSwKICAgICAqIGJ1dCB0aGlzIGlzIG5vdCBpbXBvcnRhbnQgc2luY2Ugb25seSBsaXRlcmFsIGJ5dGVz" + "IHdpbGwgYmUgZW1pdHRlZC4KICAgICAqLwoKICB9IHdoaWxlIChzLmxvb2thaGVhZCA8IE1JTl9MT09LQUhFQUQgJiYgcy5zdHJtLmF2YWlsX2luICE9PSAwKTsKCiAgLyogSWYgdGhlIFdJTl9JTklUIGJ5dGVz" + "IGFmdGVyIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgZGF0YSBoYXZlIG5ldmVyIGJlZW4KICAgKiB3cml0dGVuLCB0aGVuIHplcm8gdGhvc2UgYnl0ZXMgaW4gb3JkZXIgdG8gYXZvaWQgbWVtb3J5IGNoZWNrIHJl" + "cG9ydHMgb2YKICAgKiB0aGUgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgKG9yIHVuaW5pdGlhbGlzZWQgYXMgSnVsaWFuIHdyaXRlcykgYnl0ZXMgYnkKICAgKiB0aGUgbG9uZ2VzdCBtYXRjaCByb3V0aW5lcy4gIFVw" + "ZGF0ZSB0aGUgaGlnaCB3YXRlciBtYXJrIGZvciB0aGUgbmV4dAogICAqIHRpbWUgdGhyb3VnaCBoZXJlLiAgV0lOX0lOSVQgaXMgc2V0IHRvIE1BWF9NQVRDSCBzaW5jZSB0aGUgbG9uZ2VzdCBtYXRjaAogICAq" + "IHJvdXRpbmVzIGFsbG93IHNjYW5uaW5nIHRvIHN0cnN0YXJ0ICsgTUFYX01BVENILCBpZ25vcmluZyBsb29rYWhlYWQuCiAgICovCi8vICBpZiAocy5oaWdoX3dhdGVyIDwgcy53aW5kb3dfc2l6ZSkgewovLyAg" + "ICB2YXIgY3VyciA9IHMuc3Ryc3RhcnQgKyBzLmxvb2thaGVhZDsKLy8gICAgdmFyIGluaXQgPSAwOwovLwovLyAgICBpZiAocy5oaWdoX3dhdGVyIDwgY3VycikgewovLyAgICAgIC8qIFByZXZpb3VzIGhpZ2gg" + "d2F0ZXIgbWFyayBiZWxvdyBjdXJyZW50IGRhdGEgLS0gemVybyBXSU5fSU5JVAovLyAgICAgICAqIGJ5dGVzIG9yIHVwIHRvIGVuZCBvZiB3aW5kb3csIHdoaWNoZXZlciBpcyBsZXNzLgovLyAgICAgICAqLwov" + "LyAgICAgIGluaXQgPSBzLndpbmRvd19zaXplIC0gY3VycjsKLy8gICAgICBpZiAoaW5pdCA+IFdJTl9JTklUKQovLyAgICAgICAgaW5pdCA9IFdJTl9JTklUOwovLyAgICAgIHptZW16ZXJvKHMtPndpbmRvdyAr" + "IGN1cnIsICh1bnNpZ25lZClpbml0KTsKLy8gICAgICBzLT5oaWdoX3dhdGVyID0gY3VyciArIGluaXQ7Ci8vICAgIH0KLy8gICAgZWxzZSBpZiAocy0+aGlnaF93YXRlciA8ICh1bGcpY3VyciArIFdJTl9JTklU" + "KSB7Ci8vICAgICAgLyogSGlnaCB3YXRlciBtYXJrIGF0IG9yIGFib3ZlIGN1cnJlbnQgZGF0YSwgYnV0IGJlbG93IGN1cnJlbnQgZGF0YQovLyAgICAgICAqIHBsdXMgV0lOX0lOSVQgLS0gemVybyBvdXQgdG8g" + "Y3VycmVudCBkYXRhIHBsdXMgV0lOX0lOSVQsIG9yIHVwCi8vICAgICAgICogdG8gZW5kIG9mIHdpbmRvdywgd2hpY2hldmVyIGlzIGxlc3MuCi8vICAgICAgICovCi8vICAgICAgaW5pdCA9ICh1bGcpY3VyciAr" + "IFdJTl9JTklUIC0gcy0+aGlnaF93YXRlcjsKLy8gICAgICBpZiAoaW5pdCA+IHMtPndpbmRvd19zaXplIC0gcy0+aGlnaF93YXRlcikKLy8gICAgICAgIGluaXQgPSBzLT53aW5kb3dfc2l6ZSAtIHMtPmhpZ2hf" + "d2F0ZXI7Ci8vICAgICAgem1lbXplcm8ocy0+d2luZG93ICsgcy0+aGlnaF93YXRlciwgKHVuc2lnbmVkKWluaXQpOwovLyAgICAgIHMtPmhpZ2hfd2F0ZXIgKz0gaW5pdDsKLy8gICAgfQovLyAgfQovLwovLyAg" + "QXNzZXJ0KCh1bGcpcy0+c3Ryc3RhcnQgPD0gcy0+d2luZG93X3NpemUgLSBNSU5fTE9PS0FIRUFELAovLyAgICAibm90IGVub3VnaCByb29tIGZvciBzZWFyY2giKTsKfQoKLyogPT09PT09PT09PT09PT09PT09" + "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIENvcHkgd2l0aG91dCBjb21wcmVzc2lvbiBhcyBtdWNoIGFzIHBvc3NpYmxlIGZyb20gdGhlIGlucHV0" + "IHN0cmVhbSwgcmV0dXJuCiAqIHRoZSBjdXJyZW50IGJsb2NrIHN0YXRlLgogKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGluc2VydCBuZXcgc3RyaW5ncyBpbiB0aGUgZGljdGlvbmFyeSBzaW5jZQogKiB1bmNv" + "bXByZXNzaWJsZSBkYXRhIGlzIHByb2JhYmx5IG5vdCB1c2VmdWwuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZAogKiBvbmx5IGZvciB0aGUgbGV2ZWw9MCBjb21wcmVzc2lvbiBvcHRpb24uCiAqIE5PVEU6IHRoaXMg" + "ZnVuY3Rpb24gc2hvdWxkIGJlIG9wdGltaXplZCB0byBhdm9pZCBleHRyYSBjb3B5aW5nIGZyb20KICogd2luZG93IHRvIHBlbmRpbmdfYnVmLgogKi8KZnVuY3Rpb24gZGVmbGF0ZV9zdG9yZWQocywgZmx1c2gp" + "IHsKICAvKiBTdG9yZWQgYmxvY2tzIGFyZSBsaW1pdGVkIHRvIDB4ZmZmZiBieXRlcywgcGVuZGluZ19idWYgaXMgbGltaXRlZAogICAqIHRvIHBlbmRpbmdfYnVmX3NpemUsIGFuZCBlYWNoIHN0b3JlZCBibG9j" + "ayBoYXMgYSA1IGJ5dGUgaGVhZGVyOgogICAqLwogIHZhciBtYXhfYmxvY2tfc2l6ZSA9IDB4ZmZmZjsKCiAgaWYgKG1heF9ibG9ja19zaXplID4gcy5wZW5kaW5nX2J1Zl9zaXplIC0gNSkgewogICAgbWF4X2Js" + "b2NrX3NpemUgPSBzLnBlbmRpbmdfYnVmX3NpemUgLSA1OwogIH0KCiAgLyogQ29weSBhcyBtdWNoIGFzIHBvc3NpYmxlIGZyb20gaW5wdXQgdG8gb3V0cHV0OiAqLwogIGZvciAoOzspIHsKICAgIC8qIEZpbGwg" + "dGhlIHdpbmRvdyBhcyBtdWNoIGFzIHBvc3NpYmxlOiAqLwogICAgaWYgKHMubG9va2FoZWFkIDw9IDEpIHsKCiAgICAgIC8vQXNzZXJ0KHMtPnN0cnN0YXJ0IDwgcy0+d19zaXplK01BWF9ESVNUKHMpIHx8CiAg" + "ICAgIC8vICBzLT5ibG9ja19zdGFydCA+PSAobG9uZylzLT53X3NpemUsICJzbGlkZSB0b28gbGF0ZSIpOwovLyAgICAgIGlmICghKHMuc3Ryc3RhcnQgPCBzLndfc2l6ZSArIChzLndfc2l6ZSAtIE1JTl9MT09L" + "QUhFQUQpIHx8Ci8vICAgICAgICBzLmJsb2NrX3N0YXJ0ID49IHMud19zaXplKSkgewovLyAgICAgICAgdGhyb3cgIG5ldyBFcnJvcigic2xpZGUgdG9vIGxhdGUiKTsKLy8gICAgICB9CgogICAgICBmaWxsX3dp" + "bmRvdyhzKTsKICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwICYmIGZsdXNoID09PSBaX05PX0ZMVVNIKSB7CiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgfQoKICAgICAgaWYgKHMubG9va2Fo" + "ZWFkID09PSAwKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgLyogZmx1c2ggdGhlIGN1cnJlbnQgYmxvY2sgKi8KICAgIH0KICAgIC8vQXNzZXJ0KHMtPmJsb2NrX3N0YXJ0ID49IDBMLCAiYmxvY2sg" + "Z29uZSIpOwovLyAgICBpZiAocy5ibG9ja19zdGFydCA8IDApIHRocm93IG5ldyBFcnJvcigiYmxvY2sgZ29uZSIpOwoKICAgIHMuc3Ryc3RhcnQgKz0gcy5sb29rYWhlYWQ7CiAgICBzLmxvb2thaGVhZCA9IDA7" + "CgogICAgLyogRW1pdCBhIHN0b3JlZCBibG9jayBpZiBwZW5kaW5nX2J1ZiB3aWxsIGJlIGZ1bGw6ICovCiAgICB2YXIgbWF4X3N0YXJ0ID0gcy5ibG9ja19zdGFydCArIG1heF9ibG9ja19zaXplOwoKICAgIGlm" + "IChzLnN0cnN0YXJ0ID09PSAwIHx8IHMuc3Ryc3RhcnQgPj0gbWF4X3N0YXJ0KSB7CiAgICAgIC8qIHN0cnN0YXJ0ID09IDAgaXMgcG9zc2libGUgd2hlbiB3cmFwYXJvdW5kIG9uIDE2LWJpdCBtYWNoaW5lICov" + "CiAgICAgIHMubG9va2FoZWFkID0gcy5zdHJzdGFydCAtIG1heF9zdGFydDsKICAgICAgcy5zdHJzdGFydCA9IG1heF9zdGFydDsKICAgICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqLwogICAgICBmbHVz" + "aF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgICB9CiAgICAgIC8qKiovCgoKICAgIH0KICAg" + "IC8qIEZsdXNoIGlmIHdlIG1heSBoYXZlIHRvIHNsaWRlLCBvdGhlcndpc2UgYmxvY2tfc3RhcnQgbWF5IGJlY29tZQogICAgICogbmVnYXRpdmUgYW5kIHRoZSBkYXRhIHdpbGwgYmUgZ29uZToKICAgICAqLwog" + "ICAgaWYgKHMuc3Ryc3RhcnQgLSBzLmJsb2NrX3N0YXJ0ID49IChzLndfc2l6ZSAtIE1JTl9MT09LQUhFQUQpKSB7CiAgICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi8KICAgICAgZmx1c2hfYmxvY2tf" + "b25seShzLCBmYWxzZSk7CiAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgfQogICAgICAvKioqLwogICAgfQogIH0KCiAgcy5pbnNl" + "cnQgPSAwOwoKICBpZiAoZmx1c2ggPT09IFpfRklOSVNIKSB7CiAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDEpOyAqKiovCiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIHRydWUpOwogICAgaWYgKHMuc3RybS5hdmFp" + "bF9vdXQgPT09IDApIHsKICAgICAgcmV0dXJuIEJTX0ZJTklTSF9TVEFSVEVEOwogICAgfQogICAgLyoqKi8KICAgIHJldHVybiBCU19GSU5JU0hfRE9ORTsKICB9CgogIGlmIChzLnN0cnN0YXJ0ID4gcy5ibG9j" + "a19zdGFydCkgewogICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqLwogICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7CiAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICByZXR1" + "cm4gQlNfTkVFRF9NT1JFOwogICAgfQogICAgLyoqKi8KICB9CgogIHJldHVybiBCU19ORUVEX01PUkU7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09" + "PT09PT09PT09PT09PT09PT09PT09PQogKiBDb21wcmVzcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGZyb20gdGhlIGlucHV0IHN0cmVhbSwgcmV0dXJuIHRoZSBjdXJyZW50CiAqIGJsb2NrIHN0YXRlLgogKiBUaGlz" + "IGZ1bmN0aW9uIGRvZXMgbm90IHBlcmZvcm0gbGF6eSBldmFsdWF0aW9uIG9mIG1hdGNoZXMgYW5kIGluc2VydHMKICogbmV3IHN0cmluZ3MgaW4gdGhlIGRpY3Rpb25hcnkgb25seSBmb3IgdW5tYXRjaGVkIHN0" + "cmluZ3Mgb3IgZm9yIHNob3J0CiAqIG1hdGNoZXMuIEl0IGlzIHVzZWQgb25seSBmb3IgdGhlIGZhc3QgY29tcHJlc3Npb24gb3B0aW9ucy4KICovCmZ1bmN0aW9uIGRlZmxhdGVfZmFzdChzLCBmbHVzaCkgewog" + "IHZhciBoYXNoX2hlYWQ7ICAgICAgICAvKiBoZWFkIG9mIHRoZSBoYXNoIGNoYWluICovCiAgdmFyIGJmbHVzaDsgICAgICAgICAgIC8qIHNldCBpZiBjdXJyZW50IGJsb2NrIG11c3QgYmUgZmx1c2hlZCAqLwoK" + "ICBmb3IgKDs7KSB7CiAgICAvKiBNYWtlIHN1cmUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBlbm91Z2ggbG9va2FoZWFkLCBleGNlcHQKICAgICAqIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0IGZpbGUuIFdlIG5lZWQg" + "TUFYX01BVENIIGJ5dGVzCiAgICAgKiBmb3IgdGhlIG5leHQgbWF0Y2gsIHBsdXMgTUlOX01BVENIIGJ5dGVzIHRvIGluc2VydCB0aGUKICAgICAqIHN0cmluZyBmb2xsb3dpbmcgdGhlIG5leHQgbWF0Y2guCiAg" + "ICAgKi8KICAgIGlmIChzLmxvb2thaGVhZCA8IE1JTl9MT09LQUhFQUQpIHsKICAgICAgZmlsbF93aW5kb3cocyk7CiAgICAgIGlmIChzLmxvb2thaGVhZCA8IE1JTl9MT09LQUhFQUQgJiYgZmx1c2ggPT09IFpf" + "Tk9fRkxVU0gpIHsKICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgICB9CiAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkgewogICAgICAgIGJyZWFrOyAvKiBmbHVzaCB0aGUgY3VycmVudCBibG9j" + "ayAqLwogICAgICB9CiAgICB9CgogICAgLyogSW5zZXJ0IHRoZSBzdHJpbmcgd2luZG93W3N0cnN0YXJ0IC4uIHN0cnN0YXJ0KzJdIGluIHRoZQogICAgICogZGljdGlvbmFyeSwgYW5kIHNldCBoYXNoX2hlYWQg" + "dG8gdGhlIGhlYWQgb2YgdGhlIGhhc2ggY2hhaW46CiAgICAgKi8KICAgIGhhc2hfaGVhZCA9IDAvKk5JTCovOwogICAgaWYgKHMubG9va2FoZWFkID49IE1JTl9NQVRDSCkgewogICAgICAvKioqIElOU0VSVF9T" + "VFJJTkcocywgcy5zdHJzdGFydCwgaGFzaF9oZWFkKTsgKioqLwogICAgICBzLmluc19oID0gKChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCkgXiBzLndpbmRvd1tzLnN0cnN0YXJ0ICsgTUlOX01BVENIIC0gMV0p" + "ICYgcy5oYXNoX21hc2s7CiAgICAgIGhhc2hfaGVhZCA9IHMucHJldltzLnN0cnN0YXJ0ICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdOwogICAgICBzLmhlYWRbcy5pbnNfaF0gPSBzLnN0cnN0YXJ0Owog" + "ICAgICAvKioqLwogICAgfQoKICAgIC8qIEZpbmQgdGhlIGxvbmdlc3QgbWF0Y2gsIGRpc2NhcmRpbmcgdGhvc2UgPD0gcHJldl9sZW5ndGguCiAgICAgKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgYWx3YXlzIG1h" + "dGNoX2xlbmd0aCA8IE1JTl9NQVRDSAogICAgICovCiAgICBpZiAoaGFzaF9oZWFkICE9PSAwLypOSUwqLyAmJiAoKHMuc3Ryc3RhcnQgLSBoYXNoX2hlYWQpIDw9IChzLndfc2l6ZSAtIE1JTl9MT09LQUhFQUQp" + "KSkgewogICAgICAvKiBUbyBzaW1wbGlmeSB0aGUgY29kZSwgd2UgcHJldmVudCBtYXRjaGVzIHdpdGggdGhlIHN0cmluZwogICAgICAgKiBvZiB3aW5kb3cgaW5kZXggMCAoaW4gcGFydGljdWxhciB3ZSBoYXZl" + "IHRvIGF2b2lkIGEgbWF0Y2gKICAgICAgICogb2YgdGhlIHN0cmluZyB3aXRoIGl0c2VsZiBhdCB0aGUgc3RhcnQgb2YgdGhlIGlucHV0IGZpbGUpLgogICAgICAgKi8KICAgICAgcy5tYXRjaF9sZW5ndGggPSBs" + "b25nZXN0X21hdGNoKHMsIGhhc2hfaGVhZCk7CiAgICAgIC8qIGxvbmdlc3RfbWF0Y2goKSBzZXRzIG1hdGNoX3N0YXJ0ICovCiAgICB9CiAgICBpZiAocy5tYXRjaF9sZW5ndGggPj0gTUlOX01BVENIKSB7CiAg" + "ICAgIC8vIGNoZWNrX21hdGNoKHMsIHMuc3Ryc3RhcnQsIHMubWF0Y2hfc3RhcnQsIHMubWF0Y2hfbGVuZ3RoKTsgLy8gZm9yIGRlYnVnIG9ubHkKCiAgICAgIC8qKiogX3RyX3RhbGx5X2Rpc3Qocywgcy5zdHJz" + "dGFydCAtIHMubWF0Y2hfc3RhcnQsCiAgICAgICAgICAgICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoIC0gTUlOX01BVENILCBiZmx1c2gpOyAqKiovCiAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCBz" + "LnN0cnN0YXJ0IC0gcy5tYXRjaF9zdGFydCwgcy5tYXRjaF9sZW5ndGggLSBNSU5fTUFUQ0gpOwoKICAgICAgcy5sb29rYWhlYWQgLT0gcy5tYXRjaF9sZW5ndGg7CgogICAgICAvKiBJbnNlcnQgbmV3IHN0cmlu" + "Z3MgaW4gdGhlIGhhc2ggdGFibGUgb25seSBpZiB0aGUgbWF0Y2ggbGVuZ3RoCiAgICAgICAqIGlzIG5vdCB0b28gbGFyZ2UuIFRoaXMgc2F2ZXMgdGltZSBidXQgZGVncmFkZXMgY29tcHJlc3Npb24uCiAgICAg" + "ICAqLwogICAgICBpZiAocy5tYXRjaF9sZW5ndGggPD0gcy5tYXhfbGF6eV9tYXRjaC8qbWF4X2luc2VydF9sZW5ndGgqLyAmJiBzLmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gpIHsKICAgICAgICBzLm1hdGNoX2xl" + "bmd0aC0tOyAvKiBzdHJpbmcgYXQgc3Ryc3RhcnQgYWxyZWFkeSBpbiB0YWJsZSAqLwogICAgICAgIGRvIHsKICAgICAgICAgIHMuc3Ryc3RhcnQrKzsKICAgICAgICAgIC8qKiogSU5TRVJUX1NUUklORyhzLCBz" + "LnN0cnN0YXJ0LCBoYXNoX2hlYWQpOyAqKiovCiAgICAgICAgICBzLmluc19oID0gKChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCkgXiBzLndpbmRvd1tzLnN0cnN0YXJ0ICsgTUlOX01BVENIIC0gMV0pICYgcy5o" + "YXNoX21hc2s7CiAgICAgICAgICBoYXNoX2hlYWQgPSBzLnByZXZbcy5zdHJzdGFydCAmIHMud19tYXNrXSA9IHMuaGVhZFtzLmluc19oXTsKICAgICAgICAgIHMuaGVhZFtzLmluc19oXSA9IHMuc3Ryc3RhcnQ7" + "CiAgICAgICAgICAvKioqLwogICAgICAgICAgLyogc3Ryc3RhcnQgbmV2ZXIgZXhjZWVkcyBXU0laRS1NQVhfTUFUQ0gsIHNvIHRoZXJlIGFyZQogICAgICAgICAgICogYWx3YXlzIE1JTl9NQVRDSCBieXRlcyBh" + "aGVhZC4KICAgICAgICAgICAqLwogICAgICAgIH0gd2hpbGUgKC0tcy5tYXRjaF9sZW5ndGggIT09IDApOwogICAgICAgIHMuc3Ryc3RhcnQrKzsKICAgICAgfSBlbHNlCiAgICAgIHsKICAgICAgICBzLnN0cnN0" + "YXJ0ICs9IHMubWF0Y2hfbGVuZ3RoOwogICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gMDsKICAgICAgICBzLmluc19oID0gcy53aW5kb3dbcy5zdHJzdGFydF07CiAgICAgICAgLyogVVBEQVRFX0hBU0gocywgcy5p" + "bnNfaCwgcy53aW5kb3dbcy5zdHJzdGFydCsxXSk7ICovCiAgICAgICAgcy5pbnNfaCA9ICgocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQpIF4gcy53aW5kb3dbcy5zdHJzdGFydCArIDFdKSAmIHMuaGFzaF9tYXNr" + "OwoKLy8jaWYgTUlOX01BVENIICE9IDMKLy8gICAgICAgICAgICAgICAgQ2FsbCBVUERBVEVfSEFTSCgpIE1JTl9NQVRDSC0zIG1vcmUgdGltZXMKLy8jZW5kaWYKICAgICAgICAvKiBJZiBsb29rYWhlYWQgPCBN" + "SU5fTUFUQ0gsIGluc19oIGlzIGdhcmJhZ2UsIGJ1dCBpdCBkb2VzIG5vdAogICAgICAgICAqIG1hdHRlciBzaW5jZSBpdCB3aWxsIGJlIHJlY29tcHV0ZWQgYXQgbmV4dCBkZWZsYXRlIGNhbGwuCiAgICAgICAg" + "ICovCiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8qIE5vIG1hdGNoLCBvdXRwdXQgYSBsaXRlcmFsIGJ5dGUgKi8KICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsIiVjIiwgcy53aW5kb3dbcy5zdHJzdGFydF0p" + "KTsKICAgICAgLyoqKiBfdHJfdGFsbHlfbGl0KHMsIHMud2luZG93W3Muc3Ryc3RhcnRdLCBiZmx1c2gpOyAqKiovCiAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0" + "YXJ0XSk7CgogICAgICBzLmxvb2thaGVhZC0tOwogICAgICBzLnN0cnN0YXJ0Kys7CiAgICB9CiAgICBpZiAoYmZsdXNoKSB7CiAgICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi8KICAgICAgZmx1c2hf" + "YmxvY2tfb25seShzLCBmYWxzZSk7CiAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgfQogICAgICAvKioqLwogICAgfQogIH0KICBz" + "Lmluc2VydCA9ICgocy5zdHJzdGFydCA8IChNSU5fTUFUQ0ggLSAxKSkgPyBzLnN0cnN0YXJ0IDogTUlOX01BVENIIC0gMSk7CiAgaWYgKGZsdXNoID09PSBaX0ZJTklTSCkgewogICAgLyoqKiBGTFVTSF9CTE9D" + "SyhzLCAxKTsgKioqLwogICAgZmx1c2hfYmxvY2tfb25seShzLCB0cnVlKTsKICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgIHJldHVybiBCU19GSU5JU0hfU1RBUlRFRDsKICAgIH0KICAg" + "IC8qKiovCiAgICByZXR1cm4gQlNfRklOSVNIX0RPTkU7CiAgfQogIGlmIChzLmxhc3RfbGl0KSB7CiAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDApOyAqKiovCiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNl" + "KTsKICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICB9CiAgICAvKioqLwogIH0KICByZXR1cm4gQlNfQkxPQ0tfRE9ORTsKfQoKLyogPT09PT09" + "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIFNhbWUgYXMgYWJvdmUsIGJ1dCBhY2hpZXZlcyBiZXR0ZXIgY29tcHJlc3Npb24u" + "IFdlIHVzZSBhIGxhenkKICogZXZhbHVhdGlvbiBmb3IgbWF0Y2hlczogYSBtYXRjaCBpcyBmaW5hbGx5IGFkb3B0ZWQgb25seSBpZiB0aGVyZSBpcwogKiBubyBiZXR0ZXIgbWF0Y2ggYXQgdGhlIG5leHQgd2lu" + "ZG93IHBvc2l0aW9uLgogKi8KZnVuY3Rpb24gZGVmbGF0ZV9zbG93KHMsIGZsdXNoKSB7CiAgdmFyIGhhc2hfaGVhZDsgICAgICAgICAgLyogaGVhZCBvZiBoYXNoIGNoYWluICovCiAgdmFyIGJmbHVzaDsgICAg" + "ICAgICAgICAgIC8qIHNldCBpZiBjdXJyZW50IGJsb2NrIG11c3QgYmUgZmx1c2hlZCAqLwoKICB2YXIgbWF4X2luc2VydDsKCiAgLyogUHJvY2VzcyB0aGUgaW5wdXQgYmxvY2suICovCiAgZm9yICg7Oykgewog" + "ICAgLyogTWFrZSBzdXJlIHRoYXQgd2UgYWx3YXlzIGhhdmUgZW5vdWdoIGxvb2thaGVhZCwgZXhjZXB0CiAgICAgKiBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBmaWxlLiBXZSBuZWVkIE1BWF9NQVRDSCBieXRl" + "cwogICAgICogZm9yIHRoZSBuZXh0IG1hdGNoLCBwbHVzIE1JTl9NQVRDSCBieXRlcyB0byBpbnNlcnQgdGhlCiAgICAgKiBzdHJpbmcgZm9sbG93aW5nIHRoZSBuZXh0IG1hdGNoLgogICAgICovCiAgICBpZiAo" + "cy5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEKSB7CiAgICAgIGZpbGxfd2luZG93KHMpOwogICAgICBpZiAocy5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEICYmIGZsdXNoID09PSBaX05PX0ZMVVNIKSB7CiAg" + "ICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgfQogICAgICBpZiAocy5sb29rYWhlYWQgPT09IDApIHsgYnJlYWs7IH0gLyogZmx1c2ggdGhlIGN1cnJlbnQgYmxvY2sgKi8KICAgIH0KCiAgICAvKiBJ" + "bnNlcnQgdGhlIHN0cmluZyB3aW5kb3dbc3Ryc3RhcnQgLi4gc3Ryc3RhcnQrMl0gaW4gdGhlCiAgICAgKiBkaWN0aW9uYXJ5LCBhbmQgc2V0IGhhc2hfaGVhZCB0byB0aGUgaGVhZCBvZiB0aGUgaGFzaCBjaGFp" + "bjoKICAgICAqLwogICAgaGFzaF9oZWFkID0gMC8qTklMKi87CiAgICBpZiAocy5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7CiAgICAgIC8qKiogSU5TRVJUX1NUUklORyhzLCBzLnN0cnN0YXJ0LCBoYXNoX2hl" + "YWQpOyAqKiovCiAgICAgIHMuaW5zX2ggPSAoKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0KSBeIHMud2luZG93W3Muc3Ryc3RhcnQgKyBNSU5fTUFUQ0ggLSAxXSkgJiBzLmhhc2hfbWFzazsKICAgICAgaGFzaF9o" + "ZWFkID0gcy5wcmV2W3Muc3Ryc3RhcnQgJiBzLndfbWFza10gPSBzLmhlYWRbcy5pbnNfaF07CiAgICAgIHMuaGVhZFtzLmluc19oXSA9IHMuc3Ryc3RhcnQ7CiAgICAgIC8qKiovCiAgICB9CgogICAgLyogRmlu" + "ZCB0aGUgbG9uZ2VzdCBtYXRjaCwgZGlzY2FyZGluZyB0aG9zZSA8PSBwcmV2X2xlbmd0aC4KICAgICAqLwogICAgcy5wcmV2X2xlbmd0aCA9IHMubWF0Y2hfbGVuZ3RoOwogICAgcy5wcmV2X21hdGNoID0gcy5t" + "YXRjaF9zdGFydDsKICAgIHMubWF0Y2hfbGVuZ3RoID0gTUlOX01BVENIIC0gMTsKCiAgICBpZiAoaGFzaF9oZWFkICE9PSAwLypOSUwqLyAmJiBzLnByZXZfbGVuZ3RoIDwgcy5tYXhfbGF6eV9tYXRjaCAmJgog" + "ICAgICAgIHMuc3Ryc3RhcnQgLSBoYXNoX2hlYWQgPD0gKHMud19zaXplIC0gTUlOX0xPT0tBSEVBRCkvKk1BWF9ESVNUKHMpKi8pIHsKICAgICAgLyogVG8gc2ltcGxpZnkgdGhlIGNvZGUsIHdlIHByZXZlbnQg" + "bWF0Y2hlcyB3aXRoIHRoZSBzdHJpbmcKICAgICAgICogb2Ygd2luZG93IGluZGV4IDAgKGluIHBhcnRpY3VsYXIgd2UgaGF2ZSB0byBhdm9pZCBhIG1hdGNoCiAgICAgICAqIG9mIHRoZSBzdHJpbmcgd2l0aCBp" + "dHNlbGYgYXQgdGhlIHN0YXJ0IG9mIHRoZSBpbnB1dCBmaWxlKS4KICAgICAgICovCiAgICAgIHMubWF0Y2hfbGVuZ3RoID0gbG9uZ2VzdF9tYXRjaChzLCBoYXNoX2hlYWQpOwogICAgICAvKiBsb25nZXN0X21h" + "dGNoKCkgc2V0cyBtYXRjaF9zdGFydCAqLwoKICAgICAgaWYgKHMubWF0Y2hfbGVuZ3RoIDw9IDUgJiYKICAgICAgICAgKHMuc3RyYXRlZ3kgPT09IFpfRklMVEVSRUQgfHwgKHMubWF0Y2hfbGVuZ3RoID09PSBN" + "SU5fTUFUQ0ggJiYgcy5zdHJzdGFydCAtIHMubWF0Y2hfc3RhcnQgPiA0MDk2LypUT09fRkFSKi8pKSkgewoKICAgICAgICAvKiBJZiBwcmV2X21hdGNoIGlzIGFsc28gTUlOX01BVENILCBtYXRjaF9zdGFydCBp" + "cyBnYXJiYWdlCiAgICAgICAgICogYnV0IHdlIHdpbGwgaWdub3JlIHRoZSBjdXJyZW50IG1hdGNoIGFueXdheS4KICAgICAgICAgKi8KICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IE1JTl9NQVRDSCAtIDE7CiAg" + "ICAgIH0KICAgIH0KICAgIC8qIElmIHRoZXJlIHdhcyBhIG1hdGNoIGF0IHRoZSBwcmV2aW91cyBzdGVwIGFuZCB0aGUgY3VycmVudAogICAgICogbWF0Y2ggaXMgbm90IGJldHRlciwgb3V0cHV0IHRoZSBwcmV2" + "aW91cyBtYXRjaDoKICAgICAqLwogICAgaWYgKHMucHJldl9sZW5ndGggPj0gTUlOX01BVENIICYmIHMubWF0Y2hfbGVuZ3RoIDw9IHMucHJldl9sZW5ndGgpIHsKICAgICAgbWF4X2luc2VydCA9IHMuc3Ryc3Rh" + "cnQgKyBzLmxvb2thaGVhZCAtIE1JTl9NQVRDSDsKICAgICAgLyogRG8gbm90IGluc2VydCBzdHJpbmdzIGluIGhhc2ggdGFibGUgYmV5b25kIHRoaXMuICovCgogICAgICAvL2NoZWNrX21hdGNoKHMsIHMuc3Ry" + "c3RhcnQtMSwgcy5wcmV2X21hdGNoLCBzLnByZXZfbGVuZ3RoKTsKCiAgICAgIC8qKipfdHJfdGFsbHlfZGlzdChzLCBzLnN0cnN0YXJ0IC0gMSAtIHMucHJldl9tYXRjaCwKICAgICAgICAgICAgICAgICAgICAg" + "cy5wcmV2X2xlbmd0aCAtIE1JTl9NQVRDSCwgYmZsdXNoKTsqKiovCiAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCBzLnN0cnN0YXJ0IC0gMSAtIHMucHJldl9tYXRjaCwgcy5wcmV2X2xlbmd0aCAt" + "IE1JTl9NQVRDSCk7CiAgICAgIC8qIEluc2VydCBpbiBoYXNoIHRhYmxlIGFsbCBzdHJpbmdzIHVwIHRvIHRoZSBlbmQgb2YgdGhlIG1hdGNoLgogICAgICAgKiBzdHJzdGFydC0xIGFuZCBzdHJzdGFydCBhcmUg" + "YWxyZWFkeSBpbnNlcnRlZC4gSWYgdGhlcmUgaXMgbm90CiAgICAgICAqIGVub3VnaCBsb29rYWhlYWQsIHRoZSBsYXN0IHR3byBzdHJpbmdzIGFyZSBub3QgaW5zZXJ0ZWQgaW4KICAgICAgICogdGhlIGhhc2gg" + "dGFibGUuCiAgICAgICAqLwogICAgICBzLmxvb2thaGVhZCAtPSBzLnByZXZfbGVuZ3RoIC0gMTsKICAgICAgcy5wcmV2X2xlbmd0aCAtPSAyOwogICAgICBkbyB7CiAgICAgICAgaWYgKCsrcy5zdHJzdGFydCA8" + "PSBtYXhfaW5zZXJ0KSB7CiAgICAgICAgICAvKioqIElOU0VSVF9TVFJJTkcocywgcy5zdHJzdGFydCwgaGFzaF9oZWFkKTsgKioqLwogICAgICAgICAgcy5pbnNfaCA9ICgocy5pbnNfaCA8PCBzLmhhc2hfc2hp" + "ZnQpIF4gcy53aW5kb3dbcy5zdHJzdGFydCArIE1JTl9NQVRDSCAtIDFdKSAmIHMuaGFzaF9tYXNrOwogICAgICAgICAgaGFzaF9oZWFkID0gcy5wcmV2W3Muc3Ryc3RhcnQgJiBzLndfbWFza10gPSBzLmhlYWRb" + "cy5pbnNfaF07CiAgICAgICAgICBzLmhlYWRbcy5pbnNfaF0gPSBzLnN0cnN0YXJ0OwogICAgICAgICAgLyoqKi8KICAgICAgICB9CiAgICAgIH0gd2hpbGUgKC0tcy5wcmV2X2xlbmd0aCAhPT0gMCk7CiAgICAg" + "IHMubWF0Y2hfYXZhaWxhYmxlID0gMDsKICAgICAgcy5tYXRjaF9sZW5ndGggPSBNSU5fTUFUQ0ggLSAxOwogICAgICBzLnN0cnN0YXJ0Kys7CgogICAgICBpZiAoYmZsdXNoKSB7CiAgICAgICAgLyoqKiBGTFVT" + "SF9CTE9DSyhzLCAwKTsgKioqLwogICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gQlNfTkVFRF9N" + "T1JFOwogICAgICAgIH0KICAgICAgICAvKioqLwogICAgICB9CgogICAgfSBlbHNlIGlmIChzLm1hdGNoX2F2YWlsYWJsZSkgewogICAgICAvKiBJZiB0aGVyZSB3YXMgbm8gbWF0Y2ggYXQgdGhlIHByZXZpb3Vz" + "IHBvc2l0aW9uLCBvdXRwdXQgYQogICAgICAgKiBzaW5nbGUgbGl0ZXJhbC4gSWYgdGhlcmUgd2FzIGEgbWF0Y2ggYnV0IHRoZSBjdXJyZW50IG1hdGNoCiAgICAgICAqIGlzIGxvbmdlciwgdHJ1bmNhdGUgdGhl" + "IHByZXZpb3VzIG1hdGNoIHRvIGEgc2luZ2xlIGxpdGVyYWwuCiAgICAgICAqLwogICAgICAvL1RyYWNldnYoKHN0ZGVyciwiJWMiLCBzLT53aW5kb3dbcy0+c3Ryc3RhcnQtMV0pKTsKICAgICAgLyoqKiBfdHJf" + "dGFsbHlfbGl0KHMsIHMud2luZG93W3Muc3Ryc3RhcnQtMV0sIGJmbHVzaCk7ICoqKi8KICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIDAsIHMud2luZG93W3Muc3Ryc3RhcnQgLSAxXSk7CgogICAg" + "ICBpZiAoYmZsdXNoKSB7CiAgICAgICAgLyoqKiBGTFVTSF9CTE9DS19PTkxZKHMsIDApICoqKi8KICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgICAgICAvKioqLwogICAgICB9CiAgICAg" + "IHMuc3Ryc3RhcnQrKzsKICAgICAgcy5sb29rYWhlYWQtLTsKICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgICB9CiAgICB9IGVsc2Ug" + "ewogICAgICAvKiBUaGVyZSBpcyBubyBwcmV2aW91cyBtYXRjaCB0byBjb21wYXJlIHdpdGgsIHdhaXQgZm9yCiAgICAgICAqIHRoZSBuZXh0IHN0ZXAgdG8gZGVjaWRlLgogICAgICAgKi8KICAgICAgcy5tYXRj" + "aF9hdmFpbGFibGUgPSAxOwogICAgICBzLnN0cnN0YXJ0Kys7CiAgICAgIHMubG9va2FoZWFkLS07CiAgICB9CiAgfQogIC8vQXNzZXJ0IChmbHVzaCAhPSBaX05PX0ZMVVNILCAibm8gZmx1c2g/Iik7CiAgaWYg" + "KHMubWF0Y2hfYXZhaWxhYmxlKSB7CiAgICAvL1RyYWNldnYoKHN0ZGVyciwiJWMiLCBzLT53aW5kb3dbcy0+c3Ryc3RhcnQtMV0pKTsKICAgIC8qKiogX3RyX3RhbGx5X2xpdChzLCBzLndpbmRvd1tzLnN0cnN0" + "YXJ0LTFdLCBiZmx1c2gpOyAqKiovCiAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgMCwgcy53aW5kb3dbcy5zdHJzdGFydCAtIDFdKTsKCiAgICBzLm1hdGNoX2F2YWlsYWJsZSA9IDA7CiAgfQogIHMu" + "aW5zZXJ0ID0gcy5zdHJzdGFydCA8IE1JTl9NQVRDSCAtIDEgPyBzLnN0cnN0YXJ0IDogTUlOX01BVENIIC0gMTsKICBpZiAoZmx1c2ggPT09IFpfRklOSVNIKSB7CiAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDEp" + "OyAqKiovCiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIHRydWUpOwogICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgcmV0dXJuIEJTX0ZJTklTSF9TVEFSVEVEOwogICAgfQogICAgLyoqKi8K" + "ICAgIHJldHVybiBCU19GSU5JU0hfRE9ORTsKICB9CiAgaWYgKHMubGFzdF9saXQpIHsKICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi8KICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAg" + "aWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgIH0KICAgIC8qKiovCiAgfQoKICByZXR1cm4gQlNfQkxPQ0tfRE9ORTsKfQoKCi8qID09PT09PT09PT09" + "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBGb3IgWl9STEUsIHNpbXBseSBsb29rIGZvciBydW5zIG9mIGJ5dGVzLCBnZW5lcmF0ZSBt" + "YXRjaGVzIG9ubHkgb2YgZGlzdGFuY2UKICogb25lLiAgRG8gbm90IG1haW50YWluIGEgaGFzaCB0YWJsZS4gIChJdCB3aWxsIGJlIHJlZ2VuZXJhdGVkIGlmIHRoaXMgcnVuIG9mCiAqIGRlZmxhdGUgc3dpdGNo" + "ZXMgYXdheSBmcm9tIFpfUkxFLikKICovCmZ1bmN0aW9uIGRlZmxhdGVfcmxlKHMsIGZsdXNoKSB7CiAgdmFyIGJmbHVzaDsgICAgICAgICAgICAvKiBzZXQgaWYgY3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNo" + "ZWQgKi8KICB2YXIgcHJldjsgICAgICAgICAgICAgIC8qIGJ5dGUgYXQgZGlzdGFuY2Ugb25lIHRvIG1hdGNoICovCiAgdmFyIHNjYW4sIHN0cmVuZDsgICAgICAvKiBzY2FuIGdvZXMgdXAgdG8gc3RyZW5kIGZv" + "ciBsZW5ndGggb2YgcnVuICovCgogIHZhciBfd2luID0gcy53aW5kb3c7CgogIGZvciAoOzspIHsKICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHdlIGFsd2F5cyBoYXZlIGVub3VnaCBsb29rYWhlYWQsIGV4Y2VwdAog" + "ICAgICogYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQgZmlsZS4gV2UgbmVlZCBNQVhfTUFUQ0ggYnl0ZXMKICAgICAqIGZvciB0aGUgbG9uZ2VzdCBydW4sIHBsdXMgb25lIGZvciB0aGUgdW5yb2xsZWQgbG9vcC4K" + "ICAgICAqLwogICAgaWYgKHMubG9va2FoZWFkIDw9IE1BWF9NQVRDSCkgewogICAgICBmaWxsX3dpbmRvdyhzKTsKICAgICAgaWYgKHMubG9va2FoZWFkIDw9IE1BWF9NQVRDSCAmJiBmbHVzaCA9PT0gWl9OT19G" + "TFVTSCkgewogICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgIH0KICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7IGJyZWFrOyB9IC8qIGZsdXNoIHRoZSBjdXJyZW50IGJsb2NrICovCiAgICB9" + "CgogICAgLyogU2VlIGhvdyBtYW55IHRpbWVzIHRoZSBwcmV2aW91cyBieXRlIHJlcGVhdHMgKi8KICAgIHMubWF0Y2hfbGVuZ3RoID0gMDsKICAgIGlmIChzLmxvb2thaGVhZCA+PSBNSU5fTUFUQ0ggJiYgcy5z" + "dHJzdGFydCA+IDApIHsKICAgICAgc2NhbiA9IHMuc3Ryc3RhcnQgLSAxOwogICAgICBwcmV2ID0gX3dpbltzY2FuXTsKICAgICAgaWYgKHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysr" + "c2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dKSB7CiAgICAgICAgc3RyZW5kID0gcy5zdHJzdGFydCArIE1BWF9NQVRDSDsKICAgICAgICBkbyB7CiAgICAgICAgICAvKmpzaGludCBub2VtcHR5OmZhbHNl" + "Ki8KICAgICAgICB9IHdoaWxlIChwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmCiAgICAgICAgICAgICAgICAgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09" + "IF93aW5bKytzY2FuXSAmJgogICAgICAgICAgICAgICAgIHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYKICAgICAgICAgICAgICAgICBwcmV2ID09PSBfd2luWysrc2Nh" + "bl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmCiAgICAgICAgICAgICAgICAgc2NhbiA8IHN0cmVuZCk7CiAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBNQVhfTUFUQ0ggLSAoc3RyZW5kIC0gc2Nhbik7CiAg" + "ICAgICAgaWYgKHMubWF0Y2hfbGVuZ3RoID4gcy5sb29rYWhlYWQpIHsKICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gcy5sb29rYWhlYWQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vQXNzZXJ0KHNjYW4g" + "PD0gcy0+d2luZG93Kyh1SW50KShzLT53aW5kb3dfc2l6ZS0xKSwgIndpbGQgc2NhbiIpOwogICAgfQoKICAgIC8qIEVtaXQgbWF0Y2ggaWYgaGF2ZSBydW4gb2YgTUlOX01BVENIIG9yIGxvbmdlciwgZWxzZSBl" + "bWl0IGxpdGVyYWwgKi8KICAgIGlmIChzLm1hdGNoX2xlbmd0aCA+PSBNSU5fTUFUQ0gpIHsKICAgICAgLy9jaGVja19tYXRjaChzLCBzLnN0cnN0YXJ0LCBzLnN0cnN0YXJ0IC0gMSwgcy5tYXRjaF9sZW5ndGgp" + "OwoKICAgICAgLyoqKiBfdHJfdGFsbHlfZGlzdChzLCAxLCBzLm1hdGNoX2xlbmd0aCAtIE1JTl9NQVRDSCwgYmZsdXNoKTsgKioqLwogICAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgMSwgcy5tYXRj" + "aF9sZW5ndGggLSBNSU5fTUFUQ0gpOwoKICAgICAgcy5sb29rYWhlYWQgLT0gcy5tYXRjaF9sZW5ndGg7CiAgICAgIHMuc3Ryc3RhcnQgKz0gcy5tYXRjaF9sZW5ndGg7CiAgICAgIHMubWF0Y2hfbGVuZ3RoID0g" + "MDsKICAgIH0gZWxzZSB7CiAgICAgIC8qIE5vIG1hdGNoLCBvdXRwdXQgYSBsaXRlcmFsIGJ5dGUgKi8KICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsIiVjIiwgcy0+d2luZG93W3MtPnN0cnN0YXJ0XSkpOwogICAg" + "ICAvKioqIF90cl90YWxseV9saXQocywgcy53aW5kb3dbcy5zdHJzdGFydF0sIGJmbHVzaCk7ICoqKi8KICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIDAsIHMud2luZG93W3Muc3Ryc3RhcnRdKTsK" + "CiAgICAgIHMubG9va2FoZWFkLS07CiAgICAgIHMuc3Ryc3RhcnQrKzsKICAgIH0KICAgIGlmIChiZmx1c2gpIHsKICAgICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqLwogICAgICBmbHVzaF9ibG9ja19v" + "bmx5KHMsIGZhbHNlKTsKICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgICB9CiAgICAgIC8qKiovCiAgICB9CiAgfQogIHMuaW5zZXJ0" + "ID0gMDsKICBpZiAoZmx1c2ggPT09IFpfRklOSVNIKSB7CiAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDEpOyAqKiovCiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIHRydWUpOwogICAgaWYgKHMuc3RybS5hdmFpbF9v" + "dXQgPT09IDApIHsKICAgICAgcmV0dXJuIEJTX0ZJTklTSF9TVEFSVEVEOwogICAgfQogICAgLyoqKi8KICAgIHJldHVybiBCU19GSU5JU0hfRE9ORTsKICB9CiAgaWYgKHMubGFzdF9saXQpIHsKICAgIC8qKiog" + "RkxVU0hfQkxPQ0socywgMCk7ICoqKi8KICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAg" + "IH0KICAgIC8qKiovCiAgfQogIHJldHVybiBCU19CTE9DS19ET05FOwp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09" + "PT0KICogRm9yIFpfSFVGRk1BTl9PTkxZLCBkbyBub3QgbG9vayBmb3IgbWF0Y2hlcy4gIERvIG5vdCBtYWludGFpbiBhIGhhc2ggdGFibGUuCiAqIChJdCB3aWxsIGJlIHJlZ2VuZXJhdGVkIGlmIHRoaXMgcnVu" + "IG9mIGRlZmxhdGUgc3dpdGNoZXMgYXdheSBmcm9tIEh1ZmZtYW4uKQogKi8KZnVuY3Rpb24gZGVmbGF0ZV9odWZmKHMsIGZsdXNoKSB7CiAgdmFyIGJmbHVzaDsgICAgICAgICAgICAgLyogc2V0IGlmIGN1cnJl" + "bnQgYmxvY2sgbXVzdCBiZSBmbHVzaGVkICovCgogIGZvciAoOzspIHsKICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgYSBsaXRlcmFsIHRvIHdyaXRlLiAqLwogICAgaWYgKHMubG9va2FoZWFkID09PSAw" + "KSB7CiAgICAgIGZpbGxfd2luZG93KHMpOwogICAgICBpZiAocy5sb29rYWhlYWQgPT09IDApIHsKICAgICAgICBpZiAoZmx1c2ggPT09IFpfTk9fRkxVU0gpIHsKICAgICAgICAgIHJldHVybiBCU19ORUVEX01P" + "UkU7CiAgICAgICAgfQogICAgICAgIGJyZWFrOyAgICAgIC8qIGZsdXNoIHRoZSBjdXJyZW50IGJsb2NrICovCiAgICAgIH0KICAgIH0KCiAgICAvKiBPdXRwdXQgYSBsaXRlcmFsIGJ5dGUgKi8KICAgIHMubWF0" + "Y2hfbGVuZ3RoID0gMDsKICAgIC8vVHJhY2V2digoc3RkZXJyLCIlYyIsIHMtPndpbmRvd1tzLT5zdHJzdGFydF0pKTsKICAgIC8qKiogX3RyX3RhbGx5X2xpdChzLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSwgYmZs" + "dXNoKTsgKioqLwogICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIDAsIHMud2luZG93W3Muc3Ryc3RhcnRdKTsKICAgIHMubG9va2FoZWFkLS07CiAgICBzLnN0cnN0YXJ0Kys7CiAgICBpZiAoYmZsdXNo" + "KSB7CiAgICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi8KICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7CiAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgcmV0" + "dXJuIEJTX05FRURfTU9SRTsKICAgICAgfQogICAgICAvKioqLwogICAgfQogIH0KICBzLmluc2VydCA9IDA7CiAgaWYgKGZsdXNoID09PSBaX0ZJTklTSCkgewogICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAxKTsg" + "KioqLwogICAgZmx1c2hfYmxvY2tfb25seShzLCB0cnVlKTsKICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgIHJldHVybiBCU19GSU5JU0hfU1RBUlRFRDsKICAgIH0KICAgIC8qKiovCiAg" + "ICByZXR1cm4gQlNfRklOSVNIX0RPTkU7CiAgfQogIGlmIChzLmxhc3RfbGl0KSB7CiAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDApOyAqKiovCiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgIGlm" + "IChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICB9CiAgICAvKioqLwogIH0KICByZXR1cm4gQlNfQkxPQ0tfRE9ORTsKfQoKLyogVmFsdWVzIGZvciBtYXhf" + "bGF6eV9tYXRjaCwgZ29vZF9tYXRjaCBhbmQgbWF4X2NoYWluX2xlbmd0aCwgZGVwZW5kaW5nIG9uCiAqIHRoZSBkZXNpcmVkIHBhY2sgbGV2ZWwgKDAuLjkpLiBUaGUgdmFsdWVzIGdpdmVuIGJlbG93IGhhdmUg" + "YmVlbiB0dW5lZCB0bwogKiBleGNsdWRlIHdvcnN0IGNhc2UgcGVyZm9ybWFuY2UgZm9yIHBhdGhvbG9naWNhbCBmaWxlcy4gQmV0dGVyIHZhbHVlcyBtYXkgYmUKICogZm91bmQgZm9yIHNwZWNpZmljIGZpbGVz" + "LgogKi8KZnVuY3Rpb24gQ29uZmlnKGdvb2RfbGVuZ3RoLCBtYXhfbGF6eSwgbmljZV9sZW5ndGgsIG1heF9jaGFpbiwgZnVuYykgewogIHRoaXMuZ29vZF9sZW5ndGggPSBnb29kX2xlbmd0aDsKICB0aGlzLm1h" + "eF9sYXp5ID0gbWF4X2xhenk7CiAgdGhpcy5uaWNlX2xlbmd0aCA9IG5pY2VfbGVuZ3RoOwogIHRoaXMubWF4X2NoYWluID0gbWF4X2NoYWluOwogIHRoaXMuZnVuYyA9IGZ1bmM7Cn0KCnZhciBjb25maWd1cmF0" + "aW9uX3RhYmxlOwoKY29uZmlndXJhdGlvbl90YWJsZSA9IFsKICAvKiAgICAgIGdvb2QgbGF6eSBuaWNlIGNoYWluICovCiAgbmV3IENvbmZpZygwLCAwLCAwLCAwLCBkZWZsYXRlX3N0b3JlZCksICAgICAgICAg" + "IC8qIDAgc3RvcmUgb25seSAqLwogIG5ldyBDb25maWcoNCwgNCwgOCwgNCwgZGVmbGF0ZV9mYXN0KSwgICAgICAgICAgICAvKiAxIG1heCBzcGVlZCwgbm8gbGF6eSBtYXRjaGVzICovCiAgbmV3IENvbmZpZyg0" + "LCA1LCAxNiwgOCwgZGVmbGF0ZV9mYXN0KSwgICAgICAgICAgIC8qIDIgKi8KICBuZXcgQ29uZmlnKDQsIDYsIDMyLCAzMiwgZGVmbGF0ZV9mYXN0KSwgICAgICAgICAgLyogMyAqLwoKICBuZXcgQ29uZmlnKDQs" + "IDQsIDE2LCAxNiwgZGVmbGF0ZV9zbG93KSwgICAgICAgICAgLyogNCBsYXp5IG1hdGNoZXMgKi8KICBuZXcgQ29uZmlnKDgsIDE2LCAzMiwgMzIsIGRlZmxhdGVfc2xvdyksICAgICAgICAgLyogNSAqLwogIG5l" + "dyBDb25maWcoOCwgMTYsIDEyOCwgMTI4LCBkZWZsYXRlX3Nsb3cpLCAgICAgICAvKiA2ICovCiAgbmV3IENvbmZpZyg4LCAzMiwgMTI4LCAyNTYsIGRlZmxhdGVfc2xvdyksICAgICAgIC8qIDcgKi8KICBuZXcg" + "Q29uZmlnKDMyLCAxMjgsIDI1OCwgMTAyNCwgZGVmbGF0ZV9zbG93KSwgICAgLyogOCAqLwogIG5ldyBDb25maWcoMzIsIDI1OCwgMjU4LCA0MDk2LCBkZWZsYXRlX3Nsb3cpICAgICAvKiA5IG1heCBjb21wcmVz" + "c2lvbiAqLwpdOwoKCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBJbml0aWFsaXplIHRoZSAibG9uZ2VzdCBt" + "YXRjaCIgcm91dGluZXMgZm9yIGEgbmV3IHpsaWIgc3RyZWFtCiAqLwpmdW5jdGlvbiBsbV9pbml0KHMpIHsKICBzLndpbmRvd19zaXplID0gMiAqIHMud19zaXplOwoKICAvKioqIENMRUFSX0hBU0gocyk7ICoq" + "Ki8KICB6ZXJvKHMuaGVhZCk7IC8vIEZpbGwgd2l0aCBOSUwgKD0gMCk7CgogIC8qIFNldCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnM6CiAgICovCiAgcy5tYXhfbGF6eV9tYXRjaCA9IGNv" + "bmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0ubWF4X2xhenk7CiAgcy5nb29kX21hdGNoID0gY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5nb29kX2xlbmd0aDsKICBzLm5pY2VfbWF0Y2ggPSBjb25maWd1" + "cmF0aW9uX3RhYmxlW3MubGV2ZWxdLm5pY2VfbGVuZ3RoOwogIHMubWF4X2NoYWluX2xlbmd0aCA9IGNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0ubWF4X2NoYWluOwoKICBzLnN0cnN0YXJ0ID0gMDsKICBz" + "LmJsb2NrX3N0YXJ0ID0gMDsKICBzLmxvb2thaGVhZCA9IDA7CiAgcy5pbnNlcnQgPSAwOwogIHMubWF0Y2hfbGVuZ3RoID0gcy5wcmV2X2xlbmd0aCA9IE1JTl9NQVRDSCAtIDE7CiAgcy5tYXRjaF9hdmFpbGFi" + "bGUgPSAwOwogIHMuaW5zX2ggPSAwOwp9CgoKZnVuY3Rpb24gRGVmbGF0ZVN0YXRlKCkgewogIHRoaXMuc3RybSA9IG51bGw7ICAgICAgICAgICAgLyogcG9pbnRlciBiYWNrIHRvIHRoaXMgemxpYiBzdHJlYW0g" + "Ki8KICB0aGlzLnN0YXR1cyA9IDA7ICAgICAgICAgICAgLyogYXMgdGhlIG5hbWUgaW1wbGllcyAqLwogIHRoaXMucGVuZGluZ19idWYgPSBudWxsOyAgICAgIC8qIG91dHB1dCBzdGlsbCBwZW5kaW5nICovCiAg" + "dGhpcy5wZW5kaW5nX2J1Zl9zaXplID0gMDsgIC8qIHNpemUgb2YgcGVuZGluZ19idWYgKi8KICB0aGlzLnBlbmRpbmdfb3V0ID0gMDsgICAgICAgLyogbmV4dCBwZW5kaW5nIGJ5dGUgdG8gb3V0cHV0IHRvIHRo" + "ZSBzdHJlYW0gKi8KICB0aGlzLnBlbmRpbmcgPSAwOyAgICAgICAgICAgLyogbmIgb2YgYnl0ZXMgaW4gdGhlIHBlbmRpbmcgYnVmZmVyICovCiAgdGhpcy53cmFwID0gMDsgICAgICAgICAgICAgIC8qIGJpdCAw" + "IHRydWUgZm9yIHpsaWIsIGJpdCAxIHRydWUgZm9yIGd6aXAgKi8KICB0aGlzLmd6aGVhZCA9IG51bGw7ICAgICAgICAgLyogZ3ppcCBoZWFkZXIgaW5mb3JtYXRpb24gdG8gd3JpdGUgKi8KICB0aGlzLmd6aW5k" + "ZXggPSAwOyAgICAgICAgICAgLyogd2hlcmUgaW4gZXh0cmEsIG5hbWUsIG9yIGNvbW1lbnQgKi8KICB0aGlzLm1ldGhvZCA9IFpfREVGTEFURUQ7IC8qIGNhbiBvbmx5IGJlIERFRkxBVEVEICovCiAgdGhpcy5s" + "YXN0X2ZsdXNoID0gLTE7ICAgLyogdmFsdWUgb2YgZmx1c2ggcGFyYW0gZm9yIHByZXZpb3VzIGRlZmxhdGUgY2FsbCAqLwoKICB0aGlzLndfc2l6ZSA9IDA7ICAvKiBMWjc3IHdpbmRvdyBzaXplICgzMksgYnkg" + "ZGVmYXVsdCkgKi8KICB0aGlzLndfYml0cyA9IDA7ICAvKiBsb2cyKHdfc2l6ZSkgICg4Li4xNikgKi8KICB0aGlzLndfbWFzayA9IDA7ICAvKiB3X3NpemUgLSAxICovCgogIHRoaXMud2luZG93ID0gbnVsbDsK" + "ICAvKiBTbGlkaW5nIHdpbmRvdy4gSW5wdXQgYnl0ZXMgYXJlIHJlYWQgaW50byB0aGUgc2Vjb25kIGhhbGYgb2YgdGhlIHdpbmRvdywKICAgKiBhbmQgbW92ZSB0byB0aGUgZmlyc3QgaGFsZiBsYXRlciB0byBr" + "ZWVwIGEgZGljdGlvbmFyeSBvZiBhdCBsZWFzdCB3U2l6ZQogICAqIGJ5dGVzLiBXaXRoIHRoaXMgb3JnYW5pemF0aW9uLCBtYXRjaGVzIGFyZSBsaW1pdGVkIHRvIGEgZGlzdGFuY2Ugb2YKICAgKiB3U2l6ZS1N" + "QVhfTUFUQ0ggYnl0ZXMsIGJ1dCB0aGlzIGVuc3VyZXMgdGhhdCBJTyBpcyBhbHdheXMKICAgKiBwZXJmb3JtZWQgd2l0aCBhIGxlbmd0aCBtdWx0aXBsZSBvZiB0aGUgYmxvY2sgc2l6ZS4KICAgKi8KCiAgdGhp" + "cy53aW5kb3dfc2l6ZSA9IDA7CiAgLyogQWN0dWFsIHNpemUgb2Ygd2luZG93OiAyKndTaXplLCBleGNlcHQgd2hlbiB0aGUgdXNlciBpbnB1dCBidWZmZXIKICAgKiBpcyBkaXJlY3RseSB1c2VkIGFzIHNsaWRp" + "bmcgd2luZG93LgogICAqLwoKICB0aGlzLnByZXYgPSBudWxsOwogIC8qIExpbmsgdG8gb2xkZXIgc3RyaW5nIHdpdGggc2FtZSBoYXNoIGluZGV4LiBUbyBsaW1pdCB0aGUgc2l6ZSBvZiB0aGlzCiAgICogYXJy" + "YXkgdG8gNjRLLCB0aGlzIGxpbmsgaXMgbWFpbnRhaW5lZCBvbmx5IGZvciB0aGUgbGFzdCAzMksgc3RyaW5ncy4KICAgKiBBbiBpbmRleCBpbiB0aGlzIGFycmF5IGlzIHRodXMgYSB3aW5kb3cgaW5kZXggbW9k" + "dWxvIDMySy4KICAgKi8KCiAgdGhpcy5oZWFkID0gbnVsbDsgICAvKiBIZWFkcyBvZiB0aGUgaGFzaCBjaGFpbnMgb3IgTklMLiAqLwoKICB0aGlzLmluc19oID0gMDsgICAgICAgLyogaGFzaCBpbmRleCBvZiBz" + "dHJpbmcgdG8gYmUgaW5zZXJ0ZWQgKi8KICB0aGlzLmhhc2hfc2l6ZSA9IDA7ICAgLyogbnVtYmVyIG9mIGVsZW1lbnRzIGluIGhhc2ggdGFibGUgKi8KICB0aGlzLmhhc2hfYml0cyA9IDA7ICAgLyogbG9nMiho" + "YXNoX3NpemUpICovCiAgdGhpcy5oYXNoX21hc2sgPSAwOyAgIC8qIGhhc2hfc2l6ZS0xICovCgogIHRoaXMuaGFzaF9zaGlmdCA9IDA7CiAgLyogTnVtYmVyIG9mIGJpdHMgYnkgd2hpY2ggaW5zX2ggbXVzdCBi" + "ZSBzaGlmdGVkIGF0IGVhY2ggaW5wdXQKICAgKiBzdGVwLiBJdCBtdXN0IGJlIHN1Y2ggdGhhdCBhZnRlciBNSU5fTUFUQ0ggc3RlcHMsIHRoZSBvbGRlc3QKICAgKiBieXRlIG5vIGxvbmdlciB0YWtlcyBwYXJ0" + "IGluIHRoZSBoYXNoIGtleSwgdGhhdCBpczoKICAgKiAgIGhhc2hfc2hpZnQgKiBNSU5fTUFUQ0ggPj0gaGFzaF9iaXRzCiAgICovCgogIHRoaXMuYmxvY2tfc3RhcnQgPSAwOwogIC8qIFdpbmRvdyBwb3NpdGlv" + "biBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjdXJyZW50IG91dHB1dCBibG9jay4gR2V0cwogICAqIG5lZ2F0aXZlIHdoZW4gdGhlIHdpbmRvdyBpcyBtb3ZlZCBiYWNrd2FyZHMuCiAgICovCgogIHRoaXMubWF0" + "Y2hfbGVuZ3RoID0gMDsgICAgICAvKiBsZW5ndGggb2YgYmVzdCBtYXRjaCAqLwogIHRoaXMucHJldl9tYXRjaCA9IDA7ICAgICAgICAvKiBwcmV2aW91cyBtYXRjaCAqLwogIHRoaXMubWF0Y2hfYXZhaWxhYmxl" + "ID0gMDsgICAvKiBzZXQgaWYgcHJldmlvdXMgbWF0Y2ggZXhpc3RzICovCiAgdGhpcy5zdHJzdGFydCA9IDA7ICAgICAgICAgIC8qIHN0YXJ0IG9mIHN0cmluZyB0byBpbnNlcnQgKi8KICB0aGlzLm1hdGNoX3N0" + "YXJ0ID0gMDsgICAgICAgLyogc3RhcnQgb2YgbWF0Y2hpbmcgc3RyaW5nICovCiAgdGhpcy5sb29rYWhlYWQgPSAwOyAgICAgICAgIC8qIG51bWJlciBvZiB2YWxpZCBieXRlcyBhaGVhZCBpbiB3aW5kb3cgKi8K" + "CiAgdGhpcy5wcmV2X2xlbmd0aCA9IDA7CiAgLyogTGVuZ3RoIG9mIHRoZSBiZXN0IG1hdGNoIGF0IHByZXZpb3VzIHN0ZXAuIE1hdGNoZXMgbm90IGdyZWF0ZXIgdGhhbiB0aGlzCiAgICogYXJlIGRpc2NhcmRl" + "ZC4gVGhpcyBpcyB1c2VkIGluIHRoZSBsYXp5IG1hdGNoIGV2YWx1YXRpb24uCiAgICovCgogIHRoaXMubWF4X2NoYWluX2xlbmd0aCA9IDA7CiAgLyogVG8gc3BlZWQgdXAgZGVmbGF0aW9uLCBoYXNoIGNoYWlu" + "cyBhcmUgbmV2ZXIgc2VhcmNoZWQgYmV5b25kIHRoaXMKICAgKiBsZW5ndGguICBBIGhpZ2hlciBsaW1pdCBpbXByb3ZlcyBjb21wcmVzc2lvbiByYXRpbyBidXQgZGVncmFkZXMgdGhlCiAgICogc3BlZWQuCiAg" + "ICovCgogIHRoaXMubWF4X2xhenlfbWF0Y2ggPSAwOwogIC8qIEF0dGVtcHQgdG8gZmluZCBhIGJldHRlciBtYXRjaCBvbmx5IHdoZW4gdGhlIGN1cnJlbnQgbWF0Y2ggaXMgc3RyaWN0bHkKICAgKiBzbWFsbGVy" + "IHRoYW4gdGhpcyB2YWx1ZS4gVGhpcyBtZWNoYW5pc20gaXMgdXNlZCBvbmx5IGZvciBjb21wcmVzc2lvbgogICAqIGxldmVscyA+PSA0LgogICAqLwogIC8vIFRoYXQncyBhbGlhcyB0byBtYXhfbGF6eV9tYXRj" + "aCwgZG9uJ3QgdXNlIGRpcmVjdGx5CiAgLy90aGlzLm1heF9pbnNlcnRfbGVuZ3RoID0gMDsKICAvKiBJbnNlcnQgbmV3IHN0cmluZ3MgaW4gdGhlIGhhc2ggdGFibGUgb25seSBpZiB0aGUgbWF0Y2ggbGVuZ3Ro" + "IGlzIG5vdAogICAqIGdyZWF0ZXIgdGhhbiB0aGlzIGxlbmd0aC4gVGhpcyBzYXZlcyB0aW1lIGJ1dCBkZWdyYWRlcyBjb21wcmVzc2lvbi4KICAgKiBtYXhfaW5zZXJ0X2xlbmd0aCBpcyB1c2VkIG9ubHkgZm9y" + "IGNvbXByZXNzaW9uIGxldmVscyA8PSAzLgogICAqLwoKICB0aGlzLmxldmVsID0gMDsgICAgIC8qIGNvbXByZXNzaW9uIGxldmVsICgxLi45KSAqLwogIHRoaXMuc3RyYXRlZ3kgPSAwOyAgLyogZmF2b3Igb3Ig" + "Zm9yY2UgSHVmZm1hbiBjb2RpbmcqLwoKICB0aGlzLmdvb2RfbWF0Y2ggPSAwOwogIC8qIFVzZSBhIGZhc3RlciBzZWFyY2ggd2hlbiB0aGUgcHJldmlvdXMgbWF0Y2ggaXMgbG9uZ2VyIHRoYW4gdGhpcyAqLwoK" + "ICB0aGlzLm5pY2VfbWF0Y2ggPSAwOyAvKiBTdG9wIHNlYXJjaGluZyB3aGVuIGN1cnJlbnQgbWF0Y2ggZXhjZWVkcyB0aGlzICovCgogICAgICAgICAgICAgIC8qIHVzZWQgYnkgdHJlZXMuYzogKi8KCiAgLyog" + "RGlkbid0IHVzZSBjdF9kYXRhIHR5cGVkZWYgYmVsb3cgdG8gc3VwcHJlc3MgY29tcGlsZXIgd2FybmluZyAqLwoKICAvLyBzdHJ1Y3QgY3RfZGF0YV9zIGR5bl9sdHJlZVtIRUFQX1NJWkVdOyAgIC8qIGxpdGVy" + "YWwgYW5kIGxlbmd0aCB0cmVlICovCiAgLy8gc3RydWN0IGN0X2RhdGFfcyBkeW5fZHRyZWVbMipEX0NPREVTKzFdOyAvKiBkaXN0YW5jZSB0cmVlICovCiAgLy8gc3RydWN0IGN0X2RhdGFfcyBibF90cmVlWzIq" + "QkxfQ09ERVMrMV07ICAvKiBIdWZmbWFuIHRyZWUgZm9yIGJpdCBsZW5ndGhzICovCgogIC8vIFVzZSBmbGF0IGFycmF5IG9mIERPVUJMRSBzaXplLCB3aXRoIGludGVybGVhdmVkIGZhdGEsCiAgLy8gYmVjYXVz" + "ZSBKUyBkb2VzIG5vdCBzdXBwb3J0IGVmZmVjdGl2ZQogIHRoaXMuZHluX2x0cmVlICA9IG5ldyB1dGlscy5CdWYxNihIRUFQX1NJWkUgKiAyKTsKICB0aGlzLmR5bl9kdHJlZSAgPSBuZXcgdXRpbHMuQnVmMTYo" + "KDIgKiBEX0NPREVTICsgMSkgKiAyKTsKICB0aGlzLmJsX3RyZWUgICAgPSBuZXcgdXRpbHMuQnVmMTYoKDIgKiBCTF9DT0RFUyArIDEpICogMik7CiAgemVybyh0aGlzLmR5bl9sdHJlZSk7CiAgemVybyh0aGlz" + "LmR5bl9kdHJlZSk7CiAgemVybyh0aGlzLmJsX3RyZWUpOwoKICB0aGlzLmxfZGVzYyAgID0gbnVsbDsgICAgICAgICAvKiBkZXNjLiBmb3IgbGl0ZXJhbCB0cmVlICovCiAgdGhpcy5kX2Rlc2MgICA9IG51bGw7" + "ICAgICAgICAgLyogZGVzYy4gZm9yIGRpc3RhbmNlIHRyZWUgKi8KICB0aGlzLmJsX2Rlc2MgID0gbnVsbDsgICAgICAgICAvKiBkZXNjLiBmb3IgYml0IGxlbmd0aCB0cmVlICovCgogIC8vdXNoIGJsX2NvdW50" + "W01BWF9CSVRTKzFdOwogIHRoaXMuYmxfY291bnQgPSBuZXcgdXRpbHMuQnVmMTYoTUFYX0JJVFMgKyAxKTsKICAvKiBudW1iZXIgb2YgY29kZXMgYXQgZWFjaCBiaXQgbGVuZ3RoIGZvciBhbiBvcHRpbWFsIHRy" + "ZWUgKi8KCiAgLy9pbnQgaGVhcFsyKkxfQ09ERVMrMV07ICAgICAgLyogaGVhcCB1c2VkIHRvIGJ1aWxkIHRoZSBIdWZmbWFuIHRyZWVzICovCiAgdGhpcy5oZWFwID0gbmV3IHV0aWxzLkJ1ZjE2KDIgKiBMX0NP" + "REVTICsgMSk7ICAvKiBoZWFwIHVzZWQgdG8gYnVpbGQgdGhlIEh1ZmZtYW4gdHJlZXMgKi8KICB6ZXJvKHRoaXMuaGVhcCk7CgogIHRoaXMuaGVhcF9sZW4gPSAwOyAgICAgICAgICAgICAgIC8qIG51bWJlciBv" + "ZiBlbGVtZW50cyBpbiB0aGUgaGVhcCAqLwogIHRoaXMuaGVhcF9tYXggPSAwOyAgICAgICAgICAgICAgIC8qIGVsZW1lbnQgb2YgbGFyZ2VzdCBmcmVxdWVuY3kgKi8KICAvKiBUaGUgc29ucyBvZiBoZWFwW25d" + "IGFyZSBoZWFwWzIqbl0gYW5kIGhlYXBbMipuKzFdLiBoZWFwWzBdIGlzIG5vdCB1c2VkLgogICAqIFRoZSBzYW1lIGhlYXAgYXJyYXkgaXMgdXNlZCB0byBidWlsZCBhbGwgdHJlZXMuCiAgICovCgogIHRoaXMu" + "ZGVwdGggPSBuZXcgdXRpbHMuQnVmMTYoMiAqIExfQ09ERVMgKyAxKTsgLy91Y2ggZGVwdGhbMipMX0NPREVTKzFdOwogIHplcm8odGhpcy5kZXB0aCk7CiAgLyogRGVwdGggb2YgZWFjaCBzdWJ0cmVlIHVzZWQg" + "YXMgdGllIGJyZWFrZXIgZm9yIHRyZWVzIG9mIGVxdWFsIGZyZXF1ZW5jeQogICAqLwoKICB0aGlzLmxfYnVmID0gMDsgICAgICAgICAgLyogYnVmZmVyIGluZGV4IGZvciBsaXRlcmFscyBvciBsZW5ndGhzICov" + "CgogIHRoaXMubGl0X2J1ZnNpemUgPSAwOwogIC8qIFNpemUgb2YgbWF0Y2ggYnVmZmVyIGZvciBsaXRlcmFscy9sZW5ndGhzLiAgVGhlcmUgYXJlIDQgcmVhc29ucyBmb3IKICAgKiBsaW1pdGluZyBsaXRfYnVm" + "c2l6ZSB0byA2NEs6CiAgICogICAtIGZyZXF1ZW5jaWVzIGNhbiBiZSBrZXB0IGluIDE2IGJpdCBjb3VudGVycwogICAqICAgLSBpZiBjb21wcmVzc2lvbiBpcyBub3Qgc3VjY2Vzc2Z1bCBmb3IgdGhlIGZpcnN0" + "IGJsb2NrLCBhbGwgaW5wdXQKICAgKiAgICAgZGF0YSBpcyBzdGlsbCBpbiB0aGUgd2luZG93IHNvIHdlIGNhbiBzdGlsbCBlbWl0IGEgc3RvcmVkIGJsb2NrIGV2ZW4KICAgKiAgICAgd2hlbiBpbnB1dCBjb21l" + "cyBmcm9tIHN0YW5kYXJkIGlucHV0LiAgKFRoaXMgY2FuIGFsc28gYmUgZG9uZSBmb3IKICAgKiAgICAgYWxsIGJsb2NrcyBpZiBsaXRfYnVmc2l6ZSBpcyBub3QgZ3JlYXRlciB0aGFuIDMySy4pCiAgICogICAt" + "IGlmIGNvbXByZXNzaW9uIGlzIG5vdCBzdWNjZXNzZnVsIGZvciBhIGZpbGUgc21hbGxlciB0aGFuIDY0Sywgd2UgY2FuCiAgICogICAgIGV2ZW4gZW1pdCBhIHN0b3JlZCBmaWxlIGluc3RlYWQgb2YgYSBzdG9y" + "ZWQgYmxvY2sgKHNhdmluZyA1IGJ5dGVzKS4KICAgKiAgICAgVGhpcyBpcyBhcHBsaWNhYmxlIG9ubHkgZm9yIHppcCAobm90IGd6aXAgb3IgemxpYikuCiAgICogICAtIGNyZWF0aW5nIG5ldyBIdWZmbWFuIHRy" + "ZWVzIGxlc3MgZnJlcXVlbnRseSBtYXkgbm90IHByb3ZpZGUgZmFzdAogICAqICAgICBhZGFwdGF0aW9uIHRvIGNoYW5nZXMgaW4gdGhlIGlucHV0IGRhdGEgc3RhdGlzdGljcy4gKFRha2UgZm9yCiAgICogICAg" + "IGV4YW1wbGUgYSBiaW5hcnkgZmlsZSB3aXRoIHBvb3JseSBjb21wcmVzc2libGUgY29kZSBmb2xsb3dlZCBieQogICAqICAgICBhIGhpZ2hseSBjb21wcmVzc2libGUgc3RyaW5nIHRhYmxlLikgU21hbGxlciBi" + "dWZmZXIgc2l6ZXMgZ2l2ZQogICAqICAgICBmYXN0IGFkYXB0YXRpb24gYnV0IGhhdmUgb2YgY291cnNlIHRoZSBvdmVyaGVhZCBvZiB0cmFuc21pdHRpbmcKICAgKiAgICAgdHJlZXMgbW9yZSBmcmVxdWVudGx5" + "LgogICAqICAgLSBJIGNhbid0IGNvdW50IGFib3ZlIDQKICAgKi8KCiAgdGhpcy5sYXN0X2xpdCA9IDA7ICAgICAgLyogcnVubmluZyBpbmRleCBpbiBsX2J1ZiAqLwoKICB0aGlzLmRfYnVmID0gMDsKICAvKiBC" + "dWZmZXIgaW5kZXggZm9yIGRpc3RhbmNlcy4gVG8gc2ltcGxpZnkgdGhlIGNvZGUsIGRfYnVmIGFuZCBsX2J1ZiBoYXZlCiAgICogdGhlIHNhbWUgbnVtYmVyIG9mIGVsZW1lbnRzLiBUbyB1c2UgZGlmZmVyZW50" + "IGxlbmd0aHMsIGFuIGV4dHJhIGZsYWcKICAgKiBhcnJheSB3b3VsZCBiZSBuZWNlc3NhcnkuCiAgICovCgogIHRoaXMub3B0X2xlbiA9IDA7ICAgICAgIC8qIGJpdCBsZW5ndGggb2YgY3VycmVudCBibG9jayB3" + "aXRoIG9wdGltYWwgdHJlZXMgKi8KICB0aGlzLnN0YXRpY19sZW4gPSAwOyAgICAvKiBiaXQgbGVuZ3RoIG9mIGN1cnJlbnQgYmxvY2sgd2l0aCBzdGF0aWMgdHJlZXMgKi8KICB0aGlzLm1hdGNoZXMgPSAwOyAg" + "ICAgICAvKiBudW1iZXIgb2Ygc3RyaW5nIG1hdGNoZXMgaW4gY3VycmVudCBibG9jayAqLwogIHRoaXMuaW5zZXJ0ID0gMDsgICAgICAgIC8qIGJ5dGVzIGF0IGVuZCBvZiB3aW5kb3cgbGVmdCB0byBpbnNlcnQg" + "Ki8KCgogIHRoaXMuYmlfYnVmID0gMDsKICAvKiBPdXRwdXQgYnVmZmVyLiBiaXRzIGFyZSBpbnNlcnRlZCBzdGFydGluZyBhdCB0aGUgYm90dG9tIChsZWFzdAogICAqIHNpZ25pZmljYW50IGJpdHMpLgogICAq" + "LwogIHRoaXMuYmlfdmFsaWQgPSAwOwogIC8qIE51bWJlciBvZiB2YWxpZCBiaXRzIGluIGJpX2J1Zi4gIEFsbCBiaXRzIGFib3ZlIHRoZSBsYXN0IHZhbGlkIGJpdAogICAqIGFyZSBhbHdheXMgemVyby4KICAg" + "Ki8KCiAgLy8gVXNlZCBmb3Igd2luZG93IG1lbW9yeSBpbml0LiBXZSBzYWZlbHkgaWdub3JlIGl0IGZvciBKUy4gVGhhdCBtYWtlcwogIC8vIHNlbnNlIG9ubHkgZm9yIHBvaW50ZXJzIGFuZCBtZW1vcnkgY2hl" + "Y2sgdG9vbHMuCiAgLy90aGlzLmhpZ2hfd2F0ZXIgPSAwOwogIC8qIEhpZ2ggd2F0ZXIgbWFyayBvZmZzZXQgaW4gd2luZG93IGZvciBpbml0aWFsaXplZCBieXRlcyAtLSBieXRlcyBhYm92ZQogICAqIHRoaXMg" + "YXJlIHNldCB0byB6ZXJvIGluIG9yZGVyIHRvIGF2b2lkIG1lbW9yeSBjaGVjayB3YXJuaW5ncyB3aGVuCiAgICogbG9uZ2VzdCBtYXRjaCByb3V0aW5lcyBhY2Nlc3MgYnl0ZXMgcGFzdCB0aGUgaW5wdXQuICBU" + "aGlzIGlzIHRoZW4KICAgKiB1cGRhdGVkIHRvIHRoZSBuZXcgaGlnaCB3YXRlciBtYXJrLgogICAqLwp9CgoKZnVuY3Rpb24gZGVmbGF0ZVJlc2V0S2VlcChzdHJtKSB7CiAgdmFyIHM7CgogIGlmICghc3RybSB8" + "fCAhc3RybS5zdGF0ZSkgewogICAgcmV0dXJuIGVycihzdHJtLCBaX1NUUkVBTV9FUlJPUik7CiAgfQoKICBzdHJtLnRvdGFsX2luID0gc3RybS50b3RhbF9vdXQgPSAwOwogIHN0cm0uZGF0YV90eXBlID0gWl9V" + "TktOT1dOOwoKICBzID0gc3RybS5zdGF0ZTsKICBzLnBlbmRpbmcgPSAwOwogIHMucGVuZGluZ19vdXQgPSAwOwoKICBpZiAocy53cmFwIDwgMCkgewogICAgcy53cmFwID0gLXMud3JhcDsKICAgIC8qIHdhcyBt" + "YWRlIG5lZ2F0aXZlIGJ5IGRlZmxhdGUoLi4uLCBaX0ZJTklTSCk7ICovCiAgfQogIHMuc3RhdHVzID0gKHMud3JhcCA/IElOSVRfU1RBVEUgOiBCVVNZX1NUQVRFKTsKICBzdHJtLmFkbGVyID0gKHMud3JhcCA9" + "PT0gMikgPwogICAgMCAgLy8gY3JjMzIoMCwgWl9OVUxMLCAwKQogIDoKICAgIDE7IC8vIGFkbGVyMzIoMCwgWl9OVUxMLCAwKQogIHMubGFzdF9mbHVzaCA9IFpfTk9fRkxVU0g7CiAgdHJlZXMuX3RyX2luaXQo" + "cyk7CiAgcmV0dXJuIFpfT0s7Cn0KCgpmdW5jdGlvbiBkZWZsYXRlUmVzZXQoc3RybSkgewogIHZhciByZXQgPSBkZWZsYXRlUmVzZXRLZWVwKHN0cm0pOwogIGlmIChyZXQgPT09IFpfT0spIHsKICAgIGxtX2lu" + "aXQoc3RybS5zdGF0ZSk7CiAgfQogIHJldHVybiByZXQ7Cn0KCgpmdW5jdGlvbiBkZWZsYXRlU2V0SGVhZGVyKHN0cm0sIGhlYWQpIHsKICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHsgcmV0dXJuIFpfU1RS" + "RUFNX0VSUk9SOyB9CiAgaWYgKHN0cm0uc3RhdGUud3JhcCAhPT0gMikgeyByZXR1cm4gWl9TVFJFQU1fRVJST1I7IH0KICBzdHJtLnN0YXRlLmd6aGVhZCA9IGhlYWQ7CiAgcmV0dXJuIFpfT0s7Cn0KCgpmdW5j" + "dGlvbiBkZWZsYXRlSW5pdDIoc3RybSwgbGV2ZWwsIG1ldGhvZCwgd2luZG93Qml0cywgbWVtTGV2ZWwsIHN0cmF0ZWd5KSB7CiAgaWYgKCFzdHJtKSB7IC8vID09PSBaX05VTEwKICAgIHJldHVybiBaX1NUUkVB" + "TV9FUlJPUjsKICB9CiAgdmFyIHdyYXAgPSAxOwoKICBpZiAobGV2ZWwgPT09IFpfREVGQVVMVF9DT01QUkVTU0lPTikgewogICAgbGV2ZWwgPSA2OwogIH0KCiAgaWYgKHdpbmRvd0JpdHMgPCAwKSB7IC8qIHN1" + "cHByZXNzIHpsaWIgd3JhcHBlciAqLwogICAgd3JhcCA9IDA7CiAgICB3aW5kb3dCaXRzID0gLXdpbmRvd0JpdHM7CiAgfQoKICBlbHNlIGlmICh3aW5kb3dCaXRzID4gMTUpIHsKICAgIHdyYXAgPSAyOyAgICAg" + "ICAgICAgLyogd3JpdGUgZ3ppcCB3cmFwcGVyIGluc3RlYWQgKi8KICAgIHdpbmRvd0JpdHMgLT0gMTY7CiAgfQoKCiAgaWYgKG1lbUxldmVsIDwgMSB8fCBtZW1MZXZlbCA+IE1BWF9NRU1fTEVWRUwgfHwgbWV0" + "aG9kICE9PSBaX0RFRkxBVEVEIHx8CiAgICB3aW5kb3dCaXRzIDwgOCB8fCB3aW5kb3dCaXRzID4gMTUgfHwgbGV2ZWwgPCAwIHx8IGxldmVsID4gOSB8fAogICAgc3RyYXRlZ3kgPCAwIHx8IHN0cmF0ZWd5ID4g" + "Wl9GSVhFRCkgewogICAgcmV0dXJuIGVycihzdHJtLCBaX1NUUkVBTV9FUlJPUik7CiAgfQoKCiAgaWYgKHdpbmRvd0JpdHMgPT09IDgpIHsKICAgIHdpbmRvd0JpdHMgPSA5OwogIH0KICAvKiB1bnRpbCAyNTYt" + "Ynl0ZSB3aW5kb3cgYnVnIGZpeGVkICovCgogIHZhciBzID0gbmV3IERlZmxhdGVTdGF0ZSgpOwoKICBzdHJtLnN0YXRlID0gczsKICBzLnN0cm0gPSBzdHJtOwoKICBzLndyYXAgPSB3cmFwOwogIHMuZ3poZWFk" + "ID0gbnVsbDsKICBzLndfYml0cyA9IHdpbmRvd0JpdHM7CiAgcy53X3NpemUgPSAxIDw8IHMud19iaXRzOwogIHMud19tYXNrID0gcy53X3NpemUgLSAxOwoKICBzLmhhc2hfYml0cyA9IG1lbUxldmVsICsgNzsK" + "ICBzLmhhc2hfc2l6ZSA9IDEgPDwgcy5oYXNoX2JpdHM7CiAgcy5oYXNoX21hc2sgPSBzLmhhc2hfc2l6ZSAtIDE7CiAgcy5oYXNoX3NoaWZ0ID0gfn4oKHMuaGFzaF9iaXRzICsgTUlOX01BVENIIC0gMSkgLyBN" + "SU5fTUFUQ0gpOwoKICBzLndpbmRvdyA9IG5ldyB1dGlscy5CdWY4KHMud19zaXplICogMik7CiAgcy5oZWFkID0gbmV3IHV0aWxzLkJ1ZjE2KHMuaGFzaF9zaXplKTsKICBzLnByZXYgPSBuZXcgdXRpbHMuQnVm" + "MTYocy53X3NpemUpOwoKICAvLyBEb24ndCBuZWVkIG1lbSBpbml0IG1hZ2ljIGZvciBKUy4KICAvL3MuaGlnaF93YXRlciA9IDA7ICAvKiBub3RoaW5nIHdyaXR0ZW4gdG8gcy0+d2luZG93IHlldCAqLwoKICBz" + "LmxpdF9idWZzaXplID0gMSA8PCAobWVtTGV2ZWwgKyA2KTsgLyogMTZLIGVsZW1lbnRzIGJ5IGRlZmF1bHQgKi8KCiAgcy5wZW5kaW5nX2J1Zl9zaXplID0gcy5saXRfYnVmc2l6ZSAqIDQ7CgogIC8vb3Zlcmxh" + "eSA9ICh1c2hmICopIFpBTExPQyhzdHJtLCBzLT5saXRfYnVmc2l6ZSwgc2l6ZW9mKHVzaCkrMik7CiAgLy9zLT5wZW5kaW5nX2J1ZiA9ICh1Y2hmICopIG92ZXJsYXk7CiAgcy5wZW5kaW5nX2J1ZiA9IG5ldyB1" + "dGlscy5CdWY4KHMucGVuZGluZ19idWZfc2l6ZSk7CgogIC8vIEl0IGlzIG9mZnNldCBmcm9tIGBzLnBlbmRpbmdfYnVmYCAoc2l6ZSBpcyBgcy5saXRfYnVmc2l6ZSAqIDJgKQogIC8vcy0+ZF9idWYgPSBvdmVy" + "bGF5ICsgcy0+bGl0X2J1ZnNpemUvc2l6ZW9mKHVzaCk7CiAgcy5kX2J1ZiA9IDEgKiBzLmxpdF9idWZzaXplOwoKICAvL3MtPmxfYnVmID0gcy0+cGVuZGluZ19idWYgKyAoMStzaXplb2YodXNoKSkqcy0+bGl0" + "X2J1ZnNpemU7CiAgcy5sX2J1ZiA9ICgxICsgMikgKiBzLmxpdF9idWZzaXplOwoKICBzLmxldmVsID0gbGV2ZWw7CiAgcy5zdHJhdGVneSA9IHN0cmF0ZWd5OwogIHMubWV0aG9kID0gbWV0aG9kOwoKICByZXR1" + "cm4gZGVmbGF0ZVJlc2V0KHN0cm0pOwp9CgpmdW5jdGlvbiBkZWZsYXRlSW5pdChzdHJtLCBsZXZlbCkgewogIHJldHVybiBkZWZsYXRlSW5pdDIoc3RybSwgbGV2ZWwsIFpfREVGTEFURUQsIE1BWF9XQklUUywg" + "REVGX01FTV9MRVZFTCwgWl9ERUZBVUxUX1NUUkFURUdZKTsKfQoKCmZ1bmN0aW9uIGRlZmxhdGUoc3RybSwgZmx1c2gpIHsKICB2YXIgb2xkX2ZsdXNoLCBzOwogIHZhciBiZWcsIHZhbDsgLy8gZm9yIGd6aXAg" + "aGVhZGVyIHdyaXRlIG9ubHkKCiAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlIHx8CiAgICBmbHVzaCA+IFpfQkxPQ0sgfHwgZmx1c2ggPCAwKSB7CiAgICByZXR1cm4gc3RybSA/IGVycihzdHJtLCBaX1NUUkVB" + "TV9FUlJPUikgOiBaX1NUUkVBTV9FUlJPUjsKICB9CgogIHMgPSBzdHJtLnN0YXRlOwoKICBpZiAoIXN0cm0ub3V0cHV0IHx8CiAgICAgICghc3RybS5pbnB1dCAmJiBzdHJtLmF2YWlsX2luICE9PSAwKSB8fAog" + "ICAgICAocy5zdGF0dXMgPT09IEZJTklTSF9TVEFURSAmJiBmbHVzaCAhPT0gWl9GSU5JU0gpKSB7CiAgICByZXR1cm4gZXJyKHN0cm0sIChzdHJtLmF2YWlsX291dCA9PT0gMCkgPyBaX0JVRl9FUlJPUiA6IFpf" + "U1RSRUFNX0VSUk9SKTsKICB9CgogIHMuc3RybSA9IHN0cm07IC8qIGp1c3QgaW4gY2FzZSAqLwogIG9sZF9mbHVzaCA9IHMubGFzdF9mbHVzaDsKICBzLmxhc3RfZmx1c2ggPSBmbHVzaDsKCiAgLyogV3JpdGUg" + "dGhlIGhlYWRlciAqLwogIGlmIChzLnN0YXR1cyA9PT0gSU5JVF9TVEFURSkgewoKICAgIGlmIChzLndyYXAgPT09IDIpIHsgLy8gR1pJUCBoZWFkZXIKICAgICAgc3RybS5hZGxlciA9IDA7ICAvL2NyYzMyKDBM" + "LCBaX05VTEwsIDApOwogICAgICBwdXRfYnl0ZShzLCAzMSk7CiAgICAgIHB1dF9ieXRlKHMsIDEzOSk7CiAgICAgIHB1dF9ieXRlKHMsIDgpOwogICAgICBpZiAoIXMuZ3poZWFkKSB7IC8vIHMtPmd6aGVhZCA9" + "PSBaX05VTEwKICAgICAgICBwdXRfYnl0ZShzLCAwKTsKICAgICAgICBwdXRfYnl0ZShzLCAwKTsKICAgICAgICBwdXRfYnl0ZShzLCAwKTsKICAgICAgICBwdXRfYnl0ZShzLCAwKTsKICAgICAgICBwdXRfYnl0" + "ZShzLCAwKTsKICAgICAgICBwdXRfYnl0ZShzLCBzLmxldmVsID09PSA5ID8gMiA6CiAgICAgICAgICAgICAgICAgICAgKHMuc3RyYXRlZ3kgPj0gWl9IVUZGTUFOX09OTFkgfHwgcy5sZXZlbCA8IDIgPwogICAg" + "ICAgICAgICAgICAgICAgICA0IDogMCkpOwogICAgICAgIHB1dF9ieXRlKHMsIE9TX0NPREUpOwogICAgICAgIHMuc3RhdHVzID0gQlVTWV9TVEFURTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBwdXRf" + "Ynl0ZShzLCAocy5nemhlYWQudGV4dCA/IDEgOiAwKSArCiAgICAgICAgICAgICAgICAgICAgKHMuZ3poZWFkLmhjcmMgPyAyIDogMCkgKwogICAgICAgICAgICAgICAgICAgICghcy5nemhlYWQuZXh0cmEgPyAw" + "IDogNCkgKwogICAgICAgICAgICAgICAgICAgICghcy5nemhlYWQubmFtZSA/IDAgOiA4KSArCiAgICAgICAgICAgICAgICAgICAgKCFzLmd6aGVhZC5jb21tZW50ID8gMCA6IDE2KQogICAgICAgICAgICAgICAg" + "KTsKICAgICAgICBwdXRfYnl0ZShzLCBzLmd6aGVhZC50aW1lICYgMHhmZik7CiAgICAgICAgcHV0X2J5dGUocywgKHMuZ3poZWFkLnRpbWUgPj4gOCkgJiAweGZmKTsKICAgICAgICBwdXRfYnl0ZShzLCAocy5n" + "emhlYWQudGltZSA+PiAxNikgJiAweGZmKTsKICAgICAgICBwdXRfYnl0ZShzLCAocy5nemhlYWQudGltZSA+PiAyNCkgJiAweGZmKTsKICAgICAgICBwdXRfYnl0ZShzLCBzLmxldmVsID09PSA5ID8gMiA6CiAg" + "ICAgICAgICAgICAgICAgICAgKHMuc3RyYXRlZ3kgPj0gWl9IVUZGTUFOX09OTFkgfHwgcy5sZXZlbCA8IDIgPwogICAgICAgICAgICAgICAgICAgICA0IDogMCkpOwogICAgICAgIHB1dF9ieXRlKHMsIHMuZ3po" + "ZWFkLm9zICYgMHhmZik7CiAgICAgICAgaWYgKHMuZ3poZWFkLmV4dHJhICYmIHMuZ3poZWFkLmV4dHJhLmxlbmd0aCkgewogICAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQuZXh0cmEubGVuZ3RoICYgMHhm" + "Zik7CiAgICAgICAgICBwdXRfYnl0ZShzLCAocy5nemhlYWQuZXh0cmEubGVuZ3RoID4+IDgpICYgMHhmZik7CiAgICAgICAgfQogICAgICAgIGlmIChzLmd6aGVhZC5oY3JjKSB7CiAgICAgICAgICBzdHJtLmFk" + "bGVyID0gY3JjMzIoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nLCAwKTsKICAgICAgICB9CiAgICAgICAgcy5nemluZGV4ID0gMDsKICAgICAgICBzLnN0YXR1cyA9IEVYVFJBX1NUQVRFOwog" + "ICAgICB9CiAgICB9CiAgICBlbHNlIC8vIERFRkxBVEUgaGVhZGVyCiAgICB7CiAgICAgIHZhciBoZWFkZXIgPSAoWl9ERUZMQVRFRCArICgocy53X2JpdHMgLSA4KSA8PCA0KSkgPDwgODsKICAgICAgdmFyIGxl" + "dmVsX2ZsYWdzID0gLTE7CgogICAgICBpZiAocy5zdHJhdGVneSA+PSBaX0hVRkZNQU5fT05MWSB8fCBzLmxldmVsIDwgMikgewogICAgICAgIGxldmVsX2ZsYWdzID0gMDsKICAgICAgfSBlbHNlIGlmIChzLmxl" + "dmVsIDwgNikgewogICAgICAgIGxldmVsX2ZsYWdzID0gMTsKICAgICAgfSBlbHNlIGlmIChzLmxldmVsID09PSA2KSB7CiAgICAgICAgbGV2ZWxfZmxhZ3MgPSAyOwogICAgICB9IGVsc2UgewogICAgICAgIGxl" + "dmVsX2ZsYWdzID0gMzsKICAgICAgfQogICAgICBoZWFkZXIgfD0gKGxldmVsX2ZsYWdzIDw8IDYpOwogICAgICBpZiAocy5zdHJzdGFydCAhPT0gMCkgeyBoZWFkZXIgfD0gUFJFU0VUX0RJQ1Q7IH0KICAgICAg" + "aGVhZGVyICs9IDMxIC0gKGhlYWRlciAlIDMxKTsKCiAgICAgIHMuc3RhdHVzID0gQlVTWV9TVEFURTsKICAgICAgcHV0U2hvcnRNU0IocywgaGVhZGVyKTsKCiAgICAgIC8qIFNhdmUgdGhlIGFkbGVyMzIgb2Yg" + "dGhlIHByZXNldCBkaWN0aW9uYXJ5OiAqLwogICAgICBpZiAocy5zdHJzdGFydCAhPT0gMCkgewogICAgICAgIHB1dFNob3J0TVNCKHMsIHN0cm0uYWRsZXIgPj4+IDE2KTsKICAgICAgICBwdXRTaG9ydE1TQihz" + "LCBzdHJtLmFkbGVyICYgMHhmZmZmKTsKICAgICAgfQogICAgICBzdHJtLmFkbGVyID0gMTsgLy8gYWRsZXIzMigwTCwgWl9OVUxMLCAwKTsKICAgIH0KICB9CgovLyNpZmRlZiBHWklQCiAgaWYgKHMuc3RhdHVz" + "ID09PSBFWFRSQV9TVEFURSkgewogICAgaWYgKHMuZ3poZWFkLmV4dHJhLyogIT0gWl9OVUxMKi8pIHsKICAgICAgYmVnID0gcy5wZW5kaW5nOyAgLyogc3RhcnQgb2YgYnl0ZXMgdG8gdXBkYXRlIGNyYyAqLwoK" + "ICAgICAgd2hpbGUgKHMuZ3ppbmRleCA8IChzLmd6aGVhZC5leHRyYS5sZW5ndGggJiAweGZmZmYpKSB7CiAgICAgICAgaWYgKHMucGVuZGluZyA9PT0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7CiAgICAgICAgICBp" + "ZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHsKICAgICAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTsK" + "ICAgICAgICAgIH0KICAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7CiAgICAgICAgICBiZWcgPSBzLnBlbmRpbmc7CiAgICAgICAgICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHsK" + "ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHB1dF9ieXRlKHMsIHMuZ3poZWFkLmV4dHJhW3MuZ3ppbmRleF0gJiAweGZmKTsKICAgICAgICBzLmd6aW5kZXgrKzsKICAg" + "ICAgfQogICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHsKICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nIC0gYmVn" + "LCBiZWcpOwogICAgICB9CiAgICAgIGlmIChzLmd6aW5kZXggPT09IHMuZ3poZWFkLmV4dHJhLmxlbmd0aCkgewogICAgICAgIHMuZ3ppbmRleCA9IDA7CiAgICAgICAgcy5zdGF0dXMgPSBOQU1FX1NUQVRFOwog" + "ICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgcy5zdGF0dXMgPSBOQU1FX1NUQVRFOwogICAgfQogIH0KICBpZiAocy5zdGF0dXMgPT09IE5BTUVfU1RBVEUpIHsKICAgIGlmIChzLmd6aGVhZC5uYW1lLyog" + "IT0gWl9OVUxMKi8pIHsKICAgICAgYmVnID0gcy5wZW5kaW5nOyAgLyogc3RhcnQgb2YgYnl0ZXMgdG8gdXBkYXRlIGNyYyAqLwogICAgICAvL2ludCB2YWw7CgogICAgICBkbyB7CiAgICAgICAgaWYgKHMucGVu" + "ZGluZyA9PT0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7CiAgICAgICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHsKICAgICAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRs" + "ZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTsKICAgICAgICAgIH0KICAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7CiAgICAgICAgICBiZWcgPSBzLnBlbmRpbmc7CiAgICAgICAg" + "ICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHsKICAgICAgICAgICAgdmFsID0gMTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIEpTIHNw" + "ZWNpZmljOiBsaXR0bGUgbWFnaWMgdG8gYWRkIHplcm8gdGVybWluYXRvciB0byBlbmQgb2Ygc3RyaW5nCiAgICAgICAgaWYgKHMuZ3ppbmRleCA8IHMuZ3poZWFkLm5hbWUubGVuZ3RoKSB7CiAgICAgICAgICB2" + "YWwgPSBzLmd6aGVhZC5uYW1lLmNoYXJDb2RlQXQocy5nemluZGV4KyspICYgMHhmZjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFsID0gMDsKICAgICAgICB9CiAgICAgICAgcHV0X2J5dGUocywgdmFs" + "KTsKICAgICAgfSB3aGlsZSAodmFsICE9PSAwKTsKCiAgICAgIGlmIChzLmd6aGVhZC5oY3JjICYmIHMucGVuZGluZyA+IGJlZykgewogICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBzLnBl" + "bmRpbmdfYnVmLCBzLnBlbmRpbmcgLSBiZWcsIGJlZyk7CiAgICAgIH0KICAgICAgaWYgKHZhbCA9PT0gMCkgewogICAgICAgIHMuZ3ppbmRleCA9IDA7CiAgICAgICAgcy5zdGF0dXMgPSBDT01NRU5UX1NUQVRF" + "OwogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgcy5zdGF0dXMgPSBDT01NRU5UX1NUQVRFOwogICAgfQogIH0KICBpZiAocy5zdGF0dXMgPT09IENPTU1FTlRfU1RBVEUpIHsKICAgIGlmIChzLmd6aGVh" + "ZC5jb21tZW50LyogIT0gWl9OVUxMKi8pIHsKICAgICAgYmVnID0gcy5wZW5kaW5nOyAgLyogc3RhcnQgb2YgYnl0ZXMgdG8gdXBkYXRlIGNyYyAqLwogICAgICAvL2ludCB2YWw7CgogICAgICBkbyB7CiAgICAg" + "ICAgaWYgKHMucGVuZGluZyA9PT0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7CiAgICAgICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHsKICAgICAgICAgICAgc3RybS5hZGxlciA9IGNy" + "YzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTsKICAgICAgICAgIH0KICAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7CiAgICAgICAgICBiZWcgPSBzLnBlbmRp" + "bmc7CiAgICAgICAgICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHsKICAgICAgICAgICAgdmFsID0gMTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAg" + "ICAgIC8vIEpTIHNwZWNpZmljOiBsaXR0bGUgbWFnaWMgdG8gYWRkIHplcm8gdGVybWluYXRvciB0byBlbmQgb2Ygc3RyaW5nCiAgICAgICAgaWYgKHMuZ3ppbmRleCA8IHMuZ3poZWFkLmNvbW1lbnQubGVuZ3Ro" + "KSB7CiAgICAgICAgICB2YWwgPSBzLmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQocy5nemluZGV4KyspICYgMHhmZjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFsID0gMDsKICAgICAgICB9CiAgICAg" + "ICAgcHV0X2J5dGUocywgdmFsKTsKICAgICAgfSB3aGlsZSAodmFsICE9PSAwKTsKCiAgICAgIGlmIChzLmd6aGVhZC5oY3JjICYmIHMucGVuZGluZyA+IGJlZykgewogICAgICAgIHN0cm0uYWRsZXIgPSBjcmMz" + "MihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcgLSBiZWcsIGJlZyk7CiAgICAgIH0KICAgICAgaWYgKHZhbCA9PT0gMCkgewogICAgICAgIHMuc3RhdHVzID0gSENSQ19TVEFURTsKICAgICAg" + "fQogICAgfQogICAgZWxzZSB7CiAgICAgIHMuc3RhdHVzID0gSENSQ19TVEFURTsKICAgIH0KICB9CiAgaWYgKHMuc3RhdHVzID09PSBIQ1JDX1NUQVRFKSB7CiAgICBpZiAocy5nemhlYWQuaGNyYykgewogICAg" + "ICBpZiAocy5wZW5kaW5nICsgMiA+IHMucGVuZGluZ19idWZfc2l6ZSkgewogICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7CiAgICAgIH0KICAgICAgaWYgKHMucGVuZGluZyArIDIgPD0gcy5wZW5kaW5nX2J1" + "Zl9zaXplKSB7CiAgICAgICAgcHV0X2J5dGUocywgc3RybS5hZGxlciAmIDB4ZmYpOwogICAgICAgIHB1dF9ieXRlKHMsIChzdHJtLmFkbGVyID4+IDgpICYgMHhmZik7CiAgICAgICAgc3RybS5hZGxlciA9IDA7" + "IC8vY3JjMzIoMEwsIFpfTlVMTCwgMCk7CiAgICAgICAgcy5zdGF0dXMgPSBCVVNZX1NUQVRFOwogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgcy5zdGF0dXMgPSBCVVNZX1NUQVRFOwogICAgfQogIH0K" + "Ly8jZW5kaWYKCiAgLyogRmx1c2ggYXMgbXVjaCBwZW5kaW5nIG91dHB1dCBhcyBwb3NzaWJsZSAqLwogIGlmIChzLnBlbmRpbmcgIT09IDApIHsKICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7CiAgICBpZiAoc3Ry" + "bS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgLyogU2luY2UgYXZhaWxfb3V0IGlzIDAsIGRlZmxhdGUgd2lsbCBiZSBjYWxsZWQgYWdhaW4gd2l0aAogICAgICAgKiBtb3JlIG91dHB1dCBzcGFjZSwgYnV0IHBv" + "c3NpYmx5IHdpdGggYm90aCBwZW5kaW5nIGFuZAogICAgICAgKiBhdmFpbF9pbiBlcXVhbCB0byB6ZXJvLiBUaGVyZSB3b24ndCBiZSBhbnl0aGluZyB0byBkbywKICAgICAgICogYnV0IHRoaXMgaXMgbm90IGFu" + "IGVycm9yIHNpdHVhdGlvbiBzbyBtYWtlIHN1cmUgd2UKICAgICAgICogcmV0dXJuIE9LIGluc3RlYWQgb2YgQlVGX0VSUk9SIGF0IG5leHQgY2FsbCBvZiBkZWZsYXRlOgogICAgICAgKi8KICAgICAgcy5sYXN0" + "X2ZsdXNoID0gLTE7CiAgICAgIHJldHVybiBaX09LOwogICAgfQoKICAgIC8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBzb21ldGhpbmcgdG8gZG8gYW5kIGF2b2lkIGR1cGxpY2F0ZSBjb25zZWN1dGl2ZQogICAgICog" + "Zmx1c2hlcy4gRm9yIHJlcGVhdGVkIGFuZCB1c2VsZXNzIGNhbGxzIHdpdGggWl9GSU5JU0gsIHdlIGtlZXAKICAgICAqIHJldHVybmluZyBaX1NUUkVBTV9FTkQgaW5zdGVhZCBvZiBaX0JVRl9FUlJPUi4KICAg" + "ICAqLwogIH0gZWxzZSBpZiAoc3RybS5hdmFpbF9pbiA9PT0gMCAmJiByYW5rKGZsdXNoKSA8PSByYW5rKG9sZF9mbHVzaCkgJiYKICAgIGZsdXNoICE9PSBaX0ZJTklTSCkgewogICAgcmV0dXJuIGVycihzdHJt" + "LCBaX0JVRl9FUlJPUik7CiAgfQoKICAvKiBVc2VyIG11c3Qgbm90IHByb3ZpZGUgbW9yZSBpbnB1dCBhZnRlciB0aGUgZmlyc3QgRklOSVNIOiAqLwogIGlmIChzLnN0YXR1cyA9PT0gRklOSVNIX1NUQVRFICYm" + "IHN0cm0uYXZhaWxfaW4gIT09IDApIHsKICAgIHJldHVybiBlcnIoc3RybSwgWl9CVUZfRVJST1IpOwogIH0KCiAgLyogU3RhcnQgYSBuZXcgYmxvY2sgb3IgY29udGludWUgdGhlIGN1cnJlbnQgb25lLgogICAq" + "LwogIGlmIChzdHJtLmF2YWlsX2luICE9PSAwIHx8IHMubG9va2FoZWFkICE9PSAwIHx8CiAgICAoZmx1c2ggIT09IFpfTk9fRkxVU0ggJiYgcy5zdGF0dXMgIT09IEZJTklTSF9TVEFURSkpIHsKICAgIHZhciBi" + "c3RhdGUgPSAocy5zdHJhdGVneSA9PT0gWl9IVUZGTUFOX09OTFkpID8gZGVmbGF0ZV9odWZmKHMsIGZsdXNoKSA6CiAgICAgIChzLnN0cmF0ZWd5ID09PSBaX1JMRSA/IGRlZmxhdGVfcmxlKHMsIGZsdXNoKSA6" + "CiAgICAgICAgY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5mdW5jKHMsIGZsdXNoKSk7CgogICAgaWYgKGJzdGF0ZSA9PT0gQlNfRklOSVNIX1NUQVJURUQgfHwgYnN0YXRlID09PSBCU19GSU5JU0hfRE9O" + "RSkgewogICAgICBzLnN0YXR1cyA9IEZJTklTSF9TVEFURTsKICAgIH0KICAgIGlmIChic3RhdGUgPT09IEJTX05FRURfTU9SRSB8fCBic3RhdGUgPT09IEJTX0ZJTklTSF9TVEFSVEVEKSB7CiAgICAgIGlmIChz" + "dHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgIHMubGFzdF9mbHVzaCA9IC0xOwogICAgICAgIC8qIGF2b2lkIEJVRl9FUlJPUiBuZXh0IGNhbGwsIHNlZSBhYm92ZSAqLwogICAgICB9CiAgICAgIHJldHVy" + "biBaX09LOwogICAgICAvKiBJZiBmbHVzaCAhPSBaX05PX0ZMVVNIICYmIGF2YWlsX291dCA9PSAwLCB0aGUgbmV4dCBjYWxsCiAgICAgICAqIG9mIGRlZmxhdGUgc2hvdWxkIHVzZSB0aGUgc2FtZSBmbHVzaCBw" + "YXJhbWV0ZXIgdG8gbWFrZSBzdXJlCiAgICAgICAqIHRoYXQgdGhlIGZsdXNoIGlzIGNvbXBsZXRlLiBTbyB3ZSBkb24ndCBoYXZlIHRvIG91dHB1dCBhbgogICAgICAgKiBlbXB0eSBibG9jayBoZXJlLCB0aGlz" + "IHdpbGwgYmUgZG9uZSBhdCBuZXh0IGNhbGwuIFRoaXMgYWxzbwogICAgICAgKiBlbnN1cmVzIHRoYXQgZm9yIGEgdmVyeSBzbWFsbCBvdXRwdXQgYnVmZmVyLCB3ZSBlbWl0IGF0IG1vc3QKICAgICAgICogb25l" + "IGVtcHR5IGJsb2NrLgogICAgICAgKi8KICAgIH0KICAgIGlmIChic3RhdGUgPT09IEJTX0JMT0NLX0RPTkUpIHsKICAgICAgaWYgKGZsdXNoID09PSBaX1BBUlRJQUxfRkxVU0gpIHsKICAgICAgICB0cmVlcy5f" + "dHJfYWxpZ24ocyk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoZmx1c2ggIT09IFpfQkxPQ0spIHsgLyogRlVMTF9GTFVTSCBvciBTWU5DX0ZMVVNIICovCgogICAgICAgIHRyZWVzLl90cl9zdG9yZWRfYmxvY2so" + "cywgMCwgMCwgZmFsc2UpOwogICAgICAgIC8qIEZvciBhIGZ1bGwgZmx1c2gsIHRoaXMgZW1wdHkgYmxvY2sgd2lsbCBiZSByZWNvZ25pemVkCiAgICAgICAgICogYXMgYSBzcGVjaWFsIG1hcmtlciBieSBpbmZs" + "YXRlX3N5bmMoKS4KICAgICAgICAgKi8KICAgICAgICBpZiAoZmx1c2ggPT09IFpfRlVMTF9GTFVTSCkgewogICAgICAgICAgLyoqKiBDTEVBUl9IQVNIKHMpOyAqKiovICAgICAgICAgICAgIC8qIGZvcmdldCBo" + "aXN0b3J5ICovCiAgICAgICAgICB6ZXJvKHMuaGVhZCk7IC8vIEZpbGwgd2l0aCBOSUwgKD0gMCk7CgogICAgICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7CiAgICAgICAgICAgIHMuc3Ryc3RhcnQgPSAw" + "OwogICAgICAgICAgICBzLmJsb2NrX3N0YXJ0ID0gMDsKICAgICAgICAgICAgcy5pbnNlcnQgPSAwOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOwogICAg" + "ICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICBzLmxhc3RfZmx1c2ggPSAtMTsgLyogYXZvaWQgQlVGX0VSUk9SIGF0IG5leHQgY2FsbCwgc2VlIGFib3ZlICovCiAgICAgICAgcmV0dXJuIFpf" + "T0s7CiAgICAgIH0KICAgIH0KICB9CiAgLy9Bc3NlcnQoc3RybS0+YXZhaWxfb3V0ID4gMCwgImJ1ZzIiKTsKICAvL2lmIChzdHJtLmF2YWlsX291dCA8PSAwKSB7IHRocm93IG5ldyBFcnJvcigiYnVnMiIpO30K" + "CiAgaWYgKGZsdXNoICE9PSBaX0ZJTklTSCkgeyByZXR1cm4gWl9PSzsgfQogIGlmIChzLndyYXAgPD0gMCkgeyByZXR1cm4gWl9TVFJFQU1fRU5EOyB9CgogIC8qIFdyaXRlIHRoZSB0cmFpbGVyICovCiAgaWYg" + "KHMud3JhcCA9PT0gMikgewogICAgcHV0X2J5dGUocywgc3RybS5hZGxlciAmIDB4ZmYpOwogICAgcHV0X2J5dGUocywgKHN0cm0uYWRsZXIgPj4gOCkgJiAweGZmKTsKICAgIHB1dF9ieXRlKHMsIChzdHJtLmFk" + "bGVyID4+IDE2KSAmIDB4ZmYpOwogICAgcHV0X2J5dGUocywgKHN0cm0uYWRsZXIgPj4gMjQpICYgMHhmZik7CiAgICBwdXRfYnl0ZShzLCBzdHJtLnRvdGFsX2luICYgMHhmZik7CiAgICBwdXRfYnl0ZShzLCAo" + "c3RybS50b3RhbF9pbiA+PiA4KSAmIDB4ZmYpOwogICAgcHV0X2J5dGUocywgKHN0cm0udG90YWxfaW4gPj4gMTYpICYgMHhmZik7CiAgICBwdXRfYnl0ZShzLCAoc3RybS50b3RhbF9pbiA+PiAyNCkgJiAweGZm" + "KTsKICB9CiAgZWxzZQogIHsKICAgIHB1dFNob3J0TVNCKHMsIHN0cm0uYWRsZXIgPj4+IDE2KTsKICAgIHB1dFNob3J0TVNCKHMsIHN0cm0uYWRsZXIgJiAweGZmZmYpOwogIH0KCiAgZmx1c2hfcGVuZGluZyhz" + "dHJtKTsKICAvKiBJZiBhdmFpbF9vdXQgaXMgemVybywgdGhlIGFwcGxpY2F0aW9uIHdpbGwgY2FsbCBkZWZsYXRlIGFnYWluCiAgICogdG8gZmx1c2ggdGhlIHJlc3QuCiAgICovCiAgaWYgKHMud3JhcCA+IDAp" + "IHsgcy53cmFwID0gLXMud3JhcDsgfQogIC8qIHdyaXRlIHRoZSB0cmFpbGVyIG9ubHkgb25jZSEgKi8KICByZXR1cm4gcy5wZW5kaW5nICE9PSAwID8gWl9PSyA6IFpfU1RSRUFNX0VORDsKfQoKZnVuY3Rpb24g" + "ZGVmbGF0ZUVuZChzdHJtKSB7CiAgdmFyIHN0YXR1czsKCiAgaWYgKCFzdHJtLyo9PSBaX05VTEwqLyB8fCAhc3RybS5zdGF0ZS8qPT0gWl9OVUxMKi8pIHsKICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICB9" + "CgogIHN0YXR1cyA9IHN0cm0uc3RhdGUuc3RhdHVzOwogIGlmIChzdGF0dXMgIT09IElOSVRfU1RBVEUgJiYKICAgIHN0YXR1cyAhPT0gRVhUUkFfU1RBVEUgJiYKICAgIHN0YXR1cyAhPT0gTkFNRV9TVEFURSAm" + "JgogICAgc3RhdHVzICE9PSBDT01NRU5UX1NUQVRFICYmCiAgICBzdGF0dXMgIT09IEhDUkNfU1RBVEUgJiYKICAgIHN0YXR1cyAhPT0gQlVTWV9TVEFURSAmJgogICAgc3RhdHVzICE9PSBGSU5JU0hfU1RBVEUK" + "ICApIHsKICAgIHJldHVybiBlcnIoc3RybSwgWl9TVFJFQU1fRVJST1IpOwogIH0KCiAgc3RybS5zdGF0ZSA9IG51bGw7CgogIHJldHVybiBzdGF0dXMgPT09IEJVU1lfU1RBVEUgPyBlcnIoc3RybSwgWl9EQVRB" + "X0VSUk9SKSA6IFpfT0s7Cn0KCgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIEluaXRpYWxpemVzIHRoZSBjb21w" + "cmVzc2lvbiBkaWN0aW9uYXJ5IGZyb20gdGhlIGdpdmVuIGJ5dGUKICogc2VxdWVuY2Ugd2l0aG91dCBwcm9kdWNpbmcgYW55IGNvbXByZXNzZWQgb3V0cHV0LgogKi8KZnVuY3Rpb24gZGVmbGF0ZVNldERpY3Rp" + "b25hcnkoc3RybSwgZGljdGlvbmFyeSkgewogIHZhciBkaWN0TGVuZ3RoID0gZGljdGlvbmFyeS5sZW5ndGg7CgogIHZhciBzOwogIHZhciBzdHIsIG47CiAgdmFyIHdyYXA7CiAgdmFyIGF2YWlsOwogIHZhciBu" + "ZXh0OwogIHZhciBpbnB1dDsKICB2YXIgdG1wRGljdDsKCiAgaWYgKCFzdHJtLyo9PSBaX05VTEwqLyB8fCAhc3RybS5zdGF0ZS8qPT0gWl9OVUxMKi8pIHsKICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICB9" + "CgogIHMgPSBzdHJtLnN0YXRlOwogIHdyYXAgPSBzLndyYXA7CgogIGlmICh3cmFwID09PSAyIHx8ICh3cmFwID09PSAxICYmIHMuc3RhdHVzICE9PSBJTklUX1NUQVRFKSB8fCBzLmxvb2thaGVhZCkgewogICAg" + "cmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogIH0KCiAgLyogd2hlbiB1c2luZyB6bGliIHdyYXBwZXJzLCBjb21wdXRlIEFkbGVyLTMyIGZvciBwcm92aWRlZCBkaWN0aW9uYXJ5ICovCiAgaWYgKHdyYXAgPT09IDEp" + "IHsKICAgIC8qIGFkbGVyMzIoc3RybS0+YWRsZXIsIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgpOyAqLwogICAgc3RybS5hZGxlciA9IGFkbGVyMzIoc3RybS5hZGxlciwgZGljdGlvbmFyeSwgZGljdExlbmd0aCwg" + "MCk7CiAgfQoKICBzLndyYXAgPSAwOyAgIC8qIGF2b2lkIGNvbXB1dGluZyBBZGxlci0zMiBpbiByZWFkX2J1ZiAqLwoKICAvKiBpZiBkaWN0aW9uYXJ5IHdvdWxkIGZpbGwgd2luZG93LCBqdXN0IHJlcGxhY2Ug" + "dGhlIGhpc3RvcnkgKi8KICBpZiAoZGljdExlbmd0aCA+PSBzLndfc2l6ZSkgewogICAgaWYgKHdyYXAgPT09IDApIHsgICAgICAgICAgICAvKiBhbHJlYWR5IGVtcHR5IG90aGVyd2lzZSAqLwogICAgICAvKioq" + "IENMRUFSX0hBU0gocyk7ICoqKi8KICAgICAgemVybyhzLmhlYWQpOyAvLyBGaWxsIHdpdGggTklMICg9IDApOwogICAgICBzLnN0cnN0YXJ0ID0gMDsKICAgICAgcy5ibG9ja19zdGFydCA9IDA7CiAgICAgIHMu" + "aW5zZXJ0ID0gMDsKICAgIH0KICAgIC8qIHVzZSB0aGUgdGFpbCAqLwogICAgLy8gZGljdGlvbmFyeSA9IGRpY3Rpb25hcnkuc2xpY2UoZGljdExlbmd0aCAtIHMud19zaXplKTsKICAgIHRtcERpY3QgPSBuZXcg" + "dXRpbHMuQnVmOChzLndfc2l6ZSk7CiAgICB1dGlscy5hcnJheVNldCh0bXBEaWN0LCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoIC0gcy53X3NpemUsIHMud19zaXplLCAwKTsKICAgIGRpY3Rpb25hcnkgPSB0bXBE" + "aWN0OwogICAgZGljdExlbmd0aCA9IHMud19zaXplOwogIH0KICAvKiBpbnNlcnQgZGljdGlvbmFyeSBpbnRvIHdpbmRvdyBhbmQgaGFzaCAqLwogIGF2YWlsID0gc3RybS5hdmFpbF9pbjsKICBuZXh0ID0gc3Ry" + "bS5uZXh0X2luOwogIGlucHV0ID0gc3RybS5pbnB1dDsKICBzdHJtLmF2YWlsX2luID0gZGljdExlbmd0aDsKICBzdHJtLm5leHRfaW4gPSAwOwogIHN0cm0uaW5wdXQgPSBkaWN0aW9uYXJ5OwogIGZpbGxfd2lu" + "ZG93KHMpOwogIHdoaWxlIChzLmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gpIHsKICAgIHN0ciA9IHMuc3Ryc3RhcnQ7CiAgICBuID0gcy5sb29rYWhlYWQgLSAoTUlOX01BVENIIC0gMSk7CiAgICBkbyB7CiAgICAg" + "IC8qIFVQREFURV9IQVNIKHMsIHMtPmluc19oLCBzLT53aW5kb3dbc3RyICsgTUlOX01BVENILTFdKTsgKi8KICAgICAgcy5pbnNfaCA9ICgocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQpIF4gcy53aW5kb3dbc3Ry" + "ICsgTUlOX01BVENIIC0gMV0pICYgcy5oYXNoX21hc2s7CgogICAgICBzLnByZXZbc3RyICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdOwoKICAgICAgcy5oZWFkW3MuaW5zX2hdID0gc3RyOwogICAgICBz" + "dHIrKzsKICAgIH0gd2hpbGUgKC0tbik7CiAgICBzLnN0cnN0YXJ0ID0gc3RyOwogICAgcy5sb29rYWhlYWQgPSBNSU5fTUFUQ0ggLSAxOwogICAgZmlsbF93aW5kb3cocyk7CiAgfQogIHMuc3Ryc3RhcnQgKz0g" + "cy5sb29rYWhlYWQ7CiAgcy5ibG9ja19zdGFydCA9IHMuc3Ryc3RhcnQ7CiAgcy5pbnNlcnQgPSBzLmxvb2thaGVhZDsKICBzLmxvb2thaGVhZCA9IDA7CiAgcy5tYXRjaF9sZW5ndGggPSBzLnByZXZfbGVuZ3Ro" + "ID0gTUlOX01BVENIIC0gMTsKICBzLm1hdGNoX2F2YWlsYWJsZSA9IDA7CiAgc3RybS5uZXh0X2luID0gbmV4dDsKICBzdHJtLmlucHV0ID0gaW5wdXQ7CiAgc3RybS5hdmFpbF9pbiA9IGF2YWlsOwogIHMud3Jh" + "cCA9IHdyYXA7CiAgcmV0dXJuIFpfT0s7Cn0KCgpleHBvcnRzLmRlZmxhdGVJbml0ID0gZGVmbGF0ZUluaXQ7CmV4cG9ydHMuZGVmbGF0ZUluaXQyID0gZGVmbGF0ZUluaXQyOwpleHBvcnRzLmRlZmxhdGVSZXNl" + "dCA9IGRlZmxhdGVSZXNldDsKZXhwb3J0cy5kZWZsYXRlUmVzZXRLZWVwID0gZGVmbGF0ZVJlc2V0S2VlcDsKZXhwb3J0cy5kZWZsYXRlU2V0SGVhZGVyID0gZGVmbGF0ZVNldEhlYWRlcjsKZXhwb3J0cy5kZWZs" + "YXRlID0gZGVmbGF0ZTsKZXhwb3J0cy5kZWZsYXRlRW5kID0gZGVmbGF0ZUVuZDsKZXhwb3J0cy5kZWZsYXRlU2V0RGljdGlvbmFyeSA9IGRlZmxhdGVTZXREaWN0aW9uYXJ5OwpleHBvcnRzLmRlZmxhdGVJbmZv" + "ID0gJ3Bha28gZGVmbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCknOwoKLyogTm90IGltcGxlbWVudGVkCmV4cG9ydHMuZGVmbGF0ZUJvdW5kID0gZGVmbGF0ZUJvdW5kOwpleHBvcnRzLmRlZmxhdGVDb3B5ID0g" + "ZGVmbGF0ZUNvcHk7CmV4cG9ydHMuZGVmbGF0ZVBhcmFtcyA9IGRlZmxhdGVQYXJhbXM7CmV4cG9ydHMuZGVmbGF0ZVBlbmRpbmcgPSBkZWZsYXRlUGVuZGluZzsKZXhwb3J0cy5kZWZsYXRlUHJpbWUgPSBkZWZs" + "YXRlUHJpbWU7CmV4cG9ydHMuZGVmbGF0ZVR1bmUgPSBkZWZsYXRlVHVuZTsKKi8KCn0seyIuLi91dGlscy9jb21tb24iOjQxLCIuL2FkbGVyMzIiOjQzLCIuL2NyYzMyIjo0NSwiLi9tZXNzYWdlcyI6NTEsIi4v" + "dHJlZXMiOjUyfV0sNDc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewondXNlIHN0cmljdCc7CgovLyAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKLy8gKEMp" + "IDIwMTQtMjAxNyBWaXRhbHkgUHV6cmluIGFuZCBBbmRyZXkgVHVwaXRzaW4KLy8KLy8gVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKLy8g" + "d2FycmFudHkuIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCi8vIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCi8vCi8vIFBl" + "cm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAovLyBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBp" + "dCBhbmQgcmVkaXN0cmlidXRlIGl0Ci8vIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKLy8KLy8gMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJl" + "IG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKLy8gICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQovLyAgIGluIGEgcHJvZHVj" + "dCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQovLyAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCi8vIDIuIEFsdGVyZWQgc291cmNlIHZl" + "cnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCi8vICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgovLyAzLiBUaGlzIG5v" + "dGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgoKZnVuY3Rpb24gR1poZWFkZXIoKSB7CiAgLyogdHJ1ZSBpZiBjb21wcmVzc2VkIGRhdGEgYmVs" + "aWV2ZWQgdG8gYmUgdGV4dCAqLwogIHRoaXMudGV4dCAgICAgICA9IDA7CiAgLyogbW9kaWZpY2F0aW9uIHRpbWUgKi8KICB0aGlzLnRpbWUgICAgICAgPSAwOwogIC8qIGV4dHJhIGZsYWdzIChub3QgdXNlZCB3" + "aGVuIHdyaXRpbmcgYSBnemlwIGZpbGUpICovCiAgdGhpcy54ZmxhZ3MgICAgID0gMDsKICAvKiBvcGVyYXRpbmcgc3lzdGVtICovCiAgdGhpcy5vcyAgICAgICAgID0gMDsKICAvKiBwb2ludGVyIHRvIGV4dHJh" + "IGZpZWxkIG9yIFpfTlVMTCBpZiBub25lICovCiAgdGhpcy5leHRyYSAgICAgID0gbnVsbDsKICAvKiBleHRyYSBmaWVsZCBsZW5ndGggKHZhbGlkIGlmIGV4dHJhICE9IFpfTlVMTCkgKi8KICB0aGlzLmV4dHJh" + "X2xlbiAgPSAwOyAvLyBBY3R1YWxseSwgd2UgZG9uJ3QgbmVlZCBpdCBpbiBKUywKICAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgbGVhdmUgZm9yIGZldyBjb2RlIG1vZGlmaWNhdGlvbnMKCiAgLy8KICAv" + "LyBTZXR1cCBsaW1pdHMgaXMgbm90IG5lY2Vzc2FyeSBiZWNhdXNlIGluIGpzIHdlIHNob3VsZCBub3QgcHJlYWxsb2NhdGUgbWVtb3J5CiAgLy8gZm9yIGluZmxhdGUgdXNlIGNvbnN0YW50IGxpbWl0IGluIDY1" + "NTM2IGJ5dGVzCiAgLy8KCiAgLyogc3BhY2UgYXQgZXh0cmEgKG9ubHkgd2hlbiByZWFkaW5nIGhlYWRlcikgKi8KICAvLyB0aGlzLmV4dHJhX21heCAgPSAwOwogIC8qIHBvaW50ZXIgdG8gemVyby10ZXJtaW5h" + "dGVkIGZpbGUgbmFtZSBvciBaX05VTEwgKi8KICB0aGlzLm5hbWUgICAgICAgPSAnJzsKICAvKiBzcGFjZSBhdCBuYW1lIChvbmx5IHdoZW4gcmVhZGluZyBoZWFkZXIpICovCiAgLy8gdGhpcy5uYW1lX21heCAg" + "ID0gMDsKICAvKiBwb2ludGVyIHRvIHplcm8tdGVybWluYXRlZCBjb21tZW50IG9yIFpfTlVMTCAqLwogIHRoaXMuY29tbWVudCAgICA9ICcnOwogIC8qIHNwYWNlIGF0IGNvbW1lbnQgKG9ubHkgd2hlbiByZWFk" + "aW5nIGhlYWRlcikgKi8KICAvLyB0aGlzLmNvbW1fbWF4ICAgPSAwOwogIC8qIHRydWUgaWYgdGhlcmUgd2FzIG9yIHdpbGwgYmUgYSBoZWFkZXIgY3JjICovCiAgdGhpcy5oY3JjICAgICAgID0gMDsKICAvKiB0" + "cnVlIHdoZW4gZG9uZSByZWFkaW5nIGd6aXAgaGVhZGVyIChub3QgdXNlZCB3aGVuIHdyaXRpbmcgYSBnemlwIGZpbGUpICovCiAgdGhpcy5kb25lICAgICAgID0gZmFsc2U7Cn0KCm1vZHVsZS5leHBvcnRzID0g" + "R1poZWFkZXI7Cgp9LHt9XSw0ODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsKCi8vIChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgov" + "LyAoQykgMjAxNC0yMDE3IFZpdGFseSBQdXpyaW4gYW5kIEFuZHJleSBUdXBpdHNpbgovLwovLyBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGll" + "ZAovLyB3YXJyYW50eS4gSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKLy8gYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KLy8K" + "Ly8gUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCi8vIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFs" + "dGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKLy8gZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgovLwovLyAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBu" + "b3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAovLyAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCi8vICAgaW4gYSBw" + "cm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCi8vICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KLy8gMi4gQWx0ZXJlZCBzb3Vy" + "Y2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKLy8gICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCi8vIDMuIFRo" + "aXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCgovLyBTZWUgc3RhdGUgZGVmcyBmcm9tIGluZmxhdGUuanMKdmFyIEJBRCA9IDMwOyAg" + "ICAgICAvKiBnb3QgYSBkYXRhIGVycm9yIC0tIHJlbWFpbiBoZXJlIHVudGlsIHJlc2V0ICovCnZhciBUWVBFID0gMTI7ICAgICAgLyogaTogd2FpdGluZyBmb3IgdHlwZSBiaXRzLCBpbmNsdWRpbmcgbGFzdC1m" + "bGFnIGJpdCAqLwoKLyoKICAgRGVjb2RlIGxpdGVyYWwsIGxlbmd0aCwgYW5kIGRpc3RhbmNlIGNvZGVzIGFuZCB3cml0ZSBvdXQgdGhlIHJlc3VsdGluZwogICBsaXRlcmFsIGFuZCBtYXRjaCBieXRlcyB1bnRp" + "bCBlaXRoZXIgbm90IGVub3VnaCBpbnB1dCBvciBvdXRwdXQgaXMKICAgYXZhaWxhYmxlLCBhbiBlbmQtb2YtYmxvY2sgaXMgZW5jb3VudGVyZWQsIG9yIGEgZGF0YSBlcnJvciBpcyBlbmNvdW50ZXJlZC4KICAg" + "V2hlbiBsYXJnZSBlbm91Z2ggaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzIGFyZSBzdXBwbGllZCB0byBpbmZsYXRlKCksIGZvcgogICBleGFtcGxlLCBhIDE2SyBpbnB1dCBidWZmZXIgYW5kIGEgNjRLIG91dHB1" + "dCBidWZmZXIsIG1vcmUgdGhhbiA5NSUgb2YgdGhlCiAgIGluZmxhdGUgZXhlY3V0aW9uIHRpbWUgaXMgc3BlbnQgaW4gdGhpcyByb3V0aW5lLgoKICAgRW50cnkgYXNzdW1wdGlvbnM6CgogICAgICAgIHN0YXRl" + "Lm1vZGUgPT09IExFTgogICAgICAgIHN0cm0uYXZhaWxfaW4gPj0gNgogICAgICAgIHN0cm0uYXZhaWxfb3V0ID49IDI1OAogICAgICAgIHN0YXJ0ID49IHN0cm0uYXZhaWxfb3V0CiAgICAgICAgc3RhdGUuYml0" + "cyA8IDgKCiAgIE9uIHJldHVybiwgc3RhdGUubW9kZSBpcyBvbmUgb2Y6CgogICAgICAgIExFTiAtLSByYW4gb3V0IG9mIGVub3VnaCBvdXRwdXQgc3BhY2Ugb3IgZW5vdWdoIGF2YWlsYWJsZSBpbnB1dAogICAg" + "ICAgIFRZUEUgLS0gcmVhY2hlZCBlbmQgb2YgYmxvY2sgY29kZSwgaW5mbGF0ZSgpIHRvIGludGVycHJldCBuZXh0IGJsb2NrCiAgICAgICAgQkFEIC0tIGVycm9yIGluIGJsb2NrIGRhdGEKCiAgIE5vdGVzOgoK" + "ICAgIC0gVGhlIG1heGltdW0gaW5wdXQgYml0cyB1c2VkIGJ5IGEgbGVuZ3RoL2Rpc3RhbmNlIHBhaXIgaXMgMTUgYml0cyBmb3IgdGhlCiAgICAgIGxlbmd0aCBjb2RlLCA1IGJpdHMgZm9yIHRoZSBsZW5ndGgg" + "ZXh0cmEsIDE1IGJpdHMgZm9yIHRoZSBkaXN0YW5jZSBjb2RlLAogICAgICBhbmQgMTMgYml0cyBmb3IgdGhlIGRpc3RhbmNlIGV4dHJhLiAgVGhpcyB0b3RhbHMgNDggYml0cywgb3Igc2l4IGJ5dGVzLgogICAg" + "ICBUaGVyZWZvcmUgaWYgc3RybS5hdmFpbF9pbiA+PSA2LCB0aGVuIHRoZXJlIGlzIGVub3VnaCBpbnB1dCB0byBhdm9pZAogICAgICBjaGVja2luZyBmb3IgYXZhaWxhYmxlIGlucHV0IHdoaWxlIGRlY29kaW5n" + "LgoKICAgIC0gVGhlIG1heGltdW0gYnl0ZXMgdGhhdCBhIHNpbmdsZSBsZW5ndGgvZGlzdGFuY2UgcGFpciBjYW4gb3V0cHV0IGlzIDI1OAogICAgICBieXRlcywgd2hpY2ggaXMgdGhlIG1heGltdW0gbGVuZ3Ro" + "IHRoYXQgY2FuIGJlIGNvZGVkLiAgaW5mbGF0ZV9mYXN0KCkKICAgICAgcmVxdWlyZXMgc3RybS5hdmFpbF9vdXQgPj0gMjU4IGZvciBlYWNoIGxvb3AgdG8gYXZvaWQgY2hlY2tpbmcgZm9yCiAgICAgIG91dHB1" + "dCBzcGFjZS4KICovCm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5mbGF0ZV9mYXN0KHN0cm0sIHN0YXJ0KSB7CiAgdmFyIHN0YXRlOwogIHZhciBfaW47ICAgICAgICAgICAgICAgICAgICAvKiBsb2NhbCBz" + "dHJtLmlucHV0ICovCiAgdmFyIGxhc3Q7ICAgICAgICAgICAgICAgICAgIC8qIGhhdmUgZW5vdWdoIGlucHV0IHdoaWxlIGluIDwgbGFzdCAqLwogIHZhciBfb3V0OyAgICAgICAgICAgICAgICAgICAvKiBsb2Nh" + "bCBzdHJtLm91dHB1dCAqLwogIHZhciBiZWc7ICAgICAgICAgICAgICAgICAgICAvKiBpbmZsYXRlKCkncyBpbml0aWFsIHN0cm0ub3V0cHV0ICovCiAgdmFyIGVuZDsgICAgICAgICAgICAgICAgICAgIC8qIHdo" + "aWxlIG91dCA8IGVuZCwgZW5vdWdoIHNwYWNlIGF2YWlsYWJsZSAqLwovLyNpZmRlZiBJTkZMQVRFX1NUUklDVAogIHZhciBkbWF4OyAgICAgICAgICAgICAgICAgICAvKiBtYXhpbXVtIGRpc3RhbmNlIGZyb20g" + "emxpYiBoZWFkZXIgKi8KLy8jZW5kaWYKICB2YXIgd3NpemU7ICAgICAgICAgICAgICAgICAgLyogd2luZG93IHNpemUgb3IgemVybyBpZiBub3QgdXNpbmcgd2luZG93ICovCiAgdmFyIHdoYXZlOyAgICAgICAg" + "ICAgICAgICAgIC8qIHZhbGlkIGJ5dGVzIGluIHRoZSB3aW5kb3cgKi8KICB2YXIgd25leHQ7ICAgICAgICAgICAgICAgICAgLyogd2luZG93IHdyaXRlIGluZGV4ICovCiAgLy8gVXNlIGBzX3dpbmRvd2AgaW5z" + "dGVhZCBgd2luZG93YCwgYXZvaWQgY29uZmxpY3Qgd2l0aCBpbnN0cnVtZW50YXRpb24gdG9vbHMKICB2YXIgc193aW5kb3c7ICAgICAgICAgICAgICAgLyogYWxsb2NhdGVkIHNsaWRpbmcgd2luZG93LCBpZiB3" + "c2l6ZSAhPSAwICovCiAgdmFyIGhvbGQ7ICAgICAgICAgICAgICAgICAgIC8qIGxvY2FsIHN0cm0uaG9sZCAqLwogIHZhciBiaXRzOyAgICAgICAgICAgICAgICAgICAvKiBsb2NhbCBzdHJtLmJpdHMgKi8KICB2" + "YXIgbGNvZGU7ICAgICAgICAgICAgICAgICAgLyogbG9jYWwgc3RybS5sZW5jb2RlICovCiAgdmFyIGRjb2RlOyAgICAgICAgICAgICAgICAgIC8qIGxvY2FsIHN0cm0uZGlzdGNvZGUgKi8KICB2YXIgbG1hc2s7" + "ICAgICAgICAgICAgICAgICAgLyogbWFzayBmb3IgZmlyc3QgbGV2ZWwgb2YgbGVuZ3RoIGNvZGVzICovCiAgdmFyIGRtYXNrOyAgICAgICAgICAgICAgICAgIC8qIG1hc2sgZm9yIGZpcnN0IGxldmVsIG9mIGRp" + "c3RhbmNlIGNvZGVzICovCiAgdmFyIGhlcmU7ICAgICAgICAgICAgICAgICAgIC8qIHJldHJpZXZlZCB0YWJsZSBlbnRyeSAqLwogIHZhciBvcDsgICAgICAgICAgICAgICAgICAgICAvKiBjb2RlIGJpdHMsIG9w" + "ZXJhdGlvbiwgZXh0cmEgYml0cywgb3IgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIHdpbmRvdyBwb3NpdGlvbiwgd2luZG93IGJ5dGVzIHRvIGNvcHkgKi8KICB2YXIgbGVuOyAgICAgICAg" + "ICAgICAgICAgICAgLyogbWF0Y2ggbGVuZ3RoLCB1bnVzZWQgYnl0ZXMgKi8KICB2YXIgZGlzdDsgICAgICAgICAgICAgICAgICAgLyogbWF0Y2ggZGlzdGFuY2UgKi8KICB2YXIgZnJvbTsgICAgICAgICAgICAg" + "ICAgICAgLyogd2hlcmUgdG8gY29weSBtYXRjaCBmcm9tICovCiAgdmFyIGZyb21fc291cmNlOwoKCiAgdmFyIGlucHV0LCBvdXRwdXQ7IC8vIEpTIHNwZWNpZmljLCBiZWNhdXNlIHdlIGhhdmUgbm8gcG9pbnRl" + "cnMKCiAgLyogY29weSBzdGF0ZSB0byBsb2NhbCB2YXJpYWJsZXMgKi8KICBzdGF0ZSA9IHN0cm0uc3RhdGU7CiAgLy9oZXJlID0gc3RhdGUuaGVyZTsKICBfaW4gPSBzdHJtLm5leHRfaW47CiAgaW5wdXQgPSBz" + "dHJtLmlucHV0OwogIGxhc3QgPSBfaW4gKyAoc3RybS5hdmFpbF9pbiAtIDUpOwogIF9vdXQgPSBzdHJtLm5leHRfb3V0OwogIG91dHB1dCA9IHN0cm0ub3V0cHV0OwogIGJlZyA9IF9vdXQgLSAoc3RhcnQgLSBz" + "dHJtLmF2YWlsX291dCk7CiAgZW5kID0gX291dCArIChzdHJtLmF2YWlsX291dCAtIDI1Nyk7Ci8vI2lmZGVmIElORkxBVEVfU1RSSUNUCiAgZG1heCA9IHN0YXRlLmRtYXg7Ci8vI2VuZGlmCiAgd3NpemUgPSBz" + "dGF0ZS53c2l6ZTsKICB3aGF2ZSA9IHN0YXRlLndoYXZlOwogIHduZXh0ID0gc3RhdGUud25leHQ7CiAgc193aW5kb3cgPSBzdGF0ZS53aW5kb3c7CiAgaG9sZCA9IHN0YXRlLmhvbGQ7CiAgYml0cyA9IHN0YXRl" + "LmJpdHM7CiAgbGNvZGUgPSBzdGF0ZS5sZW5jb2RlOwogIGRjb2RlID0gc3RhdGUuZGlzdGNvZGU7CiAgbG1hc2sgPSAoMSA8PCBzdGF0ZS5sZW5iaXRzKSAtIDE7CiAgZG1hc2sgPSAoMSA8PCBzdGF0ZS5kaXN0" + "Yml0cykgLSAxOwoKCiAgLyogZGVjb2RlIGxpdGVyYWxzIGFuZCBsZW5ndGgvZGlzdGFuY2VzIHVudGlsIGVuZC1vZi1ibG9jayBvciBub3QgZW5vdWdoCiAgICAgaW5wdXQgZGF0YSBvciBvdXRwdXQgc3BhY2Ug" + "Ki8KCiAgdG9wOgogIGRvIHsKICAgIGlmIChiaXRzIDwgMTUpIHsKICAgICAgaG9sZCArPSBpbnB1dFtfaW4rK10gPDwgYml0czsKICAgICAgYml0cyArPSA4OwogICAgICBob2xkICs9IGlucHV0W19pbisrXSA8" + "PCBiaXRzOwogICAgICBiaXRzICs9IDg7CiAgICB9CgogICAgaGVyZSA9IGxjb2RlW2hvbGQgJiBsbWFza107CgogICAgZG9sZW46CiAgICBmb3IgKDs7KSB7IC8vIEdvdG8gZW11bGF0aW9uCiAgICAgIG9wID0g" + "aGVyZSA+Pj4gMjQvKmhlcmUuYml0cyovOwogICAgICBob2xkID4+Pj0gb3A7CiAgICAgIGJpdHMgLT0gb3A7CiAgICAgIG9wID0gKGhlcmUgPj4+IDE2KSAmIDB4ZmYvKmhlcmUub3AqLzsKICAgICAgaWYgKG9w" + "ID09PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaXRlcmFsICovCiAgICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsIGhlcmUudmFsID49IDB4MjAgJiYgaGVyZS52YWwgPCAweDdmID8KICAgICAg" + "ICAvLyAgICAgICAgImluZmxhdGU6ICAgICAgICAgbGl0ZXJhbCAnJWMnXG4iIDoKICAgICAgICAvLyAgICAgICAgImluZmxhdGU6ICAgICAgICAgbGl0ZXJhbCAweCUwMnhcbiIsIGhlcmUudmFsKSk7CiAgICAg" + "ICAgb3V0cHV0W19vdXQrK10gPSBoZXJlICYgMHhmZmZmLypoZXJlLnZhbCovOwogICAgICB9CiAgICAgIGVsc2UgaWYgKG9wICYgMTYpIHsgICAgICAgICAgICAgICAgICAgICAvKiBsZW5ndGggYmFzZSAqLwog" + "ICAgICAgIGxlbiA9IGhlcmUgJiAweGZmZmYvKmhlcmUudmFsKi87CiAgICAgICAgb3AgJj0gMTU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGV4dHJhIGJpdHMgKi8KICAgICAgICBp" + "ZiAob3ApIHsKICAgICAgICAgIGlmIChiaXRzIDwgb3ApIHsKICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtfaW4rK10gPDwgYml0czsKICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgfQogICAgICAg" + "ICAgbGVuICs9IGhvbGQgJiAoKDEgPDwgb3ApIC0gMSk7CiAgICAgICAgICBob2xkID4+Pj0gb3A7CiAgICAgICAgICBiaXRzIC09IG9wOwogICAgICAgIH0KICAgICAgICAvL1RyYWNldnYoKHN0ZGVyciwgImlu" + "ZmxhdGU6ICAgICAgICAgbGVuZ3RoICV1XG4iLCBsZW4pKTsKICAgICAgICBpZiAoYml0cyA8IDE1KSB7CiAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzOwogICAgICAgICAgYml0cyArPSA4" + "OwogICAgICAgICAgaG9sZCArPSBpbnB1dFtfaW4rK10gPDwgYml0czsKICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICB9CiAgICAgICAgaGVyZSA9IGRjb2RlW2hvbGQgJiBkbWFza107CgogICAgICAgIGRv" + "ZGlzdDoKICAgICAgICBmb3IgKDs7KSB7IC8vIGdvdG8gZW11bGF0aW9uCiAgICAgICAgICBvcCA9IGhlcmUgPj4+IDI0LypoZXJlLmJpdHMqLzsKICAgICAgICAgIGhvbGQgPj4+PSBvcDsKICAgICAgICAgIGJp" + "dHMgLT0gb3A7CiAgICAgICAgICBvcCA9IChoZXJlID4+PiAxNikgJiAweGZmLypoZXJlLm9wKi87CgogICAgICAgICAgaWYgKG9wICYgMTYpIHsgICAgICAgICAgICAgICAgICAgICAgLyogZGlzdGFuY2UgYmFz" + "ZSAqLwogICAgICAgICAgICBkaXN0ID0gaGVyZSAmIDB4ZmZmZi8qaGVyZS52YWwqLzsKICAgICAgICAgICAgb3AgJj0gMTU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZXh0cmEgYml0cyAq" + "LwogICAgICAgICAgICBpZiAoYml0cyA8IG9wKSB7CiAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtfaW4rK10gPDwgYml0czsKICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgaWYgKGJp" + "dHMgPCBvcCkgewogICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtfaW4rK10gPDwgYml0czsKICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAg" + "ICAgICAgZGlzdCArPSBob2xkICYgKCgxIDw8IG9wKSAtIDEpOwovLyNpZmRlZiBJTkZMQVRFX1NUUklDVAogICAgICAgICAgICBpZiAoZGlzdCA+IGRtYXgpIHsKICAgICAgICAgICAgICBzdHJtLm1zZyA9ICdp" + "bnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayc7CiAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICBicmVhayB0b3A7CiAgICAgICAgICAgIH0KLy8jZW5kaWYKICAgICAgICAg" + "ICAgaG9sZCA+Pj49IG9wOwogICAgICAgICAgICBiaXRzIC09IG9wOwogICAgICAgICAgICAvL1RyYWNldnYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgICAgZGlzdGFuY2UgJXVcbiIsIGRpc3QpKTsKICAgICAg" + "ICAgICAgb3AgPSBfb3V0IC0gYmVnOyAgICAgICAgICAgICAgICAvKiBtYXggZGlzdGFuY2UgaW4gb3V0cHV0ICovCiAgICAgICAgICAgIGlmIChkaXN0ID4gb3ApIHsgICAgICAgICAgICAgICAgLyogc2VlIGlm" + "IGNvcHkgZnJvbSB3aW5kb3cgKi8KICAgICAgICAgICAgICBvcCA9IGRpc3QgLSBvcDsgICAgICAgICAgICAgICAvKiBkaXN0YW5jZSBiYWNrIGluIHdpbmRvdyAqLwogICAgICAgICAgICAgIGlmIChvcCA+IHdo" + "YXZlKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2FuZSkgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayc7CiAgICAgICAgICAgICAgICAg" + "IHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrIHRvcDsKICAgICAgICAgICAgICAgIH0KCi8vICghKSBUaGlzIGJsb2NrIGlzIGRpc2FibGVkIGluIHpsaWIgZGVmYWlsdHMsCi8vIGRv" + "bid0IGVuYWJsZSBpdCBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHkKLy8jaWZkZWYgSU5GTEFURV9BTExPV19JTlZBTElEX0RJU1RBTkNFX1RPT0ZBUl9BUlJSCi8vICAgICAgICAgICAgICAgIGlmIChsZW4gPD0g" + "b3AgLSB3aGF2ZSkgewovLyAgICAgICAgICAgICAgICAgIGRvIHsKLy8gICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gMDsKLy8gICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLWxlbik7Ci8v" + "ICAgICAgICAgICAgICAgICAgY29udGludWUgdG9wOwovLyAgICAgICAgICAgICAgICB9Ci8vICAgICAgICAgICAgICAgIGxlbiAtPSBvcCAtIHdoYXZlOwovLyAgICAgICAgICAgICAgICBkbyB7Ci8vICAgICAg" + "ICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSAwOwovLyAgICAgICAgICAgICAgICB9IHdoaWxlICgtLW9wID4gd2hhdmUpOwovLyAgICAgICAgICAgICAgICBpZiAob3AgPT09IDApIHsKLy8gICAgICAgICAg" + "ICAgICAgICBmcm9tID0gX291dCAtIGRpc3Q7Ci8vICAgICAgICAgICAgICAgICAgZG8gewovLyAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBvdXRwdXRbZnJvbSsrXTsKLy8gICAgICAgICAg" + "ICAgICAgICB9IHdoaWxlICgtLWxlbik7Ci8vICAgICAgICAgICAgICAgICAgY29udGludWUgdG9wOwovLyAgICAgICAgICAgICAgICB9Ci8vI2VuZGlmCiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGZy" + "b20gPSAwOyAvLyB3aW5kb3cgaW5kZXgKICAgICAgICAgICAgICBmcm9tX3NvdXJjZSA9IHNfd2luZG93OwogICAgICAgICAgICAgIGlmICh3bmV4dCA9PT0gMCkgeyAgICAgICAgICAgLyogdmVyeSBjb21tb24g" + "Y2FzZSAqLwogICAgICAgICAgICAgICAgZnJvbSArPSB3c2l6ZSAtIG9wOwogICAgICAgICAgICAgICAgaWYgKG9wIDwgbGVuKSB7ICAgICAgICAgLyogc29tZSBmcm9tIHdpbmRvdyAqLwogICAgICAgICAgICAg" + "ICAgICBsZW4gLT0gb3A7CiAgICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IHNfd2luZG93W2Zyb20rK107CiAgICAgICAgICAgICAgICAgIH0gd2hpbGUg" + "KC0tb3ApOwogICAgICAgICAgICAgICAgICBmcm9tID0gX291dCAtIGRpc3Q7ICAvKiByZXN0IGZyb20gb3V0cHV0ICovCiAgICAgICAgICAgICAgICAgIGZyb21fc291cmNlID0gb3V0cHV0OwogICAgICAgICAg" + "ICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlIGlmICh3bmV4dCA8IG9wKSB7ICAgICAgLyogd3JhcCBhcm91bmQgd2luZG93ICovCiAgICAgICAgICAgICAgICBmcm9tICs9IHdzaXpl" + "ICsgd25leHQgLSBvcDsKICAgICAgICAgICAgICAgIG9wIC09IHduZXh0OwogICAgICAgICAgICAgICAgaWYgKG9wIDwgbGVuKSB7ICAgICAgICAgLyogc29tZSBmcm9tIGVuZCBvZiB3aW5kb3cgKi8KICAgICAg" + "ICAgICAgICAgICAgbGVuIC09IG9wOwogICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBzX3dpbmRvd1tmcm9tKytdOwogICAgICAgICAgICAgICAgICB9" + "IHdoaWxlICgtLW9wKTsKICAgICAgICAgICAgICAgICAgZnJvbSA9IDA7CiAgICAgICAgICAgICAgICAgIGlmICh3bmV4dCA8IGxlbikgeyAgLyogc29tZSBmcm9tIHN0YXJ0IG9mIHdpbmRvdyAqLwogICAgICAg" + "ICAgICAgICAgICAgIG9wID0gd25leHQ7CiAgICAgICAgICAgICAgICAgICAgbGVuIC09IG9wOwogICAgICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0g" + "c193aW5kb3dbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLW9wKTsKICAgICAgICAgICAgICAgICAgICBmcm9tID0gX291dCAtIGRpc3Q7ICAgICAgLyogcmVzdCBmcm9tIG91dHB1dCAq" + "LwogICAgICAgICAgICAgICAgICAgIGZyb21fc291cmNlID0gb3V0cHV0OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UgeyAg" + "ICAgICAgICAgICAgICAgICAgICAvKiBjb250aWd1b3VzIGluIHdpbmRvdyAqLwogICAgICAgICAgICAgICAgZnJvbSArPSB3bmV4dCAtIG9wOwogICAgICAgICAgICAgICAgaWYgKG9wIDwgbGVuKSB7ICAgICAg" + "ICAgLyogc29tZSBmcm9tIHdpbmRvdyAqLwogICAgICAgICAgICAgICAgICBsZW4gLT0gb3A7CiAgICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IHNfd2lu" + "ZG93W2Zyb20rK107CiAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tb3ApOwogICAgICAgICAgICAgICAgICBmcm9tID0gX291dCAtIGRpc3Q7ICAvKiByZXN0IGZyb20gb3V0cHV0ICovCiAgICAgICAgICAg" + "ICAgICAgIGZyb21fc291cmNlID0gb3V0cHV0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB3aGlsZSAobGVuID4gMikgewogICAgICAgICAgICAgICAgb3V0cHV0W19v" + "dXQrK10gPSBmcm9tX3NvdXJjZVtmcm9tKytdOwogICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBmcm9tX3NvdXJjZVtmcm9tKytdOwogICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBmcm9t" + "X3NvdXJjZVtmcm9tKytdOwogICAgICAgICAgICAgICAgbGVuIC09IDM7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChsZW4pIHsKICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gZnJv" + "bV9zb3VyY2VbZnJvbSsrXTsKICAgICAgICAgICAgICAgIGlmIChsZW4gPiAxKSB7CiAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gZnJvbV9zb3VyY2VbZnJvbSsrXTsKICAgICAgICAgICAgICAg" + "IH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgZnJvbSA9IF9vdXQgLSBkaXN0OyAgICAgICAgICAvKiBjb3B5IGRpcmVjdCBmcm9tIG91dHB1" + "dCAqLwogICAgICAgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBtaW5pbXVtIGxlbmd0aCBpcyB0aHJlZSAqLwogICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBvdXRwdXRbZnJv" + "bSsrXTsKICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gb3V0cHV0W2Zyb20rK107CiAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IG91dHB1dFtmcm9tKytdOwogICAgICAgICAgICAgICAg" + "bGVuIC09IDM7CiAgICAgICAgICAgICAgfSB3aGlsZSAobGVuID4gMik7CiAgICAgICAgICAgICAgaWYgKGxlbikgewogICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBvdXRwdXRbZnJvbSsrXTsKICAg" + "ICAgICAgICAgICAgIGlmIChsZW4gPiAxKSB7CiAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gb3V0cHV0W2Zyb20rK107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAg" + "ICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmICgob3AgJiA2NCkgPT09IDApIHsgICAgICAgICAgLyogMm5kIGxldmVsIGRpc3RhbmNlIGNvZGUgKi8KICAgICAgICAgICAgaGVyZSA9IGRjb2Rl" + "WyhoZXJlICYgMHhmZmZmKS8qaGVyZS52YWwqLyArIChob2xkICYgKCgxIDw8IG9wKSAtIDEpKV07CiAgICAgICAgICAgIGNvbnRpbnVlIGRvZGlzdDsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAg" + "ICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGRpc3RhbmNlIGNvZGUnOwogICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICBicmVhayB0b3A7CiAgICAgICAgICB9CgogICAgICAgICAg" + "YnJlYWs7IC8vIG5lZWQgdG8gZW11bGF0ZSBnb3RvIHZpYSAiY29udGludWUiCiAgICAgICAgfQogICAgICB9CiAgICAgIGVsc2UgaWYgKChvcCAmIDY0KSA9PT0gMCkgeyAgICAgICAgICAgICAgLyogMm5kIGxl" + "dmVsIGxlbmd0aCBjb2RlICovCiAgICAgICAgaGVyZSA9IGxjb2RlWyhoZXJlICYgMHhmZmZmKS8qaGVyZS52YWwqLyArIChob2xkICYgKCgxIDw8IG9wKSAtIDEpKV07CiAgICAgICAgY29udGludWUgZG9sZW47" + "CiAgICAgIH0KICAgICAgZWxzZSBpZiAob3AgJiAzMikgeyAgICAgICAgICAgICAgICAgICAgIC8qIGVuZC1vZi1ibG9jayAqLwogICAgICAgIC8vVHJhY2V2digoc3RkZXJyLCAiaW5mbGF0ZTogICAgICAgICBl" + "bmQgb2YgYmxvY2tcbiIpKTsKICAgICAgICBzdGF0ZS5tb2RlID0gVFlQRTsKICAgICAgICBicmVhayB0b3A7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBsaXRlcmFs" + "L2xlbmd0aCBjb2RlJzsKICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgIGJyZWFrIHRvcDsKICAgICAgfQoKICAgICAgYnJlYWs7IC8vIG5lZWQgdG8gZW11bGF0ZSBnb3RvIHZpYSAiY29udGludWUi" + "CiAgICB9CiAgfSB3aGlsZSAoX2luIDwgbGFzdCAmJiBfb3V0IDwgZW5kKTsKCiAgLyogcmV0dXJuIHVudXNlZCBieXRlcyAob24gZW50cnksIGJpdHMgPCA4LCBzbyBpbiB3b24ndCBnbyB0b28gZmFyIGJhY2sp" + "ICovCiAgbGVuID0gYml0cyA+PiAzOwogIF9pbiAtPSBsZW47CiAgYml0cyAtPSBsZW4gPDwgMzsKICBob2xkICY9ICgxIDw8IGJpdHMpIC0gMTsKCiAgLyogdXBkYXRlIHN0YXRlIGFuZCByZXR1cm4gKi8KICBz" + "dHJtLm5leHRfaW4gPSBfaW47CiAgc3RybS5uZXh0X291dCA9IF9vdXQ7CiAgc3RybS5hdmFpbF9pbiA9IChfaW4gPCBsYXN0ID8gNSArIChsYXN0IC0gX2luKSA6IDUgLSAoX2luIC0gbGFzdCkpOwogIHN0cm0u" + "YXZhaWxfb3V0ID0gKF9vdXQgPCBlbmQgPyAyNTcgKyAoZW5kIC0gX291dCkgOiAyNTcgLSAoX291dCAtIGVuZCkpOwogIHN0YXRlLmhvbGQgPSBob2xkOwogIHN0YXRlLmJpdHMgPSBiaXRzOwogIHJldHVybjsK" + "fTsKCn0se31dLDQ5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwoKLy8gKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyCi8vIChDKSAy" + "MDE0LTIwMTcgVml0YWx5IFB1enJpbiBhbmQgQW5kcmV5IFR1cGl0c2luCi8vCi8vIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCi8vIHdh" + "cnJhbnR5LiBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcwovLyBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgovLwovLyBQZXJt" + "aXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKLy8gaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQg" + "YW5kIHJlZGlzdHJpYnV0ZSBpdAovLyBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6Ci8vCi8vIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBt" + "aXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90Ci8vICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKLy8gICBpbiBhIHByb2R1Y3Qs" + "IGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKLy8gICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgovLyAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJz" + "aW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQovLyAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KLy8gMy4gVGhpcyBub3Rp" + "Y2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KCnZhciB1dGlscyAgICAgICAgID0gcmVxdWlyZSgnLi4vdXRpbHMvY29tbW9uJyk7CnZhciBhZGxl" + "cjMyICAgICAgID0gcmVxdWlyZSgnLi9hZGxlcjMyJyk7CnZhciBjcmMzMiAgICAgICAgID0gcmVxdWlyZSgnLi9jcmMzMicpOwp2YXIgaW5mbGF0ZV9mYXN0ICA9IHJlcXVpcmUoJy4vaW5mZmFzdCcpOwp2YXIg" + "aW5mbGF0ZV90YWJsZSA9IHJlcXVpcmUoJy4vaW5mdHJlZXMnKTsKCnZhciBDT0RFUyA9IDA7CnZhciBMRU5TID0gMTsKdmFyIERJU1RTID0gMjsKCi8qIFB1YmxpYyBjb25zdGFudHMgPT09PT09PT09PT09PT09" + "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09" + "PT09PSovCgoKLyogQWxsb3dlZCBmbHVzaCB2YWx1ZXM7IHNlZSBkZWZsYXRlKCkgYW5kIGluZmxhdGUoKSBiZWxvdyBmb3IgZGV0YWlscyAqLwovL3ZhciBaX05PX0ZMVVNIICAgICAgPSAwOwovL3ZhciBaX1BB" + "UlRJQUxfRkxVU0ggPSAxOwovL3ZhciBaX1NZTkNfRkxVU0ggICAgPSAyOwovL3ZhciBaX0ZVTExfRkxVU0ggICAgPSAzOwp2YXIgWl9GSU5JU0ggICAgICAgID0gNDsKdmFyIFpfQkxPQ0sgICAgICAgICA9IDU7" + "CnZhciBaX1RSRUVTICAgICAgICAgPSA2OwoKCi8qIFJldHVybiBjb2RlcyBmb3IgdGhlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gZnVuY3Rpb25zLiBOZWdhdGl2ZSB2YWx1ZXMKICogYXJlIGVycm9ycywg" + "cG9zaXRpdmUgdmFsdWVzIGFyZSB1c2VkIGZvciBzcGVjaWFsIGJ1dCBub3JtYWwgZXZlbnRzLgogKi8KdmFyIFpfT0sgICAgICAgICAgICA9IDA7CnZhciBaX1NUUkVBTV9FTkQgICAgPSAxOwp2YXIgWl9ORUVE" + "X0RJQ1QgICAgID0gMjsKLy92YXIgWl9FUlJOTyAgICAgICAgID0gLTE7CnZhciBaX1NUUkVBTV9FUlJPUiAgPSAtMjsKdmFyIFpfREFUQV9FUlJPUiAgICA9IC0zOwp2YXIgWl9NRU1fRVJST1IgICAgID0gLTQ7" + "CnZhciBaX0JVRl9FUlJPUiAgICAgPSAtNTsKLy92YXIgWl9WRVJTSU9OX0VSUk9SID0gLTY7CgovKiBUaGUgZGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgKi8KdmFyIFpfREVGTEFURUQgID0gODsKCgovKiBT" + "VEFURVMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09" + "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwoKCnZhciAgICBIRUFEID0gMTsgICAgICAgLyogaTogd2FpdGluZyBmb3IgbWFnaWMgaGVhZGVyICovCnZhciAgICBGTEFHUyA9IDI7ICAgICAg" + "LyogaTogd2FpdGluZyBmb3IgbWV0aG9kIGFuZCBmbGFncyAoZ3ppcCkgKi8KdmFyICAgIFRJTUUgPSAzOyAgICAgICAvKiBpOiB3YWl0aW5nIGZvciBtb2RpZmljYXRpb24gdGltZSAoZ3ppcCkgKi8KdmFyICAg" + "IE9TID0gNDsgICAgICAgICAvKiBpOiB3YWl0aW5nIGZvciBleHRyYSBmbGFncyBhbmQgb3BlcmF0aW5nIHN5c3RlbSAoZ3ppcCkgKi8KdmFyICAgIEVYTEVOID0gNTsgICAgICAvKiBpOiB3YWl0aW5nIGZvciBl" + "eHRyYSBsZW5ndGggKGd6aXApICovCnZhciAgICBFWFRSQSA9IDY7ICAgICAgLyogaTogd2FpdGluZyBmb3IgZXh0cmEgYnl0ZXMgKGd6aXApICovCnZhciAgICBOQU1FID0gNzsgICAgICAgLyogaTogd2FpdGlu" + "ZyBmb3IgZW5kIG9mIGZpbGUgbmFtZSAoZ3ppcCkgKi8KdmFyICAgIENPTU1FTlQgPSA4OyAgICAvKiBpOiB3YWl0aW5nIGZvciBlbmQgb2YgY29tbWVudCAoZ3ppcCkgKi8KdmFyICAgIEhDUkMgPSA5OyAgICAg" + "ICAvKiBpOiB3YWl0aW5nIGZvciBoZWFkZXIgY3JjIChnemlwKSAqLwp2YXIgICAgRElDVElEID0gMTA7ICAgIC8qIGk6IHdhaXRpbmcgZm9yIGRpY3Rpb25hcnkgY2hlY2sgdmFsdWUgKi8KdmFyICAgIERJQ1Qg" + "PSAxMTsgICAgICAvKiB3YWl0aW5nIGZvciBpbmZsYXRlU2V0RGljdGlvbmFyeSgpIGNhbGwgKi8KdmFyICAgICAgICBUWVBFID0gMTI7ICAgICAgLyogaTogd2FpdGluZyBmb3IgdHlwZSBiaXRzLCBpbmNsdWRp" + "bmcgbGFzdC1mbGFnIGJpdCAqLwp2YXIgICAgICAgIFRZUEVETyA9IDEzOyAgICAvKiBpOiBzYW1lLCBidXQgc2tpcCBjaGVjayB0byBleGl0IGluZmxhdGUgb24gbmV3IGJsb2NrICovCnZhciAgICAgICAgU1RP" + "UkVEID0gMTQ7ICAgIC8qIGk6IHdhaXRpbmcgZm9yIHN0b3JlZCBzaXplIChsZW5ndGggYW5kIGNvbXBsZW1lbnQpICovCnZhciAgICAgICAgQ09QWV8gPSAxNTsgICAgIC8qIGkvbzogc2FtZSBhcyBDT1BZIGJl" + "bG93LCBidXQgb25seSBmaXJzdCB0aW1lIGluICovCnZhciAgICAgICAgQ09QWSA9IDE2OyAgICAgIC8qIGkvbzogd2FpdGluZyBmb3IgaW5wdXQgb3Igb3V0cHV0IHRvIGNvcHkgc3RvcmVkIGJsb2NrICovCnZh" + "ciAgICAgICAgVEFCTEUgPSAxNzsgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGR5bmFtaWMgYmxvY2sgdGFibGUgbGVuZ3RocyAqLwp2YXIgICAgICAgIExFTkxFTlMgPSAxODsgICAvKiBpOiB3YWl0aW5nIGZvciBj" + "b2RlIGxlbmd0aCBjb2RlIGxlbmd0aHMgKi8KdmFyICAgICAgICBDT0RFTEVOUyA9IDE5OyAgLyogaTogd2FpdGluZyBmb3IgbGVuZ3RoL2xpdCBhbmQgZGlzdGFuY2UgY29kZSBsZW5ndGhzICovCnZhciAgICAg" + "ICAgICAgIExFTl8gPSAyMDsgICAgICAvKiBpOiBzYW1lIGFzIExFTiBiZWxvdywgYnV0IG9ubHkgZmlyc3QgdGltZSBpbiAqLwp2YXIgICAgICAgICAgICBMRU4gPSAyMTsgICAgICAgLyogaTogd2FpdGluZyBm" + "b3IgbGVuZ3RoL2xpdC9lb2IgY29kZSAqLwp2YXIgICAgICAgICAgICBMRU5FWFQgPSAyMjsgICAgLyogaTogd2FpdGluZyBmb3IgbGVuZ3RoIGV4dHJhIGJpdHMgKi8KdmFyICAgICAgICAgICAgRElTVCA9IDIz" + "OyAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGRpc3RhbmNlIGNvZGUgKi8KdmFyICAgICAgICAgICAgRElTVEVYVCA9IDI0OyAgIC8qIGk6IHdhaXRpbmcgZm9yIGRpc3RhbmNlIGV4dHJhIGJpdHMgKi8KdmFyICAg" + "ICAgICAgICAgTUFUQ0ggPSAyNTsgICAgIC8qIG86IHdhaXRpbmcgZm9yIG91dHB1dCBzcGFjZSB0byBjb3B5IHN0cmluZyAqLwp2YXIgICAgICAgICAgICBMSVQgPSAyNjsgICAgICAgLyogbzogd2FpdGluZyBm" + "b3Igb3V0cHV0IHNwYWNlIHRvIHdyaXRlIGxpdGVyYWwgKi8KdmFyICAgIENIRUNLID0gMjc7ICAgICAvKiBpOiB3YWl0aW5nIGZvciAzMi1iaXQgY2hlY2sgdmFsdWUgKi8KdmFyICAgIExFTkdUSCA9IDI4OyAg" + "ICAvKiBpOiB3YWl0aW5nIGZvciAzMi1iaXQgbGVuZ3RoIChnemlwKSAqLwp2YXIgICAgRE9ORSA9IDI5OyAgICAgIC8qIGZpbmlzaGVkIGNoZWNrLCBkb25lIC0tIHJlbWFpbiBoZXJlIHVudGlsIHJlc2V0ICov" + "CnZhciAgICBCQUQgPSAzMDsgICAgICAgLyogZ290IGEgZGF0YSBlcnJvciAtLSByZW1haW4gaGVyZSB1bnRpbCByZXNldCAqLwp2YXIgICAgTUVNID0gMzE7ICAgICAgIC8qIGdvdCBhbiBpbmZsYXRlKCkgbWVt" + "b3J5IGVycm9yIC0tIHJlbWFpbiBoZXJlIHVudGlsIHJlc2V0ICovCnZhciAgICBTWU5DID0gMzI7ICAgICAgLyogbG9va2luZyBmb3Igc3luY2hyb25pemF0aW9uIGJ5dGVzIHRvIHJlc3RhcnQgaW5mbGF0ZSgp" + "ICovCgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwoKCgp2YXIgRU5PVUdIX0xFTlMgPSA4NTI7CnZhciBFTk9V" + "R0hfRElTVFMgPSA1OTI7Ci8vdmFyIEVOT1VHSCA9ICAoRU5PVUdIX0xFTlMrRU5PVUdIX0RJU1RTKTsKCnZhciBNQVhfV0JJVFMgPSAxNTsKLyogMzJLIExaNzcgd2luZG93ICovCnZhciBERUZfV0JJVFMgPSBN" + "QVhfV0JJVFM7CgoKZnVuY3Rpb24genN3YXAzMihxKSB7CiAgcmV0dXJuICAoKChxID4+PiAyNCkgJiAweGZmKSArCiAgICAgICAgICAoKHEgPj4+IDgpICYgMHhmZjAwKSArCiAgICAgICAgICAoKHEgJiAweGZm" + "MDApIDw8IDgpICsKICAgICAgICAgICgocSAmIDB4ZmYpIDw8IDI0KSk7Cn0KCgpmdW5jdGlvbiBJbmZsYXRlU3RhdGUoKSB7CiAgdGhpcy5tb2RlID0gMDsgICAgICAgICAgICAgLyogY3VycmVudCBpbmZsYXRl" + "IG1vZGUgKi8KICB0aGlzLmxhc3QgPSBmYWxzZTsgICAgICAgICAgLyogdHJ1ZSBpZiBwcm9jZXNzaW5nIGxhc3QgYmxvY2sgKi8KICB0aGlzLndyYXAgPSAwOyAgICAgICAgICAgICAgLyogYml0IDAgdHJ1ZSBm" + "b3IgemxpYiwgYml0IDEgdHJ1ZSBmb3IgZ3ppcCAqLwogIHRoaXMuaGF2ZWRpY3QgPSBmYWxzZTsgICAgICAvKiB0cnVlIGlmIGRpY3Rpb25hcnkgcHJvdmlkZWQgKi8KICB0aGlzLmZsYWdzID0gMDsgICAgICAg" + "ICAgICAgLyogZ3ppcCBoZWFkZXIgbWV0aG9kIGFuZCBmbGFncyAoMCBpZiB6bGliKSAqLwogIHRoaXMuZG1heCA9IDA7ICAgICAgICAgICAgICAvKiB6bGliIGhlYWRlciBtYXggZGlzdGFuY2UgKElORkxBVEVf" + "U1RSSUNUKSAqLwogIHRoaXMuY2hlY2sgPSAwOyAgICAgICAgICAgICAvKiBwcm90ZWN0ZWQgY29weSBvZiBjaGVjayB2YWx1ZSAqLwogIHRoaXMudG90YWwgPSAwOyAgICAgICAgICAgICAvKiBwcm90ZWN0ZWQg" + "Y29weSBvZiBvdXRwdXQgY291bnQgKi8KICAvLyBUT0RPOiBtYXkgYmUge30KICB0aGlzLmhlYWQgPSBudWxsOyAgICAgICAgICAgLyogd2hlcmUgdG8gc2F2ZSBnemlwIGhlYWRlciBpbmZvcm1hdGlvbiAqLwoK" + "ICAvKiBzbGlkaW5nIHdpbmRvdyAqLwogIHRoaXMud2JpdHMgPSAwOyAgICAgICAgICAgICAvKiBsb2cgYmFzZSAyIG9mIHJlcXVlc3RlZCB3aW5kb3cgc2l6ZSAqLwogIHRoaXMud3NpemUgPSAwOyAgICAgICAg" + "ICAgICAvKiB3aW5kb3cgc2l6ZSBvciB6ZXJvIGlmIG5vdCB1c2luZyB3aW5kb3cgKi8KICB0aGlzLndoYXZlID0gMDsgICAgICAgICAgICAgLyogdmFsaWQgYnl0ZXMgaW4gdGhlIHdpbmRvdyAqLwogIHRoaXMu" + "d25leHQgPSAwOyAgICAgICAgICAgICAvKiB3aW5kb3cgd3JpdGUgaW5kZXggKi8KICB0aGlzLndpbmRvdyA9IG51bGw7ICAgICAgICAgLyogYWxsb2NhdGVkIHNsaWRpbmcgd2luZG93LCBpZiBuZWVkZWQgKi8K" + "CiAgLyogYml0IGFjY3VtdWxhdG9yICovCiAgdGhpcy5ob2xkID0gMDsgICAgICAgICAgICAgIC8qIGlucHV0IGJpdCBhY2N1bXVsYXRvciAqLwogIHRoaXMuYml0cyA9IDA7ICAgICAgICAgICAgICAvKiBudW1i" + "ZXIgb2YgYml0cyBpbiAiaW4iICovCgogIC8qIGZvciBzdHJpbmcgYW5kIHN0b3JlZCBibG9jayBjb3B5aW5nICovCiAgdGhpcy5sZW5ndGggPSAwOyAgICAgICAgICAgIC8qIGxpdGVyYWwgb3IgbGVuZ3RoIG9m" + "IGRhdGEgdG8gY29weSAqLwogIHRoaXMub2Zmc2V0ID0gMDsgICAgICAgICAgICAvKiBkaXN0YW5jZSBiYWNrIHRvIGNvcHkgc3RyaW5nIGZyb20gKi8KCiAgLyogZm9yIHRhYmxlIGFuZCBjb2RlIGRlY29kaW5n" + "ICovCiAgdGhpcy5leHRyYSA9IDA7ICAgICAgICAgICAgIC8qIGV4dHJhIGJpdHMgbmVlZGVkICovCgogIC8qIGZpeGVkIGFuZCBkeW5hbWljIGNvZGUgdGFibGVzICovCiAgdGhpcy5sZW5jb2RlID0gbnVsbDsg" + "ICAgICAgICAgLyogc3RhcnRpbmcgdGFibGUgZm9yIGxlbmd0aC9saXRlcmFsIGNvZGVzICovCiAgdGhpcy5kaXN0Y29kZSA9IG51bGw7ICAgICAgICAgLyogc3RhcnRpbmcgdGFibGUgZm9yIGRpc3RhbmNlIGNv" + "ZGVzICovCiAgdGhpcy5sZW5iaXRzID0gMDsgICAgICAgICAgIC8qIGluZGV4IGJpdHMgZm9yIGxlbmNvZGUgKi8KICB0aGlzLmRpc3RiaXRzID0gMDsgICAgICAgICAgLyogaW5kZXggYml0cyBmb3IgZGlzdGNv" + "ZGUgKi8KCiAgLyogZHluYW1pYyB0YWJsZSBidWlsZGluZyAqLwogIHRoaXMubmNvZGUgPSAwOyAgICAgICAgICAgICAvKiBudW1iZXIgb2YgY29kZSBsZW5ndGggY29kZSBsZW5ndGhzICovCiAgdGhpcy5ubGVu" + "ID0gMDsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBsZW5ndGggY29kZSBsZW5ndGhzICovCiAgdGhpcy5uZGlzdCA9IDA7ICAgICAgICAgICAgIC8qIG51bWJlciBvZiBkaXN0YW5jZSBjb2RlIGxlbmd0aHMg" + "Ki8KICB0aGlzLmhhdmUgPSAwOyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNvZGUgbGVuZ3RocyBpbiBsZW5zW10gKi8KICB0aGlzLm5leHQgPSBudWxsOyAgICAgICAgICAgICAgLyogbmV4dCBhdmFpbGFi" + "bGUgc3BhY2UgaW4gY29kZXNbXSAqLwoKICB0aGlzLmxlbnMgPSBuZXcgdXRpbHMuQnVmMTYoMzIwKTsgLyogdGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGNvZGUgbGVuZ3RocyAqLwogIHRoaXMud29yayA9IG5ldyB1" + "dGlscy5CdWYxNigyODgpOyAvKiB3b3JrIGFyZWEgZm9yIGNvZGUgdGFibGUgYnVpbGRpbmcgKi8KCiAgLyoKICAgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHBvaW50ZXJzIGluIGpzLCB3ZSB1c2UgbGVuY29kZSBh" + "bmQgZGlzdGNvZGUgZGlyZWN0bHkKICAgYXMgYnVmZmVycyBzbyB3ZSBkb24ndCBuZWVkIGNvZGVzCiAgKi8KICAvL3RoaXMuY29kZXMgPSBuZXcgdXRpbHMuQnVmMzIoRU5PVUdIKTsgICAgICAgLyogc3BhY2Ug" + "Zm9yIGNvZGUgdGFibGVzICovCiAgdGhpcy5sZW5keW4gPSBudWxsOyAgICAgICAgICAgICAgLyogZHluYW1pYyB0YWJsZSBmb3IgbGVuZ3RoL2xpdGVyYWwgY29kZXMgKEpTIHNwZWNpZmljKSAqLwogIHRoaXMu" + "ZGlzdGR5biA9IG51bGw7ICAgICAgICAgICAgIC8qIGR5bmFtaWMgdGFibGUgZm9yIGRpc3RhbmNlIGNvZGVzIChKUyBzcGVjaWZpYykgKi8KICB0aGlzLnNhbmUgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBp" + "ZiBmYWxzZSwgYWxsb3cgaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyICovCiAgdGhpcy5iYWNrID0gMDsgICAgICAgICAgICAgICAgICAgLyogYml0cyBiYWNrIG9mIGxhc3QgdW5wcm9jZXNzZWQgbGVuZ3RoL2xp" + "dCAqLwogIHRoaXMud2FzID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIGluaXRpYWwgbGVuZ3RoIG9mIG1hdGNoICovCn0KCmZ1bmN0aW9uIGluZmxhdGVSZXNldEtlZXAoc3RybSkgewogIHZhciBzdGF0ZTsK" + "CiAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7IHJldHVybiBaX1NUUkVBTV9FUlJPUjsgfQogIHN0YXRlID0gc3RybS5zdGF0ZTsKICBzdHJtLnRvdGFsX2luID0gc3RybS50b3RhbF9vdXQgPSBzdGF0ZS50" + "b3RhbCA9IDA7CiAgc3RybS5tc2cgPSAnJzsgLypaX05VTEwqLwogIGlmIChzdGF0ZS53cmFwKSB7ICAgICAgIC8qIHRvIHN1cHBvcnQgaWxsLWNvbmNlaXZlZCBKYXZhIHRlc3Qgc3VpdGUgKi8KICAgIHN0cm0u" + "YWRsZXIgPSBzdGF0ZS53cmFwICYgMTsKICB9CiAgc3RhdGUubW9kZSA9IEhFQUQ7CiAgc3RhdGUubGFzdCA9IDA7CiAgc3RhdGUuaGF2ZWRpY3QgPSAwOwogIHN0YXRlLmRtYXggPSAzMjc2ODsKICBzdGF0ZS5o" + "ZWFkID0gbnVsbC8qWl9OVUxMKi87CiAgc3RhdGUuaG9sZCA9IDA7CiAgc3RhdGUuYml0cyA9IDA7CiAgLy9zdGF0ZS5sZW5jb2RlID0gc3RhdGUuZGlzdGNvZGUgPSBzdGF0ZS5uZXh0ID0gc3RhdGUuY29kZXM7" + "CiAgc3RhdGUubGVuY29kZSA9IHN0YXRlLmxlbmR5biA9IG5ldyB1dGlscy5CdWYzMihFTk9VR0hfTEVOUyk7CiAgc3RhdGUuZGlzdGNvZGUgPSBzdGF0ZS5kaXN0ZHluID0gbmV3IHV0aWxzLkJ1ZjMyKEVOT1VH" + "SF9ESVNUUyk7CgogIHN0YXRlLnNhbmUgPSAxOwogIHN0YXRlLmJhY2sgPSAtMTsKICAvL1RyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogcmVzZXRcbiIpKTsKICByZXR1cm4gWl9PSzsKfQoKZnVuY3Rpb24gaW5m" + "bGF0ZVJlc2V0KHN0cm0pIHsKICB2YXIgc3RhdGU7CgogIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgeyByZXR1cm4gWl9TVFJFQU1fRVJST1I7IH0KICBzdGF0ZSA9IHN0cm0uc3RhdGU7CiAgc3RhdGUud3Np" + "emUgPSAwOwogIHN0YXRlLndoYXZlID0gMDsKICBzdGF0ZS53bmV4dCA9IDA7CiAgcmV0dXJuIGluZmxhdGVSZXNldEtlZXAoc3RybSk7Cgp9CgpmdW5jdGlvbiBpbmZsYXRlUmVzZXQyKHN0cm0sIHdpbmRvd0Jp" + "dHMpIHsKICB2YXIgd3JhcDsKICB2YXIgc3RhdGU7CgogIC8qIGdldCB0aGUgc3RhdGUgKi8KICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHsgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOyB9CiAgc3RhdGUgPSBz" + "dHJtLnN0YXRlOwoKICAvKiBleHRyYWN0IHdyYXAgcmVxdWVzdCBmcm9tIHdpbmRvd0JpdHMgcGFyYW1ldGVyICovCiAgaWYgKHdpbmRvd0JpdHMgPCAwKSB7CiAgICB3cmFwID0gMDsKICAgIHdpbmRvd0JpdHMg" + "PSAtd2luZG93Qml0czsKICB9CiAgZWxzZSB7CiAgICB3cmFwID0gKHdpbmRvd0JpdHMgPj4gNCkgKyAxOwogICAgaWYgKHdpbmRvd0JpdHMgPCA0OCkgewogICAgICB3aW5kb3dCaXRzICY9IDE1OwogICAgfQog" + "IH0KCiAgLyogc2V0IG51bWJlciBvZiB3aW5kb3cgYml0cywgZnJlZSB3aW5kb3cgaWYgZGlmZmVyZW50ICovCiAgaWYgKHdpbmRvd0JpdHMgJiYgKHdpbmRvd0JpdHMgPCA4IHx8IHdpbmRvd0JpdHMgPiAxNSkp" + "IHsKICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICB9CiAgaWYgKHN0YXRlLndpbmRvdyAhPT0gbnVsbCAmJiBzdGF0ZS53Yml0cyAhPT0gd2luZG93Qml0cykgewogICAgc3RhdGUud2luZG93ID0gbnVsbDsK" + "ICB9CgogIC8qIHVwZGF0ZSBzdGF0ZSBhbmQgcmVzZXQgdGhlIHJlc3Qgb2YgaXQgKi8KICBzdGF0ZS53cmFwID0gd3JhcDsKICBzdGF0ZS53Yml0cyA9IHdpbmRvd0JpdHM7CiAgcmV0dXJuIGluZmxhdGVSZXNl" + "dChzdHJtKTsKfQoKZnVuY3Rpb24gaW5mbGF0ZUluaXQyKHN0cm0sIHdpbmRvd0JpdHMpIHsKICB2YXIgcmV0OwogIHZhciBzdGF0ZTsKCiAgaWYgKCFzdHJtKSB7IHJldHVybiBaX1NUUkVBTV9FUlJPUjsgfQog" + "IC8vc3RybS5tc2cgPSBaX05VTEw7ICAgICAgICAgICAgICAgICAvKiBpbiBjYXNlIHdlIHJldHVybiBhbiBlcnJvciAqLwoKICBzdGF0ZSA9IG5ldyBJbmZsYXRlU3RhdGUoKTsKCiAgLy9pZiAoc3RhdGUgPT09" + "IFpfTlVMTCkgcmV0dXJuIFpfTUVNX0VSUk9SOwogIC8vVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiBhbGxvY2F0ZWRcbiIpKTsKICBzdHJtLnN0YXRlID0gc3RhdGU7CiAgc3RhdGUud2luZG93ID0gbnVsbC8q" + "Wl9OVUxMKi87CiAgcmV0ID0gaW5mbGF0ZVJlc2V0MihzdHJtLCB3aW5kb3dCaXRzKTsKICBpZiAocmV0ICE9PSBaX09LKSB7CiAgICBzdHJtLnN0YXRlID0gbnVsbC8qWl9OVUxMKi87CiAgfQogIHJldHVybiBy" + "ZXQ7Cn0KCmZ1bmN0aW9uIGluZmxhdGVJbml0KHN0cm0pIHsKICByZXR1cm4gaW5mbGF0ZUluaXQyKHN0cm0sIERFRl9XQklUUyk7Cn0KCgovKgogUmV0dXJuIHN0YXRlIHdpdGggbGVuZ3RoIGFuZCBkaXN0YW5j" + "ZSBkZWNvZGluZyB0YWJsZXMgYW5kIGluZGV4IHNpemVzIHNldCB0bwogZml4ZWQgY29kZSBkZWNvZGluZy4gIE5vcm1hbGx5IHRoaXMgcmV0dXJucyBmaXhlZCB0YWJsZXMgZnJvbSBpbmZmaXhlZC5oLgogSWYg" + "QlVJTERGSVhFRCBpcyBkZWZpbmVkLCB0aGVuIGluc3RlYWQgdGhpcyByb3V0aW5lIGJ1aWxkcyB0aGUgdGFibGVzIHRoZQogZmlyc3QgdGltZSBpdCdzIGNhbGxlZCwgYW5kIHJldHVybnMgdGhvc2UgdGFibGVz" + "IHRoZSBmaXJzdCB0aW1lIGFuZAogdGhlcmVhZnRlci4gIFRoaXMgcmVkdWNlcyB0aGUgc2l6ZSBvZiB0aGUgY29kZSBieSBhYm91dCAySyBieXRlcywgaW4KIGV4Y2hhbmdlIGZvciBhIGxpdHRsZSBleGVjdXRp" + "b24gdGltZS4gIEhvd2V2ZXIsIEJVSUxERklYRUQgc2hvdWxkIG5vdCBiZQogdXNlZCBmb3IgdGhyZWFkZWQgYXBwbGljYXRpb25zLCBzaW5jZSB0aGUgcmV3cml0aW5nIG9mIHRoZSB0YWJsZXMgYW5kIHZpcmdp" + "bgogbWF5IG5vdCBiZSB0aHJlYWQtc2FmZS4KICovCnZhciB2aXJnaW4gPSB0cnVlOwoKdmFyIGxlbmZpeCwgZGlzdGZpeDsgLy8gV2UgaGF2ZSBubyBwb2ludGVycyBpbiBKUywgc28ga2VlcCB0YWJsZXMgc2Vw" + "YXJhdGUKCmZ1bmN0aW9uIGZpeGVkdGFibGVzKHN0YXRlKSB7CiAgLyogYnVpbGQgZml4ZWQgaHVmZm1hbiB0YWJsZXMgaWYgZmlyc3QgY2FsbCAobWF5IG5vdCBiZSB0aHJlYWQgc2FmZSkgKi8KICBpZiAodmly" + "Z2luKSB7CiAgICB2YXIgc3ltOwoKICAgIGxlbmZpeCA9IG5ldyB1dGlscy5CdWYzMig1MTIpOwogICAgZGlzdGZpeCA9IG5ldyB1dGlscy5CdWYzMigzMik7CgogICAgLyogbGl0ZXJhbC9sZW5ndGggdGFibGUg" + "Ki8KICAgIHN5bSA9IDA7CiAgICB3aGlsZSAoc3ltIDwgMTQ0KSB7IHN0YXRlLmxlbnNbc3ltKytdID0gODsgfQogICAgd2hpbGUgKHN5bSA8IDI1NikgeyBzdGF0ZS5sZW5zW3N5bSsrXSA9IDk7IH0KICAgIHdo" + "aWxlIChzeW0gPCAyODApIHsgc3RhdGUubGVuc1tzeW0rK10gPSA3OyB9CiAgICB3aGlsZSAoc3ltIDwgMjg4KSB7IHN0YXRlLmxlbnNbc3ltKytdID0gODsgfQoKICAgIGluZmxhdGVfdGFibGUoTEVOUywgIHN0" + "YXRlLmxlbnMsIDAsIDI4OCwgbGVuZml4LCAgIDAsIHN0YXRlLndvcmssIHsgYml0czogOSB9KTsKCiAgICAvKiBkaXN0YW5jZSB0YWJsZSAqLwogICAgc3ltID0gMDsKICAgIHdoaWxlIChzeW0gPCAzMikgeyBz" + "dGF0ZS5sZW5zW3N5bSsrXSA9IDU7IH0KCiAgICBpbmZsYXRlX3RhYmxlKERJU1RTLCBzdGF0ZS5sZW5zLCAwLCAzMiwgICBkaXN0Zml4LCAwLCBzdGF0ZS53b3JrLCB7IGJpdHM6IDUgfSk7CgogICAgLyogZG8g" + "dGhpcyBqdXN0IG9uY2UgKi8KICAgIHZpcmdpbiA9IGZhbHNlOwogIH0KCiAgc3RhdGUubGVuY29kZSA9IGxlbmZpeDsKICBzdGF0ZS5sZW5iaXRzID0gOTsKICBzdGF0ZS5kaXN0Y29kZSA9IGRpc3RmaXg7CiAg" + "c3RhdGUuZGlzdGJpdHMgPSA1Owp9CgoKLyoKIFVwZGF0ZSB0aGUgd2luZG93IHdpdGggdGhlIGxhc3Qgd3NpemUgKG5vcm1hbGx5IDMySykgYnl0ZXMgd3JpdHRlbiBiZWZvcmUKIHJldHVybmluZy4gIElmIHdp" + "bmRvdyBkb2VzIG5vdCBleGlzdCB5ZXQsIGNyZWF0ZSBpdC4gIFRoaXMgaXMgb25seSBjYWxsZWQKIHdoZW4gYSB3aW5kb3cgaXMgYWxyZWFkeSBpbiB1c2UsIG9yIHdoZW4gb3V0cHV0IGhhcyBiZWVuIHdyaXR0" + "ZW4gZHVyaW5nIHRoaXMKIGluZmxhdGUgY2FsbCwgYnV0IHRoZSBlbmQgb2YgdGhlIGRlZmxhdGUgc3RyZWFtIGhhcyBub3QgYmVlbiByZWFjaGVkIHlldC4KIEl0IGlzIGFsc28gY2FsbGVkIHRvIGNyZWF0ZSBh" + "IHdpbmRvdyBmb3IgZGljdGlvbmFyeSBkYXRhIHdoZW4gYSBkaWN0aW9uYXJ5CiBpcyBsb2FkZWQuCgogUHJvdmlkaW5nIG91dHB1dCBidWZmZXJzIGxhcmdlciB0aGFuIDMySyB0byBpbmZsYXRlKCkgc2hvdWxk" + "IHByb3ZpZGUgYSBzcGVlZAogYWR2YW50YWdlLCBzaW5jZSBvbmx5IHRoZSBsYXN0IDMySyBvZiBvdXRwdXQgaXMgY29waWVkIHRvIHRoZSBzbGlkaW5nIHdpbmRvdwogdXBvbiByZXR1cm4gZnJvbSBpbmZsYXRl" + "KCksIGFuZCBzaW5jZSBhbGwgZGlzdGFuY2VzIGFmdGVyIHRoZSBmaXJzdCAzMksgb2YKIG91dHB1dCB3aWxsIGZhbGwgaW4gdGhlIG91dHB1dCBkYXRhLCBtYWtpbmcgbWF0Y2ggY29waWVzIHNpbXBsZXIgYW5k" + "IGZhc3Rlci4KIFRoZSBhZHZhbnRhZ2UgbWF5IGJlIGRlcGVuZGVudCBvbiB0aGUgc2l6ZSBvZiB0aGUgcHJvY2Vzc29yJ3MgZGF0YSBjYWNoZXMuCiAqLwpmdW5jdGlvbiB1cGRhdGV3aW5kb3coc3RybSwgc3Jj" + "LCBlbmQsIGNvcHkpIHsKICB2YXIgZGlzdDsKICB2YXIgc3RhdGUgPSBzdHJtLnN0YXRlOwoKICAvKiBpZiBpdCBoYXNuJ3QgYmVlbiBkb25lIGFscmVhZHksIGFsbG9jYXRlIHNwYWNlIGZvciB0aGUgd2luZG93" + "ICovCiAgaWYgKHN0YXRlLndpbmRvdyA9PT0gbnVsbCkgewogICAgc3RhdGUud3NpemUgPSAxIDw8IHN0YXRlLndiaXRzOwogICAgc3RhdGUud25leHQgPSAwOwogICAgc3RhdGUud2hhdmUgPSAwOwoKICAgIHN0" + "YXRlLndpbmRvdyA9IG5ldyB1dGlscy5CdWY4KHN0YXRlLndzaXplKTsKICB9CgogIC8qIGNvcHkgc3RhdGUtPndzaXplIG9yIGxlc3Mgb3V0cHV0IGJ5dGVzIGludG8gdGhlIGNpcmN1bGFyIHdpbmRvdyAqLwog" + "IGlmIChjb3B5ID49IHN0YXRlLndzaXplKSB7CiAgICB1dGlscy5hcnJheVNldChzdGF0ZS53aW5kb3csIHNyYywgZW5kIC0gc3RhdGUud3NpemUsIHN0YXRlLndzaXplLCAwKTsKICAgIHN0YXRlLnduZXh0ID0g" + "MDsKICAgIHN0YXRlLndoYXZlID0gc3RhdGUud3NpemU7CiAgfQogIGVsc2UgewogICAgZGlzdCA9IHN0YXRlLndzaXplIC0gc3RhdGUud25leHQ7CiAgICBpZiAoZGlzdCA+IGNvcHkpIHsKICAgICAgZGlzdCA9" + "IGNvcHk7CiAgICB9CiAgICAvL3ptZW1jcHkoc3RhdGUtPndpbmRvdyArIHN0YXRlLT53bmV4dCwgZW5kIC0gY29weSwgZGlzdCk7CiAgICB1dGlscy5hcnJheVNldChzdGF0ZS53aW5kb3csIHNyYywgZW5kIC0g" + "Y29weSwgZGlzdCwgc3RhdGUud25leHQpOwogICAgY29weSAtPSBkaXN0OwogICAgaWYgKGNvcHkpIHsKICAgICAgLy96bWVtY3B5KHN0YXRlLT53aW5kb3csIGVuZCAtIGNvcHksIGNvcHkpOwogICAgICB1dGls" + "cy5hcnJheVNldChzdGF0ZS53aW5kb3csIHNyYywgZW5kIC0gY29weSwgY29weSwgMCk7CiAgICAgIHN0YXRlLnduZXh0ID0gY29weTsKICAgICAgc3RhdGUud2hhdmUgPSBzdGF0ZS53c2l6ZTsKICAgIH0KICAg" + "IGVsc2UgewogICAgICBzdGF0ZS53bmV4dCArPSBkaXN0OwogICAgICBpZiAoc3RhdGUud25leHQgPT09IHN0YXRlLndzaXplKSB7IHN0YXRlLnduZXh0ID0gMDsgfQogICAgICBpZiAoc3RhdGUud2hhdmUgPCBz" + "dGF0ZS53c2l6ZSkgeyBzdGF0ZS53aGF2ZSArPSBkaXN0OyB9CiAgICB9CiAgfQogIHJldHVybiAwOwp9CgpmdW5jdGlvbiBpbmZsYXRlKHN0cm0sIGZsdXNoKSB7CiAgdmFyIHN0YXRlOwogIHZhciBpbnB1dCwg" + "b3V0cHV0OyAgICAgICAgICAvLyBpbnB1dC9vdXRwdXQgYnVmZmVycwogIHZhciBuZXh0OyAgICAgICAgICAgICAgICAgICAvKiBuZXh0IGlucHV0IElOREVYICovCiAgdmFyIHB1dDsgICAgICAgICAgICAgICAg" + "ICAgIC8qIG5leHQgb3V0cHV0IElOREVYICovCiAgdmFyIGhhdmUsIGxlZnQ7ICAgICAgICAgICAgIC8qIGF2YWlsYWJsZSBpbnB1dCBhbmQgb3V0cHV0ICovCiAgdmFyIGhvbGQ7ICAgICAgICAgICAgICAgICAg" + "IC8qIGJpdCBidWZmZXIgKi8KICB2YXIgYml0czsgICAgICAgICAgICAgICAgICAgLyogYml0cyBpbiBiaXQgYnVmZmVyICovCiAgdmFyIF9pbiwgX291dDsgICAgICAgICAgICAgIC8qIHNhdmUgc3RhcnRpbmcg" + "YXZhaWxhYmxlIGlucHV0IGFuZCBvdXRwdXQgKi8KICB2YXIgY29weTsgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHN0b3JlZCBvciBtYXRjaCBieXRlcyB0byBjb3B5ICovCiAgdmFyIGZyb207ICAg" + "ICAgICAgICAgICAgICAgIC8qIHdoZXJlIHRvIGNvcHkgbWF0Y2ggYnl0ZXMgZnJvbSAqLwogIHZhciBmcm9tX3NvdXJjZTsKICB2YXIgaGVyZSA9IDA7ICAgICAgICAgICAgICAgLyogY3VycmVudCBkZWNvZGlu" + "ZyB0YWJsZSBlbnRyeSAqLwogIHZhciBoZXJlX2JpdHMsIGhlcmVfb3AsIGhlcmVfdmFsOyAvLyBwYWtlZCAiaGVyZSIgZGVub3JtYWxpemVkIChKUyBzcGVjaWZpYykKICAvL3ZhciBsYXN0OyAgICAgICAgICAg" + "ICAgICAgICAvKiBwYXJlbnQgdGFibGUgZW50cnkgKi8KICB2YXIgbGFzdF9iaXRzLCBsYXN0X29wLCBsYXN0X3ZhbDsgLy8gcGFrZWQgImxhc3QiIGRlbm9ybWFsaXplZCAoSlMgc3BlY2lmaWMpCiAgdmFyIGxl" + "bjsgICAgICAgICAgICAgICAgICAgIC8qIGxlbmd0aCB0byBjb3B5IGZvciByZXBlYXRzLCBiaXRzIHRvIGRyb3AgKi8KICB2YXIgcmV0OyAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIGNvZGUgKi8KICB2" + "YXIgaGJ1ZiA9IG5ldyB1dGlscy5CdWY4KDQpOyAgICAvKiBidWZmZXIgZm9yIGd6aXAgaGVhZGVyIGNyYyBjYWxjdWxhdGlvbiAqLwogIHZhciBvcHRzOwoKICB2YXIgbjsgLy8gdGVtcG9yYXJ5IHZhciBmb3Ig" + "TkVFRF9CSVRTCgogIHZhciBvcmRlciA9IC8qIHBlcm11dGF0aW9uIG9mIGNvZGUgbGVuZ3RocyAqLwogICAgWyAxNiwgMTcsIDE4LCAwLCA4LCA3LCA5LCA2LCAxMCwgNSwgMTEsIDQsIDEyLCAzLCAxMywgMiwg" + "MTQsIDEsIDE1IF07CgoKICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUgfHwgIXN0cm0ub3V0cHV0IHx8CiAgICAgICghc3RybS5pbnB1dCAmJiBzdHJtLmF2YWlsX2luICE9PSAwKSkgewogICAgcmV0dXJuIFpf" + "U1RSRUFNX0VSUk9SOwogIH0KCiAgc3RhdGUgPSBzdHJtLnN0YXRlOwogIGlmIChzdGF0ZS5tb2RlID09PSBUWVBFKSB7IHN0YXRlLm1vZGUgPSBUWVBFRE87IH0gICAgLyogc2tpcCBjaGVjayAqLwoKCiAgLy8t" + "LS0gTE9BRCgpIC0tLQogIHB1dCA9IHN0cm0ubmV4dF9vdXQ7CiAgb3V0cHV0ID0gc3RybS5vdXRwdXQ7CiAgbGVmdCA9IHN0cm0uYXZhaWxfb3V0OwogIG5leHQgPSBzdHJtLm5leHRfaW47CiAgaW5wdXQgPSBz" + "dHJtLmlucHV0OwogIGhhdmUgPSBzdHJtLmF2YWlsX2luOwogIGhvbGQgPSBzdGF0ZS5ob2xkOwogIGJpdHMgPSBzdGF0ZS5iaXRzOwogIC8vLS0tCgogIF9pbiA9IGhhdmU7CiAgX291dCA9IGxlZnQ7CiAgcmV0" + "ID0gWl9PSzsKCiAgaW5mX2xlYXZlOiAvLyBnb3RvIGVtdWxhdGlvbgogIGZvciAoOzspIHsKICAgIHN3aXRjaCAoc3RhdGUubW9kZSkgewogICAgY2FzZSBIRUFEOgogICAgICBpZiAoc3RhdGUud3JhcCA9PT0g" + "MCkgewogICAgICAgIHN0YXRlLm1vZGUgPSBUWVBFRE87CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgLy89PT0gTkVFREJJVFMoMTYpOwogICAgICB3aGlsZSAoYml0cyA8IDE2KSB7CiAgICAgICAgaWYg" + "KGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9CiAgICAgICAgaGF2ZS0tOwogICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgIGJpdHMgKz0gODsKICAgICAgfQogICAg" + "ICAvLz09PS8vCiAgICAgIGlmICgoc3RhdGUud3JhcCAmIDIpICYmIGhvbGQgPT09IDB4OGIxZikgeyAgLyogZ3ppcCBoZWFkZXIgKi8KICAgICAgICBzdGF0ZS5jaGVjayA9IDAvKmNyYzMyKDBMLCBaX05VTEws" + "IDApKi87CiAgICAgICAgLy89PT0gQ1JDMihzdGF0ZS5jaGVjaywgaG9sZCk7CiAgICAgICAgaGJ1ZlswXSA9IGhvbGQgJiAweGZmOwogICAgICAgIGhidWZbMV0gPSAoaG9sZCA+Pj4gOCkgJiAweGZmOwogICAg" + "ICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGhidWYsIDIsIDApOwogICAgICAgIC8vPT09Ly8KCiAgICAgICAgLy89PT0gSU5JVEJJVFMoKTsKICAgICAgICBob2xkID0gMDsKICAgICAgICBi" + "aXRzID0gMDsKICAgICAgICAvLz09PS8vCiAgICAgICAgc3RhdGUubW9kZSA9IEZMQUdTOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHN0YXRlLmZsYWdzID0gMDsgICAgICAgICAgIC8qIGV4cGVjdCB6" + "bGliIGhlYWRlciAqLwogICAgICBpZiAoc3RhdGUuaGVhZCkgewogICAgICAgIHN0YXRlLmhlYWQuZG9uZSA9IGZhbHNlOwogICAgICB9CiAgICAgIGlmICghKHN0YXRlLndyYXAgJiAxKSB8fCAgIC8qIGNoZWNr" + "IGlmIHpsaWIgaGVhZGVyIGFsbG93ZWQgKi8KICAgICAgICAoKChob2xkICYgMHhmZikvKkJJVFMoOCkqLyA8PCA4KSArIChob2xkID4+IDgpKSAlIDMxKSB7CiAgICAgICAgc3RybS5tc2cgPSAnaW5jb3JyZWN0" + "IGhlYWRlciBjaGVjayc7CiAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBpZiAoKGhvbGQgJiAweDBmKS8qQklUUyg0KSovICE9PSBaX0RFRkxBVEVEKSB7CiAg" + "ICAgICAgc3RybS5tc2cgPSAndW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QnOwogICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgLy8tLS0gRFJPUEJJVFMoNCkg" + "LS0tLy8KICAgICAgaG9sZCA+Pj49IDQ7CiAgICAgIGJpdHMgLT0gNDsKICAgICAgLy8tLS0vLwogICAgICBsZW4gPSAoaG9sZCAmIDB4MGYpLypCSVRTKDQpKi8gKyA4OwogICAgICBpZiAoc3RhdGUud2JpdHMg" + "PT09IDApIHsKICAgICAgICBzdGF0ZS53Yml0cyA9IGxlbjsKICAgICAgfQogICAgICBlbHNlIGlmIChsZW4gPiBzdGF0ZS53Yml0cykgewogICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgd2luZG93IHNpemUn" + "OwogICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc3RhdGUuZG1heCA9IDEgPDwgbGVuOwogICAgICAvL1RyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICB6bGli" + "IGhlYWRlciBva1xuIikpOwogICAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPSAxLyphZGxlcjMyKDBMLCBaX05VTEwsIDApKi87CiAgICAgIHN0YXRlLm1vZGUgPSBob2xkICYgMHgyMDAgPyBESUNUSUQg" + "OiBUWVBFOwogICAgICAvLz09PSBJTklUQklUUygpOwogICAgICBob2xkID0gMDsKICAgICAgYml0cyA9IDA7CiAgICAgIC8vPT09Ly8KICAgICAgYnJlYWs7CiAgICBjYXNlIEZMQUdTOgogICAgICAvLz09PSBO" + "RUVEQklUUygxNik7ICovCiAgICAgIHdoaWxlIChiaXRzIDwgMTYpIHsKICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH0KICAgICAgICBoYXZlLS07CiAgICAgICAgaG9sZCArPSBp" + "bnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgYml0cyArPSA4OwogICAgICB9CiAgICAgIC8vPT09Ly8KICAgICAgc3RhdGUuZmxhZ3MgPSBob2xkOwogICAgICBpZiAoKHN0YXRlLmZsYWdzICYgMHhmZikg" + "IT09IFpfREVGTEFURUQpIHsKICAgICAgICBzdHJtLm1zZyA9ICd1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCc7CiAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICBicmVhazsKICAgICAgfQogICAg" + "ICBpZiAoc3RhdGUuZmxhZ3MgJiAweGUwMDApIHsKICAgICAgICBzdHJtLm1zZyA9ICd1bmtub3duIGhlYWRlciBmbGFncyBzZXQnOwogICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgYnJlYWs7CiAg" + "ICAgIH0KICAgICAgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICBzdGF0ZS5oZWFkLnRleHQgPSAoKGhvbGQgPj4gOCkgJiAxKTsKICAgICAgfQogICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDAyMDApIHsKICAg" + "ICAgICAvLz09PSBDUkMyKHN0YXRlLmNoZWNrLCBob2xkKTsKICAgICAgICBoYnVmWzBdID0gaG9sZCAmIDB4ZmY7CiAgICAgICAgaGJ1ZlsxXSA9IChob2xkID4+PiA4KSAmIDB4ZmY7CiAgICAgICAgc3RhdGUu" + "Y2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVjaywgaGJ1ZiwgMiwgMCk7CiAgICAgICAgLy89PT0vLwogICAgICB9CiAgICAgIC8vPT09IElOSVRCSVRTKCk7CiAgICAgIGhvbGQgPSAwOwogICAgICBiaXRzID0gMDsK" + "ICAgICAgLy89PT0vLwogICAgICBzdGF0ZS5tb2RlID0gVElNRTsKICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLwogICAgY2FzZSBUSU1FOgogICAgICAvLz09PSBORUVEQklUUygzMik7ICovCiAgICAgIHdoaWxl" + "IChiaXRzIDwgMzIpIHsKICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH0KICAgICAgICBoYXZlLS07CiAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAg" + "ICAgYml0cyArPSA4OwogICAgICB9CiAgICAgIC8vPT09Ly8KICAgICAgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICBzdGF0ZS5oZWFkLnRpbWUgPSBob2xkOwogICAgICB9CiAgICAgIGlmIChzdGF0ZS5mbGFn" + "cyAmIDB4MDIwMCkgewogICAgICAgIC8vPT09IENSQzQoc3RhdGUuY2hlY2ssIGhvbGQpCiAgICAgICAgaGJ1ZlswXSA9IGhvbGQgJiAweGZmOwogICAgICAgIGhidWZbMV0gPSAoaG9sZCA+Pj4gOCkgJiAweGZm" + "OwogICAgICAgIGhidWZbMl0gPSAoaG9sZCA+Pj4gMTYpICYgMHhmZjsKICAgICAgICBoYnVmWzNdID0gKGhvbGQgPj4+IDI0KSAmIDB4ZmY7CiAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVj" + "aywgaGJ1ZiwgNCwgMCk7CiAgICAgICAgLy89PT0KICAgICAgfQogICAgICAvLz09PSBJTklUQklUUygpOwogICAgICBob2xkID0gMDsKICAgICAgYml0cyA9IDA7CiAgICAgIC8vPT09Ly8KICAgICAgc3RhdGUu" + "bW9kZSA9IE9TOwogICAgICAvKiBmYWxscyB0aHJvdWdoICovCiAgICBjYXNlIE9TOgogICAgICAvLz09PSBORUVEQklUUygxNik7ICovCiAgICAgIHdoaWxlIChiaXRzIDwgMTYpIHsKICAgICAgICBpZiAoaGF2" + "ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH0KICAgICAgICBoYXZlLS07CiAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgYml0cyArPSA4OwogICAgICB9CiAgICAgIC8v" + "PT09Ly8KICAgICAgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICBzdGF0ZS5oZWFkLnhmbGFncyA9IChob2xkICYgMHhmZik7CiAgICAgICAgc3RhdGUuaGVhZC5vcyA9IChob2xkID4+IDgpOwogICAgICB9CiAg" + "ICAgIGlmIChzdGF0ZS5mbGFncyAmIDB4MDIwMCkgewogICAgICAgIC8vPT09IENSQzIoc3RhdGUuY2hlY2ssIGhvbGQpOwogICAgICAgIGhidWZbMF0gPSBob2xkICYgMHhmZjsKICAgICAgICBoYnVmWzFdID0g" + "KGhvbGQgPj4+IDgpICYgMHhmZjsKICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyKHN0YXRlLmNoZWNrLCBoYnVmLCAyLCAwKTsKICAgICAgICAvLz09PS8vCiAgICAgIH0KICAgICAgLy89PT0gSU5JVEJJVFMo" + "KTsKICAgICAgaG9sZCA9IDA7CiAgICAgIGJpdHMgPSAwOwogICAgICAvLz09PS8vCiAgICAgIHN0YXRlLm1vZGUgPSBFWExFTjsKICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLwogICAgY2FzZSBFWExFTjoKICAg" + "ICAgaWYgKHN0YXRlLmZsYWdzICYgMHgwNDAwKSB7CiAgICAgICAgLy89PT0gTkVFREJJVFMoMTYpOyAqLwogICAgICAgIHdoaWxlIChiaXRzIDwgMTYpIHsKICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJy" + "ZWFrIGluZl9sZWF2ZTsgfQogICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgfQogICAgICAgIC8vPT09" + "Ly8KICAgICAgICBzdGF0ZS5sZW5ndGggPSBob2xkOwogICAgICAgIGlmIChzdGF0ZS5oZWFkKSB7CiAgICAgICAgICBzdGF0ZS5oZWFkLmV4dHJhX2xlbiA9IGhvbGQ7CiAgICAgICAgfQogICAgICAgIGlmIChz" + "dGF0ZS5mbGFncyAmIDB4MDIwMCkgewogICAgICAgICAgLy89PT0gQ1JDMihzdGF0ZS5jaGVjaywgaG9sZCk7CiAgICAgICAgICBoYnVmWzBdID0gaG9sZCAmIDB4ZmY7CiAgICAgICAgICBoYnVmWzFdID0gKGhv" + "bGQgPj4+IDgpICYgMHhmZjsKICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGhidWYsIDIsIDApOwogICAgICAgICAgLy89PT0vLwogICAgICAgIH0KICAgICAgICAvLz09PSBJTklU" + "QklUUygpOwogICAgICAgIGhvbGQgPSAwOwogICAgICAgIGJpdHMgPSAwOwogICAgICAgIC8vPT09Ly8KICAgICAgfQogICAgICBlbHNlIGlmIChzdGF0ZS5oZWFkKSB7CiAgICAgICAgc3RhdGUuaGVhZC5leHRy" + "YSA9IG51bGwvKlpfTlVMTCovOwogICAgICB9CiAgICAgIHN0YXRlLm1vZGUgPSBFWFRSQTsKICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLwogICAgY2FzZSBFWFRSQToKICAgICAgaWYgKHN0YXRlLmZsYWdzICYg" + "MHgwNDAwKSB7CiAgICAgICAgY29weSA9IHN0YXRlLmxlbmd0aDsKICAgICAgICBpZiAoY29weSA+IGhhdmUpIHsgY29weSA9IGhhdmU7IH0KICAgICAgICBpZiAoY29weSkgewogICAgICAgICAgaWYgKHN0YXRl" + "LmhlYWQpIHsKICAgICAgICAgICAgbGVuID0gc3RhdGUuaGVhZC5leHRyYV9sZW4gLSBzdGF0ZS5sZW5ndGg7CiAgICAgICAgICAgIGlmICghc3RhdGUuaGVhZC5leHRyYSkgewogICAgICAgICAgICAgIC8vIFVz" + "ZSB1bnR5cGVkIGFycmF5IGZvciBtb3JlIGNvbnZlbmllbmQgcHJvY2Vzc2luZyBsYXRlcgogICAgICAgICAgICAgIHN0YXRlLmhlYWQuZXh0cmEgPSBuZXcgQXJyYXkoc3RhdGUuaGVhZC5leHRyYV9sZW4pOwog" + "ICAgICAgICAgICB9CiAgICAgICAgICAgIHV0aWxzLmFycmF5U2V0KAogICAgICAgICAgICAgIHN0YXRlLmhlYWQuZXh0cmEsCiAgICAgICAgICAgICAgaW5wdXQsCiAgICAgICAgICAgICAgbmV4dCwKICAgICAg" + "ICAgICAgICAvLyBleHRyYSBmaWVsZCBpcyBsaW1pdGVkIHRvIDY1NTM2IGJ5dGVzCiAgICAgICAgICAgICAgLy8gLSBubyBuZWVkIGZvciBhZGRpdGlvbmFsIHNpemUgY2hlY2sKICAgICAgICAgICAgICBjb3B5" + "LAogICAgICAgICAgICAgIC8qbGVuICsgY29weSA+IHN0YXRlLmhlYWQuZXh0cmFfbWF4IC0gbGVuID8gc3RhdGUuaGVhZC5leHRyYV9tYXggOiBjb3B5LCovCiAgICAgICAgICAgICAgbGVuCiAgICAgICAgICAg" + "ICk7CiAgICAgICAgICAgIC8vem1lbWNweShzdGF0ZS5oZWFkLmV4dHJhICsgbGVuLCBuZXh0LAogICAgICAgICAgICAvLyAgICAgICAgbGVuICsgY29weSA+IHN0YXRlLmhlYWQuZXh0cmFfbWF4ID8KICAgICAg" + "ICAgICAgLy8gICAgICAgIHN0YXRlLmhlYWQuZXh0cmFfbWF4IC0gbGVuIDogY29weSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDAyMDApIHsKICAgICAgICAgICAgc3RhdGUu" + "Y2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVjaywgaW5wdXQsIGNvcHksIG5leHQpOwogICAgICAgICAgfQogICAgICAgICAgaGF2ZSAtPSBjb3B5OwogICAgICAgICAgbmV4dCArPSBjb3B5OwogICAgICAgICAgc3Rh" + "dGUubGVuZ3RoIC09IGNvcHk7CiAgICAgICAgfQogICAgICAgIGlmIChzdGF0ZS5sZW5ndGgpIHsgYnJlYWsgaW5mX2xlYXZlOyB9CiAgICAgIH0KICAgICAgc3RhdGUubGVuZ3RoID0gMDsKICAgICAgc3RhdGUu" + "bW9kZSA9IE5BTUU7CiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi8KICAgIGNhc2UgTkFNRToKICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHgwODAwKSB7CiAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsg" + "aW5mX2xlYXZlOyB9CiAgICAgICAgY29weSA9IDA7CiAgICAgICAgZG8gewogICAgICAgICAgLy8gVE9ETzogMiBvciAxIGJ5dGVzPwogICAgICAgICAgbGVuID0gaW5wdXRbbmV4dCArIGNvcHkrK107CiAgICAg" + "ICAgICAvKiB1c2UgY29uc3RhbnQgbGltaXQgYmVjYXVzZSBpbiBqcyB3ZSBzaG91bGQgbm90IHByZWFsbG9jYXRlIG1lbW9yeSAqLwogICAgICAgICAgaWYgKHN0YXRlLmhlYWQgJiYgbGVuICYmCiAgICAgICAg" + "ICAgICAgKHN0YXRlLmxlbmd0aCA8IDY1NTM2IC8qc3RhdGUuaGVhZC5uYW1lX21heCovKSkgewogICAgICAgICAgICBzdGF0ZS5oZWFkLm5hbWUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShsZW4pOwogICAgICAg" + "ICAgfQogICAgICAgIH0gd2hpbGUgKGxlbiAmJiBjb3B5IDwgaGF2ZSk7CgogICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDB4MDIwMCkgewogICAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVj" + "aywgaW5wdXQsIGNvcHksIG5leHQpOwogICAgICAgIH0KICAgICAgICBoYXZlIC09IGNvcHk7CiAgICAgICAgbmV4dCArPSBjb3B5OwogICAgICAgIGlmIChsZW4pIHsgYnJlYWsgaW5mX2xlYXZlOyB9CiAgICAg" + "IH0KICAgICAgZWxzZSBpZiAoc3RhdGUuaGVhZCkgewogICAgICAgIHN0YXRlLmhlYWQubmFtZSA9IG51bGw7CiAgICAgIH0KICAgICAgc3RhdGUubGVuZ3RoID0gMDsKICAgICAgc3RhdGUubW9kZSA9IENPTU1F" + "TlQ7CiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi8KICAgIGNhc2UgQ09NTUVOVDoKICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHgxMDAwKSB7CiAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xl" + "YXZlOyB9CiAgICAgICAgY29weSA9IDA7CiAgICAgICAgZG8gewogICAgICAgICAgbGVuID0gaW5wdXRbbmV4dCArIGNvcHkrK107CiAgICAgICAgICAvKiB1c2UgY29uc3RhbnQgbGltaXQgYmVjYXVzZSBpbiBq" + "cyB3ZSBzaG91bGQgbm90IHByZWFsbG9jYXRlIG1lbW9yeSAqLwogICAgICAgICAgaWYgKHN0YXRlLmhlYWQgJiYgbGVuICYmCiAgICAgICAgICAgICAgKHN0YXRlLmxlbmd0aCA8IDY1NTM2IC8qc3RhdGUuaGVh" + "ZC5jb21tX21heCovKSkgewogICAgICAgICAgICBzdGF0ZS5oZWFkLmNvbW1lbnQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShsZW4pOwogICAgICAgICAgfQogICAgICAgIH0gd2hpbGUgKGxlbiAmJiBjb3B5IDwg" + "aGF2ZSk7CiAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHgwMjAwKSB7CiAgICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyKHN0YXRlLmNoZWNrLCBpbnB1dCwgY29weSwgbmV4dCk7CiAgICAgICAgfQogICAg" + "ICAgIGhhdmUgLT0gY29weTsKICAgICAgICBuZXh0ICs9IGNvcHk7CiAgICAgICAgaWYgKGxlbikgeyBicmVhayBpbmZfbGVhdmU7IH0KICAgICAgfQogICAgICBlbHNlIGlmIChzdGF0ZS5oZWFkKSB7CiAgICAg" + "ICAgc3RhdGUuaGVhZC5jb21tZW50ID0gbnVsbDsKICAgICAgfQogICAgICBzdGF0ZS5tb2RlID0gSENSQzsKICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLwogICAgY2FzZSBIQ1JDOgogICAgICBpZiAoc3RhdGUu" + "ZmxhZ3MgJiAweDAyMDApIHsKICAgICAgICAvLz09PSBORUVEQklUUygxNik7ICovCiAgICAgICAgd2hpbGUgKGJpdHMgPCAxNikgewogICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZl" + "OyB9CiAgICAgICAgICBoYXZlLS07CiAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICB9CiAgICAgICAgLy89PT0vLwogICAgICAgIGlm" + "IChob2xkICE9PSAoc3RhdGUuY2hlY2sgJiAweGZmZmYpKSB7CiAgICAgICAgICBzdHJtLm1zZyA9ICdoZWFkZXIgY3JjIG1pc21hdGNoJzsKICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICBi" + "cmVhazsKICAgICAgICB9CiAgICAgICAgLy89PT0gSU5JVEJJVFMoKTsKICAgICAgICBob2xkID0gMDsKICAgICAgICBiaXRzID0gMDsKICAgICAgICAvLz09PS8vCiAgICAgIH0KICAgICAgaWYgKHN0YXRlLmhl" + "YWQpIHsKICAgICAgICBzdGF0ZS5oZWFkLmhjcmMgPSAoKHN0YXRlLmZsYWdzID4+IDkpICYgMSk7CiAgICAgICAgc3RhdGUuaGVhZC5kb25lID0gdHJ1ZTsKICAgICAgfQogICAgICBzdHJtLmFkbGVyID0gc3Rh" + "dGUuY2hlY2sgPSAwOwogICAgICBzdGF0ZS5tb2RlID0gVFlQRTsKICAgICAgYnJlYWs7CiAgICBjYXNlIERJQ1RJRDoKICAgICAgLy89PT0gTkVFREJJVFMoMzIpOyAqLwogICAgICB3aGlsZSAoYml0cyA8IDMy" + "KSB7CiAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9CiAgICAgICAgaGF2ZS0tOwogICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgIGJpdHMgKz0g" + "ODsKICAgICAgfQogICAgICAvLz09PS8vCiAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9IHpzd2FwMzIoaG9sZCk7CiAgICAgIC8vPT09IElOSVRCSVRTKCk7CiAgICAgIGhvbGQgPSAwOwogICAgICBi" + "aXRzID0gMDsKICAgICAgLy89PT0vLwogICAgICBzdGF0ZS5tb2RlID0gRElDVDsKICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLwogICAgY2FzZSBESUNUOgogICAgICBpZiAoc3RhdGUuaGF2ZWRpY3QgPT09IDAp" + "IHsKICAgICAgICAvLy0tLSBSRVNUT1JFKCkgLS0tCiAgICAgICAgc3RybS5uZXh0X291dCA9IHB1dDsKICAgICAgICBzdHJtLmF2YWlsX291dCA9IGxlZnQ7CiAgICAgICAgc3RybS5uZXh0X2luID0gbmV4dDsK" + "ICAgICAgICBzdHJtLmF2YWlsX2luID0gaGF2ZTsKICAgICAgICBzdGF0ZS5ob2xkID0gaG9sZDsKICAgICAgICBzdGF0ZS5iaXRzID0gYml0czsKICAgICAgICAvLy0tLQogICAgICAgIHJldHVybiBaX05FRURf" + "RElDVDsKICAgICAgfQogICAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPSAxLyphZGxlcjMyKDBMLCBaX05VTEwsIDApKi87CiAgICAgIHN0YXRlLm1vZGUgPSBUWVBFOwogICAgICAvKiBmYWxscyB0aHJv" + "dWdoICovCiAgICBjYXNlIFRZUEU6CiAgICAgIGlmIChmbHVzaCA9PT0gWl9CTE9DSyB8fCBmbHVzaCA9PT0gWl9UUkVFUykgeyBicmVhayBpbmZfbGVhdmU7IH0KICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLwog" + "ICAgY2FzZSBUWVBFRE86CiAgICAgIGlmIChzdGF0ZS5sYXN0KSB7CiAgICAgICAgLy8tLS0gQllURUJJVFMoKSAtLS0vLwogICAgICAgIGhvbGQgPj4+PSBiaXRzICYgNzsKICAgICAgICBiaXRzIC09IGJpdHMg" + "JiA3OwogICAgICAgIC8vLS0tLy8KICAgICAgICBzdGF0ZS5tb2RlID0gQ0hFQ0s7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgLy89PT0gTkVFREJJVFMoMyk7ICovCiAgICAgIHdoaWxlIChiaXRzIDwg" + "MykgewogICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfQogICAgICAgIGhhdmUtLTsKICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICBiaXRzICs9" + "IDg7CiAgICAgIH0KICAgICAgLy89PT0vLwogICAgICBzdGF0ZS5sYXN0ID0gKGhvbGQgJiAweDAxKS8qQklUUygxKSovOwogICAgICAvLy0tLSBEUk9QQklUUygxKSAtLS0vLwogICAgICBob2xkID4+Pj0gMTsK" + "ICAgICAgYml0cyAtPSAxOwogICAgICAvLy0tLS8vCgogICAgICBzd2l0Y2ggKChob2xkICYgMHgwMykvKkJJVFMoMikqLykgewogICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBz" + "dG9yZWQgYmxvY2sgKi8KICAgICAgICAvL1RyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICAgIHN0b3JlZCBibG9jayVzXG4iLAogICAgICAgIC8vICAgICAgICBzdGF0ZS5sYXN0ID8gIiAobGFzdCkiIDogIiIp" + "KTsKICAgICAgICBzdGF0ZS5tb2RlID0gU1RPUkVEOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmaXhlZCBibG9jayAqLwogICAgICAgIGZpeGVk" + "dGFibGVzKHN0YXRlKTsKICAgICAgICAvL1RyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICAgIGZpeGVkIGNvZGVzIGJsb2NrJXNcbiIsCiAgICAgICAgLy8gICAgICAgIHN0YXRlLmxhc3QgPyAiIChsYXN0KSIg" + "OiAiIikpOwogICAgICAgIHN0YXRlLm1vZGUgPSBMRU5fOyAgICAgICAgICAgICAvKiBkZWNvZGUgY29kZXMgKi8KICAgICAgICBpZiAoZmx1c2ggPT09IFpfVFJFRVMpIHsKICAgICAgICAgIC8vLS0tIERST1BC" + "SVRTKDIpIC0tLS8vCiAgICAgICAgICBob2xkID4+Pj0gMjsKICAgICAgICAgIGJpdHMgLT0gMjsKICAgICAgICAgIC8vLS0tLy8KICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICB9CiAgICAgICAg" + "YnJlYWs7CiAgICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGR5bmFtaWMgYmxvY2sgKi8KICAgICAgICAvL1RyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICAgIGR5bmFtaWMgY29k" + "ZXMgYmxvY2slc1xuIiwKICAgICAgICAvLyAgICAgICAgc3RhdGUubGFzdCA/ICIgKGxhc3QpIiA6ICIiKSk7CiAgICAgICAgc3RhdGUubW9kZSA9IFRBQkxFOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDM6" + "CiAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBibG9jayB0eXBlJzsKICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICB9CiAgICAgIC8vLS0tIERST1BCSVRTKDIpIC0tLS8vCiAgICAgIGhvbGQgPj4+" + "PSAyOwogICAgICBiaXRzIC09IDI7CiAgICAgIC8vLS0tLy8KICAgICAgYnJlYWs7CiAgICBjYXNlIFNUT1JFRDoKICAgICAgLy8tLS0gQllURUJJVFMoKSAtLS0vLyAvKiBnbyB0byBieXRlIGJvdW5kYXJ5ICov" + "CiAgICAgIGhvbGQgPj4+PSBiaXRzICYgNzsKICAgICAgYml0cyAtPSBiaXRzICYgNzsKICAgICAgLy8tLS0vLwogICAgICAvLz09PSBORUVEQklUUygzMik7ICovCiAgICAgIHdoaWxlIChiaXRzIDwgMzIpIHsK" + "ICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH0KICAgICAgICBoYXZlLS07CiAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgYml0cyArPSA4Owog" + "ICAgICB9CiAgICAgIC8vPT09Ly8KICAgICAgaWYgKChob2xkICYgMHhmZmZmKSAhPT0gKChob2xkID4+PiAxNikgXiAweGZmZmYpKSB7CiAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBzdG9yZWQgYmxvY2sg" + "bGVuZ3Rocyc7CiAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzdGF0ZS5sZW5ndGggPSBob2xkICYgMHhmZmZmOwogICAgICAvL1RyYWNldigoc3RkZXJyLCAi" + "aW5mbGF0ZTogICAgICAgc3RvcmVkIGxlbmd0aCAldVxuIiwKICAgICAgLy8gICAgICAgIHN0YXRlLmxlbmd0aCkpOwogICAgICAvLz09PSBJTklUQklUUygpOwogICAgICBob2xkID0gMDsKICAgICAgYml0cyA9" + "IDA7CiAgICAgIC8vPT09Ly8KICAgICAgc3RhdGUubW9kZSA9IENPUFlfOwogICAgICBpZiAoZmx1c2ggPT09IFpfVFJFRVMpIHsgYnJlYWsgaW5mX2xlYXZlOyB9CiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi8K" + "ICAgIGNhc2UgQ09QWV86CiAgICAgIHN0YXRlLm1vZGUgPSBDT1BZOwogICAgICAvKiBmYWxscyB0aHJvdWdoICovCiAgICBjYXNlIENPUFk6CiAgICAgIGNvcHkgPSBzdGF0ZS5sZW5ndGg7CiAgICAgIGlmIChj" + "b3B5KSB7CiAgICAgICAgaWYgKGNvcHkgPiBoYXZlKSB7IGNvcHkgPSBoYXZlOyB9CiAgICAgICAgaWYgKGNvcHkgPiBsZWZ0KSB7IGNvcHkgPSBsZWZ0OyB9CiAgICAgICAgaWYgKGNvcHkgPT09IDApIHsgYnJl" + "YWsgaW5mX2xlYXZlOyB9CiAgICAgICAgLy8tLS0gem1lbWNweShwdXQsIG5leHQsIGNvcHkpOyAtLS0KICAgICAgICB1dGlscy5hcnJheVNldChvdXRwdXQsIGlucHV0LCBuZXh0LCBjb3B5LCBwdXQpOwogICAg" + "ICAgIC8vLS0tLy8KICAgICAgICBoYXZlIC09IGNvcHk7CiAgICAgICAgbmV4dCArPSBjb3B5OwogICAgICAgIGxlZnQgLT0gY29weTsKICAgICAgICBwdXQgKz0gY29weTsKICAgICAgICBzdGF0ZS5sZW5ndGgg" + "LT0gY29weTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICAvL1RyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICAgICAgc3RvcmVkIGVuZFxuIikpOwogICAgICBzdGF0ZS5tb2RlID0gVFlQRTsKICAgICAg" + "YnJlYWs7CiAgICBjYXNlIFRBQkxFOgogICAgICAvLz09PSBORUVEQklUUygxNCk7ICovCiAgICAgIHdoaWxlIChiaXRzIDwgMTQpIHsKICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7" + "IH0KICAgICAgICBoYXZlLS07CiAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgYml0cyArPSA4OwogICAgICB9CiAgICAgIC8vPT09Ly8KICAgICAgc3RhdGUubmxlbiA9ICho" + "b2xkICYgMHgxZikvKkJJVFMoNSkqLyArIDI1NzsKICAgICAgLy8tLS0gRFJPUEJJVFMoNSkgLS0tLy8KICAgICAgaG9sZCA+Pj49IDU7CiAgICAgIGJpdHMgLT0gNTsKICAgICAgLy8tLS0vLwogICAgICBzdGF0" + "ZS5uZGlzdCA9IChob2xkICYgMHgxZikvKkJJVFMoNSkqLyArIDE7CiAgICAgIC8vLS0tIERST1BCSVRTKDUpIC0tLS8vCiAgICAgIGhvbGQgPj4+PSA1OwogICAgICBiaXRzIC09IDU7CiAgICAgIC8vLS0tLy8K" + "ICAgICAgc3RhdGUubmNvZGUgPSAoaG9sZCAmIDB4MGYpLypCSVRTKDQpKi8gKyA0OwogICAgICAvLy0tLSBEUk9QQklUUyg0KSAtLS0vLwogICAgICBob2xkID4+Pj0gNDsKICAgICAgYml0cyAtPSA0OwogICAg" + "ICAvLy0tLS8vCi8vI2lmbmRlZiBQS1pJUF9CVUdfV09SS0FST1VORAogICAgICBpZiAoc3RhdGUubmxlbiA+IDI4NiB8fCBzdGF0ZS5uZGlzdCA+IDMwKSB7CiAgICAgICAgc3RybS5tc2cgPSAndG9vIG1hbnkg" + "bGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMnOwogICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KLy8jZW5kaWYKICAgICAgLy9UcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6" + "ICAgICAgIHRhYmxlIHNpemVzIG9rXG4iKSk7CiAgICAgIHN0YXRlLmhhdmUgPSAwOwogICAgICBzdGF0ZS5tb2RlID0gTEVOTEVOUzsKICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLwogICAgY2FzZSBMRU5MRU5T" + "OgogICAgICB3aGlsZSAoc3RhdGUuaGF2ZSA8IHN0YXRlLm5jb2RlKSB7CiAgICAgICAgLy89PT0gTkVFREJJVFMoMyk7CiAgICAgICAgd2hpbGUgKGJpdHMgPCAzKSB7CiAgICAgICAgICBpZiAoaGF2ZSA9PT0g" + "MCkgeyBicmVhayBpbmZfbGVhdmU7IH0KICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgYml0cyArPSA4OwogICAgICAgIH0KICAgICAg" + "ICAvLz09PS8vCiAgICAgICAgc3RhdGUubGVuc1tvcmRlcltzdGF0ZS5oYXZlKytdXSA9IChob2xkICYgMHgwNyk7Ly9CSVRTKDMpOwogICAgICAgIC8vLS0tIERST1BCSVRTKDMpIC0tLS8vCiAgICAgICAgaG9s" + "ZCA+Pj49IDM7CiAgICAgICAgYml0cyAtPSAzOwogICAgICAgIC8vLS0tLy8KICAgICAgfQogICAgICB3aGlsZSAoc3RhdGUuaGF2ZSA8IDE5KSB7CiAgICAgICAgc3RhdGUubGVuc1tvcmRlcltzdGF0ZS5oYXZl" + "KytdXSA9IDA7CiAgICAgIH0KICAgICAgLy8gV2UgaGF2ZSBzZXBhcmF0ZSB0YWJsZXMgJiBubyBwb2ludGVycy4gMiBjb21tZW50ZWQgbGluZXMgYmVsb3cgbm90IG5lZWRlZC4KICAgICAgLy9zdGF0ZS5uZXh0" + "ID0gc3RhdGUuY29kZXM7CiAgICAgIC8vc3RhdGUubGVuY29kZSA9IHN0YXRlLm5leHQ7CiAgICAgIC8vIFN3aXRjaCB0byB1c2UgZHluYW1pYyB0YWJsZQogICAgICBzdGF0ZS5sZW5jb2RlID0gc3RhdGUubGVu" + "ZHluOwogICAgICBzdGF0ZS5sZW5iaXRzID0gNzsKCiAgICAgIG9wdHMgPSB7IGJpdHM6IHN0YXRlLmxlbmJpdHMgfTsKICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShDT0RFUywgc3RhdGUubGVucywgMCwgMTks" + "IHN0YXRlLmxlbmNvZGUsIDAsIHN0YXRlLndvcmssIG9wdHMpOwogICAgICBzdGF0ZS5sZW5iaXRzID0gb3B0cy5iaXRzOwoKICAgICAgaWYgKHJldCkgewogICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgY29k" + "ZSBsZW5ndGhzIHNldCc7CiAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICAvL1RyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICAgICAgY29kZSBsZW5ndGhzIG9r" + "XG4iKSk7CiAgICAgIHN0YXRlLmhhdmUgPSAwOwogICAgICBzdGF0ZS5tb2RlID0gQ09ERUxFTlM7CiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi8KICAgIGNhc2UgQ09ERUxFTlM6CiAgICAgIHdoaWxlIChzdGF0" + "ZS5oYXZlIDwgc3RhdGUubmxlbiArIHN0YXRlLm5kaXN0KSB7CiAgICAgICAgZm9yICg7OykgewogICAgICAgICAgaGVyZSA9IHN0YXRlLmxlbmNvZGVbaG9sZCAmICgoMSA8PCBzdGF0ZS5sZW5iaXRzKSAtIDEp" + "XTsvKkJJVFMoc3RhdGUubGVuYml0cykqLwogICAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7CiAgICAgICAgICBoZXJlX29wID0gKGhlcmUgPj4+IDE2KSAmIDB4ZmY7CiAgICAgICAgICBoZXJlX3Zh" + "bCA9IGhlcmUgJiAweGZmZmY7CgogICAgICAgICAgaWYgKChoZXJlX2JpdHMpIDw9IGJpdHMpIHsgYnJlYWs7IH0KICAgICAgICAgIC8vLS0tIFBVTExCWVRFKCkgLS0tLy8KICAgICAgICAgIGlmIChoYXZlID09" + "PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfQogICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAvLy0t" + "LS8vCiAgICAgICAgfQogICAgICAgIGlmIChoZXJlX3ZhbCA8IDE2KSB7CiAgICAgICAgICAvLy0tLSBEUk9QQklUUyhoZXJlLmJpdHMpIC0tLS8vCiAgICAgICAgICBob2xkID4+Pj0gaGVyZV9iaXRzOwogICAg" + "ICAgICAgYml0cyAtPSBoZXJlX2JpdHM7CiAgICAgICAgICAvLy0tLS8vCiAgICAgICAgICBzdGF0ZS5sZW5zW3N0YXRlLmhhdmUrK10gPSBoZXJlX3ZhbDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAg" + "ICAgICBpZiAoaGVyZV92YWwgPT09IDE2KSB7CiAgICAgICAgICAgIC8vPT09IE5FRURCSVRTKGhlcmUuYml0cyArIDIpOwogICAgICAgICAgICBuID0gaGVyZV9iaXRzICsgMjsKICAgICAgICAgICAgd2hpbGUg" + "KGJpdHMgPCBuKSB7CiAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9CiAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsr" + "XSA8PCBiaXRzOwogICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLz09PS8vCiAgICAgICAgICAgIC8vLS0tIERST1BCSVRTKGhlcmUuYml0cykgLS0tLy8KICAgICAg" + "ICAgICAgaG9sZCA+Pj49IGhlcmVfYml0czsKICAgICAgICAgICAgYml0cyAtPSBoZXJlX2JpdHM7CiAgICAgICAgICAgIC8vLS0tLy8KICAgICAgICAgICAgaWYgKHN0YXRlLmhhdmUgPT09IDApIHsKICAgICAg" + "ICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0JzsKICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAg" + "ICAgICAgIGxlbiA9IHN0YXRlLmxlbnNbc3RhdGUuaGF2ZSAtIDFdOwogICAgICAgICAgICBjb3B5ID0gMyArIChob2xkICYgMHgwMyk7Ly9CSVRTKDIpOwogICAgICAgICAgICAvLy0tLSBEUk9QQklUUygyKSAt" + "LS0vLwogICAgICAgICAgICBob2xkID4+Pj0gMjsKICAgICAgICAgICAgYml0cyAtPSAyOwogICAgICAgICAgICAvLy0tLS8vCiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChoZXJlX3ZhbCA9PT0gMTcp" + "IHsKICAgICAgICAgICAgLy89PT0gTkVFREJJVFMoaGVyZS5iaXRzICsgMyk7CiAgICAgICAgICAgIG4gPSBoZXJlX2JpdHMgKyAzOwogICAgICAgICAgICB3aGlsZSAoYml0cyA8IG4pIHsKICAgICAgICAgICAg" + "ICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH0KICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAg" + "Yml0cyArPSA4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vPT09Ly8KICAgICAgICAgICAgLy8tLS0gRFJPUEJJVFMoaGVyZS5iaXRzKSAtLS0vLwogICAgICAgICAgICBob2xkID4+Pj0gaGVyZV9iaXRz" + "OwogICAgICAgICAgICBiaXRzIC09IGhlcmVfYml0czsKICAgICAgICAgICAgLy8tLS0vLwogICAgICAgICAgICBsZW4gPSAwOwogICAgICAgICAgICBjb3B5ID0gMyArIChob2xkICYgMHgwNyk7Ly9CSVRTKDMp" + "OwogICAgICAgICAgICAvLy0tLSBEUk9QQklUUygzKSAtLS0vLwogICAgICAgICAgICBob2xkID4+Pj0gMzsKICAgICAgICAgICAgYml0cyAtPSAzOwogICAgICAgICAgICAvLy0tLS8vCiAgICAgICAgICB9CiAg" + "ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgLy89PT0gTkVFREJJVFMoaGVyZS5iaXRzICsgNyk7CiAgICAgICAgICAgIG4gPSBoZXJlX2JpdHMgKyA3OwogICAgICAgICAgICB3aGlsZSAoYml0cyA8IG4pIHsK" + "ICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH0KICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAg" + "ICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vPT09Ly8KICAgICAgICAgICAgLy8tLS0gRFJPUEJJVFMoaGVyZS5iaXRzKSAtLS0vLwogICAgICAgICAgICBob2xkID4+" + "Pj0gaGVyZV9iaXRzOwogICAgICAgICAgICBiaXRzIC09IGhlcmVfYml0czsKICAgICAgICAgICAgLy8tLS0vLwogICAgICAgICAgICBsZW4gPSAwOwogICAgICAgICAgICBjb3B5ID0gMTEgKyAoaG9sZCAmIDB4" + "N2YpOy8vQklUUyg3KTsKICAgICAgICAgICAgLy8tLS0gRFJPUEJJVFMoNykgLS0tLy8KICAgICAgICAgICAgaG9sZCA+Pj49IDc7CiAgICAgICAgICAgIGJpdHMgLT0gNzsKICAgICAgICAgICAgLy8tLS0vLwog" + "ICAgICAgICAgfQogICAgICAgICAgaWYgKHN0YXRlLmhhdmUgKyBjb3B5ID4gc3RhdGUubmxlbiArIHN0YXRlLm5kaXN0KSB7CiAgICAgICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgYml0IGxlbmd0aCByZXBl" + "YXQnOwogICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChjb3B5LS0pIHsKICAgICAgICAgICAgc3RhdGUubGVuc1tzdGF0" + "ZS5oYXZlKytdID0gbGVuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgLyogaGFuZGxlIGVycm9yIGJyZWFrcyBpbiB3aGlsZSAqLwogICAgICBpZiAoc3RhdGUubW9kZSA9PT0gQkFEKSB7" + "IGJyZWFrOyB9CgogICAgICAvKiBjaGVjayBmb3IgZW5kLW9mLWJsb2NrIGNvZGUgKGJldHRlciBoYXZlIG9uZSkgKi8KICAgICAgaWYgKHN0YXRlLmxlbnNbMjU2XSA9PT0gMCkgewogICAgICAgIHN0cm0ubXNn" + "ID0gJ2ludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jayc7CiAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICBicmVhazsKICAgICAgfQoKICAgICAgLyogYnVpbGQgY29kZSB0YWJsZXMg" + "LS0gbm90ZTogZG8gbm90IGNoYW5nZSB0aGUgbGVuYml0cyBvciBkaXN0Yml0cwogICAgICAgICB2YWx1ZXMgaGVyZSAoOSBhbmQgNikgd2l0aG91dCByZWFkaW5nIHRoZSBjb21tZW50cyBpbiBpbmZ0cmVlcy5o" + "CiAgICAgICAgIGNvbmNlcm5pbmcgdGhlIEVOT1VHSCBjb25zdGFudHMsIHdoaWNoIGRlcGVuZCBvbiB0aG9zZSB2YWx1ZXMgKi8KICAgICAgc3RhdGUubGVuYml0cyA9IDk7CgogICAgICBvcHRzID0geyBiaXRz" + "OiBzdGF0ZS5sZW5iaXRzIH07CiAgICAgIHJldCA9IGluZmxhdGVfdGFibGUoTEVOUywgc3RhdGUubGVucywgMCwgc3RhdGUubmxlbiwgc3RhdGUubGVuY29kZSwgMCwgc3RhdGUud29yaywgb3B0cyk7CiAgICAg" + "IC8vIFdlIGhhdmUgc2VwYXJhdGUgdGFibGVzICYgbm8gcG9pbnRlcnMuIDIgY29tbWVudGVkIGxpbmVzIGJlbG93IG5vdCBuZWVkZWQuCiAgICAgIC8vIHN0YXRlLm5leHRfaW5kZXggPSBvcHRzLnRhYmxlX2lu" + "ZGV4OwogICAgICBzdGF0ZS5sZW5iaXRzID0gb3B0cy5iaXRzOwogICAgICAvLyBzdGF0ZS5sZW5jb2RlID0gc3RhdGUubmV4dDsKCiAgICAgIGlmIChyZXQpIHsKICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlk" + "IGxpdGVyYWwvbGVuZ3RocyBzZXQnOwogICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICAgIHN0YXRlLmRpc3RiaXRzID0gNjsKICAgICAgLy9zdGF0ZS5kaXN0Y29k" + "ZS5jb3B5KHN0YXRlLmNvZGVzKTsKICAgICAgLy8gU3dpdGNoIHRvIHVzZSBkeW5hbWljIHRhYmxlCiAgICAgIHN0YXRlLmRpc3Rjb2RlID0gc3RhdGUuZGlzdGR5bjsKICAgICAgb3B0cyA9IHsgYml0czogc3Rh" + "dGUuZGlzdGJpdHMgfTsKICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShESVNUUywgc3RhdGUubGVucywgc3RhdGUubmxlbiwgc3RhdGUubmRpc3QsIHN0YXRlLmRpc3Rjb2RlLCAwLCBzdGF0ZS53b3JrLCBvcHRz" + "KTsKICAgICAgLy8gV2UgaGF2ZSBzZXBhcmF0ZSB0YWJsZXMgJiBubyBwb2ludGVycy4gMiBjb21tZW50ZWQgbGluZXMgYmVsb3cgbm90IG5lZWRlZC4KICAgICAgLy8gc3RhdGUubmV4dF9pbmRleCA9IG9wdHMu" + "dGFibGVfaW5kZXg7CiAgICAgIHN0YXRlLmRpc3RiaXRzID0gb3B0cy5iaXRzOwogICAgICAvLyBzdGF0ZS5kaXN0Y29kZSA9IHN0YXRlLm5leHQ7CgogICAgICBpZiAocmV0KSB7CiAgICAgICAgc3RybS5tc2cg" + "PSAnaW52YWxpZCBkaXN0YW5jZXMgc2V0JzsKICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIC8vVHJhY2V2KChzdGRlcnIsICdpbmZsYXRlOiAgICAgICBjb2Rl" + "cyBva1xuJykpOwogICAgICBzdGF0ZS5tb2RlID0gTEVOXzsKICAgICAgaWYgKGZsdXNoID09PSBaX1RSRUVTKSB7IGJyZWFrIGluZl9sZWF2ZTsgfQogICAgICAvKiBmYWxscyB0aHJvdWdoICovCiAgICBjYXNl" + "IExFTl86CiAgICAgIHN0YXRlLm1vZGUgPSBMRU47CiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi8KICAgIGNhc2UgTEVOOgogICAgICBpZiAoaGF2ZSA+PSA2ICYmIGxlZnQgPj0gMjU4KSB7CiAgICAgICAgLy8t" + "LS0gUkVTVE9SRSgpIC0tLQogICAgICAgIHN0cm0ubmV4dF9vdXQgPSBwdXQ7CiAgICAgICAgc3RybS5hdmFpbF9vdXQgPSBsZWZ0OwogICAgICAgIHN0cm0ubmV4dF9pbiA9IG5leHQ7CiAgICAgICAgc3RybS5h" + "dmFpbF9pbiA9IGhhdmU7CiAgICAgICAgc3RhdGUuaG9sZCA9IGhvbGQ7CiAgICAgICAgc3RhdGUuYml0cyA9IGJpdHM7CiAgICAgICAgLy8tLS0KICAgICAgICBpbmZsYXRlX2Zhc3Qoc3RybSwgX291dCk7CiAg" + "ICAgICAgLy8tLS0gTE9BRCgpIC0tLQogICAgICAgIHB1dCA9IHN0cm0ubmV4dF9vdXQ7CiAgICAgICAgb3V0cHV0ID0gc3RybS5vdXRwdXQ7CiAgICAgICAgbGVmdCA9IHN0cm0uYXZhaWxfb3V0OwogICAgICAg" + "IG5leHQgPSBzdHJtLm5leHRfaW47CiAgICAgICAgaW5wdXQgPSBzdHJtLmlucHV0OwogICAgICAgIGhhdmUgPSBzdHJtLmF2YWlsX2luOwogICAgICAgIGhvbGQgPSBzdGF0ZS5ob2xkOwogICAgICAgIGJpdHMg" + "PSBzdGF0ZS5iaXRzOwogICAgICAgIC8vLS0tCgogICAgICAgIGlmIChzdGF0ZS5tb2RlID09PSBUWVBFKSB7CiAgICAgICAgICBzdGF0ZS5iYWNrID0gLTE7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAg" + "ICB9CiAgICAgIHN0YXRlLmJhY2sgPSAwOwogICAgICBmb3IgKDs7KSB7CiAgICAgICAgaGVyZSA9IHN0YXRlLmxlbmNvZGVbaG9sZCAmICgoMSA8PCBzdGF0ZS5sZW5iaXRzKSAtIDEpXTsgIC8qQklUUyhzdGF0" + "ZS5sZW5iaXRzKSovCiAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7CiAgICAgICAgaGVyZV9vcCA9IChoZXJlID4+PiAxNikgJiAweGZmOwogICAgICAgIGhlcmVfdmFsID0gaGVyZSAmIDB4ZmZmZjsK" + "CiAgICAgICAgaWYgKGhlcmVfYml0cyA8PSBiaXRzKSB7IGJyZWFrOyB9CiAgICAgICAgLy8tLS0gUFVMTEJZVEUoKSAtLS0vLwogICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfQog" + "ICAgICAgIGhhdmUtLTsKICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgLy8tLS0vLwogICAgICB9CiAgICAgIGlmIChoZXJlX29wICYmICho" + "ZXJlX29wICYgMHhmMCkgPT09IDApIHsKICAgICAgICBsYXN0X2JpdHMgPSBoZXJlX2JpdHM7CiAgICAgICAgbGFzdF9vcCA9IGhlcmVfb3A7CiAgICAgICAgbGFzdF92YWwgPSBoZXJlX3ZhbDsKICAgICAgICBm" + "b3IgKDs7KSB7CiAgICAgICAgICBoZXJlID0gc3RhdGUubGVuY29kZVtsYXN0X3ZhbCArCiAgICAgICAgICAgICAgICAgICgoaG9sZCAmICgoMSA8PCAobGFzdF9iaXRzICsgbGFzdF9vcCkpIC0gMSkpLypCSVRT" + "KGxhc3QuYml0cyArIGxhc3Qub3ApKi8gPj4gbGFzdF9iaXRzKV07CiAgICAgICAgICBoZXJlX2JpdHMgPSBoZXJlID4+PiAyNDsKICAgICAgICAgIGhlcmVfb3AgPSAoaGVyZSA+Pj4gMTYpICYgMHhmZjsKICAg" + "ICAgICAgIGhlcmVfdmFsID0gaGVyZSAmIDB4ZmZmZjsKCiAgICAgICAgICBpZiAoKGxhc3RfYml0cyArIGhlcmVfYml0cykgPD0gYml0cykgeyBicmVhazsgfQogICAgICAgICAgLy8tLS0gUFVMTEJZVEUoKSAt" + "LS0vLwogICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9CiAgICAgICAgICBoYXZlLS07CiAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAg" + "IGJpdHMgKz0gODsKICAgICAgICAgIC8vLS0tLy8KICAgICAgICB9CiAgICAgICAgLy8tLS0gRFJPUEJJVFMobGFzdC5iaXRzKSAtLS0vLwogICAgICAgIGhvbGQgPj4+PSBsYXN0X2JpdHM7CiAgICAgICAgYml0" + "cyAtPSBsYXN0X2JpdHM7CiAgICAgICAgLy8tLS0vLwogICAgICAgIHN0YXRlLmJhY2sgKz0gbGFzdF9iaXRzOwogICAgICB9CiAgICAgIC8vLS0tIERST1BCSVRTKGhlcmUuYml0cykgLS0tLy8KICAgICAgaG9s" + "ZCA+Pj49IGhlcmVfYml0czsKICAgICAgYml0cyAtPSBoZXJlX2JpdHM7CiAgICAgIC8vLS0tLy8KICAgICAgc3RhdGUuYmFjayArPSBoZXJlX2JpdHM7CiAgICAgIHN0YXRlLmxlbmd0aCA9IGhlcmVfdmFsOwog" + "ICAgICBpZiAoaGVyZV9vcCA9PT0gMCkgewogICAgICAgIC8vVHJhY2V2digoc3RkZXJyLCBoZXJlLnZhbCA+PSAweDIwICYmIGhlcmUudmFsIDwgMHg3ZiA/CiAgICAgICAgLy8gICAgICAgICJpbmZsYXRlOiAg" + "ICAgICAgIGxpdGVyYWwgJyVjJ1xuIiA6CiAgICAgICAgLy8gICAgICAgICJpbmZsYXRlOiAgICAgICAgIGxpdGVyYWwgMHglMDJ4XG4iLCBoZXJlLnZhbCkpOwogICAgICAgIHN0YXRlLm1vZGUgPSBMSVQ7CiAg" + "ICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgaWYgKGhlcmVfb3AgJiAzMikgewogICAgICAgIC8vVHJhY2V2digoc3RkZXJyLCAiaW5mbGF0ZTogICAgICAgICBlbmQgb2YgYmxvY2tcbiIpKTsKICAgICAgICBz" + "dGF0ZS5iYWNrID0gLTE7CiAgICAgICAgc3RhdGUubW9kZSA9IFRZUEU7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgaWYgKGhlcmVfb3AgJiA2NCkgewogICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQg" + "bGl0ZXJhbC9sZW5ndGggY29kZSc7CiAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzdGF0ZS5leHRyYSA9IGhlcmVfb3AgJiAxNTsKICAgICAgc3RhdGUubW9k" + "ZSA9IExFTkVYVDsKICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLwogICAgY2FzZSBMRU5FWFQ6CiAgICAgIGlmIChzdGF0ZS5leHRyYSkgewogICAgICAgIC8vPT09IE5FRURCSVRTKHN0YXRlLmV4dHJhKTsKICAg" + "ICAgICBuID0gc3RhdGUuZXh0cmE7CiAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7CiAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH0KICAgICAgICAgIGhhdmUtLTsKICAgICAg" + "ICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgYml0cyArPSA4OwogICAgICAgIH0KICAgICAgICAvLz09PS8vCiAgICAgICAgc3RhdGUubGVuZ3RoICs9IGhvbGQgJiAoKDEgPDwg" + "c3RhdGUuZXh0cmEpIC0gMSkvKkJJVFMoc3RhdGUuZXh0cmEpKi87CiAgICAgICAgLy8tLS0gRFJPUEJJVFMoc3RhdGUuZXh0cmEpIC0tLS8vCiAgICAgICAgaG9sZCA+Pj49IHN0YXRlLmV4dHJhOwogICAgICAg" + "IGJpdHMgLT0gc3RhdGUuZXh0cmE7CiAgICAgICAgLy8tLS0vLwogICAgICAgIHN0YXRlLmJhY2sgKz0gc3RhdGUuZXh0cmE7CiAgICAgIH0KICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsICJpbmZsYXRlOiAgICAg" + "ICAgIGxlbmd0aCAldVxuIiwgc3RhdGUubGVuZ3RoKSk7CiAgICAgIHN0YXRlLndhcyA9IHN0YXRlLmxlbmd0aDsKICAgICAgc3RhdGUubW9kZSA9IERJU1Q7CiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi8KICAg" + "IGNhc2UgRElTVDoKICAgICAgZm9yICg7OykgewogICAgICAgIGhlcmUgPSBzdGF0ZS5kaXN0Y29kZVtob2xkICYgKCgxIDw8IHN0YXRlLmRpc3RiaXRzKSAtIDEpXTsvKkJJVFMoc3RhdGUuZGlzdGJpdHMpKi8K" + "ICAgICAgICBoZXJlX2JpdHMgPSBoZXJlID4+PiAyNDsKICAgICAgICBoZXJlX29wID0gKGhlcmUgPj4+IDE2KSAmIDB4ZmY7CiAgICAgICAgaGVyZV92YWwgPSBoZXJlICYgMHhmZmZmOwoKICAgICAgICBpZiAo" + "KGhlcmVfYml0cykgPD0gYml0cykgeyBicmVhazsgfQogICAgICAgIC8vLS0tIFBVTExCWVRFKCkgLS0tLy8KICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH0KICAgICAgICBoYXZl" + "LS07CiAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgYml0cyArPSA4OwogICAgICAgIC8vLS0tLy8KICAgICAgfQogICAgICBpZiAoKGhlcmVfb3AgJiAweGYwKSA9PT0gMCkg" + "ewogICAgICAgIGxhc3RfYml0cyA9IGhlcmVfYml0czsKICAgICAgICBsYXN0X29wID0gaGVyZV9vcDsKICAgICAgICBsYXN0X3ZhbCA9IGhlcmVfdmFsOwogICAgICAgIGZvciAoOzspIHsKICAgICAgICAgIGhl" + "cmUgPSBzdGF0ZS5kaXN0Y29kZVtsYXN0X3ZhbCArCiAgICAgICAgICAgICAgICAgICgoaG9sZCAmICgoMSA8PCAobGFzdF9iaXRzICsgbGFzdF9vcCkpIC0gMSkpLypCSVRTKGxhc3QuYml0cyArIGxhc3Qub3Ap" + "Ki8gPj4gbGFzdF9iaXRzKV07CiAgICAgICAgICBoZXJlX2JpdHMgPSBoZXJlID4+PiAyNDsKICAgICAgICAgIGhlcmVfb3AgPSAoaGVyZSA+Pj4gMTYpICYgMHhmZjsKICAgICAgICAgIGhlcmVfdmFsID0gaGVy" + "ZSAmIDB4ZmZmZjsKCiAgICAgICAgICBpZiAoKGxhc3RfYml0cyArIGhlcmVfYml0cykgPD0gYml0cykgeyBicmVhazsgfQogICAgICAgICAgLy8tLS0gUFVMTEJZVEUoKSAtLS0vLwogICAgICAgICAgaWYgKGhh" + "dmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9CiAgICAgICAgICBoYXZlLS07CiAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAg" + "IC8vLS0tLy8KICAgICAgICB9CiAgICAgICAgLy8tLS0gRFJPUEJJVFMobGFzdC5iaXRzKSAtLS0vLwogICAgICAgIGhvbGQgPj4+PSBsYXN0X2JpdHM7CiAgICAgICAgYml0cyAtPSBsYXN0X2JpdHM7CiAgICAg" + "ICAgLy8tLS0vLwogICAgICAgIHN0YXRlLmJhY2sgKz0gbGFzdF9iaXRzOwogICAgICB9CiAgICAgIC8vLS0tIERST1BCSVRTKGhlcmUuYml0cykgLS0tLy8KICAgICAgaG9sZCA+Pj49IGhlcmVfYml0czsKICAg" + "ICAgYml0cyAtPSBoZXJlX2JpdHM7CiAgICAgIC8vLS0tLy8KICAgICAgc3RhdGUuYmFjayArPSBoZXJlX2JpdHM7CiAgICAgIGlmIChoZXJlX29wICYgNjQpIHsKICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlk" + "IGRpc3RhbmNlIGNvZGUnOwogICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc3RhdGUub2Zmc2V0ID0gaGVyZV92YWw7CiAgICAgIHN0YXRlLmV4dHJhID0gKGhl" + "cmVfb3ApICYgMTU7CiAgICAgIHN0YXRlLm1vZGUgPSBESVNURVhUOwogICAgICAvKiBmYWxscyB0aHJvdWdoICovCiAgICBjYXNlIERJU1RFWFQ6CiAgICAgIGlmIChzdGF0ZS5leHRyYSkgewogICAgICAgIC8v" + "PT09IE5FRURCSVRTKHN0YXRlLmV4dHJhKTsKICAgICAgICBuID0gc3RhdGUuZXh0cmE7CiAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7CiAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVh" + "dmU7IH0KICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgYml0cyArPSA4OwogICAgICAgIH0KICAgICAgICAvLz09PS8vCiAgICAgICAg" + "c3RhdGUub2Zmc2V0ICs9IGhvbGQgJiAoKDEgPDwgc3RhdGUuZXh0cmEpIC0gMSkvKkJJVFMoc3RhdGUuZXh0cmEpKi87CiAgICAgICAgLy8tLS0gRFJPUEJJVFMoc3RhdGUuZXh0cmEpIC0tLS8vCiAgICAgICAg" + "aG9sZCA+Pj49IHN0YXRlLmV4dHJhOwogICAgICAgIGJpdHMgLT0gc3RhdGUuZXh0cmE7CiAgICAgICAgLy8tLS0vLwogICAgICAgIHN0YXRlLmJhY2sgKz0gc3RhdGUuZXh0cmE7CiAgICAgIH0KLy8jaWZkZWYg" + "SU5GTEFURV9TVFJJQ1QKICAgICAgaWYgKHN0YXRlLm9mZnNldCA+IHN0YXRlLmRtYXgpIHsKICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayc7CiAgICAgICAgc3RhdGUu" + "bW9kZSA9IEJBRDsKICAgICAgICBicmVhazsKICAgICAgfQovLyNlbmRpZgogICAgICAvL1RyYWNldnYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgICAgZGlzdGFuY2UgJXVcbiIsIHN0YXRlLm9mZnNldCkpOwog" + "ICAgICBzdGF0ZS5tb2RlID0gTUFUQ0g7CiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi8KICAgIGNhc2UgTUFUQ0g6CiAgICAgIGlmIChsZWZ0ID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfQogICAgICBjb3B5" + "ID0gX291dCAtIGxlZnQ7CiAgICAgIGlmIChzdGF0ZS5vZmZzZXQgPiBjb3B5KSB7ICAgICAgICAgLyogY29weSBmcm9tIHdpbmRvdyAqLwogICAgICAgIGNvcHkgPSBzdGF0ZS5vZmZzZXQgLSBjb3B5OwogICAg" + "ICAgIGlmIChjb3B5ID4gc3RhdGUud2hhdmUpIHsKICAgICAgICAgIGlmIChzdGF0ZS5zYW5lKSB7CiAgICAgICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrJzsKICAgICAg" + "ICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9Ci8vICghKSBUaGlzIGJsb2NrIGlzIGRpc2FibGVkIGluIHpsaWIgZGVmYWlsdHMsCi8vIGRvbid0IGVuYWJsZSBp" + "dCBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHkKLy8jaWZkZWYgSU5GTEFURV9BTExPV19JTlZBTElEX0RJU1RBTkNFX1RPT0ZBUl9BUlJSCi8vICAgICAgICAgIFRyYWNlKChzdGRlcnIsICJpbmZsYXRlLmMgdG9v" + "IGZhclxuIikpOwovLyAgICAgICAgICBjb3B5IC09IHN0YXRlLndoYXZlOwovLyAgICAgICAgICBpZiAoY29weSA+IHN0YXRlLmxlbmd0aCkgeyBjb3B5ID0gc3RhdGUubGVuZ3RoOyB9Ci8vICAgICAgICAgIGlm" + "IChjb3B5ID4gbGVmdCkgeyBjb3B5ID0gbGVmdDsgfQovLyAgICAgICAgICBsZWZ0IC09IGNvcHk7Ci8vICAgICAgICAgIHN0YXRlLmxlbmd0aCAtPSBjb3B5OwovLyAgICAgICAgICBkbyB7Ci8vICAgICAgICAg" + "ICAgb3V0cHV0W3B1dCsrXSA9IDA7Ci8vICAgICAgICAgIH0gd2hpbGUgKC0tY29weSk7Ci8vICAgICAgICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHsgc3RhdGUubW9kZSA9IExFTjsgfQovLyAgICAgICAg" + "ICBicmVhazsKLy8jZW5kaWYKICAgICAgICB9CiAgICAgICAgaWYgKGNvcHkgPiBzdGF0ZS53bmV4dCkgewogICAgICAgICAgY29weSAtPSBzdGF0ZS53bmV4dDsKICAgICAgICAgIGZyb20gPSBzdGF0ZS53c2l6" + "ZSAtIGNvcHk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgZnJvbSA9IHN0YXRlLnduZXh0IC0gY29weTsKICAgICAgICB9CiAgICAgICAgaWYgKGNvcHkgPiBzdGF0ZS5sZW5ndGgpIHsgY29w" + "eSA9IHN0YXRlLmxlbmd0aDsgfQogICAgICAgIGZyb21fc291cmNlID0gc3RhdGUud2luZG93OwogICAgICB9CiAgICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvcHkgZnJvbSBv" + "dXRwdXQgKi8KICAgICAgICBmcm9tX3NvdXJjZSA9IG91dHB1dDsKICAgICAgICBmcm9tID0gcHV0IC0gc3RhdGUub2Zmc2V0OwogICAgICAgIGNvcHkgPSBzdGF0ZS5sZW5ndGg7CiAgICAgIH0KICAgICAgaWYg" + "KGNvcHkgPiBsZWZ0KSB7IGNvcHkgPSBsZWZ0OyB9CiAgICAgIGxlZnQgLT0gY29weTsKICAgICAgc3RhdGUubGVuZ3RoIC09IGNvcHk7CiAgICAgIGRvIHsKICAgICAgICBvdXRwdXRbcHV0KytdID0gZnJvbV9z" + "b3VyY2VbZnJvbSsrXTsKICAgICAgfSB3aGlsZSAoLS1jb3B5KTsKICAgICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgeyBzdGF0ZS5tb2RlID0gTEVOOyB9CiAgICAgIGJyZWFrOwogICAgY2FzZSBMSVQ6CiAg" + "ICAgIGlmIChsZWZ0ID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfQogICAgICBvdXRwdXRbcHV0KytdID0gc3RhdGUubGVuZ3RoOwogICAgICBsZWZ0LS07CiAgICAgIHN0YXRlLm1vZGUgPSBMRU47CiAgICAg" + "IGJyZWFrOwogICAgY2FzZSBDSEVDSzoKICAgICAgaWYgKHN0YXRlLndyYXApIHsKICAgICAgICAvLz09PSBORUVEQklUUygzMik7CiAgICAgICAgd2hpbGUgKGJpdHMgPCAzMikgewogICAgICAgICAgaWYgKGhh" + "dmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9CiAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAvLyBVc2UgJ3wnIGluc2RlYWQgb2YgJysnIHRvIG1ha2Ugc3VyZSB0aGF0IHJlc3VsdCBpcyBzaWduZWQK" + "ICAgICAgICAgIGhvbGQgfD0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgYml0cyArPSA4OwogICAgICAgIH0KICAgICAgICAvLz09PS8vCiAgICAgICAgX291dCAtPSBsZWZ0OwogICAgICAgIHN0" + "cm0udG90YWxfb3V0ICs9IF9vdXQ7CiAgICAgICAgc3RhdGUudG90YWwgKz0gX291dDsKICAgICAgICBpZiAoX291dCkgewogICAgICAgICAgc3RybS5hZGxlciA9IHN0YXRlLmNoZWNrID0KICAgICAgICAgICAg" + "ICAvKlVQREFURShzdGF0ZS5jaGVjaywgcHV0IC0gX291dCwgX291dCk7Ki8KICAgICAgICAgICAgICAoc3RhdGUuZmxhZ3MgPyBjcmMzMihzdGF0ZS5jaGVjaywgb3V0cHV0LCBfb3V0LCBwdXQgLSBfb3V0KSA6" + "IGFkbGVyMzIoc3RhdGUuY2hlY2ssIG91dHB1dCwgX291dCwgcHV0IC0gX291dCkpOwoKICAgICAgICB9CiAgICAgICAgX291dCA9IGxlZnQ7CiAgICAgICAgLy8gTkI6IGNyYzMyIHN0b3JlZCBhcyBzaWduZWQg" + "MzItYml0IGludCwgenN3YXAzMiByZXR1cm5zIHNpZ25lZCB0b28KICAgICAgICBpZiAoKHN0YXRlLmZsYWdzID8gaG9sZCA6IHpzd2FwMzIoaG9sZCkpICE9PSBzdGF0ZS5jaGVjaykgewogICAgICAgICAgc3Ry" + "bS5tc2cgPSAnaW5jb3JyZWN0IGRhdGEgY2hlY2snOwogICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICAvLz09PSBJTklUQklUUygpOwogICAgICAg" + "IGhvbGQgPSAwOwogICAgICAgIGJpdHMgPSAwOwogICAgICAgIC8vPT09Ly8KICAgICAgICAvL1RyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICBjaGVjayBtYXRjaGVzIHRyYWlsZXJcbiIpKTsKICAgICAgfQog" + "ICAgICBzdGF0ZS5tb2RlID0gTEVOR1RIOwogICAgICAvKiBmYWxscyB0aHJvdWdoICovCiAgICBjYXNlIExFTkdUSDoKICAgICAgaWYgKHN0YXRlLndyYXAgJiYgc3RhdGUuZmxhZ3MpIHsKICAgICAgICAvLz09" + "PSBORUVEQklUUygzMik7CiAgICAgICAgd2hpbGUgKGJpdHMgPCAzMikgewogICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9CiAgICAgICAgICBoYXZlLS07CiAgICAgICAgICBo" + "b2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICB9CiAgICAgICAgLy89PT0vLwogICAgICAgIGlmIChob2xkICE9PSAoc3RhdGUudG90YWwgJiAweGZmZmZm" + "ZmZmKSkgewogICAgICAgICAgc3RybS5tc2cgPSAnaW5jb3JyZWN0IGxlbmd0aCBjaGVjayc7CiAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIC8v" + "PT09IElOSVRCSVRTKCk7CiAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgYml0cyA9IDA7CiAgICAgICAgLy89PT0vLwogICAgICAgIC8vVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgIGxlbmd0aCBtYXRjaGVz" + "IHRyYWlsZXJcbiIpKTsKICAgICAgfQogICAgICBzdGF0ZS5tb2RlID0gRE9ORTsKICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLwogICAgY2FzZSBET05FOgogICAgICByZXQgPSBaX1NUUkVBTV9FTkQ7CiAgICAg" + "IGJyZWFrIGluZl9sZWF2ZTsKICAgIGNhc2UgQkFEOgogICAgICByZXQgPSBaX0RBVEFfRVJST1I7CiAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgIGNhc2UgTUVNOgogICAgICByZXR1cm4gWl9NRU1fRVJST1I7" + "CiAgICBjYXNlIFNZTkM6CiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi8KICAgIGRlZmF1bHQ6CiAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgIH0KICB9CgogIC8vIGluZl9sZWF2ZSA8LSBoZXJlIGlz" + "IHJlYWwgcGxhY2UgZm9yICJnb3RvIGluZl9sZWF2ZSIsIGVtdWxhdGVkIHZpYSAiYnJlYWsgaW5mX2xlYXZlIgoKICAvKgogICAgIFJldHVybiBmcm9tIGluZmxhdGUoKSwgdXBkYXRpbmcgdGhlIHRvdGFsIGNv" + "dW50cyBhbmQgdGhlIGNoZWNrIHZhbHVlLgogICAgIElmIHRoZXJlIHdhcyBubyBwcm9ncmVzcyBkdXJpbmcgdGhlIGluZmxhdGUoKSBjYWxsLCByZXR1cm4gYSBidWZmZXIKICAgICBlcnJvci4gIENhbGwgdXBk" + "YXRld2luZG93KCkgdG8gY3JlYXRlIGFuZC9vciB1cGRhdGUgdGhlIHdpbmRvdyBzdGF0ZS4KICAgICBOb3RlOiBhIG1lbW9yeSBlcnJvciBmcm9tIGluZmxhdGUoKSBpcyBub24tcmVjb3ZlcmFibGUuCiAgICov" + "CgogIC8vLS0tIFJFU1RPUkUoKSAtLS0KICBzdHJtLm5leHRfb3V0ID0gcHV0OwogIHN0cm0uYXZhaWxfb3V0ID0gbGVmdDsKICBzdHJtLm5leHRfaW4gPSBuZXh0OwogIHN0cm0uYXZhaWxfaW4gPSBoYXZlOwog" + "IHN0YXRlLmhvbGQgPSBob2xkOwogIHN0YXRlLmJpdHMgPSBiaXRzOwogIC8vLS0tCgogIGlmIChzdGF0ZS53c2l6ZSB8fCAoX291dCAhPT0gc3RybS5hdmFpbF9vdXQgJiYgc3RhdGUubW9kZSA8IEJBRCAmJgog" + "ICAgICAgICAgICAgICAgICAgICAgKHN0YXRlLm1vZGUgPCBDSEVDSyB8fCBmbHVzaCAhPT0gWl9GSU5JU0gpKSkgewogICAgaWYgKHVwZGF0ZXdpbmRvdyhzdHJtLCBzdHJtLm91dHB1dCwgc3RybS5uZXh0X291" + "dCwgX291dCAtIHN0cm0uYXZhaWxfb3V0KSkgewogICAgICBzdGF0ZS5tb2RlID0gTUVNOwogICAgICByZXR1cm4gWl9NRU1fRVJST1I7CiAgICB9CiAgfQogIF9pbiAtPSBzdHJtLmF2YWlsX2luOwogIF9vdXQg" + "LT0gc3RybS5hdmFpbF9vdXQ7CiAgc3RybS50b3RhbF9pbiArPSBfaW47CiAgc3RybS50b3RhbF9vdXQgKz0gX291dDsKICBzdGF0ZS50b3RhbCArPSBfb3V0OwogIGlmIChzdGF0ZS53cmFwICYmIF9vdXQpIHsK" + "ICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9IC8qVVBEQVRFKHN0YXRlLmNoZWNrLCBzdHJtLm5leHRfb3V0IC0gX291dCwgX291dCk7Ki8KICAgICAgKHN0YXRlLmZsYWdzID8gY3JjMzIoc3RhdGUuY2hl" + "Y2ssIG91dHB1dCwgX291dCwgc3RybS5uZXh0X291dCAtIF9vdXQpIDogYWRsZXIzMihzdGF0ZS5jaGVjaywgb3V0cHV0LCBfb3V0LCBzdHJtLm5leHRfb3V0IC0gX291dCkpOwogIH0KICBzdHJtLmRhdGFfdHlw" + "ZSA9IHN0YXRlLmJpdHMgKyAoc3RhdGUubGFzdCA/IDY0IDogMCkgKwogICAgICAgICAgICAgICAgICAgIChzdGF0ZS5tb2RlID09PSBUWVBFID8gMTI4IDogMCkgKwogICAgICAgICAgICAgICAgICAgIChzdGF0" + "ZS5tb2RlID09PSBMRU5fIHx8IHN0YXRlLm1vZGUgPT09IENPUFlfID8gMjU2IDogMCk7CiAgaWYgKCgoX2luID09PSAwICYmIF9vdXQgPT09IDApIHx8IGZsdXNoID09PSBaX0ZJTklTSCkgJiYgcmV0ID09PSBa" + "X09LKSB7CiAgICByZXQgPSBaX0JVRl9FUlJPUjsKICB9CiAgcmV0dXJuIHJldDsKfQoKZnVuY3Rpb24gaW5mbGF0ZUVuZChzdHJtKSB7CgogIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSAvKnx8IHN0cm0tPnpm" + "cmVlID09IChmcmVlX2Z1bmMpMCovKSB7CiAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgfQoKICB2YXIgc3RhdGUgPSBzdHJtLnN0YXRlOwogIGlmIChzdGF0ZS53aW5kb3cpIHsKICAgIHN0YXRlLndpbmRv" + "dyA9IG51bGw7CiAgfQogIHN0cm0uc3RhdGUgPSBudWxsOwogIHJldHVybiBaX09LOwp9CgpmdW5jdGlvbiBpbmZsYXRlR2V0SGVhZGVyKHN0cm0sIGhlYWQpIHsKICB2YXIgc3RhdGU7CgogIC8qIGNoZWNrIHN0" + "YXRlICovCiAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7IHJldHVybiBaX1NUUkVBTV9FUlJPUjsgfQogIHN0YXRlID0gc3RybS5zdGF0ZTsKICBpZiAoKHN0YXRlLndyYXAgJiAyKSA9PT0gMCkgeyByZXR1" + "cm4gWl9TVFJFQU1fRVJST1I7IH0KCiAgLyogc2F2ZSBoZWFkZXIgc3RydWN0dXJlICovCiAgc3RhdGUuaGVhZCA9IGhlYWQ7CiAgaGVhZC5kb25lID0gZmFsc2U7CiAgcmV0dXJuIFpfT0s7Cn0KCmZ1bmN0aW9u" + "IGluZmxhdGVTZXREaWN0aW9uYXJ5KHN0cm0sIGRpY3Rpb25hcnkpIHsKICB2YXIgZGljdExlbmd0aCA9IGRpY3Rpb25hcnkubGVuZ3RoOwoKICB2YXIgc3RhdGU7CiAgdmFyIGRpY3RpZDsKICB2YXIgcmV0OwoK" + "ICAvKiBjaGVjayBzdGF0ZSAqLwogIGlmICghc3RybSAvKiA9PSBaX05VTEwgKi8gfHwgIXN0cm0uc3RhdGUgLyogPT0gWl9OVUxMICovKSB7IHJldHVybiBaX1NUUkVBTV9FUlJPUjsgfQogIHN0YXRlID0gc3Ry" + "bS5zdGF0ZTsKCiAgaWYgKHN0YXRlLndyYXAgIT09IDAgJiYgc3RhdGUubW9kZSAhPT0gRElDVCkgewogICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogIH0KCiAgLyogY2hlY2sgZm9yIGNvcnJlY3QgZGljdGlv" + "bmFyeSBpZGVudGlmaWVyICovCiAgaWYgKHN0YXRlLm1vZGUgPT09IERJQ1QpIHsKICAgIGRpY3RpZCA9IDE7IC8qIGFkbGVyMzIoMCwgbnVsbCwgMCkqLwogICAgLyogZGljdGlkID0gYWRsZXIzMihkaWN0aWQs" + "IGRpY3Rpb25hcnksIGRpY3RMZW5ndGgpOyAqLwogICAgZGljdGlkID0gYWRsZXIzMihkaWN0aWQsIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgsIDApOwogICAgaWYgKGRpY3RpZCAhPT0gc3RhdGUuY2hlY2spIHsK" + "ICAgICAgcmV0dXJuIFpfREFUQV9FUlJPUjsKICAgIH0KICB9CiAgLyogY29weSBkaWN0aW9uYXJ5IHRvIHdpbmRvdyB1c2luZyB1cGRhdGV3aW5kb3coKSwgd2hpY2ggd2lsbCBhbWVuZCB0aGUKICAgZXhpc3Rp" + "bmcgZGljdGlvbmFyeSBpZiBhcHByb3ByaWF0ZSAqLwogIHJldCA9IHVwZGF0ZXdpbmRvdyhzdHJtLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoLCBkaWN0TGVuZ3RoKTsKICBpZiAocmV0KSB7CiAgICBzdGF0ZS5t" + "b2RlID0gTUVNOwogICAgcmV0dXJuIFpfTUVNX0VSUk9SOwogIH0KICBzdGF0ZS5oYXZlZGljdCA9IDE7CiAgLy8gVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgIGRpY3Rpb25hcnkgc2V0XG4iKSk7CiAgcmV0" + "dXJuIFpfT0s7Cn0KCmV4cG9ydHMuaW5mbGF0ZVJlc2V0ID0gaW5mbGF0ZVJlc2V0OwpleHBvcnRzLmluZmxhdGVSZXNldDIgPSBpbmZsYXRlUmVzZXQyOwpleHBvcnRzLmluZmxhdGVSZXNldEtlZXAgPSBpbmZs" + "YXRlUmVzZXRLZWVwOwpleHBvcnRzLmluZmxhdGVJbml0ID0gaW5mbGF0ZUluaXQ7CmV4cG9ydHMuaW5mbGF0ZUluaXQyID0gaW5mbGF0ZUluaXQyOwpleHBvcnRzLmluZmxhdGUgPSBpbmZsYXRlOwpleHBvcnRz" + "LmluZmxhdGVFbmQgPSBpbmZsYXRlRW5kOwpleHBvcnRzLmluZmxhdGVHZXRIZWFkZXIgPSBpbmZsYXRlR2V0SGVhZGVyOwpleHBvcnRzLmluZmxhdGVTZXREaWN0aW9uYXJ5ID0gaW5mbGF0ZVNldERpY3Rpb25h" + "cnk7CmV4cG9ydHMuaW5mbGF0ZUluZm8gPSAncGFrbyBpbmZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSc7CgovKiBOb3QgaW1wbGVtZW50ZWQKZXhwb3J0cy5pbmZsYXRlQ29weSA9IGluZmxhdGVDb3B5Owpl" + "eHBvcnRzLmluZmxhdGVHZXREaWN0aW9uYXJ5ID0gaW5mbGF0ZUdldERpY3Rpb25hcnk7CmV4cG9ydHMuaW5mbGF0ZU1hcmsgPSBpbmZsYXRlTWFyazsKZXhwb3J0cy5pbmZsYXRlUHJpbWUgPSBpbmZsYXRlUHJp" + "bWU7CmV4cG9ydHMuaW5mbGF0ZVN5bmMgPSBpbmZsYXRlU3luYzsKZXhwb3J0cy5pbmZsYXRlU3luY1BvaW50ID0gaW5mbGF0ZVN5bmNQb2ludDsKZXhwb3J0cy5pbmZsYXRlVW5kZXJtaW5lID0gaW5mbGF0ZVVu" + "ZGVybWluZTsKKi8KCn0seyIuLi91dGlscy9jb21tb24iOjQxLCIuL2FkbGVyMzIiOjQzLCIuL2NyYzMyIjo0NSwiLi9pbmZmYXN0Ijo0OCwiLi9pbmZ0cmVlcyI6NTB9XSw1MDpbZnVuY3Rpb24ocmVxdWlyZSxt" + "b2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsKCi8vIChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgovLyAoQykgMjAxNC0yMDE3IFZpdGFseSBQdXpyaW4gYW5kIEFuZHJl" + "eSBUdXBpdHNpbgovLwovLyBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAovLyB3YXJyYW50eS4gSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0" + "aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKLy8gYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KLy8KLy8gUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1" + "c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCi8vIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKLy8gZnJlZWx5LCBz" + "dWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgovLwovLyAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAovLyAg" + "IGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCi8vICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVj" + "dCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCi8vICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KLy8gMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBz" + "dWNoLCBhbmQgbXVzdCBub3QgYmUKLy8gICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCi8vIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVk" + "IGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCgp2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscy9jb21tb24nKTsKCnZhciBNQVhCSVRTID0gMTU7CnZhciBFTk9VR0hfTEVOUyA9IDg1MjsKdmFyIEVO" + "T1VHSF9ESVNUUyA9IDU5MjsKLy92YXIgRU5PVUdIID0gKEVOT1VHSF9MRU5TK0VOT1VHSF9ESVNUUyk7Cgp2YXIgQ09ERVMgPSAwOwp2YXIgTEVOUyA9IDE7CnZhciBESVNUUyA9IDI7Cgp2YXIgbGJhc2UgPSBb" + "IC8qIExlbmd0aCBjb2RlcyAyNTcuLjI4NSBiYXNlICovCiAgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMywgMTUsIDE3LCAxOSwgMjMsIDI3LCAzMSwKICAzNSwgNDMsIDUxLCA1OSwgNjcsIDgzLCA5" + "OSwgMTE1LCAxMzEsIDE2MywgMTk1LCAyMjcsIDI1OCwgMCwgMApdOwoKdmFyIGxleHQgPSBbIC8qIExlbmd0aCBjb2RlcyAyNTcuLjI4NSBleHRyYSAqLwogIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAx" + "NiwgMTcsIDE3LCAxNywgMTcsIDE4LCAxOCwgMTgsIDE4LAogIDE5LCAxOSwgMTksIDE5LCAyMCwgMjAsIDIwLCAyMCwgMjEsIDIxLCAyMSwgMjEsIDE2LCA3MiwgNzgKXTsKCnZhciBkYmFzZSA9IFsgLyogRGlz" + "dGFuY2UgY29kZXMgMC4uMjkgYmFzZSAqLwogIDEsIDIsIDMsIDQsIDUsIDcsIDksIDEzLCAxNywgMjUsIDMzLCA0OSwgNjUsIDk3LCAxMjksIDE5MywKICAyNTcsIDM4NSwgNTEzLCA3NjksIDEwMjUsIDE1Mzcs" + "IDIwNDksIDMwNzMsIDQwOTcsIDYxNDUsCiAgODE5MywgMTIyODksIDE2Mzg1LCAyNDU3NywgMCwgMApdOwoKdmFyIGRleHQgPSBbIC8qIERpc3RhbmNlIGNvZGVzIDAuLjI5IGV4dHJhICovCiAgMTYsIDE2LCAx" + "NiwgMTYsIDE3LCAxNywgMTgsIDE4LCAxOSwgMTksIDIwLCAyMCwgMjEsIDIxLCAyMiwgMjIsCiAgMjMsIDIzLCAyNCwgMjQsIDI1LCAyNSwgMjYsIDI2LCAyNywgMjcsCiAgMjgsIDI4LCAyOSwgMjksIDY0LCA2" + "NApdOwoKbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmZsYXRlX3RhYmxlKHR5cGUsIGxlbnMsIGxlbnNfaW5kZXgsIGNvZGVzLCB0YWJsZSwgdGFibGVfaW5kZXgsIHdvcmssIG9wdHMpCnsKICB2YXIgYml0" + "cyA9IG9wdHMuYml0czsKICAgICAgLy9oZXJlID0gb3B0cy5oZXJlOyAvKiB0YWJsZSBlbnRyeSBmb3IgZHVwbGljYXRpb24gKi8KCiAgdmFyIGxlbiA9IDA7ICAgICAgICAgICAgICAgLyogYSBjb2RlJ3MgbGVu" + "Z3RoIGluIGJpdHMgKi8KICB2YXIgc3ltID0gMDsgICAgICAgICAgICAgICAvKiBpbmRleCBvZiBjb2RlIHN5bWJvbHMgKi8KICB2YXIgbWluID0gMCwgbWF4ID0gMDsgICAgICAgICAgLyogbWluaW11bSBhbmQg" + "bWF4aW11bSBjb2RlIGxlbmd0aHMgKi8KICB2YXIgcm9vdCA9IDA7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgaW5kZXggYml0cyBmb3Igcm9vdCB0YWJsZSAqLwogIHZhciBjdXJyID0gMDsgICAgICAgICAg" + "ICAgIC8qIG51bWJlciBvZiBpbmRleCBiaXRzIGZvciBjdXJyZW50IHRhYmxlICovCiAgdmFyIGRyb3AgPSAwOyAgICAgICAgICAgICAgLyogY29kZSBiaXRzIHRvIGRyb3AgZm9yIHN1Yi10YWJsZSAqLwogIHZh" + "ciBsZWZ0ID0gMDsgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHByZWZpeCBjb2RlcyBhdmFpbGFibGUgKi8KICB2YXIgdXNlZCA9IDA7ICAgICAgICAgICAgICAvKiBjb2RlIGVudHJpZXMgaW4gdGFi" + "bGUgdXNlZCAqLwogIHZhciBodWZmID0gMDsgICAgICAgICAgICAgIC8qIEh1ZmZtYW4gY29kZSAqLwogIHZhciBpbmNyOyAgICAgICAgICAgICAgLyogZm9yIGluY3JlbWVudGluZyBjb2RlLCBpbmRleCAqLwog" + "IHZhciBmaWxsOyAgICAgICAgICAgICAgLyogaW5kZXggZm9yIHJlcGxpY2F0aW5nIGVudHJpZXMgKi8KICB2YXIgbG93OyAgICAgICAgICAgICAgIC8qIGxvdyBiaXRzIGZvciBjdXJyZW50IHJvb3QgZW50cnkg" + "Ki8KICB2YXIgbWFzazsgICAgICAgICAgICAgIC8qIG1hc2sgZm9yIGxvdyByb290IGJpdHMgKi8KICB2YXIgbmV4dDsgICAgICAgICAgICAgLyogbmV4dCBhdmFpbGFibGUgc3BhY2UgaW4gdGFibGUgKi8KICB2" + "YXIgYmFzZSA9IG51bGw7ICAgICAvKiBiYXNlIHZhbHVlIHRhYmxlIHRvIHVzZSAqLwogIHZhciBiYXNlX2luZGV4ID0gMDsKLy8gIHZhciBzaG9leHRyYTsgICAgLyogZXh0cmEgYml0cyB0YWJsZSB0byB1c2Ug" + "Ki8KICB2YXIgZW5kOyAgICAgICAgICAgICAgICAgICAgLyogdXNlIGJhc2UgYW5kIGV4dHJhIGZvciBzeW1ib2wgPiBlbmQgKi8KICB2YXIgY291bnQgPSBuZXcgdXRpbHMuQnVmMTYoTUFYQklUUyArIDEpOyAv" + "L1tNQVhCSVRTKzFdOyAgICAvKiBudW1iZXIgb2YgY29kZXMgb2YgZWFjaCBsZW5ndGggKi8KICB2YXIgb2ZmcyA9IG5ldyB1dGlscy5CdWYxNihNQVhCSVRTICsgMSk7IC8vW01BWEJJVFMrMV07ICAgICAvKiBv" + "ZmZzZXRzIGluIHRhYmxlIGZvciBlYWNoIGxlbmd0aCAqLwogIHZhciBleHRyYSA9IG51bGw7CiAgdmFyIGV4dHJhX2luZGV4ID0gMDsKCiAgdmFyIGhlcmVfYml0cywgaGVyZV9vcCwgaGVyZV92YWw7CgogIC8q" + "CiAgIFByb2Nlc3MgYSBzZXQgb2YgY29kZSBsZW5ndGhzIHRvIGNyZWF0ZSBhIGNhbm9uaWNhbCBIdWZmbWFuIGNvZGUuICBUaGUKICAgY29kZSBsZW5ndGhzIGFyZSBsZW5zWzAuLmNvZGVzLTFdLiAgRWFjaCBs" + "ZW5ndGggY29ycmVzcG9uZHMgdG8gdGhlCiAgIHN5bWJvbHMgMC4uY29kZXMtMS4gIFRoZSBIdWZmbWFuIGNvZGUgaXMgZ2VuZXJhdGVkIGJ5IGZpcnN0IHNvcnRpbmcgdGhlCiAgIHN5bWJvbHMgYnkgbGVuZ3Ro" + "IGZyb20gc2hvcnQgdG8gbG9uZywgYW5kIHJldGFpbmluZyB0aGUgc3ltYm9sIG9yZGVyCiAgIGZvciBjb2RlcyB3aXRoIGVxdWFsIGxlbmd0aHMuICBUaGVuIHRoZSBjb2RlIHN0YXJ0cyB3aXRoIGFsbCB6ZXJv" + "IGJpdHMKICAgZm9yIHRoZSBmaXJzdCBjb2RlIG9mIHRoZSBzaG9ydGVzdCBsZW5ndGgsIGFuZCB0aGUgY29kZXMgYXJlIGludGVnZXIKICAgaW5jcmVtZW50cyBmb3IgdGhlIHNhbWUgbGVuZ3RoLCBhbmQgemVy" + "b3MgYXJlIGFwcGVuZGVkIGFzIHRoZSBsZW5ndGgKICAgaW5jcmVhc2VzLiAgRm9yIHRoZSBkZWZsYXRlIGZvcm1hdCwgdGhlc2UgYml0cyBhcmUgc3RvcmVkIGJhY2t3YXJkcwogICBmcm9tIHRoZWlyIG1vcmUg" + "bmF0dXJhbCBpbnRlZ2VyIGluY3JlbWVudCBvcmRlcmluZywgYW5kIHNvIHdoZW4gdGhlCiAgIGRlY29kaW5nIHRhYmxlcyBhcmUgYnVpbHQgaW4gdGhlIGxhcmdlIGxvb3AgYmVsb3csIHRoZSBpbnRlZ2VyIGNv" + "ZGVzCiAgIGFyZSBpbmNyZW1lbnRlZCBiYWNrd2FyZHMuCgogICBUaGlzIHJvdXRpbmUgYXNzdW1lcywgYnV0IGRvZXMgbm90IGNoZWNrLCB0aGF0IGFsbCBvZiB0aGUgZW50cmllcyBpbgogICBsZW5zW10gYXJl" + "IGluIHRoZSByYW5nZSAwLi5NQVhCSVRTLiAgVGhlIGNhbGxlciBtdXN0IGFzc3VyZSB0aGlzLgogICAxLi5NQVhCSVRTIGlzIGludGVycHJldGVkIGFzIHRoYXQgY29kZSBsZW5ndGguICB6ZXJvIG1lYW5zIHRo" + "YXQgdGhhdAogICBzeW1ib2wgZG9lcyBub3Qgb2NjdXIgaW4gdGhpcyBjb2RlLgoKICAgVGhlIGNvZGVzIGFyZSBzb3J0ZWQgYnkgY29tcHV0aW5nIGEgY291bnQgb2YgY29kZXMgZm9yIGVhY2ggbGVuZ3RoLAog" + "ICBjcmVhdGluZyBmcm9tIHRoYXQgYSB0YWJsZSBvZiBzdGFydGluZyBpbmRpY2VzIGZvciBlYWNoIGxlbmd0aCBpbiB0aGUKICAgc29ydGVkIHRhYmxlLCBhbmQgdGhlbiBlbnRlcmluZyB0aGUgc3ltYm9scyBp" + "biBvcmRlciBpbiB0aGUgc29ydGVkCiAgIHRhYmxlLiAgVGhlIHNvcnRlZCB0YWJsZSBpcyB3b3JrW10sIHdpdGggdGhhdCBzcGFjZSBiZWluZyBwcm92aWRlZCBieQogICB0aGUgY2FsbGVyLgoKICAgVGhlIGxl" + "bmd0aCBjb3VudHMgYXJlIHVzZWQgZm9yIG90aGVyIHB1cnBvc2VzIGFzIHdlbGwsIGkuZS4gZmluZGluZwogICB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBsZW5ndGggY29kZXMsIGRldGVybWluaW5nIGlmIHRo" + "ZXJlIGFyZSBhbnkKICAgY29kZXMgYXQgYWxsLCBjaGVja2luZyBmb3IgYSB2YWxpZCBzZXQgb2YgbGVuZ3RocywgYW5kIGxvb2tpbmcgYWhlYWQKICAgYXQgbGVuZ3RoIGNvdW50cyB0byBkZXRlcm1pbmUgc3Vi" + "LXRhYmxlIHNpemVzIHdoZW4gYnVpbGRpbmcgdGhlCiAgIGRlY29kaW5nIHRhYmxlcy4KICAgKi8KCiAgLyogYWNjdW11bGF0ZSBsZW5ndGhzIGZvciBjb2RlcyAoYXNzdW1lcyBsZW5zW10gYWxsIGluIDAuLk1B" + "WEJJVFMpICovCiAgZm9yIChsZW4gPSAwOyBsZW4gPD0gTUFYQklUUzsgbGVuKyspIHsKICAgIGNvdW50W2xlbl0gPSAwOwogIH0KICBmb3IgKHN5bSA9IDA7IHN5bSA8IGNvZGVzOyBzeW0rKykgewogICAgY291" + "bnRbbGVuc1tsZW5zX2luZGV4ICsgc3ltXV0rKzsKICB9CgogIC8qIGJvdW5kIGNvZGUgbGVuZ3RocywgZm9yY2Ugcm9vdCB0byBiZSB3aXRoaW4gY29kZSBsZW5ndGhzICovCiAgcm9vdCA9IGJpdHM7CiAgZm9y" + "IChtYXggPSBNQVhCSVRTOyBtYXggPj0gMTsgbWF4LS0pIHsKICAgIGlmIChjb3VudFttYXhdICE9PSAwKSB7IGJyZWFrOyB9CiAgfQogIGlmIChyb290ID4gbWF4KSB7CiAgICByb290ID0gbWF4OwogIH0KICBp" + "ZiAobWF4ID09PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgLyogbm8gc3ltYm9scyB0byBjb2RlIGF0IGFsbCAqLwogICAgLy90YWJsZS5vcFtvcHRzLnRhYmxlX2luZGV4XSA9IDY0OyAgLy9oZXJlLm9wID0g" + "KHZhciBjaGFyKTY0OyAgICAvKiBpbnZhbGlkIGNvZGUgbWFya2VyICovCiAgICAvL3RhYmxlLmJpdHNbb3B0cy50YWJsZV9pbmRleF0gPSAxOyAgIC8vaGVyZS5iaXRzID0gKHZhciBjaGFyKTE7CiAgICAvL3Rh" + "YmxlLnZhbFtvcHRzLnRhYmxlX2luZGV4KytdID0gMDsgICAvL2hlcmUudmFsID0gKHZhciBzaG9ydCkwOwogICAgdGFibGVbdGFibGVfaW5kZXgrK10gPSAoMSA8PCAyNCkgfCAoNjQgPDwgMTYpIHwgMDsKCgog" + "ICAgLy90YWJsZS5vcFtvcHRzLnRhYmxlX2luZGV4XSA9IDY0OwogICAgLy90YWJsZS5iaXRzW29wdHMudGFibGVfaW5kZXhdID0gMTsKICAgIC8vdGFibGUudmFsW29wdHMudGFibGVfaW5kZXgrK10gPSAwOwog" + "ICAgdGFibGVbdGFibGVfaW5kZXgrK10gPSAoMSA8PCAyNCkgfCAoNjQgPDwgMTYpIHwgMDsKCiAgICBvcHRzLmJpdHMgPSAxOwogICAgcmV0dXJuIDA7ICAgICAvKiBubyBzeW1ib2xzLCBidXQgd2FpdCBmb3Ig" + "ZGVjb2RpbmcgdG8gcmVwb3J0IGVycm9yICovCiAgfQogIGZvciAobWluID0gMTsgbWluIDwgbWF4OyBtaW4rKykgewogICAgaWYgKGNvdW50W21pbl0gIT09IDApIHsgYnJlYWs7IH0KICB9CiAgaWYgKHJvb3Qg" + "PCBtaW4pIHsKICAgIHJvb3QgPSBtaW47CiAgfQoKICAvKiBjaGVjayBmb3IgYW4gb3Zlci1zdWJzY3JpYmVkIG9yIGluY29tcGxldGUgc2V0IG9mIGxlbmd0aHMgKi8KICBsZWZ0ID0gMTsKICBmb3IgKGxlbiA9" + "IDE7IGxlbiA8PSBNQVhCSVRTOyBsZW4rKykgewogICAgbGVmdCA8PD0gMTsKICAgIGxlZnQgLT0gY291bnRbbGVuXTsKICAgIGlmIChsZWZ0IDwgMCkgewogICAgICByZXR1cm4gLTE7CiAgICB9ICAgICAgICAv" + "KiBvdmVyLXN1YnNjcmliZWQgKi8KICB9CiAgaWYgKGxlZnQgPiAwICYmICh0eXBlID09PSBDT0RFUyB8fCBtYXggIT09IDEpKSB7CiAgICByZXR1cm4gLTE7ICAgICAgICAgICAgICAgICAgICAgIC8qIGluY29t" + "cGxldGUgc2V0ICovCiAgfQoKICAvKiBnZW5lcmF0ZSBvZmZzZXRzIGludG8gc3ltYm9sIHRhYmxlIGZvciBlYWNoIGxlbmd0aCBmb3Igc29ydGluZyAqLwogIG9mZnNbMV0gPSAwOwogIGZvciAobGVuID0gMTsg" + "bGVuIDwgTUFYQklUUzsgbGVuKyspIHsKICAgIG9mZnNbbGVuICsgMV0gPSBvZmZzW2xlbl0gKyBjb3VudFtsZW5dOwogIH0KCiAgLyogc29ydCBzeW1ib2xzIGJ5IGxlbmd0aCwgYnkgc3ltYm9sIG9yZGVyIHdp" + "dGhpbiBlYWNoIGxlbmd0aCAqLwogIGZvciAoc3ltID0gMDsgc3ltIDwgY29kZXM7IHN5bSsrKSB7CiAgICBpZiAobGVuc1tsZW5zX2luZGV4ICsgc3ltXSAhPT0gMCkgewogICAgICB3b3JrW29mZnNbbGVuc1ts" + "ZW5zX2luZGV4ICsgc3ltXV0rK10gPSBzeW07CiAgICB9CiAgfQoKICAvKgogICBDcmVhdGUgYW5kIGZpbGwgaW4gZGVjb2RpbmcgdGFibGVzLiAgSW4gdGhpcyBsb29wLCB0aGUgdGFibGUgYmVpbmcKICAgZmls" + "bGVkIGlzIGF0IG5leHQgYW5kIGhhcyBjdXJyIGluZGV4IGJpdHMuICBUaGUgY29kZSBiZWluZyB1c2VkIGlzIGh1ZmYKICAgd2l0aCBsZW5ndGggbGVuLiAgVGhhdCBjb2RlIGlzIGNvbnZlcnRlZCB0byBhbiBp" + "bmRleCBieSBkcm9wcGluZyBkcm9wCiAgIGJpdHMgb2ZmIG9mIHRoZSBib3R0b20uICBGb3IgY29kZXMgd2hlcmUgbGVuIGlzIGxlc3MgdGhhbiBkcm9wICsgY3VyciwKICAgdGhvc2UgdG9wIGRyb3AgKyBjdXJy" + "IC0gbGVuIGJpdHMgYXJlIGluY3JlbWVudGVkIHRocm91Z2ggYWxsIHZhbHVlcyB0bwogICBmaWxsIHRoZSB0YWJsZSB3aXRoIHJlcGxpY2F0ZWQgZW50cmllcy4KCiAgIHJvb3QgaXMgdGhlIG51bWJlciBvZiBp" + "bmRleCBiaXRzIGZvciB0aGUgcm9vdCB0YWJsZS4gIFdoZW4gbGVuIGV4Y2VlZHMKICAgcm9vdCwgc3ViLXRhYmxlcyBhcmUgY3JlYXRlZCBwb2ludGVkIHRvIGJ5IHRoZSByb290IGVudHJ5IHdpdGggYW4gaW5k" + "ZXgKICAgb2YgdGhlIGxvdyByb290IGJpdHMgb2YgaHVmZi4gIFRoaXMgaXMgc2F2ZWQgaW4gbG93IHRvIGNoZWNrIGZvciB3aGVuIGEKICAgbmV3IHN1Yi10YWJsZSBzaG91bGQgYmUgc3RhcnRlZC4gIGRyb3Ag" + "aXMgemVybyB3aGVuIHRoZSByb290IHRhYmxlIGlzCiAgIGJlaW5nIGZpbGxlZCwgYW5kIGRyb3AgaXMgcm9vdCB3aGVuIHN1Yi10YWJsZXMgYXJlIGJlaW5nIGZpbGxlZC4KCiAgIFdoZW4gYSBuZXcgc3ViLXRh" + "YmxlIGlzIG5lZWRlZCwgaXQgaXMgbmVjZXNzYXJ5IHRvIGxvb2sgYWhlYWQgaW4gdGhlCiAgIGNvZGUgbGVuZ3RocyB0byBkZXRlcm1pbmUgd2hhdCBzaXplIHN1Yi10YWJsZSBpcyBuZWVkZWQuICBUaGUgbGVu" + "Z3RoCiAgIGNvdW50cyBhcmUgdXNlZCBmb3IgdGhpcywgYW5kIHNvIGNvdW50W10gaXMgZGVjcmVtZW50ZWQgYXMgY29kZXMgYXJlCiAgIGVudGVyZWQgaW4gdGhlIHRhYmxlcy4KCiAgIHVzZWQga2VlcHMgdHJh" + "Y2sgb2YgaG93IG1hbnkgdGFibGUgZW50cmllcyBoYXZlIGJlZW4gYWxsb2NhdGVkIGZyb20gdGhlCiAgIHByb3ZpZGVkICp0YWJsZSBzcGFjZS4gIEl0IGlzIGNoZWNrZWQgZm9yIExFTlMgYW5kIERJU1QgdGFi" + "bGVzIGFnYWluc3QKICAgdGhlIGNvbnN0YW50cyBFTk9VR0hfTEVOUyBhbmQgRU5PVUdIX0RJU1RTIHRvIGd1YXJkIGFnYWluc3QgY2hhbmdlcyBpbgogICB0aGUgaW5pdGlhbCByb290IHRhYmxlIHNpemUgY29u" + "c3RhbnRzLiAgU2VlIHRoZSBjb21tZW50cyBpbiBpbmZ0cmVlcy5oCiAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgoKICAgc3ltIGluY3JlbWVudHMgdGhyb3VnaCBhbGwgc3ltYm9scywgYW5kIHRoZSBsb29wIHRl" + "cm1pbmF0ZXMgd2hlbgogICBhbGwgY29kZXMgb2YgbGVuZ3RoIG1heCwgaS5lLiBhbGwgY29kZXMsIGhhdmUgYmVlbiBwcm9jZXNzZWQuICBUaGlzCiAgIHJvdXRpbmUgcGVybWl0cyBpbmNvbXBsZXRlIGNvZGVz" + "LCBzbyBhbm90aGVyIGxvb3AgYWZ0ZXIgdGhpcyBvbmUgZmlsbHMKICAgaW4gdGhlIHJlc3Qgb2YgdGhlIGRlY29kaW5nIHRhYmxlcyB3aXRoIGludmFsaWQgY29kZSBtYXJrZXJzLgogICAqLwoKICAvKiBzZXQg" + "dXAgZm9yIGNvZGUgdHlwZSAqLwogIC8vIHBvb3IgbWFuIG9wdGltaXphdGlvbiAtIHVzZSBpZi1lbHNlIGluc3RlYWQgb2Ygc3dpdGNoLAogIC8vIHRvIGF2b2lkIGRlb3B0cyBpbiBvbGQgdjgKICBpZiAodHlw" + "ZSA9PT0gQ09ERVMpIHsKICAgIGJhc2UgPSBleHRyYSA9IHdvcms7ICAgIC8qIGR1bW15IHZhbHVlLS1ub3QgdXNlZCAqLwogICAgZW5kID0gMTk7CgogIH0gZWxzZSBpZiAodHlwZSA9PT0gTEVOUykgewogICAg" + "YmFzZSA9IGxiYXNlOwogICAgYmFzZV9pbmRleCAtPSAyNTc7CiAgICBleHRyYSA9IGxleHQ7CiAgICBleHRyYV9pbmRleCAtPSAyNTc7CiAgICBlbmQgPSAyNTY7CgogIH0gZWxzZSB7ICAgICAgICAgICAgICAg" + "ICAgICAvKiBESVNUUyAqLwogICAgYmFzZSA9IGRiYXNlOwogICAgZXh0cmEgPSBkZXh0OwogICAgZW5kID0gLTE7CiAgfQoKICAvKiBpbml0aWFsaXplIG9wdHMgZm9yIGxvb3AgKi8KICBodWZmID0gMDsgICAg" + "ICAgICAgICAgICAgICAgLyogc3RhcnRpbmcgY29kZSAqLwogIHN5bSA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBzdGFydGluZyBjb2RlIHN5bWJvbCAqLwogIGxlbiA9IG1pbjsgICAgICAgICAgICAgICAg" + "ICAvKiBzdGFydGluZyBjb2RlIGxlbmd0aCAqLwogIG5leHQgPSB0YWJsZV9pbmRleDsgICAgICAgICAgICAgIC8qIGN1cnJlbnQgdGFibGUgdG8gZmlsbCBpbiAqLwogIGN1cnIgPSByb290OyAgICAgICAgICAg" + "ICAgICAvKiBjdXJyZW50IHRhYmxlIGluZGV4IGJpdHMgKi8KICBkcm9wID0gMDsgICAgICAgICAgICAgICAgICAgLyogY3VycmVudCBiaXRzIHRvIGRyb3AgZnJvbSBjb2RlIGZvciBpbmRleCAqLwogIGxvdyA9" + "IC0xOyAgICAgICAgICAgICAgICAgICAvKiB0cmlnZ2VyIG5ldyBzdWItdGFibGUgd2hlbiBsZW4gPiByb290ICovCiAgdXNlZCA9IDEgPDwgcm9vdDsgICAgICAgICAgLyogdXNlIHJvb3QgdGFibGUgZW50cmll" + "cyAqLwogIG1hc2sgPSB1c2VkIC0gMTsgICAgICAgICAgICAvKiBtYXNrIGZvciBjb21wYXJpbmcgbG93ICovCgogIC8qIGNoZWNrIGF2YWlsYWJsZSB0YWJsZSBzcGFjZSAqLwogIGlmICgodHlwZSA9PT0gTEVO" + "UyAmJiB1c2VkID4gRU5PVUdIX0xFTlMpIHx8CiAgICAodHlwZSA9PT0gRElTVFMgJiYgdXNlZCA+IEVOT1VHSF9ESVNUUykpIHsKICAgIHJldHVybiAxOwogIH0KCiAgLyogcHJvY2VzcyBhbGwgY29kZXMgYW5k" + "IG1ha2UgdGFibGUgZW50cmllcyAqLwogIGZvciAoOzspIHsKICAgIC8qIGNyZWF0ZSB0YWJsZSBlbnRyeSAqLwogICAgaGVyZV9iaXRzID0gbGVuIC0gZHJvcDsKICAgIGlmICh3b3JrW3N5bV0gPCBlbmQpIHsK" + "ICAgICAgaGVyZV9vcCA9IDA7CiAgICAgIGhlcmVfdmFsID0gd29ya1tzeW1dOwogICAgfQogICAgZWxzZSBpZiAod29ya1tzeW1dID4gZW5kKSB7CiAgICAgIGhlcmVfb3AgPSBleHRyYVtleHRyYV9pbmRleCAr" + "IHdvcmtbc3ltXV07CiAgICAgIGhlcmVfdmFsID0gYmFzZVtiYXNlX2luZGV4ICsgd29ya1tzeW1dXTsKICAgIH0KICAgIGVsc2UgewogICAgICBoZXJlX29wID0gMzIgKyA2NDsgICAgICAgICAvKiBlbmQgb2Yg" + "YmxvY2sgKi8KICAgICAgaGVyZV92YWwgPSAwOwogICAgfQoKICAgIC8qIHJlcGxpY2F0ZSBmb3IgdGhvc2UgaW5kaWNlcyB3aXRoIGxvdyBsZW4gYml0cyBlcXVhbCB0byBodWZmICovCiAgICBpbmNyID0gMSA8" + "PCAobGVuIC0gZHJvcCk7CiAgICBmaWxsID0gMSA8PCBjdXJyOwogICAgbWluID0gZmlsbDsgICAgICAgICAgICAgICAgIC8qIHNhdmUgb2Zmc2V0IHRvIG5leHQgdGFibGUgKi8KICAgIGRvIHsKICAgICAgZmls" + "bCAtPSBpbmNyOwogICAgICB0YWJsZVtuZXh0ICsgKGh1ZmYgPj4gZHJvcCkgKyBmaWxsXSA9IChoZXJlX2JpdHMgPDwgMjQpIHwgKGhlcmVfb3AgPDwgMTYpIHwgaGVyZV92YWwgfDA7CiAgICB9IHdoaWxlIChm" + "aWxsICE9PSAwKTsKCiAgICAvKiBiYWNrd2FyZHMgaW5jcmVtZW50IHRoZSBsZW4tYml0IGNvZGUgaHVmZiAqLwogICAgaW5jciA9IDEgPDwgKGxlbiAtIDEpOwogICAgd2hpbGUgKGh1ZmYgJiBpbmNyKSB7CiAg" + "ICAgIGluY3IgPj49IDE7CiAgICB9CiAgICBpZiAoaW5jciAhPT0gMCkgewogICAgICBodWZmICY9IGluY3IgLSAxOwogICAgICBodWZmICs9IGluY3I7CiAgICB9IGVsc2UgewogICAgICBodWZmID0gMDsKICAg" + "IH0KCiAgICAvKiBnbyB0byBuZXh0IHN5bWJvbCwgdXBkYXRlIGNvdW50LCBsZW4gKi8KICAgIHN5bSsrOwogICAgaWYgKC0tY291bnRbbGVuXSA9PT0gMCkgewogICAgICBpZiAobGVuID09PSBtYXgpIHsgYnJl" + "YWs7IH0KICAgICAgbGVuID0gbGVuc1tsZW5zX2luZGV4ICsgd29ya1tzeW1dXTsKICAgIH0KCiAgICAvKiBjcmVhdGUgbmV3IHN1Yi10YWJsZSBpZiBuZWVkZWQgKi8KICAgIGlmIChsZW4gPiByb290ICYmICho" + "dWZmICYgbWFzaykgIT09IGxvdykgewogICAgICAvKiBpZiBmaXJzdCB0aW1lLCB0cmFuc2l0aW9uIHRvIHN1Yi10YWJsZXMgKi8KICAgICAgaWYgKGRyb3AgPT09IDApIHsKICAgICAgICBkcm9wID0gcm9vdDsK" + "ICAgICAgfQoKICAgICAgLyogaW5jcmVtZW50IHBhc3QgbGFzdCB0YWJsZSAqLwogICAgICBuZXh0ICs9IG1pbjsgICAgICAgICAgICAvKiBoZXJlIG1pbiBpcyAxIDw8IGN1cnIgKi8KCiAgICAgIC8qIGRldGVy" + "bWluZSBsZW5ndGggb2YgbmV4dCB0YWJsZSAqLwogICAgICBjdXJyID0gbGVuIC0gZHJvcDsKICAgICAgbGVmdCA9IDEgPDwgY3VycjsKICAgICAgd2hpbGUgKGN1cnIgKyBkcm9wIDwgbWF4KSB7CiAgICAgICAg" + "bGVmdCAtPSBjb3VudFtjdXJyICsgZHJvcF07CiAgICAgICAgaWYgKGxlZnQgPD0gMCkgeyBicmVhazsgfQogICAgICAgIGN1cnIrKzsKICAgICAgICBsZWZ0IDw8PSAxOwogICAgICB9CgogICAgICAvKiBjaGVj" + "ayBmb3IgZW5vdWdoIHNwYWNlICovCiAgICAgIHVzZWQgKz0gMSA8PCBjdXJyOwogICAgICBpZiAoKHR5cGUgPT09IExFTlMgJiYgdXNlZCA+IEVOT1VHSF9MRU5TKSB8fAogICAgICAgICh0eXBlID09PSBESVNU" + "UyAmJiB1c2VkID4gRU5PVUdIX0RJU1RTKSkgewogICAgICAgIHJldHVybiAxOwogICAgICB9CgogICAgICAvKiBwb2ludCBlbnRyeSBpbiByb290IHRhYmxlIHRvIHN1Yi10YWJsZSAqLwogICAgICBsb3cgPSBo" + "dWZmICYgbWFzazsKICAgICAgLyp0YWJsZS5vcFtsb3ddID0gY3VycjsKICAgICAgdGFibGUuYml0c1tsb3ddID0gcm9vdDsKICAgICAgdGFibGUudmFsW2xvd10gPSBuZXh0IC0gb3B0cy50YWJsZV9pbmRleDsq" + "LwogICAgICB0YWJsZVtsb3ddID0gKHJvb3QgPDwgMjQpIHwgKGN1cnIgPDwgMTYpIHwgKG5leHQgLSB0YWJsZV9pbmRleCkgfDA7CiAgICB9CiAgfQoKICAvKiBmaWxsIGluIHJlbWFpbmluZyB0YWJsZSBlbnRy" + "eSBpZiBjb2RlIGlzIGluY29tcGxldGUgKGd1YXJhbnRlZWQgdG8gaGF2ZQogICBhdCBtb3N0IG9uZSByZW1haW5pbmcgZW50cnksIHNpbmNlIGlmIHRoZSBjb2RlIGlzIGluY29tcGxldGUsIHRoZQogICBtYXhp" + "bXVtIGNvZGUgbGVuZ3RoIHRoYXQgd2FzIGFsbG93ZWQgdG8gZ2V0IHRoaXMgZmFyIGlzIG9uZSBiaXQpICovCiAgaWYgKGh1ZmYgIT09IDApIHsKICAgIC8vdGFibGUub3BbbmV4dCArIGh1ZmZdID0gNjQ7ICAg" + "ICAgICAgICAgLyogaW52YWxpZCBjb2RlIG1hcmtlciAqLwogICAgLy90YWJsZS5iaXRzW25leHQgKyBodWZmXSA9IGxlbiAtIGRyb3A7CiAgICAvL3RhYmxlLnZhbFtuZXh0ICsgaHVmZl0gPSAwOwogICAgdGFi" + "bGVbbmV4dCArIGh1ZmZdID0gKChsZW4gLSBkcm9wKSA8PCAyNCkgfCAoNjQgPDwgMTYpIHwwOwogIH0KCiAgLyogc2V0IHJldHVybiBwYXJhbWV0ZXJzICovCiAgLy9vcHRzLnRhYmxlX2luZGV4ICs9IHVzZWQ7" + "CiAgb3B0cy5iaXRzID0gcm9vdDsKICByZXR1cm4gMDsKfTsKCn0seyIuLi91dGlscy9jb21tb24iOjQxfV0sNTE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewondXNlIHN0cmljdCc7CgovLyAo" + "QykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKLy8gKEMpIDIwMTQtMjAxNyBWaXRhbHkgUHV6cmluIGFuZCBBbmRyZXkgVHVwaXRzaW4KLy8KLy8gVGhpcyBzb2Z0d2FyZSBpcyBw" + "cm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKLy8gd2FycmFudHkuIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2Vz" + "Ci8vIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCi8vCi8vIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAov" + "LyBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0Ci8vIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9u" + "czoKLy8KLy8gMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKLy8gICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwg" + "c29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQovLyAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQovLyAgIGFwcHJl" + "Y2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCi8vIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCi8vICAgbWlzcmVwcmVz" + "ZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgovLyAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgoKbW9k" + "dWxlLmV4cG9ydHMgPSB7CiAgMjogICAgICAnbmVlZCBkaWN0aW9uYXJ5JywgICAgIC8qIFpfTkVFRF9ESUNUICAgICAgIDIgICovCiAgMTogICAgICAnc3RyZWFtIGVuZCcsICAgICAgICAgIC8qIFpfU1RSRUFN" + "X0VORCAgICAgIDEgICovCiAgMDogICAgICAnJywgICAgICAgICAgICAgICAgICAgIC8qIFpfT0sgICAgICAgICAgICAgIDAgICovCiAgJy0xJzogICAnZmlsZSBlcnJvcicsICAgICAgICAgIC8qIFpfRVJSTk8g" + "ICAgICAgICAoLTEpICovCiAgJy0yJzogICAnc3RyZWFtIGVycm9yJywgICAgICAgIC8qIFpfU1RSRUFNX0VSUk9SICAoLTIpICovCiAgJy0zJzogICAnZGF0YSBlcnJvcicsICAgICAgICAgIC8qIFpfREFUQV9F" + "UlJPUiAgICAoLTMpICovCiAgJy00JzogICAnaW5zdWZmaWNpZW50IG1lbW9yeScsIC8qIFpfTUVNX0VSUk9SICAgICAoLTQpICovCiAgJy01JzogICAnYnVmZmVyIGVycm9yJywgICAgICAgIC8qIFpfQlVGX0VS" + "Uk9SICAgICAoLTUpICovCiAgJy02JzogICAnaW5jb21wYXRpYmxlIHZlcnNpb24nIC8qIFpfVkVSU0lPTl9FUlJPUiAoLTYpICovCn07Cgp9LHt9XSw1MjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0" + "cyl7Cid1c2Ugc3RyaWN0JzsKCi8vIChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgovLyAoQykgMjAxNC0yMDE3IFZpdGFseSBQdXpyaW4gYW5kIEFuZHJleSBUdXBpdHNpbgov" + "LwovLyBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAovLyB3YXJyYW50eS4gSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxk" + "IGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKLy8gYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KLy8KLy8gUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0" + "d2FyZSBmb3IgYW55IHB1cnBvc2UsCi8vIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKLy8gZnJlZWx5LCBzdWJqZWN0IHRvIHRo" + "ZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgovLwovLyAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAovLyAgIGNsYWltIHRoYXQg" + "eW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCi8vICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0" + "aW9uIHdvdWxkIGJlCi8vICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KLy8gMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVz" + "dCBub3QgYmUKLy8gICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCi8vIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNv" + "dXJjZSBkaXN0cmlidXRpb24uCgp2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscy9jb21tb24nKTsKCi8qIFB1YmxpYyBjb25zdGFudHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09" + "PT09PT09PT09PT09PT09PT09PSovCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCgoKLy92YXIgWl9GSUxURVJF" + "RCAgICAgICAgICA9IDE7Ci8vdmFyIFpfSFVGRk1BTl9PTkxZICAgICAgPSAyOwovL3ZhciBaX1JMRSAgICAgICAgICAgICAgID0gMzsKdmFyIFpfRklYRUQgICAgICAgICAgICAgICA9IDQ7Ci8vdmFyIFpfREVG" + "QVVMVF9TVFJBVEVHWSAgPSAwOwoKLyogUG9zc2libGUgdmFsdWVzIG9mIHRoZSBkYXRhX3R5cGUgZmllbGQgKHRob3VnaCBzZWUgaW5mbGF0ZSgpKSAqLwp2YXIgWl9CSU5BUlkgICAgICAgICAgICAgID0gMDsK" + "dmFyIFpfVEVYVCAgICAgICAgICAgICAgICA9IDE7Ci8vdmFyIFpfQVNDSUkgICAgICAgICAgICAgPSAxOyAvLyA9IFpfVEVYVAp2YXIgWl9VTktOT1dOICAgICAgICAgICAgID0gMjsKCi8qPT09PT09PT09PT09" + "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCgoKZnVuY3Rpb24gemVybyhidWYpIHsgdmFyIGxlbiA9IGJ1Zi5sZW5ndGg7IHdoaWxlICgt" + "LWxlbiA+PSAwKSB7IGJ1ZltsZW5dID0gMDsgfSB9CgovLyBGcm9tIHp1dGlsLmgKCnZhciBTVE9SRURfQkxPQ0sgPSAwOwp2YXIgU1RBVElDX1RSRUVTID0gMTsKdmFyIERZTl9UUkVFUyAgICA9IDI7Ci8qIFRo" + "ZSB0aHJlZSBraW5kcyBvZiBibG9jayB0eXBlICovCgp2YXIgTUlOX01BVENIICAgID0gMzsKdmFyIE1BWF9NQVRDSCAgICA9IDI1ODsKLyogVGhlIG1pbmltdW0gYW5kIG1heGltdW0gbWF0Y2ggbGVuZ3RocyAq" + "LwoKLy8gRnJvbSBkZWZsYXRlLmgKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIEludGVybmFsIGNvbXByZXNz" + "aW9uIHN0YXRlLgogKi8KCnZhciBMRU5HVEhfQ09ERVMgID0gMjk7Ci8qIG51bWJlciBvZiBsZW5ndGggY29kZXMsIG5vdCBjb3VudGluZyB0aGUgc3BlY2lhbCBFTkRfQkxPQ0sgY29kZSAqLwoKdmFyIExJVEVS" + "QUxTICAgICAgPSAyNTY7Ci8qIG51bWJlciBvZiBsaXRlcmFsIGJ5dGVzIDAuLjI1NSAqLwoKdmFyIExfQ09ERVMgICAgICAgPSBMSVRFUkFMUyArIDEgKyBMRU5HVEhfQ09ERVM7Ci8qIG51bWJlciBvZiBMaXRl" + "cmFsIG9yIExlbmd0aCBjb2RlcywgaW5jbHVkaW5nIHRoZSBFTkRfQkxPQ0sgY29kZSAqLwoKdmFyIERfQ09ERVMgICAgICAgPSAzMDsKLyogbnVtYmVyIG9mIGRpc3RhbmNlIGNvZGVzICovCgp2YXIgQkxfQ09E" + "RVMgICAgICA9IDE5OwovKiBudW1iZXIgb2YgY29kZXMgdXNlZCB0byB0cmFuc2ZlciB0aGUgYml0IGxlbmd0aHMgKi8KCnZhciBIRUFQX1NJWkUgICAgID0gMiAqIExfQ09ERVMgKyAxOwovKiBtYXhpbXVtIGhl" + "YXAgc2l6ZSAqLwoKdmFyIE1BWF9CSVRTICAgICAgPSAxNTsKLyogQWxsIGNvZGVzIG11c3Qgbm90IGV4Y2VlZCBNQVhfQklUUyBiaXRzICovCgp2YXIgQnVmX3NpemUgICAgICA9IDE2OwovKiBzaXplIG9mIGJp" + "dCBidWZmZXIgaW4gYmlfYnVmICovCgoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIENvbnN0YW50cwogKi8K" + "CnZhciBNQVhfQkxfQklUUyA9IDc7Ci8qIEJpdCBsZW5ndGggY29kZXMgbXVzdCBub3QgZXhjZWVkIE1BWF9CTF9CSVRTIGJpdHMgKi8KCnZhciBFTkRfQkxPQ0sgICA9IDI1NjsKLyogZW5kIG9mIGJsb2NrIGxp" + "dGVyYWwgY29kZSAqLwoKdmFyIFJFUF8zXzYgICAgID0gMTY7Ci8qIHJlcGVhdCBwcmV2aW91cyBiaXQgbGVuZ3RoIDMtNiB0aW1lcyAoMiBiaXRzIG9mIHJlcGVhdCBjb3VudCkgKi8KCnZhciBSRVBaXzNfMTAg" + "ICA9IDE3OwovKiByZXBlYXQgYSB6ZXJvIGxlbmd0aCAzLTEwIHRpbWVzICAoMyBiaXRzIG9mIHJlcGVhdCBjb3VudCkgKi8KCnZhciBSRVBaXzExXzEzOCA9IDE4OwovKiByZXBlYXQgYSB6ZXJvIGxlbmd0aCAx" + "MS0xMzggdGltZXMgICg3IGJpdHMgb2YgcmVwZWF0IGNvdW50KSAqLwoKLyogZXNsaW50LWRpc2FibGUgY29tbWEtc3BhY2luZyxhcnJheS1icmFja2V0LXNwYWNpbmcgKi8KdmFyIGV4dHJhX2xiaXRzID0gICAv" + "KiBleHRyYSBiaXRzIGZvciBlYWNoIGxlbmd0aCBjb2RlICovCiAgWzAsMCwwLDAsMCwwLDAsMCwxLDEsMSwxLDIsMiwyLDIsMywzLDMsMyw0LDQsNCw0LDUsNSw1LDUsMF07Cgp2YXIgZXh0cmFfZGJpdHMgPSAg" + "IC8qIGV4dHJhIGJpdHMgZm9yIGVhY2ggZGlzdGFuY2UgY29kZSAqLwogIFswLDAsMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEwLDEwLDExLDExLDEyLDEyLDEzLDEzXTsKCnZhciBl" + "eHRyYV9ibGJpdHMgPSAgLyogZXh0cmEgYml0cyBmb3IgZWFjaCBiaXQgbGVuZ3RoIGNvZGUgKi8KICBbMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDMsN107Cgp2YXIgYmxfb3JkZXIgPQogIFsx" + "NiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XTsKLyogZXNsaW50LWVuYWJsZSBjb21tYS1zcGFjaW5nLGFycmF5LWJyYWNrZXQtc3BhY2luZyAqLwoKLyogVGhlIGxlbmd0aHMg" + "b2YgdGhlIGJpdCBsZW5ndGggY29kZXMgYXJlIHNlbnQgaW4gb3JkZXIgb2YgZGVjcmVhc2luZwogKiBwcm9iYWJpbGl0eSwgdG8gYXZvaWQgdHJhbnNtaXR0aW5nIHRoZSBsZW5ndGhzIGZvciB1bnVzZWQgYml0" + "IGxlbmd0aCBjb2Rlcy4KICovCgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogTG9jYWwgZGF0YS4gVGhlc2Ug" + "YXJlIGluaXRpYWxpemVkIG9ubHkgb25jZS4KICovCgovLyBXZSBwcmUtZmlsbCBhcnJheXMgd2l0aCAwIHRvIGF2b2lkIHVuaW5pdGlhbGl6ZWQgZ2FwcwoKdmFyIERJU1RfQ09ERV9MRU4gPSA1MTI7IC8qIHNl" + "ZSBkZWZpbml0aW9uIG9mIGFycmF5IGRpc3RfY29kZSBiZWxvdyAqLwoKLy8gISEhISBVc2UgZmxhdCBhcnJheSBpbnNkZWFkIG9mIHN0cnVjdHVyZSwgRnJlcSA9IGkqMiwgTGVuID0gaSoyKzEKdmFyIHN0YXRp" + "Y19sdHJlZSAgPSBuZXcgQXJyYXkoKExfQ09ERVMgKyAyKSAqIDIpOwp6ZXJvKHN0YXRpY19sdHJlZSk7Ci8qIFRoZSBzdGF0aWMgbGl0ZXJhbCB0cmVlLiBTaW5jZSB0aGUgYml0IGxlbmd0aHMgYXJlIGltcG9z" + "ZWQsIHRoZXJlIGlzIG5vCiAqIG5lZWQgZm9yIHRoZSBMX0NPREVTIGV4dHJhIGNvZGVzIHVzZWQgZHVyaW5nIGhlYXAgY29uc3RydWN0aW9uLiBIb3dldmVyCiAqIFRoZSBjb2RlcyAyODYgYW5kIDI4NyBhcmUg" + "bmVlZGVkIHRvIGJ1aWxkIGEgY2Fub25pY2FsIHRyZWUgKHNlZSBfdHJfaW5pdAogKiBiZWxvdykuCiAqLwoKdmFyIHN0YXRpY19kdHJlZSAgPSBuZXcgQXJyYXkoRF9DT0RFUyAqIDIpOwp6ZXJvKHN0YXRpY19k" + "dHJlZSk7Ci8qIFRoZSBzdGF0aWMgZGlzdGFuY2UgdHJlZS4gKEFjdHVhbGx5IGEgdHJpdmlhbCB0cmVlIHNpbmNlIGFsbCBjb2RlcyB1c2UKICogNSBiaXRzLikKICovCgp2YXIgX2Rpc3RfY29kZSAgICA9IG5l" + "dyBBcnJheShESVNUX0NPREVfTEVOKTsKemVybyhfZGlzdF9jb2RlKTsKLyogRGlzdGFuY2UgY29kZXMuIFRoZSBmaXJzdCAyNTYgdmFsdWVzIGNvcnJlc3BvbmQgdG8gdGhlIGRpc3RhbmNlcwogKiAzIC4uIDI1" + "OCwgdGhlIGxhc3QgMjU2IHZhbHVlcyBjb3JyZXNwb25kIHRvIHRoZSB0b3AgOCBiaXRzIG9mCiAqIHRoZSAxNSBiaXQgZGlzdGFuY2VzLgogKi8KCnZhciBfbGVuZ3RoX2NvZGUgID0gbmV3IEFycmF5KE1BWF9N" + "QVRDSCAtIE1JTl9NQVRDSCArIDEpOwp6ZXJvKF9sZW5ndGhfY29kZSk7Ci8qIGxlbmd0aCBjb2RlIGZvciBlYWNoIG5vcm1hbGl6ZWQgbWF0Y2ggbGVuZ3RoICgwID09IE1JTl9NQVRDSCkgKi8KCnZhciBiYXNl" + "X2xlbmd0aCAgID0gbmV3IEFycmF5KExFTkdUSF9DT0RFUyk7Cnplcm8oYmFzZV9sZW5ndGgpOwovKiBGaXJzdCBub3JtYWxpemVkIGxlbmd0aCBmb3IgZWFjaCBjb2RlICgwID0gTUlOX01BVENIKSAqLwoKdmFy" + "IGJhc2VfZGlzdCAgICAgPSBuZXcgQXJyYXkoRF9DT0RFUyk7Cnplcm8oYmFzZV9kaXN0KTsKLyogRmlyc3Qgbm9ybWFsaXplZCBkaXN0YW5jZSBmb3IgZWFjaCBjb2RlICgwID0gZGlzdGFuY2Ugb2YgMSkgKi8K" + "CgpmdW5jdGlvbiBTdGF0aWNUcmVlRGVzYyhzdGF0aWNfdHJlZSwgZXh0cmFfYml0cywgZXh0cmFfYmFzZSwgZWxlbXMsIG1heF9sZW5ndGgpIHsKCiAgdGhpcy5zdGF0aWNfdHJlZSAgPSBzdGF0aWNfdHJlZTsg" + "IC8qIHN0YXRpYyB0cmVlIG9yIE5VTEwgKi8KICB0aGlzLmV4dHJhX2JpdHMgICA9IGV4dHJhX2JpdHM7ICAgLyogZXh0cmEgYml0cyBmb3IgZWFjaCBjb2RlIG9yIE5VTEwgKi8KICB0aGlzLmV4dHJhX2Jhc2Ug" + "ICA9IGV4dHJhX2Jhc2U7ICAgLyogYmFzZSBpbmRleCBmb3IgZXh0cmFfYml0cyAqLwogIHRoaXMuZWxlbXMgICAgICAgID0gZWxlbXM7ICAgICAgICAvKiBtYXggbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSB0" + "cmVlICovCiAgdGhpcy5tYXhfbGVuZ3RoICAgPSBtYXhfbGVuZ3RoOyAgIC8qIG1heCBiaXQgbGVuZ3RoIGZvciB0aGUgY29kZXMgKi8KCiAgLy8gc2hvdyBpZiBgc3RhdGljX3RyZWVgIGhhcyBkYXRhIG9yIGR1" + "bW15IC0gbmVlZGVkIGZvciBtb25vbW9ycGhpYyBvYmplY3RzCiAgdGhpcy5oYXNfc3RyZWUgICAgPSBzdGF0aWNfdHJlZSAmJiBzdGF0aWNfdHJlZS5sZW5ndGg7Cn0KCgp2YXIgc3RhdGljX2xfZGVzYzsKdmFy" + "IHN0YXRpY19kX2Rlc2M7CnZhciBzdGF0aWNfYmxfZGVzYzsKCgpmdW5jdGlvbiBUcmVlRGVzYyhkeW5fdHJlZSwgc3RhdF9kZXNjKSB7CiAgdGhpcy5keW5fdHJlZSA9IGR5bl90cmVlOyAgICAgLyogdGhlIGR5" + "bmFtaWMgdHJlZSAqLwogIHRoaXMubWF4X2NvZGUgPSAwOyAgICAgICAgICAgIC8qIGxhcmdlc3QgY29kZSB3aXRoIG5vbiB6ZXJvIGZyZXF1ZW5jeSAqLwogIHRoaXMuc3RhdF9kZXNjID0gc3RhdF9kZXNjOyAg" + "IC8qIHRoZSBjb3JyZXNwb25kaW5nIHN0YXRpYyB0cmVlICovCn0KCgoKZnVuY3Rpb24gZF9jb2RlKGRpc3QpIHsKICByZXR1cm4gZGlzdCA8IDI1NiA/IF9kaXN0X2NvZGVbZGlzdF0gOiBfZGlzdF9jb2RlWzI1" + "NiArIChkaXN0ID4+PiA3KV07Cn0KCgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogT3V0cHV0IGEgc2hvcnQg" + "TFNCIGZpcnN0IG9uIHRoZSBzdHJlYW0uCiAqIElOIGFzc2VydGlvbjogdGhlcmUgaXMgZW5vdWdoIHJvb20gaW4gcGVuZGluZ0J1Zi4KICovCmZ1bmN0aW9uIHB1dF9zaG9ydChzLCB3KSB7Ci8vICAgIHB1dF9i" + "eXRlKHMsICh1Y2gpKCh3KSAmIDB4ZmYpKTsKLy8gICAgcHV0X2J5dGUocywgKHVjaCkoKHVzaCkodykgPj4gOCkpOwogIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gKHcpICYgMHhmZjsKICBzLnBlbmRp" + "bmdfYnVmW3MucGVuZGluZysrXSA9ICh3ID4+PiA4KSAmIDB4ZmY7Cn0KCgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09" + "PT0KICogU2VuZCBhIHZhbHVlIG9uIGEgZ2l2ZW4gbnVtYmVyIG9mIGJpdHMuCiAqIElOIGFzc2VydGlvbjogbGVuZ3RoIDw9IDE2IGFuZCB2YWx1ZSBmaXRzIGluIGxlbmd0aCBiaXRzLgogKi8KZnVuY3Rpb24g" + "c2VuZF9iaXRzKHMsIHZhbHVlLCBsZW5ndGgpIHsKICBpZiAocy5iaV92YWxpZCA+IChCdWZfc2l6ZSAtIGxlbmd0aCkpIHsKICAgIHMuYmlfYnVmIHw9ICh2YWx1ZSA8PCBzLmJpX3ZhbGlkKSAmIDB4ZmZmZjsK" + "ICAgIHB1dF9zaG9ydChzLCBzLmJpX2J1Zik7CiAgICBzLmJpX2J1ZiA9IHZhbHVlID4+IChCdWZfc2l6ZSAtIHMuYmlfdmFsaWQpOwogICAgcy5iaV92YWxpZCArPSBsZW5ndGggLSBCdWZfc2l6ZTsKICB9IGVs" + "c2UgewogICAgcy5iaV9idWYgfD0gKHZhbHVlIDw8IHMuYmlfdmFsaWQpICYgMHhmZmZmOwogICAgcy5iaV92YWxpZCArPSBsZW5ndGg7CiAgfQp9CgoKZnVuY3Rpb24gc2VuZF9jb2RlKHMsIGMsIHRyZWUpIHsK" + "ICBzZW5kX2JpdHMocywgdHJlZVtjICogMl0vKi5Db2RlKi8sIHRyZWVbYyAqIDIgKyAxXS8qLkxlbiovKTsKfQoKCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09" + "PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBSZXZlcnNlIHRoZSBmaXJzdCBsZW4gYml0cyBvZiBhIGNvZGUsIHVzaW5nIHN0cmFpZ2h0Zm9yd2FyZCBjb2RlIChhIGZhc3RlcgogKiBtZXRob2Qgd291bGQg" + "dXNlIGEgdGFibGUpCiAqIElOIGFzc2VydGlvbjogMSA8PSBsZW4gPD0gMTUKICovCmZ1bmN0aW9uIGJpX3JldmVyc2UoY29kZSwgbGVuKSB7CiAgdmFyIHJlcyA9IDA7CiAgZG8gewogICAgcmVzIHw9IGNvZGUg" + "JiAxOwogICAgY29kZSA+Pj49IDE7CiAgICByZXMgPDw9IDE7CiAgfSB3aGlsZSAoLS1sZW4gPiAwKTsKICByZXR1cm4gcmVzID4+PiAxOwp9CgoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09" + "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIEZsdXNoIHRoZSBiaXQgYnVmZmVyLCBrZWVwaW5nIGF0IG1vc3QgNyBiaXRzIGluIGl0LgogKi8KZnVuY3Rpb24gYmlfZmx1c2go" + "cykgewogIGlmIChzLmJpX3ZhbGlkID09PSAxNikgewogICAgcHV0X3Nob3J0KHMsIHMuYmlfYnVmKTsKICAgIHMuYmlfYnVmID0gMDsKICAgIHMuYmlfdmFsaWQgPSAwOwoKICB9IGVsc2UgaWYgKHMuYmlfdmFs" + "aWQgPj0gOCkgewogICAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSBzLmJpX2J1ZiAmIDB4ZmY7CiAgICBzLmJpX2J1ZiA+Pj0gODsKICAgIHMuYmlfdmFsaWQgLT0gODsKICB9Cn0KCgovKiA9PT09PT09" + "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogQ29tcHV0ZSB0aGUgb3B0aW1hbCBiaXQgbGVuZ3RocyBmb3IgYSB0cmVlIGFuZCB1" + "cGRhdGUgdGhlIHRvdGFsIGJpdCBsZW5ndGgKICogZm9yIHRoZSBjdXJyZW50IGJsb2NrLgogKiBJTiBhc3NlcnRpb246IHRoZSBmaWVsZHMgZnJlcSBhbmQgZGFkIGFyZSBzZXQsIGhlYXBbaGVhcF9tYXhdIGFu" + "ZAogKiAgICBhYm92ZSBhcmUgdGhlIHRyZWUgbm9kZXMgc29ydGVkIGJ5IGluY3JlYXNpbmcgZnJlcXVlbmN5LgogKiBPVVQgYXNzZXJ0aW9uczogdGhlIGZpZWxkIGxlbiBpcyBzZXQgdG8gdGhlIG9wdGltYWwg" + "Yml0IGxlbmd0aCwgdGhlCiAqICAgICBhcnJheSBibF9jb3VudCBjb250YWlucyB0aGUgZnJlcXVlbmNpZXMgZm9yIGVhY2ggYml0IGxlbmd0aC4KICogICAgIFRoZSBsZW5ndGggb3B0X2xlbiBpcyB1cGRhdGVk" + "OyBzdGF0aWNfbGVuIGlzIGFsc28gdXBkYXRlZCBpZiBzdHJlZSBpcwogKiAgICAgbm90IG51bGwuCiAqLwpmdW5jdGlvbiBnZW5fYml0bGVuKHMsIGRlc2MpCi8vICAgIGRlZmxhdGVfc3RhdGUgKnM7Ci8vICAg" + "IHRyZWVfZGVzYyAqZGVzYzsgICAgLyogdGhlIHRyZWUgZGVzY3JpcHRvciAqLwp7CiAgdmFyIHRyZWUgICAgICAgICAgICA9IGRlc2MuZHluX3RyZWU7CiAgdmFyIG1heF9jb2RlICAgICAgICA9IGRlc2MubWF4" + "X2NvZGU7CiAgdmFyIHN0cmVlICAgICAgICAgICA9IGRlc2Muc3RhdF9kZXNjLnN0YXRpY190cmVlOwogIHZhciBoYXNfc3RyZWUgICAgICAgPSBkZXNjLnN0YXRfZGVzYy5oYXNfc3RyZWU7CiAgdmFyIGV4dHJh" + "ICAgICAgICAgICA9IGRlc2Muc3RhdF9kZXNjLmV4dHJhX2JpdHM7CiAgdmFyIGJhc2UgICAgICAgICAgICA9IGRlc2Muc3RhdF9kZXNjLmV4dHJhX2Jhc2U7CiAgdmFyIG1heF9sZW5ndGggICAgICA9IGRlc2Mu" + "c3RhdF9kZXNjLm1heF9sZW5ndGg7CiAgdmFyIGg7ICAgICAgICAgICAgICAvKiBoZWFwIGluZGV4ICovCiAgdmFyIG4sIG07ICAgICAgICAgICAvKiBpdGVyYXRlIG92ZXIgdGhlIHRyZWUgZWxlbWVudHMgKi8K" + "ICB2YXIgYml0czsgICAgICAgICAgIC8qIGJpdCBsZW5ndGggKi8KICB2YXIgeGJpdHM7ICAgICAgICAgIC8qIGV4dHJhIGJpdHMgKi8KICB2YXIgZjsgICAgICAgICAgICAgIC8qIGZyZXF1ZW5jeSAqLwogIHZh" + "ciBvdmVyZmxvdyA9IDA7ICAgLyogbnVtYmVyIG9mIGVsZW1lbnRzIHdpdGggYml0IGxlbmd0aCB0b28gbGFyZ2UgKi8KCiAgZm9yIChiaXRzID0gMDsgYml0cyA8PSBNQVhfQklUUzsgYml0cysrKSB7CiAgICBz" + "LmJsX2NvdW50W2JpdHNdID0gMDsKICB9CgogIC8qIEluIGEgZmlyc3QgcGFzcywgY29tcHV0ZSB0aGUgb3B0aW1hbCBiaXQgbGVuZ3RocyAod2hpY2ggbWF5CiAgICogb3ZlcmZsb3cgaW4gdGhlIGNhc2Ugb2Yg" + "dGhlIGJpdCBsZW5ndGggdHJlZSkuCiAgICovCiAgdHJlZVtzLmhlYXBbcy5oZWFwX21heF0gKiAyICsgMV0vKi5MZW4qLyA9IDA7IC8qIHJvb3Qgb2YgdGhlIGhlYXAgKi8KCiAgZm9yIChoID0gcy5oZWFwX21h" + "eCArIDE7IGggPCBIRUFQX1NJWkU7IGgrKykgewogICAgbiA9IHMuaGVhcFtoXTsKICAgIGJpdHMgPSB0cmVlW3RyZWVbbiAqIDIgKyAxXS8qLkRhZCovICogMiArIDFdLyouTGVuKi8gKyAxOwogICAgaWYgKGJp" + "dHMgPiBtYXhfbGVuZ3RoKSB7CiAgICAgIGJpdHMgPSBtYXhfbGVuZ3RoOwogICAgICBvdmVyZmxvdysrOwogICAgfQogICAgdHJlZVtuICogMiArIDFdLyouTGVuKi8gPSBiaXRzOwogICAgLyogV2Ugb3Zlcndy" + "aXRlIHRyZWVbbl0uRGFkIHdoaWNoIGlzIG5vIGxvbmdlciBuZWVkZWQgKi8KCiAgICBpZiAobiA+IG1heF9jb2RlKSB7IGNvbnRpbnVlOyB9IC8qIG5vdCBhIGxlYWYgbm9kZSAqLwoKICAgIHMuYmxfY291bnRb" + "Yml0c10rKzsKICAgIHhiaXRzID0gMDsKICAgIGlmIChuID49IGJhc2UpIHsKICAgICAgeGJpdHMgPSBleHRyYVtuIC0gYmFzZV07CiAgICB9CiAgICBmID0gdHJlZVtuICogMl0vKi5GcmVxKi87CiAgICBzLm9w" + "dF9sZW4gKz0gZiAqIChiaXRzICsgeGJpdHMpOwogICAgaWYgKGhhc19zdHJlZSkgewogICAgICBzLnN0YXRpY19sZW4gKz0gZiAqIChzdHJlZVtuICogMiArIDFdLyouTGVuKi8gKyB4Yml0cyk7CiAgICB9CiAg" + "fQogIGlmIChvdmVyZmxvdyA9PT0gMCkgeyByZXR1cm47IH0KCiAgLy8gVHJhY2UoKHN0ZGVyciwiXG5iaXQgbGVuZ3RoIG92ZXJmbG93XG4iKSk7CiAgLyogVGhpcyBoYXBwZW5zIGZvciBleGFtcGxlIG9uIG9i" + "ajIgYW5kIHBpYyBvZiB0aGUgQ2FsZ2FyeSBjb3JwdXMgKi8KCiAgLyogRmluZCB0aGUgZmlyc3QgYml0IGxlbmd0aCB3aGljaCBjb3VsZCBpbmNyZWFzZTogKi8KICBkbyB7CiAgICBiaXRzID0gbWF4X2xlbmd0" + "aCAtIDE7CiAgICB3aGlsZSAocy5ibF9jb3VudFtiaXRzXSA9PT0gMCkgeyBiaXRzLS07IH0KICAgIHMuYmxfY291bnRbYml0c10tLTsgICAgICAvKiBtb3ZlIG9uZSBsZWFmIGRvd24gdGhlIHRyZWUgKi8KICAg" + "IHMuYmxfY291bnRbYml0cyArIDFdICs9IDI7IC8qIG1vdmUgb25lIG92ZXJmbG93IGl0ZW0gYXMgaXRzIGJyb3RoZXIgKi8KICAgIHMuYmxfY291bnRbbWF4X2xlbmd0aF0tLTsKICAgIC8qIFRoZSBicm90aGVy" + "IG9mIHRoZSBvdmVyZmxvdyBpdGVtIGFsc28gbW92ZXMgb25lIHN0ZXAgdXAsCiAgICAgKiBidXQgdGhpcyBkb2VzIG5vdCBhZmZlY3QgYmxfY291bnRbbWF4X2xlbmd0aF0KICAgICAqLwogICAgb3ZlcmZsb3cg" + "LT0gMjsKICB9IHdoaWxlIChvdmVyZmxvdyA+IDApOwoKICAvKiBOb3cgcmVjb21wdXRlIGFsbCBiaXQgbGVuZ3Rocywgc2Nhbm5pbmcgaW4gaW5jcmVhc2luZyBmcmVxdWVuY3kuCiAgICogaCBpcyBzdGlsbCBl" + "cXVhbCB0byBIRUFQX1NJWkUuIChJdCBpcyBzaW1wbGVyIHRvIHJlY29uc3RydWN0IGFsbAogICAqIGxlbmd0aHMgaW5zdGVhZCBvZiBmaXhpbmcgb25seSB0aGUgd3Jvbmcgb25lcy4gVGhpcyBpZGVhIGlzIHRh" + "a2VuCiAgICogZnJvbSAnYXInIHdyaXR0ZW4gYnkgSGFydWhpa28gT2t1bXVyYS4pCiAgICovCiAgZm9yIChiaXRzID0gbWF4X2xlbmd0aDsgYml0cyAhPT0gMDsgYml0cy0tKSB7CiAgICBuID0gcy5ibF9jb3Vu" + "dFtiaXRzXTsKICAgIHdoaWxlIChuICE9PSAwKSB7CiAgICAgIG0gPSBzLmhlYXBbLS1oXTsKICAgICAgaWYgKG0gPiBtYXhfY29kZSkgeyBjb250aW51ZTsgfQogICAgICBpZiAodHJlZVttICogMiArIDFdLyou" + "TGVuKi8gIT09IGJpdHMpIHsKICAgICAgICAvLyBUcmFjZSgoc3RkZXJyLCJjb2RlICVkIGJpdHMgJWQtPiVkXG4iLCBtLCB0cmVlW21dLkxlbiwgYml0cykpOwogICAgICAgIHMub3B0X2xlbiArPSAoYml0cyAt" + "IHRyZWVbbSAqIDIgKyAxXS8qLkxlbiovKSAqIHRyZWVbbSAqIDJdLyouRnJlcSovOwogICAgICAgIHRyZWVbbSAqIDIgKyAxXS8qLkxlbiovID0gYml0czsKICAgICAgfQogICAgICBuLS07CiAgICB9CiAgfQp9" + "CgoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIEdlbmVyYXRlIHRoZSBjb2RlcyBmb3IgYSBnaXZlbiB0cmVl" + "IGFuZCBiaXQgY291bnRzICh3aGljaCBuZWVkIG5vdCBiZQogKiBvcHRpbWFsKS4KICogSU4gYXNzZXJ0aW9uOiB0aGUgYXJyYXkgYmxfY291bnQgY29udGFpbnMgdGhlIGJpdCBsZW5ndGggc3RhdGlzdGljcyBm" + "b3IKICogdGhlIGdpdmVuIHRyZWUgYW5kIHRoZSBmaWVsZCBsZW4gaXMgc2V0IGZvciBhbGwgdHJlZSBlbGVtZW50cy4KICogT1VUIGFzc2VydGlvbjogdGhlIGZpZWxkIGNvZGUgaXMgc2V0IGZvciBhbGwgdHJl" + "ZSBlbGVtZW50cyBvZiBub24KICogICAgIHplcm8gY29kZSBsZW5ndGguCiAqLwpmdW5jdGlvbiBnZW5fY29kZXModHJlZSwgbWF4X2NvZGUsIGJsX2NvdW50KQovLyAgICBjdF9kYXRhICp0cmVlOyAgICAgICAg" + "ICAgICAvKiB0aGUgdHJlZSB0byBkZWNvcmF0ZSAqLwovLyAgICBpbnQgbWF4X2NvZGU7ICAgICAgICAgICAgICAvKiBsYXJnZXN0IGNvZGUgd2l0aCBub24gemVybyBmcmVxdWVuY3kgKi8KLy8gICAgdXNoZiAq" + "YmxfY291bnQ7ICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNvZGVzIGF0IGVhY2ggYml0IGxlbmd0aCAqLwp7CiAgdmFyIG5leHRfY29kZSA9IG5ldyBBcnJheShNQVhfQklUUyArIDEpOyAvKiBuZXh0IGNvZGUg" + "dmFsdWUgZm9yIGVhY2ggYml0IGxlbmd0aCAqLwogIHZhciBjb2RlID0gMDsgICAgICAgICAgICAgIC8qIHJ1bm5pbmcgY29kZSB2YWx1ZSAqLwogIHZhciBiaXRzOyAgICAgICAgICAgICAgICAgIC8qIGJpdCBp" + "bmRleCAqLwogIHZhciBuOyAgICAgICAgICAgICAgICAgICAgIC8qIGNvZGUgaW5kZXggKi8KCiAgLyogVGhlIGRpc3RyaWJ1dGlvbiBjb3VudHMgYXJlIGZpcnN0IHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGNvZGUg" + "dmFsdWVzCiAgICogd2l0aG91dCBiaXQgcmV2ZXJzYWwuCiAgICovCiAgZm9yIChiaXRzID0gMTsgYml0cyA8PSBNQVhfQklUUzsgYml0cysrKSB7CiAgICBuZXh0X2NvZGVbYml0c10gPSBjb2RlID0gKGNvZGUg" + "KyBibF9jb3VudFtiaXRzIC0gMV0pIDw8IDE7CiAgfQogIC8qIENoZWNrIHRoYXQgdGhlIGJpdCBjb3VudHMgaW4gYmxfY291bnQgYXJlIGNvbnNpc3RlbnQuIFRoZSBsYXN0IGNvZGUKICAgKiBtdXN0IGJlIGFs" + "bCBvbmVzLgogICAqLwogIC8vQXNzZXJ0IChjb2RlICsgYmxfY291bnRbTUFYX0JJVFNdLTEgPT0gKDE8PE1BWF9CSVRTKS0xLAogIC8vICAgICAgICAiaW5jb25zaXN0ZW50IGJpdCBjb3VudHMiKTsKICAvL1Ry" + "YWNldigoc3RkZXJyLCJcbmdlbl9jb2RlczogbWF4X2NvZGUgJWQgIiwgbWF4X2NvZGUpKTsKCiAgZm9yIChuID0gMDsgIG4gPD0gbWF4X2NvZGU7IG4rKykgewogICAgdmFyIGxlbiA9IHRyZWVbbiAqIDIgKyAx" + "XS8qLkxlbiovOwogICAgaWYgKGxlbiA9PT0gMCkgeyBjb250aW51ZTsgfQogICAgLyogTm93IHJldmVyc2UgdGhlIGJpdHMgKi8KICAgIHRyZWVbbiAqIDJdLyouQ29kZSovID0gYmlfcmV2ZXJzZShuZXh0X2Nv" + "ZGVbbGVuXSsrLCBsZW4pOwoKICAgIC8vVHJhY2Vjdih0cmVlICE9IHN0YXRpY19sdHJlZSwgKHN0ZGVyciwiXG5uICUzZCAlYyBsICUyZCBjICU0eCAoJXgpICIsCiAgICAvLyAgICAgbiwgKGlzZ3JhcGgobikg" + "PyBuIDogJyAnKSwgbGVuLCB0cmVlW25dLkNvZGUsIG5leHRfY29kZVtsZW5dLTEpKTsKICB9Cn0KCgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09" + "PT09PT09PT09PT09PT09PT0KICogSW5pdGlhbGl6ZSB0aGUgdmFyaW91cyAnY29uc3RhbnQnIHRhYmxlcy4KICovCmZ1bmN0aW9uIHRyX3N0YXRpY19pbml0KCkgewogIHZhciBuOyAgICAgICAgLyogaXRlcmF0" + "ZXMgb3ZlciB0cmVlIGVsZW1lbnRzICovCiAgdmFyIGJpdHM7ICAgICAvKiBiaXQgY291bnRlciAqLwogIHZhciBsZW5ndGg7ICAgLyogbGVuZ3RoIHZhbHVlICovCiAgdmFyIGNvZGU7ICAgICAvKiBjb2RlIHZh" + "bHVlICovCiAgdmFyIGRpc3Q7ICAgICAvKiBkaXN0YW5jZSBpbmRleCAqLwogIHZhciBibF9jb3VudCA9IG5ldyBBcnJheShNQVhfQklUUyArIDEpOwogIC8qIG51bWJlciBvZiBjb2RlcyBhdCBlYWNoIGJpdCBs" + "ZW5ndGggZm9yIGFuIG9wdGltYWwgdHJlZSAqLwoKICAvLyBkbyBjaGVjayBpbiBfdHJfaW5pdCgpCiAgLy9pZiAoc3RhdGljX2luaXRfZG9uZSkgcmV0dXJuOwoKICAvKiBGb3Igc29tZSBlbWJlZGRlZCB0YXJn" + "ZXRzLCBnbG9iYWwgdmFyaWFibGVzIGFyZSBub3QgaW5pdGlhbGl6ZWQ6ICovCi8qI2lmZGVmIE5PX0lOSVRfR0xPQkFMX1BPSU5URVJTCiAgc3RhdGljX2xfZGVzYy5zdGF0aWNfdHJlZSA9IHN0YXRpY19sdHJl" + "ZTsKICBzdGF0aWNfbF9kZXNjLmV4dHJhX2JpdHMgPSBleHRyYV9sYml0czsKICBzdGF0aWNfZF9kZXNjLnN0YXRpY190cmVlID0gc3RhdGljX2R0cmVlOwogIHN0YXRpY19kX2Rlc2MuZXh0cmFfYml0cyA9IGV4" + "dHJhX2RiaXRzOwogIHN0YXRpY19ibF9kZXNjLmV4dHJhX2JpdHMgPSBleHRyYV9ibGJpdHM7CiNlbmRpZiovCgogIC8qIEluaXRpYWxpemUgdGhlIG1hcHBpbmcgbGVuZ3RoICgwLi4yNTUpIC0+IGxlbmd0aCBj" + "b2RlICgwLi4yOCkgKi8KICBsZW5ndGggPSAwOwogIGZvciAoY29kZSA9IDA7IGNvZGUgPCBMRU5HVEhfQ09ERVMgLSAxOyBjb2RlKyspIHsKICAgIGJhc2VfbGVuZ3RoW2NvZGVdID0gbGVuZ3RoOwogICAgZm9y" + "IChuID0gMDsgbiA8ICgxIDw8IGV4dHJhX2xiaXRzW2NvZGVdKTsgbisrKSB7CiAgICAgIF9sZW5ndGhfY29kZVtsZW5ndGgrK10gPSBjb2RlOwogICAgfQogIH0KICAvL0Fzc2VydCAobGVuZ3RoID09IDI1Niwg" + "InRyX3N0YXRpY19pbml0OiBsZW5ndGggIT0gMjU2Iik7CiAgLyogTm90ZSB0aGF0IHRoZSBsZW5ndGggMjU1IChtYXRjaCBsZW5ndGggMjU4KSBjYW4gYmUgcmVwcmVzZW50ZWQKICAgKiBpbiB0d28gZGlmZmVy" + "ZW50IHdheXM6IGNvZGUgMjg0ICsgNSBiaXRzIG9yIGNvZGUgMjg1LCBzbyB3ZQogICAqIG92ZXJ3cml0ZSBsZW5ndGhfY29kZVsyNTVdIHRvIHVzZSB0aGUgYmVzdCBlbmNvZGluZzoKICAgKi8KICBfbGVuZ3Ro" + "X2NvZGVbbGVuZ3RoIC0gMV0gPSBjb2RlOwoKICAvKiBJbml0aWFsaXplIHRoZSBtYXBwaW5nIGRpc3QgKDAuLjMySykgLT4gZGlzdCBjb2RlICgwLi4yOSkgKi8KICBkaXN0ID0gMDsKICBmb3IgKGNvZGUgPSAw" + "OyBjb2RlIDwgMTY7IGNvZGUrKykgewogICAgYmFzZV9kaXN0W2NvZGVdID0gZGlzdDsKICAgIGZvciAobiA9IDA7IG4gPCAoMSA8PCBleHRyYV9kYml0c1tjb2RlXSk7IG4rKykgewogICAgICBfZGlzdF9jb2Rl" + "W2Rpc3QrK10gPSBjb2RlOwogICAgfQogIH0KICAvL0Fzc2VydCAoZGlzdCA9PSAyNTYsICJ0cl9zdGF0aWNfaW5pdDogZGlzdCAhPSAyNTYiKTsKICBkaXN0ID4+PSA3OyAvKiBmcm9tIG5vdyBvbiwgYWxsIGRp" + "c3RhbmNlcyBhcmUgZGl2aWRlZCBieSAxMjggKi8KICBmb3IgKDsgY29kZSA8IERfQ09ERVM7IGNvZGUrKykgewogICAgYmFzZV9kaXN0W2NvZGVdID0gZGlzdCA8PCA3OwogICAgZm9yIChuID0gMDsgbiA8ICgx" + "IDw8IChleHRyYV9kYml0c1tjb2RlXSAtIDcpKTsgbisrKSB7CiAgICAgIF9kaXN0X2NvZGVbMjU2ICsgZGlzdCsrXSA9IGNvZGU7CiAgICB9CiAgfQogIC8vQXNzZXJ0IChkaXN0ID09IDI1NiwgInRyX3N0YXRp" + "Y19pbml0OiAyNTYrZGlzdCAhPSA1MTIiKTsKCiAgLyogQ29uc3RydWN0IHRoZSBjb2RlcyBvZiB0aGUgc3RhdGljIGxpdGVyYWwgdHJlZSAqLwogIGZvciAoYml0cyA9IDA7IGJpdHMgPD0gTUFYX0JJVFM7IGJp" + "dHMrKykgewogICAgYmxfY291bnRbYml0c10gPSAwOwogIH0KCiAgbiA9IDA7CiAgd2hpbGUgKG4gPD0gMTQzKSB7CiAgICBzdGF0aWNfbHRyZWVbbiAqIDIgKyAxXS8qLkxlbiovID0gODsKICAgIG4rKzsKICAg" + "IGJsX2NvdW50WzhdKys7CiAgfQogIHdoaWxlIChuIDw9IDI1NSkgewogICAgc3RhdGljX2x0cmVlW24gKiAyICsgMV0vKi5MZW4qLyA9IDk7CiAgICBuKys7CiAgICBibF9jb3VudFs5XSsrOwogIH0KICB3aGls" + "ZSAobiA8PSAyNzkpIHsKICAgIHN0YXRpY19sdHJlZVtuICogMiArIDFdLyouTGVuKi8gPSA3OwogICAgbisrOwogICAgYmxfY291bnRbN10rKzsKICB9CiAgd2hpbGUgKG4gPD0gMjg3KSB7CiAgICBzdGF0aWNf" + "bHRyZWVbbiAqIDIgKyAxXS8qLkxlbiovID0gODsKICAgIG4rKzsKICAgIGJsX2NvdW50WzhdKys7CiAgfQogIC8qIENvZGVzIDI4NiBhbmQgMjg3IGRvIG5vdCBleGlzdCwgYnV0IHdlIG11c3QgaW5jbHVkZSB0" + "aGVtIGluIHRoZQogICAqIHRyZWUgY29uc3RydWN0aW9uIHRvIGdldCBhIGNhbm9uaWNhbCBIdWZmbWFuIHRyZWUgKGxvbmdlc3QgY29kZQogICAqIGFsbCBvbmVzKQogICAqLwogIGdlbl9jb2RlcyhzdGF0aWNf" + "bHRyZWUsIExfQ09ERVMgKyAxLCBibF9jb3VudCk7CgogIC8qIFRoZSBzdGF0aWMgZGlzdGFuY2UgdHJlZSBpcyB0cml2aWFsOiAqLwogIGZvciAobiA9IDA7IG4gPCBEX0NPREVTOyBuKyspIHsKICAgIHN0YXRp" + "Y19kdHJlZVtuICogMiArIDFdLyouTGVuKi8gPSA1OwogICAgc3RhdGljX2R0cmVlW24gKiAyXS8qLkNvZGUqLyA9IGJpX3JldmVyc2UobiwgNSk7CiAgfQoKICAvLyBOb3cgZGF0YSByZWFkeSBhbmQgd2UgY2Fu" + "IGluaXQgc3RhdGljIHRyZWVzCiAgc3RhdGljX2xfZGVzYyA9IG5ldyBTdGF0aWNUcmVlRGVzYyhzdGF0aWNfbHRyZWUsIGV4dHJhX2xiaXRzLCBMSVRFUkFMUyArIDEsIExfQ09ERVMsIE1BWF9CSVRTKTsKICBz" + "dGF0aWNfZF9kZXNjID0gbmV3IFN0YXRpY1RyZWVEZXNjKHN0YXRpY19kdHJlZSwgZXh0cmFfZGJpdHMsIDAsICAgICAgICAgIERfQ09ERVMsIE1BWF9CSVRTKTsKICBzdGF0aWNfYmxfZGVzYyA9IG5ldyBTdGF0" + "aWNUcmVlRGVzYyhuZXcgQXJyYXkoMCksIGV4dHJhX2JsYml0cywgMCwgICAgICAgICBCTF9DT0RFUywgTUFYX0JMX0JJVFMpOwoKICAvL3N0YXRpY19pbml0X2RvbmUgPSB0cnVlOwp9CgoKLyogPT09PT09PT09" + "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIEluaXRpYWxpemUgYSBuZXcgYmxvY2suCiAqLwpmdW5jdGlvbiBpbml0X2Jsb2NrKHMp" + "IHsKICB2YXIgbjsgLyogaXRlcmF0ZXMgb3ZlciB0cmVlIGVsZW1lbnRzICovCgogIC8qIEluaXRpYWxpemUgdGhlIHRyZWVzLiAqLwogIGZvciAobiA9IDA7IG4gPCBMX0NPREVTOyAgbisrKSB7IHMuZHluX2x0" + "cmVlW24gKiAyXS8qLkZyZXEqLyA9IDA7IH0KICBmb3IgKG4gPSAwOyBuIDwgRF9DT0RFUzsgIG4rKykgeyBzLmR5bl9kdHJlZVtuICogMl0vKi5GcmVxKi8gPSAwOyB9CiAgZm9yIChuID0gMDsgbiA8IEJMX0NP" + "REVTOyBuKyspIHsgcy5ibF90cmVlW24gKiAyXS8qLkZyZXEqLyA9IDA7IH0KCiAgcy5keW5fbHRyZWVbRU5EX0JMT0NLICogMl0vKi5GcmVxKi8gPSAxOwogIHMub3B0X2xlbiA9IHMuc3RhdGljX2xlbiA9IDA7" + "CiAgcy5sYXN0X2xpdCA9IHMubWF0Y2hlcyA9IDA7Cn0KCgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogRmx1" + "c2ggdGhlIGJpdCBidWZmZXIgYW5kIGFsaWduIHRoZSBvdXRwdXQgb24gYSBieXRlIGJvdW5kYXJ5CiAqLwpmdW5jdGlvbiBiaV93aW5kdXAocykKewogIGlmIChzLmJpX3ZhbGlkID4gOCkgewogICAgcHV0X3No" + "b3J0KHMsIHMuYmlfYnVmKTsKICB9IGVsc2UgaWYgKHMuYmlfdmFsaWQgPiAwKSB7CiAgICAvL3B1dF9ieXRlKHMsIChCeXRlKXMtPmJpX2J1Zik7CiAgICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9IHMu" + "YmlfYnVmOwogIH0KICBzLmJpX2J1ZiA9IDA7CiAgcy5iaV92YWxpZCA9IDA7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09" + "PT09PT09PQogKiBDb3B5IGEgc3RvcmVkIGJsb2NrLCBzdG9yaW5nIGZpcnN0IHRoZSBsZW5ndGggYW5kIGl0cwogKiBvbmUncyBjb21wbGVtZW50IGlmIHJlcXVlc3RlZC4KICovCmZ1bmN0aW9uIGNvcHlfYmxv" + "Y2socywgYnVmLCBsZW4sIGhlYWRlcikKLy9EZWZsYXRlU3RhdGUgKnM7Ci8vY2hhcmYgICAgKmJ1ZjsgICAgLyogdGhlIGlucHV0IGRhdGEgKi8KLy91bnNpZ25lZCBsZW47ICAgICAvKiBpdHMgbGVuZ3RoICov" + "Ci8vaW50ICAgICAgaGVhZGVyOyAgLyogdHJ1ZSBpZiBibG9jayBoZWFkZXIgbXVzdCBiZSB3cml0dGVuICovCnsKICBiaV93aW5kdXAocyk7ICAgICAgICAvKiBhbGlnbiBvbiBieXRlIGJvdW5kYXJ5ICovCgog" + "IGlmIChoZWFkZXIpIHsKICAgIHB1dF9zaG9ydChzLCBsZW4pOwogICAgcHV0X3Nob3J0KHMsIH5sZW4pOwogIH0KLy8gIHdoaWxlIChsZW4tLSkgewovLyAgICBwdXRfYnl0ZShzLCAqYnVmKyspOwovLyAgfQog" + "IHV0aWxzLmFycmF5U2V0KHMucGVuZGluZ19idWYsIHMud2luZG93LCBidWYsIGxlbiwgcy5wZW5kaW5nKTsKICBzLnBlbmRpbmcgKz0gbGVuOwp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09" + "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogQ29tcGFyZXMgdG8gc3VidHJlZXMsIHVzaW5nIHRoZSB0cmVlIGRlcHRoIGFzIHRpZSBicmVha2VyIHdoZW4KICogdGhlIHN1" + "YnRyZWVzIGhhdmUgZXF1YWwgZnJlcXVlbmN5LiBUaGlzIG1pbmltaXplcyB0aGUgd29yc3QgY2FzZSBsZW5ndGguCiAqLwpmdW5jdGlvbiBzbWFsbGVyKHRyZWUsIG4sIG0sIGRlcHRoKSB7CiAgdmFyIF9uMiA9" + "IG4gKiAyOwogIHZhciBfbTIgPSBtICogMjsKICByZXR1cm4gKHRyZWVbX24yXS8qLkZyZXEqLyA8IHRyZWVbX20yXS8qLkZyZXEqLyB8fAogICAgICAgICAodHJlZVtfbjJdLyouRnJlcSovID09PSB0cmVlW19t" + "Ml0vKi5GcmVxKi8gJiYgZGVwdGhbbl0gPD0gZGVwdGhbbV0pKTsKfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09" + "CiAqIFJlc3RvcmUgdGhlIGhlYXAgcHJvcGVydHkgYnkgbW92aW5nIGRvd24gdGhlIHRyZWUgc3RhcnRpbmcgYXQgbm9kZSBrLAogKiBleGNoYW5naW5nIGEgbm9kZSB3aXRoIHRoZSBzbWFsbGVzdCBvZiBpdHMg" + "dHdvIHNvbnMgaWYgbmVjZXNzYXJ5LCBzdG9wcGluZwogKiB3aGVuIHRoZSBoZWFwIHByb3BlcnR5IGlzIHJlLWVzdGFibGlzaGVkIChlYWNoIGZhdGhlciBzbWFsbGVyIHRoYW4gaXRzCiAqIHR3byBzb25zKS4K" + "ICovCmZ1bmN0aW9uIHBxZG93bmhlYXAocywgdHJlZSwgaykKLy8gICAgZGVmbGF0ZV9zdGF0ZSAqczsKLy8gICAgY3RfZGF0YSAqdHJlZTsgIC8qIHRoZSB0cmVlIHRvIHJlc3RvcmUgKi8KLy8gICAgaW50IGs7" + "ICAgICAgICAgICAgICAgLyogbm9kZSB0byBtb3ZlIGRvd24gKi8KewogIHZhciB2ID0gcy5oZWFwW2tdOwogIHZhciBqID0gayA8PCAxOyAgLyogbGVmdCBzb24gb2YgayAqLwogIHdoaWxlIChqIDw9IHMuaGVh" + "cF9sZW4pIHsKICAgIC8qIFNldCBqIHRvIHRoZSBzbWFsbGVzdCBvZiB0aGUgdHdvIHNvbnM6ICovCiAgICBpZiAoaiA8IHMuaGVhcF9sZW4gJiYKICAgICAgc21hbGxlcih0cmVlLCBzLmhlYXBbaiArIDFdLCBz" + "LmhlYXBbal0sIHMuZGVwdGgpKSB7CiAgICAgIGorKzsKICAgIH0KICAgIC8qIEV4aXQgaWYgdiBpcyBzbWFsbGVyIHRoYW4gYm90aCBzb25zICovCiAgICBpZiAoc21hbGxlcih0cmVlLCB2LCBzLmhlYXBbal0s" + "IHMuZGVwdGgpKSB7IGJyZWFrOyB9CgogICAgLyogRXhjaGFuZ2UgdiB3aXRoIHRoZSBzbWFsbGVzdCBzb24gKi8KICAgIHMuaGVhcFtrXSA9IHMuaGVhcFtqXTsKICAgIGsgPSBqOwoKICAgIC8qIEFuZCBjb250" + "aW51ZSBkb3duIHRoZSB0cmVlLCBzZXR0aW5nIGogdG8gdGhlIGxlZnQgc29uIG9mIGsgKi8KICAgIGogPDw9IDE7CiAgfQogIHMuaGVhcFtrXSA9IHY7Cn0KCgovLyBpbmxpbmVkIG1hbnVhbGx5Ci8vIHZhciBT" + "TUFMTEVTVCA9IDE7CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogU2VuZCB0aGUgYmxvY2sgZGF0YSBjb21w" + "cmVzc2VkIHVzaW5nIHRoZSBnaXZlbiBIdWZmbWFuIHRyZWVzCiAqLwpmdW5jdGlvbiBjb21wcmVzc19ibG9jayhzLCBsdHJlZSwgZHRyZWUpCi8vICAgIGRlZmxhdGVfc3RhdGUgKnM7Ci8vICAgIGNvbnN0IGN0" + "X2RhdGEgKmx0cmVlOyAvKiBsaXRlcmFsIHRyZWUgKi8KLy8gICAgY29uc3QgY3RfZGF0YSAqZHRyZWU7IC8qIGRpc3RhbmNlIHRyZWUgKi8KewogIHZhciBkaXN0OyAgICAgICAgICAgLyogZGlzdGFuY2Ugb2Yg" + "bWF0Y2hlZCBzdHJpbmcgKi8KICB2YXIgbGM7ICAgICAgICAgICAgIC8qIG1hdGNoIGxlbmd0aCBvciB1bm1hdGNoZWQgY2hhciAoaWYgZGlzdCA9PSAwKSAqLwogIHZhciBseCA9IDA7ICAgICAgICAgLyogcnVu" + "bmluZyBpbmRleCBpbiBsX2J1ZiAqLwogIHZhciBjb2RlOyAgICAgICAgICAgLyogdGhlIGNvZGUgdG8gc2VuZCAqLwogIHZhciBleHRyYTsgICAgICAgICAgLyogbnVtYmVyIG9mIGV4dHJhIGJpdHMgdG8gc2Vu" + "ZCAqLwoKICBpZiAocy5sYXN0X2xpdCAhPT0gMCkgewogICAgZG8gewogICAgICBkaXN0ID0gKHMucGVuZGluZ19idWZbcy5kX2J1ZiArIGx4ICogMl0gPDwgOCkgfCAocy5wZW5kaW5nX2J1ZltzLmRfYnVmICsg" + "bHggKiAyICsgMV0pOwogICAgICBsYyA9IHMucGVuZGluZ19idWZbcy5sX2J1ZiArIGx4XTsKICAgICAgbHgrKzsKCiAgICAgIGlmIChkaXN0ID09PSAwKSB7CiAgICAgICAgc2VuZF9jb2RlKHMsIGxjLCBsdHJl" + "ZSk7IC8qIHNlbmQgYSBsaXRlcmFsIGJ5dGUgKi8KICAgICAgICAvL1RyYWNlY3YoaXNncmFwaChsYyksIChzdGRlcnIsIiAnJWMnICIsIGxjKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLyogSGVyZSwgbGMg" + "aXMgdGhlIG1hdGNoIGxlbmd0aCAtIE1JTl9NQVRDSCAqLwogICAgICAgIGNvZGUgPSBfbGVuZ3RoX2NvZGVbbGNdOwogICAgICAgIHNlbmRfY29kZShzLCBjb2RlICsgTElURVJBTFMgKyAxLCBsdHJlZSk7IC8q" + "IHNlbmQgdGhlIGxlbmd0aCBjb2RlICovCiAgICAgICAgZXh0cmEgPSBleHRyYV9sYml0c1tjb2RlXTsKICAgICAgICBpZiAoZXh0cmEgIT09IDApIHsKICAgICAgICAgIGxjIC09IGJhc2VfbGVuZ3RoW2NvZGVd" + "OwogICAgICAgICAgc2VuZF9iaXRzKHMsIGxjLCBleHRyYSk7ICAgICAgIC8qIHNlbmQgdGhlIGV4dHJhIGxlbmd0aCBiaXRzICovCiAgICAgICAgfQogICAgICAgIGRpc3QtLTsgLyogZGlzdCBpcyBub3cgdGhl" + "IG1hdGNoIGRpc3RhbmNlIC0gMSAqLwogICAgICAgIGNvZGUgPSBkX2NvZGUoZGlzdCk7CiAgICAgICAgLy9Bc3NlcnQgKGNvZGUgPCBEX0NPREVTLCAiYmFkIGRfY29kZSIpOwoKICAgICAgICBzZW5kX2NvZGUo" + "cywgY29kZSwgZHRyZWUpOyAgICAgICAvKiBzZW5kIHRoZSBkaXN0YW5jZSBjb2RlICovCiAgICAgICAgZXh0cmEgPSBleHRyYV9kYml0c1tjb2RlXTsKICAgICAgICBpZiAoZXh0cmEgIT09IDApIHsKICAgICAg" + "ICAgIGRpc3QgLT0gYmFzZV9kaXN0W2NvZGVdOwogICAgICAgICAgc2VuZF9iaXRzKHMsIGRpc3QsIGV4dHJhKTsgICAvKiBzZW5kIHRoZSBleHRyYSBkaXN0YW5jZSBiaXRzICovCiAgICAgICAgfQogICAgICB9" + "IC8qIGxpdGVyYWwgb3IgbWF0Y2ggcGFpciA/ICovCgogICAgICAvKiBDaGVjayB0aGF0IHRoZSBvdmVybGF5IGJldHdlZW4gcGVuZGluZ19idWYgYW5kIGRfYnVmK2xfYnVmIGlzIG9rOiAqLwogICAgICAvL0Fz" + "c2VydCgodUludCkocy0+cGVuZGluZykgPCBzLT5saXRfYnVmc2l6ZSArIDIqbHgsCiAgICAgIC8vICAgICAgICJwZW5kaW5nQnVmIG92ZXJmbG93Iik7CgogICAgfSB3aGlsZSAobHggPCBzLmxhc3RfbGl0KTsK" + "ICB9CgogIHNlbmRfY29kZShzLCBFTkRfQkxPQ0ssIGx0cmVlKTsKfQoKCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09" + "PQogKiBDb25zdHJ1Y3Qgb25lIEh1ZmZtYW4gdHJlZSBhbmQgYXNzaWducyB0aGUgY29kZSBiaXQgc3RyaW5ncyBhbmQgbGVuZ3Rocy4KICogVXBkYXRlIHRoZSB0b3RhbCBiaXQgbGVuZ3RoIGZvciB0aGUgY3Vy" + "cmVudCBibG9jay4KICogSU4gYXNzZXJ0aW9uOiB0aGUgZmllbGQgZnJlcSBpcyBzZXQgZm9yIGFsbCB0cmVlIGVsZW1lbnRzLgogKiBPVVQgYXNzZXJ0aW9uczogdGhlIGZpZWxkcyBsZW4gYW5kIGNvZGUgYXJl" + "IHNldCB0byB0aGUgb3B0aW1hbCBiaXQgbGVuZ3RoCiAqICAgICBhbmQgY29ycmVzcG9uZGluZyBjb2RlLiBUaGUgbGVuZ3RoIG9wdF9sZW4gaXMgdXBkYXRlZDsgc3RhdGljX2xlbiBpcwogKiAgICAgYWxzbyB1" + "cGRhdGVkIGlmIHN0cmVlIGlzIG5vdCBudWxsLiBUaGUgZmllbGQgbWF4X2NvZGUgaXMgc2V0LgogKi8KZnVuY3Rpb24gYnVpbGRfdHJlZShzLCBkZXNjKQovLyAgICBkZWZsYXRlX3N0YXRlICpzOwovLyAgICB0" + "cmVlX2Rlc2MgKmRlc2M7IC8qIHRoZSB0cmVlIGRlc2NyaXB0b3IgKi8KewogIHZhciB0cmVlICAgICA9IGRlc2MuZHluX3RyZWU7CiAgdmFyIHN0cmVlICAgID0gZGVzYy5zdGF0X2Rlc2Muc3RhdGljX3RyZWU7" + "CiAgdmFyIGhhc19zdHJlZSA9IGRlc2Muc3RhdF9kZXNjLmhhc19zdHJlZTsKICB2YXIgZWxlbXMgICAgPSBkZXNjLnN0YXRfZGVzYy5lbGVtczsKICB2YXIgbiwgbTsgICAgICAgICAgLyogaXRlcmF0ZSBvdmVy" + "IGhlYXAgZWxlbWVudHMgKi8KICB2YXIgbWF4X2NvZGUgPSAtMTsgLyogbGFyZ2VzdCBjb2RlIHdpdGggbm9uIHplcm8gZnJlcXVlbmN5ICovCiAgdmFyIG5vZGU7ICAgICAgICAgIC8qIG5ldyBub2RlIGJlaW5n" + "IGNyZWF0ZWQgKi8KCiAgLyogQ29uc3RydWN0IHRoZSBpbml0aWFsIGhlYXAsIHdpdGggbGVhc3QgZnJlcXVlbnQgZWxlbWVudCBpbgogICAqIGhlYXBbU01BTExFU1RdLiBUaGUgc29ucyBvZiBoZWFwW25dIGFy" + "ZSBoZWFwWzIqbl0gYW5kIGhlYXBbMipuKzFdLgogICAqIGhlYXBbMF0gaXMgbm90IHVzZWQuCiAgICovCiAgcy5oZWFwX2xlbiA9IDA7CiAgcy5oZWFwX21heCA9IEhFQVBfU0laRTsKCiAgZm9yIChuID0gMDsg" + "biA8IGVsZW1zOyBuKyspIHsKICAgIGlmICh0cmVlW24gKiAyXS8qLkZyZXEqLyAhPT0gMCkgewogICAgICBzLmhlYXBbKytzLmhlYXBfbGVuXSA9IG1heF9jb2RlID0gbjsKICAgICAgcy5kZXB0aFtuXSA9IDA7" + "CgogICAgfSBlbHNlIHsKICAgICAgdHJlZVtuICogMiArIDFdLyouTGVuKi8gPSAwOwogICAgfQogIH0KCiAgLyogVGhlIHBremlwIGZvcm1hdCByZXF1aXJlcyB0aGF0IGF0IGxlYXN0IG9uZSBkaXN0YW5jZSBj" + "b2RlIGV4aXN0cywKICAgKiBhbmQgdGhhdCBhdCBsZWFzdCBvbmUgYml0IHNob3VsZCBiZSBzZW50IGV2ZW4gaWYgdGhlcmUgaXMgb25seSBvbmUKICAgKiBwb3NzaWJsZSBjb2RlLiBTbyB0byBhdm9pZCBzcGVj" + "aWFsIGNoZWNrcyBsYXRlciBvbiB3ZSBmb3JjZSBhdCBsZWFzdAogICAqIHR3byBjb2RlcyBvZiBub24gemVybyBmcmVxdWVuY3kuCiAgICovCiAgd2hpbGUgKHMuaGVhcF9sZW4gPCAyKSB7CiAgICBub2RlID0g" + "cy5oZWFwWysrcy5oZWFwX2xlbl0gPSAobWF4X2NvZGUgPCAyID8gKyttYXhfY29kZSA6IDApOwogICAgdHJlZVtub2RlICogMl0vKi5GcmVxKi8gPSAxOwogICAgcy5kZXB0aFtub2RlXSA9IDA7CiAgICBzLm9w" + "dF9sZW4tLTsKCiAgICBpZiAoaGFzX3N0cmVlKSB7CiAgICAgIHMuc3RhdGljX2xlbiAtPSBzdHJlZVtub2RlICogMiArIDFdLyouTGVuKi87CiAgICB9CiAgICAvKiBub2RlIGlzIDAgb3IgMSBzbyBpdCBkb2Vz" + "IG5vdCBoYXZlIGV4dHJhIGJpdHMgKi8KICB9CiAgZGVzYy5tYXhfY29kZSA9IG1heF9jb2RlOwoKICAvKiBUaGUgZWxlbWVudHMgaGVhcFtoZWFwX2xlbi8yKzEgLi4gaGVhcF9sZW5dIGFyZSBsZWF2ZXMgb2Yg" + "dGhlIHRyZWUsCiAgICogZXN0YWJsaXNoIHN1Yi1oZWFwcyBvZiBpbmNyZWFzaW5nIGxlbmd0aHM6CiAgICovCiAgZm9yIChuID0gKHMuaGVhcF9sZW4gPj4gMS8qaW50IC8yKi8pOyBuID49IDE7IG4tLSkgeyBw" + "cWRvd25oZWFwKHMsIHRyZWUsIG4pOyB9CgogIC8qIENvbnN0cnVjdCB0aGUgSHVmZm1hbiB0cmVlIGJ5IHJlcGVhdGVkbHkgY29tYmluaW5nIHRoZSBsZWFzdCB0d28KICAgKiBmcmVxdWVudCBub2Rlcy4KICAg" + "Ki8KICBub2RlID0gZWxlbXM7ICAgICAgICAgICAgICAvKiBuZXh0IGludGVybmFsIG5vZGUgb2YgdGhlIHRyZWUgKi8KICBkbyB7CiAgICAvL3BxcmVtb3ZlKHMsIHRyZWUsIG4pOyAgLyogbiA9IG5vZGUgb2Yg" + "bGVhc3QgZnJlcXVlbmN5ICovCiAgICAvKioqIHBxcmVtb3ZlICoqKi8KICAgIG4gPSBzLmhlYXBbMS8qU01BTExFU1QqL107CiAgICBzLmhlYXBbMS8qU01BTExFU1QqL10gPSBzLmhlYXBbcy5oZWFwX2xlbi0t" + "XTsKICAgIHBxZG93bmhlYXAocywgdHJlZSwgMS8qU01BTExFU1QqLyk7CiAgICAvKioqLwoKICAgIG0gPSBzLmhlYXBbMS8qU01BTExFU1QqL107IC8qIG0gPSBub2RlIG9mIG5leHQgbGVhc3QgZnJlcXVlbmN5" + "ICovCgogICAgcy5oZWFwWy0tcy5oZWFwX21heF0gPSBuOyAvKiBrZWVwIHRoZSBub2RlcyBzb3J0ZWQgYnkgZnJlcXVlbmN5ICovCiAgICBzLmhlYXBbLS1zLmhlYXBfbWF4XSA9IG07CgogICAgLyogQ3JlYXRl" + "IGEgbmV3IG5vZGUgZmF0aGVyIG9mIG4gYW5kIG0gKi8KICAgIHRyZWVbbm9kZSAqIDJdLyouRnJlcSovID0gdHJlZVtuICogMl0vKi5GcmVxKi8gKyB0cmVlW20gKiAyXS8qLkZyZXEqLzsKICAgIHMuZGVwdGhb" + "bm9kZV0gPSAocy5kZXB0aFtuXSA+PSBzLmRlcHRoW21dID8gcy5kZXB0aFtuXSA6IHMuZGVwdGhbbV0pICsgMTsKICAgIHRyZWVbbiAqIDIgKyAxXS8qLkRhZCovID0gdHJlZVttICogMiArIDFdLyouRGFkKi8g" + "PSBub2RlOwoKICAgIC8qIGFuZCBpbnNlcnQgdGhlIG5ldyBub2RlIGluIHRoZSBoZWFwICovCiAgICBzLmhlYXBbMS8qU01BTExFU1QqL10gPSBub2RlKys7CiAgICBwcWRvd25oZWFwKHMsIHRyZWUsIDEvKlNN" + "QUxMRVNUKi8pOwoKICB9IHdoaWxlIChzLmhlYXBfbGVuID49IDIpOwoKICBzLmhlYXBbLS1zLmhlYXBfbWF4XSA9IHMuaGVhcFsxLypTTUFMTEVTVCovXTsKCiAgLyogQXQgdGhpcyBwb2ludCwgdGhlIGZpZWxk" + "cyBmcmVxIGFuZCBkYWQgYXJlIHNldC4gV2UgY2FuIG5vdwogICAqIGdlbmVyYXRlIHRoZSBiaXQgbGVuZ3Rocy4KICAgKi8KICBnZW5fYml0bGVuKHMsIGRlc2MpOwoKICAvKiBUaGUgZmllbGQgbGVuIGlzIG5v" + "dyBzZXQsIHdlIGNhbiBnZW5lcmF0ZSB0aGUgYml0IGNvZGVzICovCiAgZ2VuX2NvZGVzKHRyZWUsIG1heF9jb2RlLCBzLmJsX2NvdW50KTsKfQoKCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09" + "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBTY2FuIGEgbGl0ZXJhbCBvciBkaXN0YW5jZSB0cmVlIHRvIGRldGVybWluZSB0aGUgZnJlcXVlbmNpZXMgb2YgdGhlIGNvZGVz" + "CiAqIGluIHRoZSBiaXQgbGVuZ3RoIHRyZWUuCiAqLwpmdW5jdGlvbiBzY2FuX3RyZWUocywgdHJlZSwgbWF4X2NvZGUpCi8vICAgIGRlZmxhdGVfc3RhdGUgKnM7Ci8vICAgIGN0X2RhdGEgKnRyZWU7ICAgLyog" + "dGhlIHRyZWUgdG8gYmUgc2Nhbm5lZCAqLwovLyAgICBpbnQgbWF4X2NvZGU7ICAgIC8qIGFuZCBpdHMgbGFyZ2VzdCBjb2RlIG9mIG5vbiB6ZXJvIGZyZXF1ZW5jeSAqLwp7CiAgdmFyIG47ICAgICAgICAgICAg" + "ICAgICAgICAgLyogaXRlcmF0ZXMgb3ZlciBhbGwgdHJlZSBlbGVtZW50cyAqLwogIHZhciBwcmV2bGVuID0gLTE7ICAgICAgICAgIC8qIGxhc3QgZW1pdHRlZCBsZW5ndGggKi8KICB2YXIgY3VybGVuOyAgICAg" + "ICAgICAgICAgICAvKiBsZW5ndGggb2YgY3VycmVudCBjb2RlICovCgogIHZhciBuZXh0bGVuID0gdHJlZVswICogMiArIDFdLyouTGVuKi87IC8qIGxlbmd0aCBvZiBuZXh0IGNvZGUgKi8KCiAgdmFyIGNvdW50" + "ID0gMDsgICAgICAgICAgICAgLyogcmVwZWF0IGNvdW50IG9mIHRoZSBjdXJyZW50IGNvZGUgKi8KICB2YXIgbWF4X2NvdW50ID0gNzsgICAgICAgICAvKiBtYXggcmVwZWF0IGNvdW50ICovCiAgdmFyIG1pbl9j" + "b3VudCA9IDQ7ICAgICAgICAgLyogbWluIHJlcGVhdCBjb3VudCAqLwoKICBpZiAobmV4dGxlbiA9PT0gMCkgewogICAgbWF4X2NvdW50ID0gMTM4OwogICAgbWluX2NvdW50ID0gMzsKICB9CiAgdHJlZVsobWF4" + "X2NvZGUgKyAxKSAqIDIgKyAxXS8qLkxlbiovID0gMHhmZmZmOyAvKiBndWFyZCAqLwoKICBmb3IgKG4gPSAwOyBuIDw9IG1heF9jb2RlOyBuKyspIHsKICAgIGN1cmxlbiA9IG5leHRsZW47CiAgICBuZXh0bGVu" + "ID0gdHJlZVsobiArIDEpICogMiArIDFdLyouTGVuKi87CgogICAgaWYgKCsrY291bnQgPCBtYXhfY291bnQgJiYgY3VybGVuID09PSBuZXh0bGVuKSB7CiAgICAgIGNvbnRpbnVlOwoKICAgIH0gZWxzZSBpZiAo" + "Y291bnQgPCBtaW5fY291bnQpIHsKICAgICAgcy5ibF90cmVlW2N1cmxlbiAqIDJdLyouRnJlcSovICs9IGNvdW50OwoKICAgIH0gZWxzZSBpZiAoY3VybGVuICE9PSAwKSB7CgogICAgICBpZiAoY3VybGVuICE9" + "PSBwcmV2bGVuKSB7IHMuYmxfdHJlZVtjdXJsZW4gKiAyXS8qLkZyZXEqLysrOyB9CiAgICAgIHMuYmxfdHJlZVtSRVBfM182ICogMl0vKi5GcmVxKi8rKzsKCiAgICB9IGVsc2UgaWYgKGNvdW50IDw9IDEwKSB7" + "CiAgICAgIHMuYmxfdHJlZVtSRVBaXzNfMTAgKiAyXS8qLkZyZXEqLysrOwoKICAgIH0gZWxzZSB7CiAgICAgIHMuYmxfdHJlZVtSRVBaXzExXzEzOCAqIDJdLyouRnJlcSovKys7CiAgICB9CgogICAgY291bnQg" + "PSAwOwogICAgcHJldmxlbiA9IGN1cmxlbjsKCiAgICBpZiAobmV4dGxlbiA9PT0gMCkgewogICAgICBtYXhfY291bnQgPSAxMzg7CiAgICAgIG1pbl9jb3VudCA9IDM7CgogICAgfSBlbHNlIGlmIChjdXJsZW4g" + "PT09IG5leHRsZW4pIHsKICAgICAgbWF4X2NvdW50ID0gNjsKICAgICAgbWluX2NvdW50ID0gMzsKCiAgICB9IGVsc2UgewogICAgICBtYXhfY291bnQgPSA3OwogICAgICBtaW5fY291bnQgPSA0OwogICAgfQog" + "IH0KfQoKCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBTZW5kIGEgbGl0ZXJhbCBvciBkaXN0YW5jZSB0cmVl" + "IGluIGNvbXByZXNzZWQgZm9ybSwgdXNpbmcgdGhlIGNvZGVzIGluCiAqIGJsX3RyZWUuCiAqLwpmdW5jdGlvbiBzZW5kX3RyZWUocywgdHJlZSwgbWF4X2NvZGUpCi8vICAgIGRlZmxhdGVfc3RhdGUgKnM7Ci8v" + "ICAgIGN0X2RhdGEgKnRyZWU7IC8qIHRoZSB0cmVlIHRvIGJlIHNjYW5uZWQgKi8KLy8gICAgaW50IG1heF9jb2RlOyAgICAgICAvKiBhbmQgaXRzIGxhcmdlc3QgY29kZSBvZiBub24gemVybyBmcmVxdWVuY3kg" + "Ki8KewogIHZhciBuOyAgICAgICAgICAgICAgICAgICAgIC8qIGl0ZXJhdGVzIG92ZXIgYWxsIHRyZWUgZWxlbWVudHMgKi8KICB2YXIgcHJldmxlbiA9IC0xOyAgICAgICAgICAvKiBsYXN0IGVtaXR0ZWQgbGVu" + "Z3RoICovCiAgdmFyIGN1cmxlbjsgICAgICAgICAgICAgICAgLyogbGVuZ3RoIG9mIGN1cnJlbnQgY29kZSAqLwoKICB2YXIgbmV4dGxlbiA9IHRyZWVbMCAqIDIgKyAxXS8qLkxlbiovOyAvKiBsZW5ndGggb2Yg" + "bmV4dCBjb2RlICovCgogIHZhciBjb3VudCA9IDA7ICAgICAgICAgICAgIC8qIHJlcGVhdCBjb3VudCBvZiB0aGUgY3VycmVudCBjb2RlICovCiAgdmFyIG1heF9jb3VudCA9IDc7ICAgICAgICAgLyogbWF4IHJl" + "cGVhdCBjb3VudCAqLwogIHZhciBtaW5fY291bnQgPSA0OyAgICAgICAgIC8qIG1pbiByZXBlYXQgY291bnQgKi8KCiAgLyogdHJlZVttYXhfY29kZSsxXS5MZW4gPSAtMTsgKi8gIC8qIGd1YXJkIGFscmVhZHkg" + "c2V0ICovCiAgaWYgKG5leHRsZW4gPT09IDApIHsKICAgIG1heF9jb3VudCA9IDEzODsKICAgIG1pbl9jb3VudCA9IDM7CiAgfQoKICBmb3IgKG4gPSAwOyBuIDw9IG1heF9jb2RlOyBuKyspIHsKICAgIGN1cmxl" + "biA9IG5leHRsZW47CiAgICBuZXh0bGVuID0gdHJlZVsobiArIDEpICogMiArIDFdLyouTGVuKi87CgogICAgaWYgKCsrY291bnQgPCBtYXhfY291bnQgJiYgY3VybGVuID09PSBuZXh0bGVuKSB7CiAgICAgIGNv" + "bnRpbnVlOwoKICAgIH0gZWxzZSBpZiAoY291bnQgPCBtaW5fY291bnQpIHsKICAgICAgZG8geyBzZW5kX2NvZGUocywgY3VybGVuLCBzLmJsX3RyZWUpOyB9IHdoaWxlICgtLWNvdW50ICE9PSAwKTsKCiAgICB9" + "IGVsc2UgaWYgKGN1cmxlbiAhPT0gMCkgewogICAgICBpZiAoY3VybGVuICE9PSBwcmV2bGVuKSB7CiAgICAgICAgc2VuZF9jb2RlKHMsIGN1cmxlbiwgcy5ibF90cmVlKTsKICAgICAgICBjb3VudC0tOwogICAg" + "ICB9CiAgICAgIC8vQXNzZXJ0KGNvdW50ID49IDMgJiYgY291bnQgPD0gNiwgIiAzXzY/Iik7CiAgICAgIHNlbmRfY29kZShzLCBSRVBfM182LCBzLmJsX3RyZWUpOwogICAgICBzZW5kX2JpdHMocywgY291bnQg" + "LSAzLCAyKTsKCiAgICB9IGVsc2UgaWYgKGNvdW50IDw9IDEwKSB7CiAgICAgIHNlbmRfY29kZShzLCBSRVBaXzNfMTAsIHMuYmxfdHJlZSk7CiAgICAgIHNlbmRfYml0cyhzLCBjb3VudCAtIDMsIDMpOwoKICAg" + "IH0gZWxzZSB7CiAgICAgIHNlbmRfY29kZShzLCBSRVBaXzExXzEzOCwgcy5ibF90cmVlKTsKICAgICAgc2VuZF9iaXRzKHMsIGNvdW50IC0gMTEsIDcpOwogICAgfQoKICAgIGNvdW50ID0gMDsKICAgIHByZXZs" + "ZW4gPSBjdXJsZW47CiAgICBpZiAobmV4dGxlbiA9PT0gMCkgewogICAgICBtYXhfY291bnQgPSAxMzg7CiAgICAgIG1pbl9jb3VudCA9IDM7CgogICAgfSBlbHNlIGlmIChjdXJsZW4gPT09IG5leHRsZW4pIHsK" + "ICAgICAgbWF4X2NvdW50ID0gNjsKICAgICAgbWluX2NvdW50ID0gMzsKCiAgICB9IGVsc2UgewogICAgICBtYXhfY291bnQgPSA3OwogICAgICBtaW5fY291bnQgPSA0OwogICAgfQogIH0KfQoKCi8qID09PT09" + "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBDb25zdHJ1Y3QgdGhlIEh1ZmZtYW4gdHJlZSBmb3IgdGhlIGJpdCBsZW5ndGhz" + "IGFuZCByZXR1cm4gdGhlIGluZGV4IGluCiAqIGJsX29yZGVyIG9mIHRoZSBsYXN0IGJpdCBsZW5ndGggY29kZSB0byBzZW5kLgogKi8KZnVuY3Rpb24gYnVpbGRfYmxfdHJlZShzKSB7CiAgdmFyIG1heF9ibGlu" + "ZGV4OyAgLyogaW5kZXggb2YgbGFzdCBiaXQgbGVuZ3RoIGNvZGUgb2Ygbm9uIHplcm8gZnJlcSAqLwoKICAvKiBEZXRlcm1pbmUgdGhlIGJpdCBsZW5ndGggZnJlcXVlbmNpZXMgZm9yIGxpdGVyYWwgYW5kIGRp" + "c3RhbmNlIHRyZWVzICovCiAgc2Nhbl90cmVlKHMsIHMuZHluX2x0cmVlLCBzLmxfZGVzYy5tYXhfY29kZSk7CiAgc2Nhbl90cmVlKHMsIHMuZHluX2R0cmVlLCBzLmRfZGVzYy5tYXhfY29kZSk7CgogIC8qIEJ1" + "aWxkIHRoZSBiaXQgbGVuZ3RoIHRyZWU6ICovCiAgYnVpbGRfdHJlZShzLCBzLmJsX2Rlc2MpOwogIC8qIG9wdF9sZW4gbm93IGluY2x1ZGVzIHRoZSBsZW5ndGggb2YgdGhlIHRyZWUgcmVwcmVzZW50YXRpb25z" + "LCBleGNlcHQKICAgKiB0aGUgbGVuZ3RocyBvZiB0aGUgYml0IGxlbmd0aHMgY29kZXMgYW5kIHRoZSA1KzUrNCBiaXRzIGZvciB0aGUgY291bnRzLgogICAqLwoKICAvKiBEZXRlcm1pbmUgdGhlIG51bWJlciBv" + "ZiBiaXQgbGVuZ3RoIGNvZGVzIHRvIHNlbmQuIFRoZSBwa3ppcCBmb3JtYXQKICAgKiByZXF1aXJlcyB0aGF0IGF0IGxlYXN0IDQgYml0IGxlbmd0aCBjb2RlcyBiZSBzZW50LiAoYXBwbm90ZS50eHQgc2F5cwog" + "ICAqIDMgYnV0IHRoZSBhY3R1YWwgdmFsdWUgdXNlZCBpcyA0LikKICAgKi8KICBmb3IgKG1heF9ibGluZGV4ID0gQkxfQ09ERVMgLSAxOyBtYXhfYmxpbmRleCA+PSAzOyBtYXhfYmxpbmRleC0tKSB7CiAgICBp" + "ZiAocy5ibF90cmVlW2JsX29yZGVyW21heF9ibGluZGV4XSAqIDIgKyAxXS8qLkxlbiovICE9PSAwKSB7CiAgICAgIGJyZWFrOwogICAgfQogIH0KICAvKiBVcGRhdGUgb3B0X2xlbiB0byBpbmNsdWRlIHRoZSBi" + "aXQgbGVuZ3RoIHRyZWUgYW5kIGNvdW50cyAqLwogIHMub3B0X2xlbiArPSAzICogKG1heF9ibGluZGV4ICsgMSkgKyA1ICsgNSArIDQ7CiAgLy9UcmFjZXYoKHN0ZGVyciwgIlxuZHluIHRyZWVzOiBkeW4gJWxk" + "LCBzdGF0ICVsZCIsCiAgLy8gICAgICAgIHMtPm9wdF9sZW4sIHMtPnN0YXRpY19sZW4pKTsKCiAgcmV0dXJuIG1heF9ibGluZGV4Owp9CgoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09" + "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIFNlbmQgdGhlIGhlYWRlciBmb3IgYSBibG9jayB1c2luZyBkeW5hbWljIEh1ZmZtYW4gdHJlZXM6IHRoZSBjb3VudHMsIHRoZQogKiBs" + "ZW5ndGhzIG9mIHRoZSBiaXQgbGVuZ3RoIGNvZGVzLCB0aGUgbGl0ZXJhbCB0cmVlIGFuZCB0aGUgZGlzdGFuY2UgdHJlZS4KICogSU4gYXNzZXJ0aW9uOiBsY29kZXMgPj0gMjU3LCBkY29kZXMgPj0gMSwgYmxj" + "b2RlcyA+PSA0LgogKi8KZnVuY3Rpb24gc2VuZF9hbGxfdHJlZXMocywgbGNvZGVzLCBkY29kZXMsIGJsY29kZXMpCi8vICAgIGRlZmxhdGVfc3RhdGUgKnM7Ci8vICAgIGludCBsY29kZXMsIGRjb2RlcywgYmxj" + "b2RlczsgLyogbnVtYmVyIG9mIGNvZGVzIGZvciBlYWNoIHRyZWUgKi8KewogIHZhciByYW5rOyAgICAgICAgICAgICAgICAgICAgLyogaW5kZXggaW4gYmxfb3JkZXIgKi8KCiAgLy9Bc3NlcnQgKGxjb2RlcyA+" + "PSAyNTcgJiYgZGNvZGVzID49IDEgJiYgYmxjb2RlcyA+PSA0LCAibm90IGVub3VnaCBjb2RlcyIpOwogIC8vQXNzZXJ0IChsY29kZXMgPD0gTF9DT0RFUyAmJiBkY29kZXMgPD0gRF9DT0RFUyAmJiBibGNvZGVz" + "IDw9IEJMX0NPREVTLAogIC8vICAgICAgICAidG9vIG1hbnkgY29kZXMiKTsKICAvL1RyYWNldigoc3RkZXJyLCAiXG5ibCBjb3VudHM6ICIpKTsKICBzZW5kX2JpdHMocywgbGNvZGVzIC0gMjU3LCA1KTsgLyog" + "bm90ICsyNTUgYXMgc3RhdGVkIGluIGFwcG5vdGUudHh0ICovCiAgc2VuZF9iaXRzKHMsIGRjb2RlcyAtIDEsICAgNSk7CiAgc2VuZF9iaXRzKHMsIGJsY29kZXMgLSA0LCAgNCk7IC8qIG5vdCAtMyBhcyBzdGF0" + "ZWQgaW4gYXBwbm90ZS50eHQgKi8KICBmb3IgKHJhbmsgPSAwOyByYW5rIDwgYmxjb2RlczsgcmFuaysrKSB7CiAgICAvL1RyYWNldigoc3RkZXJyLCAiXG5ibCBjb2RlICUyZCAiLCBibF9vcmRlcltyYW5rXSkp" + "OwogICAgc2VuZF9iaXRzKHMsIHMuYmxfdHJlZVtibF9vcmRlcltyYW5rXSAqIDIgKyAxXS8qLkxlbiovLCAzKTsKICB9CiAgLy9UcmFjZXYoKHN0ZGVyciwgIlxuYmwgdHJlZTogc2VudCAlbGQiLCBzLT5iaXRz" + "X3NlbnQpKTsKCiAgc2VuZF90cmVlKHMsIHMuZHluX2x0cmVlLCBsY29kZXMgLSAxKTsgLyogbGl0ZXJhbCB0cmVlICovCiAgLy9UcmFjZXYoKHN0ZGVyciwgIlxubGl0IHRyZWU6IHNlbnQgJWxkIiwgcy0+Yml0" + "c19zZW50KSk7CgogIHNlbmRfdHJlZShzLCBzLmR5bl9kdHJlZSwgZGNvZGVzIC0gMSk7IC8qIGRpc3RhbmNlIHRyZWUgKi8KICAvL1RyYWNldigoc3RkZXJyLCAiXG5kaXN0IHRyZWU6IHNlbnQgJWxkIiwgcy0+" + "Yml0c19zZW50KSk7Cn0KCgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogQ2hlY2sgaWYgdGhlIGRhdGEgdHlw" + "ZSBpcyBURVhUIG9yIEJJTkFSWSwgdXNpbmcgdGhlIGZvbGxvd2luZyBhbGdvcml0aG06CiAqIC0gVEVYVCBpZiB0aGUgdHdvIGNvbmRpdGlvbnMgYmVsb3cgYXJlIHNhdGlzZmllZDoKICogICAgYSkgVGhlcmUg" + "YXJlIG5vIG5vbi1wb3J0YWJsZSBjb250cm9sIGNoYXJhY3RlcnMgYmVsb25naW5nIHRvIHRoZQogKiAgICAgICAiYmxhY2sgbGlzdCIgKDAuLjYsIDE0Li4yNSwgMjguLjMxKS4KICogICAgYikgVGhlcmUgaXMg" + "YXQgbGVhc3Qgb25lIHByaW50YWJsZSBjaGFyYWN0ZXIgYmVsb25naW5nIHRvIHRoZQogKiAgICAgICAid2hpdGUgbGlzdCIgKDkge1RBQn0sIDEwIHtMRn0sIDEzIHtDUn0sIDMyLi4yNTUpLgogKiAtIEJJTkFS" + "WSBvdGhlcndpc2UuCiAqIC0gVGhlIGZvbGxvd2luZyBwYXJ0aWFsbHktcG9ydGFibGUgY29udHJvbCBjaGFyYWN0ZXJzIGZvcm0gYQogKiAgICJncmF5IGxpc3QiIHRoYXQgaXMgaWdub3JlZCBpbiB0aGlzIGRl" + "dGVjdGlvbiBhbGdvcml0aG06CiAqICAgKDcge0JFTH0sIDgge0JTfSwgMTEge1ZUfSwgMTIge0ZGfSwgMjYge1NVQn0sIDI3IHtFU0N9KS4KICogSU4gYXNzZXJ0aW9uOiB0aGUgZmllbGRzIEZyZXEgb2YgZHlu" + "X2x0cmVlIGFyZSBzZXQuCiAqLwpmdW5jdGlvbiBkZXRlY3RfZGF0YV90eXBlKHMpIHsKICAvKiBibGFja19tYXNrIGlzIHRoZSBiaXQgbWFzayBvZiBibGFjay1saXN0ZWQgYnl0ZXMKICAgKiBzZXQgYml0cyAw" + "Li42LCAxNC4uMjUsIGFuZCAyOC4uMzEKICAgKiAweGYzZmZjMDdmID0gYmluYXJ5IDExMTEwMDExMTExMTExMTExMTAwMDAwMDAxMTExMTExCiAgICovCiAgdmFyIGJsYWNrX21hc2sgPSAweGYzZmZjMDdmOwog" + "IHZhciBuOwoKICAvKiBDaGVjayBmb3Igbm9uLXRleHR1YWwgKCJibGFjay1saXN0ZWQiKSBieXRlcy4gKi8KICBmb3IgKG4gPSAwOyBuIDw9IDMxOyBuKyssIGJsYWNrX21hc2sgPj4+PSAxKSB7CiAgICBpZiAo" + "KGJsYWNrX21hc2sgJiAxKSAmJiAocy5keW5fbHRyZWVbbiAqIDJdLyouRnJlcSovICE9PSAwKSkgewogICAgICByZXR1cm4gWl9CSU5BUlk7CiAgICB9CiAgfQoKICAvKiBDaGVjayBmb3IgdGV4dHVhbCAoIndo" + "aXRlLWxpc3RlZCIpIGJ5dGVzLiAqLwogIGlmIChzLmR5bl9sdHJlZVs5ICogMl0vKi5GcmVxKi8gIT09IDAgfHwgcy5keW5fbHRyZWVbMTAgKiAyXS8qLkZyZXEqLyAhPT0gMCB8fAogICAgICBzLmR5bl9sdHJl" + "ZVsxMyAqIDJdLyouRnJlcSovICE9PSAwKSB7CiAgICByZXR1cm4gWl9URVhUOwogIH0KICBmb3IgKG4gPSAzMjsgbiA8IExJVEVSQUxTOyBuKyspIHsKICAgIGlmIChzLmR5bl9sdHJlZVtuICogMl0vKi5GcmVx" + "Ki8gIT09IDApIHsKICAgICAgcmV0dXJuIFpfVEVYVDsKICAgIH0KICB9CgogIC8qIFRoZXJlIGFyZSBubyAiYmxhY2stbGlzdGVkIiBvciAid2hpdGUtbGlzdGVkIiBieXRlczoKICAgKiB0aGlzIHN0cmVhbSBl" + "aXRoZXIgaXMgZW1wdHkgb3IgaGFzIHRvbGVyYXRlZCAoImdyYXktbGlzdGVkIikgYnl0ZXMgb25seS4KICAgKi8KICByZXR1cm4gWl9CSU5BUlk7Cn0KCgp2YXIgc3RhdGljX2luaXRfZG9uZSA9IGZhbHNlOwoK" + "LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIEluaXRpYWxpemUgdGhlIHRyZWUgZGF0YSBzdHJ1Y3R1cmVzIGZv" + "ciBhIG5ldyB6bGliIHN0cmVhbS4KICovCmZ1bmN0aW9uIF90cl9pbml0KHMpCnsKCiAgaWYgKCFzdGF0aWNfaW5pdF9kb25lKSB7CiAgICB0cl9zdGF0aWNfaW5pdCgpOwogICAgc3RhdGljX2luaXRfZG9uZSA9" + "IHRydWU7CiAgfQoKICBzLmxfZGVzYyAgPSBuZXcgVHJlZURlc2Mocy5keW5fbHRyZWUsIHN0YXRpY19sX2Rlc2MpOwogIHMuZF9kZXNjICA9IG5ldyBUcmVlRGVzYyhzLmR5bl9kdHJlZSwgc3RhdGljX2RfZGVz" + "Yyk7CiAgcy5ibF9kZXNjID0gbmV3IFRyZWVEZXNjKHMuYmxfdHJlZSwgc3RhdGljX2JsX2Rlc2MpOwoKICBzLmJpX2J1ZiA9IDA7CiAgcy5iaV92YWxpZCA9IDA7CgogIC8qIEluaXRpYWxpemUgdGhlIGZpcnN0" + "IGJsb2NrIG9mIHRoZSBmaXJzdCBmaWxlOiAqLwogIGluaXRfYmxvY2socyk7Cn0KCgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09" + "PT09PT09PT0KICogU2VuZCBhIHN0b3JlZCBibG9jawogKi8KZnVuY3Rpb24gX3RyX3N0b3JlZF9ibG9jayhzLCBidWYsIHN0b3JlZF9sZW4sIGxhc3QpCi8vRGVmbGF0ZVN0YXRlICpzOwovL2NoYXJmICpidWY7" + "ICAgICAgIC8qIGlucHV0IGJsb2NrICovCi8vdWxnIHN0b3JlZF9sZW47ICAgLyogbGVuZ3RoIG9mIGlucHV0IGJsb2NrICovCi8vaW50IGxhc3Q7ICAgICAgICAgLyogb25lIGlmIHRoaXMgaXMgdGhlIGxhc3Qg" + "YmxvY2sgZm9yIGEgZmlsZSAqLwp7CiAgc2VuZF9iaXRzKHMsIChTVE9SRURfQkxPQ0sgPDwgMSkgKyAobGFzdCA/IDEgOiAwKSwgMyk7ICAgIC8qIHNlbmQgYmxvY2sgdHlwZSAqLwogIGNvcHlfYmxvY2socywg" + "YnVmLCBzdG9yZWRfbGVuLCB0cnVlKTsgLyogd2l0aCBoZWFkZXIgKi8KfQoKCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09" + "PT09PQogKiBTZW5kIG9uZSBlbXB0eSBzdGF0aWMgYmxvY2sgdG8gZ2l2ZSBlbm91Z2ggbG9va2FoZWFkIGZvciBpbmZsYXRlLgogKiBUaGlzIHRha2VzIDEwIGJpdHMsIG9mIHdoaWNoIDcgbWF5IHJlbWFpbiBp" + "biB0aGUgYml0IGJ1ZmZlci4KICovCmZ1bmN0aW9uIF90cl9hbGlnbihzKSB7CiAgc2VuZF9iaXRzKHMsIFNUQVRJQ19UUkVFUyA8PCAxLCAzKTsKICBzZW5kX2NvZGUocywgRU5EX0JMT0NLLCBzdGF0aWNfbHRy" + "ZWUpOwogIGJpX2ZsdXNoKHMpOwp9CgoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIERldGVybWluZSB0aGUg" + "YmVzdCBlbmNvZGluZyBmb3IgdGhlIGN1cnJlbnQgYmxvY2s6IGR5bmFtaWMgdHJlZXMsIHN0YXRpYwogKiB0cmVlcyBvciBzdG9yZSwgYW5kIG91dHB1dCB0aGUgZW5jb2RlZCBibG9jayB0byB0aGUgemlwIGZp" + "bGUuCiAqLwpmdW5jdGlvbiBfdHJfZmx1c2hfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCBsYXN0KQovL0RlZmxhdGVTdGF0ZSAqczsKLy9jaGFyZiAqYnVmOyAgICAgICAvKiBpbnB1dCBibG9jaywgb3IgTlVM" + "TCBpZiB0b28gb2xkICovCi8vdWxnIHN0b3JlZF9sZW47ICAgLyogbGVuZ3RoIG9mIGlucHV0IGJsb2NrICovCi8vaW50IGxhc3Q7ICAgICAgICAgLyogb25lIGlmIHRoaXMgaXMgdGhlIGxhc3QgYmxvY2sgZm9y" + "IGEgZmlsZSAqLwp7CiAgdmFyIG9wdF9sZW5iLCBzdGF0aWNfbGVuYjsgIC8qIG9wdF9sZW4gYW5kIHN0YXRpY19sZW4gaW4gYnl0ZXMgKi8KICB2YXIgbWF4X2JsaW5kZXggPSAwOyAgICAgICAgLyogaW5kZXgg" + "b2YgbGFzdCBiaXQgbGVuZ3RoIGNvZGUgb2Ygbm9uIHplcm8gZnJlcSAqLwoKICAvKiBCdWlsZCB0aGUgSHVmZm1hbiB0cmVlcyB1bmxlc3MgYSBzdG9yZWQgYmxvY2sgaXMgZm9yY2VkICovCiAgaWYgKHMubGV2" + "ZWwgPiAwKSB7CgogICAgLyogQ2hlY2sgaWYgdGhlIGZpbGUgaXMgYmluYXJ5IG9yIHRleHQgKi8KICAgIGlmIChzLnN0cm0uZGF0YV90eXBlID09PSBaX1VOS05PV04pIHsKICAgICAgcy5zdHJtLmRhdGFfdHlw" + "ZSA9IGRldGVjdF9kYXRhX3R5cGUocyk7CiAgICB9CgogICAgLyogQ29uc3RydWN0IHRoZSBsaXRlcmFsIGFuZCBkaXN0YW5jZSB0cmVlcyAqLwogICAgYnVpbGRfdHJlZShzLCBzLmxfZGVzYyk7CiAgICAvLyBU" + "cmFjZXYoKHN0ZGVyciwgIlxubGl0IGRhdGE6IGR5biAlbGQsIHN0YXQgJWxkIiwgcy0+b3B0X2xlbiwKICAgIC8vICAgICAgICBzLT5zdGF0aWNfbGVuKSk7CgogICAgYnVpbGRfdHJlZShzLCBzLmRfZGVzYyk7" + "CiAgICAvLyBUcmFjZXYoKHN0ZGVyciwgIlxuZGlzdCBkYXRhOiBkeW4gJWxkLCBzdGF0ICVsZCIsIHMtPm9wdF9sZW4sCiAgICAvLyAgICAgICAgcy0+c3RhdGljX2xlbikpOwogICAgLyogQXQgdGhpcyBwb2lu" + "dCwgb3B0X2xlbiBhbmQgc3RhdGljX2xlbiBhcmUgdGhlIHRvdGFsIGJpdCBsZW5ndGhzIG9mCiAgICAgKiB0aGUgY29tcHJlc3NlZCBibG9jayBkYXRhLCBleGNsdWRpbmcgdGhlIHRyZWUgcmVwcmVzZW50YXRp" + "b25zLgogICAgICovCgogICAgLyogQnVpbGQgdGhlIGJpdCBsZW5ndGggdHJlZSBmb3IgdGhlIGFib3ZlIHR3byB0cmVlcywgYW5kIGdldCB0aGUgaW5kZXgKICAgICAqIGluIGJsX29yZGVyIG9mIHRoZSBsYXN0" + "IGJpdCBsZW5ndGggY29kZSB0byBzZW5kLgogICAgICovCiAgICBtYXhfYmxpbmRleCA9IGJ1aWxkX2JsX3RyZWUocyk7CgogICAgLyogRGV0ZXJtaW5lIHRoZSBiZXN0IGVuY29kaW5nLiBDb21wdXRlIHRoZSBi" + "bG9jayBsZW5ndGhzIGluIGJ5dGVzLiAqLwogICAgb3B0X2xlbmIgPSAocy5vcHRfbGVuICsgMyArIDcpID4+PiAzOwogICAgc3RhdGljX2xlbmIgPSAocy5zdGF0aWNfbGVuICsgMyArIDcpID4+PiAzOwoKICAg" + "IC8vIFRyYWNldigoc3RkZXJyLCAiXG5vcHQgJWx1KCVsdSkgc3RhdCAlbHUoJWx1KSBzdG9yZWQgJWx1IGxpdCAldSAiLAogICAgLy8gICAgICAgIG9wdF9sZW5iLCBzLT5vcHRfbGVuLCBzdGF0aWNfbGVuYiwg" + "cy0+c3RhdGljX2xlbiwgc3RvcmVkX2xlbiwKICAgIC8vICAgICAgICBzLT5sYXN0X2xpdCkpOwoKICAgIGlmIChzdGF0aWNfbGVuYiA8PSBvcHRfbGVuYikgeyBvcHRfbGVuYiA9IHN0YXRpY19sZW5iOyB9Cgog" + "IH0gZWxzZSB7CiAgICAvLyBBc3NlcnQoYnVmICE9IChjaGFyKikwLCAibG9zdCBidWYiKTsKICAgIG9wdF9sZW5iID0gc3RhdGljX2xlbmIgPSBzdG9yZWRfbGVuICsgNTsgLyogZm9yY2UgYSBzdG9yZWQgYmxv" + "Y2sgKi8KICB9CgogIGlmICgoc3RvcmVkX2xlbiArIDQgPD0gb3B0X2xlbmIpICYmIChidWYgIT09IC0xKSkgewogICAgLyogNDogdHdvIHdvcmRzIGZvciB0aGUgbGVuZ3RocyAqLwoKICAgIC8qIFRoZSB0ZXN0" + "IGJ1ZiAhPSBOVUxMIGlzIG9ubHkgbmVjZXNzYXJ5IGlmIExJVF9CVUZTSVpFID4gV1NJWkUuCiAgICAgKiBPdGhlcndpc2Ugd2UgY2FuJ3QgaGF2ZSBwcm9jZXNzZWQgbW9yZSB0aGFuIFdTSVpFIGlucHV0IGJ5" + "dGVzIHNpbmNlCiAgICAgKiB0aGUgbGFzdCBibG9jayBmbHVzaCwgYmVjYXVzZSBjb21wcmVzc2lvbiB3b3VsZCBoYXZlIGJlZW4KICAgICAqIHN1Y2Nlc3NmdWwuIElmIExJVF9CVUZTSVpFIDw9IFdTSVpFLCBp" + "dCBpcyBuZXZlciB0b28gbGF0ZSB0bwogICAgICogdHJhbnNmb3JtIGEgYmxvY2sgaW50byBhIHN0b3JlZCBibG9jay4KICAgICAqLwogICAgX3RyX3N0b3JlZF9ibG9jayhzLCBidWYsIHN0b3JlZF9sZW4sIGxh" + "c3QpOwoKICB9IGVsc2UgaWYgKHMuc3RyYXRlZ3kgPT09IFpfRklYRUQgfHwgc3RhdGljX2xlbmIgPT09IG9wdF9sZW5iKSB7CgogICAgc2VuZF9iaXRzKHMsIChTVEFUSUNfVFJFRVMgPDwgMSkgKyAobGFzdCA/" + "IDEgOiAwKSwgMyk7CiAgICBjb21wcmVzc19ibG9jayhzLCBzdGF0aWNfbHRyZWUsIHN0YXRpY19kdHJlZSk7CgogIH0gZWxzZSB7CiAgICBzZW5kX2JpdHMocywgKERZTl9UUkVFUyA8PCAxKSArIChsYXN0ID8g" + "MSA6IDApLCAzKTsKICAgIHNlbmRfYWxsX3RyZWVzKHMsIHMubF9kZXNjLm1heF9jb2RlICsgMSwgcy5kX2Rlc2MubWF4X2NvZGUgKyAxLCBtYXhfYmxpbmRleCArIDEpOwogICAgY29tcHJlc3NfYmxvY2socywg" + "cy5keW5fbHRyZWUsIHMuZHluX2R0cmVlKTsKICB9CiAgLy8gQXNzZXJ0IChzLT5jb21wcmVzc2VkX2xlbiA9PSBzLT5iaXRzX3NlbnQsICJiYWQgY29tcHJlc3NlZCBzaXplIik7CiAgLyogVGhlIGFib3ZlIGNo" + "ZWNrIGlzIG1hZGUgbW9kIDJeMzIsIGZvciBmaWxlcyBsYXJnZXIgdGhhbiA1MTIgTUIKICAgKiBhbmQgdUxvbmcgaW1wbGVtZW50ZWQgb24gMzIgYml0cy4KICAgKi8KICBpbml0X2Jsb2NrKHMpOwoKICBpZiAo" + "bGFzdCkgewogICAgYmlfd2luZHVwKHMpOwogIH0KICAvLyBUcmFjZXYoKHN0ZGVyciwiXG5jb21wcmxlbiAlbHUoJWx1KSAiLCBzLT5jb21wcmVzc2VkX2xlbj4+MywKICAvLyAgICAgICBzLT5jb21wcmVzc2Vk" + "X2xlbi03Kmxhc3QpKTsKfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIFNhdmUgdGhlIG1hdGNoIGluZm8g" + "YW5kIHRhbGx5IHRoZSBmcmVxdWVuY3kgY291bnRzLiBSZXR1cm4gdHJ1ZSBpZgogKiB0aGUgY3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNoZWQuCiAqLwpmdW5jdGlvbiBfdHJfdGFsbHkocywgZGlzdCwgbGMp" + "Ci8vICAgIGRlZmxhdGVfc3RhdGUgKnM7Ci8vICAgIHVuc2lnbmVkIGRpc3Q7ICAvKiBkaXN0YW5jZSBvZiBtYXRjaGVkIHN0cmluZyAqLwovLyAgICB1bnNpZ25lZCBsYzsgICAgLyogbWF0Y2ggbGVuZ3RoLU1J" + "Tl9NQVRDSCBvciB1bm1hdGNoZWQgY2hhciAoaWYgZGlzdD09MCkgKi8KewogIC8vdmFyIG91dF9sZW5ndGgsIGluX2xlbmd0aCwgZGNvZGU7CgogIHMucGVuZGluZ19idWZbcy5kX2J1ZiArIHMubGFzdF9saXQg" + "KiAyXSAgICAgPSAoZGlzdCA+Pj4gOCkgJiAweGZmOwogIHMucGVuZGluZ19idWZbcy5kX2J1ZiArIHMubGFzdF9saXQgKiAyICsgMV0gPSBkaXN0ICYgMHhmZjsKCiAgcy5wZW5kaW5nX2J1ZltzLmxfYnVmICsg" + "cy5sYXN0X2xpdF0gPSBsYyAmIDB4ZmY7CiAgcy5sYXN0X2xpdCsrOwoKICBpZiAoZGlzdCA9PT0gMCkgewogICAgLyogbGMgaXMgdGhlIHVubWF0Y2hlZCBjaGFyICovCiAgICBzLmR5bl9sdHJlZVtsYyAqIDJd" + "LyouRnJlcSovKys7CiAgfSBlbHNlIHsKICAgIHMubWF0Y2hlcysrOwogICAgLyogSGVyZSwgbGMgaXMgdGhlIG1hdGNoIGxlbmd0aCAtIE1JTl9NQVRDSCAqLwogICAgZGlzdC0tOyAgICAgICAgICAgICAvKiBk" + "aXN0ID0gbWF0Y2ggZGlzdGFuY2UgLSAxICovCiAgICAvL0Fzc2VydCgodXNoKWRpc3QgPCAodXNoKU1BWF9ESVNUKHMpICYmCiAgICAvLyAgICAgICAodXNoKWxjIDw9ICh1c2gpKE1BWF9NQVRDSC1NSU5fTUFU" + "Q0gpICYmCiAgICAvLyAgICAgICAodXNoKWRfY29kZShkaXN0KSA8ICh1c2gpRF9DT0RFUywgICJfdHJfdGFsbHk6IGJhZCBtYXRjaCIpOwoKICAgIHMuZHluX2x0cmVlWyhfbGVuZ3RoX2NvZGVbbGNdICsgTElU" + "RVJBTFMgKyAxKSAqIDJdLyouRnJlcSovKys7CiAgICBzLmR5bl9kdHJlZVtkX2NvZGUoZGlzdCkgKiAyXS8qLkZyZXEqLysrOwogIH0KCi8vICghKSBUaGlzIGJsb2NrIGlzIGRpc2FibGVkIGluIHpsaWIgZGVm" + "YWlsdHMsCi8vIGRvbid0IGVuYWJsZSBpdCBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHkKCi8vI2lmZGVmIFRSVU5DQVRFX0JMT0NLCi8vICAvKiBUcnkgdG8gZ3Vlc3MgaWYgaXQgaXMgcHJvZml0YWJsZSB0byBz" + "dG9wIHRoZSBjdXJyZW50IGJsb2NrIGhlcmUgKi8KLy8gIGlmICgocy5sYXN0X2xpdCAmIDB4MWZmZikgPT09IDAgJiYgcy5sZXZlbCA+IDIpIHsKLy8gICAgLyogQ29tcHV0ZSBhbiB1cHBlciBib3VuZCBmb3Ig" + "dGhlIGNvbXByZXNzZWQgbGVuZ3RoICovCi8vICAgIG91dF9sZW5ndGggPSBzLmxhc3RfbGl0Kjg7Ci8vICAgIGluX2xlbmd0aCA9IHMuc3Ryc3RhcnQgLSBzLmJsb2NrX3N0YXJ0OwovLwovLyAgICBmb3IgKGRj" + "b2RlID0gMDsgZGNvZGUgPCBEX0NPREVTOyBkY29kZSsrKSB7Ci8vICAgICAgb3V0X2xlbmd0aCArPSBzLmR5bl9kdHJlZVtkY29kZSoyXS8qLkZyZXEqLyAqICg1ICsgZXh0cmFfZGJpdHNbZGNvZGVdKTsKLy8g" + "ICAgfQovLyAgICBvdXRfbGVuZ3RoID4+Pj0gMzsKLy8gICAgLy9UcmFjZXYoKHN0ZGVyciwiXG5sYXN0X2xpdCAldSwgaW4gJWxkLCBvdXQgfiVsZCglbGQlJSkgIiwKLy8gICAgLy8gICAgICAgcy0+bGFzdF9s" + "aXQsIGluX2xlbmd0aCwgb3V0X2xlbmd0aCwKLy8gICAgLy8gICAgICAgMTAwTCAtIG91dF9sZW5ndGgqMTAwTC9pbl9sZW5ndGgpKTsKLy8gICAgaWYgKHMubWF0Y2hlcyA8IChzLmxhc3RfbGl0Pj4xKS8qaW50" + "IC8yKi8gJiYgb3V0X2xlbmd0aCA8IChpbl9sZW5ndGg+PjEpLyppbnQgLzIqLykgewovLyAgICAgIHJldHVybiB0cnVlOwovLyAgICB9Ci8vICB9Ci8vI2VuZGlmCgogIHJldHVybiAocy5sYXN0X2xpdCA9PT0g" + "cy5saXRfYnVmc2l6ZSAtIDEpOwogIC8qIFdlIGF2b2lkIGVxdWFsaXR5IHdpdGggbGl0X2J1ZnNpemUgYmVjYXVzZSBvZiB3cmFwYXJvdW5kIGF0IDY0SwogICAqIG9uIDE2IGJpdCBtYWNoaW5lcyBhbmQgYmVj" + "YXVzZSBzdG9yZWQgYmxvY2tzIGFyZSByZXN0cmljdGVkIHRvCiAgICogNjRLLTEgYnl0ZXMuCiAgICovCn0KCmV4cG9ydHMuX3RyX2luaXQgID0gX3RyX2luaXQ7CmV4cG9ydHMuX3RyX3N0b3JlZF9ibG9jayA9" + "IF90cl9zdG9yZWRfYmxvY2s7CmV4cG9ydHMuX3RyX2ZsdXNoX2Jsb2NrICA9IF90cl9mbHVzaF9ibG9jazsKZXhwb3J0cy5fdHJfdGFsbHkgPSBfdHJfdGFsbHk7CmV4cG9ydHMuX3RyX2FsaWduID0gX3RyX2Fs" + "aWduOwoKfSx7Ii4uL3V0aWxzL2NvbW1vbiI6NDF9XSw1MzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsKCi8vIChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBh" + "bmQgTWFyayBBZGxlcgovLyAoQykgMjAxNC0yMDE3IFZpdGFseSBQdXpyaW4gYW5kIEFuZHJleSBUdXBpdHNpbgovLwovLyBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4" + "cHJlc3Mgb3IgaW1wbGllZAovLyB3YXJyYW50eS4gSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKLy8gYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhp" + "cyBzb2Z0d2FyZS4KLy8KLy8gUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCi8vIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0" + "aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKLy8gZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgovLwovLyAxLiBUaGUgb3JpZ2luIG9mIHRoaXMg" + "c29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAovLyAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3" + "YXJlCi8vICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCi8vICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KLy8g" + "Mi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKLy8gICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29m" + "dHdhcmUuCi8vIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCgpmdW5jdGlvbiBaU3RyZWFtKCkgewogIC8qIG5leHQgaW5w" + "dXQgYnl0ZSAqLwogIHRoaXMuaW5wdXQgPSBudWxsOyAvLyBKUyBzcGVjaWZpYywgYmVjYXVzZSB3ZSBoYXZlIG5vIHBvaW50ZXJzCiAgdGhpcy5uZXh0X2luID0gMDsKICAvKiBudW1iZXIgb2YgYnl0ZXMgYXZh" + "aWxhYmxlIGF0IGlucHV0ICovCiAgdGhpcy5hdmFpbF9pbiA9IDA7CiAgLyogdG90YWwgbnVtYmVyIG9mIGlucHV0IGJ5dGVzIHJlYWQgc28gZmFyICovCiAgdGhpcy50b3RhbF9pbiA9IDA7CiAgLyogbmV4dCBv" + "dXRwdXQgYnl0ZSBzaG91bGQgYmUgcHV0IHRoZXJlICovCiAgdGhpcy5vdXRwdXQgPSBudWxsOyAvLyBKUyBzcGVjaWZpYywgYmVjYXVzZSB3ZSBoYXZlIG5vIHBvaW50ZXJzCiAgdGhpcy5uZXh0X291dCA9IDA7" + "CiAgLyogcmVtYWluaW5nIGZyZWUgc3BhY2UgYXQgb3V0cHV0ICovCiAgdGhpcy5hdmFpbF9vdXQgPSAwOwogIC8qIHRvdGFsIG51bWJlciBvZiBieXRlcyBvdXRwdXQgc28gZmFyICovCiAgdGhpcy50b3RhbF9v" + "dXQgPSAwOwogIC8qIGxhc3QgZXJyb3IgbWVzc2FnZSwgTlVMTCBpZiBubyBlcnJvciAqLwogIHRoaXMubXNnID0gJycvKlpfTlVMTCovOwogIC8qIG5vdCB2aXNpYmxlIGJ5IGFwcGxpY2F0aW9ucyAqLwogIHRo" + "aXMuc3RhdGUgPSBudWxsOwogIC8qIGJlc3QgZ3Vlc3MgYWJvdXQgdGhlIGRhdGEgdHlwZTogYmluYXJ5IG9yIHRleHQgKi8KICB0aGlzLmRhdGFfdHlwZSA9IDIvKlpfVU5LTk9XTiovOwogIC8qIGFkbGVyMzIg" + "dmFsdWUgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhICovCiAgdGhpcy5hZGxlciA9IDA7Cn0KCm1vZHVsZS5leHBvcnRzID0gWlN0cmVhbTsKCn0se31dLDU0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv" + "cnRzKXsKJ3VzZSBzdHJpY3QnOwptb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicgPyBzZXRJbW1lZGlhdGUgOgoJZnVuY3Rpb24gc2V0SW1tZWRpYXRlKCkgewoJCXZh" + "ciBhcmdzID0gW10uc2xpY2UuYXBwbHkoYXJndW1lbnRzKTsKCQlhcmdzLnNwbGljZSgxLCAwLCAwKTsKCQlzZXRUaW1lb3V0LmFwcGx5KG51bGwsIGFyZ3MpOwoJfTsKCn0se31dfSx7fSxbMTBdKSgxMCkKfSk7" ); core.threads = Thread.createWorkerPool({ extcode: "var JSZip = null, window = {};\r\n" + EncodingClass.exportCode() + "\r\n" + wCode + " \r\n", modules: {core: blobcore}, afunc: function (params, callbackfunc) { if (JSZip === null) JSZip = window.JSZip; core[params.name](params, callbackfunc); } }); wCode = null; retval.setMaxThread = function (n) { core.threads.maxThread = n; }; var cfuncList = ["compressContent", "compress", "extract", "compressContentu8", "compressu8", "extractu8"]; var i; for (i = 0; i < cfuncList.length; i++) { retval[cfuncList[i]] = function (core, fname) { return function (content, callbackfunc, transferList) { if (transferList === undefined) transferList = []; core.threads.acall({ params: { name: fname, params: content }, transferList: transferList, callbackfunc: callbackfunc }); } } (core, cfuncList[i]); } retval.compressToFile = function (ZipWorkerClass) { return function (filename, content) { ZipWorkerClass.compress(content, function (filename) { return function (content) { FormClass.saveAs(filename, content); } } (filename)); } } (retval); retval.compressFilesFromInput = function (ZipWorkerClass) { return function (fileinput, callbackfunc) { FormClass.readFileFromInput(fileinput, function(callbackfunc) { return function(rv) { var flist = []; var i; for (i = 0; i < rv.length; i++) { flist.push({ type: "file", name: rv[i].name, content: rv[i].content }); } ZipWorkerClass.compress(flist, callbackfunc); } } (callbackfunc)); } } (retval); retval.compressedFilesFromInputToFile = function (ZipWorkerClass) { return function (fileinput, filename) { ZipWorkerClass.compressFilesFromInput(fileinput, function (filename) { return function (content) { var xurl = window.URL || window.webkitURL; if (xurl == null) return false; var element = document.createElement('a'); if (element == null) return false; var xcontent = []; var i; for (i = 0; i < content.length; i++) { xcontent.push(content.charCodeAt(i)); } content = new Uint8Array(xcontent); xcontent = null; element.setAttribute('href', xurl.createObjectURL(new Blob([content], {type: "application/zip"}))); element.setAttribute('download', filename); element.style.display = 'none'; document.body.appendChild(element); element.click(); document.body.removeChild(element); //saveAs(content, "example.zip"); } } (filename)); } } (retval); retval.execCode = function (ZipWorkerClass) { return function (content, callbackfunc) { var f = function (callbackfunc) { return function (files) { var i, xf, rv = []; var keys = Object.keys(files); for (i = 0; i < keys.length; i++) { try { xf = new Function (files[keys[i]].content); rv.push({ file: keys[i], value: xf() }); } catch(err) { console.log(err); console.log(files[keys[i]].content); ZipWorkerClass.lastErrorExecCode = files[keys[i]].content; } } if ((callbackfunc !== undefined) && (callbackfunc !== null)) { if (EncodingClass.type.isFunction(callbackfunc)) { callbackfunc(rv); } } }; } (callbackfunc); ZipWorkerClass.extract([{ content: content }], f); } } (retval); retval.extractFilesFromInput = function (ZipWorkerClass) { return function (fileinput, callbackfunc) { FormClass.readFileFromInput(fileinput, function(ZipWorkerClass, callbackfunc) { return function(content) { ZipWorkerClass.extract([{content: content[0].content}], callbackfunc); } } (ZipWorkerClass, callbackfunc)); } } (retval); return retval; } ()); if (window.ModuleManagerClass !== undefined) { ModuleManagerClass.register({ name: "ZipWorkerClass", prerequisites: ["EncodingClass"] }); }