If you are watching on your mobile phone, rotate the screen or set the page view as Desktop Site*.


*(Google Chrome - tap the three dots icon in the top right corner of the screen to open up the main menu. Look down the list and you’ll see an option for Desktop site. Tap this and you should see the site automatically revert to the desktop version.)


*( Safari - click the “aA” icon available in the top corner positioned before the address bar. It opens the website view menu. From the available options, choose the “Request Desktop Website” option.)




<div jsname="jkaScf" jscontroller="szRU7e" class="w536ob" data-enable-interaction="true" data-url="https://1893567929-atari-embeds.googleusercontent.com/embeds/16cb204cf3a9d4d223a0a3fd8b0eec5d/inner-frame-minified.html" data-code=" <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <style>body{background-color:white;}</style> <script src="data:application/javascript;base64,LyoqDQogKiBjb3JlLWpzIDIuNi4xMQ0KICogaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMNCiAqIExpY2Vuc2U6IGh0dHA6Ly9yb2NrLm1pdC1saWNlbnNlLm9yZw0KICogwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYNCiAqLw0KIWZ1bmN0aW9uKGUsaSxKdCl7InVzZSBzdHJpY3QiOyFmdW5jdGlvbihyKXt2YXIgZT17fTtmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKHQpe2lmKGVbdF0pcmV0dXJuIGVbdF0uZXhwb3J0czt2YXIgbj1lW3RdPXtpOnQsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gclt0XS5jYWxsKG4uZXhwb3J0cyxuLG4uZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKSxuLmw9ITAsbi5leHBvcnRzfV9fd2VicGFja19yZXF1aXJlX18ubT1yLF9fd2VicGFja19yZXF1aXJlX18uYz1lLF9fd2VicGFja19yZXF1aXJlX18uZD1mdW5jdGlvbih0LG4scil7X193ZWJwYWNrX3JlcXVpcmVfXy5vKHQsbil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4se2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDpyfSl9LF9fd2VicGFja19yZXF1aXJlX18ubj1mdW5jdGlvbih0KXt2YXIgbj10JiZ0Ll9fZXNNb2R1bGU/ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpe3JldHVybiB0WyJkZWZhdWx0Il19OmZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKXtyZXR1cm4gdH07cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18uZChuLCJhIixuKSxufSxfX3dlYnBhY2tfcmVxdWlyZV9fLm89ZnVuY3Rpb24odCxuKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil9LF9fd2VicGFja19yZXF1aXJlX18ucD0iIixfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucz0xMjkpfShbZnVuY3Rpb24odCxuLHIpe3ZhciB2PXIoMiksZz1yKDI2KSx5PXIoMTEpLGQ9cigxMiksYj1yKDE4KSxTPSJwcm90b3R5cGUiLF89ZnVuY3Rpb24odCxuLHIpe3ZhciBlLGksbyx1LGM9dCZfLkYsYT10Jl8uRyxmPXQmXy5QLHM9dCZfLkIsbD1hP3Y6dCZfLlM/dltuXXx8KHZbbl09e30pOih2W25dfHx7fSlbU10saD1hP2c6Z1tuXXx8KGdbbl09e30pLHA9aFtTXXx8KGhbU109e30pO2ZvcihlIGluIGEmJihyPW4pLHIpbz0oKGk9IWMmJmwmJmxbZV0hPT1KdCk/bDpyKVtlXSx1PXMmJmk/YihvLHYpOmYmJiJmdW5jdGlvbiI9PXR5cGVvZiBvP2IoRnVuY3Rpb24uY2FsbCxvKTpvLGwmJmQobCxlLG8sdCZfLlUpLGhbZV0hPW8mJnkoaCxlLHUpLGYmJnBbZV0hPW8mJihwW2VdPW8pfTt2LmNvcmU9ZyxfLkY9MSxfLkc9MixfLlM9NCxfLlA9OCxfLkI9MTYsXy5XPTMyLF8uVT02NCxfLlI9MTI4LHQuZXhwb3J0cz1ffSxmdW5jdGlvbih0LG4scil7dmFyIGU9cig0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIWUodCkpdGhyb3cgVHlwZUVycm9yKHQrIiBpcyBub3QgYW4gb2JqZWN0ISIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxuKXt2YXIgcj10LmV4cG9ydHM9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5NYXRoPT1NYXRoP3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJnNlbGYuTWF0aD09TWF0aD9zZWxmOkZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7Im51bWJlciI9PXR5cGVvZiBpJiYoaT1yKX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiEhdCgpfWNhdGNoKG4pe3JldHVybiEwfX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdD9udWxsIT09dDoiZnVuY3Rpb24iPT10eXBlb2YgdH19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDQ3KSgid2tzIiksaT1yKDMzKSxvPXIoMikuU3ltYm9sLHU9ImZ1bmN0aW9uIj09dHlwZW9mIG87KHQuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZVt0XXx8KGVbdF09dSYmb1t0XXx8KHU/bzppKSgiU3ltYm9sLiIrdCkpfSkuc3RvcmU9ZX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMjApLGk9TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiAwPHQ/aShlKHQpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSxmdW5jdGlvbih0LG4scil7dC5leHBvcnRzPSFyKDMpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBpPXIoMSksbz1yKDkzKSx1PXIoMjIpLGM9T2JqZWN0LmRlZmluZVByb3BlcnR5O24uZj1yKDcpP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0LG4scil7aWYoaSh0KSxuPXUobiwhMCksaShyKSxvKXRyeXtyZXR1cm4gYyh0LG4scil9Y2F0Y2goZSl7fWlmKCJnZXQiaW4gcnx8InNldCJpbiByKXRocm93IFR5cGVFcnJvcigiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhIik7cmV0dXJuInZhbHVlImluIHImJih0W25dPXIudmFsdWUpLHR9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigyMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QoZSh0KSl9fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBUeXBlRXJyb3IodCsiIGlzIG5vdCBhIGZ1bmN0aW9uISIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoOCksaT1yKDMyKTt0LmV4cG9ydHM9cig3KT9mdW5jdGlvbih0LG4scil7cmV0dXJuIGUuZih0LG4saSgxLHIpKX06ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0W25dPXIsdH19LGZ1bmN0aW9uKHQsbixyKXt2YXIgbz1yKDIpLHU9cigxMSksYz1yKDE0KSxhPXIoMzMpKCJzcmMiKSxlPXIoMTMxKSxpPSJ0b1N0cmluZyIsZj0oIiIrZSkuc3BsaXQoaSk7cigyNikuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gZS5jYWxsKHQpfSwodC5leHBvcnRzPWZ1bmN0aW9uKHQsbixyLGUpe3ZhciBpPSJmdW5jdGlvbiI9PXR5cGVvZiByO2kmJihjKHIsIm5hbWUiKXx8dShyLCJuYW1lIixuKSksdFtuXSE9PXImJihpJiYoYyhyLGEpfHx1KHIsYSx0W25dPyIiK3Rbbl06Zi5qb2luKFN0cmluZyhuKSkpKSx0PT09bz90W25dPXI6ZT90W25dP3Rbbl09cjp1KHQsbixyKTooZGVsZXRlIHRbbl0sdSh0LG4scikpKX0pKEZ1bmN0aW9uLnByb3RvdHlwZSxpLGZ1bmN0aW9uIHRvU3RyaW5nKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMmJnRoaXNbYV18fGUuY2FsbCh0aGlzKX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxpPXIoMyksdT1yKDIzKSxjPS8iL2csbz1mdW5jdGlvbih0LG4scixlKXt2YXIgaT1TdHJpbmcodSh0KSksbz0iPCIrbjtyZXR1cm4iIiE9PXImJihvKz0iICIrcisnPSInK1N0cmluZyhlKS5yZXBsYWNlKGMsIiZxdW90OyIpKyciJyksbysiPiIraSsiPC8iK24rIj4ifTt0LmV4cG9ydHM9ZnVuY3Rpb24obix0KXt2YXIgcj17fTtyW25dPXQobyksZShlLlArZS5GKmkoZnVuY3Rpb24oKXt2YXIgdD0iIltuXSgnIicpO3JldHVybiB0IT09dC50b0xvd2VyQ2FzZSgpfHwzPHQuc3BsaXQoJyInKS5sZW5ndGh9KSwiU3RyaW5nIixyKX19LGZ1bmN0aW9uKHQsbil7dmFyIHI9e30uaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHIuY2FsbCh0LG4pfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoNDgpLGk9cigyMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBlKGkodCkpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoNDkpLGk9cigzMiksbz1yKDE1KSx1PXIoMjIpLGM9cigxNCksYT1yKDkzKSxmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7bi5mPXIoNyk/ZjpmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKXtpZih0PW8odCksbj11KG4sITApLGEpdHJ5e3JldHVybiBmKHQsbil9Y2F0Y2gocil7fWlmKGModCxuKSlyZXR1cm4gaSghZS5mLmNhbGwodCxuKSx0W25dKX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDE0KSxpPXIoOSksbz1yKDY4KSgiSUVfUFJPVE8iKSx1PU9iamVjdC5wcm90b3R5cGU7dC5leHBvcnRzPU9iamVjdC5nZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24odCl7cmV0dXJuIHQ9aSh0KSxlKHQsbyk/dFtvXToiZnVuY3Rpb24iPT10eXBlb2YgdC5jb25zdHJ1Y3RvciYmdCBpbnN0YW5jZW9mIHQuY29uc3RydWN0b3I/dC5jb25zdHJ1Y3Rvci5wcm90b3R5cGU6dCBpbnN0YW5jZW9mIE9iamVjdD91Om51bGx9fSxmdW5jdGlvbih0LG4scil7dmFyIG89cigxMCk7dC5leHBvcnRzPWZ1bmN0aW9uKGUsaSx0KXtpZihvKGUpLGk9PT1KdClyZXR1cm4gZTtzd2l0Y2godCl7Y2FzZSAxOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5jYWxsKGksdCl9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5jYWxsKGksdCxuKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIGUuY2FsbChpLHQsbixyKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkoaSxhcmd1bWVudHMpfX19LGZ1bmN0aW9uKHQsbil7dmFyIHI9e30udG9TdHJpbmc7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByLmNhbGwodCkuc2xpY2UoOCwtMSl9fSxmdW5jdGlvbih0LG4pe3ZhciByPU1hdGguY2VpbCxlPU1hdGguZmxvb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpc05hTih0PSt0KT8wOigwPHQ/ZTpyKSh0KX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiEhdCYmZShmdW5jdGlvbigpe24/dC5jYWxsKG51bGwsZnVuY3Rpb24oKXt9LDEpOnQuY2FsbChudWxsKX0pfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBpPXIoNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7aWYoIWkodCkpcmV0dXJuIHQ7dmFyIHIsZTtpZihuJiYiZnVuY3Rpb24iPT10eXBlb2Yocj10LnRvU3RyaW5nKSYmIWkoZT1yLmNhbGwodCkpKXJldHVybiBlO2lmKCJmdW5jdGlvbiI9PXR5cGVvZihyPXQudmFsdWVPZikmJiFpKGU9ci5jYWxsKHQpKSlyZXR1cm4gZTtpZighbiYmImZ1bmN0aW9uIj09dHlwZW9mKHI9dC50b1N0cmluZykmJiFpKGU9ci5jYWxsKHQpKSlyZXR1cm4gZTt0aHJvdyBUeXBlRXJyb3IoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYodD09SnQpdGhyb3cgVHlwZUVycm9yKCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgIit0KTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbixyKXt2YXIgaT1yKDApLG89cigyNiksdT1yKDMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3ZhciByPShvLk9iamVjdHx8e30pW3RdfHxPYmplY3RbdF0sZT17fTtlW3RdPW4ociksaShpLlMraS5GKnUoZnVuY3Rpb24oKXtyKDEpfSksIk9iamVjdCIsZSl9fSxmdW5jdGlvbih0LG4scil7dmFyIFM9cigxOCksXz1yKDQ4KSx4PXIoOSksbT1yKDYpLGU9cig4NCk7dC5leHBvcnRzPWZ1bmN0aW9uKGwsdCl7dmFyIGg9MT09bCxwPTI9PWwsdj0zPT1sLGc9ND09bCx5PTY9PWwsZD01PT1sfHx5LGI9dHx8ZTtyZXR1cm4gZnVuY3Rpb24odCxuLHIpe2Zvcih2YXIgZSxpLG89eCh0KSx1PV8obyksYz1TKG4sciwzKSxhPW0odS5sZW5ndGgpLGY9MCxzPWg/Yih0LGEpOnA/Yih0LDApOkp0O2Y8YTtmKyspaWYoKGR8fGYgaW4gdSkmJihpPWMoZT11W2ZdLGYsbyksbCkpaWYoaClzW2ZdPWk7ZWxzZSBpZihpKXN3aXRjaChsKXtjYXNlIDM6cmV0dXJuITA7Y2FzZSA1OnJldHVybiBlO2Nhc2UgNjpyZXR1cm4gZjtjYXNlIDI6cy5wdXNoKGUpfWVsc2UgaWYoZylyZXR1cm4hMTtyZXR1cm4geT8tMTp2fHxnP2c6c319fSxmdW5jdGlvbih0LG4pe3ZhciByPXQuZXhwb3J0cz17dmVyc2lvbjoiMi42LjExIn07Im51bWJlciI9PXR5cGVvZiBlJiYoZT1yKX0sZnVuY3Rpb24odCxuLHIpe2lmKHIoNykpe3ZhciB5PXIoMjkpLGQ9cigyKSxiPXIoMyksUz1yKDApLF89cig2MiksZT1yKDkyKSxoPXIoMTgpLHg9cigzOSksaT1yKDMyKSxtPXIoMTEpLG89cig0MSksdT1yKDIwKSx3PXIoNiksRT1yKDEyMiksYz1yKDM1KSxhPXIoMjIpLGY9cigxNCksTz1yKDQ0KSxNPXIoNCkscD1yKDkpLHY9cig4MSksST1yKDM2KSxQPXIoMTcpLEY9cigzNykuZixnPXIoODMpLHM9cigzMyksbD1yKDUpLEE9cigyNSksaz1yKDUyKSxOPXIoNTEpLGo9cig4NiksUj1yKDQ2KSxUPXIoNTcpLEw9cigzOCksRD1yKDg1KSxDPXIoMTEwKSxVPXIoOCksVz1yKDE2KSxHPVUuZixWPVcuZixCPWQuUmFuZ2VFcnJvcix6PWQuVHlwZUVycm9yLHE9ZC5VaW50OEFycmF5LEs9IkFycmF5QnVmZmVyIixKPSJTaGFyZWQiK0ssWT0iQllURVNfUEVSX0VMRU1FTlQiLCQ9InByb3RvdHlwZSIsWD1BcnJheVskXSxIPWUuQXJyYXlCdWZmZXIsWj1lLkRhdGFWaWV3LFE9QSgwKSx0dD1BKDIpLG50PUEoMykscnQ9QSg0KSxldD1BKDUpLGl0PUEoNiksb3Q9ayghMCksdXQ9ayghMSksY3Q9ai52YWx1ZXMsYXQ9ai5rZXlzLGZ0PWouZW50cmllcyxzdD1YLmxhc3RJbmRleE9mLGx0PVgucmVkdWNlLGh0PVgucmVkdWNlUmlnaHQscHQ9WC5qb2luLHZ0PVguc29ydCxndD1YLnNsaWNlLHl0PVgudG9TdHJpbmcsZHQ9WC50b0xvY2FsZVN0cmluZyxidD1sKCJpdGVyYXRvciIpLFN0PWwoInRvU3RyaW5nVGFnIiksX3Q9cygidHlwZWRfY29uc3RydWN0b3IiKSx4dD1zKCJkZWZfY29uc3RydWN0b3IiKSxtdD1fLkNPTlNUUix3dD1fLlRZUEVELEV0PV8uVklFVyxPdD0iV3JvbmcgbGVuZ3RoISIsTXQ9QSgxLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGt0KE4odCx0W3h0XSksbil9KSxJdD1iKGZ1bmN0aW9uKCl7cmV0dXJuIDE9PT1uZXcgcShuZXcgVWludDE2QXJyYXkoWzFdKS5idWZmZXIpWzBdfSksUHQ9ISFxJiYhIXFbJF0uc2V0JiZiKGZ1bmN0aW9uKCl7bmV3IHEoMSkuc2V0KHt9KX0pLEZ0PWZ1bmN0aW9uKHQsbil7dmFyIHI9dSh0KTtpZihyPDB8fHIlbil0aHJvdyBCKCJXcm9uZyBvZmZzZXQhIik7cmV0dXJuIHJ9LEF0PWZ1bmN0aW9uKHQpe2lmKE0odCkmJnd0IGluIHQpcmV0dXJuIHQ7dGhyb3cgeih0KyIgaXMgbm90IGEgdHlwZWQgYXJyYXkhIil9LGt0PWZ1bmN0aW9uKHQsbil7aWYoIShNKHQpJiZfdCBpbiB0KSl0aHJvdyB6KCJJdCBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciEiKTtyZXR1cm4gbmV3IHQobil9LE50PWZ1bmN0aW9uKHQsbil7cmV0dXJuIGp0KE4odCx0W3h0XSksbil9LGp0PWZ1bmN0aW9uKHQsbil7Zm9yKHZhciByPTAsZT1uLmxlbmd0aCxpPWt0KHQsZSk7cjxlOylpW3JdPW5bcisrXTtyZXR1cm4gaX0sUnQ9ZnVuY3Rpb24odCxuLHIpe0codCxuLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZFtyXX19KX0sVHQ9ZnVuY3Rpb24gZnJvbSh0KXt2YXIgbixyLGUsaSxvLHUsYz1wKHQpLGE9YXJndW1lbnRzLmxlbmd0aCxmPTE8YT9hcmd1bWVudHNbMV06SnQscz1mIT09SnQsbD1nKGMpO2lmKGwhPUp0JiYhdihsKSl7Zm9yKHU9bC5jYWxsKGMpLGU9W10sbj0wOyEobz11Lm5leHQoKSkuZG9uZTtuKyspZS5wdXNoKG8udmFsdWUpO2M9ZX1mb3IocyYmMjxhJiYoZj1oKGYsYXJndW1lbnRzWzJdLDIpKSxuPTAscj13KGMubGVuZ3RoKSxpPWt0KHRoaXMscik7bjxyO24rKylpW25dPXM/ZihjW25dLG4pOmNbbl07cmV0dXJuIGl9LEx0PWZ1bmN0aW9uIG9mKCl7Zm9yKHZhciB0PTAsbj1hcmd1bWVudHMubGVuZ3RoLHI9a3QodGhpcyxuKTt0PG47KXJbdF09YXJndW1lbnRzW3QrK107cmV0dXJuIHJ9LER0PSEhcSYmYihmdW5jdGlvbigpe2R0LmNhbGwobmV3IHEoMSkpfSksQ3Q9ZnVuY3Rpb24gdG9Mb2NhbGVTdHJpbmcoKXtyZXR1cm4gZHQuYXBwbHkoRHQ/Z3QuY2FsbChBdCh0aGlzKSk6QXQodGhpcyksYXJndW1lbnRzKX0sVXQ9e2NvcHlXaXRoaW46ZnVuY3Rpb24gY29weVdpdGhpbih0LG4pe3JldHVybiBDLmNhbGwoQXQodGhpcyksdCxuLDI8YXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMl06SnQpfSxldmVyeTpmdW5jdGlvbiBldmVyeSh0KXtyZXR1cm4gcnQoQXQodGhpcyksdCwxPGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzFdOkp0KX0sZmlsbDpmdW5jdGlvbiBmaWxsKHQpe3JldHVybiBELmFwcGx5KEF0KHRoaXMpLGFyZ3VtZW50cyl9LGZpbHRlcjpmdW5jdGlvbiBmaWx0ZXIodCl7cmV0dXJuIE50KHRoaXMsdHQoQXQodGhpcyksdCwxPGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzFdOkp0KSl9LGZpbmQ6ZnVuY3Rpb24gZmluZCh0KXtyZXR1cm4gZXQoQXQodGhpcyksdCwxPGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzFdOkp0KX0sZmluZEluZGV4OmZ1bmN0aW9uIGZpbmRJbmRleCh0KXtyZXR1cm4gaXQoQXQodGhpcyksdCwxPGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzFdOkp0KX0sZm9yRWFjaDpmdW5jdGlvbiBmb3JFYWNoKHQpe1EoQXQodGhpcyksdCwxPGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzFdOkp0KX0saW5kZXhPZjpmdW5jdGlvbiBpbmRleE9mKHQpe3JldHVybiB1dChBdCh0aGlzKSx0LDE8YXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMV06SnQpfSxpbmNsdWRlczpmdW5jdGlvbiBpbmNsdWRlcyh0KXtyZXR1cm4gb3QoQXQodGhpcyksdCwxPGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzFdOkp0KX0sam9pbjpmdW5jdGlvbiBqb2luKHQpe3JldHVybiBwdC5hcHBseShBdCh0aGlzKSxhcmd1bWVudHMpfSxsYXN0SW5kZXhPZjpmdW5jdGlvbiBsYXN0SW5kZXhPZih0KXtyZXR1cm4gc3QuYXBwbHkoQXQodGhpcyksYXJndW1lbnRzKX0sbWFwOmZ1bmN0aW9uIG1hcCh0KXtyZXR1cm4gTXQoQXQodGhpcyksdCwxPGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzFdOkp0KX0scmVkdWNlOmZ1bmN0aW9uIHJlZHVjZSh0KXtyZXR1cm4gbHQuYXBwbHkoQXQodGhpcyksYXJndW1lbnRzKX0scmVkdWNlUmlnaHQ6ZnVuY3Rpb24gcmVkdWNlUmlnaHQodCl7cmV0dXJuIGh0LmFwcGx5KEF0KHRoaXMpLGFyZ3VtZW50cyl9LHJldmVyc2U6ZnVuY3Rpb24gcmV2ZXJzZSgpe2Zvcih2YXIgdCxuPXRoaXMscj1BdChuKS5sZW5ndGgsZT1NYXRoLmZsb29yKHIvMiksaT0wO2k8ZTspdD1uW2ldLG5baSsrXT1uWy0tcl0sbltyXT10O3JldHVybiBufSxzb21lOmZ1bmN0aW9uIHNvbWUodCl7cmV0dXJuIG50KEF0KHRoaXMpLHQsMTxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1sxXTpKdCl9LHNvcnQ6ZnVuY3Rpb24gc29ydCh0KXtyZXR1cm4gdnQuY2FsbChBdCh0aGlzKSx0KX0sc3ViYXJyYXk6ZnVuY3Rpb24gc3ViYXJyYXkodCxuKXt2YXIgcj1BdCh0aGlzKSxlPXIubGVuZ3RoLGk9Yyh0LGUpO3JldHVybiBuZXcoTihyLHJbeHRdKSkoci5idWZmZXIsci5ieXRlT2Zmc2V0K2kqci5CWVRFU19QRVJfRUxFTUVOVCx3KChuPT09SnQ/ZTpjKG4sZSkpLWkpKX19LFd0PWZ1bmN0aW9uIHNsaWNlKHQsbil7cmV0dXJuIE50KHRoaXMsZ3QuY2FsbChBdCh0aGlzKSx0LG4pKX0sR3Q9ZnVuY3Rpb24gc2V0KHQpe0F0KHRoaXMpO3ZhciBuPUZ0KGFyZ3VtZW50c1sxXSwxKSxyPXRoaXMubGVuZ3RoLGU9cCh0KSxpPXcoZS5sZW5ndGgpLG89MDtpZihyPGkrbil0aHJvdyBCKE90KTtmb3IoO288aTspdGhpc1tuK29dPWVbbysrXX0sVnQ9e2VudHJpZXM6ZnVuY3Rpb24gZW50cmllcygpe3JldHVybiBmdC5jYWxsKEF0KHRoaXMpKX0sa2V5czpmdW5jdGlvbiBrZXlzKCl7cmV0dXJuIGF0LmNhbGwoQXQodGhpcykpfSx2YWx1ZXM6ZnVuY3Rpb24gdmFsdWVzKCl7cmV0dXJuIGN0LmNhbGwoQXQodGhpcykpfX0sQnQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gTSh0KSYmdFt3dF0mJiJzeW1ib2wiIT10eXBlb2YgbiYmbiBpbiB0JiZTdHJpbmcoK24pPT1TdHJpbmcobil9LHp0PWZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pe3JldHVybiBCdCh0LG49YShuLCEwKSk/aSgyLHRbbl0pOlYodCxuKX0scXQ9ZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodCxuLHIpe3JldHVybiEoQnQodCxuPWEobiwhMCkpJiZNKHIpJiZmKHIsInZhbHVlIikpfHxmKHIsImdldCIpfHxmKHIsInNldCIpfHxyLmNvbmZpZ3VyYWJsZXx8ZihyLCJ3cml0YWJsZSIpJiYhci53cml0YWJsZXx8ZihyLCJlbnVtZXJhYmxlIikmJiFyLmVudW1lcmFibGU/Ryh0LG4scik6KHRbbl09ci52YWx1ZSx0KX07bXR8fChXLmY9enQsVS5mPXF0KSxTKFMuUytTLkYqIW10LCJPYmplY3QiLHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6enQsZGVmaW5lUHJvcGVydHk6cXR9KSxiKGZ1bmN0aW9uKCl7eXQuY2FsbCh7fSl9KSYmKHl0PWR0PWZ1bmN0aW9uIHRvU3RyaW5nKCl7cmV0dXJuIHB0LmNhbGwodGhpcyl9KTt2YXIgS3Q9byh7fSxVdCk7byhLdCxWdCksbShLdCxidCxWdC52YWx1ZXMpLG8oS3Qse3NsaWNlOld0LHNldDpHdCxjb25zdHJ1Y3RvcjpmdW5jdGlvbigpe30sdG9TdHJpbmc6eXQsdG9Mb2NhbGVTdHJpbmc6Q3R9KSxSdChLdCwiYnVmZmVyIiwiYiIpLFJ0KEt0LCJieXRlT2Zmc2V0IiwibyIpLFJ0KEt0LCJieXRlTGVuZ3RoIiwibCIpLFJ0KEt0LCJsZW5ndGgiLCJlIiksRyhLdCxTdCx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbd3RdfX0pLHQuZXhwb3J0cz1mdW5jdGlvbih0LGwsbixvKXt2YXIgaD10Kygobz0hIW8pPyJDbGFtcGVkIjoiIikrIkFycmF5IixyPSJnZXQiK3QsdT0ic2V0Iit0LHA9ZFtoXSxjPXB8fHt9LGU9cCYmUChwKSxpPXt9LGE9cCYmcFskXSx2PWZ1bmN0aW9uKHQsaSl7Ryh0LGkse2dldDpmdW5jdGlvbigpe3JldHVybih0PXRoaXMuX2QpLnZbcl0oaSpsK3QubyxJdCk7dmFyIHR9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gbj1pLHI9dCxlPXRoaXMuX2QsbyYmKHI9KHI9TWF0aC5yb3VuZChyKSk8MD8wOjI1NTxyPzI1NToyNTUmciksdm9pZCBlLnZbdV0obipsK2UubyxyLEl0KTt2YXIgbixyLGV9LGVudW1lcmFibGU6ITB9KX07IXB8fCFfLkFCVj8ocD1uKGZ1bmN0aW9uKHQsbixyLGUpe3godCxwLGgsIl9kIik7dmFyIGksbyx1LGMsYT0wLGY9MDtpZihNKG4pKXtpZighKG4gaW5zdGFuY2VvZiBIfHwoYz1PKG4pKT09S3x8Yz09SikpcmV0dXJuIHd0IGluIG4/anQocCxuKTpUdC5jYWxsKHAsbik7aT1uLGY9RnQocixsKTt2YXIgcz1uLmJ5dGVMZW5ndGg7aWYoZT09PUp0KXtpZihzJWwpdGhyb3cgQihPdCk7aWYoKG89cy1mKTwwKXRocm93IEIoT3QpfWVsc2UgaWYoczwobz13KGUpKmwpK2YpdGhyb3cgQihPdCk7dT1vL2x9ZWxzZSB1PUUobiksaT1uZXcgSChvPXUqbCk7Zm9yKG0odCwiX2QiLHtiOmksbzpmLGw6byxlOnUsdjpuZXcgWihpKX0pO2E8dTspdih0LGErKyl9KSxhPXBbJF09SShLdCksbShhLCJjb25zdHJ1Y3RvciIscCkpOmIoZnVuY3Rpb24oKXtwKDEpfSkmJmIoZnVuY3Rpb24oKXtuZXcgcCgtMSl9KSYmVChmdW5jdGlvbih0KXtuZXcgcCxuZXcgcChudWxsKSxuZXcgcCgxLjUpLG5ldyBwKHQpfSwhMCl8fChwPW4oZnVuY3Rpb24odCxuLHIsZSl7dmFyIGk7cmV0dXJuIHgodCxwLGgpLE0obik/biBpbnN0YW5jZW9mIEh8fChpPU8obikpPT1LfHxpPT1KP2UhPT1KdD9uZXcgYyhuLEZ0KHIsbCksZSk6ciE9PUp0P25ldyBjKG4sRnQocixsKSk6bmV3IGMobik6d3QgaW4gbj9qdChwLG4pOlR0LmNhbGwocCxuKTpuZXcgYyhFKG4pKX0pLFEoZSE9PUZ1bmN0aW9uLnByb3RvdHlwZT9GKGMpLmNvbmNhdChGKGUpKTpGKGMpLGZ1bmN0aW9uKHQpe3QgaW4gcHx8bShwLHQsY1t0XSl9KSxwWyRdPWEseXx8KGEuY29uc3RydWN0b3I9cCkpO3ZhciBmPWFbYnRdLHM9ISFmJiYoInZhbHVlcyI9PWYubmFtZXx8Zi5uYW1lPT1KdCksZz1WdC52YWx1ZXM7bShwLF90LCEwKSxtKGEsd3QsaCksbShhLEV0LCEwKSxtKGEseHQscCksKG8/bmV3IHAoMSlbU3RdPT1oOlN0IGluIGEpfHxHKGEsU3Qse2dldDpmdW5jdGlvbigpe3JldHVybiBofX0pLFMoUy5HK1MuVytTLkYqKChpW2hdPXApIT1jKSxpKSxTKFMuUyxoLHtCWVRFU19QRVJfRUxFTUVOVDpsfSksUyhTLlMrUy5GKmIoZnVuY3Rpb24oKXtjLm9mLmNhbGwocCwxKX0pLGgse2Zyb206VHQsb2Y6THR9KSxZIGluIGF8fG0oYSxZLGwpLFMoUy5QLGgsVXQpLEwoaCksUyhTLlArUy5GKlB0LGgse3NldDpHdH0pLFMoUy5QK1MuRiohcyxoLFZ0KSx5fHxhLnRvU3RyaW5nPT15dHx8KGEudG9TdHJpbmc9eXQpLFMoUy5QK1MuRipiKGZ1bmN0aW9uKCl7bmV3IHAoMSkuc2xpY2UoKX0pLGgse3NsaWNlOld0fSksUyhTLlArUy5GKihiKGZ1bmN0aW9uKCl7cmV0dXJuWzEsMl0udG9Mb2NhbGVTdHJpbmcoKSE9bmV3IHAoWzEsMl0pLnRvTG9jYWxlU3RyaW5nKCl9KXx8IWIoZnVuY3Rpb24oKXthLnRvTG9jYWxlU3RyaW5nLmNhbGwoWzEsMl0pfSkpLGgse3RvTG9jYWxlU3RyaW5nOkN0fSksUltoXT1zP2Y6Zyx5fHxzfHxtKGEsYnQsZyl9fWVsc2UgdC5leHBvcnRzPWZ1bmN0aW9uKCl7fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBvPXIoMTE2KSxlPXIoMCksaT1yKDQ3KSgibWV0YWRhdGEiKSx1PWkuc3RvcmV8fChpLnN0b3JlPW5ldyhyKDExOSkpKSxjPWZ1bmN0aW9uKHQsbixyKXt2YXIgZT11LmdldCh0KTtpZighZSl7aWYoIXIpcmV0dXJuIEp0O3Uuc2V0KHQsZT1uZXcgbyl9dmFyIGk9ZS5nZXQobik7aWYoIWkpe2lmKCFyKXJldHVybiBKdDtlLnNldChuLGk9bmV3IG8pfXJldHVybiBpfTt0LmV4cG9ydHM9e3N0b3JlOnUsbWFwOmMsaGFzOmZ1bmN0aW9uKHQsbixyKXt2YXIgZT1jKG4sciwhMSk7cmV0dXJuIGUhPT1KdCYmZS5oYXModCl9LGdldDpmdW5jdGlvbih0LG4scil7dmFyIGU9YyhuLHIsITEpO3JldHVybiBlPT09SnQ/SnQ6ZS5nZXQodCl9LHNldDpmdW5jdGlvbih0LG4scixlKXtjKHIsZSwhMCkuc2V0KHQsbil9LGtleXM6ZnVuY3Rpb24odCxuKXt2YXIgcj1jKHQsbiwhMSksZT1bXTtyZXR1cm4gciYmci5mb3JFYWNoKGZ1bmN0aW9uKHQsbil7ZS5wdXNoKG4pfSksZX0sa2V5OmZ1bmN0aW9uKHQpe3JldHVybiB0PT09SnR8fCJzeW1ib2wiPT10eXBlb2YgdD90OlN0cmluZyh0KX0sZXhwOmZ1bmN0aW9uKHQpe2UoZS5TLCJSZWZsZWN0Iix0KX19fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz0hMX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMzMpKCJtZXRhIiksaT1yKDQpLG89cigxNCksdT1yKDgpLmYsYz0wLGE9T2JqZWN0LmlzRXh0ZW5zaWJsZXx8ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZj0hcigzKShmdW5jdGlvbigpe3JldHVybiBhKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpfSkscz1mdW5jdGlvbih0KXt1KHQsZSx7dmFsdWU6e2k6Ik8iKyArK2Msdzp7fX19KX0sbD10LmV4cG9ydHM9e0tFWTplLE5FRUQ6ITEsZmFzdEtleTpmdW5jdGlvbih0LG4pe2lmKCFpKHQpKXJldHVybiJzeW1ib2wiPT10eXBlb2YgdD90Oigic3RyaW5nIj09dHlwZW9mIHQ/IlMiOiJQIikrdDtpZighbyh0LGUpKXtpZighYSh0KSlyZXR1cm4iRiI7aWYoIW4pcmV0dXJuIkUiO3ModCl9cmV0dXJuIHRbZV0uaX0sZ2V0V2VhazpmdW5jdGlvbih0LG4pe2lmKCFvKHQsZSkpe2lmKCFhKHQpKXJldHVybiEwO2lmKCFuKXJldHVybiExO3ModCl9cmV0dXJuIHRbZV0ud30sb25GcmVlemU6ZnVuY3Rpb24odCl7cmV0dXJuIGYmJmwuTkVFRCYmYSh0KSYmIW8odCxlKSYmcyh0KSx0fX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDUpKCJ1bnNjb3BhYmxlcyIpLGk9QXJyYXkucHJvdG90eXBlO2lbZV09PUp0JiZyKDExKShpLGUse30pLHQuZXhwb3J0cz1mdW5jdGlvbih0KXtpW2VdW3RdPSEwfX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm57ZW51bWVyYWJsZTohKDEmdCksY29uZmlndXJhYmxlOiEoMiZ0KSx3cml0YWJsZTohKDQmdCksdmFsdWU6bn19fSxmdW5jdGlvbih0LG4pe3ZhciByPTAsZT1NYXRoLnJhbmRvbSgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4iU3ltYm9sKCIuY29uY2F0KHQ9PT1KdD8iIjp0LCIpXyIsKCsrcitlKS50b1N0cmluZygzNikpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoOTUpLGk9cig2OSk7dC5leHBvcnRzPU9iamVjdC5rZXlzfHxmdW5jdGlvbiBrZXlzKHQpe3JldHVybiBlKHQsaSl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigyMCksaT1NYXRoLm1heCxvPU1hdGgubWluO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybih0PWUodCkpPDA/aSh0K24sMCk6byh0LG4pfX0sZnVuY3Rpb24odCxuLGUpe3ZhciBpPWUoMSksbz1lKDk2KSx1PWUoNjkpLGM9ZSg2OCkoIklFX1BST1RPIiksYT1mdW5jdGlvbigpe30sZj0icHJvdG90eXBlIixzPWZ1bmN0aW9uKCl7dmFyIHQsbj1lKDY2KSgiaWZyYW1lIikscj11Lmxlbmd0aDtmb3Iobi5zdHlsZS5kaXNwbGF5PSJub25lIixlKDcwKS5hcHBlbmRDaGlsZChuKSxuLnNyYz0iamF2YXNjcmlwdDoiLCh0PW4uY29udGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLHQud3JpdGUoIjxzY3JpcHQ+ZG9jdW1lbnQuRj1PYmplY3Q8XC9zY3JpcHQ+IiksdC5jbG9zZSgpLHM9dC5GO3ItLTspZGVsZXRlIHNbZl1bdVtyXV07cmV0dXJuIHMoKX07dC5leHBvcnRzPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uIGNyZWF0ZSh0LG4pe3ZhciByO3JldHVybiBudWxsIT09dD8oYVtmXT1pKHQpLHI9bmV3IGEsYVtmXT1udWxsLHJbY109dCk6cj1zKCksbj09PUp0P3I6byhyLG4pfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoOTUpLGk9cig2OSkuY29uY2F0KCJsZW5ndGgiLCJwcm90b3R5cGUiKTtuLmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXModCl7cmV0dXJuIGUodCxpKX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDIpLGk9cig4KSxvPXIoNyksdT1yKDUpKCJzcGVjaWVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuPWVbdF07byYmbiYmIW5bdV0mJmkuZihuLHUse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixyLGUpe2lmKCEodCBpbnN0YW5jZW9mIG4pfHxlIT09SnQmJmUgaW4gdCl0aHJvdyBUeXBlRXJyb3IocisiOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbixyKXt2YXIgaD1yKDE4KSxwPXIoMTA4KSx2PXIoODEpLGc9cigxKSx5PXIoNiksZD1yKDgzKSxiPXt9LFM9e307KG49dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixyLGUsaSl7dmFyIG8sdSxjLGEsZj1pP2Z1bmN0aW9uKCl7cmV0dXJuIHR9OmQodCkscz1oKHIsZSxuPzI6MSksbD0wO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBmKXRocm93IFR5cGVFcnJvcih0KyIgaXMgbm90IGl0ZXJhYmxlISIpO2lmKHYoZikpe2ZvcihvPXkodC5sZW5ndGgpO2w8bztsKyspaWYoKGE9bj9zKGcodT10W2xdKVswXSx1WzFdKTpzKHRbbF0pKT09PWJ8fGE9PT1TKXJldHVybiBhfWVsc2UgZm9yKGM9Zi5jYWxsKHQpOyEodT1jLm5leHQoKSkuZG9uZTspaWYoKGE9cChjLHMsdS52YWx1ZSxuKSk9PT1ifHxhPT09UylyZXR1cm4gYX0pLkJSRUFLPWIsbi5SRVRVUk49U30sZnVuY3Rpb24odCxuLHIpe3ZhciBpPXIoMTIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4scil7Zm9yKHZhciBlIGluIG4paSh0LGUsbltlXSxyKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe2lmKCFlKHQpfHx0Ll90IT09bil0aHJvdyBUeXBlRXJyb3IoIkluY29tcGF0aWJsZSByZWNlaXZlciwgIituKyIgcmVxdWlyZWQhIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cig4KS5mLGk9cigxNCksbz1yKDUpKCJ0b1N0cmluZ1RhZyIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4scil7dCYmIWkodD1yP3Q6dC5wcm90b3R5cGUsbykmJmUodCxvLHtjb25maWd1cmFibGU6ITAsdmFsdWU6bn0pfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBpPXIoMTkpLG89cig1KSgidG9TdHJpbmdUYWciKSx1PSJBcmd1bWVudHMiPT1pKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuLHIsZTtyZXR1cm4gdD09PUp0PyJVbmRlZmluZWQiOm51bGw9PT10PyJOdWxsIjoic3RyaW5nIj09dHlwZW9mKHI9ZnVuY3Rpb24odCxuKXt0cnl7cmV0dXJuIHRbbl19Y2F0Y2gocil7fX0obj1PYmplY3QodCksbykpP3I6dT9pKG4pOiJPYmplY3QiPT0oZT1pKG4pKSYmImZ1bmN0aW9uIj09dHlwZW9mIG4uY2FsbGVlPyJBcmd1bWVudHMiOmV9fSxmdW5jdGlvbih0LG4scil7dmFyIHU9cigwKSxlPXIoMjMpLGM9cigzKSxhPXIoNzMpLGk9IlsiK2ErIl0iLG89UmVnRXhwKCJeIitpK2krIioiKSxmPVJlZ0V4cChpK2krIiokIikscz1mdW5jdGlvbih0LG4scil7dmFyIGU9e30saT1jKGZ1bmN0aW9uKCl7cmV0dXJuISFhW3RdKCl8fCLigIvChSIhPSLigIvChSJbdF0oKX0pLG89ZVt0XT1pP24obCk6YVt0XTtyJiYoZVtyXT1vKSx1KHUuUCt1LkYqaSwiU3RyaW5nIixlKX0sbD1zLnRyaW09ZnVuY3Rpb24odCxuKXtyZXR1cm4gdD1TdHJpbmcoZSh0KSksMSZuJiYodD10LnJlcGxhY2UobywiIikpLDImbiYmKHQ9dC5yZXBsYWNlKGYsIiIpKSx0fTt0LmV4cG9ydHM9c30sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9e319LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDI2KSxpPXIoMiksbz0iX19jb3JlLWpzX3NoYXJlZF9fIix1PWlbb118fChpW29dPXt9KTsodC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHVbdF18fCh1W3RdPW4hPT1KdD9uOnt9KX0pKCJ2ZXJzaW9ucyIsW10pLnB1c2goe3ZlcnNpb246ZS52ZXJzaW9uLG1vZGU6cigyOSk/InB1cmUiOiJnbG9iYWwiLGNvcHlyaWdodDoiwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSJ9KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMTkpO3QuZXhwb3J0cz1PYmplY3QoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKT9PYmplY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIlN0cmluZyI9PWUodCk/dC5zcGxpdCgiIik6T2JqZWN0KHQpfX0sZnVuY3Rpb24odCxuKXtuLmY9e30ucHJvcGVydHlJc0VudW1lcmFibGV9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDEpO3QuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PWUodGhpcyksbj0iIjtyZXR1cm4gdC5nbG9iYWwmJihuKz0iZyIpLHQuaWdub3JlQ2FzZSYmKG4rPSJpIiksdC5tdWx0aWxpbmUmJihuKz0ibSIpLHQudW5pY29kZSYmKG4rPSJ1IiksdC5zdGlja3kmJihuKz0ieSIpLG59fSxmdW5jdGlvbih0LG4scil7dmFyIGk9cigxKSxvPXIoMTApLHU9cig1KSgic3BlY2llcyIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3ZhciByLGU9aSh0KS5jb25zdHJ1Y3RvcjtyZXR1cm4gZT09PUp0fHwocj1pKGUpW3VdKT09SnQ/bjpvKHIpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBhPXIoMTUpLGY9cig2KSxzPXIoMzUpO3QuZXhwb3J0cz1mdW5jdGlvbihjKXtyZXR1cm4gZnVuY3Rpb24odCxuLHIpe3ZhciBlLGk9YSh0KSxvPWYoaS5sZW5ndGgpLHU9cyhyLG8pO2lmKGMmJm4hPW4pe2Zvcig7dTxvOylpZigoZT1pW3UrK10pIT1lKXJldHVybiEwfWVsc2UgZm9yKDt1PG87dSsrKWlmKChjfHx1IGluIGkpJiZpW3VdPT09bilyZXR1cm4gY3x8dXx8MDtyZXR1cm4hYyYmLTF9fX0sZnVuY3Rpb24odCxuKXtuLmY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc30sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMTkpO3QuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbiBpc0FycmF5KHQpe3JldHVybiJBcnJheSI9PWUodCl9fSxmdW5jdGlvbih0LG4scil7dmFyIGE9cigyMCksZj1yKDIzKTt0LmV4cG9ydHM9ZnVuY3Rpb24oYyl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHIsZSxpPVN0cmluZyhmKHQpKSxvPWEobiksdT1pLmxlbmd0aDtyZXR1cm4gbzwwfHx1PD1vP2M/IiI6SnQ6KHI9aS5jaGFyQ29kZUF0KG8pKTw1NTI5Nnx8NTYzMTk8cnx8bysxPT09dXx8KGU9aS5jaGFyQ29kZUF0KG8rMSkpPDU2MzIwfHw1NzM0MzxlP2M/aS5jaGFyQXQobyk6cjpjP2kuc2xpY2UobyxvKzIpOmUtNTYzMjArKHItNTUyOTY8PDEwKSs2NTUzNn19fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cig0KSxpPXIoMTkpLG89cig1KSgibWF0Y2giKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIGUodCkmJigobj10W29dKSE9PUp0PyEhbjoiUmVnRXhwIj09aSh0KSl9fSxmdW5jdGlvbih0LG4scil7dmFyIG89cig1KSgiaXRlcmF0b3IiKSx1PSExO3RyeXt2YXIgZT1bN11bb10oKTtlWyJyZXR1cm4iXT1mdW5jdGlvbigpe3U9ITB9LEFycmF5LmZyb20oZSxmdW5jdGlvbigpe3Rocm93IDJ9KX1jYXRjaChjKXt9dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7aWYoIW4mJiF1KXJldHVybiExO3ZhciByPSExO3RyeXt2YXIgZT1bN10saT1lW29dKCk7aS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6cj0hMH19LGVbb109ZnVuY3Rpb24oKXtyZXR1cm4gaX0sdChlKX1jYXRjaChjKXt9cmV0dXJuIHJ9fSxmdW5jdGlvbih0LG4scil7dmFyIGk9cig0NCksbz1SZWdFeHAucHJvdG90eXBlLmV4ZWM7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7dmFyIHI9dC5leGVjO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByKXt2YXIgZT1yLmNhbGwodCxuKTtpZigib2JqZWN0IiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiUmVnRXhwIGV4ZWMgbWV0aG9kIHJldHVybmVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIE9iamVjdCBvciBudWxsIik7cmV0dXJuIGV9aWYoIlJlZ0V4cCIhPT1pKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlJlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXIiKTtyZXR1cm4gby5jYWxsKHQsbil9fSxmdW5jdGlvbih0LG4scil7cigxMTIpO3ZhciBmPXIoMTIpLHM9cigxMSksbD1yKDMpLGg9cigyMykscD1yKDUpLHY9cig4NyksZz1wKCJzcGVjaWVzIikseT0hbChmdW5jdGlvbigpe3ZhciB0PS8uLztyZXR1cm4gdC5leGVjPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHQuZ3JvdXBzPXthOiI3In0sdH0sIjciIT09IiIucmVwbGFjZSh0LCIkPGE+Iil9KSxkPWZ1bmN0aW9uKCl7dmFyIHQ9Lyg/OikvLG49dC5leGVjO3QuZXhlYz1mdW5jdGlvbigpe3JldHVybiBuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dmFyIHI9ImFiIi5zcGxpdCh0KTtyZXR1cm4gMj09PXIubGVuZ3RoJiYiYSI9PT1yWzBdJiYiYiI9PT1yWzFdfSgpO3QuZXhwb3J0cz1mdW5jdGlvbihyLHQsbil7dmFyIGU9cChyKSxvPSFsKGZ1bmN0aW9uKCl7dmFyIHQ9e307cmV0dXJuIHRbZV09ZnVuY3Rpb24oKXtyZXR1cm4gN30sNyE9IiJbcl0odCl9KSxpPW8/IWwoZnVuY3Rpb24oKXt2YXIgdD0hMSxuPS9hLztyZXR1cm4gbi5leGVjPWZ1bmN0aW9uKCl7cmV0dXJuIHQ9ITAsbnVsbH0sInNwbGl0Ij09PXImJihuLmNvbnN0cnVjdG9yPXt9LG4uY29uc3RydWN0b3JbZ109ZnVuY3Rpb24oKXtyZXR1cm4gbn0pLG5bZV0oIiIpLCF0fSk6SnQ7aWYoIW98fCFpfHwicmVwbGFjZSI9PT1yJiYheXx8InNwbGl0Ij09PXImJiFkKXt2YXIgdT0vLi9bZV0sYz1uKGgsZSwiIltyXSxmdW5jdGlvbiBtYXliZUNhbGxOYXRpdmUodCxuLHIsZSxpKXtyZXR1cm4gbi5leGVjPT09dj9vJiYhaT97ZG9uZTohMCx2YWx1ZTp1LmNhbGwobixyLGUpfTp7ZG9uZTohMCx2YWx1ZTp0LmNhbGwocixuLGUpfTp7ZG9uZTohMX19KSxhPWNbMV07ZihTdHJpbmcucHJvdG90eXBlLHIsY1swXSkscyhSZWdFeHAucHJvdG90eXBlLGUsMj09dD9mdW5jdGlvbih0LG4pe3JldHVybiBhLmNhbGwodCx0aGlzLG4pfTpmdW5jdGlvbih0KXtyZXR1cm4gYS5jYWxsKHQsdGhpcyl9KX19fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigyKS5uYXZpZ2F0b3I7dC5leHBvcnRzPWUmJmUudXNlckFnZW50fHwiIn0sZnVuY3Rpb24odCxuLHIpe3ZhciBkPXIoMiksYj1yKDApLFM9cigxMiksXz1yKDQxKSx4PXIoMzApLG09cig0MCksdz1yKDM5KSxFPXIoNCksTz1yKDMpLE09cig1NyksST1yKDQzKSxQPXIoNzIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixyLGksbyl7dmFyIHU9ZFtlXSxjPXUsYT1pPyJzZXQiOiJhZGQiLGY9YyYmYy5wcm90b3R5cGUscz17fSxsPWZ1bmN0aW9uKHQpe3ZhciByPWZbdF07UyhmLHQsImRlbGV0ZSI9PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIShvJiYhRSh0KSkmJnIuY2FsbCh0aGlzLDA9PT10PzA6dCl9OiJoYXMiPT10P2Z1bmN0aW9uIGhhcyh0KXtyZXR1cm4hKG8mJiFFKHQpKSYmci5jYWxsKHRoaXMsMD09PXQ/MDp0KX06ImdldCI9PXQ/ZnVuY3Rpb24gZ2V0KHQpe3JldHVybiBvJiYhRSh0KT9KdDpyLmNhbGwodGhpcywwPT09dD8wOnQpfToiYWRkIj09dD9mdW5jdGlvbiBhZGQodCl7cmV0dXJuIHIuY2FsbCh0aGlzLDA9PT10PzA6dCksdGhpc306ZnVuY3Rpb24gc2V0KHQsbil7cmV0dXJuIHIuY2FsbCh0aGlzLDA9PT10PzA6dCxuKSx0aGlzfSl9O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjJiYob3x8Zi5mb3JFYWNoJiYhTyhmdW5jdGlvbigpeyhuZXcgYykuZW50cmllcygpLm5leHQoKX0pKSl7dmFyIGg9bmV3IGMscD1oW2FdKG8/e306LTAsMSkhPWgsdj1PKGZ1bmN0aW9uKCl7aC5oYXMoMSl9KSxnPU0oZnVuY3Rpb24odCl7bmV3IGModCl9KSx5PSFvJiZPKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyBjLG49NTtuLS07KXRbYV0obixuKTtyZXR1cm4hdC5oYXMoLTApfSk7Z3x8KCgoYz10KGZ1bmN0aW9uKHQsbil7dyh0LGMsZSk7dmFyIHI9UChuZXcgdSx0LGMpO3JldHVybiBuIT1KdCYmbShuLGksclthXSxyKSxyfSkpLnByb3RvdHlwZT1mKS5jb25zdHJ1Y3Rvcj1jKSwodnx8eSkmJihsKCJkZWxldGUiKSxsKCJoYXMiKSxpJiZsKCJnZXQiKSksKHl8fHApJiZsKGEpLG8mJmYuY2xlYXImJmRlbGV0ZSBmLmNsZWFyfWVsc2UgYz1yLmdldENvbnN0cnVjdG9yKHQsZSxpLGEpLF8oYy5wcm90b3R5cGUsbikseC5ORUVEPSEwO3JldHVybiBJKGMsZSksYihiLkcrYi5XK2IuRiooKHNbZV09YykhPXUpLHMpLG98fHIuc2V0U3Ryb25nKGMsZSxpKSxjfX0sZnVuY3Rpb24odCxuLHIpe2Zvcih2YXIgZSxpPXIoMiksbz1yKDExKSx1PXIoMzMpLGM9dSgidHlwZWRfYXJyYXkiKSxhPXUoInZpZXciKSxmPSEoIWkuQXJyYXlCdWZmZXJ8fCFpLkRhdGFWaWV3KSxzPWYsbD0wLGg9IkludDhBcnJheSxVaW50OEFycmF5LFVpbnQ4Q2xhbXBlZEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5Ii5zcGxpdCgiLCIpO2w8OTspKGU9aVtoW2wrK11dKT8obyhlLnByb3RvdHlwZSxjLCEwKSxvKGUucHJvdG90eXBlLGEsITApKTpzPSExO3QuZXhwb3J0cz17QUJWOmYsQ09OU1RSOnMsVFlQRUQ6YyxWSUVXOmF9fSxmdW5jdGlvbih0LG4scil7dC5leHBvcnRzPXIoMjkpfHwhcigzKShmdW5jdGlvbigpe3ZhciB0PU1hdGgucmFuZG9tKCk7X19kZWZpbmVTZXR0ZXJfXy5jYWxsKG51bGwsdCxmdW5jdGlvbigpe30pLGRlbGV0ZSByKDIpW3RdfSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtlKGUuUyx0LHtvZjpmdW5jdGlvbiBvZigpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHQpO3QtLTspblt0XT1hcmd1bWVudHNbdF07cmV0dXJuIG5ldyB0aGlzKG4pfX0pfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksdT1yKDEwKSxjPXIoMTgpLGE9cig0MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2UoZS5TLHQse2Zyb206ZnVuY3Rpb24gZnJvbSh0KXt2YXIgbixyLGUsaSxvPWFyZ3VtZW50c1sxXTtyZXR1cm4gdSh0aGlzKSwobj1vIT09SnQpJiZ1KG8pLHQ9PUp0P25ldyB0aGlzOihyPVtdLG4/KGU9MCxpPWMobyxhcmd1bWVudHNbMl0sMiksYSh0LCExLGZ1bmN0aW9uKHQpe3IucHVzaChpKHQsZSsrKSl9KSk6YSh0LCExLHIucHVzaCxyKSxuZXcgdGhpcyhyKSl9fSl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cig0KSxpPXIoMikuZG9jdW1lbnQsbz1lKGkpJiZlKGkuY3JlYXRlRWxlbWVudCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBvP2kuY3JlYXRlRWxlbWVudCh0KTp7fX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDIpLGk9cigyNiksbz1yKDI5KSx1PXIoOTQpLGM9cig4KS5mO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbj1pLlN5bWJvbHx8KGkuU3ltYm9sPW8/e306ZS5TeW1ib2x8fHt9KTsiXyI9PXQuY2hhckF0KDApfHx0IGluIG58fGMobix0LHt2YWx1ZTp1LmYodCl9KX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDQ3KSgia2V5cyIpLGk9cigzMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfHwoZVt0XT1pKHQpKX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPSJjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YiLnNwbGl0KCIsIil9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDIpLmRvY3VtZW50O3QuZXhwb3J0cz1lJiZlLmRvY3VtZW50RWxlbWVudH0sZnVuY3Rpb24odCxuLGkpe3ZhciByPWkoNCksZT1pKDEpLG89ZnVuY3Rpb24odCxuKXtpZihlKHQpLCFyKG4pJiZudWxsIT09bil0aHJvdyBUeXBlRXJyb3IobisiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlISIpfTt0LmV4cG9ydHM9e3NldDpPYmplY3Quc2V0UHJvdG90eXBlT2Z8fCgiX19wcm90b19fImlue30/ZnVuY3Rpb24odCxyLGUpe3RyeXsoZT1pKDE4KShGdW5jdGlvbi5jYWxsLGkoMTYpLmYoT2JqZWN0LnByb3RvdHlwZSwiX19wcm90b19fIikuc2V0LDIpKSh0LFtdKSxyPSEodCBpbnN0YW5jZW9mIEFycmF5KX1jYXRjaChuKXtyPSEwfXJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZih0LG4pe3JldHVybiBvKHQsbikscj90Ll9fcHJvdG9fXz1uOmUodCxuKSx0fX0oe30sITEpOkp0KSxjaGVjazpvfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBvPXIoNCksdT1yKDcxKS5zZXQ7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixyKXt2YXIgZSxpPW4uY29uc3RydWN0b3I7cmV0dXJuIGkhPT1yJiYiZnVuY3Rpb24iPT10eXBlb2YgaSYmKGU9aS5wcm90b3R5cGUpIT09ci5wcm90b3R5cGUmJm8oZSkmJnUmJnUodCxlKSx0fX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9Ilx0XG5ceDBCXGZcciDCoOGagOGgjuKAgOKAgeKAguKAg+KAhOKAheKAhuKAh+KAiOKAieKAiuKAr+KBn+OAgFx1MjAyOFx1MjAyOVx1ZmVmZiJ9LGZ1bmN0aW9uKHQsbixyKXt2YXIgaT1yKDIwKSxvPXIoMjMpO3QuZXhwb3J0cz1mdW5jdGlvbiByZXBlYXQodCl7dmFyIG49U3RyaW5nKG8odGhpcykpLHI9IiIsZT1pKHQpO2lmKGU8MHx8ZT09SW5maW5pdHkpdGhyb3cgUmFuZ2VFcnJvcigiQ291bnQgY2FuJ3QgYmUgbmVnYXRpdmUiKTtmb3IoOzA8ZTsoZT4+Pj0xKSYmKG4rPW4pKTEmZSYmKHIrPW4pO3JldHVybiByfX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9TWF0aC5zaWdufHxmdW5jdGlvbiBzaWduKHQpe3JldHVybiAwPT0odD0rdCl8fHQhPXQ/dDp0PDA/LTE6MX19LGZ1bmN0aW9uKHQsbil7dmFyIHI9TWF0aC5leHBtMTt0LmV4cG9ydHM9IXJ8fDIyMDI1LjQ2NTc5NDgwNjcxODxyKDEwKXx8cigxMCk8MjIwMjUuNDY1Nzk0ODA2NzE4fHwtMmUtMTchPXIoLTJlLTE3KT9mdW5jdGlvbiBleHBtMSh0KXtyZXR1cm4gMD09KHQ9K3QpP3Q6LTFlLTY8dCYmdDwxZS02P3QrdCp0LzI6TWF0aC5leHAodCktMX06cn0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoNTYpLGk9cigyMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixyKXtpZihlKG4pKXRocm93IFR5cGVFcnJvcigiU3RyaW5nIyIrcisiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4ISIpO3JldHVybiBTdHJpbmcoaSh0KSl9fSxmdW5jdGlvbih0LG4scil7dmFyIGk9cig1KSgibWF0Y2giKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG49Ly4vO3RyeXsiLy4vIlt0XShuKX1jYXRjaChyKXt0cnl7cmV0dXJuIG5baV09ITEsISIvLi8iW3RdKG4pfWNhdGNoKGUpe319cmV0dXJuITB9fSxmdW5jdGlvbih0LG4scil7dmFyIFM9cigyOSksXz1yKDApLHg9cigxMiksbT1yKDExKSx3PXIoNDYpLEU9cig4MCksTz1yKDQzKSxNPXIoMTcpLEk9cig1KSgiaXRlcmF0b3IiKSxQPSEoW10ua2V5cyYmIm5leHQiaW5bXS5rZXlzKCkpLEY9InZhbHVlcyIsQT1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLHIsZSxpLG8sdSl7RShyLG4sZSk7dmFyIGMsYSxmLHM9ZnVuY3Rpb24odCl7aWYoIVAmJnQgaW4gdilyZXR1cm4gdlt0XTtzd2l0Y2godCl7Y2FzZSJrZXlzIjpyZXR1cm4gZnVuY3Rpb24ga2V5cygpe3JldHVybiBuZXcgcih0aGlzLHQpfTtjYXNlIEY6cmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpe3JldHVybiBuZXcgcih0aGlzLHQpfX1yZXR1cm4gZnVuY3Rpb24gZW50cmllcygpe3JldHVybiBuZXcgcih0aGlzLHQpfX0sbD1uKyIgSXRlcmF0b3IiLGg9aT09RixwPSExLHY9dC5wcm90b3R5cGUsZz12W0ldfHx2WyJAQGl0ZXJhdG9yIl18fGkmJnZbaV0seT1nfHxzKGkpLGQ9aT9oP3MoImVudHJpZXMiKTp5Okp0LGI9IkFycmF5Ij09biYmdi5lbnRyaWVzfHxnO2lmKGImJihmPU0oYi5jYWxsKG5ldyB0KSkpIT09T2JqZWN0LnByb3RvdHlwZSYmZi5uZXh0JiYoTyhmLGwsITApLFN8fCJmdW5jdGlvbiI9PXR5cGVvZiBmW0ldfHxtKGYsSSxBKSksaCYmZyYmZy5uYW1lIT09RiYmKHA9ITAseT1mdW5jdGlvbiB2YWx1ZXMoKXtyZXR1cm4gZy5jYWxsKHRoaXMpfSksUyYmIXV8fCFQJiYhcCYmdltJXXx8bSh2LEkseSksd1tuXT15LHdbbF09QSxpKWlmKGM9e3ZhbHVlczpoP3k6cyhGKSxrZXlzOm8/eTpzKCJrZXlzIiksZW50cmllczpkfSx1KWZvcihhIGluIGMpYSBpbiB2fHx4KHYsYSxjW2FdKTtlbHNlIF8oXy5QK18uRiooUHx8cCksbixjKTtyZXR1cm4gY319LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDM2KSxpPXIoMzIpLG89cig0MyksdT17fTtyKDExKSh1LHIoNSkoIml0ZXJhdG9yIiksZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHQuZXhwb3J0cz1mdW5jdGlvbih0LG4scil7dC5wcm90b3R5cGU9ZSh1LHtuZXh0OmkoMSxyKX0pLG8odCxuKyIgSXRlcmF0b3IiKX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDQ2KSxpPXIoNSkoIml0ZXJhdG9yIiksbz1BcnJheS5wcm90b3R5cGU7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0IT09SnQmJihlLkFycmF5PT09dHx8b1tpXT09PXQpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoOCksaT1yKDMyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLHIpe24gaW4gdD9lLmYodCxuLGkoMCxyKSk6dFtuXT1yfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoNDQpLGk9cig1KSgiaXRlcmF0b3IiKSxvPXIoNDYpO3QuZXhwb3J0cz1yKDI2KS5nZXRJdGVyYXRvck1ldGhvZD1mdW5jdGlvbih0KXtpZih0IT1KdClyZXR1cm4gdFtpXXx8dFsiQEBpdGVyYXRvciJdfHxvW2UodCldfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMjEzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbmV3KGUodCkpKG4pfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBjPXIoOSksYT1yKDM1KSxmPXIoNik7dC5leHBvcnRzPWZ1bmN0aW9uIGZpbGwodCl7Zm9yKHZhciBuPWModGhpcykscj1mKG4ubGVuZ3RoKSxlPWFyZ3VtZW50cy5sZW5ndGgsaT1hKDE8ZT9hcmd1bWVudHNbMV06SnQsciksbz0yPGU/YXJndW1lbnRzWzJdOkp0LHU9bz09PUp0P3I6YShvLHIpO2k8dTspbltpKytdPXQ7cmV0dXJuIG59fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigzMSksaT1yKDExMSksbz1yKDQ2KSx1PXIoMTUpO3QuZXhwb3J0cz1yKDc5KShBcnJheSwiQXJyYXkiLGZ1bmN0aW9uKHQsbil7dGhpcy5fdD11KHQpLHRoaXMuX2k9MCx0aGlzLl9rPW59LGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fdCxuPXRoaXMuX2sscj10aGlzLl9pKys7cmV0dXJuIXR8fHQubGVuZ3RoPD1yPyh0aGlzLl90PUp0LGkoMSkpOmkoMCwia2V5cyI9PW4/cjoidmFsdWVzIj09bj90W3JdOltyLHRbcl1dKX0sInZhbHVlcyIpLG8uQXJndW1lbnRzPW8uQXJyYXksZSgia2V5cyIpLGUoInZhbHVlcyIpLGUoImVudHJpZXMiKX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlLGksdT1yKDUwKSxjPVJlZ0V4cC5wcm90b3R5cGUuZXhlYyxhPVN0cmluZy5wcm90b3R5cGUucmVwbGFjZSxvPWMsZj0ibGFzdEluZGV4IixzPShpPS9iKi9nLGMuY2FsbChlPS9hLywiYSIpLGMuY2FsbChpLCJhIiksMCE9PWVbZl18fDAhPT1pW2ZdKSxsPS8oKT8/Ly5leGVjKCIiKVsxXSE9PUp0OyhzfHxsKSYmKG89ZnVuY3Rpb24gZXhlYyh0KXt2YXIgbixyLGUsaSxvPXRoaXM7cmV0dXJuIGwmJihyPW5ldyBSZWdFeHAoIl4iK28uc291cmNlKyIkKD8hXFxzKSIsdS5jYWxsKG8pKSkscyYmKG49b1tmXSksZT1jLmNhbGwobyx0KSxzJiZlJiYob1tmXT1vLmdsb2JhbD9lLmluZGV4K2VbMF0ubGVuZ3RoOm4pLGwmJmUmJjE8ZS5sZW5ndGgmJmEuY2FsbChlWzBdLHIsZnVuY3Rpb24oKXtmb3IoaT0xO2k8YXJndW1lbnRzLmxlbmd0aC0yO2krKylhcmd1bWVudHNbaV09PT1KdCYmKGVbaV09SnQpfSksZX0pLHQuZXhwb3J0cz1vfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cig1NSkoITApO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4scil7cmV0dXJuIG4rKHI/ZSh0LG4pLmxlbmd0aDoxKX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZSxpLG8sdT1yKDE4KSxjPXIoMTAxKSxhPXIoNzApLGY9cig2Nikscz1yKDIpLGw9cy5wcm9jZXNzLGg9cy5zZXRJbW1lZGlhdGUscD1zLmNsZWFySW1tZWRpYXRlLHY9cy5NZXNzYWdlQ2hhbm5lbCxnPXMuRGlzcGF0Y2gseT0wLGQ9e30sYj0ib25yZWFkeXN0YXRlY2hhbmdlIixTPWZ1bmN0aW9uKCl7dmFyIHQ9K3RoaXM7aWYoZC5oYXNPd25Qcm9wZXJ0eSh0KSl7dmFyIG49ZFt0XTtkZWxldGUgZFt0XSxuKCl9fSxfPWZ1bmN0aW9uKHQpe1MuY2FsbCh0LmRhdGEpfTtoJiZwfHwoaD1mdW5jdGlvbiBzZXRJbW1lZGlhdGUodCl7Zm9yKHZhciBuPVtdLHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7KW4ucHVzaChhcmd1bWVudHNbcisrXSk7cmV0dXJuIGRbKyt5XT1mdW5jdGlvbigpe2MoImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpGdW5jdGlvbih0KSxuKX0sZSh5KSx5fSxwPWZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKHQpe2RlbGV0ZSBkW3RdfSwicHJvY2VzcyI9PXIoMTkpKGwpP2U9ZnVuY3Rpb24odCl7bC5uZXh0VGljayh1KFMsdCwxKSl9OmcmJmcubm93P2U9ZnVuY3Rpb24odCl7Zy5ub3codShTLHQsMSkpfTp2PyhvPShpPW5ldyB2KS5wb3J0MixpLnBvcnQxLm9ubWVzc2FnZT1fLGU9dShvLnBvc3RNZXNzYWdlLG8sMSkpOnMuYWRkRXZlbnRMaXN0ZW5lciYmImZ1bmN0aW9uIj09dHlwZW9mIHBvc3RNZXNzYWdlJiYhcy5pbXBvcnRTY3JpcHRzPyhlPWZ1bmN0aW9uKHQpe3MucG9zdE1lc3NhZ2UodCsiIiwiKiIpfSxzLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLF8sITEpKTplPWIgaW4gZigic2NyaXB0Iik/ZnVuY3Rpb24odCl7YS5hcHBlbmRDaGlsZChmKCJzY3JpcHQiKSlbYl09ZnVuY3Rpb24oKXthLnJlbW92ZUNoaWxkKHRoaXMpLFMuY2FsbCh0KX19OmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodShTLHQsMSksMCl9KSx0LmV4cG9ydHM9e3NldDpoLGNsZWFyOnB9fSxmdW5jdGlvbih0LG4scil7dmFyIGM9cigyKSxhPXIoODkpLnNldCxmPWMuTXV0YXRpb25PYnNlcnZlcnx8Yy5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLHM9Yy5wcm9jZXNzLGw9Yy5Qcm9taXNlLGg9InByb2Nlc3MiPT1yKDE5KShzKTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgZSxpLG8sdD1mdW5jdGlvbigpe3ZhciB0LG47Zm9yKGgmJih0PXMuZG9tYWluKSYmdC5leGl0KCk7ZTspe249ZS5mbixlPWUubmV4dDt0cnl7bigpfWNhdGNoKHIpe3Rocm93IGU/bygpOmk9SnQscn19aT1KdCx0JiZ0LmVudGVyKCl9O2lmKGgpbz1mdW5jdGlvbigpe3MubmV4dFRpY2sodCl9O2Vsc2UgaWYoIWZ8fGMubmF2aWdhdG9yJiZjLm5hdmlnYXRvci5zdGFuZGFsb25lKWlmKGwmJmwucmVzb2x2ZSl7dmFyIG49bC5yZXNvbHZlKEp0KTtvPWZ1bmN0aW9uKCl7bi50aGVuKHQpfX1lbHNlIG89ZnVuY3Rpb24oKXthLmNhbGwoYyx0KX07ZWxzZXt2YXIgcj0hMCx1PWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTtuZXcgZih0KS5vYnNlcnZlKHUse2NoYXJhY3RlckRhdGE6ITB9KSxvPWZ1bmN0aW9uKCl7dS5kYXRhPXI9IXJ9fXJldHVybiBmdW5jdGlvbih0KXt2YXIgbj17Zm46dCxuZXh0Okp0fTtpJiYoaS5uZXh0PW4pLGV8fChlPW4sbygpKSxpPW59fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBpPXIoMTApO2Z1bmN0aW9uIFByb21pc2VDYXBhYmlsaXR5KHQpe3ZhciByLGU7dGhpcy5wcm9taXNlPW5ldyB0KGZ1bmN0aW9uKHQsbil7aWYociE9PUp0fHxlIT09SnQpdGhyb3cgVHlwZUVycm9yKCJCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvciIpO3I9dCxlPW59KSx0aGlzLnJlc29sdmU9aShyKSx0aGlzLnJlamVjdD1pKGUpfXQuZXhwb3J0cy5mPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkodCl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigyKSxpPXIoNyksbz1yKDI5KSx1PXIoNjIpLGM9cigxMSksYT1yKDQxKSxmPXIoMykscz1yKDM5KSxsPXIoMjApLGg9cig2KSxwPXIoMTIyKSx2PXIoMzcpLmYsZz1yKDgpLmYseT1yKDg1KSxkPXIoNDMpLGI9IkFycmF5QnVmZmVyIixTPSJEYXRhVmlldyIsXz0icHJvdG90eXBlIix4PSJXcm9uZyBpbmRleCEiLG09ZVtiXSx3PWVbU10sRT1lLk1hdGgsTz1lLlJhbmdlRXJyb3IsTT1lLkluZmluaXR5LEk9bSxQPUUuYWJzLEY9RS5wb3csQT1FLmZsb29yLGs9RS5sb2csTj1FLkxOMixqPSJieXRlTGVuZ3RoIixSPSJieXRlT2Zmc2V0IixUPWk/Il9iIjoiYnVmZmVyIixMPWk/Il9sIjpqLEQ9aT8iX28iOlI7ZnVuY3Rpb24gcGFja0lFRUU3NTQodCxuLHIpe3ZhciBlLGksbyx1PW5ldyBBcnJheShyKSxjPTgqci1uLTEsYT0oMTw8YyktMSxmPWE+PjEscz0yMz09PW4/RigyLC0yNCktRigyLC03Nyk6MCxsPTAsaD10PDB8fDA9PT10JiYxL3Q8MD8xOjA7Zm9yKCh0PVAodCkpIT10fHx0PT09TT8oaT10IT10PzE6MCxlPWEpOihlPUEoayh0KS9OKSx0KihvPUYoMiwtZSkpPDEmJihlLS0sbyo9MiksMjw9KHQrPTE8PWUrZj9zL286cypGKDIsMS1mKSkqbyYmKGUrKyxvLz0yKSxhPD1lK2Y/KGk9MCxlPWEpOjE8PWUrZj8oaT0odCpvLTEpKkYoMixuKSxlKz1mKTooaT10KkYoMixmLTEpKkYoMixuKSxlPTApKTs4PD1uO3VbbCsrXT0yNTUmaSxpLz0yNTYsbi09OCk7Zm9yKGU9ZTw8bnxpLGMrPW47MDxjO3VbbCsrXT0yNTUmZSxlLz0yNTYsYy09OCk7cmV0dXJuIHVbLS1sXXw9MTI4KmgsdX1mdW5jdGlvbiB1bnBhY2tJRUVFNzU0KHQsbixyKXt2YXIgZSxpPTgqci1uLTEsbz0oMTw8aSktMSx1PW8+PjEsYz1pLTcsYT1yLTEsZj10W2EtLV0scz0xMjcmZjtmb3IoZj4+PTc7MDxjO3M9MjU2KnMrdFthXSxhLS0sYy09OCk7Zm9yKGU9cyYoMTw8LWMpLTEscz4+PS1jLGMrPW47MDxjO2U9MjU2KmUrdFthXSxhLS0sYy09OCk7aWYoMD09PXMpcz0xLXU7ZWxzZXtpZihzPT09bylyZXR1cm4gZT9OYU46Zj8tTTpNO2UrPUYoMixuKSxzLT11fXJldHVybihmPy0xOjEpKmUqRigyLHMtbil9ZnVuY3Rpb24gdW5wYWNrSTMyKHQpe3JldHVybiB0WzNdPDwyNHx0WzJdPDwxNnx0WzFdPDw4fHRbMF19ZnVuY3Rpb24gcGFja0k4KHQpe3JldHVyblsyNTUmdF19ZnVuY3Rpb24gcGFja0kxNih0KXtyZXR1cm5bMjU1JnQsdD4+OCYyNTVdfWZ1bmN0aW9uIHBhY2tJMzIodCl7cmV0dXJuWzI1NSZ0LHQ+PjgmMjU1LHQ+PjE2JjI1NSx0Pj4yNCYyNTVdfWZ1bmN0aW9uIHBhY2tGNjQodCl7cmV0dXJuIHBhY2tJRUVFNzU0KHQsNTIsOCl9ZnVuY3Rpb24gcGFja0YzMih0KXtyZXR1cm4gcGFja0lFRUU3NTQodCwyMyw0KX1mdW5jdGlvbiBhZGRHZXR0ZXIodCxuLHIpe2codFtfXSxuLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tyXX19KX1mdW5jdGlvbiBnZXQodCxuLHIsZSl7dmFyIGk9cCgrcik7aWYodFtMXTxpK24pdGhyb3cgTyh4KTt2YXIgbz1pK3RbRF0sdT10W1RdLl9iLnNsaWNlKG8sbytuKTtyZXR1cm4gZT91OnUucmV2ZXJzZSgpfWZ1bmN0aW9uIHNldCh0LG4scixlLGksbyl7dmFyIHU9cCgrcik7aWYodFtMXTx1K24pdGhyb3cgTyh4KTtmb3IodmFyIGM9dFtUXS5fYixhPXUrdFtEXSxmPWUoK2kpLHM9MDtzPG47cysrKWNbYStzXT1mW28/czpuLXMtMV19aWYodS5BQlYpe2lmKCFmKGZ1bmN0aW9uKCl7bSgxKX0pfHwhZihmdW5jdGlvbigpe25ldyBtKC0xKX0pfHxmKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBtLG5ldyBtKDEuNSksbmV3IG0oTmFOKSxtLm5hbWUhPWJ9KSl7Zm9yKHZhciBDLFU9KG09ZnVuY3Rpb24gQXJyYXlCdWZmZXIodCl7cmV0dXJuIHModGhpcyxtKSxuZXcgSShwKHQpKX0pW19dPUlbX10sVz12KEkpLEc9MDtHPFcubGVuZ3RoOykoQz1XW0crK10paW4gbXx8YyhtLEMsSVtDXSk7b3x8KFUuY29uc3RydWN0b3I9bSl9dmFyIFY9bmV3IHcobmV3IG0oMikpLEI9d1tfXS5zZXRJbnQ4O1Yuc2V0SW50OCgwLDIxNDc0ODM2NDgpLFYuc2V0SW50OCgxLDIxNDc0ODM2NDkpLCFWLmdldEludDgoMCkmJlYuZ2V0SW50OCgxKXx8YSh3W19dLHtzZXRJbnQ4OmZ1bmN0aW9uIHNldEludDgodCxuKXtCLmNhbGwodGhpcyx0LG48PDI0Pj4yNCl9LHNldFVpbnQ4OmZ1bmN0aW9uIHNldFVpbnQ4KHQsbil7Qi5jYWxsKHRoaXMsdCxuPDwyND4+MjQpfX0sITApfWVsc2UgbT1mdW5jdGlvbiBBcnJheUJ1ZmZlcih0KXtzKHRoaXMsbSxiKTt2YXIgbj1wKHQpO3RoaXMuX2I9eS5jYWxsKG5ldyBBcnJheShuKSwwKSx0aGlzW0xdPW59LHc9ZnVuY3Rpb24gRGF0YVZpZXcodCxuLHIpe3ModGhpcyx3LFMpLHModCxtLFMpO3ZhciBlPXRbTF0saT1sKG4pO2lmKGk8MHx8ZTxpKXRocm93IE8oIldyb25nIG9mZnNldCEiKTtpZihlPGkrKHI9cj09PUp0P2UtaTpoKHIpKSl0aHJvdyBPKCJXcm9uZyBsZW5ndGghIik7dGhpc1tUXT10LHRoaXNbRF09aSx0aGlzW0xdPXJ9LGkmJihhZGRHZXR0ZXIobSxqLCJfbCIpLGFkZEdldHRlcih3LCJidWZmZXIiLCJfYiIpLGFkZEdldHRlcih3LGosIl9sIiksYWRkR2V0dGVyKHcsUiwiX28iKSksYSh3W19dLHtnZXRJbnQ4OmZ1bmN0aW9uIGdldEludDgodCl7cmV0dXJuIGdldCh0aGlzLDEsdClbMF08PDI0Pj4yNH0sZ2V0VWludDg6ZnVuY3Rpb24gZ2V0VWludDgodCl7cmV0dXJuIGdldCh0aGlzLDEsdClbMF19LGdldEludDE2OmZ1bmN0aW9uIGdldEludDE2KHQpe3ZhciBuPWdldCh0aGlzLDIsdCxhcmd1bWVudHNbMV0pO3JldHVybihuWzFdPDw4fG5bMF0pPDwxNj4+MTZ9LGdldFVpbnQxNjpmdW5jdGlvbiBnZXRVaW50MTYodCl7dmFyIG49Z2V0KHRoaXMsMix0LGFyZ3VtZW50c1sxXSk7cmV0dXJuIG5bMV08PDh8blswXX0sZ2V0SW50MzI6ZnVuY3Rpb24gZ2V0SW50MzIodCl7cmV0dXJuIHVucGFja0kzMihnZXQodGhpcyw0LHQsYXJndW1lbnRzWzFdKSl9LGdldFVpbnQzMjpmdW5jdGlvbiBnZXRVaW50MzIodCl7cmV0dXJuIHVucGFja0kzMihnZXQodGhpcyw0LHQsYXJndW1lbnRzWzFdKSk+Pj4wfSxnZXRGbG9hdDMyOmZ1bmN0aW9uIGdldEZsb2F0MzIodCl7cmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsNCx0LGFyZ3VtZW50c1sxXSksMjMsNCl9LGdldEZsb2F0NjQ6ZnVuY3Rpb24gZ2V0RmxvYXQ2NCh0KXtyZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcyw4LHQsYXJndW1lbnRzWzFdKSw1Miw4KX0sc2V0SW50ODpmdW5jdGlvbiBzZXRJbnQ4KHQsbil7c2V0KHRoaXMsMSx0LHBhY2tJOCxuKX0sc2V0VWludDg6ZnVuY3Rpb24gc2V0VWludDgodCxuKXtzZXQodGhpcywxLHQscGFja0k4LG4pfSxzZXRJbnQxNjpmdW5jdGlvbiBzZXRJbnQxNih0LG4pe3NldCh0aGlzLDIsdCxwYWNrSTE2LG4sYXJndW1lbnRzWzJdKX0sc2V0VWludDE2OmZ1bmN0aW9uIHNldFVpbnQxNih0LG4pe3NldCh0aGlzLDIsdCxwYWNrSTE2LG4sYXJndW1lbnRzWzJdKX0sc2V0SW50MzI6ZnVuY3Rpb24gc2V0SW50MzIodCxuKXtzZXQodGhpcyw0LHQscGFja0kzMixuLGFyZ3VtZW50c1syXSl9LHNldFVpbnQzMjpmdW5jdGlvbiBzZXRVaW50MzIodCxuKXtzZXQodGhpcyw0LHQscGFja0kzMixuLGFyZ3VtZW50c1syXSl9LHNldEZsb2F0MzI6ZnVuY3Rpb24gc2V0RmxvYXQzMih0LG4pe3NldCh0aGlzLDQsdCxwYWNrRjMyLG4sYXJndW1lbnRzWzJdKX0sDQpzZXRGbG9hdDY0OmZ1bmN0aW9uIHNldEZsb2F0NjQodCxuKXtzZXQodGhpcyw4LHQscGFja0Y2NCxuLGFyZ3VtZW50c1syXSl9fSk7ZChtLGIpLGQodyxTKSxjKHdbX10sdS5WSUVXLCEwKSxuW2JdPW0sbltTXT13fSxmdW5jdGlvbih0LG4scil7dC5leHBvcnRzPSFyKDcpJiYhcigzKShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkocig2NikoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSxmdW5jdGlvbih0LG4scil7bi5mPXIoNSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgdT1yKDE0KSxjPXIoMTUpLGE9cig1MikoITEpLGY9cig2OCkoIklFX1BST1RPIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7dmFyIHIsZT1jKHQpLGk9MCxvPVtdO2ZvcihyIGluIGUpciE9ZiYmdShlLHIpJiZvLnB1c2gocik7Zm9yKDtpPG4ubGVuZ3RoOyl1KGUscj1uW2krK10pJiYofmEobyxyKXx8by5wdXNoKHIpKTtyZXR1cm4gb319LGZ1bmN0aW9uKHQsbixyKXt2YXIgdT1yKDgpLGM9cigxKSxhPXIoMzQpO3QuZXhwb3J0cz1yKDcpP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModCxuKXtjKHQpO2Zvcih2YXIgcixlPWEobiksaT1lLmxlbmd0aCxvPTA7bzxpOyl1LmYodCxyPWVbbysrXSxuW3JdKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDE1KSxpPXIoMzcpLmYsbz17fS50b1N0cmluZyx1PSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdyk6W107dC5leHBvcnRzLmY9ZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyh0KXtyZXR1cm4gdSYmIltvYmplY3QgV2luZG93XSI9PW8uY2FsbCh0KT9mdW5jdGlvbih0KXt0cnl7cmV0dXJuIGkodCl9Y2F0Y2gobil7cmV0dXJuIHUuc2xpY2UoKX19KHQpOmkoZSh0KSl9fSxmdW5jdGlvbih0LG4scil7dmFyIGg9cig3KSxwPXIoMzQpLHY9cig1MyksZz1yKDQ5KSx5PXIoOSksZD1yKDQ4KSxpPU9iamVjdC5hc3NpZ247dC5leHBvcnRzPSFpfHxyKDMpKGZ1bmN0aW9uKCl7dmFyIHQ9e30sbj17fSxyPVN5bWJvbCgpLGU9ImFiY2RlZmdoaWprbG1ub3BxcnN0IjtyZXR1cm4gdFtyXT03LGUuc3BsaXQoIiIpLmZvckVhY2goZnVuY3Rpb24odCl7blt0XT10fSksNyE9aSh7fSx0KVtyXXx8T2JqZWN0LmtleXMoaSh7fSxuKSkuam9pbigiIikhPWV9KT9mdW5jdGlvbiBhc3NpZ24odCxuKXtmb3IodmFyIHI9eSh0KSxlPWFyZ3VtZW50cy5sZW5ndGgsaT0xLG89di5mLHU9Zy5mO2k8ZTspZm9yKHZhciBjLGE9ZChhcmd1bWVudHNbaSsrXSksZj1vP3AoYSkuY29uY2F0KG8oYSkpOnAoYSkscz1mLmxlbmd0aCxsPTA7bDxzOyljPWZbbCsrXSxoJiYhdS5jYWxsKGEsYyl8fChyW2NdPWFbY10pO3JldHVybiByfTppfSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1PYmplY3QuaXN8fGZ1bmN0aW9uIGlzKHQsbil7cmV0dXJuIHQ9PT1uPzAhPT10fHwxL3Q9PTEvbjp0IT10JiZuIT1ufX0sZnVuY3Rpb24odCxuLHIpe3ZhciBvPXIoMTApLHU9cig0KSxjPXIoMTAxKSxhPVtdLnNsaWNlLGY9e307dC5leHBvcnRzPUZ1bmN0aW9uLmJpbmR8fGZ1bmN0aW9uIGJpbmQobil7dmFyIHI9byh0aGlzKSxlPWEuY2FsbChhcmd1bWVudHMsMSksaT1mdW5jdGlvbigpe3ZhciB0PWUuY29uY2F0KGEuY2FsbChhcmd1bWVudHMpKTtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGk/ZnVuY3Rpb24odCxuLHIpe2lmKCEobiBpbiBmKSl7Zm9yKHZhciBlPVtdLGk9MDtpPG47aSsrKWVbaV09ImFbIitpKyJdIjtmW25dPUZ1bmN0aW9uKCJGLGEiLCJyZXR1cm4gbmV3IEYoIitlLmpvaW4oIiwiKSsiKSIpfXJldHVybiBmW25dKHQscil9KHIsdC5sZW5ndGgsdCk6YyhyLHQsbil9O3JldHVybiB1KHIucHJvdG90eXBlKSYmKGkucHJvdG90eXBlPXIucHJvdG90eXBlKSxpfX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLHIpe3ZhciBlPXI9PT1KdDtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gZT90KCk6dC5jYWxsKHIpO2Nhc2UgMTpyZXR1cm4gZT90KG5bMF0pOnQuY2FsbChyLG5bMF0pO2Nhc2UgMjpyZXR1cm4gZT90KG5bMF0sblsxXSk6dC5jYWxsKHIsblswXSxuWzFdKTtjYXNlIDM6cmV0dXJuIGU/dChuWzBdLG5bMV0sblsyXSk6dC5jYWxsKHIsblswXSxuWzFdLG5bMl0pO2Nhc2UgNDpyZXR1cm4gZT90KG5bMF0sblsxXSxuWzJdLG5bM10pOnQuY2FsbChyLG5bMF0sblsxXSxuWzJdLG5bM10pfXJldHVybiB0LmFwcGx5KHIsbil9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxOSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7aWYoIm51bWJlciIhPXR5cGVvZiB0JiYiTnVtYmVyIiE9ZSh0KSl0aHJvdyBUeXBlRXJyb3Iobik7cmV0dXJuK3R9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cig0KSxpPU1hdGguZmxvb3I7dC5leHBvcnRzPWZ1bmN0aW9uIGlzSW50ZWdlcih0KXtyZXR1cm4hZSh0KSYmaXNGaW5pdGUodCkmJmkodCk9PT10fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMikucGFyc2VGbG9hdCxpPXIoNDUpLnRyaW07dC5leHBvcnRzPTEvZShyKDczKSsiLTAiKSE9LUluZmluaXR5P2Z1bmN0aW9uIHBhcnNlRmxvYXQodCl7dmFyIG49aShTdHJpbmcodCksMykscj1lKG4pO3JldHVybiAwPT09ciYmIi0iPT1uLmNoYXJBdCgwKT8tMDpyfTplfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigyKS5wYXJzZUludCxpPXIoNDUpLnRyaW0sbz1yKDczKSx1PS9eWy0rXT8wW3hYXS87dC5leHBvcnRzPTghPT1lKG8rIjA4Iil8fDIyIT09ZShvKyIweDE2Iik/ZnVuY3Rpb24gcGFyc2VJbnQodCxuKXt2YXIgcj1pKFN0cmluZyh0KSwzKTtyZXR1cm4gZShyLG4+Pj4wfHwodS50ZXN0KHIpPzE2OjEwKSl9OmV9LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPU1hdGgubG9nMXB8fGZ1bmN0aW9uIGxvZzFwKHQpe3JldHVybi0xZS04PCh0PSt0KSYmdDwxZS04P3QtdCp0LzI6TWF0aC5sb2coMSt0KX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgbz1yKDc1KSxlPU1hdGgucG93LHU9ZSgyLC01MiksYz1lKDIsLTIzKSxhPWUoMiwxMjcpKigyLWMpLGY9ZSgyLC0xMjYpO3QuZXhwb3J0cz1NYXRoLmZyb3VuZHx8ZnVuY3Rpb24gZnJvdW5kKHQpe3ZhciBuLHIsZT1NYXRoLmFicyh0KSxpPW8odCk7cmV0dXJuIGU8Zj9pKihlL2YvYysxL3UtMS91KSpmKmM6YTwocj0obj0oMStjL3UpKmUpLShuLWUpKXx8ciE9cj9pKkluZmluaXR5Omkqcn19LGZ1bmN0aW9uKHQsbixyKXt2YXIgdT1yKDEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4scixlKXt0cnl7cmV0dXJuIGU/bih1KHIpWzBdLHJbMV0pOm4ocil9Y2F0Y2gobyl7dmFyIGk9dFsicmV0dXJuIl07dGhyb3cgaSE9PUp0JiZ1KGkuY2FsbCh0KSksb319fSxmdW5jdGlvbih0LG4scil7dmFyIHM9cigxMCksbD1yKDkpLGg9cig0OCkscD1yKDYpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4scixlLGkpe3Mobik7dmFyIG89bCh0KSx1PWgobyksYz1wKG8ubGVuZ3RoKSxhPWk/Yy0xOjAsZj1pPy0xOjE7aWYocjwyKWZvcig7Oyl7aWYoYSBpbiB1KXtlPXVbYV0sYSs9ZjticmVha31pZihhKz1mLGk/YTwwOmM8PWEpdGhyb3cgVHlwZUVycm9yKCJSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIil9Zm9yKDtpPzA8PWE6YTxjO2ErPWYpYSBpbiB1JiYoZT1uKGUsdVthXSxhLG8pKTtyZXR1cm4gZX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZj1yKDkpLHM9cigzNSksbD1yKDYpO3QuZXhwb3J0cz1bXS5jb3B5V2l0aGlufHxmdW5jdGlvbiBjb3B5V2l0aGluKHQsbil7dmFyIHI9Zih0aGlzKSxlPWwoci5sZW5ndGgpLGk9cyh0LGUpLG89cyhuLGUpLHU9Mjxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1syXTpKdCxjPU1hdGgubWluKCh1PT09SnQ/ZTpzKHUsZSkpLW8sZS1pKSxhPTE7Zm9yKG88aSYmaTxvK2MmJihhPS0xLG8rPWMtMSxpKz1jLTEpOzA8Yy0tOylvIGluIHI/cltpXT1yW29dOmRlbGV0ZSByW2ldLGkrPWEsbys9YTtyZXR1cm4gcn19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJue3ZhbHVlOm4sZG9uZTohIXR9fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoODcpO3IoMCkoe3RhcmdldDoiUmVnRXhwIixwcm90bzohMCxmb3JjZWQ6ZSE9PS8uLy5leGVjfSx7ZXhlYzplfSl9LGZ1bmN0aW9uKHQsbixyKXtyKDcpJiYiZyIhPS8uL2cuZmxhZ3MmJnIoOCkuZihSZWdFeHAucHJvdG90eXBlLCJmbGFncyIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6cig1MCl9KX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybntlOiExLHY6dCgpfX1jYXRjaChuKXtyZXR1cm57ZTohMCx2Om59fX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDEpLGk9cig0KSxvPXIoOTEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe2lmKGUodCksaShuKSYmbi5jb25zdHJ1Y3Rvcj09PXQpcmV0dXJuIG47dmFyIHI9by5mKHQpO3JldHVybigwLHIucmVzb2x2ZSkobiksci5wcm9taXNlfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMTE3KSxpPXIoNDIpO3QuZXhwb3J0cz1yKDYxKSgiTWFwIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24gTWFwKCl7cmV0dXJuIHQodGhpcywwPGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOkp0KX19LHtnZXQ6ZnVuY3Rpb24gZ2V0KHQpe3ZhciBuPWUuZ2V0RW50cnkoaSh0aGlzLCJNYXAiKSx0KTtyZXR1cm4gbiYmbi52fSxzZXQ6ZnVuY3Rpb24gc2V0KHQsbil7cmV0dXJuIGUuZGVmKGkodGhpcywiTWFwIiksMD09PXQ/MDp0LG4pfX0sZSwhMCl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgdT1yKDgpLmYsYz1yKDM2KSxhPXIoNDEpLGY9cigxOCkscz1yKDM5KSxsPXIoNDApLGU9cig3OSksaT1yKDExMSksbz1yKDM4KSxoPXIoNykscD1yKDMwKS5mYXN0S2V5LHY9cig0MiksZz1oPyJfcyI6InNpemUiLHk9ZnVuY3Rpb24odCxuKXt2YXIgcixlPXAobik7aWYoIkYiIT09ZSlyZXR1cm4gdC5faVtlXTtmb3Iocj10Ll9mO3I7cj1yLm4paWYoci5rPT1uKXJldHVybiByfTt0LmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKHQsbyxyLGUpe3ZhciBpPXQoZnVuY3Rpb24odCxuKXtzKHQsaSxvLCJfaSIpLHQuX3Q9byx0Ll9pPWMobnVsbCksdC5fZj1KdCx0Ll9sPUp0LHRbZ109MCxuIT1KdCYmbChuLHIsdFtlXSx0KX0pO3JldHVybiBhKGkucHJvdG90eXBlLHtjbGVhcjpmdW5jdGlvbiBjbGVhcigpe2Zvcih2YXIgdD12KHRoaXMsbyksbj10Ll9pLHI9dC5fZjtyO3I9ci5uKXIucj0hMCxyLnAmJihyLnA9ci5wLm49SnQpLGRlbGV0ZSBuW3IuaV07dC5fZj10Ll9sPUp0LHRbZ109MH0sImRlbGV0ZSI6ZnVuY3Rpb24odCl7dmFyIG49dih0aGlzLG8pLHI9eShuLHQpO2lmKHIpe3ZhciBlPXIubixpPXIucDtkZWxldGUgbi5faVtyLmldLHIucj0hMCxpJiYoaS5uPWUpLGUmJihlLnA9aSksbi5fZj09ciYmKG4uX2Y9ZSksbi5fbD09ciYmKG4uX2w9aSksbltnXS0tfXJldHVybiEhcn0sZm9yRWFjaDpmdW5jdGlvbiBmb3JFYWNoKHQpe3YodGhpcyxvKTtmb3IodmFyIG4scj1mKHQsMTxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1sxXTpKdCwzKTtuPW4/bi5uOnRoaXMuX2Y7KWZvcihyKG4udixuLmssdGhpcyk7biYmbi5yOyluPW4ucH0saGFzOmZ1bmN0aW9uIGhhcyh0KXtyZXR1cm4hIXkodih0aGlzLG8pLHQpfX0pLGgmJnUoaS5wcm90b3R5cGUsInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdih0aGlzLG8pW2ddfX0pLGl9LGRlZjpmdW5jdGlvbih0LG4scil7dmFyIGUsaSxvPXkodCxuKTtyZXR1cm4gbz9vLnY9cjoodC5fbD1vPXtpOmk9cChuLCEwKSxrOm4sdjpyLHA6ZT10Ll9sLG46SnQscjohMX0sdC5fZnx8KHQuX2Y9byksZSYmKGUubj1vKSx0W2ddKyssIkYiIT09aSYmKHQuX2lbaV09bykpLHR9LGdldEVudHJ5Onksc2V0U3Ryb25nOmZ1bmN0aW9uKHQscixuKXtlKHQscixmdW5jdGlvbih0LG4pe3RoaXMuX3Q9dih0LHIpLHRoaXMuX2s9bix0aGlzLl9sPUp0fSxmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLG49dC5fayxyPXQuX2w7ciYmci5yOylyPXIucDtyZXR1cm4gdC5fdCYmKHQuX2w9cj1yP3Iubjp0Ll90Ll9mKT9pKDAsImtleXMiPT1uP3IuazoidmFsdWVzIj09bj9yLnY6W3IuayxyLnZdKToodC5fdD1KdCxpKDEpKX0sbj8iZW50cmllcyI6InZhbHVlcyIsIW4sITApLG8ocil9fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMTE3KSxpPXIoNDIpO3QuZXhwb3J0cz1yKDYxKSgiU2V0IixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24gU2V0KCl7cmV0dXJuIHQodGhpcywwPGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOkp0KX19LHthZGQ6ZnVuY3Rpb24gYWRkKHQpe3JldHVybiBlLmRlZihpKHRoaXMsIlNldCIpLHQ9MD09PXQ/MDp0LHQpfX0sZSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgbyxlPXIoMiksaT1yKDI1KSgwKSx1PXIoMTIpLGM9cigzMCksYT1yKDk4KSxmPXIoMTIwKSxzPXIoNCksbD1yKDQyKSxoPXIoNDIpLHA9IWUuQWN0aXZlWE9iamVjdCYmIkFjdGl2ZVhPYmplY3QiaW4gZSx2PSJXZWFrTWFwIixnPWMuZ2V0V2Vhayx5PU9iamVjdC5pc0V4dGVuc2libGUsZD1mLnVmc3RvcmUsYj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24gV2Vha01hcCgpe3JldHVybiB0KHRoaXMsMDxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1swXTpKdCl9fSxTPXtnZXQ6ZnVuY3Rpb24gZ2V0KHQpe2lmKHModCkpe3ZhciBuPWcodCk7cmV0dXJuITA9PT1uP2QobCh0aGlzLHYpKS5nZXQodCk6bj9uW3RoaXMuX2ldOkp0fX0sc2V0OmZ1bmN0aW9uIHNldCh0LG4pe3JldHVybiBmLmRlZihsKHRoaXMsdiksdCxuKX19LF89dC5leHBvcnRzPXIoNjEpKHYsYixTLGYsITAsITApO2gmJnAmJihhKChvPWYuZ2V0Q29uc3RydWN0b3IoYix2KSkucHJvdG90eXBlLFMpLGMuTkVFRD0hMCxpKFsiZGVsZXRlIiwiaGFzIiwiZ2V0Iiwic2V0Il0sZnVuY3Rpb24oZSl7dmFyIHQ9Xy5wcm90b3R5cGUsaT10W2VdO3UodCxlLGZ1bmN0aW9uKHQsbil7aWYocyh0KSYmIXkodCkpe3RoaXMuX2Z8fCh0aGlzLl9mPW5ldyBvKTt2YXIgcj10aGlzLl9mW2VdKHQsbik7cmV0dXJuInNldCI9PWU/dGhpczpyfXJldHVybiBpLmNhbGwodGhpcyx0LG4pfSl9KSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgdT1yKDQxKSxjPXIoMzApLmdldFdlYWssaT1yKDEpLGE9cig0KSxmPXIoMzkpLHM9cig0MCksZT1yKDI1KSxsPXIoMTQpLGg9cig0Miksbz1lKDUpLHA9ZSg2KSx2PTAsZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5fbHx8KHQuX2w9bmV3IHkpfSx5PWZ1bmN0aW9uKCl7dGhpcy5hPVtdfSxkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG8odC5hLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPT09bn0pfTt5LnByb3RvdHlwZT17Z2V0OmZ1bmN0aW9uKHQpe3ZhciBuPWQodGhpcyx0KTtpZihuKXJldHVybiBuWzFdfSxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuISFkKHRoaXMsdCl9LHNldDpmdW5jdGlvbih0LG4pe3ZhciByPWQodGhpcyx0KTtyP3JbMV09bjp0aGlzLmEucHVzaChbdCxuXSl9LCJkZWxldGUiOmZ1bmN0aW9uKG4pe3ZhciB0PXAodGhpcy5hLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPT09bn0pO3JldHVybn50JiZ0aGlzLmEuc3BsaWNlKHQsMSksISF+dH19LHQuZXhwb3J0cz17Z2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24odCxyLGUsaSl7dmFyIG89dChmdW5jdGlvbih0LG4pe2YodCxvLHIsIl9pIiksdC5fdD1yLHQuX2k9disrLG4hPSh0Ll9sPUp0KSYmcyhuLGUsdFtpXSx0KX0pO3JldHVybiB1KG8ucHJvdG90eXBlLHsiZGVsZXRlIjpmdW5jdGlvbih0KXtpZighYSh0KSlyZXR1cm4hMTt2YXIgbj1jKHQpO3JldHVybiEwPT09bj9nKGgodGhpcyxyKSlbImRlbGV0ZSJdKHQpOm4mJmwobix0aGlzLl9pKSYmZGVsZXRlIG5bdGhpcy5faV19LGhhczpmdW5jdGlvbiBoYXModCl7aWYoIWEodCkpcmV0dXJuITE7dmFyIG49Yyh0KTtyZXR1cm4hMD09PW4/ZyhoKHRoaXMscikpLmhhcyh0KTpuJiZsKG4sdGhpcy5faSl9fSksb30sZGVmOmZ1bmN0aW9uKHQsbixyKXt2YXIgZT1jKGkobiksITApO3JldHVybiEwPT09ZT9nKHQpLnNldChuLHIpOmVbdC5faV09cix0fSx1ZnN0b3JlOmd9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigzNyksaT1yKDUzKSxvPXIoMSksdT1yKDIpLlJlZmxlY3Q7dC5leHBvcnRzPXUmJnUub3duS2V5c3x8ZnVuY3Rpb24gb3duS2V5cyh0KXt2YXIgbj1lLmYobyh0KSkscj1pLmY7cmV0dXJuIHI/bi5jb25jYXQocih0KSk6bn19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDIwKSxpPXIoNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKHQ9PT1KdClyZXR1cm4gMDt2YXIgbj1lKHQpLHI9aShuKTtpZihuIT09cil0aHJvdyBSYW5nZUVycm9yKCJXcm9uZyBsZW5ndGghIik7cmV0dXJuIHJ9fSxmdW5jdGlvbih0LG4scil7dmFyIHA9cig1NCksdj1yKDQpLGc9cig2KSx5PXIoMTgpLGQ9cig1KSgiaXNDb25jYXRTcHJlYWRhYmxlIik7dC5leHBvcnRzPWZ1bmN0aW9uIGZsYXR0ZW5JbnRvQXJyYXkodCxuLHIsZSxpLG8sdSxjKXtmb3IodmFyIGEsZixzPWksbD0wLGg9ISF1JiZ5KHUsYywzKTtsPGU7KXtpZihsIGluIHIpe2lmKGE9aD9oKHJbbF0sbCxuKTpyW2xdLGY9ITEsdihhKSYmKGY9KGY9YVtkXSkhPT1KdD8hIWY6cChhKSksZiYmMDxvKXM9ZmxhdHRlbkludG9BcnJheSh0LG4sYSxnKGEubGVuZ3RoKSxzLG8tMSktMTtlbHNle2lmKDkwMDcxOTkyNTQ3NDA5OTE8PXMpdGhyb3cgVHlwZUVycm9yKCk7dFtzXT1hfXMrK31sKyt9cmV0dXJuIHN9fSxmdW5jdGlvbih0LG4scil7dmFyIHM9cig2KSxsPXIoNzQpLGg9cigyMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixyLGUpe3ZhciBpPVN0cmluZyhoKHQpKSxvPWkubGVuZ3RoLHU9cj09PUp0PyIgIjpTdHJpbmcociksYz1zKG4pO2lmKGM8PW98fCIiPT11KXJldHVybiBpO3ZhciBhPWMtbyxmPWwuY2FsbCh1LE1hdGguY2VpbChhL3UubGVuZ3RoKSk7cmV0dXJuIGE8Zi5sZW5ndGgmJihmPWYuc2xpY2UoMCxhKSksZT9mK2k6aStmfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBhPXIoNyksZj1yKDM0KSxzPXIoMTUpLGw9cig0OSkuZjt0LmV4cG9ydHM9ZnVuY3Rpb24oYyl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixyPXModCksZT1mKHIpLGk9ZS5sZW5ndGgsbz0wLHU9W107bzxpOyluPWVbbysrXSxhJiYhbC5jYWxsKHIsbil8fHUucHVzaChjP1tuLHJbbl1dOnJbbl0pO3JldHVybiB1fX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDQ0KSxpPXIoMTI3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uIHRvSlNPTigpe2lmKGUodGhpcykhPXQpdGhyb3cgVHlwZUVycm9yKHQrIiN0b0pTT04gaXNuJ3QgZ2VuZXJpYyIpO3JldHVybiBpKHRoaXMpfX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDQwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXt2YXIgcj1bXTtyZXR1cm4gZSh0LCExLHIucHVzaCxyLG4pLHJ9fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1NYXRoLnNjYWxlfHxmdW5jdGlvbiBzY2FsZSh0LG4scixlLGkpe3JldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aHx8dCE9dHx8biE9bnx8ciE9cnx8ZSE9ZXx8aSE9aT9OYU46dD09PUluZmluaXR5fHx0PT09LUluZmluaXR5P3Q6KHQtbikqKGktZSkvKHItbikrZX19LGZ1bmN0aW9uKHQsbixyKXtyKDEzMCkscigxMzMpLHIoMTM0KSxyKDEzNSkscigxMzYpLHIoMTM3KSxyKDEzOCkscigxMzkpLHIoMTQwKSxyKDE0MSkscigxNDIpLHIoMTQzKSxyKDE0NCkscigxNDUpLHIoMTQ2KSxyKDE0NykscigxNDgpLHIoMTQ5KSxyKDE1MCkscigxNTEpLHIoMTUyKSxyKDE1MykscigxNTQpLHIoMTU1KSxyKDE1NikscigxNTcpLHIoMTU4KSxyKDE1OSkscigxNjApLHIoMTYxKSxyKDE2MikscigxNjMpLHIoMTY0KSxyKDE2NSkscigxNjYpLHIoMTY3KSxyKDE2OCkscigxNjkpLHIoMTcwKSxyKDE3MSkscigxNzIpLHIoMTczKSxyKDE3NCkscigxNzUpLHIoMTc2KSxyKDE3NykscigxNzgpLHIoMTc5KSxyKDE4MCkscigxODEpLHIoMTgyKSxyKDE4MykscigxODQpLHIoMTg1KSxyKDE4NikscigxODcpLHIoMTg4KSxyKDE4OSkscigxOTApLHIoMTkxKSxyKDE5MikscigxOTMpLHIoMTk0KSxyKDE5NSkscigxOTYpLHIoMTk3KSxyKDE5OCkscigxOTkpLHIoMjAwKSxyKDIwMSkscigyMDIpLHIoMjAzKSxyKDIwNCkscigyMDUpLHIoMjA2KSxyKDIwNykscigyMDgpLHIoMjA5KSxyKDIxMCkscigyMTEpLHIoMjEyKSxyKDIxNCkscigyMTUpLHIoMjE2KSxyKDIxNykscigyMTgpLHIoMjE5KSxyKDIyMCkscigyMjEpLHIoMjIyKSxyKDIyMykscigyMjQpLHIoMjI1KSxyKDg2KSxyKDIyNikscigyMjcpLHIoMTEyKSxyKDIyOCkscigxMTMpLHIoMjI5KSxyKDIzMCkscigyMzEpLHIoMjMyKSxyKDIzMykscigxMTYpLHIoMTE4KSxyKDExOSkscigyMzQpLHIoMjM1KSxyKDIzNikscigyMzcpLHIoMjM4KSxyKDIzOSkscigyNDApLHIoMjQxKSxyKDI0MikscigyNDMpLHIoMjQ0KSxyKDI0NSkscigyNDYpLHIoMjQ3KSxyKDI0OCkscigyNDkpLHIoMjUwKSxyKDI1MSkscigyNTMpLHIoMjU0KSxyKDI1NikscigyNTcpLHIoMjU4KSxyKDI1OSkscigyNjApLHIoMjYxKSxyKDI2MikscigyNjMpLHIoMjY0KSxyKDI2NSkscigyNjYpLHIoMjY3KSxyKDI2OCkscigyNjkpLHIoMjcwKSxyKDI3MSkscigyNzIpLHIoMjczKSxyKDI3NCkscigyNzUpLHIoMjc2KSxyKDI3NykscigyNzgpLHIoMjc5KSxyKDI4MCkscigyODEpLHIoMjgyKSxyKDI4MykscigyODQpLHIoMjg1KSxyKDI4NikscigyODcpLHIoMjg4KSxyKDI4OSkscigyOTApLHIoMjkxKSxyKDI5MikscigyOTMpLHIoMjk0KSxyKDI5NSkscigyOTYpLHIoMjk3KSxyKDI5OCkscigyOTkpLHIoMzAwKSxyKDMwMSkscigzMDIpLHIoMzAzKSxyKDMwNCkscigzMDUpLHIoMzA2KSxyKDMwNykscigzMDgpLHIoMzA5KSxyKDMxMCkscigzMTEpLHIoMzEyKSxyKDMxMykscigzMTQpLHIoMzE1KSxyKDMxNikscigzMTcpLHIoMzE4KSxyKDMxOSkscigzMjApLHIoMzIxKSxyKDMyMikscigzMjMpLHIoMzI0KSx0LmV4cG9ydHM9cigzMjUpfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigyKSx1PXIoMTQpLGk9cig3KSxvPXIoMCksYz1yKDEyKSxhPXIoMzApLktFWSxmPXIoMykscz1yKDQ3KSxsPXIoNDMpLGg9cigzMykscD1yKDUpLHY9cig5NCksZz1yKDY3KSx5PXIoMTMyKSxkPXIoNTQpLGI9cigxKSxTPXIoNCksXz1yKDkpLHg9cigxNSksbT1yKDIyKSx3PXIoMzIpLEU9cigzNiksTz1yKDk3KSxNPXIoMTYpLEk9cig1MyksUD1yKDgpLEY9cigzNCksQT1NLmYsaz1QLmYsTj1PLmYsaj1lLlN5bWJvbCxSPWUuSlNPTixUPVImJlIuc3RyaW5naWZ5LEw9InByb3RvdHlwZSIsRD1wKCJfaGlkZGVuIiksQz1wKCJ0b1ByaW1pdGl2ZSIpLFU9e30ucHJvcGVydHlJc0VudW1lcmFibGUsVz1zKCJzeW1ib2wtcmVnaXN0cnkiKSxHPXMoInN5bWJvbHMiKSxWPXMoIm9wLXN5bWJvbHMiKSxCPU9iamVjdFtMXSx6PSJmdW5jdGlvbiI9PXR5cGVvZiBqJiYhIUkuZixxPWUuUU9iamVjdCxLPSFxfHwhcVtMXXx8IXFbTF0uZmluZENoaWxkLEo9aSYmZihmdW5jdGlvbigpe3JldHVybiA3IT1FKGsoe30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLCJhIix7dmFsdWU6N30pLmF9fSkpLmF9KT9mdW5jdGlvbih0LG4scil7dmFyIGU9QShCLG4pO2UmJmRlbGV0ZSBCW25dLGsodCxuLHIpLGUmJnQhPT1CJiZrKEIsbixlKX06ayxZPWZ1bmN0aW9uKHQpe3ZhciBuPUdbdF09RShqW0xdKTtyZXR1cm4gbi5faz10LG59LCQ9eiYmInN5bWJvbCI9PXR5cGVvZiBqLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBqfSxYPWZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHQsbixyKXtyZXR1cm4gdD09PUImJlgoVixuLHIpLGIodCksbj1tKG4sITApLGIociksdShHLG4pPyhyLmVudW1lcmFibGU/KHUodCxEKSYmdFtEXVtuXSYmKHRbRF1bbl09ITEpLHI9RShyLHtlbnVtZXJhYmxlOncoMCwhMSl9KSk6KHUodCxEKXx8ayh0LEQsdygxLHt9KSksdFtEXVtuXT0hMCksSih0LG4scikpOmsodCxuLHIpfSxIPWZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModCxuKXtiKHQpO2Zvcih2YXIgcixlPXkobj14KG4pKSxpPTAsbz1lLmxlbmd0aDtpPG87KVgodCxyPWVbaSsrXSxuW3JdKTtyZXR1cm4gdH0sWj1mdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZSh0KXt2YXIgbj1VLmNhbGwodGhpcyx0PW0odCwhMCkpO3JldHVybiEodGhpcz09PUImJnUoRyx0KSYmIXUoVix0KSkmJighKG58fCF1KHRoaXMsdCl8fCF1KEcsdCl8fHUodGhpcyxEKSYmdGhpc1tEXVt0XSl8fG4pfSxRPWZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pe2lmKHQ9eCh0KSxuPW0obiwhMCksdCE9PUJ8fCF1KEcsbil8fHUoVixuKSl7dmFyIHI9QSh0LG4pO3JldHVybiFyfHwhdShHLG4pfHx1KHQsRCkmJnRbRF1bbl18fChyLmVudW1lcmFibGU9ITApLHJ9fSx0dD1mdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKHQpe2Zvcih2YXIgbixyPU4oeCh0KSksZT1bXSxpPTA7aTxyLmxlbmd0aDspdShHLG49cltpKytdKXx8bj09RHx8bj09YXx8ZS5wdXNoKG4pO3JldHVybiBlfSxudD1mdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHModCl7Zm9yKHZhciBuLHI9dD09PUIsZT1OKHI/Vjp4KHQpKSxpPVtdLG89MDtvPGUubGVuZ3RoOykhdShHLG49ZVtvKytdKXx8ciYmIXUoQixuKXx8aS5wdXNoKEdbbl0pO3JldHVybiBpfTt6fHwoYygoaj1mdW5jdGlvbiBTeW1ib2woKXtpZih0aGlzIGluc3RhbmNlb2Ygail0aHJvdyBUeXBlRXJyb3IoIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciEiKTt2YXIgbj1oKDA8YXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06SnQpLHI9ZnVuY3Rpb24odCl7dGhpcz09PUImJnIuY2FsbChWLHQpLHUodGhpcyxEKSYmdSh0aGlzW0RdLG4pJiYodGhpc1tEXVtuXT0hMSksSih0aGlzLG4sdygxLHQpKX07cmV0dXJuIGkmJksmJkooQixuLHtjb25maWd1cmFibGU6ITAsc2V0OnJ9KSxZKG4pfSlbTF0sInRvU3RyaW5nIixmdW5jdGlvbiB0b1N0cmluZygpe3JldHVybiB0aGlzLl9rfSksTS5mPVEsUC5mPVgscigzNykuZj1PLmY9dHQscig0OSkuZj1aLEkuZj1udCxpJiYhcigyOSkmJmMoQiwicHJvcGVydHlJc0VudW1lcmFibGUiLFosITApLHYuZj1mdW5jdGlvbih0KXtyZXR1cm4gWShwKHQpKX0pLG8oby5HK28uVytvLkYqIXose1N5bWJvbDpqfSk7Zm9yKHZhciBydD0iaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMiLnNwbGl0KCIsIiksZXQ9MDtldDxydC5sZW5ndGg7KXAocnRbZXQrK10pO2Zvcih2YXIgaXQ9RihwLnN0b3JlKSxvdD0wO290PGl0Lmxlbmd0aDspZyhpdFtvdCsrXSk7byhvLlMrby5GKiF6LCJTeW1ib2wiLHsiZm9yIjpmdW5jdGlvbih0KXtyZXR1cm4gdShXLHQrPSIiKT9XW3RdOldbdF09aih0KX0sa2V5Rm9yOmZ1bmN0aW9uIGtleUZvcih0KXtpZighJCh0KSl0aHJvdyBUeXBlRXJyb3IodCsiIGlzIG5vdCBhIHN5bWJvbCEiKTtmb3IodmFyIG4gaW4gVylpZihXW25dPT09dClyZXR1cm4gbn0sdXNlU2V0dGVyOmZ1bmN0aW9uKCl7Sz0hMH0sdXNlU2ltcGxlOmZ1bmN0aW9uKCl7Sz0hMX19KSxvKG8uUytvLkYqIXosIk9iamVjdCIse2NyZWF0ZTpmdW5jdGlvbiBjcmVhdGUodCxuKXtyZXR1cm4gbj09PUp0P0UodCk6SChFKHQpLG4pfSxkZWZpbmVQcm9wZXJ0eTpYLGRlZmluZVByb3BlcnRpZXM6SCxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6USxnZXRPd25Qcm9wZXJ0eU5hbWVzOnR0LGdldE93blByb3BlcnR5U3ltYm9sczpudH0pO3ZhciB1dD1mKGZ1bmN0aW9uKCl7SS5mKDEpfSk7byhvLlMrby5GKnV0LCJPYmplY3QiLHtnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpe3JldHVybiBJLmYoXyh0KSl9fSksUiYmbyhvLlMrby5GKighenx8ZihmdW5jdGlvbigpe3ZhciB0PWooKTtyZXR1cm4iW251bGxdIiE9VChbdF0pfHwie30iIT1UKHthOnR9KXx8Int9IiE9VChPYmplY3QodCkpfSkpLCJKU09OIix7c3RyaW5naWZ5OmZ1bmN0aW9uIHN0cmluZ2lmeSh0KXtmb3IodmFyIG4scixlPVt0XSxpPTE7aTxhcmd1bWVudHMubGVuZ3RoOyllLnB1c2goYXJndW1lbnRzW2krK10pO2lmKHI9bj1lWzFdLChTKG4pfHx0IT09SnQpJiYhJCh0KSlyZXR1cm4gZChuKXx8KG49ZnVuY3Rpb24odCxuKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgciYmKG49ci5jYWxsKHRoaXMsdCxuKSksISQobikpcmV0dXJuIG59KSxlWzFdPW4sVC5hcHBseShSLGUpfX0pLGpbTF1bQ118fHIoMTEpKGpbTF0sQyxqW0xdLnZhbHVlT2YpLGwoaiwiU3ltYm9sIiksbChNYXRoLCJNYXRoIiwhMCksbChlLkpTT04sIkpTT04iLCEwKX0sZnVuY3Rpb24odCxuLHIpe3QuZXhwb3J0cz1yKDQ3KSgibmF0aXZlLWZ1bmN0aW9uLXRvLXN0cmluZyIsRnVuY3Rpb24udG9TdHJpbmcpfSxmdW5jdGlvbih0LG4scil7dmFyIGM9cigzNCksYT1yKDUzKSxmPXIoNDkpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbj1jKHQpLHI9YS5mO2lmKHIpZm9yKHZhciBlLGk9cih0KSxvPWYuZix1PTA7dTxpLmxlbmd0aDspby5jYWxsKHQsZT1pW3UrK10pJiZuLnB1c2goZSk7cmV0dXJuIG59fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKTtlKGUuUytlLkYqIXIoNyksIk9iamVjdCIse2RlZmluZVByb3BlcnR5OnIoOCkuZn0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKTtlKGUuUytlLkYqIXIoNyksIk9iamVjdCIse2RlZmluZVByb3BlcnRpZXM6cig5Nil9KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMTUpLGk9cigxNikuZjtyKDI0KSgiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKXtyZXR1cm4gaShlKHQpLG4pfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKTtlKGUuUywiT2JqZWN0Iix7Y3JlYXRlOnIoMzYpfSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDkpLGk9cigxNyk7cigyNCkoImdldFByb3RvdHlwZU9mIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZih0KXtyZXR1cm4gaShlKHQpKX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoOSksaT1yKDM0KTtyKDI0KSgia2V5cyIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24ga2V5cyh0KXtyZXR1cm4gaShlKHQpKX19KX0sZnVuY3Rpb24odCxuLHIpe3IoMjQpKCJnZXRPd25Qcm9wZXJ0eU5hbWVzIixmdW5jdGlvbigpe3JldHVybiByKDk3KS5mfSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDQpLGk9cigzMCkub25GcmVlemU7cigyNCkoImZyZWV6ZSIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZSh0KXtyZXR1cm4gbiYmZSh0KT9uKGkodCkpOnR9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDQpLGk9cigzMCkub25GcmVlemU7cigyNCkoInNlYWwiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbiBzZWFsKHQpe3JldHVybiBuJiZlKHQpP24oaSh0KSk6dH19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoNCksaT1yKDMwKS5vbkZyZWV6ZTtyKDI0KSgicHJldmVudEV4dGVuc2lvbnMiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyh0KXtyZXR1cm4gbiYmZSh0KT9uKGkodCkpOnR9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDQpO3IoMjQpKCJpc0Zyb3plbiIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uIGlzRnJvemVuKHQpe3JldHVybiFlKHQpfHwhIW4mJm4odCl9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDQpO3IoMjQpKCJpc1NlYWxlZCIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uIGlzU2VhbGVkKHQpe3JldHVybiFlKHQpfHwhIW4mJm4odCl9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDQpO3IoMjQpKCJpc0V4dGVuc2libGUiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbiBpc0V4dGVuc2libGUodCl7cmV0dXJuISFlKHQpJiYoIW58fG4odCkpfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKTtlKGUuUytlLkYsIk9iamVjdCIse2Fzc2lnbjpyKDk4KX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKTtlKGUuUywiT2JqZWN0Iix7aXM6cig5OSl9KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCk7ZShlLlMsIk9iamVjdCIse3NldFByb3RvdHlwZU9mOnIoNzEpLnNldH0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cig0NCksaT17fTtpW3IoNSkoInRvU3RyaW5nVGFnIildPSJ6IixpKyIiIT0iW29iamVjdCB6XSImJnIoMTIpKE9iamVjdC5wcm90b3R5cGUsInRvU3RyaW5nIixmdW5jdGlvbiB0b1N0cmluZygpe3JldHVybiJbb2JqZWN0ICIrZSh0aGlzKSsiXSJ9LCEwKX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCk7ZShlLlAsIkZ1bmN0aW9uIix7YmluZDpyKDEwMCl9KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoOCkuZixpPUZ1bmN0aW9uLnByb3RvdHlwZSxvPS9eXHMqZnVuY3Rpb24gKFteIChdKikvOyJuYW1lImluIGl8fHIoNykmJmUoaSwibmFtZSIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt0cnl7cmV0dXJuKCIiK3RoaXMpLm1hdGNoKG8pWzFdfWNhdGNoKHQpe3JldHVybiIifX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoNCksaT1yKDE3KSxvPXIoNSkoImhhc0luc3RhbmNlIiksdT1GdW5jdGlvbi5wcm90b3R5cGU7byBpbiB1fHxyKDgpLmYodSxvLHt2YWx1ZTpmdW5jdGlvbih0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdGhpc3x8IWUodCkpcmV0dXJuITE7aWYoIWUodGhpcy5wcm90b3R5cGUpKXJldHVybiB0IGluc3RhbmNlb2YgdGhpcztmb3IoO3Q9aSh0KTspaWYodGhpcy5wcm90b3R5cGU9PT10KXJldHVybiEwO3JldHVybiExfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigyKSxpPXIoMTQpLG89cigxOSksdT1yKDcyKSxzPXIoMjIpLGM9cigzKSxhPXIoMzcpLmYsZj1yKDE2KS5mLGw9cig4KS5mLGg9cig0NSkudHJpbSxwPSJOdW1iZXIiLHY9ZVtwXSxnPXYseT12LnByb3RvdHlwZSxkPW8ocigzNikoeSkpPT1wLGI9InRyaW0iaW4gU3RyaW5nLnByb3RvdHlwZSxTPWZ1bmN0aW9uKHQpe3ZhciBuPXModCwhMSk7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYyPG4ubGVuZ3RoKXt2YXIgcixlLGksbz0obj1iP24udHJpbSgpOmgobiwzKSkuY2hhckNvZGVBdCgwKTtpZig0Mz09PW98fDQ1PT09byl7aWYoODg9PT0ocj1uLmNoYXJDb2RlQXQoMikpfHwxMjA9PT1yKXJldHVybiBOYU59ZWxzZSBpZig0OD09PW8pe3N3aXRjaChuLmNoYXJDb2RlQXQoMSkpe2Nhc2UgNjY6Y2FzZSA5ODplPTIsaT00OTticmVhaztjYXNlIDc5OmNhc2UgMTExOmU9OCxpPTU1O2JyZWFrO2RlZmF1bHQ6cmV0dXJuK259Zm9yKHZhciB1LGM9bi5zbGljZSgyKSxhPTAsZj1jLmxlbmd0aDthPGY7YSsrKWlmKCh1PWMuY2hhckNvZGVBdChhKSk8NDh8fGk8dSlyZXR1cm4gTmFOO3JldHVybiBwYXJzZUludChjLGUpfX1yZXR1cm4rbn07aWYoIXYoIiAwbzEiKXx8IXYoIjBiMSIpfHx2KCIrMHgxIikpe3Y9ZnVuY3Rpb24gTnVtYmVyKHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8MT8wOnQscj10aGlzO3JldHVybiByIGluc3RhbmNlb2YgdiYmKGQ/YyhmdW5jdGlvbigpe3kudmFsdWVPZi5jYWxsKHIpfSk6byhyKSE9cCk/dShuZXcgZyhTKG4pKSxyLHYpOlMobil9O2Zvcih2YXIgXyx4PXIoNyk/YShnKToiTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksRVBTSUxPTixpc0Zpbml0ZSxpc0ludGVnZXIsaXNOYU4saXNTYWZlSW50ZWdlcixNQVhfU0FGRV9JTlRFR0VSLE1JTl9TQUZFX0lOVEVHRVIscGFyc2VGbG9hdCxwYXJzZUludCxpc0ludGVnZXIiLnNwbGl0KCIsIiksbT0wO208eC5sZW5ndGg7bSsrKWkoZyxfPXhbbV0pJiYhaSh2LF8pJiZsKHYsXyxmKGcsXykpOyh2LnByb3RvdHlwZT15KS5jb25zdHJ1Y3Rvcj12LHIoMTIpKGUscCx2KX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLGY9cigyMCkscz1yKDEwMiksbD1yKDc0KSxpPTEuLnRvRml4ZWQsbz1NYXRoLmZsb29yLHU9WzAsMCwwLDAsMCwwXSxoPSJOdW1iZXIudG9GaXhlZDogaW5jb3JyZWN0IGludm9jYXRpb24hIixwPWZ1bmN0aW9uKHQsbil7Zm9yKHZhciByPS0xLGU9bjsrK3I8NjspdVtyXT0oZSs9dCp1W3JdKSUxZTcsZT1vKGUvMWU3KX0sdj1mdW5jdGlvbih0KXtmb3IodmFyIG49NixyPTA7MDw9LS1uOyl1W25dPW8oKHIrPXVbbl0pL3QpLHI9ciV0KjFlN30sZz1mdW5jdGlvbigpe2Zvcih2YXIgdD02LG49IiI7MDw9LS10OylpZigiIiE9PW58fDA9PT10fHwwIT09dVt0XSl7dmFyIHI9U3RyaW5nKHVbdF0pO249IiI9PT1uP3I6bitsLmNhbGwoIjAiLDctci5sZW5ndGgpK3J9cmV0dXJuIG59LHk9ZnVuY3Rpb24odCxuLHIpe3JldHVybiAwPT09bj9yOm4lMj09MT95KHQsbi0xLHIqdCk6eSh0KnQsbi8yLHIpfTtlKGUuUCtlLkYqKCEhaSYmKCIwLjAwMCIhPT04ZS01LnRvRml4ZWQoMyl8fCIxIiE9PS45LnRvRml4ZWQoMCl8fCIxLjI1IiE9PTEuMjU1LnRvRml4ZWQoMil8fCIxMDAwMDAwMDAwMDAwMDAwMTI4IiE9PSgweGRlMGI2YjNhNzY0MDA4MCkudG9GaXhlZCgwKSl8fCFyKDMpKGZ1bmN0aW9uKCl7aS5jYWxsKHt9KX0pKSwiTnVtYmVyIix7dG9GaXhlZDpmdW5jdGlvbiB0b0ZpeGVkKHQpe3ZhciBuLHIsZSxpLG89cyh0aGlzLGgpLHU9Zih0KSxjPSIiLGE9IjAiO2lmKHU8MHx8MjA8dSl0aHJvdyBSYW5nZUVycm9yKGgpO2lmKG8hPW8pcmV0dXJuIk5hTiI7aWYobzw9LTFlMjF8fDFlMjE8PW8pcmV0dXJuIFN0cmluZyhvKTtpZihvPDAmJihjPSItIixvPS1vKSwxZS0yMTxvKWlmKHI9KG49ZnVuY3Rpb24odCl7Zm9yKHZhciBuPTAscj10OzQwOTY8PXI7KW4rPTEyLHIvPTQwOTY7Zm9yKDsyPD1yOyluKz0xLHIvPTI7cmV0dXJuIG59KG8qeSgyLDY5LDEpKS02OSk8MD9vKnkoMiwtbiwxKTpvL3koMixuLDEpLHIqPTQ1MDM1OTk2MjczNzA0OTYsMDwobj01Mi1uKSl7Zm9yKHAoMCxyKSxlPXU7Nzw9ZTspcCgxZTcsMCksZS09Nztmb3IocCh5KDEwLGUsMSksMCksZT1uLTE7MjM8PWU7KXYoMTw8MjMpLGUtPTIzO3YoMTw8ZSkscCgxLDEpLHYoMiksYT1nKCl9ZWxzZSBwKDAscikscCgxPDwtbiwwKSxhPWcoKStsLmNhbGwoIjAiLHUpO3JldHVybiBhPTA8dT9jKygoaT1hLmxlbmd0aCk8PXU/IjAuIitsLmNhbGwoIjAiLHUtaSkrYTphLnNsaWNlKDAsaS11KSsiLiIrYS5zbGljZShpLXUpKTpjK2F9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLGk9cigzKSxvPXIoMTAyKSx1PTEuLnRvUHJlY2lzaW9uO2UoZS5QK2UuRiooaShmdW5jdGlvbigpe3JldHVybiIxIiE9PXUuY2FsbCgxLEp0KX0pfHwhaShmdW5jdGlvbigpe3UuY2FsbCh7fSl9KSksIk51bWJlciIse3RvUHJlY2lzaW9uOmZ1bmN0aW9uIHRvUHJlY2lzaW9uKHQpe3ZhciBuPW8odGhpcywiTnVtYmVyI3RvUHJlY2lzaW9uOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEiKTtyZXR1cm4gdD09PUp0P3UuY2FsbChuKTp1LmNhbGwobix0KX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCk7ZShlLlMsIk51bWJlciIse0VQU0lMT046TWF0aC5wb3coMiwtNTIpfSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLGk9cigyKS5pc0Zpbml0ZTtlKGUuUywiTnVtYmVyIix7aXNGaW5pdGU6ZnVuY3Rpb24gaXNGaW5pdGUodCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZpKHQpfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKTtlKGUuUywiTnVtYmVyIix7aXNJbnRlZ2VyOnIoMTAzKX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKTtlKGUuUywiTnVtYmVyIix7aXNOYU46ZnVuY3Rpb24gaXNOYU4odCl7cmV0dXJuIHQhPXR9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLGk9cigxMDMpLG89TWF0aC5hYnM7ZShlLlMsIk51bWJlciIse2lzU2FmZUludGVnZXI6ZnVuY3Rpb24gaXNTYWZlSW50ZWdlcih0KXtyZXR1cm4gaSh0KSYmbyh0KTw9OTAwNzE5OTI1NDc0MDk5MX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCk7ZShlLlMsIk51bWJlciIse01BWF9TQUZFX0lOVEVHRVI6OTAwNzE5OTI1NDc0MDk5MX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKTtlKGUuUywiTnVtYmVyIix7TUlOX1NBRkVfSU5URUdFUjotOTAwNzE5OTI1NDc0MDk5MX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxpPXIoMTA0KTtlKGUuUytlLkYqKE51bWJlci5wYXJzZUZsb2F0IT1pKSwiTnVtYmVyIix7cGFyc2VGbG9hdDppfSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLGk9cigxMDUpO2UoZS5TK2UuRiooTnVtYmVyLnBhcnNlSW50IT1pKSwiTnVtYmVyIix7cGFyc2VJbnQ6aX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxpPXIoMTA1KTtlKGUuRytlLkYqKHBhcnNlSW50IT1pKSx7cGFyc2VJbnQ6aX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxpPXIoMTA0KTtlKGUuRytlLkYqKHBhcnNlRmxvYXQhPWkpLHtwYXJzZUZsb2F0Oml9KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1yKDEwNiksbz1NYXRoLnNxcnQsdT1NYXRoLmFjb3NoO2UoZS5TK2UuRiohKHUmJjcxMD09TWF0aC5mbG9vcih1KE51bWJlci5NQVhfVkFMVUUpKSYmdShJbmZpbml0eSk9PUluZmluaXR5KSwiTWF0aCIse2Fjb3NoOmZ1bmN0aW9uIGFjb3NoKHQpe3JldHVybih0PSt0KTwxP05hTjo5NDkwNjI2NS42MjQyNTE1Njx0P01hdGgubG9nKHQpK01hdGguTE4yOmkodC0xK28odC0xKSpvKHQrMSkpfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxpPU1hdGguYXNpbmg7ZShlLlMrZS5GKiEoaSYmMDwxL2koMCkpLCJNYXRoIix7YXNpbmg6ZnVuY3Rpb24gYXNpbmgodCl7cmV0dXJuIGlzRmluaXRlKHQ9K3QpJiYwIT10P3Q8MD8tYXNpbmgoLXQpOk1hdGgubG9nKHQrTWF0aC5zcXJ0KHQqdCsxKSk6dH19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1NYXRoLmF0YW5oO2UoZS5TK2UuRiohKGkmJjEvaSgtMCk8MCksIk1hdGgiLHthdGFuaDpmdW5jdGlvbiBhdGFuaCh0KXtyZXR1cm4gMD09KHQ9K3QpP3Q6TWF0aC5sb2coKDErdCkvKDEtdCkpLzJ9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLGk9cig3NSk7ZShlLlMsIk1hdGgiLHtjYnJ0OmZ1bmN0aW9uIGNicnQodCl7cmV0dXJuIGkodD0rdCkqTWF0aC5wb3coTWF0aC5hYnModCksMS8zKX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCk7ZShlLlMsIk1hdGgiLHtjbHozMjpmdW5jdGlvbiBjbHozMih0KXtyZXR1cm4odD4+Pj0wKT8zMS1NYXRoLmZsb29yKE1hdGgubG9nKHQrLjUpKk1hdGguTE9HMkUpOjMyfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxpPU1hdGguZXhwO2UoZS5TLCJNYXRoIix7Y29zaDpmdW5jdGlvbiBjb3NoKHQpe3JldHVybihpKHQ9K3QpK2koLXQpKS8yfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxpPXIoNzYpO2UoZS5TK2UuRiooaSE9TWF0aC5leHBtMSksIk1hdGgiLHtleHBtMTppfSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApO2UoZS5TLCJNYXRoIix7ZnJvdW5kOnIoMTA3KX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxhPU1hdGguYWJzO2UoZS5TLCJNYXRoIix7aHlwb3Q6ZnVuY3Rpb24gaHlwb3QodCxuKXtmb3IodmFyIHIsZSxpPTAsbz0wLHU9YXJndW1lbnRzLmxlbmd0aCxjPTA7bzx1OyljPChyPWEoYXJndW1lbnRzW28rK10pKT8oaT1pKihlPWMvcikqZSsxLGM9cik6aSs9MDxyPyhlPXIvYykqZTpyO3JldHVybiBjPT09SW5maW5pdHk/SW5maW5pdHk6YypNYXRoLnNxcnQoaSl9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLGk9TWF0aC5pbXVsO2UoZS5TK2UuRipyKDMpKGZ1bmN0aW9uKCl7cmV0dXJuLTUhPWkoNDI5NDk2NzI5NSw1KXx8MiE9aS5sZW5ndGh9KSwiTWF0aCIse2ltdWw6ZnVuY3Rpb24gaW11bCh0LG4pe3ZhciByPTY1NTM1LGU9K3QsaT0rbixvPXImZSx1PXImaTtyZXR1cm4gMHxvKnUrKChyJmU+Pj4xNikqdStvKihyJmk+Pj4xNik8PDE2Pj4+MCl9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApO2UoZS5TLCJNYXRoIix7bG9nMTA6ZnVuY3Rpb24gbG9nMTAodCl7cmV0dXJuIE1hdGgubG9nKHQpKk1hdGguTE9HMTBFfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKTtlKGUuUywiTWF0aCIse2xvZzFwOnIoMTA2KX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKTtlKGUuUywiTWF0aCIse2xvZzI6ZnVuY3Rpb24gbG9nMih0KXtyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5MTjJ9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApO2UoZS5TLCJNYXRoIix7c2lnbjpyKDc1KX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxpPXIoNzYpLG89TWF0aC5leHA7ZShlLlMrZS5GKnIoMykoZnVuY3Rpb24oKXtyZXR1cm4tMmUtMTchPSFNYXRoLnNpbmgoLTJlLTE3KX0pLCJNYXRoIix7c2luaDpmdW5jdGlvbiBzaW5oKHQpe3JldHVybiBNYXRoLmFicyh0PSt0KTwxPyhpKHQpLWkoLXQpKS8yOihvKHQtMSktbygtdC0xKSkqKE1hdGguRS8yKX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1yKDc2KSxvPU1hdGguZXhwO2UoZS5TLCJNYXRoIix7dGFuaDpmdW5jdGlvbiB0YW5oKHQpe3ZhciBuPWkodD0rdCkscj1pKC10KTtyZXR1cm4gbj09SW5maW5pdHk/MTpyPT1JbmZpbml0eT8tMToobi1yKS8obyh0KStvKC10KSl9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApO2UoZS5TLCJNYXRoIix7dHJ1bmM6ZnVuY3Rpb24gdHJ1bmModCl7cmV0dXJuKDA8dD9NYXRoLmZsb29yOk1hdGguY2VpbCkodCl9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLG89cigzNSksdT1TdHJpbmcuZnJvbUNoYXJDb2RlLGk9U3RyaW5nLmZyb21Db2RlUG9pbnQ7ZShlLlMrZS5GKighIWkmJjEhPWkubGVuZ3RoKSwiU3RyaW5nIix7ZnJvbUNvZGVQb2ludDpmdW5jdGlvbiBmcm9tQ29kZVBvaW50KHQpe2Zvcih2YXIgbixyPVtdLGU9YXJndW1lbnRzLmxlbmd0aCxpPTA7aTxlOyl7aWYobj0rYXJndW1lbnRzW2krK10sbyhuLDExMTQxMTEpIT09bil0aHJvdyBSYW5nZUVycm9yKG4rIiBpcyBub3QgYSB2YWxpZCBjb2RlIHBvaW50Iik7ci5wdXNoKG48NjU1MzY/dShuKTp1KDU1Mjk2Kygobi09NjU1MzYpPj4xMCksbiUxMDI0KzU2MzIwKSl9cmV0dXJuIHIuam9pbigiIil9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLHU9cigxNSksYz1yKDYpO2UoZS5TLCJTdHJpbmciLHtyYXc6ZnVuY3Rpb24gcmF3KHQpe2Zvcih2YXIgbj11KHQucmF3KSxyPWMobi5sZW5ndGgpLGU9YXJndW1lbnRzLmxlbmd0aCxpPVtdLG89MDtvPHI7KWkucHVzaChTdHJpbmcobltvKytdKSksbzxlJiZpLnB1c2goU3RyaW5nKGFyZ3VtZW50c1tvXSkpO3JldHVybiBpLmpvaW4oIiIpfX0pfSxmdW5jdGlvbih0LG4scil7cig0NSkoInRyaW0iLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbiB0cmltKCl7cmV0dXJuIHQodGhpcywzKX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1yKDU1KSghMSk7ZShlLlAsIlN0cmluZyIse2NvZGVQb2ludEF0OmZ1bmN0aW9uIGNvZGVQb2ludEF0KHQpe3JldHVybiBpKHRoaXMsdCl9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLHU9cig2KSxjPXIoNzcpLGE9ImVuZHNXaXRoIixmPSIiW2FdO2UoZS5QK2UuRipyKDc4KShhKSwiU3RyaW5nIix7ZW5kc1dpdGg6ZnVuY3Rpb24gZW5kc1dpdGgodCl7dmFyIG49Yyh0aGlzLHQsYSkscj0xPGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzFdOkp0LGU9dShuLmxlbmd0aCksaT1yPT09SnQ/ZTpNYXRoLm1pbih1KHIpLGUpLG89U3RyaW5nKHQpO3JldHVybiBmP2YuY2FsbChuLG8saSk6bi5zbGljZShpLW8ubGVuZ3RoLGkpPT09b319KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1yKDc3KSxvPSJpbmNsdWRlcyI7ZShlLlArZS5GKnIoNzgpKG8pLCJTdHJpbmciLHtpbmNsdWRlczpmdW5jdGlvbiBpbmNsdWRlcyh0KXtyZXR1cm4hIX5pKHRoaXMsdCxvKS5pbmRleE9mKHQsMTxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1sxXTpKdCl9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApO2UoZS5QLCJTdHJpbmciLHtyZXBlYXQ6cig3NCl9KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1yKDYpLG89cig3NyksdT0ic3RhcnRzV2l0aCIsYz0iIlt1XTtlKGUuUCtlLkYqcig3OCkodSksIlN0cmluZyIse3N0YXJ0c1dpdGg6ZnVuY3Rpb24gc3RhcnRzV2l0aCh0KXt2YXIgbj1vKHRoaXMsdCx1KSxyPWkoTWF0aC5taW4oMTxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1sxXTpKdCxuLmxlbmd0aCkpLGU9U3RyaW5nKHQpO3JldHVybiBjP2MuY2FsbChuLGUscik6bi5zbGljZShyLHIrZS5sZW5ndGgpPT09ZX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoNTUpKCEwKTtyKDc5KShTdHJpbmcsIlN0cmluZyIsZnVuY3Rpb24odCl7dGhpcy5fdD1TdHJpbmcodCksdGhpcy5faT0wfSxmdW5jdGlvbigpe3ZhciB0LG49dGhpcy5fdCxyPXRoaXMuX2k7cmV0dXJuIG4ubGVuZ3RoPD1yP3t2YWx1ZTpKdCxkb25lOiEwfToodD1lKG4sciksdGhpcy5faSs9dC5sZW5ndGgse3ZhbHVlOnQsZG9uZTohMX0pfSl9LGZ1bmN0aW9uKHQsbixyKXtyKDEzKSgiYW5jaG9yIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24gYW5jaG9yKHQpe3JldHVybiBuKHRoaXMsImEiLCJuYW1lIix0KX19KX0sZnVuY3Rpb24odCxuLHIpe3IoMTMpKCJiaWciLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbiBiaWcoKXtyZXR1cm4gdCh0aGlzLCJiaWciLCIiLCIiKX19KX0sZnVuY3Rpb24odCxuLHIpe3IoMTMpKCJibGluayIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uIGJsaW5rKCl7cmV0dXJuIHQodGhpcywiYmxpbmsiLCIiLCIiKX19KX0sZnVuY3Rpb24odCxuLHIpe3IoMTMpKCJib2xkIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24gYm9sZCgpe3JldHVybiB0KHRoaXMsImIiLCIiLCIiKX19KX0sZnVuY3Rpb24odCxuLHIpe3IoMTMpKCJmaXhlZCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uIGZpeGVkKCl7cmV0dXJuIHQodGhpcywidHQiLCIiLCIiKX19KX0sZnVuY3Rpb24odCxuLHIpe3IoMTMpKCJmb250Y29sb3IiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbiBmb250Y29sb3IodCl7cmV0dXJuIG4odGhpcywiZm9udCIsImNvbG9yIix0KX19KX0sZnVuY3Rpb24odCxuLHIpe3IoMTMpKCJmb250c2l6ZSIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uIGZvbnRzaXplKHQpe3JldHVybiBuKHRoaXMsImZvbnQiLCJzaXplIix0KX19KX0sZnVuY3Rpb24odCxuLHIpe3IoMTMpKCJpdGFsaWNzIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24gaXRhbGljcygpe3JldHVybiB0KHRoaXMsImkiLCIiLCIiKX19KX0sZnVuY3Rpb24odCxuLHIpe3IoMTMpKCJsaW5rIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24gbGluayh0KXtyZXR1cm4gbih0aGlzLCJhIiwiaHJlZiIsdCl9fSl9LGZ1bmN0aW9uKHQsbixyKXtyKDEzKSgic21hbGwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbiBzbWFsbCgpe3JldHVybiB0KHRoaXMsInNtYWxsIiwiIiwiIil9fSl9LGZ1bmN0aW9uKHQsbixyKXtyKDEzKSgic3RyaWtlIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24gc3RyaWtlKCl7cmV0dXJuIHQodGhpcywic3RyaWtlIiwiIiwiIil9fSl9LGZ1bmN0aW9uKHQsbixyKXtyKDEzKSgic3ViIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24gc3ViKCl7cmV0dXJuIHQodGhpcywic3ViIiwiIiwiIil9fSl9LGZ1bmN0aW9uKHQsbixyKXtyKDEzKSgic3VwIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24gc3VwKCl7cmV0dXJuIHQodGhpcywic3VwIiwiIiwiIil9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApO2UoZS5TLCJBcnJheSIse2lzQXJyYXk6cig1NCl9KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBoPXIoMTgpLGU9cigwKSxwPXIoOSksdj1yKDEwOCksZz1yKDgxKSx5PXIoNiksZD1yKDgyKSxiPXIoODMpO2UoZS5TK2UuRiohcig1NykoZnVuY3Rpb24odCl7QXJyYXkuZnJvbSh0KX0pLCJBcnJheSIse2Zyb206ZnVuY3Rpb24gZnJvbSh0KXt2YXIgbixyLGUsaSxvPXAodCksdT0iZnVuY3Rpb24iPT10eXBlb2YgdGhpcz90aGlzOkFycmF5LGM9YXJndW1lbnRzLmxlbmd0aCxhPTE8Yz9hcmd1bWVudHNbMV06SnQsZj1hIT09SnQscz0wLGw9YihvKTtpZihmJiYoYT1oKGEsMjxjP2FyZ3VtZW50c1syXTpKdCwyKSksbD09SnR8fHU9PUFycmF5JiZnKGwpKWZvcihyPW5ldyB1KG49eShvLmxlbmd0aCkpO3M8bjtzKyspZChyLHMsZj9hKG9bc10scyk6b1tzXSk7ZWxzZSBmb3IoaT1sLmNhbGwobykscj1uZXcgdTshKGU9aS5uZXh0KCkpLmRvbmU7cysrKWQocixzLGY/dihpLGEsW2UudmFsdWUsc10sITApOmUudmFsdWUpO3JldHVybiByLmxlbmd0aD1zLHJ9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLGk9cig4Mik7ZShlLlMrZS5GKnIoMykoZnVuY3Rpb24oKXtmdW5jdGlvbiBGKCl7fXJldHVybiEoQXJyYXkub2YuY2FsbChGKWluc3RhbmNlb2YgRil9KSwiQXJyYXkiLHtvZjpmdW5jdGlvbiBvZigpe2Zvcih2YXIgdD0wLG49YXJndW1lbnRzLmxlbmd0aCxyPW5ldygiZnVuY3Rpb24iPT10eXBlb2YgdGhpcz90aGlzOkFycmF5KShuKTt0PG47KWkocix0LGFyZ3VtZW50c1t0KytdKTtyZXR1cm4gci5sZW5ndGg9bixyfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxpPXIoMTUpLG89W10uam9pbjtlKGUuUCtlLkYqKHIoNDgpIT1PYmplY3R8fCFyKDIxKShvKSksIkFycmF5Iix7am9pbjpmdW5jdGlvbiBqb2luKHQpe3JldHVybiBvLmNhbGwoaSh0aGlzKSx0PT09SnQ/IiwiOnQpfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxpPXIoNzApLGY9cigxOSkscz1yKDM1KSxsPXIoNiksaD1bXS5zbGljZTtlKGUuUCtlLkYqcigzKShmdW5jdGlvbigpe2kmJmguY2FsbChpKX0pLCJBcnJheSIse3NsaWNlOmZ1bmN0aW9uIHNsaWNlKHQsbil7dmFyIHI9bCh0aGlzLmxlbmd0aCksZT1mKHRoaXMpO2lmKG49bj09PUp0P3I6biwiQXJyYXkiPT1lKXJldHVybiBoLmNhbGwodGhpcyx0LG4pO2Zvcih2YXIgaT1zKHQsciksbz1zKG4sciksdT1sKG8taSksYz1uZXcgQXJyYXkodSksYT0wO2E8dTthKyspY1thXT0iU3RyaW5nIj09ZT90aGlzLmNoYXJBdChpK2EpOnRoaXNbaSthXTtyZXR1cm4gY319KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1yKDEwKSxvPXIoOSksdT1yKDMpLGM9W10uc29ydCxhPVsxLDIsM107ZShlLlArZS5GKih1KGZ1bmN0aW9uKCl7YS5zb3J0KEp0KX0pfHwhdShmdW5jdGlvbigpe2Euc29ydChudWxsKX0pfHwhcigyMSkoYykpLCJBcnJheSIse3NvcnQ6ZnVuY3Rpb24gc29ydCh0KXtyZXR1cm4gdD09PUp0P2MuY2FsbChvKHRoaXMpKTpjLmNhbGwobyh0aGlzKSxpKHQpKX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1yKDI1KSgwKSxvPXIoMjEpKFtdLmZvckVhY2gsITApO2UoZS5QK2UuRiohbywiQXJyYXkiLHtmb3JFYWNoOmZ1bmN0aW9uIGZvckVhY2godCl7cmV0dXJuIGkodGhpcyx0LGFyZ3VtZW50c1sxXSl9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDQpLGk9cig1NCksbz1yKDUpKCJzcGVjaWVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBpKHQpJiYoImZ1bmN0aW9uIiE9dHlwZW9mKG49dC5jb25zdHJ1Y3Rvcil8fG4hPT1BcnJheSYmIWkobi5wcm90b3R5cGUpfHwobj1KdCksZShuKSYmbnVsbD09PShuPW5bb10pJiYobj1KdCkpLG49PT1KdD9BcnJheTpufX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1yKDI1KSgxKTtlKGUuUCtlLkYqIXIoMjEpKFtdLm1hcCwhMCksIkFycmF5Iix7bWFwOmZ1bmN0aW9uIG1hcCh0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzWzFdKX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1yKDI1KSgyKTtlKGUuUCtlLkYqIXIoMjEpKFtdLmZpbHRlciwhMCksIkFycmF5Iix7ZmlsdGVyOmZ1bmN0aW9uIGZpbHRlcih0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzWzFdKX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1yKDI1KSgzKTtlKGUuUCtlLkYqIXIoMjEpKFtdLnNvbWUsITApLCJBcnJheSIse3NvbWU6ZnVuY3Rpb24gc29tZSh0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzWzFdKX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1yKDI1KSg0KTtlKGUuUCtlLkYqIXIoMjEpKFtdLmV2ZXJ5LCEwKSwiQXJyYXkiLHtldmVyeTpmdW5jdGlvbiBldmVyeSh0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzWzFdKX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1yKDEwOSk7ZShlLlArZS5GKiFyKDIxKShbXS5yZWR1Y2UsITApLCJBcnJheSIse3JlZHVjZTpmdW5jdGlvbiByZWR1Y2UodCl7cmV0dXJuIGkodGhpcyx0LGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzWzFdLCExKX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1yKDEwOSk7ZShlLlArZS5GKiFyKDIxKShbXS5yZWR1Y2VSaWdodCwhMCksIkFycmF5Iix7cmVkdWNlUmlnaHQ6ZnVuY3Rpb24gcmVkdWNlUmlnaHQodCl7cmV0dXJuIGkodGhpcyx0LGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzWzFdLCEwKX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1yKDUyKSghMSksbz1bXS5pbmRleE9mLHU9ISFvJiYxL1sxXS5pbmRleE9mKDEsLTApPDA7ZShlLlArZS5GKih1fHwhcigyMSkobykpLCJBcnJheSIse2luZGV4T2Y6ZnVuY3Rpb24gaW5kZXhPZih0KXtyZXR1cm4gdT9vLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8MDppKHRoaXMsdCxhcmd1bWVudHNbMV0pfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxpPXIoMTUpLG89cigyMCksdT1yKDYpLGM9W10ubGFzdEluZGV4T2YsYT0hIWMmJjEvWzFdLmxhc3RJbmRleE9mKDEsLTApPDA7ZShlLlArZS5GKihhfHwhcigyMSkoYykpLCJBcnJheSIse2xhc3RJbmRleE9mOmZ1bmN0aW9uIGxhc3RJbmRleE9mKHQpe2lmKGEpcmV0dXJuIGMuYXBwbHkodGhpcyxhcmd1bWVudHMpfHwwO3ZhciBuPWkodGhpcykscj11KG4ubGVuZ3RoKSxlPXItMTtmb3IoMTxhcmd1bWVudHMubGVuZ3RoJiYoZT1NYXRoLm1pbihlLG8oYXJndW1lbnRzWzFdKSkpLGU8MCYmKGU9citlKTswPD1lO2UtLSlpZihlIGluIG4mJm5bZV09PT10KXJldHVybiBlfHwwO3JldHVybi0xfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKTtlKGUuUCwiQXJyYXkiLHtjb3B5V2l0aGluOnIoMTEwKX0pLHIoMzEpKCJjb3B5V2l0aGluIil9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApO2UoZS5QLCJBcnJheSIse2ZpbGw6cig4NSl9KSxyKDMxKSgiZmlsbCIpfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxpPXIoMjUpKDUpLG89ImZpbmQiLHU9ITA7byBpbltdJiZBcnJheSgxKVtvXShmdW5jdGlvbigpe3U9ITF9KSxlKGUuUCtlLkYqdSwiQXJyYXkiLHtmaW5kOmZ1bmN0aW9uIGZpbmQodCl7cmV0dXJuIGkodGhpcyx0LDE8YXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMV06SnQpfX0pLHIoMzEpKG8pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxpPXIoMjUpKDYpLG89ImZpbmRJbmRleCIsdT0hMDtvIGluW10mJkFycmF5KDEpW29dKGZ1bmN0aW9uKCl7dT0hMX0pLGUoZS5QK2UuRip1LCJBcnJheSIse2ZpbmRJbmRleDpmdW5jdGlvbiBmaW5kSW5kZXgodCl7cmV0dXJuIGkodGhpcyx0LDE8YXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMV06SnQpfX0pLHIoMzEpKG8pfSxmdW5jdGlvbih0LG4scil7cigzOCkoIkFycmF5Iil9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDIpLG89cig3MiksaT1yKDgpLmYsdT1yKDM3KS5mLGM9cig1NiksYT1yKDUwKSxmPWUuUmVnRXhwLHM9ZixsPWYucHJvdG90eXBlLGg9L2EvZyxwPS9hL2csdj1uZXcgZihoKSE9PWg7aWYocig3KSYmKCF2fHxyKDMpKGZ1bmN0aW9uKCl7cmV0dXJuIHBbcig1KSgibWF0Y2giKV09ITEsZihoKSE9aHx8ZihwKT09cHx8Ii9hL2kiIT1mKGgsImkiKX0pKSl7Zj1mdW5jdGlvbiBSZWdFeHAodCxuKXt2YXIgcj10aGlzIGluc3RhbmNlb2YgZixlPWModCksaT1uPT09SnQ7cmV0dXJuIXImJmUmJnQuY29uc3RydWN0b3I9PT1mJiZpP3Q6byh2P25ldyBzKGUmJiFpP3Quc291cmNlOnQsbik6cygoZT10IGluc3RhbmNlb2YgZik/dC5zb3VyY2U6dCxlJiZpP2EuY2FsbCh0KTpuKSxyP3RoaXM6bCxmKX07Zm9yKHZhciBnPWZ1bmN0aW9uKG4pe24gaW4gZnx8aShmLG4se2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gc1tuXX0sc2V0OmZ1bmN0aW9uKHQpe3Nbbl09dH19KX0seT11KHMpLGQ9MDtkPHkubGVuZ3RoOylnKHlbZCsrXSk7KGwuY29uc3RydWN0b3I9ZikucHJvdG90eXBlPWwscigxMikoZSwiUmVnRXhwIixmKX1yKDM4KSgiUmVnRXhwIil9LGZ1bmN0aW9uKHQsbixyKXtyKDExMyk7dmFyIGU9cigxKSxpPXIoNTApLG89cig3KSx1PSJ0b1N0cmluZyIsYz0vLi9bdV0sYT1mdW5jdGlvbih0KXtyKDEyKShSZWdFeHAucHJvdG90eXBlLHUsdCwhMCl9O3IoMykoZnVuY3Rpb24oKXtyZXR1cm4iL2EvYiIhPWMuY2FsbCh7c291cmNlOiJhIixmbGFnczoiYiJ9KX0pP2EoZnVuY3Rpb24gdG9TdHJpbmcoKXt2YXIgdD1lKHRoaXMpO3JldHVybiIvIi5jb25jYXQodC5zb3VyY2UsIi8iLCJmbGFncyJpbiB0P3QuZmxhZ3M6IW8mJnQgaW5zdGFuY2VvZiBSZWdFeHA/aS5jYWxsKHQpOkp0KX0pOmMubmFtZSE9dSYmYShmdW5jdGlvbiB0b1N0cmluZygpe3JldHVybiBjLmNhbGwodGhpcyl9KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBsPXIoMSksaD1yKDYpLHA9cig4OCksdj1yKDU4KTtyKDU5KSgibWF0Y2giLDEsZnVuY3Rpb24oZSxpLGYscyl7cmV0dXJuW2Z1bmN0aW9uIG1hdGNoKHQpe3ZhciBuPWUodGhpcykscj10PT1KdD9KdDp0W2ldO3JldHVybiByIT09SnQ/ci5jYWxsKHQsbik6bmV3IFJlZ0V4cCh0KVtpXShTdHJpbmcobikpfSxmdW5jdGlvbih0KXt2YXIgbj1zKGYsdCx0aGlzKTtpZihuLmRvbmUpcmV0dXJuIG4udmFsdWU7dmFyIHI9bCh0KSxlPVN0cmluZyh0aGlzKTtpZighci5nbG9iYWwpcmV0dXJuIHYocixlKTtmb3IodmFyIGksbz1yLnVuaWNvZGUsdT1bXSxjPXIubGFzdEluZGV4PTA7bnVsbCE9PShpPXYocixlKSk7KXt2YXIgYT1TdHJpbmcoaVswXSk7IiI9PT0odVtjXT1hKSYmKHIubGFzdEluZGV4PXAoZSxoKHIubGFzdEluZGV4KSxvKSksYysrfXJldHVybiAwPT09Yz9udWxsOnV9XX0pfSxmdW5jdGlvbih0LG4scil7dmFyIHc9cigxKSxlPXIoOSksRT1yKDYpLE89cigyMCksTT1yKDg4KSxJPXIoNTgpLFA9TWF0aC5tYXgsRj1NYXRoLm1pbixoPU1hdGguZmxvb3IscD0vXCQoWyQmYCddfFxkXGQ/fDxbXj5dKj4pL2csdj0vXCQoWyQmYCddfFxkXGQ/KS9nO3IoNTkpKCJyZXBsYWNlIiwyLGZ1bmN0aW9uKGksbyx4LG0pe3JldHVybltmdW5jdGlvbiByZXBsYWNlKHQsbil7dmFyIHI9aSh0aGlzKSxlPXQ9PUp0P0p0OnRbb107cmV0dXJuIGUhPT1KdD9lLmNhbGwodCxyLG4pOnguY2FsbChTdHJpbmcociksdCxuKX0sZnVuY3Rpb24odCxuKXt2YXIgcj1tKHgsdCx0aGlzLG4pO2lmKHIuZG9uZSlyZXR1cm4gci52YWx1ZTt2YXIgZT13KHQpLGk9U3RyaW5nKHRoaXMpLG89ImZ1bmN0aW9uIj09dHlwZW9mIG47b3x8KG49U3RyaW5nKG4pKTt2YXIgdT1lLmdsb2JhbDtpZih1KXt2YXIgYz1lLnVuaWNvZGU7ZS5sYXN0SW5kZXg9MH1mb3IodmFyIGE9W107Oyl7dmFyIGY9SShlLGkpO2lmKA0KbnVsbD09PWYpYnJlYWs7aWYoYS5wdXNoKGYpLCF1KWJyZWFrOyIiPT09U3RyaW5nKGZbMF0pJiYoZS5sYXN0SW5kZXg9TShpLEUoZS5sYXN0SW5kZXgpLGMpKX1mb3IodmFyIHMsbD0iIixoPTAscD0wO3A8YS5sZW5ndGg7cCsrKXtmPWFbcF07Zm9yKHZhciB2PVN0cmluZyhmWzBdKSxnPVAoRihPKGYuaW5kZXgpLGkubGVuZ3RoKSwwKSx5PVtdLGQ9MTtkPGYubGVuZ3RoO2QrKyl5LnB1c2goKHM9ZltkXSk9PT1KdD9zOlN0cmluZyhzKSk7dmFyIGI9Zi5ncm91cHM7aWYobyl7dmFyIFM9W3ZdLmNvbmNhdCh5LGcsaSk7YiE9PUp0JiZTLnB1c2goYik7dmFyIF89U3RyaW5nKG4uYXBwbHkoSnQsUykpfWVsc2UgXz1nZXRTdWJzdGl0dXRpb24odixpLGcseSxiLG4pO2g8PWcmJihsKz1pLnNsaWNlKGgsZykrXyxoPWcrdi5sZW5ndGgpfXJldHVybiBsK2kuc2xpY2UoaCl9XTtmdW5jdGlvbiBnZXRTdWJzdGl0dXRpb24obyx1LGMsYSxmLHQpe3ZhciBzPWMrby5sZW5ndGgsbD1hLmxlbmd0aCxuPXY7cmV0dXJuIGYhPT1KdCYmKGY9ZShmKSxuPXApLHguY2FsbCh0LG4sZnVuY3Rpb24odCxuKXt2YXIgcjtzd2l0Y2gobi5jaGFyQXQoMCkpe2Nhc2UiJCI6cmV0dXJuIiQiO2Nhc2UiJiI6cmV0dXJuIG87Y2FzZSJgIjpyZXR1cm4gdS5zbGljZSgwLGMpO2Nhc2UiJyI6cmV0dXJuIHUuc2xpY2Uocyk7Y2FzZSI8IjpyPWZbbi5zbGljZSgxLC0xKV07YnJlYWs7ZGVmYXVsdDp2YXIgZT0rbjtpZigwPT09ZSlyZXR1cm4gdDtpZihsPGUpe3ZhciBpPWgoZS8xMCk7cmV0dXJuIDA9PT1pP3Q6aTw9bD9hW2ktMV09PT1KdD9uLmNoYXJBdCgxKTphW2ktMV0rbi5jaGFyQXQoMSk6dH1yPWFbZS0xXX1yZXR1cm4gcj09PUp0PyIiOnJ9KX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBhPXIoMSksZj1yKDk5KSxzPXIoNTgpO3IoNTkpKCJzZWFyY2giLDEsZnVuY3Rpb24oZSxpLHUsYyl7cmV0dXJuW2Z1bmN0aW9uIHNlYXJjaCh0KXt2YXIgbj1lKHRoaXMpLHI9dD09SnQ/SnQ6dFtpXTtyZXR1cm4gciE9PUp0P3IuY2FsbCh0LG4pOm5ldyBSZWdFeHAodClbaV0oU3RyaW5nKG4pKX0sZnVuY3Rpb24odCl7dmFyIG49Yyh1LHQsdGhpcyk7aWYobi5kb25lKXJldHVybiBuLnZhbHVlO3ZhciByPWEodCksZT1TdHJpbmcodGhpcyksaT1yLmxhc3RJbmRleDtmKGksMCl8fChyLmxhc3RJbmRleD0wKTt2YXIgbz1zKHIsZSk7cmV0dXJuIGYoci5sYXN0SW5kZXgsaSl8fChyLmxhc3RJbmRleD1pKSxudWxsPT09bz8tMTpvLmluZGV4fV19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBzPXIoNTYpLGI9cigxKSxTPXIoNTEpLF89cig4OCkseD1yKDYpLG09cig1OCksbD1yKDg3KSxlPXIoMyksdz1NYXRoLm1pbixoPVtdLnB1c2gsdT0ic3BsaXQiLHA9Imxlbmd0aCIsdj0ibGFzdEluZGV4IixFPTQyOTQ5NjcyOTUsTz0hZShmdW5jdGlvbigpe1JlZ0V4cChFLCJ5Iil9KTtyKDU5KSgic3BsaXQiLDIsZnVuY3Rpb24oaSxvLGcseSl7dmFyIGQ7cmV0dXJuIGQ9ImMiPT0iYWJiYyJbdV0oLyhiKSovKVsxXXx8NCE9InRlc3QiW3VdKC8oPzopLywtMSlbcF18fDIhPSJhYiJbdV0oLyg/OmFiKSovKVtwXXx8NCE9Ii4iW3VdKC8oLj8pKC4/KS8pW3BdfHwxPCIuIlt1XSgvKCkoKS8pW3BdfHwiIlt1XSgvLj8vKVtwXT9mdW5jdGlvbih0LG4pe3ZhciByPVN0cmluZyh0aGlzKTtpZih0PT09SnQmJjA9PT1uKXJldHVybltdO2lmKCFzKHQpKXJldHVybiBnLmNhbGwocix0LG4pO2Zvcih2YXIgZSxpLG8sdT1bXSxjPTAsYT1uPT09SnQ/RTpuPj4+MCxmPW5ldyBSZWdFeHAodC5zb3VyY2UsKHQuaWdub3JlQ2FzZT8iaSI6IiIpKyh0Lm11bHRpbGluZT8ibSI6IiIpKyh0LnVuaWNvZGU/InUiOiIiKSsodC5zdGlja3k/InkiOiIiKSsiZyIpOyhlPWwuY2FsbChmLHIpKSYmIShjPChpPWZbdl0pJiYodS5wdXNoKHIuc2xpY2UoYyxlLmluZGV4KSksMTxlW3BdJiZlLmluZGV4PHJbcF0mJmguYXBwbHkodSxlLnNsaWNlKDEpKSxvPWVbMF1bcF0sYz1pLGE8PXVbcF0pKTspZlt2XT09PWUuaW5kZXgmJmZbdl0rKztyZXR1cm4gYz09PXJbcF0/IW8mJmYudGVzdCgiIil8fHUucHVzaCgiIik6dS5wdXNoKHIuc2xpY2UoYykpLGE8dVtwXT91LnNsaWNlKDAsYSk6dX06IjAiW3VdKEp0LDApW3BdP2Z1bmN0aW9uKHQsbil7cmV0dXJuIHQ9PT1KdCYmMD09PW4/W106Zy5jYWxsKHRoaXMsdCxuKX06ZyxbZnVuY3Rpb24gc3BsaXQodCxuKXt2YXIgcj1pKHRoaXMpLGU9dD09SnQ/SnQ6dFtvXTtyZXR1cm4gZSE9PUp0P2UuY2FsbCh0LHIsbik6ZC5jYWxsKFN0cmluZyhyKSx0LG4pfSxmdW5jdGlvbih0LG4pe3ZhciByPXkoZCx0LHRoaXMsbixkIT09Zyk7aWYoci5kb25lKXJldHVybiByLnZhbHVlO3ZhciBlPWIodCksaT1TdHJpbmcodGhpcyksbz1TKGUsUmVnRXhwKSx1PWUudW5pY29kZSxjPW5ldyBvKE8/ZToiXig/OiIrZS5zb3VyY2UrIikiLChlLmlnbm9yZUNhc2U/ImkiOiIiKSsoZS5tdWx0aWxpbmU/Im0iOiIiKSsoZS51bmljb2RlPyJ1IjoiIikrKE8/InkiOiJnIikpLGE9bj09PUp0P0U6bj4+PjA7aWYoMD09PWEpcmV0dXJuW107aWYoMD09PWkubGVuZ3RoKXJldHVybiBudWxsPT09bShjLGkpP1tpXTpbXTtmb3IodmFyIGY9MCxzPTAsbD1bXTtzPGkubGVuZ3RoOyl7Yy5sYXN0SW5kZXg9Tz9zOjA7dmFyIGgscD1tKGMsTz9pOmkuc2xpY2UocykpO2lmKG51bGw9PT1wfHwoaD13KHgoYy5sYXN0SW5kZXgrKE8/MDpzKSksaS5sZW5ndGgpKT09PWYpcz1fKGkscyx1KTtlbHNle2lmKGwucHVzaChpLnNsaWNlKGYscykpLGwubGVuZ3RoPT09YSlyZXR1cm4gbDtmb3IodmFyIHY9MTt2PD1wLmxlbmd0aC0xO3YrKylpZihsLnB1c2gocFt2XSksbC5sZW5ndGg9PT1hKXJldHVybiBsO3M9Zj1ofX1yZXR1cm4gbC5wdXNoKGkuc2xpY2UoZikpLGx9XX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHIsaSxvLHUsYz1lKDI5KSxhPWUoMiksZj1lKDE4KSxzPWUoNDQpLGw9ZSgwKSxoPWUoNCkscD1lKDEwKSx2PWUoMzkpLGc9ZSg0MCkseT1lKDUxKSxkPWUoODkpLnNldCxiPWUoOTApKCksUz1lKDkxKSxfPWUoMTE0KSx4PWUoNjApLG09ZSgxMTUpLHc9IlByb21pc2UiLEU9YS5UeXBlRXJyb3IsTz1hLnByb2Nlc3MsTT1PJiZPLnZlcnNpb25zLEk9TSYmTS52OHx8IiIsUD1hW3ddLEY9InByb2Nlc3MiPT1zKE8pLEE9ZnVuY3Rpb24oKXt9LGs9aT1TLmYsTj0hIWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PVAucmVzb2x2ZSgxKSxuPSh0LmNvbnN0cnVjdG9yPXt9KVtlKDUpKCJzcGVjaWVzIildPWZ1bmN0aW9uKHQpe3QoQSxBKX07cmV0dXJuKEZ8fCJmdW5jdGlvbiI9PXR5cGVvZiBQcm9taXNlUmVqZWN0aW9uRXZlbnQpJiZ0LnRoZW4oQSlpbnN0YW5jZW9mIG4mJjAhPT1JLmluZGV4T2YoIjYuNiIpJiYtMT09PXguaW5kZXhPZigiQ2hyb21lLzY2Iil9Y2F0Y2gocil7fX0oKSxqPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiEoIWgodCl8fCJmdW5jdGlvbiIhPXR5cGVvZihuPXQudGhlbikpJiZufSxSPWZ1bmN0aW9uKGwscil7aWYoIWwuX24pe2wuX249ITA7dmFyIGU9bC5fYztiKGZ1bmN0aW9uKCl7Zm9yKHZhciBmPWwuX3Yscz0xPT1sLl9zLHQ9MCxuPWZ1bmN0aW9uKHQpe3ZhciBuLHIsZSxpPXM/dC5vazp0LmZhaWwsbz10LnJlc29sdmUsdT10LnJlamVjdCxjPXQuZG9tYWluO3RyeXtpPyhzfHwoMj09bC5faCYmRChsKSxsLl9oPTEpLCEwPT09aT9uPWY6KGMmJmMuZW50ZXIoKSxuPWkoZiksYyYmKGMuZXhpdCgpLGU9ITApKSxuPT09dC5wcm9taXNlP3UoRSgiUHJvbWlzZS1jaGFpbiBjeWNsZSIpKToocj1qKG4pKT9yLmNhbGwobixvLHUpOm8obikpOnUoZil9Y2F0Y2goYSl7YyYmIWUmJmMuZXhpdCgpLHUoYSl9fTt0PGUubGVuZ3RoOyluKGVbdCsrXSk7bC5fYz1bXSxsLl9uPSExLHImJiFsLl9oJiZUKGwpfSl9fSxUPWZ1bmN0aW9uKG8pe2QuY2FsbChhLGZ1bmN0aW9uKCl7dmFyIHQsbixyLGU9by5fdixpPUwobyk7aWYoaSYmKHQ9XyhmdW5jdGlvbigpe0Y/Ty5lbWl0KCJ1bmhhbmRsZWRSZWplY3Rpb24iLGUsbyk6KG49YS5vbnVuaGFuZGxlZHJlamVjdGlvbik/bih7cHJvbWlzZTpvLHJlYXNvbjplfSk6KHI9YS5jb25zb2xlKSYmci5lcnJvciYmci5lcnJvcigiVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uIixlKX0pLG8uX2g9Rnx8TChvKT8yOjEpLG8uX2E9SnQsaSYmdC5lKXRocm93IHQudn0pfSxMPWZ1bmN0aW9uKHQpe3JldHVybiAxIT09dC5faCYmMD09PSh0Ll9hfHx0Ll9jKS5sZW5ndGh9LEQ9ZnVuY3Rpb24obil7ZC5jYWxsKGEsZnVuY3Rpb24oKXt2YXIgdDtGP08uZW1pdCgicmVqZWN0aW9uSGFuZGxlZCIsbik6KHQ9YS5vbnJlamVjdGlvbmhhbmRsZWQpJiZ0KHtwcm9taXNlOm4scmVhc29uOm4uX3Z9KX0pfSxDPWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXM7bi5fZHx8KG4uX2Q9ITAsKG49bi5fd3x8bikuX3Y9dCxuLl9zPTIsbi5fYXx8KG4uX2E9bi5fYy5zbGljZSgpKSxSKG4sITApKX0sVT1mdW5jdGlvbihyKXt2YXIgZSxpPXRoaXM7aWYoIWkuX2Qpe2kuX2Q9ITAsaT1pLl93fHxpO3RyeXtpZihpPT09cil0aHJvdyBFKCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZiIpOyhlPWoocikpP2IoZnVuY3Rpb24oKXt2YXIgdD17X3c6aSxfZDohMX07dHJ5e2UuY2FsbChyLGYoVSx0LDEpLGYoQyx0LDEpKX1jYXRjaChuKXtDLmNhbGwodCxuKX19KTooaS5fdj1yLGkuX3M9MSxSKGksITEpKX1jYXRjaCh0KXtDLmNhbGwoe193OmksX2Q6ITF9LHQpfX19O058fChQPWZ1bmN0aW9uIFByb21pc2UodCl7dih0aGlzLFAsdywiX2giKSxwKHQpLHIuY2FsbCh0aGlzKTt0cnl7dChmKFUsdGhpcywxKSxmKEMsdGhpcywxKSl9Y2F0Y2gobil7Qy5jYWxsKHRoaXMsbil9fSwocj1mdW5jdGlvbiBQcm9taXNlKHQpe3RoaXMuX2M9W10sdGhpcy5fYT1KdCx0aGlzLl9zPTAsdGhpcy5fZD0hMSx0aGlzLl92PUp0LHRoaXMuX2g9MCx0aGlzLl9uPSExfSkucHJvdG90eXBlPWUoNDEpKFAucHJvdG90eXBlLHt0aGVuOmZ1bmN0aW9uIHRoZW4odCxuKXt2YXIgcj1rKHkodGhpcyxQKSk7cmV0dXJuIHIub2s9ImZ1bmN0aW9uIiE9dHlwZW9mIHR8fHQsci5mYWlsPSJmdW5jdGlvbiI9PXR5cGVvZiBuJiZuLHIuZG9tYWluPUY/Ty5kb21haW46SnQsdGhpcy5fYy5wdXNoKHIpLHRoaXMuX2EmJnRoaXMuX2EucHVzaChyKSx0aGlzLl9zJiZSKHRoaXMsITEpLHIucHJvbWlzZX0sImNhdGNoIjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50aGVuKEp0LHQpfX0pLG89ZnVuY3Rpb24oKXt2YXIgdD1uZXcgcjt0aGlzLnByb21pc2U9dCx0aGlzLnJlc29sdmU9ZihVLHQsMSksdGhpcy5yZWplY3Q9ZihDLHQsMSl9LFMuZj1rPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09UHx8dD09PXU/bmV3IG8odCk6aSh0KX0pLGwobC5HK2wuVytsLkYqIU4se1Byb21pc2U6UH0pLGUoNDMpKFAsdyksZSgzOCkodyksdT1lKDI2KVt3XSxsKGwuUytsLkYqIU4sdyx7cmVqZWN0OmZ1bmN0aW9uIHJlamVjdCh0KXt2YXIgbj1rKHRoaXMpO3JldHVybigwLG4ucmVqZWN0KSh0KSxuLnByb21pc2V9fSksbChsLlMrbC5GKihjfHwhTiksdyx7cmVzb2x2ZTpmdW5jdGlvbiByZXNvbHZlKHQpe3JldHVybiBtKGMmJnRoaXM9PT11P1A6dGhpcyx0KX19KSxsKGwuUytsLkYqIShOJiZlKDU3KShmdW5jdGlvbih0KXtQLmFsbCh0KVsiY2F0Y2giXShBKX0pKSx3LHthbGw6ZnVuY3Rpb24gYWxsKHQpe3ZhciB1PXRoaXMsbj1rKHUpLGM9bi5yZXNvbHZlLGE9bi5yZWplY3Qscj1fKGZ1bmN0aW9uKCl7dmFyIGU9W10saT0wLG89MTtnKHQsITEsZnVuY3Rpb24odCl7dmFyIG49aSsrLHI9ITE7ZS5wdXNoKEp0KSxvKyssdS5yZXNvbHZlKHQpLnRoZW4oZnVuY3Rpb24odCl7cnx8KHI9ITAsZVtuXT10LC0tb3x8YyhlKSl9LGEpfSksLS1vfHxjKGUpfSk7cmV0dXJuIHIuZSYmYShyLnYpLG4ucHJvbWlzZX0scmFjZTpmdW5jdGlvbiByYWNlKHQpe3ZhciBuPXRoaXMscj1rKG4pLGU9ci5yZWplY3QsaT1fKGZ1bmN0aW9uKCl7Zyh0LCExLGZ1bmN0aW9uKHQpe24ucmVzb2x2ZSh0KS50aGVuKHIucmVzb2x2ZSxlKX0pfSk7cmV0dXJuIGkuZSYmZShpLnYpLHIucHJvbWlzZX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMTIwKSxpPXIoNDIpLG89IldlYWtTZXQiO3IoNjEpKG8sZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uIFdlYWtTZXQoKXtyZXR1cm4gdCh0aGlzLDA8YXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06SnQpfX0se2FkZDpmdW5jdGlvbiBhZGQodCl7cmV0dXJuIGUuZGVmKGkodGhpcyxvKSx0LCEwKX19LGUsITEsITApfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxvPXIoMTApLHU9cigxKSxjPShyKDIpLlJlZmxlY3R8fHt9KS5hcHBseSxhPUZ1bmN0aW9uLmFwcGx5O2UoZS5TK2UuRiohcigzKShmdW5jdGlvbigpe2MoZnVuY3Rpb24oKXt9KX0pLCJSZWZsZWN0Iix7YXBwbHk6ZnVuY3Rpb24gYXBwbHkodCxuLHIpe3ZhciBlPW8odCksaT11KHIpO3JldHVybiBjP2MoZSxuLGkpOmEuY2FsbChlLG4saSl9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLGM9cigzNiksYT1yKDEwKSxmPXIoMSkscz1yKDQpLGk9cigzKSxsPXIoMTAwKSxoPShyKDIpLlJlZmxlY3R8fHt9KS5jb25zdHJ1Y3QscD1pKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gRigpe31yZXR1cm4hKGgoZnVuY3Rpb24oKXt9LFtdLEYpaW5zdGFuY2VvZiBGKX0pLHY9IWkoZnVuY3Rpb24oKXtoKGZ1bmN0aW9uKCl7fSl9KTtlKGUuUytlLkYqKHB8fHYpLCJSZWZsZWN0Iix7Y29uc3RydWN0OmZ1bmN0aW9uIGNvbnN0cnVjdCh0LG4pe2EodCksZihuKTt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPDM/dDphKGFyZ3VtZW50c1syXSk7aWYodiYmIXApcmV0dXJuIGgodCxuLHIpO2lmKHQ9PXIpe3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgdDtjYXNlIDE6cmV0dXJuIG5ldyB0KG5bMF0pO2Nhc2UgMjpyZXR1cm4gbmV3IHQoblswXSxuWzFdKTtjYXNlIDM6cmV0dXJuIG5ldyB0KG5bMF0sblsxXSxuWzJdKTtjYXNlIDQ6cmV0dXJuIG5ldyB0KG5bMF0sblsxXSxuWzJdLG5bM10pfXZhciBlPVtudWxsXTtyZXR1cm4gZS5wdXNoLmFwcGx5KGUsbiksbmV3KGwuYXBwbHkodCxlKSl9dmFyIGk9ci5wcm90b3R5cGUsbz1jKHMoaSk/aTpPYmplY3QucHJvdG90eXBlKSx1PUZ1bmN0aW9uLmFwcGx5LmNhbGwodCxvLG4pO3JldHVybiBzKHUpP3U6b319KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBpPXIoOCksZT1yKDApLG89cigxKSx1PXIoMjIpO2UoZS5TK2UuRipyKDMpKGZ1bmN0aW9uKCl7UmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShpLmYoe30sMSx7dmFsdWU6MX0pLDEse3ZhbHVlOjJ9KX0pLCJSZWZsZWN0Iix7ZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodCxuLHIpe28odCksbj11KG4sITApLG8ocik7dHJ5e3JldHVybiBpLmYodCxuLHIpLCEwfWNhdGNoKGUpe3JldHVybiExfX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1yKDE2KS5mLG89cigxKTtlKGUuUywiUmVmbGVjdCIse2RlbGV0ZVByb3BlcnR5OmZ1bmN0aW9uIGRlbGV0ZVByb3BlcnR5KHQsbil7dmFyIHI9aShvKHQpLG4pO3JldHVybiEociYmIXIuY29uZmlndXJhYmxlKSYmZGVsZXRlIHRbbl19fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLGk9cigxKSxvPWZ1bmN0aW9uKHQpe3RoaXMuX3Q9aSh0KSx0aGlzLl9pPTA7dmFyIG4scj10aGlzLl9rPVtdO2ZvcihuIGluIHQpci5wdXNoKG4pfTtyKDgwKShvLCJPYmplY3QiLGZ1bmN0aW9uKCl7dmFyIHQsbj10aGlzLl9rO2Rve2lmKG4ubGVuZ3RoPD10aGlzLl9pKXJldHVybnt2YWx1ZTpKdCxkb25lOiEwfX13aGlsZSghKCh0PW5bdGhpcy5faSsrXSlpbiB0aGlzLl90KSk7cmV0dXJue3ZhbHVlOnQsZG9uZTohMX19KSxlKGUuUywiUmVmbGVjdCIse2VudW1lcmF0ZTpmdW5jdGlvbiBlbnVtZXJhdGUodCl7cmV0dXJuIG5ldyBvKHQpfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIG89cigxNiksdT1yKDE3KSxjPXIoMTQpLGU9cigwKSxhPXIoNCksZj1yKDEpO2UoZS5TLCJSZWZsZWN0Iix7Z2V0OmZ1bmN0aW9uIGdldCh0LG4pe3ZhciByLGUsaT1hcmd1bWVudHMubGVuZ3RoPDM/dDphcmd1bWVudHNbMl07cmV0dXJuIGYodCk9PT1pP3Rbbl06KHI9by5mKHQsbikpP2MociwidmFsdWUiKT9yLnZhbHVlOnIuZ2V0IT09SnQ/ci5nZXQuY2FsbChpKTpKdDphKGU9dSh0KSk/Z2V0KGUsbixpKTp2b2lkIDB9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDE2KSxpPXIoMCksbz1yKDEpO2koaS5TLCJSZWZsZWN0Iix7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pe3JldHVybiBlLmYobyh0KSxuKX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1yKDE3KSxvPXIoMSk7ZShlLlMsIlJlZmxlY3QiLHtnZXRQcm90b3R5cGVPZjpmdW5jdGlvbiBnZXRQcm90b3R5cGVPZih0KXtyZXR1cm4gaShvKHQpKX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCk7ZShlLlMsIlJlZmxlY3QiLHtoYXM6ZnVuY3Rpb24gaGFzKHQsbil7cmV0dXJuIG4gaW4gdH19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1yKDEpLG89T2JqZWN0LmlzRXh0ZW5zaWJsZTtlKGUuUywiUmVmbGVjdCIse2lzRXh0ZW5zaWJsZTpmdW5jdGlvbiBpc0V4dGVuc2libGUodCl7cmV0dXJuIGkodCksIW98fG8odCl9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApO2UoZS5TLCJSZWZsZWN0Iix7b3duS2V5czpyKDEyMSl9KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1yKDEpLG89T2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO2UoZS5TLCJSZWZsZWN0Iix7cHJldmVudEV4dGVuc2lvbnM6ZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnModCl7aSh0KTt0cnl7cmV0dXJuIG8mJm8odCksITB9Y2F0Y2gobil7cmV0dXJuITF9fX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGM9cig4KSxhPXIoMTYpLGY9cigxNykscz1yKDE0KSxlPXIoMCksbD1yKDMyKSxoPXIoMSkscD1yKDQpO2UoZS5TLCJSZWZsZWN0Iix7c2V0OmZ1bmN0aW9uIHNldCh0LG4scil7dmFyIGUsaSxvPWFyZ3VtZW50cy5sZW5ndGg8ND90OmFyZ3VtZW50c1szXSx1PWEuZihoKHQpLG4pO2lmKCF1KXtpZihwKGk9Zih0KSkpcmV0dXJuIHNldChpLG4scixvKTt1PWwoMCl9aWYocyh1LCJ2YWx1ZSIpKXtpZighMT09PXUud3JpdGFibGV8fCFwKG8pKXJldHVybiExO2lmKGU9YS5mKG8sbikpe2lmKGUuZ2V0fHxlLnNldHx8ITE9PT1lLndyaXRhYmxlKXJldHVybiExO2UudmFsdWU9cixjLmYobyxuLGUpfWVsc2UgYy5mKG8sbixsKDAscikpO3JldHVybiEwfXJldHVybiB1LnNldCE9PUp0JiYodS5zZXQuY2FsbChvLHIpLCEwKX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1yKDcxKTtpJiZlKGUuUywiUmVmbGVjdCIse3NldFByb3RvdHlwZU9mOmZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKHQsbil7aS5jaGVjayh0LG4pO3RyeXtyZXR1cm4gaS5zZXQodCxuKSwhMH1jYXRjaChyKXtyZXR1cm4hMX19fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApO2UoZS5TLCJEYXRlIix7bm93OmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLGk9cig5KSxvPXIoMjIpO2UoZS5QK2UuRipyKDMpKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT1uZXcgRGF0ZShOYU4pLnRvSlNPTigpfHwxIT09RGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoe3RvSVNPU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIDF9fSl9KSwiRGF0ZSIse3RvSlNPTjpmdW5jdGlvbiB0b0pTT04odCl7dmFyIG49aSh0aGlzKSxyPW8obik7cmV0dXJuIm51bWJlciIhPXR5cGVvZiByfHxpc0Zpbml0ZShyKT9uLnRvSVNPU3RyaW5nKCk6bnVsbH19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1yKDI1Mik7ZShlLlArZS5GKihEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyE9PWkpLCJEYXRlIix7dG9JU09TdHJpbmc6aX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigzKSxpPURhdGUucHJvdG90eXBlLmdldFRpbWUsbz1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyx1PWZ1bmN0aW9uKHQpe3JldHVybiA5PHQ/dDoiMCIrdH07dC5leHBvcnRzPWUoZnVuY3Rpb24oKXtyZXR1cm4iMDM4NS0wNy0yNVQwNzowNjozOS45OTlaIiE9by5jYWxsKG5ldyBEYXRlKC01ZTEzLTEpKX0pfHwhZShmdW5jdGlvbigpe28uY2FsbChuZXcgRGF0ZShOYU4pKX0pP2Z1bmN0aW9uIHRvSVNPU3RyaW5nKCl7aWYoIWlzRmluaXRlKGkuY2FsbCh0aGlzKSkpdGhyb3cgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7dmFyIHQ9dGhpcyxuPXQuZ2V0VVRDRnVsbFllYXIoKSxyPXQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksZT1uPDA/Ii0iOjk5OTk8bj8iKyI6IiI7cmV0dXJuIGUrKCIwMDAwMCIrTWF0aC5hYnMobikpLnNsaWNlKGU/LTY6LTQpKyItIit1KHQuZ2V0VVRDTW9udGgoKSsxKSsiLSIrdSh0LmdldFVUQ0RhdGUoKSkrIlQiK3UodC5nZXRVVENIb3VycygpKSsiOiIrdSh0LmdldFVUQ01pbnV0ZXMoKSkrIjoiK3UodC5nZXRVVENTZWNvbmRzKCkpKyIuIisoOTk8cj9yOiIwIit1KHIpKSsiWiJ9Om99LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1EYXRlLnByb3RvdHlwZSxpPSJJbnZhbGlkIERhdGUiLG89InRvU3RyaW5nIix1PWVbb10sYz1lLmdldFRpbWU7bmV3IERhdGUoTmFOKSsiIiE9aSYmcigxMikoZSxvLGZ1bmN0aW9uIHRvU3RyaW5nKCl7dmFyIHQ9Yy5jYWxsKHRoaXMpO3JldHVybiB0PT10P3UuY2FsbCh0aGlzKTppfSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDUpKCJ0b1ByaW1pdGl2ZSIpLGk9RGF0ZS5wcm90b3R5cGU7ZSBpbiBpfHxyKDExKShpLGUscigyNTUpKX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMSksaT1yKDIyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoInN0cmluZyIhPT10JiYibnVtYmVyIiE9PXQmJiJkZWZhdWx0IiE9PXQpdGhyb3cgVHlwZUVycm9yKCJJbmNvcnJlY3QgaGludCIpO3JldHVybiBpKGUodGhpcyksIm51bWJlciIhPXQpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1yKDYyKSxvPXIoOTIpLGY9cigxKSxzPXIoMzUpLGw9cig2KSx1PXIoNCksYz1yKDIpLkFycmF5QnVmZmVyLGg9cig1MSkscD1vLkFycmF5QnVmZmVyLHY9by5EYXRhVmlldyxhPWkuQUJWJiZjLmlzVmlldyxnPXAucHJvdG90eXBlLnNsaWNlLHk9aS5WSUVXLGQ9IkFycmF5QnVmZmVyIjtlKGUuRytlLlcrZS5GKihjIT09cCkse0FycmF5QnVmZmVyOnB9KSxlKGUuUytlLkYqIWkuQ09OU1RSLGQse2lzVmlldzpmdW5jdGlvbiBpc1ZpZXcodCl7cmV0dXJuIGEmJmEodCl8fHUodCkmJnkgaW4gdH19KSxlKGUuUCtlLlUrZS5GKnIoMykoZnVuY3Rpb24oKXtyZXR1cm4hbmV3IHAoMikuc2xpY2UoMSxKdCkuYnl0ZUxlbmd0aH0pLGQse3NsaWNlOmZ1bmN0aW9uIHNsaWNlKHQsbil7aWYoZyE9PUp0JiZuPT09SnQpcmV0dXJuIGcuY2FsbChmKHRoaXMpLHQpO2Zvcih2YXIgcj1mKHRoaXMpLmJ5dGVMZW5ndGgsZT1zKHQsciksaT1zKG49PT1KdD9yOm4sciksbz1uZXcoaCh0aGlzLHApKShsKGktZSkpLHU9bmV3IHYodGhpcyksYz1uZXcgdihvKSxhPTA7ZTxpOyljLnNldFVpbnQ4KGErKyx1LmdldFVpbnQ4KGUrKykpO3JldHVybiBvfX0pLHIoMzgpKGQpfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKTtlKGUuRytlLlcrZS5GKiFyKDYyKS5BQlYse0RhdGFWaWV3OnIoOTIpLkRhdGFWaWV3fSl9LGZ1bmN0aW9uKHQsbixyKXtyKDI3KSgiSW50OCIsMSxmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24gSW50OEFycmF5KHQsbixyKXtyZXR1cm4gZSh0aGlzLHQsbixyKX19KX0sZnVuY3Rpb24odCxuLHIpe3IoMjcpKCJVaW50OCIsMSxmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24gVWludDhBcnJheSh0LG4scil7cmV0dXJuIGUodGhpcyx0LG4scil9fSl9LGZ1bmN0aW9uKHQsbixyKXtyKDI3KSgiVWludDgiLDEsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uIFVpbnQ4Q2xhbXBlZEFycmF5KHQsbixyKXtyZXR1cm4gZSh0aGlzLHQsbixyKX19LCEwKX0sZnVuY3Rpb24odCxuLHIpe3IoMjcpKCJJbnQxNiIsMixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24gSW50MTZBcnJheSh0LG4scil7cmV0dXJuIGUodGhpcyx0LG4scil9fSl9LGZ1bmN0aW9uKHQsbixyKXtyKDI3KSgiVWludDE2IiwyLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbiBVaW50MTZBcnJheSh0LG4scil7cmV0dXJuIGUodGhpcyx0LG4scil9fSl9LGZ1bmN0aW9uKHQsbixyKXtyKDI3KSgiSW50MzIiLDQsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uIEludDMyQXJyYXkodCxuLHIpe3JldHVybiBlKHRoaXMsdCxuLHIpfX0pfSxmdW5jdGlvbih0LG4scil7cigyNykoIlVpbnQzMiIsNCxmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24gVWludDMyQXJyYXkodCxuLHIpe3JldHVybiBlKHRoaXMsdCxuLHIpfX0pfSxmdW5jdGlvbih0LG4scil7cigyNykoIkZsb2F0MzIiLDQsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uIEZsb2F0MzJBcnJheSh0LG4scil7cmV0dXJuIGUodGhpcyx0LG4scil9fSl9LGZ1bmN0aW9uKHQsbixyKXtyKDI3KSgiRmxvYXQ2NCIsOCxmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24gRmxvYXQ2NEFycmF5KHQsbixyKXtyZXR1cm4gZSh0aGlzLHQsbixyKX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1yKDUyKSghMCk7ZShlLlAsIkFycmF5Iix7aW5jbHVkZXM6ZnVuY3Rpb24gaW5jbHVkZXModCl7cmV0dXJuIGkodGhpcyx0LDE8YXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMV06SnQpfX0pLHIoMzEpKCJpbmNsdWRlcyIpfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxpPXIoMTIzKSxvPXIoOSksdT1yKDYpLGM9cigxMCksYT1yKDg0KTtlKGUuUCwiQXJyYXkiLHtmbGF0TWFwOmZ1bmN0aW9uIGZsYXRNYXAodCl7dmFyIG4scixlPW8odGhpcyk7cmV0dXJuIGModCksbj11KGUubGVuZ3RoKSxyPWEoZSwwKSxpKHIsZSxlLG4sMCwxLHQsYXJndW1lbnRzWzFdKSxyfX0pLHIoMzEpKCJmbGF0TWFwIil9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLGk9cigxMjMpLG89cig5KSx1PXIoNiksYz1yKDIwKSxhPXIoODQpO2UoZS5QLCJBcnJheSIse2ZsYXR0ZW46ZnVuY3Rpb24gZmxhdHRlbigpe3ZhciB0PWFyZ3VtZW50c1swXSxuPW8odGhpcykscj11KG4ubGVuZ3RoKSxlPWEobiwwKTtyZXR1cm4gaShlLG4sbixyLDAsdD09PUp0PzE6Yyh0KSksZX19KSxyKDMxKSgiZmxhdHRlbiIpfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxpPXIoNTUpKCEwKTtlKGUuUCwiU3RyaW5nIix7YXQ6ZnVuY3Rpb24gYXQodCl7cmV0dXJuIGkodGhpcyx0KX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1yKDEyNCksbz1yKDYwKSx1PS9WZXJzaW9uXC8xMFwuXGQrKFwuXGQrKT8oIE1vYmlsZVwvXHcrKT8gU2FmYXJpXC8vLnRlc3Qobyk7ZShlLlArZS5GKnUsIlN0cmluZyIse3BhZFN0YXJ0OmZ1bmN0aW9uIHBhZFN0YXJ0KHQpe3JldHVybiBpKHRoaXMsdCwxPGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzFdOkp0LCEwKX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1yKDEyNCksbz1yKDYwKSx1PS9WZXJzaW9uXC8xMFwuXGQrKFwuXGQrKT8oIE1vYmlsZVwvXHcrKT8gU2FmYXJpXC8vLnRlc3Qobyk7ZShlLlArZS5GKnUsIlN0cmluZyIse3BhZEVuZDpmdW5jdGlvbiBwYWRFbmQodCl7cmV0dXJuIGkodGhpcyx0LDE8YXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMV06SnQsITEpfX0pfSxmdW5jdGlvbih0LG4scil7cig0NSkoInRyaW1MZWZ0IixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24gdHJpbUxlZnQoKXtyZXR1cm4gdCh0aGlzLDEpfX0sInRyaW1TdGFydCIpfSxmdW5jdGlvbih0LG4scil7cig0NSkoInRyaW1SaWdodCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uIHRyaW1SaWdodCgpe3JldHVybiB0KHRoaXMsMil9fSwidHJpbUVuZCIpfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxpPXIoMjMpLG89cig2KSx1PXIoNTYpLGM9cig1MCksYT1SZWdFeHAucHJvdG90eXBlLGY9ZnVuY3Rpb24odCxuKXt0aGlzLl9yPXQsdGhpcy5fcz1ufTtyKDgwKShmLCJSZWdFeHAgU3RyaW5nIixmdW5jdGlvbiBuZXh0KCl7dmFyIHQ9dGhpcy5fci5leGVjKHRoaXMuX3MpO3JldHVybnt2YWx1ZTp0LGRvbmU6bnVsbD09PXR9fSksZShlLlAsIlN0cmluZyIse21hdGNoQWxsOmZ1bmN0aW9uIG1hdGNoQWxsKHQpe2lmKGkodGhpcyksIXUodCkpdGhyb3cgVHlwZUVycm9yKHQrIiBpcyBub3QgYSByZWdleHAhIik7dmFyIG49U3RyaW5nKHRoaXMpLHI9ImZsYWdzImluIGE/U3RyaW5nKHQuZmxhZ3MpOmMuY2FsbCh0KSxlPW5ldyBSZWdFeHAodC5zb3VyY2UsfnIuaW5kZXhPZigiZyIpP3I6ImciK3IpO3JldHVybiBlLmxhc3RJbmRleD1vKHQubGFzdEluZGV4KSxuZXcgZihlLG4pfX0pfSxmdW5jdGlvbih0LG4scil7cig2NykoImFzeW5jSXRlcmF0b3IiKX0sZnVuY3Rpb24odCxuLHIpe3IoNjcpKCJvYnNlcnZhYmxlIil9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLGE9cigxMjEpLGY9cigxNSkscz1yKDE2KSxsPXIoODIpO2UoZS5TLCJPYmplY3QiLHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOmZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCl7Zm9yKHZhciBuLHIsZT1mKHQpLGk9cy5mLG89YShlKSx1PXt9LGM9MDtjPG8ubGVuZ3RoOykocj1pKGUsbj1vW2MrK10pKSE9PUp0JiZsKHUsbixyKTtyZXR1cm4gdX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1yKDEyNSkoITEpO2UoZS5TLCJPYmplY3QiLHt2YWx1ZXM6ZnVuY3Rpb24gdmFsdWVzKHQpe3JldHVybiBpKHQpfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxpPXIoMTI1KSghMCk7ZShlLlMsIk9iamVjdCIse2VudHJpZXM6ZnVuY3Rpb24gZW50cmllcyh0KXtyZXR1cm4gaSh0KX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1yKDkpLG89cigxMCksdT1yKDgpO3IoNykmJmUoZS5QK3IoNjMpLCJPYmplY3QiLHtfX2RlZmluZUdldHRlcl9fOmZ1bmN0aW9uIF9fZGVmaW5lR2V0dGVyX18odCxuKXt1LmYoaSh0aGlzKSx0LHtnZXQ6byhuKSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxpPXIoOSksbz1yKDEwKSx1PXIoOCk7cig3KSYmZShlLlArcig2MyksIk9iamVjdCIse19fZGVmaW5lU2V0dGVyX186ZnVuY3Rpb24gX19kZWZpbmVTZXR0ZXJfXyh0LG4pe3UuZihpKHRoaXMpLHQse3NldDpvKG4pLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLGk9cig5KSxvPXIoMjIpLHU9cigxNyksYz1yKDE2KS5mO3IoNykmJmUoZS5QK3IoNjMpLCJPYmplY3QiLHtfX2xvb2t1cEdldHRlcl9fOmZ1bmN0aW9uIF9fbG9va3VwR2V0dGVyX18odCl7dmFyIG4scj1pKHRoaXMpLGU9byh0LCEwKTtkb3tpZihuPWMocixlKSlyZXR1cm4gbi5nZXR9d2hpbGUocj11KHIpKX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1yKDkpLG89cigyMiksdT1yKDE3KSxjPXIoMTYpLmY7cig3KSYmZShlLlArcig2MyksIk9iamVjdCIse19fbG9va3VwU2V0dGVyX186ZnVuY3Rpb24gX19sb29rdXBTZXR0ZXJfXyh0KXt2YXIgbixyPWkodGhpcyksZT1vKHQsITApO2Rve2lmKG49YyhyLGUpKXJldHVybiBuLnNldH13aGlsZShyPXUocikpfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKTtlKGUuUCtlLlIsIk1hcCIse3RvSlNPTjpyKDEyNikoIk1hcCIpfSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApO2UoZS5QK2UuUiwiU2V0Iix7dG9KU09OOnIoMTI2KSgiU2V0Iil9KX0sZnVuY3Rpb24odCxuLHIpe3IoNjQpKCJNYXAiKX0sZnVuY3Rpb24odCxuLHIpe3IoNjQpKCJTZXQiKX0sZnVuY3Rpb24odCxuLHIpe3IoNjQpKCJXZWFrTWFwIil9LGZ1bmN0aW9uKHQsbixyKXtyKDY0KSgiV2Vha1NldCIpfSxmdW5jdGlvbih0LG4scil7cig2NSkoIk1hcCIpfSxmdW5jdGlvbih0LG4scil7cig2NSkoIlNldCIpfSxmdW5jdGlvbih0LG4scil7cig2NSkoIldlYWtNYXAiKX0sZnVuY3Rpb24odCxuLHIpe3IoNjUpKCJXZWFrU2V0Iil9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApO2UoZS5HLHtnbG9iYWw6cigyKX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKTtlKGUuUywiU3lzdGVtIix7Z2xvYmFsOnIoMil9KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1yKDE5KTtlKGUuUywiRXJyb3IiLHtpc0Vycm9yOmZ1bmN0aW9uIGlzRXJyb3IodCl7cmV0dXJuIkVycm9yIj09PWkodCl9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApO2UoZS5TLCJNYXRoIix7Y2xhbXA6ZnVuY3Rpb24gY2xhbXAodCxuLHIpe3JldHVybiBNYXRoLm1pbihyLE1hdGgubWF4KG4sdCkpfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKTtlKGUuUywiTWF0aCIse0RFR19QRVJfUkFEOk1hdGguUEkvMTgwfSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLGk9MTgwL01hdGguUEk7ZShlLlMsIk1hdGgiLHtkZWdyZWVzOmZ1bmN0aW9uIGRlZ3JlZXModCl7cmV0dXJuIHQqaX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksbz1yKDEyOCksdT1yKDEwNyk7ZShlLlMsIk1hdGgiLHtmc2NhbGU6ZnVuY3Rpb24gZnNjYWxlKHQsbixyLGUsaSl7cmV0dXJuIHUobyh0LG4scixlLGkpKX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCk7ZShlLlMsIk1hdGgiLHtpYWRkaDpmdW5jdGlvbiBpYWRkaCh0LG4scixlKXt2YXIgaT10Pj4+MCxvPXI+Pj4wO3JldHVybihuPj4+MCkrKGU+Pj4wKSsoKGkmb3woaXxvKSZ+KGkrbz4+PjApKT4+PjMxKXwwfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKTtlKGUuUywiTWF0aCIse2lzdWJoOmZ1bmN0aW9uIGlzdWJoKHQsbixyLGUpe3ZhciBpPXQ+Pj4wLG89cj4+PjA7cmV0dXJuKG4+Pj4wKS0oZT4+PjApLSgofmkmb3x+KGlebykmaS1vPj4+MCk+Pj4zMSl8MH19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCk7ZShlLlMsIk1hdGgiLHtpbXVsaDpmdW5jdGlvbiBpbXVsaCh0LG4pe3ZhciByPSt0LGU9K24saT02NTUzNSZyLG89NjU1MzUmZSx1PXI+PjE2LGM9ZT4+MTYsYT0odSpvPj4+MCkrKGkqbz4+PjE2KTtyZXR1cm4gdSpjKyhhPj4xNikrKChpKmM+Pj4wKSsoNjU1MzUmYSk+PjE2KX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCk7ZShlLlMsIk1hdGgiLHtSQURfUEVSX0RFRzoxODAvTWF0aC5QSX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxpPU1hdGguUEkvMTgwO2UoZS5TLCJNYXRoIix7cmFkaWFuczpmdW5jdGlvbiByYWRpYW5zKHQpe3JldHVybiB0Kml9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApO2UoZS5TLCJNYXRoIix7c2NhbGU6cigxMjgpfSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApO2UoZS5TLCJNYXRoIix7dW11bGg6ZnVuY3Rpb24gdW11bGgodCxuKXt2YXIgcj0rdCxlPStuLGk9NjU1MzUmcixvPTY1NTM1JmUsdT1yPj4+MTYsYz1lPj4+MTYsYT0odSpvPj4+MCkrKGkqbz4+PjE2KTtyZXR1cm4gdSpjKyhhPj4+MTYpKygoaSpjPj4+MCkrKDY1NTM1JmEpPj4+MTYpfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKTtlKGUuUywiTWF0aCIse3NpZ25iaXQ6ZnVuY3Rpb24gc2lnbmJpdCh0KXtyZXR1cm4odD0rdCkhPXQ/dDowPT10PzEvdD09SW5maW5pdHk6MDx0fX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxpPXIoMjYpLG89cigyKSx1PXIoNTEpLGM9cigxMTUpO2UoZS5QK2UuUiwiUHJvbWlzZSIseyJmaW5hbGx5IjpmdW5jdGlvbihuKXt2YXIgcj11KHRoaXMsaS5Qcm9taXNlfHxvLlByb21pc2UpLHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG47cmV0dXJuIHRoaXMudGhlbih0P2Z1bmN0aW9uKHQpe3JldHVybiBjKHIsbigpKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KX06bix0P2Z1bmN0aW9uKHQpe3JldHVybiBjKHIsbigpKS50aGVuKGZ1bmN0aW9uKCl7dGhyb3cgdH0pfTpuKX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksaT1yKDkxKSxvPXIoMTE0KTtlKGUuUywiUHJvbWlzZSIseyJ0cnkiOmZ1bmN0aW9uKHQpe3ZhciBuPWkuZih0aGlzKSxyPW8odCk7cmV0dXJuKHIuZT9uLnJlamVjdDpuLnJlc29sdmUpKHIudiksbi5wcm9taXNlfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigyOCksaT1yKDEpLG89ZS5rZXksdT1lLnNldDtlLmV4cCh7ZGVmaW5lTWV0YWRhdGE6ZnVuY3Rpb24gZGVmaW5lTWV0YWRhdGEodCxuLHIsZSl7dSh0LG4saShyKSxvKGUpKX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMjgpLG89cigxKSx1PWUua2V5LGM9ZS5tYXAsYT1lLnN0b3JlO2UuZXhwKHtkZWxldGVNZXRhZGF0YTpmdW5jdGlvbiBkZWxldGVNZXRhZGF0YSh0LG4pe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg8Mz9KdDp1KGFyZ3VtZW50c1syXSksZT1jKG8obiksciwhMSk7aWYoZT09PUp0fHwhZVsiZGVsZXRlIl0odCkpcmV0dXJuITE7aWYoZS5zaXplKXJldHVybiEwO3ZhciBpPWEuZ2V0KG4pO3JldHVybiBpWyJkZWxldGUiXShyKSwhIWkuc2l6ZXx8YVsiZGVsZXRlIl0obil9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDI4KSxpPXIoMSksbz1yKDE3KSx1PWUuaGFzLGM9ZS5nZXQsYT1lLmtleSxmPWZ1bmN0aW9uKHQsbixyKXtpZih1KHQsbixyKSlyZXR1cm4gYyh0LG4scik7dmFyIGU9byhuKTtyZXR1cm4gbnVsbCE9PWU/Zih0LGUscik6SnR9O2UuZXhwKHtnZXRNZXRhZGF0YTpmdW5jdGlvbiBnZXRNZXRhZGF0YSh0LG4pe3JldHVybiBmKHQsaShuKSxhcmd1bWVudHMubGVuZ3RoPDM/SnQ6YShhcmd1bWVudHNbMl0pKX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBvPXIoMTE4KSx1PXIoMTI3KSxlPXIoMjgpLGk9cigxKSxjPXIoMTcpLGE9ZS5rZXlzLGY9ZS5rZXkscz1mdW5jdGlvbih0LG4pe3ZhciByPWEodCxuKSxlPWModCk7aWYobnVsbD09PWUpcmV0dXJuIHI7dmFyIGk9cyhlLG4pO3JldHVybiBpLmxlbmd0aD9yLmxlbmd0aD91KG5ldyBvKHIuY29uY2F0KGkpKSk6aTpyfTtlLmV4cCh7Z2V0TWV0YWRhdGFLZXlzOmZ1bmN0aW9uIGdldE1ldGFkYXRhS2V5cyh0KXtyZXR1cm4gcyhpKHQpLGFyZ3VtZW50cy5sZW5ndGg8Mj9KdDpmKGFyZ3VtZW50c1sxXSkpfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigyOCksaT1yKDEpLG89ZS5nZXQsdT1lLmtleTtlLmV4cCh7Z2V0T3duTWV0YWRhdGE6ZnVuY3Rpb24gZ2V0T3duTWV0YWRhdGEodCxuKXtyZXR1cm4gbyh0LGkobiksYXJndW1lbnRzLmxlbmd0aDwzP0p0OnUoYXJndW1lbnRzWzJdKSl9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDI4KSxpPXIoMSksbz1lLmtleXMsdT1lLmtleTtlLmV4cCh7Z2V0T3duTWV0YWRhdGFLZXlzOmZ1bmN0aW9uIGdldE93bk1ldGFkYXRhS2V5cyh0KXtyZXR1cm4gbyhpKHQpLGFyZ3VtZW50cy5sZW5ndGg8Mj9KdDp1KGFyZ3VtZW50c1sxXSkpfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigyOCksaT1yKDEpLG89cigxNyksdT1lLmhhcyxjPWUua2V5LGE9ZnVuY3Rpb24odCxuLHIpe2lmKHUodCxuLHIpKXJldHVybiEwO3ZhciBlPW8obik7cmV0dXJuIG51bGwhPT1lJiZhKHQsZSxyKX07ZS5leHAoe2hhc01ldGFkYXRhOmZ1bmN0aW9uIGhhc01ldGFkYXRhKHQsbil7cmV0dXJuIGEodCxpKG4pLGFyZ3VtZW50cy5sZW5ndGg8Mz9KdDpjKGFyZ3VtZW50c1syXSkpfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigyOCksaT1yKDEpLG89ZS5oYXMsdT1lLmtleTtlLmV4cCh7aGFzT3duTWV0YWRhdGE6ZnVuY3Rpb24gaGFzT3duTWV0YWRhdGEodCxuKXtyZXR1cm4gbyh0LGkobiksYXJndW1lbnRzLmxlbmd0aDwzP0p0OnUoYXJndW1lbnRzWzJdKSl9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDI4KSxpPXIoMSksbz1yKDEwKSx1PWUua2V5LGM9ZS5zZXQ7ZS5leHAoe21ldGFkYXRhOmZ1bmN0aW9uIG1ldGFkYXRhKHIsZSl7cmV0dXJuIGZ1bmN0aW9uIGRlY29yYXRvcih0LG4pe2MocixlLChuIT09SnQ/aTpvKSh0KSx1KG4pKX19fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLGk9cig5MCkoKSxvPXIoMikucHJvY2Vzcyx1PSJwcm9jZXNzIj09cigxOSkobyk7ZShlLkcse2FzYXA6ZnVuY3Rpb24gYXNhcCh0KXt2YXIgbj11JiZvLmRvbWFpbjtpKG4/bi5iaW5kKHQpOnQpfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxvPXIoMiksdT1yKDI2KSxpPXIoOTApKCksYz1yKDUpKCJvYnNlcnZhYmxlIiksYT1yKDEwKSxmPXIoMSkscz1yKDM5KSxsPXIoNDEpLGg9cigxMSkscD1yKDQwKSx2PXAuUkVUVVJOLGc9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/SnQ6YSh0KX0seT1mdW5jdGlvbih0KXt2YXIgbj10Ll9jO24mJih0Ll9jPUp0LG4oKSl9LGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuX289PT1KdH0sYj1mdW5jdGlvbih0KXtkKHQpfHwodC5fbz1KdCx5KHQpKX0sUz1mdW5jdGlvbih0LG4pe2YodCksdGhpcy5fYz1KdCx0aGlzLl9vPXQsdD1uZXcgXyh0aGlzKTt0cnl7dmFyIHI9bih0KSxlPXI7bnVsbCE9ciYmKCJmdW5jdGlvbiI9PXR5cGVvZiByLnVuc3Vic2NyaWJlP3I9ZnVuY3Rpb24oKXtlLnVuc3Vic2NyaWJlKCl9OmEociksdGhpcy5fYz1yKX1jYXRjaChpKXtyZXR1cm4gdm9pZCB0LmVycm9yKGkpfWQodGhpcykmJnkodGhpcyl9O1MucHJvdG90eXBlPWwoe30se3Vuc3Vic2NyaWJlOmZ1bmN0aW9uIHVuc3Vic2NyaWJlKCl7Yih0aGlzKX19KTt2YXIgXz1mdW5jdGlvbih0KXt0aGlzLl9zPXR9O18ucHJvdG90eXBlPWwoe30se25leHQ6ZnVuY3Rpb24gbmV4dCh0KXt2YXIgbj10aGlzLl9zO2lmKCFkKG4pKXt2YXIgcj1uLl9vO3RyeXt2YXIgZT1nKHIubmV4dCk7aWYoZSlyZXR1cm4gZS5jYWxsKHIsdCl9Y2F0Y2goaSl7dHJ5e2Iobil9ZmluYWxseXt0aHJvdyBpfX19fSxlcnJvcjpmdW5jdGlvbiBlcnJvcih0KXt2YXIgbj10aGlzLl9zO2lmKGQobikpdGhyb3cgdDt2YXIgcj1uLl9vO24uX289SnQ7dHJ5e3ZhciBlPWcoci5lcnJvcik7aWYoIWUpdGhyb3cgdDt0PWUuY2FsbChyLHQpfWNhdGNoKGkpe3RyeXt5KG4pfWZpbmFsbHl7dGhyb3cgaX19cmV0dXJuIHkobiksdH0sY29tcGxldGU6ZnVuY3Rpb24gY29tcGxldGUodCl7dmFyIG49dGhpcy5fcztpZighZChuKSl7dmFyIHI9bi5fbztuLl9vPUp0O3RyeXt2YXIgZT1nKHIuY29tcGxldGUpO3Q9ZT9lLmNhbGwocix0KTpKdH1jYXRjaChpKXt0cnl7eShuKX1maW5hbGx5e3Rocm93IGl9fXJldHVybiB5KG4pLHR9fX0pO3ZhciB4PWZ1bmN0aW9uIE9ic2VydmFibGUodCl7cyh0aGlzLHgsIk9ic2VydmFibGUiLCJfZiIpLl9mPWEodCl9O2woeC5wcm90b3R5cGUse3N1YnNjcmliZTpmdW5jdGlvbiBzdWJzY3JpYmUodCl7cmV0dXJuIG5ldyBTKHQsdGhpcy5fZil9LGZvckVhY2g6ZnVuY3Rpb24gZm9yRWFjaChpKXt2YXIgbj10aGlzO3JldHVybiBuZXcodS5Qcm9taXNlfHxvLlByb21pc2UpKGZ1bmN0aW9uKHQscil7YShpKTt2YXIgZT1uLnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbih0KXt0cnl7cmV0dXJuIGkodCl9Y2F0Y2gobil7cihuKSxlLnVuc3Vic2NyaWJlKCl9fSxlcnJvcjpyLGNvbXBsZXRlOnR9KX0pfX0pLGwoeCx7ZnJvbTpmdW5jdGlvbiBmcm9tKGUpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzP3RoaXM6eCxuPWcoZihlKVtjXSk7aWYobil7dmFyIHI9ZihuLmNhbGwoZSkpO3JldHVybiByLmNvbnN0cnVjdG9yPT09dD9yOm5ldyB0KGZ1bmN0aW9uKHQpe3JldHVybiByLnN1YnNjcmliZSh0KX0pfXJldHVybiBuZXcgdChmdW5jdGlvbihuKXt2YXIgcj0hMTtyZXR1cm4gaShmdW5jdGlvbigpe2lmKCFyKXt0cnl7aWYocChlLCExLGZ1bmN0aW9uKHQpe2lmKG4ubmV4dCh0KSxyKXJldHVybiB2fSk9PT12KXJldHVybn1jYXRjaCh0KXtpZihyKXRocm93IHQ7cmV0dXJuIHZvaWQgbi5lcnJvcih0KX1uLmNvbXBsZXRlKCl9fSksZnVuY3Rpb24oKXtyPSEwfX0pfSxvZjpmdW5jdGlvbiBvZigpe2Zvcih2YXIgdD0wLG49YXJndW1lbnRzLmxlbmd0aCxlPW5ldyBBcnJheShuKTt0PG47KWVbdF09YXJndW1lbnRzW3QrK107cmV0dXJuIG5ldygiZnVuY3Rpb24iPT10eXBlb2YgdGhpcz90aGlzOngpKGZ1bmN0aW9uKG4pe3ZhciByPSExO3JldHVybiBpKGZ1bmN0aW9uKCl7aWYoIXIpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7Kyt0KWlmKG4ubmV4dChlW3RdKSxyKXJldHVybjtuLmNvbXBsZXRlKCl9fSksZnVuY3Rpb24oKXtyPSEwfX0pfX0pLGgoeC5wcm90b3R5cGUsYyxmdW5jdGlvbigpe3JldHVybiB0aGlzfSksZShlLkcse09ic2VydmFibGU6eH0pLHIoMzgpKCJPYnNlcnZhYmxlIil9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLGk9cig4OSk7ZShlLkcrZS5CLHtzZXRJbW1lZGlhdGU6aS5zZXQsY2xlYXJJbW1lZGlhdGU6aS5jbGVhcn0pfSxmdW5jdGlvbih0LG4scil7Zm9yKHZhciBlPXIoODYpLGk9cigzNCksbz1yKDEyKSx1PXIoMiksYz1yKDExKSxhPXIoNDYpLGY9cig1KSxzPWYoIml0ZXJhdG9yIiksbD1mKCJ0b1N0cmluZ1RhZyIpLGg9YS5BcnJheSxwPXtDU1NSdWxlTGlzdDohMCxDU1NTdHlsZURlY2xhcmF0aW9uOiExLENTU1ZhbHVlTGlzdDohMSxDbGllbnRSZWN0TGlzdDohMSxET01SZWN0TGlzdDohMSxET01TdHJpbmdMaXN0OiExLERPTVRva2VuTGlzdDohMCxEYXRhVHJhbnNmZXJJdGVtTGlzdDohMSxGaWxlTGlzdDohMSxIVE1MQWxsQ29sbGVjdGlvbjohMSxIVE1MQ29sbGVjdGlvbjohMSxIVE1MRm9ybUVsZW1lbnQ6ITEsSFRNTFNlbGVjdEVsZW1lbnQ6ITEsTWVkaWFMaXN0OiEwLE1pbWVUeXBlQXJyYXk6ITEsTmFtZWROb2RlTWFwOiExLE5vZGVMaXN0OiEwLFBhaW50UmVxdWVzdExpc3Q6ITEsUGx1Z2luOiExLFBsdWdpbkFycmF5OiExLFNWR0xlbmd0aExpc3Q6ITEsU1ZHTnVtYmVyTGlzdDohMSxTVkdQYXRoU2VnTGlzdDohMSxTVkdQb2ludExpc3Q6ITEsU1ZHU3RyaW5nTGlzdDohMSxTVkdUcmFuc2Zvcm1MaXN0OiExLFNvdXJjZUJ1ZmZlckxpc3Q6ITEsU3R5bGVTaGVldExpc3Q6ITAsVGV4dFRyYWNrQ3VlTGlzdDohMSxUZXh0VHJhY2tMaXN0OiExLFRvdWNoTGlzdDohMX0sdj1pKHApLGc9MDtnPHYubGVuZ3RoO2crKyl7dmFyIHksZD12W2ddLGI9cFtkXSxTPXVbZF0sXz1TJiZTLnByb3RvdHlwZTtpZihfJiYoX1tzXXx8YyhfLHMsaCksX1tsXXx8YyhfLGwsZCksYVtkXT1oLGIpKWZvcih5IGluIGUpX1t5XXx8byhfLHksZVt5XSwhMCl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigyKSxpPXIoMCksbz1yKDYwKSx1PVtdLnNsaWNlLGM9L01TSUUgLlwuLy50ZXN0KG8pLGE9ZnVuY3Rpb24oaSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHI9Mjxhcmd1bWVudHMubGVuZ3RoLGU9ISFyJiZ1LmNhbGwoYXJndW1lbnRzLDIpO3JldHVybiBpKHI/ZnVuY3Rpb24oKXsoImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpGdW5jdGlvbih0KSkuYXBwbHkodGhpcyxlKX06dCxuKX19O2koaS5HK2kuQitpLkYqYyx7c2V0VGltZW91dDphKGUuc2V0VGltZW91dCksc2V0SW50ZXJ2YWw6YShlLnNldEludGVydmFsKX0pfV0pLCJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlJiZtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1lOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKGZ1bmN0aW9uKCl7cmV0dXJuIGV9KTppLmNvcmU9ZX0oMSwxKTsNCi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNoaW0ubWluLmpzLm1hcA=="></script> <script src="data:application/javascript;base64,LyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjANCiAqIHJlYWN0LnByb2R1Y3Rpb24ubWluLmpzDQogKg0KICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuDQogKg0KICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlDQogKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuDQogKi8NCihmdW5jdGlvbigpeyd1c2Ugc3RyaWN0JzsoZnVuY3Rpb24oYyx4KXsib2JqZWN0Ij09PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9PXR5cGVvZiBtb2R1bGU/eChleHBvcnRzKToiZnVuY3Rpb24iPT09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJleHBvcnRzIl0seCk6KGM9Y3x8c2VsZix4KGMuUmVhY3Q9e30pKX0pKHRoaXMsZnVuY3Rpb24oYyl7ZnVuY3Rpb24geChhKXtpZihudWxsPT09YXx8Im9iamVjdCIhPT10eXBlb2YgYSlyZXR1cm4gbnVsbDthPVkmJmFbWV18fGFbIkBAaXRlcmF0b3IiXTtyZXR1cm4iZnVuY3Rpb24iPT09dHlwZW9mIGE/YTpudWxsfWZ1bmN0aW9uIHkoYSl7Zm9yKHZhciBiPSJodHRwczovL3JlYWN0anMub3JnL2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD0iK2EsZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspYis9IiZhcmdzW109IitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW2VdKTtyZXR1cm4iTWluaWZpZWQgUmVhY3QgZXJyb3IgIyIrDQphKyI7IHZpc2l0ICIrYisiIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4ifWZ1bmN0aW9uIHYoYSxiLGUpe3RoaXMucHJvcHM9YTt0aGlzLmNvbnRleHQ9Yjt0aGlzLnJlZnM9Wjt0aGlzLnVwZGF0ZXI9ZXx8YWF9ZnVuY3Rpb24gYmEoKXt9ZnVuY3Rpb24gSyhhLGIsZSl7dGhpcy5wcm9wcz1hO3RoaXMuY29udGV4dD1iO3RoaXMucmVmcz1aO3RoaXMudXBkYXRlcj1lfHxhYX1mdW5jdGlvbiBjYShhLGIsZSl7dmFyIGwsZj17fSxjPW51bGwsZGE9bnVsbDtpZihudWxsIT1iKWZvcihsIGluIHZvaWQgMCE9PWIucmVmJiYoZGE9Yi5yZWYpLHZvaWQgMCE9PWIua2V5JiYoYz0iIitiLmtleSksYillYS5jYWxsKGIsbCkmJiFmYS5oYXNPd25Qcm9wZXJ0eShsKSYmKGZbbF09YltsXSk7dmFyIGs9YXJndW1lbnRzLmxlbmd0aC0yO2lmKDE9PT0NCmspZi5jaGlsZHJlbj1lO2Vsc2UgaWYoMTxrKXtmb3IodmFyIGg9QXJyYXkoayksZD0wO2Q8aztkKyspaFtkXT1hcmd1bWVudHNbZCsyXTtmLmNoaWxkcmVuPWh9aWYoYSYmYS5kZWZhdWx0UHJvcHMpZm9yKGwgaW4gaz1hLmRlZmF1bHRQcm9wcyxrKXZvaWQgMD09PWZbbF0mJihmW2xdPWtbbF0pO3JldHVybnskJHR5cGVvZjp3LHR5cGU6YSxrZXk6YyxyZWY6ZGEscHJvcHM6Zixfb3duZXI6TC5jdXJyZW50fX1mdW5jdGlvbiB2YShhLGIpe3JldHVybnskJHR5cGVvZjp3LHR5cGU6YS50eXBlLGtleTpiLHJlZjphLnJlZixwcm9wczphLnByb3BzLF9vd25lcjphLl9vd25lcn19ZnVuY3Rpb24gTShhKXtyZXR1cm4ib2JqZWN0Ij09PXR5cGVvZiBhJiZudWxsIT09YSYmYS4kJHR5cGVvZj09PXd9ZnVuY3Rpb24gd2EoYSl7dmFyIGI9eyI9IjoiPTAiLCI6IjoiPTIifTtyZXR1cm4iJCIrYS5yZXBsYWNlKC9bPTpdL2csZnVuY3Rpb24oYSl7cmV0dXJuIGJbYV19KX1mdW5jdGlvbiBOKGEsYil7cmV0dXJuIm9iamVjdCI9PT0NCnR5cGVvZiBhJiZudWxsIT09YSYmbnVsbCE9YS5rZXk/d2EoIiIrYS5rZXkpOmIudG9TdHJpbmcoMzYpfWZ1bmN0aW9uIEMoYSxiLGUsbCxmKXt2YXIgYz10eXBlb2YgYTtpZigidW5kZWZpbmVkIj09PWN8fCJib29sZWFuIj09PWMpYT1udWxsO3ZhciBkPSExO2lmKG51bGw9PT1hKWQ9ITA7ZWxzZSBzd2l0Y2goYyl7Y2FzZSAic3RyaW5nIjpjYXNlICJudW1iZXIiOmQ9ITA7YnJlYWs7Y2FzZSAib2JqZWN0Ijpzd2l0Y2goYS4kJHR5cGVvZil7Y2FzZSB3OmNhc2UgaGE6ZD0hMH19aWYoZClyZXR1cm4gZD1hLGY9ZihkKSxhPSIiPT09bD8iLiIrTihkLDApOmwsQXJyYXkuaXNBcnJheShmKT8oZT0iIixudWxsIT1hJiYoZT1hLnJlcGxhY2UoaWEsIiQmLyIpKyIvIiksQyhmLGIsZSwiIixmdW5jdGlvbihhKXtyZXR1cm4gYX0pKTpudWxsIT1mJiYoTShmKSYmKGY9dmEoZixlKyghZi5rZXl8fGQmJmQua2V5PT09Zi5rZXk/IiI6KCIiK2Yua2V5KS5yZXBsYWNlKGlhLCIkJi8iKSsiLyIpKw0KYSkpLGIucHVzaChmKSksMTtkPTA7bD0iIj09PWw/Ii4iOmwrIjoiO2lmKEFycmF5LmlzQXJyYXkoYSkpZm9yKHZhciBrPTA7azxhLmxlbmd0aDtrKyspe2M9YVtrXTt2YXIgaD1sK04oYyxrKTtkKz1DKGMsYixlLGgsZil9ZWxzZSBpZihoPXgoYSksImZ1bmN0aW9uIj09PXR5cGVvZiBoKWZvcihhPWguY2FsbChhKSxrPTA7IShjPWEubmV4dCgpKS5kb25lOyljPWMudmFsdWUsaD1sK04oYyxrKyspLGQrPUMoYyxiLGUsaCxmKTtlbHNlIGlmKCJvYmplY3QiPT09Yyl0aHJvdyBiPSIiK2EsRXJyb3IoeSgzMSwiW29iamVjdCBPYmplY3RdIj09PWI/Im9iamVjdCB3aXRoIGtleXMgeyIrT2JqZWN0LmtleXMoYSkuam9pbigiLCAiKSsifSI6YikpO3JldHVybiBkfWZ1bmN0aW9uIEQoYSxiLGUpe2lmKG51bGw9PWEpcmV0dXJuIGE7dmFyIGw9W10sYz0wO0MoYSxsLCIiLCIiLGZ1bmN0aW9uKGEpe3JldHVybiBiLmNhbGwoZSxhLGMrKyl9KTtyZXR1cm4gbH1mdW5jdGlvbiB4YShhKXtpZigtMT09PQ0KYS5fc3RhdHVzKXt2YXIgYj1hLl9yZXN1bHQ7Yj1iKCk7YS5fc3RhdHVzPTA7YS5fcmVzdWx0PWI7Yi50aGVuKGZ1bmN0aW9uKGIpezA9PT1hLl9zdGF0dXMmJihiPWIuZGVmYXVsdCxhLl9zdGF0dXM9MSxhLl9yZXN1bHQ9Yil9LGZ1bmN0aW9uKGIpezA9PT1hLl9zdGF0dXMmJihhLl9zdGF0dXM9MixhLl9yZXN1bHQ9Yil9KX1pZigxPT09YS5fc3RhdHVzKXJldHVybiBhLl9yZXN1bHQ7dGhyb3cgYS5fcmVzdWx0O31mdW5jdGlvbiBuKCl7dmFyIGE9amEuY3VycmVudDtpZihudWxsPT09YSl0aHJvdyBFcnJvcih5KDMyMSkpO3JldHVybiBhfWZ1bmN0aW9uIE8oYSxiKXt2YXIgZT1hLmxlbmd0aDthLnB1c2goYik7YTpmb3IoOzspe3ZhciBjPWUtMT4+PjEsZj1hW2NdO2lmKHZvaWQgMCE9PWYmJjA8RShmLGIpKWFbY109YixhW2VdPWYsZT1jO2Vsc2UgYnJlYWsgYX19ZnVuY3Rpb24gcChhKXthPWFbMF07cmV0dXJuIHZvaWQgMD09PWE/bnVsbDphfWZ1bmN0aW9uIEYoYSl7dmFyIGI9DQphWzBdO2lmKHZvaWQgMCE9PWIpe3ZhciBlPWEucG9wKCk7aWYoZSE9PWIpe2FbMF09ZTthOmZvcih2YXIgYz0wLGY9YS5sZW5ndGg7YzxmOyl7dmFyIGQ9MiooYysxKS0xLGc9YVtkXSxrPWQrMSxoPWFba107aWYodm9pZCAwIT09ZyYmMD5FKGcsZSkpdm9pZCAwIT09aCYmMD5FKGgsZyk/KGFbY109aCxhW2tdPWUsYz1rKTooYVtjXT1nLGFbZF09ZSxjPWQpO2Vsc2UgaWYodm9pZCAwIT09aCYmMD5FKGgsZSkpYVtjXT1oLGFba109ZSxjPWs7ZWxzZSBicmVhayBhfX1yZXR1cm4gYn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBFKGEsYil7dmFyIGU9YS5zb3J0SW5kZXgtYi5zb3J0SW5kZXg7cmV0dXJuIDAhPT1lP2U6YS5pZC1iLmlkfWZ1bmN0aW9uIFAoYSl7Zm9yKHZhciBiPXAocik7bnVsbCE9PWI7KXtpZihudWxsPT09Yi5jYWxsYmFjaylGKHIpO2Vsc2UgaWYoYi5zdGFydFRpbWU8PWEpRihyKSxiLnNvcnRJbmRleD1iLmV4cGlyYXRpb25UaW1lLE8ocSxiKTtlbHNlIGJyZWFrO2I9cChyKX19DQpmdW5jdGlvbiBRKGEpe3o9ITE7UChhKTtpZighdSlpZihudWxsIT09cChxKSl1PSEwLEEoUik7ZWxzZXt2YXIgYj1wKHIpO251bGwhPT1iJiZHKFEsYi5zdGFydFRpbWUtYSl9fWZ1bmN0aW9uIFIoYSxiKXt1PSExO3omJih6PSExLFMoKSk7SD0hMDt2YXIgZT1nO3RyeXtQKGIpO2ZvcihtPXAocSk7bnVsbCE9PW0mJighKG0uZXhwaXJhdGlvblRpbWU+Yil8fGEmJiFUKCkpOyl7dmFyIGM9bS5jYWxsYmFjaztpZigiZnVuY3Rpb24iPT09dHlwZW9mIGMpe20uY2FsbGJhY2s9bnVsbDtnPW0ucHJpb3JpdHlMZXZlbDt2YXIgZj1jKG0uZXhwaXJhdGlvblRpbWU8PWIpO2I9dCgpOyJmdW5jdGlvbiI9PT10eXBlb2YgZj9tLmNhbGxiYWNrPWY6bT09PXAocSkmJkYocSk7UChiKX1lbHNlIEYocSk7bT1wKHEpfWlmKG51bGwhPT1tKXZhciBkPSEwO2Vsc2V7dmFyIG49cChyKTtudWxsIT09biYmRyhRLG4uc3RhcnRUaW1lLWIpO2Q9ITF9cmV0dXJuIGR9ZmluYWxseXttPW51bGwsZz1lLEg9ITF9fQ0KdmFyIHc9NjAxMDMsaGE9NjAxMDY7Yy5GcmFnbWVudD02MDEwNztjLlN0cmljdE1vZGU9NjAxMDg7Yy5Qcm9maWxlcj02MDExNDt2YXIga2E9NjAxMDksbGE9NjAxMTAsbWE9NjAxMTI7Yy5TdXNwZW5zZT02MDExMzt2YXIgbmE9NjAxMTUsb2E9NjAxMTY7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Ipe3ZhciBkPVN5bWJvbC5mb3I7dz1kKCJyZWFjdC5lbGVtZW50Iik7aGE9ZCgicmVhY3QucG9ydGFsIik7Yy5GcmFnbWVudD1kKCJyZWFjdC5mcmFnbWVudCIpO2MuU3RyaWN0TW9kZT1kKCJyZWFjdC5zdHJpY3RfbW9kZSIpO2MuUHJvZmlsZXI9ZCgicmVhY3QucHJvZmlsZXIiKTtrYT1kKCJyZWFjdC5wcm92aWRlciIpO2xhPWQoInJlYWN0LmNvbnRleHQiKTttYT1kKCJyZWFjdC5mb3J3YXJkX3JlZiIpO2MuU3VzcGVuc2U9ZCgicmVhY3Quc3VzcGVuc2UiKTtuYT1kKCJyZWFjdC5tZW1vIik7b2E9ZCgicmVhY3QubGF6eSIpfXZhciBZPSJmdW5jdGlvbiI9PT0NCnR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcix5YT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFU9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oYSxiKXtpZihudWxsPT1hKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5hc3NpZ24gdGFyZ2V0IGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZCIpO2Zvcih2YXIgZT1PYmplY3QoYSksYz0xO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspe3ZhciBkPWFyZ3VtZW50c1tjXTtpZihudWxsIT1kKXt2YXIgZz12b2lkIDA7ZD1PYmplY3QoZCk7Zm9yKGcgaW4gZCl5YS5jYWxsKGQsZykmJihlW2ddPWRbZ10pfX1yZXR1cm4gZX0sYWE9e2lzTW91bnRlZDpmdW5jdGlvbihhKXtyZXR1cm4hMX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKGEsYixjKXt9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7fSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7fX0sWj17fTt2LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PQ0Ke307di5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oYSxiKXtpZigib2JqZWN0IiE9PXR5cGVvZiBhJiYiZnVuY3Rpb24iIT09dHlwZW9mIGEmJm51bGwhPWEpdGhyb3cgRXJyb3IoeSg4NSkpO3RoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcyxhLGIsInNldFN0YXRlIil9O3YucHJvdG90eXBlLmZvcmNlVXBkYXRlPWZ1bmN0aW9uKGEpe3RoaXMudXBkYXRlci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcyxhLCJmb3JjZVVwZGF0ZSIpfTtiYS5wcm90b3R5cGU9di5wcm90b3R5cGU7ZD1LLnByb3RvdHlwZT1uZXcgYmE7ZC5jb25zdHJ1Y3Rvcj1LO1UoZCx2LnByb3RvdHlwZSk7ZC5pc1B1cmVSZWFjdENvbXBvbmVudD0hMDt2YXIgTD17Y3VycmVudDpudWxsfSxlYT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGZhPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH0saWE9L1wvKy9nLGphPXtjdXJyZW50Om51bGx9LFY7aWYoIm9iamVjdCI9PT10eXBlb2YgcGVyZm9ybWFuY2UmJg0KImZ1bmN0aW9uIj09PXR5cGVvZiBwZXJmb3JtYW5jZS5ub3cpe3ZhciB6YT1wZXJmb3JtYW5jZTt2YXIgdD1mdW5jdGlvbigpe3JldHVybiB6YS5ub3coKX19ZWxzZXt2YXIgcGE9RGF0ZSxBYT1wYS5ub3coKTt0PWZ1bmN0aW9uKCl7cmV0dXJuIHBhLm5vdygpLUFhfX1pZigidW5kZWZpbmVkIj09PXR5cGVvZiB3aW5kb3d8fCJmdW5jdGlvbiIhPT10eXBlb2YgTWVzc2FnZUNoYW5uZWwpe3ZhciBCPW51bGwscWE9bnVsbCxyYT1mdW5jdGlvbigpe2lmKG51bGwhPT1CKXRyeXt2YXIgYT10KCk7QighMCxhKTtCPW51bGx9Y2F0Y2goYil7dGhyb3cgc2V0VGltZW91dChyYSwwKSxiO319O3ZhciBBPWZ1bmN0aW9uKGEpe251bGwhPT1CP3NldFRpbWVvdXQoQSwwLGEpOihCPWEsc2V0VGltZW91dChyYSwwKSl9O3ZhciBHPWZ1bmN0aW9uKGEsYil7cWE9c2V0VGltZW91dChhLGIpfTt2YXIgUz1mdW5jdGlvbigpe2NsZWFyVGltZW91dChxYSl9O3ZhciBUPWZ1bmN0aW9uKCl7cmV0dXJuITF9Ow0KZD1WPWZ1bmN0aW9uKCl7fX1lbHNle3ZhciBCYT13aW5kb3cuc2V0VGltZW91dCxDYT13aW5kb3cuY2xlYXJUaW1lb3V0OyJ1bmRlZmluZWQiIT09dHlwZW9mIGNvbnNvbGUmJihkPXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSwiZnVuY3Rpb24iIT09dHlwZW9mIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUmJmNvbnNvbGUuZXJyb3IoIlRoaXMgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLiBNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhIHBvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzIiksImZ1bmN0aW9uIiE9PXR5cGVvZiBkJiZjb25zb2xlLmVycm9yKCJUaGlzIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IGNhbmNlbEFuaW1hdGlvbkZyYW1lLiBNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhIHBvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzIikpOw0KdmFyIEk9ITEsSj1udWxsLFc9LTEsc2E9NSx0YT0wO1Q9ZnVuY3Rpb24oKXtyZXR1cm4gdCgpPj10YX07ZD1mdW5jdGlvbigpe307Vj1mdW5jdGlvbihhKXswPmF8fDEyNTxhP2NvbnNvbGUuZXJyb3IoImZvcmNlRnJhbWVSYXRlIHRha2VzIGEgcG9zaXRpdmUgaW50IGJldHdlZW4gMCBhbmQgMTI1LCBmb3JjaW5nIGZyYW1lIHJhdGVzIGhpZ2hlciB0aGFuIDEyNSBmcHMgaXMgbm90IHN1cHBvcnRlZCIpOnNhPTA8YT9NYXRoLmZsb29yKDFFMy9hKTo1fTt2YXIgdWE9bmV3IE1lc3NhZ2VDaGFubmVsLFg9dWEucG9ydDI7dWEucG9ydDEub25tZXNzYWdlPWZ1bmN0aW9uKCl7aWYobnVsbCE9PUope3ZhciBhPXQoKTt0YT1hK3NhO3RyeXtKKCEwLGEpP1gucG9zdE1lc3NhZ2UobnVsbCk6KEk9ITEsSj1udWxsKX1jYXRjaChiKXt0aHJvdyBYLnBvc3RNZXNzYWdlKG51bGwpLGI7fX1lbHNlIEk9ITF9O0E9ZnVuY3Rpb24oYSl7Sj1hO0l8fChJPSEwLFgucG9zdE1lc3NhZ2UobnVsbCkpfTtHPQ0KZnVuY3Rpb24oYSxiKXtXPUJhKGZ1bmN0aW9uKCl7YSh0KCkpfSxiKX07Uz1mdW5jdGlvbigpe0NhKFcpO1c9LTF9fXZhciBxPVtdLHI9W10sRGE9MSxtPW51bGwsZz0zLEg9ITEsdT0hMSx6PSExLEVhPTA7ZD17UmVhY3RDdXJyZW50RGlzcGF0Y2hlcjpqYSxSZWFjdEN1cnJlbnRPd25lcjpMLElzU29tZVJlbmRlcmVyQWN0aW5nOntjdXJyZW50OiExfSxSZWFjdEN1cnJlbnRCYXRjaENvbmZpZzp7dHJhbnNpdGlvbjowfSxhc3NpZ246VSxTY2hlZHVsZXI6e19fcHJvdG9fXzpudWxsLHVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5OjEsdW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHk6Mix1bnN0YWJsZV9Ob3JtYWxQcmlvcml0eTozLHVuc3RhYmxlX0lkbGVQcmlvcml0eTo1LHVuc3RhYmxlX0xvd1ByaW9yaXR5OjQsdW5zdGFibGVfcnVuV2l0aFByaW9yaXR5OmZ1bmN0aW9uKGEsYil7c3dpdGNoKGEpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6YnJlYWs7ZGVmYXVsdDphPQ0KM312YXIgYz1nO2c9YTt0cnl7cmV0dXJuIGIoKX1maW5hbGx5e2c9Y319LHVuc3RhYmxlX25leHQ6ZnVuY3Rpb24oYSl7c3dpdGNoKGcpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOnZhciBiPTM7YnJlYWs7ZGVmYXVsdDpiPWd9dmFyIGM9ZztnPWI7dHJ5e3JldHVybiBhKCl9ZmluYWxseXtnPWN9fSx1bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10KCk7Im9iamVjdCI9PT10eXBlb2YgYyYmbnVsbCE9PWM/KGM9Yy5kZWxheSxjPSJudW1iZXIiPT09dHlwZW9mIGMmJjA8Yz9kK2M6ZCk6Yz1kO3N3aXRjaChhKXtjYXNlIDE6dmFyIGU9LTE7YnJlYWs7Y2FzZSAyOmU9MjUwO2JyZWFrO2Nhc2UgNTplPTEwNzM3NDE4MjM7YnJlYWs7Y2FzZSA0OmU9MUU0O2JyZWFrO2RlZmF1bHQ6ZT01RTN9ZT1jK2U7YT17aWQ6RGErKyxjYWxsYmFjazpiLHByaW9yaXR5TGV2ZWw6YSxzdGFydFRpbWU6YyxleHBpcmF0aW9uVGltZTplLHNvcnRJbmRleDotMX07Yz5kPyhhLnNvcnRJbmRleD0NCmMsTyhyLGEpLG51bGw9PT1wKHEpJiZhPT09cChyKSYmKHo/UygpOno9ITAsRyhRLGMtZCkpKTooYS5zb3J0SW5kZXg9ZSxPKHEsYSksdXx8SHx8KHU9ITAsQShSKSkpO3JldHVybiBhfSx1bnN0YWJsZV9jYW5jZWxDYWxsYmFjazpmdW5jdGlvbihhKXthLmNhbGxiYWNrPW51bGx9LHVuc3RhYmxlX3dyYXBDYWxsYmFjazpmdW5jdGlvbihhKXt2YXIgYj1nO3JldHVybiBmdW5jdGlvbigpe3ZhciBjPWc7Zz1iO3RyeXtyZXR1cm4gYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtnPWN9fX0sdW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWw6ZnVuY3Rpb24oKXtyZXR1cm4gZ30sZ2V0IHVuc3RhYmxlX3Nob3VsZFlpZWxkKCl7cmV0dXJuIFR9LHVuc3RhYmxlX3JlcXVlc3RQYWludDpkLHVuc3RhYmxlX2NvbnRpbnVlRXhlY3V0aW9uOmZ1bmN0aW9uKCl7dXx8SHx8KHU9ITAsQShSKSl9LHVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uOmZ1bmN0aW9uKCl7fSx1bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZTpmdW5jdGlvbigpe3JldHVybiBwKHEpfSwNCmdldCB1bnN0YWJsZV9ub3coKXtyZXR1cm4gdH0sZ2V0IHVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlKCl7cmV0dXJuIFZ9LHVuc3RhYmxlX1Byb2ZpbGluZzpudWxsfSxTY2hlZHVsZXJUcmFjaW5nOntfX3Byb3RvX186bnVsbCxfX2ludGVyYWN0aW9uc1JlZjpudWxsLF9fc3Vic2NyaWJlclJlZjpudWxsLHVuc3RhYmxlX2NsZWFyOmZ1bmN0aW9uKGEpe3JldHVybiBhKCl9LHVuc3RhYmxlX2dldEN1cnJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sdW5zdGFibGVfZ2V0VGhyZWFkSUQ6ZnVuY3Rpb24oKXtyZXR1cm4rK0VhfSx1bnN0YWJsZV90cmFjZTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGMoKX0sdW5zdGFibGVfd3JhcDpmdW5jdGlvbihhKXtyZXR1cm4gYX0sdW5zdGFibGVfc3Vic2NyaWJlOmZ1bmN0aW9uKGEpe30sdW5zdGFibGVfdW5zdWJzY3JpYmU6ZnVuY3Rpb24oYSl7fX19O2MuQ2hpbGRyZW49e21hcDpELGZvckVhY2g6ZnVuY3Rpb24oYSxiLGMpe0QoYSxmdW5jdGlvbigpe2IuYXBwbHkodGhpcywNCmFyZ3VtZW50cyl9LGMpfSxjb3VudDpmdW5jdGlvbihhKXt2YXIgYj0wO0QoYSxmdW5jdGlvbigpe2IrK30pO3JldHVybiBifSx0b0FycmF5OmZ1bmN0aW9uKGEpe3JldHVybiBEKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGF9KXx8W119LG9ubHk6ZnVuY3Rpb24oYSl7aWYoIU0oYSkpdGhyb3cgRXJyb3IoeSgxNDMpKTtyZXR1cm4gYX19O2MuQ29tcG9uZW50PXY7Yy5QdXJlQ29tcG9uZW50PUs7Yy5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRD1kO2MuY2xvbmVFbGVtZW50PWZ1bmN0aW9uKGEsYixjKXtpZihudWxsPT09YXx8dm9pZCAwPT09YSl0aHJvdyBFcnJvcih5KDI2NyxhKSk7dmFyIGQ9VSh7fSxhLnByb3BzKSxlPWEua2V5LGc9YS5yZWYsbj1hLl9vd25lcjtpZihudWxsIT1iKXt2b2lkIDAhPT1iLnJlZiYmKGc9Yi5yZWYsbj1MLmN1cnJlbnQpO3ZvaWQgMCE9PWIua2V5JiYoZT0iIitiLmtleSk7aWYoYS50eXBlJiZhLnR5cGUuZGVmYXVsdFByb3BzKXZhciBrPQ0KYS50eXBlLmRlZmF1bHRQcm9wcztmb3IoaCBpbiBiKWVhLmNhbGwoYixoKSYmIWZhLmhhc093blByb3BlcnR5KGgpJiYoZFtoXT12b2lkIDA9PT1iW2hdJiZ2b2lkIDAhPT1rP2tbaF06YltoXSl9dmFyIGg9YXJndW1lbnRzLmxlbmd0aC0yO2lmKDE9PT1oKWQuY2hpbGRyZW49YztlbHNlIGlmKDE8aCl7az1BcnJheShoKTtmb3IodmFyIG09MDttPGg7bSsrKWtbbV09YXJndW1lbnRzW20rMl07ZC5jaGlsZHJlbj1rfXJldHVybnskJHR5cGVvZjp3LHR5cGU6YS50eXBlLGtleTplLHJlZjpnLHByb3BzOmQsX293bmVyOm59fTtjLmNyZWF0ZUNvbnRleHQ9ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj1udWxsKTthPXskJHR5cGVvZjpsYSxfY2FsY3VsYXRlQ2hhbmdlZEJpdHM6YixfY3VycmVudFZhbHVlOmEsX2N1cnJlbnRWYWx1ZTI6YSxfdGhyZWFkQ291bnQ6MCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGx9O2EuUHJvdmlkZXI9eyQkdHlwZW9mOmthLF9jb250ZXh0OmF9O3JldHVybiBhLkNvbnN1bWVyPQ0KYX07Yy5jcmVhdGVFbGVtZW50PWNhO2MuY3JlYXRlRmFjdG9yeT1mdW5jdGlvbihhKXt2YXIgYj1jYS5iaW5kKG51bGwsYSk7Yi50eXBlPWE7cmV0dXJuIGJ9O2MuY3JlYXRlUmVmPWZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19O2MuZm9yd2FyZFJlZj1mdW5jdGlvbihhKXtyZXR1cm57JCR0eXBlb2Y6bWEscmVuZGVyOmF9fTtjLmlzVmFsaWRFbGVtZW50PU07Yy5sYXp5PWZ1bmN0aW9uKGEpe3JldHVybnskJHR5cGVvZjpvYSxfcGF5bG9hZDp7X3N0YXR1czotMSxfcmVzdWx0OmF9LF9pbml0OnhhfX07Yy5tZW1vPWZ1bmN0aW9uKGEsYil7cmV0dXJueyQkdHlwZW9mOm5hLHR5cGU6YSxjb21wYXJlOnZvaWQgMD09PWI/bnVsbDpifX07Yy51c2VDYWxsYmFjaz1mdW5jdGlvbihhLGIpe3JldHVybiBuKCkudXNlQ2FsbGJhY2soYSxiKX07Yy51c2VDb250ZXh0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIG4oKS51c2VDb250ZXh0KGEsYil9O2MudXNlRGVidWdWYWx1ZT1mdW5jdGlvbihhLA0KYil7fTtjLnVzZUVmZmVjdD1mdW5jdGlvbihhLGIpe3JldHVybiBuKCkudXNlRWZmZWN0KGEsYil9O2MudXNlSW1wZXJhdGl2ZUhhbmRsZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIG4oKS51c2VJbXBlcmF0aXZlSGFuZGxlKGEsYixjKX07Yy51c2VMYXlvdXRFZmZlY3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbigpLnVzZUxheW91dEVmZmVjdChhLGIpfTtjLnVzZU1lbW89ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbigpLnVzZU1lbW8oYSxiKX07Yy51c2VSZWR1Y2VyPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbigpLnVzZVJlZHVjZXIoYSxiLGMpfTtjLnVzZVJlZj1mdW5jdGlvbihhKXtyZXR1cm4gbigpLnVzZVJlZihhKX07Yy51c2VTdGF0ZT1mdW5jdGlvbihhKXtyZXR1cm4gbigpLnVzZVN0YXRlKGEpfTtjLnZlcnNpb249IjE3LjAuMCJ9KTsNCn0pKCk7DQo="></script> <script src="data:application/javascript;base64,LyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjANCiAqIHJlYWN0LWRvbS5wcm9kdWN0aW9uLm1pbi5qcw0KICoNCiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLg0KICoNCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQ0KICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLg0KICovDQooZnVuY3Rpb24oKXsvKg0KIE1vZGVybml6ciAzLjAuMHByZSAoQ3VzdG9tIEJ1aWxkKSB8IE1JVA0KKi8NCid1c2Ugc3RyaWN0JzsoZnVuY3Rpb24oTSxoYSl7Im9iamVjdCI9PT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPT10eXBlb2YgbW9kdWxlP2hhKGV4cG9ydHMscmVxdWlyZSgicmVhY3QiKSk6ImZ1bmN0aW9uIj09PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsiZXhwb3J0cyIsInJlYWN0Il0saGEpOihNPU18fHNlbGYsaGEoTS5SZWFjdERPTT17fSxNLlJlYWN0KSl9KSh0aGlzLGZ1bmN0aW9uKE0saGEpe2Z1bmN0aW9uIG0oYSl7Zm9yKHZhciBiPSJodHRwczovL3JlYWN0anMub3JnL2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD0iK2EsYz0xO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspYis9IiZhcmdzW109IitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW2NdKTtyZXR1cm4iTWluaWZpZWQgUmVhY3QgZXJyb3IgIyIrYSsiOyB2aXNpdCAiK2IrIiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIn0NCmZ1bmN0aW9uIFRhKGEsYil7Z2IoYSxiKTtnYihhKyJDYXB0dXJlIixiKX1mdW5jdGlvbiBnYihhLGIpe0liW2FdPWI7Zm9yKGE9MDthPGIubGVuZ3RoO2ErKyl5Zi5hZGQoYlthXSl9ZnVuY3Rpb24ga2koYSl7aWYoemYuY2FsbChBZixhKSlyZXR1cm4hMDtpZih6Zi5jYWxsKEJmLGEpKXJldHVybiExO2lmKGxpLnRlc3QoYSkpcmV0dXJuIEFmW2FdPSEwO0JmW2FdPSEwO3JldHVybiExfWZ1bmN0aW9uIG1pKGEsYixjLGQpe2lmKG51bGwhPT1jJiYwPT09Yy50eXBlKXJldHVybiExO3N3aXRjaCh0eXBlb2YgYil7Y2FzZSAiZnVuY3Rpb24iOmNhc2UgInN5bWJvbCI6cmV0dXJuITA7Y2FzZSAiYm9vbGVhbiI6aWYoZClyZXR1cm4hMTtpZihudWxsIT09YylyZXR1cm4hYy5hY2NlcHRzQm9vbGVhbnM7YT1hLnRvTG93ZXJDYXNlKCkuc2xpY2UoMCw1KTtyZXR1cm4iZGF0YS0iIT09YSYmImFyaWEtIiE9PWE7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gbmkoYSxiLGMsZCl7aWYobnVsbD09PQ0KYnx8InVuZGVmaW5lZCI9PT10eXBlb2YgYnx8bWkoYSxiLGMsZCkpcmV0dXJuITA7aWYoZClyZXR1cm4hMTtpZihudWxsIT09Yylzd2l0Y2goYy50eXBlKXtjYXNlIDM6cmV0dXJuIWI7Y2FzZSA0OnJldHVybiExPT09YjtjYXNlIDU6cmV0dXJuIGlzTmFOKGIpO2Nhc2UgNjpyZXR1cm4gaXNOYU4oYil8fDE+Yn1yZXR1cm4hMX1mdW5jdGlvbiBRKGEsYixjLGQsZSxmLGcpe3RoaXMuYWNjZXB0c0Jvb2xlYW5zPTI9PT1ifHwzPT09Ynx8ND09PWI7dGhpcy5hdHRyaWJ1dGVOYW1lPWQ7dGhpcy5hdHRyaWJ1dGVOYW1lc3BhY2U9ZTt0aGlzLm11c3RVc2VQcm9wZXJ0eT1jO3RoaXMucHJvcGVydHlOYW1lPWE7dGhpcy50eXBlPWI7dGhpcy5zYW5pdGl6ZVVSTD1mO3RoaXMucmVtb3ZlRW1wdHlTdHJpbmc9Z31mdW5jdGlvbiBFZChhLGIsYyxkKXt2YXIgZT1JLmhhc093blByb3BlcnR5KGIpP0lbYl06bnVsbDt2YXIgZj1udWxsIT09ZT8wPT09ZS50eXBlOmQ/ITE6ISgyPGIubGVuZ3RoKXx8DQoibyIhPT1iWzBdJiYiTyIhPT1iWzBdfHwibiIhPT1iWzFdJiYiTiIhPT1iWzFdPyExOiEwO2Z8fChuaShiLGMsZSxkKSYmKGM9bnVsbCksZHx8bnVsbD09PWU/a2koYikmJihudWxsPT09Yz9hLnJlbW92ZUF0dHJpYnV0ZShiKTphLnNldEF0dHJpYnV0ZShiLCIiK2MpKTplLm11c3RVc2VQcm9wZXJ0eT9hW2UucHJvcGVydHlOYW1lXT1udWxsPT09Yz8zPT09ZS50eXBlPyExOiIiOmM6KGI9ZS5hdHRyaWJ1dGVOYW1lLGQ9ZS5hdHRyaWJ1dGVOYW1lc3BhY2UsbnVsbD09PWM/YS5yZW1vdmVBdHRyaWJ1dGUoYik6KGU9ZS50eXBlLGM9Mz09PWV8fDQ9PT1lJiYhMD09PWM/IiI6IiIrYyxkP2Euc2V0QXR0cmlidXRlTlMoZCxiLGMpOmEuc2V0QXR0cmlidXRlKGIsYykpKSl9ZnVuY3Rpb24gSmIoYSl7aWYobnVsbD09PWF8fCJvYmplY3QiIT09dHlwZW9mIGEpcmV0dXJuIG51bGw7YT1DZiYmYVtDZl18fGFbIkBAaXRlcmF0b3IiXTtyZXR1cm4iZnVuY3Rpb24iPT09dHlwZW9mIGE/YTpudWxsfQ0KZnVuY3Rpb24gS2IoYSxiLGMpe2lmKHZvaWQgMD09PUZkKXRyeXt0aHJvdyBFcnJvcigpO31jYXRjaChkKXtGZD0oYj1kLnN0YWNrLnRyaW0oKS5tYXRjaCgvXG4oICooYXQgKT8pLykpJiZiWzFdfHwiIn1yZXR1cm4iXG4iK0ZkK2F9ZnVuY3Rpb24gQmMoYSxiKXtpZighYXx8R2QpcmV0dXJuIiI7R2Q9ITA7dmFyIGM9RXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7RXJyb3IucHJlcGFyZVN0YWNrVHJhY2U9dm9pZCAwO3RyeXtpZihiKWlmKGI9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigpO30sT2JqZWN0LmRlZmluZVByb3BlcnR5KGIucHJvdG90eXBlLCJwcm9wcyIse3NldDpmdW5jdGlvbigpe3Rocm93IEVycm9yKCk7fX0pLCJvYmplY3QiPT09dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuY29uc3RydWN0KXt0cnl7UmVmbGVjdC5jb25zdHJ1Y3QoYixbXSl9Y2F0Y2goayl7dmFyIGQ9a31SZWZsZWN0LmNvbnN0cnVjdChhLFtdLGIpfWVsc2V7dHJ5e2IuY2FsbCgpfWNhdGNoKGspe2Q9a31hLmNhbGwoYi5wcm90b3R5cGUpfWVsc2V7dHJ5e3Rocm93IEVycm9yKCk7DQp9Y2F0Y2goayl7ZD1rfWEoKX19Y2F0Y2goayl7aWYoayYmZCYmInN0cmluZyI9PT10eXBlb2Ygay5zdGFjayl7Zm9yKHZhciBlPWsuc3RhY2suc3BsaXQoIlxuIiksZj1kLnN0YWNrLnNwbGl0KCJcbiIpLGc9ZS5sZW5ndGgtMSxoPWYubGVuZ3RoLTE7MTw9ZyYmMDw9aCYmZVtnXSE9PWZbaF07KWgtLTtmb3IoOzE8PWcmJjA8PWg7Zy0tLGgtLSlpZihlW2ddIT09ZltoXSl7aWYoMSE9PWd8fDEhPT1oKXtkbyBpZihnLS0saC0tLDA+aHx8ZVtnXSE9PWZbaF0pcmV0dXJuIlxuIitlW2ddLnJlcGxhY2UoIiBhdCBuZXcgIiwiIGF0ICIpO3doaWxlKDE8PWcmJjA8PWgpfWJyZWFrfX19ZmluYWxseXtHZD0hMSxFcnJvci5wcmVwYXJlU3RhY2tUcmFjZT1jfXJldHVybihhPWE/YS5kaXNwbGF5TmFtZXx8YS5uYW1lOiIiKT9LYihhKToiIn1mdW5jdGlvbiBvaShhKXtzd2l0Y2goYS50YWcpe2Nhc2UgNTpyZXR1cm4gS2IoYS50eXBlKTtjYXNlIDE2OnJldHVybiBLYigiTGF6eSIpO2Nhc2UgMTM6cmV0dXJuIEtiKCJTdXNwZW5zZSIpOw0KY2FzZSAxOTpyZXR1cm4gS2IoIlN1c3BlbnNlTGlzdCIpO2Nhc2UgMDpjYXNlIDI6Y2FzZSAxNTpyZXR1cm4gYT1CYyhhLnR5cGUsITEpLGE7Y2FzZSAxMTpyZXR1cm4gYT1CYyhhLnR5cGUucmVuZGVyLCExKSxhO2Nhc2UgMjI6cmV0dXJuIGE9QmMoYS50eXBlLl9yZW5kZXIsITEpLGE7Y2FzZSAxOnJldHVybiBhPUJjKGEudHlwZSwhMCksYTtkZWZhdWx0OnJldHVybiIifX1mdW5jdGlvbiBoYihhKXtpZihudWxsPT1hKXJldHVybiBudWxsO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgYSlyZXR1cm4gYS5kaXNwbGF5TmFtZXx8YS5uYW1lfHxudWxsO2lmKCJzdHJpbmciPT09dHlwZW9mIGEpcmV0dXJuIGE7c3dpdGNoKGEpe2Nhc2Ugd2E6cmV0dXJuIkZyYWdtZW50IjtjYXNlIFVhOnJldHVybiJQb3J0YWwiO2Nhc2UgTGI6cmV0dXJuIlByb2ZpbGVyIjtjYXNlIEhkOnJldHVybiJTdHJpY3RNb2RlIjtjYXNlIE1iOnJldHVybiJTdXNwZW5zZSI7Y2FzZSBDYzpyZXR1cm4iU3VzcGVuc2VMaXN0In1pZigib2JqZWN0Ij09PQ0KdHlwZW9mIGEpc3dpdGNoKGEuJCR0eXBlb2Ype2Nhc2UgSWQ6cmV0dXJuKGEuZGlzcGxheU5hbWV8fCJDb250ZXh0IikrIi5Db25zdW1lciI7Y2FzZSBKZDpyZXR1cm4oYS5fY29udGV4dC5kaXNwbGF5TmFtZXx8IkNvbnRleHQiKSsiLlByb3ZpZGVyIjtjYXNlIERjOnZhciBiPWEucmVuZGVyO2I9Yi5kaXNwbGF5TmFtZXx8Yi5uYW1lfHwiIjtyZXR1cm4gYS5kaXNwbGF5TmFtZXx8KCIiIT09Yj8iRm9yd2FyZFJlZigiK2IrIikiOiJGb3J3YXJkUmVmIik7Y2FzZSBFYzpyZXR1cm4gaGIoYS50eXBlKTtjYXNlIEtkOnJldHVybiBoYihhLl9yZW5kZXIpO2Nhc2UgTGQ6Yj1hLl9wYXlsb2FkO2E9YS5faW5pdDt0cnl7cmV0dXJuIGhiKGEoYikpfWNhdGNoKGMpe319cmV0dXJuIG51bGx9ZnVuY3Rpb24geGEoYSl7c3dpdGNoKHR5cGVvZiBhKXtjYXNlICJib29sZWFuIjpjYXNlICJudW1iZXIiOmNhc2UgIm9iamVjdCI6Y2FzZSAic3RyaW5nIjpjYXNlICJ1bmRlZmluZWQiOnJldHVybiBhOw0KZGVmYXVsdDpyZXR1cm4iIn19ZnVuY3Rpb24gRGYoYSl7dmFyIGI9YS50eXBlO3JldHVybihhPWEubm9kZU5hbWUpJiYiaW5wdXQiPT09YS50b0xvd2VyQ2FzZSgpJiYoImNoZWNrYm94Ij09PWJ8fCJyYWRpbyI9PT1iKX1mdW5jdGlvbiBwaShhKXt2YXIgYj1EZihhKT8iY2hlY2tlZCI6InZhbHVlIixjPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsYiksZD0iIithW2JdO2lmKCFhLmhhc093blByb3BlcnR5KGIpJiYidW5kZWZpbmVkIiE9PXR5cGVvZiBjJiYiZnVuY3Rpb24iPT09dHlwZW9mIGMuZ2V0JiYiZnVuY3Rpb24iPT09dHlwZW9mIGMuc2V0KXt2YXIgZT1jLmdldCxmPWMuc2V0O09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5jYWxsKHRoaXMpfSxzZXQ6ZnVuY3Rpb24oYSl7ZD0iIithO2YuY2FsbCh0aGlzLGEpfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLA0KYix7ZW51bWVyYWJsZTpjLmVudW1lcmFibGV9KTtyZXR1cm57Z2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZH0sc2V0VmFsdWU6ZnVuY3Rpb24oYSl7ZD0iIithfSxzdG9wVHJhY2tpbmc6ZnVuY3Rpb24oKXthLl92YWx1ZVRyYWNrZXI9bnVsbDtkZWxldGUgYVtiXX19fX1mdW5jdGlvbiBGYyhhKXthLl92YWx1ZVRyYWNrZXJ8fChhLl92YWx1ZVRyYWNrZXI9cGkoYSkpfWZ1bmN0aW9uIEVmKGEpe2lmKCFhKXJldHVybiExO3ZhciBiPWEuX3ZhbHVlVHJhY2tlcjtpZighYilyZXR1cm4hMDt2YXIgYz1iLmdldFZhbHVlKCk7dmFyIGQ9IiI7YSYmKGQ9RGYoYSk/YS5jaGVja2VkPyJ0cnVlIjoiZmFsc2UiOmEudmFsdWUpO2E9ZDtyZXR1cm4gYSE9PWM/KGIuc2V0VmFsdWUoYSksITApOiExfWZ1bmN0aW9uIEdjKGEpe2E9YXx8KCJ1bmRlZmluZWQiIT09dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50OnZvaWQgMCk7aWYoInVuZGVmaW5lZCI9PT10eXBlb2YgYSlyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIGEuYWN0aXZlRWxlbWVudHx8DQphLmJvZHl9Y2F0Y2goYil7cmV0dXJuIGEuYm9keX19ZnVuY3Rpb24gTWQoYSxiKXt2YXIgYz1iLmNoZWNrZWQ7cmV0dXJuIEIoe30sYix7ZGVmYXVsdENoZWNrZWQ6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsdmFsdWU6dm9pZCAwLGNoZWNrZWQ6bnVsbCE9Yz9jOmEuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZH0pfWZ1bmN0aW9uIEZmKGEsYil7dmFyIGM9bnVsbD09Yi5kZWZhdWx0VmFsdWU/IiI6Yi5kZWZhdWx0VmFsdWUsZD1udWxsIT1iLmNoZWNrZWQ/Yi5jaGVja2VkOmIuZGVmYXVsdENoZWNrZWQ7Yz14YShudWxsIT1iLnZhbHVlP2IudmFsdWU6Yyk7YS5fd3JhcHBlclN0YXRlPXtpbml0aWFsQ2hlY2tlZDpkLGluaXRpYWxWYWx1ZTpjLGNvbnRyb2xsZWQ6ImNoZWNrYm94Ij09PWIudHlwZXx8InJhZGlvIj09PWIudHlwZT9udWxsIT1iLmNoZWNrZWQ6bnVsbCE9Yi52YWx1ZX19ZnVuY3Rpb24gR2YoYSxiKXtiPWIuY2hlY2tlZDtudWxsIT1iJiZFZChhLCJjaGVja2VkIiwNCmIsITEpfWZ1bmN0aW9uIE5kKGEsYil7R2YoYSxiKTt2YXIgYz14YShiLnZhbHVlKSxkPWIudHlwZTtpZihudWxsIT1jKWlmKCJudW1iZXIiPT09ZCl7aWYoMD09PWMmJiIiPT09YS52YWx1ZXx8YS52YWx1ZSE9YylhLnZhbHVlPSIiK2N9ZWxzZSBhLnZhbHVlIT09IiIrYyYmKGEudmFsdWU9IiIrYyk7ZWxzZSBpZigic3VibWl0Ij09PWR8fCJyZXNldCI9PT1kKXthLnJlbW92ZUF0dHJpYnV0ZSgidmFsdWUiKTtyZXR1cm59Yi5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKT9PZChhLGIudHlwZSxjKTpiLmhhc093blByb3BlcnR5KCJkZWZhdWx0VmFsdWUiKSYmT2QoYSxiLnR5cGUseGEoYi5kZWZhdWx0VmFsdWUpKTtudWxsPT1iLmNoZWNrZWQmJm51bGwhPWIuZGVmYXVsdENoZWNrZWQmJihhLmRlZmF1bHRDaGVja2VkPSEhYi5kZWZhdWx0Q2hlY2tlZCl9ZnVuY3Rpb24gSGYoYSxiLGMpe2lmKGIuaGFzT3duUHJvcGVydHkoInZhbHVlIil8fGIuaGFzT3duUHJvcGVydHkoImRlZmF1bHRWYWx1ZSIpKXt2YXIgZD0NCmIudHlwZTtpZighKCJzdWJtaXQiIT09ZCYmInJlc2V0IiE9PWR8fHZvaWQgMCE9PWIudmFsdWUmJm51bGwhPT1iLnZhbHVlKSlyZXR1cm47Yj0iIithLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlO2N8fGI9PT1hLnZhbHVlfHwoYS52YWx1ZT1iKTthLmRlZmF1bHRWYWx1ZT1ifWM9YS5uYW1lOyIiIT09YyYmKGEubmFtZT0iIik7YS5kZWZhdWx0Q2hlY2tlZD0hIWEuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZDsiIiE9PWMmJihhLm5hbWU9Yyl9ZnVuY3Rpb24gT2QoYSxiLGMpe2lmKCJudW1iZXIiIT09Ynx8R2MoYS5vd25lckRvY3VtZW50KSE9PWEpbnVsbD09Yz9hLmRlZmF1bHRWYWx1ZT0iIithLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlOmEuZGVmYXVsdFZhbHVlIT09IiIrYyYmKGEuZGVmYXVsdFZhbHVlPSIiK2MpfWZ1bmN0aW9uIHFpKGEpe3ZhciBiPSIiO2hhLkNoaWxkcmVuLmZvckVhY2goYSxmdW5jdGlvbihhKXtudWxsIT1hJiYoYis9YSl9KTtyZXR1cm4gYn0NCmZ1bmN0aW9uIFBkKGEsYil7YT1CKHtjaGlsZHJlbjp2b2lkIDB9LGIpO2lmKGI9cWkoYi5jaGlsZHJlbikpYS5jaGlsZHJlbj1iO3JldHVybiBhfWZ1bmN0aW9uIGliKGEsYixjLGQpe2E9YS5vcHRpb25zO2lmKGIpe2I9e307Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspYlsiJCIrY1tlXV09ITA7Zm9yKGM9MDtjPGEubGVuZ3RoO2MrKyllPWIuaGFzT3duUHJvcGVydHkoIiQiK2FbY10udmFsdWUpLGFbY10uc2VsZWN0ZWQhPT1lJiYoYVtjXS5zZWxlY3RlZD1lKSxlJiZkJiYoYVtjXS5kZWZhdWx0U2VsZWN0ZWQ9ITApfWVsc2V7Yz0iIit4YShjKTtiPW51bGw7Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKyl7aWYoYVtlXS52YWx1ZT09PWMpe2FbZV0uc2VsZWN0ZWQ9ITA7ZCYmKGFbZV0uZGVmYXVsdFNlbGVjdGVkPSEwKTtyZXR1cm59bnVsbCE9PWJ8fGFbZV0uZGlzYWJsZWR8fChiPWFbZV0pfW51bGwhPT1iJiYoYi5zZWxlY3RlZD0hMCl9fWZ1bmN0aW9uIFFkKGEsYil7aWYobnVsbCE9DQpiLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKXRocm93IEVycm9yKG0oOTEpKTtyZXR1cm4gQih7fSxiLHt2YWx1ZTp2b2lkIDAsZGVmYXVsdFZhbHVlOnZvaWQgMCxjaGlsZHJlbjoiIithLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlfSl9ZnVuY3Rpb24gSWYoYSxiKXt2YXIgYz1iLnZhbHVlO2lmKG51bGw9PWMpe2M9Yi5jaGlsZHJlbjtiPWIuZGVmYXVsdFZhbHVlO2lmKG51bGwhPWMpe2lmKG51bGwhPWIpdGhyb3cgRXJyb3IobSg5MikpO2lmKEFycmF5LmlzQXJyYXkoYykpe2lmKCEoMT49Yy5sZW5ndGgpKXRocm93IEVycm9yKG0oOTMpKTtjPWNbMF19Yj1jfW51bGw9PWImJihiPSIiKTtjPWJ9YS5fd3JhcHBlclN0YXRlPXtpbml0aWFsVmFsdWU6eGEoYyl9fWZ1bmN0aW9uIEpmKGEsYil7dmFyIGM9eGEoYi52YWx1ZSksZD14YShiLmRlZmF1bHRWYWx1ZSk7bnVsbCE9YyYmKGM9IiIrYyxjIT09YS52YWx1ZSYmKGEudmFsdWU9YyksbnVsbD09Yi5kZWZhdWx0VmFsdWUmJmEuZGVmYXVsdFZhbHVlIT09DQpjJiYoYS5kZWZhdWx0VmFsdWU9YykpO251bGwhPWQmJihhLmRlZmF1bHRWYWx1ZT0iIitkKX1mdW5jdGlvbiBLZihhLGIpe2I9YS50ZXh0Q29udGVudDtiPT09YS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSYmIiIhPT1iJiZudWxsIT09YiYmKGEudmFsdWU9Yil9ZnVuY3Rpb24gTGYoYSl7c3dpdGNoKGEpe2Nhc2UgInN2ZyI6cmV0dXJuImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjtjYXNlICJtYXRoIjpyZXR1cm4iaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCI7ZGVmYXVsdDpyZXR1cm4iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCJ9fWZ1bmN0aW9uIFJkKGEsYil7cmV0dXJuIG51bGw9PWF8fCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj09PWE/TGYoYik6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj09PWEmJiJmb3JlaWduT2JqZWN0Ij09PWI/Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiOmF9ZnVuY3Rpb24gTWYoYSxiLGMpe3JldHVybiBudWxsPT0NCmJ8fCJib29sZWFuIj09PXR5cGVvZiBifHwiIj09PWI/IiI6Y3x8Im51bWJlciIhPT10eXBlb2YgYnx8MD09PWJ8fE5iLmhhc093blByb3BlcnR5KGEpJiZOYlthXT8oIiIrYikudHJpbSgpOmIrInB4In1mdW5jdGlvbiBOZihhLGIpe2E9YS5zdHlsZTtmb3IodmFyIGMgaW4gYilpZihiLmhhc093blByb3BlcnR5KGMpKXt2YXIgZD0wPT09Yy5pbmRleE9mKCItLSIpLGU9TWYoYyxiW2NdLGQpOyJmbG9hdCI9PT1jJiYoYz0iY3NzRmxvYXQiKTtkP2Euc2V0UHJvcGVydHkoYyxlKTphW2NdPWV9fWZ1bmN0aW9uIFNkKGEsYil7aWYoYil7aWYocmlbYV0mJihudWxsIT1iLmNoaWxkcmVufHxudWxsIT1iLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSl0aHJvdyBFcnJvcihtKDEzNyxhKSk7aWYobnVsbCE9Yi5kYW5nZXJvdXNseVNldElubmVySFRNTCl7aWYobnVsbCE9Yi5jaGlsZHJlbil0aHJvdyBFcnJvcihtKDYwKSk7aWYoISgib2JqZWN0Ij09PXR5cGVvZiBiLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MJiYNCiJfX2h0bWwiaW4gYi5kYW5nZXJvdXNseVNldElubmVySFRNTCkpdGhyb3cgRXJyb3IobSg2MSkpO31pZihudWxsIT1iLnN0eWxlJiYib2JqZWN0IiE9PXR5cGVvZiBiLnN0eWxlKXRocm93IEVycm9yKG0oNjIpKTt9fWZ1bmN0aW9uIFRkKGEsYil7aWYoLTE9PT1hLmluZGV4T2YoIi0iKSlyZXR1cm4ic3RyaW5nIj09PXR5cGVvZiBiLmlzO3N3aXRjaChhKXtjYXNlICJhbm5vdGF0aW9uLXhtbCI6Y2FzZSAiY29sb3ItcHJvZmlsZSI6Y2FzZSAiZm9udC1mYWNlIjpjYXNlICJmb250LWZhY2Utc3JjIjpjYXNlICJmb250LWZhY2UtdXJpIjpjYXNlICJmb250LWZhY2UtZm9ybWF0IjpjYXNlICJmb250LWZhY2UtbmFtZSI6Y2FzZSAibWlzc2luZy1nbHlwaCI6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19ZnVuY3Rpb24gVWQoYSl7YT1hLnRhcmdldHx8YS5zcmNFbGVtZW50fHx3aW5kb3c7YS5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCYmKGE9YS5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCk7DQpyZXR1cm4gMz09PWEubm9kZVR5cGU/YS5wYXJlbnROb2RlOmF9ZnVuY3Rpb24gT2YoYSl7aWYoYT1PYihhKSl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiBWZCl0aHJvdyBFcnJvcihtKDI4MCkpO3ZhciBiPWEuc3RhdGVOb2RlO2ImJihiPUhjKGIpLFZkKGEuc3RhdGVOb2RlLGEudHlwZSxiKSl9fWZ1bmN0aW9uIFBmKGEpe2piP2tiP2tiLnB1c2goYSk6a2I9W2FdOmpiPWF9ZnVuY3Rpb24gUWYoKXtpZihqYil7dmFyIGE9amIsYj1rYjtrYj1qYj1udWxsO09mKGEpO2lmKGIpZm9yKGE9MDthPGIubGVuZ3RoO2ErKylPZihiW2FdKX19ZnVuY3Rpb24gV2QoKXtpZihudWxsIT09amJ8fG51bGwhPT1rYilYZCgpLFFmKCl9ZnVuY3Rpb24gc2koYSxiLGMpe2lmKFlkKXJldHVybiBhKGIsYyk7WWQ9ITA7dHJ5e3JldHVybiBSZihhLGIsYyl9ZmluYWxseXtZZD0hMSxXZCgpfX1mdW5jdGlvbiBQYihhLGIpe3ZhciBjPWEuc3RhdGVOb2RlO2lmKG51bGw9PT1jKXJldHVybiBudWxsO3ZhciBkPUhjKGMpOw0KaWYobnVsbD09PWQpcmV0dXJuIG51bGw7Yz1kW2JdO2E6c3dpdGNoKGIpe2Nhc2UgIm9uQ2xpY2siOmNhc2UgIm9uQ2xpY2tDYXB0dXJlIjpjYXNlICJvbkRvdWJsZUNsaWNrIjpjYXNlICJvbkRvdWJsZUNsaWNrQ2FwdHVyZSI6Y2FzZSAib25Nb3VzZURvd24iOmNhc2UgIm9uTW91c2VEb3duQ2FwdHVyZSI6Y2FzZSAib25Nb3VzZU1vdmUiOmNhc2UgIm9uTW91c2VNb3ZlQ2FwdHVyZSI6Y2FzZSAib25Nb3VzZVVwIjpjYXNlICJvbk1vdXNlVXBDYXB0dXJlIjpjYXNlICJvbk1vdXNlRW50ZXIiOihkPSFkLmRpc2FibGVkKXx8KGE9YS50eXBlLGQ9ISgiYnV0dG9uIj09PWF8fCJpbnB1dCI9PT1hfHwic2VsZWN0Ij09PWF8fCJ0ZXh0YXJlYSI9PT1hKSk7YT0hZDticmVhayBhO2RlZmF1bHQ6YT0hMX1pZihhKXJldHVybiBudWxsO2lmKGMmJiJmdW5jdGlvbiIhPT10eXBlb2YgYyl0aHJvdyBFcnJvcihtKDIzMSxiLHR5cGVvZiBjKSk7cmV0dXJuIGN9ZnVuY3Rpb24gdGkoYSxiLGMsZCxlLA0KZixnLGgsayl7UWI9ITE7SWM9bnVsbDt1aS5hcHBseSh2aSxhcmd1bWVudHMpfWZ1bmN0aW9uIHdpKGEsYixjLGQsZSxmLGcsaCxrKXt0aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoUWIpe2lmKFFiKXt2YXIgdj1JYztRYj0hMTtJYz1udWxsfWVsc2UgdGhyb3cgRXJyb3IobSgxOTgpKTtKY3x8KEpjPSEwLFpkPXYpfX1mdW5jdGlvbiBWYShhKXt2YXIgYj1hLGM9YTtpZihhLmFsdGVybmF0ZSlmb3IoO2IucmV0dXJuOyliPWIucmV0dXJuO2Vsc2V7YT1iO2RvIGI9YSwwIT09KGIuZmxhZ3MmMTAyNikmJihjPWIucmV0dXJuKSxhPWIucmV0dXJuO3doaWxlKGEpfXJldHVybiAzPT09Yi50YWc/YzpudWxsfWZ1bmN0aW9uIFNmKGEpe2lmKDEzPT09YS50YWcpe3ZhciBiPWEubWVtb2l6ZWRTdGF0ZTtudWxsPT09YiYmKGE9YS5hbHRlcm5hdGUsbnVsbCE9PWEmJihiPWEubWVtb2l6ZWRTdGF0ZSkpO2lmKG51bGwhPT1iKXJldHVybiBiLmRlaHlkcmF0ZWR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gVGYoYSl7aWYoVmEoYSkhPT0NCmEpdGhyb3cgRXJyb3IobSgxODgpKTt9ZnVuY3Rpb24geGkoYSl7dmFyIGI9YS5hbHRlcm5hdGU7aWYoIWIpe2I9VmEoYSk7aWYobnVsbD09PWIpdGhyb3cgRXJyb3IobSgxODgpKTtyZXR1cm4gYiE9PWE/bnVsbDphfWZvcih2YXIgYz1hLGQ9Yjs7KXt2YXIgZT1jLnJldHVybjtpZihudWxsPT09ZSlicmVhazt2YXIgZj1lLmFsdGVybmF0ZTtpZihudWxsPT09Zil7ZD1lLnJldHVybjtpZihudWxsIT09ZCl7Yz1kO2NvbnRpbnVlfWJyZWFrfWlmKGUuY2hpbGQ9PT1mLmNoaWxkKXtmb3IoZj1lLmNoaWxkO2Y7KXtpZihmPT09YylyZXR1cm4gVGYoZSksYTtpZihmPT09ZClyZXR1cm4gVGYoZSksYjtmPWYuc2libGluZ310aHJvdyBFcnJvcihtKDE4OCkpO31pZihjLnJldHVybiE9PWQucmV0dXJuKWM9ZSxkPWY7ZWxzZXtmb3IodmFyIGc9ITEsaD1lLmNoaWxkO2g7KXtpZihoPT09Yyl7Zz0hMDtjPWU7ZD1mO2JyZWFrfWlmKGg9PT1kKXtnPSEwO2Q9ZTtjPWY7YnJlYWt9aD1oLnNpYmxpbmd9aWYoIWcpe2ZvcihoPQ0KZi5jaGlsZDtoOyl7aWYoaD09PWMpe2c9ITA7Yz1mO2Q9ZTticmVha31pZihoPT09ZCl7Zz0hMDtkPWY7Yz1lO2JyZWFrfWg9aC5zaWJsaW5nfWlmKCFnKXRocm93IEVycm9yKG0oMTg5KSk7fX1pZihjLmFsdGVybmF0ZSE9PWQpdGhyb3cgRXJyb3IobSgxOTApKTt9aWYoMyE9PWMudGFnKXRocm93IEVycm9yKG0oMTg4KSk7cmV0dXJuIGMuc3RhdGVOb2RlLmN1cnJlbnQ9PT1jP2E6Yn1mdW5jdGlvbiBVZihhKXthPXhpKGEpO2lmKCFhKXJldHVybiBudWxsO2Zvcih2YXIgYj1hOzspe2lmKDU9PT1iLnRhZ3x8Nj09PWIudGFnKXJldHVybiBiO2lmKGIuY2hpbGQpYi5jaGlsZC5yZXR1cm49YixiPWIuY2hpbGQ7ZWxzZXtpZihiPT09YSlicmVhaztmb3IoOyFiLnNpYmxpbmc7KXtpZighYi5yZXR1cm58fGIucmV0dXJuPT09YSlyZXR1cm4gbnVsbDtiPWIucmV0dXJufWIuc2libGluZy5yZXR1cm49Yi5yZXR1cm47Yj1iLnNpYmxpbmd9fXJldHVybiBudWxsfWZ1bmN0aW9uIFZmKGEsYil7Zm9yKHZhciBjPQ0KYS5hbHRlcm5hdGU7bnVsbCE9PWI7KXtpZihiPT09YXx8Yj09PWMpcmV0dXJuITA7Yj1iLnJldHVybn1yZXR1cm4hMX1mdW5jdGlvbiAkZChhLGIsYyxkLGUpe3JldHVybntibG9ja2VkT246YSxkb21FdmVudE5hbWU6YixldmVudFN5c3RlbUZsYWdzOmN8MTYsbmF0aXZlRXZlbnQ6ZSx0YXJnZXRDb250YWluZXJzOltkXX19ZnVuY3Rpb24gV2YoYSxiKXtzd2l0Y2goYSl7Y2FzZSAiZm9jdXNpbiI6Y2FzZSAiZm9jdXNvdXQiOnlhPW51bGw7YnJlYWs7Y2FzZSAiZHJhZ2VudGVyIjpjYXNlICJkcmFnbGVhdmUiOnphPW51bGw7YnJlYWs7Y2FzZSAibW91c2VvdmVyIjpjYXNlICJtb3VzZW91dCI6QWE9bnVsbDticmVhaztjYXNlICJwb2ludGVyb3ZlciI6Y2FzZSAicG9pbnRlcm91dCI6UmIuZGVsZXRlKGIucG9pbnRlcklkKTticmVhaztjYXNlICJnb3Rwb2ludGVyY2FwdHVyZSI6Y2FzZSAibG9zdHBvaW50ZXJjYXB0dXJlIjpTYi5kZWxldGUoYi5wb2ludGVySWQpfX1mdW5jdGlvbiBUYihhLA0KYixjLGQsZSxmKXtpZihudWxsPT09YXx8YS5uYXRpdmVFdmVudCE9PWYpcmV0dXJuIGE9JGQoYixjLGQsZSxmKSxudWxsIT09YiYmKGI9T2IoYiksbnVsbCE9PWImJlhmKGIpKSxhO2EuZXZlbnRTeXN0ZW1GbGFnc3w9ZDtiPWEudGFyZ2V0Q29udGFpbmVycztudWxsIT09ZSYmLTE9PT1iLmluZGV4T2YoZSkmJmIucHVzaChlKTtyZXR1cm4gYX1mdW5jdGlvbiB5aShhLGIsYyxkLGUpe3N3aXRjaChiKXtjYXNlICJmb2N1c2luIjpyZXR1cm4geWE9VGIoeWEsYSxiLGMsZCxlKSwhMDtjYXNlICJkcmFnZW50ZXIiOnJldHVybiB6YT1UYih6YSxhLGIsYyxkLGUpLCEwO2Nhc2UgIm1vdXNlb3ZlciI6cmV0dXJuIEFhPVRiKEFhLGEsYixjLGQsZSksITA7Y2FzZSAicG9pbnRlcm92ZXIiOnZhciBmPWUucG9pbnRlcklkO1JiLnNldChmLFRiKFJiLmdldChmKXx8bnVsbCxhLGIsYyxkLGUpKTtyZXR1cm4hMDtjYXNlICJnb3Rwb2ludGVyY2FwdHVyZSI6cmV0dXJuIGY9ZS5wb2ludGVySWQsU2Iuc2V0KGYsDQpUYihTYi5nZXQoZil8fG51bGwsYSxiLGMsZCxlKSksITB9cmV0dXJuITF9ZnVuY3Rpb24gemkoYSl7dmFyIGI9V2EoYS50YXJnZXQpO2lmKG51bGwhPT1iKXt2YXIgYz1WYShiKTtpZihudWxsIT09YylpZihiPWMudGFnLDEzPT09Yil7aWYoYj1TZihjKSxudWxsIT09Yil7YS5ibG9ja2VkT249YjtBaShhLmxhbmVQcmlvcml0eSxmdW5jdGlvbigpe2FlKGEucHJpb3JpdHksZnVuY3Rpb24oKXtCaShjKX0pfSk7cmV0dXJufX1lbHNlIGlmKDM9PT1iJiZjLnN0YXRlTm9kZS5oeWRyYXRlKXthLmJsb2NrZWRPbj0zPT09Yy50YWc/Yy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbzpudWxsO3JldHVybn19YS5ibG9ja2VkT249bnVsbH1mdW5jdGlvbiBLYyhhKXtpZihudWxsIT09YS5ibG9ja2VkT24pcmV0dXJuITE7Zm9yKHZhciBiPWEudGFyZ2V0Q29udGFpbmVyczswPGIubGVuZ3RoOyl7dmFyIGM9YmUoYS5kb21FdmVudE5hbWUsYS5ldmVudFN5c3RlbUZsYWdzLGJbMF0sYS5uYXRpdmVFdmVudCk7DQppZihudWxsIT09YylyZXR1cm4gYj1PYihjKSxudWxsIT09YiYmWGYoYiksYS5ibG9ja2VkT249YywhMTtiLnNoaWZ0KCl9cmV0dXJuITB9ZnVuY3Rpb24gWWYoYSxiLGMpe0tjKGEpJiZjLmRlbGV0ZShiKX1mdW5jdGlvbiBDaSgpe2ZvcihjZT0hMTswPGlhLmxlbmd0aDspe3ZhciBhPWlhWzBdO2lmKG51bGwhPT1hLmJsb2NrZWRPbil7YT1PYihhLmJsb2NrZWRPbik7bnVsbCE9PWEmJkRpKGEpO2JyZWFrfWZvcih2YXIgYj1hLnRhcmdldENvbnRhaW5lcnM7MDxiLmxlbmd0aDspe3ZhciBjPWJlKGEuZG9tRXZlbnROYW1lLGEuZXZlbnRTeXN0ZW1GbGFncyxiWzBdLGEubmF0aXZlRXZlbnQpO2lmKG51bGwhPT1jKXthLmJsb2NrZWRPbj1jO2JyZWFrfWIuc2hpZnQoKX1udWxsPT09YS5ibG9ja2VkT24mJmlhLnNoaWZ0KCl9bnVsbCE9PXlhJiZLYyh5YSkmJih5YT1udWxsKTtudWxsIT09emEmJktjKHphKSYmKHphPW51bGwpO251bGwhPT1BYSYmS2MoQWEpJiYoQWE9bnVsbCk7UmIuZm9yRWFjaChZZik7DQpTYi5mb3JFYWNoKFlmKX1mdW5jdGlvbiBVYihhLGIpe2EuYmxvY2tlZE9uPT09YiYmKGEuYmxvY2tlZE9uPW51bGwsY2V8fChjZT0hMCxaZigkZixDaSkpKX1mdW5jdGlvbiBhZyhhKXtpZigwPGlhLmxlbmd0aCl7VWIoaWFbMF0sYSk7Zm9yKHZhciBiPTE7YjxpYS5sZW5ndGg7YisrKXt2YXIgYz1pYVtiXTtjLmJsb2NrZWRPbj09PWEmJihjLmJsb2NrZWRPbj1udWxsKX19bnVsbCE9PXlhJiZVYih5YSxhKTtudWxsIT09emEmJlViKHphLGEpO251bGwhPT1BYSYmVWIoQWEsYSk7Yj1mdW5jdGlvbihiKXtyZXR1cm4gVWIoYixhKX07UmIuZm9yRWFjaChiKTtTYi5mb3JFYWNoKGIpO2ZvcihiPTA7YjxWYi5sZW5ndGg7YisrKWM9VmJbYl0sYy5ibG9ja2VkT249PT1hJiYoYy5ibG9ja2VkT249bnVsbCk7Zm9yKDswPFZiLmxlbmd0aCYmKGI9VmJbMF0sbnVsbD09PWIuYmxvY2tlZE9uKTspemkoYiksbnVsbD09PWIuYmxvY2tlZE9uJiZWYi5zaGlmdCgpfWZ1bmN0aW9uIExjKGEsYil7dmFyIGM9DQp7fTtjW2EudG9Mb3dlckNhc2UoKV09Yi50b0xvd2VyQ2FzZSgpO2NbIldlYmtpdCIrYV09IndlYmtpdCIrYjtjWyJNb3oiK2FdPSJtb3oiK2I7cmV0dXJuIGN9ZnVuY3Rpb24gTWMoYSl7aWYoZGVbYV0pcmV0dXJuIGRlW2FdO2lmKCFsYlthXSlyZXR1cm4gYTt2YXIgYj1sYlthXSxjO2ZvcihjIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShjKSYmYyBpbiBiZylyZXR1cm4gZGVbYV09YltjXTtyZXR1cm4gYX1mdW5jdGlvbiBlZShhLGIpe2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7Yys9Mil7dmFyIGQ9YVtjXSxlPWFbYysxXTtlPSJvbiIrKGVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpKTtmZS5zZXQoZCxiKTtjZy5zZXQoZCxlKTtUYShlLFtkXSl9fWZ1bmN0aW9uIG1iKGEpe2lmKDAhPT0oMSZhKSlyZXR1cm4gdz0xNSwxO2lmKDAhPT0oMiZhKSlyZXR1cm4gdz0xNCwyO2lmKDAhPT0oNCZhKSlyZXR1cm4gdz0xMyw0O3ZhciBiPTI0JmE7aWYoMCE9PWIpcmV0dXJuIHc9MTIsYjsNCmlmKDAhPT0oYSYzMikpcmV0dXJuIHc9MTEsMzI7Yj0xOTImYTtpZigwIT09YilyZXR1cm4gdz0xMCxiO2lmKDAhPT0oYSYyNTYpKXJldHVybiB3PTksMjU2O2I9MzU4NCZhO2lmKDAhPT1iKXJldHVybiB3PTgsYjtpZigwIT09KGEmNDA5NikpcmV0dXJuIHc9Nyw0MDk2O2I9NDE4NjExMiZhO2lmKDAhPT1iKXJldHVybiB3PTYsYjtiPTYyOTE0NTYwJmE7aWYoMCE9PWIpcmV0dXJuIHc9NSxiO2lmKGEmNjcxMDg4NjQpcmV0dXJuIHc9NCw2NzEwODg2NDtpZigwIT09KGEmMTM0MjE3NzI4KSlyZXR1cm4gdz0zLDEzNDIxNzcyODtiPTgwNTMwNjM2OCZhO2lmKDAhPT1iKXJldHVybiB3PTIsYjtpZigwIT09KDEwNzM3NDE4MjQmYSkpcmV0dXJuIHc9MSwxMDczNzQxODI0O3c9ODtyZXR1cm4gYX1mdW5jdGlvbiBFaShhKXtzd2l0Y2goYSl7Y2FzZSA5OTpyZXR1cm4gMTU7Y2FzZSA5ODpyZXR1cm4gMTA7Y2FzZSA5NzpjYXNlIDk2OnJldHVybiA4O2Nhc2UgOTU6cmV0dXJuIDI7ZGVmYXVsdDpyZXR1cm4gMH19DQpmdW5jdGlvbiBGaShhKXtzd2l0Y2goYSl7Y2FzZSAxNTpjYXNlIDE0OnJldHVybiA5OTtjYXNlIDEzOmNhc2UgMTI6Y2FzZSAxMTpjYXNlIDEwOnJldHVybiA5ODtjYXNlIDk6Y2FzZSA4OmNhc2UgNzpjYXNlIDY6Y2FzZSA0OmNhc2UgNTpyZXR1cm4gOTc7Y2FzZSAzOmNhc2UgMjpjYXNlIDE6cmV0dXJuIDk1O2Nhc2UgMDpyZXR1cm4gOTA7ZGVmYXVsdDp0aHJvdyBFcnJvcihtKDM1OCxhKSk7fX1mdW5jdGlvbiBXYihhLGIpe3ZhciBjPWEucGVuZGluZ0xhbmVzO2lmKDA9PT1jKXJldHVybiB3PTA7dmFyIGQ9MCxlPTAsZj1hLmV4cGlyZWRMYW5lcyxnPWEuc3VzcGVuZGVkTGFuZXMsaD1hLnBpbmdlZExhbmVzO2lmKDAhPT1mKWQ9ZixlPXc9MTU7ZWxzZSBpZihmPWMmMTM0MjE3NzI3LDAhPT1mKXt2YXIgaz1mJn5nOzAhPT1rPyhkPW1iKGspLGU9dyk6KGgmPWYsMCE9PWgmJihkPW1iKGgpLGU9dykpfWVsc2UgZj1jJn5nLDAhPT1mPyhkPW1iKGYpLGU9dyk6MCE9PWgmJihkPW1iKGgpLA0KZT13KTtpZigwPT09ZClyZXR1cm4gMDtkPTMxLUJhKGQpO2Q9YyYoKDA+ZD8wOjE8PGQpPDwxKS0xO2lmKDAhPT1iJiZiIT09ZCYmMD09PShiJmcpKXttYihiKTtpZihlPD13KXJldHVybiBiO3c9ZX1iPWEuZW50YW5nbGVkTGFuZXM7aWYoMCE9PWIpZm9yKGE9YS5lbnRhbmdsZW1lbnRzLGImPWQ7MDxiOyljPTMxLUJhKGIpLGU9MTw8YyxkfD1hW2NdLGImPX5lO3JldHVybiBkfWZ1bmN0aW9uIGRnKGEpe2E9YS5wZW5kaW5nTGFuZXMmLTEwNzM3NDE4MjU7cmV0dXJuIDAhPT1hP2E6YSYxMDczNzQxODI0PzEwNzM3NDE4MjQ6MH1mdW5jdGlvbiBOYyhhLGIpe3N3aXRjaChhKXtjYXNlIDE1OnJldHVybiAxO2Nhc2UgMTQ6cmV0dXJuIDI7Y2FzZSAxMjpyZXR1cm4gYT1uYigyNCZ+YiksMD09PWE/TmMoMTAsYik6YTtjYXNlIDEwOnJldHVybiBhPW5iKDE5MiZ+YiksMD09PWE/TmMoOCxiKTphO2Nhc2UgODpyZXR1cm4gYT1uYigzNTg0Jn5iKSwwPT09YSYmKGE9bmIoNDE4NjExMiZ+YiksDQowPT09YSYmKGE9NTEyKSksYTtjYXNlIDI6cmV0dXJuIGI9bmIoODA1MzA2MzY4Jn5iKSwwPT09YiYmKGI9MjY4NDM1NDU2KSxifXRocm93IEVycm9yKG0oMzU4LGEpKTt9ZnVuY3Rpb24gbmIoYSl7cmV0dXJuIGEmLWF9ZnVuY3Rpb24gT2MoYSxiLGMpe2EucGVuZGluZ0xhbmVzfD1iO3ZhciBkPWItMTthLnN1c3BlbmRlZExhbmVzJj1kO2EucGluZ2VkTGFuZXMmPWQ7YT1hLmV2ZW50VGltZXM7Yj0zMS1CYShiKTthW2JdPWN9ZnVuY3Rpb24gR2koYSl7cmV0dXJuIDA9PT1hPzMyOjMxLShIaShhKS9JaXwwKXwwfWZ1bmN0aW9uIEppKGEsYixjLGQpe1hhfHxYZCgpO3ZhciBlPWdlLGY9WGE7WGE9ITA7dHJ5e2VnKGUsYSxiLGMsZCl9ZmluYWxseXsoWGE9Zil8fFdkKCl9fWZ1bmN0aW9uIEtpKGEsYixjLGQpe0xpKE1pLGdlLmJpbmQobnVsbCxhLGIsYyxkKSl9ZnVuY3Rpb24gZ2UoYSxiLGMsZCl7aWYoUGMpe3ZhciBlO2lmKChlPTA9PT0oYiY0KSkmJjA8aWEubGVuZ3RoJiYtMTxmZy5pbmRleE9mKGEpKWE9DQokZChudWxsLGEsYixjLGQpLGlhLnB1c2goYSk7ZWxzZXt2YXIgZj1iZShhLGIsYyxkKTtpZihudWxsPT09ZillJiZXZihhLGQpO2Vsc2V7aWYoZSl7aWYoLTE8ZmcuaW5kZXhPZihhKSl7YT0kZChmLGEsYixjLGQpO2lhLnB1c2goYSk7cmV0dXJufWlmKHlpKGYsYSxiLGMsZCkpcmV0dXJuO1dmKGEsZCl9Z2coYSxiLGQsbnVsbCxjKX19fX1mdW5jdGlvbiBiZShhLGIsYyxkKXt2YXIgZT1VZChkKTtlPVdhKGUpO2lmKG51bGwhPT1lKXt2YXIgZj1WYShlKTtpZihudWxsPT09ZillPW51bGw7ZWxzZXt2YXIgZz1mLnRhZztpZigxMz09PWcpe2U9U2YoZik7aWYobnVsbCE9PWUpcmV0dXJuIGU7ZT1udWxsfWVsc2UgaWYoMz09PWcpe2lmKGYuc3RhdGVOb2RlLmh5ZHJhdGUpcmV0dXJuIDM9PT1mLnRhZz9mLnN0YXRlTm9kZS5jb250YWluZXJJbmZvOm51bGw7ZT1udWxsfWVsc2UgZiE9PWUmJihlPW51bGwpfX1nZyhhLGIsZCxlLGMpO3JldHVybiBudWxsfWZ1bmN0aW9uIGhnKCl7aWYoUWMpcmV0dXJuIFFjOw0KdmFyIGEsYj1oZSxjPWIubGVuZ3RoLGQsZT0idmFsdWUiaW4gQ2E/Q2EudmFsdWU6Q2EudGV4dENvbnRlbnQsZj1lLmxlbmd0aDtmb3IoYT0wO2E8YyYmYlthXT09PWVbYV07YSsrKTt2YXIgZz1jLWE7Zm9yKGQ9MTtkPD1nJiZiW2MtZF09PT1lW2YtZF07ZCsrKTtyZXR1cm4gUWM9ZS5zbGljZShhLDE8ZD8xLWQ6dm9pZCAwKX1mdW5jdGlvbiBSYyhhKXt2YXIgYj1hLmtleUNvZGU7ImNoYXJDb2RlImluIGE/KGE9YS5jaGFyQ29kZSwwPT09YSYmMTM9PT1iJiYoYT0xMykpOmE9YjsxMD09PWEmJihhPTEzKTtyZXR1cm4gMzI8PWF8fDEzPT09YT9hOjB9ZnVuY3Rpb24gU2MoKXtyZXR1cm4hMH1mdW5jdGlvbiBpZygpe3JldHVybiExfWZ1bmN0aW9uIFYoYSl7ZnVuY3Rpb24gYihiLGQsZSxmLGcpe3RoaXMuX3JlYWN0TmFtZT1iO3RoaXMuX3RhcmdldEluc3Q9ZTt0aGlzLnR5cGU9ZDt0aGlzLm5hdGl2ZUV2ZW50PWY7dGhpcy50YXJnZXQ9Zzt0aGlzLmN1cnJlbnRUYXJnZXQ9bnVsbDtmb3IodmFyIGMgaW4gYSlhLmhhc093blByb3BlcnR5KGMpJiYNCihiPWFbY10sdGhpc1tjXT1iP2IoZik6ZltjXSk7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9KG51bGwhPWYuZGVmYXVsdFByZXZlbnRlZD9mLmRlZmF1bHRQcmV2ZW50ZWQ6ITE9PT1mLnJldHVyblZhbHVlKT9TYzppZzt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPWlnO3JldHVybiB0aGlzfUIoYi5wcm90b3R5cGUse3ByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dGhpcy5kZWZhdWx0UHJldmVudGVkPSEwO3ZhciBhPXRoaXMubmF0aXZlRXZlbnQ7YSYmKGEucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOiJ1bmtub3duIiE9PXR5cGVvZiBhLnJldHVyblZhbHVlJiYoYS5yZXR1cm5WYWx1ZT0hMSksdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9U2MpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm5hdGl2ZUV2ZW50O2EmJihhLnN0b3BQcm9wYWdhdGlvbj9hLnN0b3BQcm9wYWdhdGlvbigpOiJ1bmtub3duIiE9PXR5cGVvZiBhLmNhbmNlbEJ1YmJsZSYmDQooYS5jYW5jZWxCdWJibGU9ITApLHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9U2MpfSxwZXJzaXN0OmZ1bmN0aW9uKCl7fSxpc1BlcnNpc3RlbnQ6U2N9KTtyZXR1cm4gYn1mdW5jdGlvbiBOaShhKXt2YXIgYj10aGlzLm5hdGl2ZUV2ZW50O3JldHVybiBiLmdldE1vZGlmaWVyU3RhdGU/Yi5nZXRNb2RpZmllclN0YXRlKGEpOihhPU9pW2FdKT8hIWJbYV06ITF9ZnVuY3Rpb24gaWUoYSl7cmV0dXJuIE5pfWZ1bmN0aW9uIGpnKGEsYil7c3dpdGNoKGEpe2Nhc2UgImtleXVwIjpyZXR1cm4tMSE9PVBpLmluZGV4T2YoYi5rZXlDb2RlKTtjYXNlICJrZXlkb3duIjpyZXR1cm4gMjI5IT09Yi5rZXlDb2RlO2Nhc2UgImtleXByZXNzIjpjYXNlICJtb3VzZWRvd24iOmNhc2UgImZvY3Vzb3V0IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBrZyhhKXthPWEuZGV0YWlsO3JldHVybiJvYmplY3QiPT09dHlwZW9mIGEmJiJkYXRhImluIGE/YS5kYXRhOm51bGx9ZnVuY3Rpb24gUWkoYSwNCmIpe3N3aXRjaChhKXtjYXNlICJjb21wb3NpdGlvbmVuZCI6cmV0dXJuIGtnKGIpO2Nhc2UgImtleXByZXNzIjppZigzMiE9PWIud2hpY2gpcmV0dXJuIG51bGw7bGc9ITA7cmV0dXJuIG1nO2Nhc2UgInRleHRJbnB1dCI6cmV0dXJuIGE9Yi5kYXRhLGE9PT1tZyYmbGc/bnVsbDphO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIFJpKGEsYil7aWYob2IpcmV0dXJuImNvbXBvc2l0aW9uZW5kIj09PWF8fCFqZSYmamcoYSxiKT8oYT1oZygpLFFjPWhlPUNhPW51bGwsb2I9ITEsYSk6bnVsbDtzd2l0Y2goYSl7Y2FzZSAicGFzdGUiOnJldHVybiBudWxsO2Nhc2UgImtleXByZXNzIjppZighKGIuY3RybEtleXx8Yi5hbHRLZXl8fGIubWV0YUtleSl8fGIuY3RybEtleSYmYi5hbHRLZXkpe2lmKGIuY2hhciYmMTxiLmNoYXIubGVuZ3RoKXJldHVybiBiLmNoYXI7aWYoYi53aGljaClyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShiLndoaWNoKX1yZXR1cm4gbnVsbDtjYXNlICJjb21wb3NpdGlvbmVuZCI6cmV0dXJuIG5nJiYNCiJrbyIhPT1iLmxvY2FsZT9udWxsOmIuZGF0YTtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBvZyhhKXt2YXIgYj1hJiZhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWI/ISFTaVthLnR5cGVdOiJ0ZXh0YXJlYSI9PT1iPyEwOiExfWZ1bmN0aW9uIFRpKGEpe2lmKCFvYSlyZXR1cm4hMTthPSJvbiIrYTt2YXIgYj1hIGluIGRvY3VtZW50O2J8fChiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGIuc2V0QXR0cmlidXRlKGEsInJldHVybjsiKSxiPSJmdW5jdGlvbiI9PT10eXBlb2YgYlthXSk7cmV0dXJuIGJ9ZnVuY3Rpb24gcGcoYSxiLGMsZCl7UGYoZCk7Yj1UYyhiLCJvbkNoYW5nZSIpOzA8Yi5sZW5ndGgmJihjPW5ldyBrZSgib25DaGFuZ2UiLCJjaGFuZ2UiLG51bGwsYyxkKSxhLnB1c2goe2V2ZW50OmMsbGlzdGVuZXJzOmJ9KSl9ZnVuY3Rpb24gVWkoYSl7cWcoYSwwKX1mdW5jdGlvbiBVYyhhKXt2YXIgYj1wYihhKTsNCmlmKEVmKGIpKXJldHVybiBhfWZ1bmN0aW9uIFZpKGEsYil7aWYoImNoYW5nZSI9PT1hKXJldHVybiBifWZ1bmN0aW9uIHJnKCl7WGImJihYYi5kZXRhY2hFdmVudCgib25wcm9wZXJ0eWNoYW5nZSIsc2cpLFliPVhiPW51bGwpfWZ1bmN0aW9uIHNnKGEpe2lmKCJ2YWx1ZSI9PT1hLnByb3BlcnR5TmFtZSYmVWMoWWIpKXt2YXIgYj1bXTtwZyhiLFliLGEsVWQoYSkpO2E9VWk7aWYoWGEpYShiKTtlbHNle1hhPSEwO3RyeXtsZShhLGIpfWZpbmFsbHl7WGE9ITEsV2QoKX19fX1mdW5jdGlvbiBXaShhLGIsYyl7ImZvY3VzaW4iPT09YT8ocmcoKSxYYj1iLFliPWMsWGIuYXR0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFuZ2UiLHNnKSk6ImZvY3Vzb3V0Ij09PWEmJnJnKCl9ZnVuY3Rpb24gWGkoYSxiKXtpZigic2VsZWN0aW9uY2hhbmdlIj09PWF8fCJrZXl1cCI9PT1hfHwia2V5ZG93biI9PT1hKXJldHVybiBVYyhZYil9ZnVuY3Rpb24gWWkoYSxiKXtpZigiY2xpY2siPT09YSlyZXR1cm4gVWMoYil9DQpmdW5jdGlvbiBaaShhLGIpe2lmKCJpbnB1dCI9PT1hfHwiY2hhbmdlIj09PWEpcmV0dXJuIFVjKGIpfWZ1bmN0aW9uICRpKGEsYil7cmV0dXJuIGE9PT1iJiYoMCE9PWF8fDEvYT09PTEvYil8fGEhPT1hJiZiIT09Yn1mdW5jdGlvbiBaYihhLGIpe2lmKFgoYSxiKSlyZXR1cm4hMDtpZigib2JqZWN0IiE9PXR5cGVvZiBhfHxudWxsPT09YXx8Im9iamVjdCIhPT10eXBlb2YgYnx8bnVsbD09PWIpcmV0dXJuITE7dmFyIGM9T2JqZWN0LmtleXMoYSksZD1PYmplY3Qua2V5cyhiKTtpZihjLmxlbmd0aCE9PWQubGVuZ3RoKXJldHVybiExO2ZvcihkPTA7ZDxjLmxlbmd0aDtkKyspaWYoIWFqLmNhbGwoYixjW2RdKXx8IVgoYVtjW2RdXSxiW2NbZF1dKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiB0ZyhhKXtmb3IoO2EmJmEuZmlyc3RDaGlsZDspYT1hLmZpcnN0Q2hpbGQ7cmV0dXJuIGF9ZnVuY3Rpb24gdWcoYSxiKXt2YXIgYz10ZyhhKTthPTA7Zm9yKHZhciBkO2M7KXtpZigzPT09Yy5ub2RlVHlwZSl7ZD0NCmErYy50ZXh0Q29udGVudC5sZW5ndGg7aWYoYTw9YiYmZD49YilyZXR1cm57bm9kZTpjLG9mZnNldDpiLWF9O2E9ZH1hOntmb3IoO2M7KXtpZihjLm5leHRTaWJsaW5nKXtjPWMubmV4dFNpYmxpbmc7YnJlYWsgYX1jPWMucGFyZW50Tm9kZX1jPXZvaWQgMH1jPXRnKGMpfX1mdW5jdGlvbiB2ZyhhLGIpe3JldHVybiBhJiZiP2E9PT1iPyEwOmEmJjM9PT1hLm5vZGVUeXBlPyExOmImJjM9PT1iLm5vZGVUeXBlP3ZnKGEsYi5wYXJlbnROb2RlKToiY29udGFpbnMiaW4gYT9hLmNvbnRhaW5zKGIpOmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24/ISEoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSYxNik6ITE6ITF9ZnVuY3Rpb24gd2coKXtmb3IodmFyIGE9d2luZG93LGI9R2MoKTtiIGluc3RhbmNlb2YgYS5IVE1MSUZyYW1lRWxlbWVudDspe3RyeXt2YXIgYz0ic3RyaW5nIj09PXR5cGVvZiBiLmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZn1jYXRjaChkKXtjPSExfWlmKGMpYT1iLmNvbnRlbnRXaW5kb3c7DQplbHNlIGJyZWFrO2I9R2MoYS5kb2N1bWVudCl9cmV0dXJuIGJ9ZnVuY3Rpb24gbWUoYSl7dmFyIGI9YSYmYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiBiJiYoImlucHV0Ij09PWImJigidGV4dCI9PT1hLnR5cGV8fCJzZWFyY2giPT09YS50eXBlfHwidGVsIj09PWEudHlwZXx8InVybCI9PT1hLnR5cGV8fCJwYXNzd29yZCI9PT1hLnR5cGUpfHwidGV4dGFyZWEiPT09Ynx8InRydWUiPT09YS5jb250ZW50RWRpdGFibGUpfWZ1bmN0aW9uIHhnKGEsYixjKXt2YXIgZD1jLndpbmRvdz09PWM/Yy5kb2N1bWVudDo5PT09Yy5ub2RlVHlwZT9jOmMub3duZXJEb2N1bWVudDtuZXx8bnVsbD09cWJ8fHFiIT09R2MoZCl8fChkPXFiLCJzZWxlY3Rpb25TdGFydCJpbiBkJiZtZShkKT9kPXtzdGFydDpkLnNlbGVjdGlvblN0YXJ0LGVuZDpkLnNlbGVjdGlvbkVuZH06KGQ9KGQub3duZXJEb2N1bWVudCYmZC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3cpLmdldFNlbGVjdGlvbigpLA0KZD17YW5jaG9yTm9kZTpkLmFuY2hvck5vZGUsYW5jaG9yT2Zmc2V0OmQuYW5jaG9yT2Zmc2V0LGZvY3VzTm9kZTpkLmZvY3VzTm9kZSxmb2N1c09mZnNldDpkLmZvY3VzT2Zmc2V0fSksJGImJlpiKCRiLGQpfHwoJGI9ZCxkPVRjKG9lLCJvblNlbGVjdCIpLDA8ZC5sZW5ndGgmJihiPW5ldyBrZSgib25TZWxlY3QiLCJzZWxlY3QiLG51bGwsYixjKSxhLnB1c2goe2V2ZW50OmIsbGlzdGVuZXJzOmR9KSxiLnRhcmdldD1xYikpKX1mdW5jdGlvbiB5ZyhhLGIsYyl7dmFyIGQ9YS50eXBlfHwidW5rbm93bi1ldmVudCI7YS5jdXJyZW50VGFyZ2V0PWM7d2koZCxiLHZvaWQgMCxhKTthLmN1cnJlbnRUYXJnZXQ9bnVsbH1mdW5jdGlvbiBxZyhhLGIpe2I9MCE9PShiJjQpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgZD1hW2NdLGU9ZC5ldmVudDtkPWQubGlzdGVuZXJzO2E6e3ZhciBmPXZvaWQgMDtpZihiKWZvcih2YXIgZz1kLmxlbmd0aC0xOzA8PWc7Zy0tKXt2YXIgaD1kW2ddLA0Kaz1oLmluc3RhbmNlLHY9aC5jdXJyZW50VGFyZ2V0O2g9aC5saXN0ZW5lcjtpZihrIT09ZiYmZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrIGE7eWcoZSxoLHYpO2Y9a31lbHNlIGZvcihnPTA7ZzxkLmxlbmd0aDtnKyspe2g9ZFtnXTtrPWguaW5zdGFuY2U7dj1oLmN1cnJlbnRUYXJnZXQ7aD1oLmxpc3RlbmVyO2lmKGshPT1mJiZlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpYnJlYWsgYTt5ZyhlLGgsdik7Zj1rfX19aWYoSmMpdGhyb3cgYT1aZCxKYz0hMSxaZD1udWxsLGE7fWZ1bmN0aW9uIHooYSxiKXt2YXIgYz16ZyhiKSxkPWErIl9fYnViYmxlIjtjLmhhcyhkKXx8KEFnKGIsYSwyLCExKSxjLmFkZChkKSl9ZnVuY3Rpb24gQmcoYSl7YVtDZ118fChhW0NnXT0hMCx5Zi5mb3JFYWNoKGZ1bmN0aW9uKGIpe0RnLmhhcyhiKXx8RWcoYiwhMSxhLG51bGwpO0VnKGIsITAsYSxudWxsKX0pKX1mdW5jdGlvbiBFZyhhLGIsYyxkKXt2YXIgZT00PGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PQ0KYXJndW1lbnRzWzRdP2FyZ3VtZW50c1s0XTowLGY9Yzsic2VsZWN0aW9uY2hhbmdlIj09PWEmJjkhPT1jLm5vZGVUeXBlJiYoZj1jLm93bmVyRG9jdW1lbnQpO2lmKG51bGwhPT1kJiYhYiYmRGcuaGFzKGEpKXtpZigic2Nyb2xsIiE9PWEpcmV0dXJuO2V8PTI7Zj1kfXZhciBnPXpnKGYpLGg9YSsiX18iKyhiPyJjYXB0dXJlIjoiYnViYmxlIik7Zy5oYXMoaCl8fChiJiYoZXw9NCksQWcoZixhLGUsYiksZy5hZGQoaCkpfWZ1bmN0aW9uIEFnKGEsYixjLGQsZSl7ZT1mZS5nZXQoYik7c3dpdGNoKHZvaWQgMD09PWU/MjplKXtjYXNlIDA6ZT1KaTticmVhaztjYXNlIDE6ZT1LaTticmVhaztkZWZhdWx0OmU9Z2V9Yz1lLmJpbmQobnVsbCxiLGMsYSk7ZT12b2lkIDA7IXBlfHwidG91Y2hzdGFydCIhPT1iJiYidG91Y2htb3ZlIiE9PWImJiJ3aGVlbCIhPT1ifHwoZT0hMCk7ZD92b2lkIDAhPT1lP2EuYWRkRXZlbnRMaXN0ZW5lcihiLGMse2NhcHR1cmU6ITAscGFzc2l2ZTplfSk6YS5hZGRFdmVudExpc3RlbmVyKGIsDQpjLCEwKTp2b2lkIDAhPT1lP2EuYWRkRXZlbnRMaXN0ZW5lcihiLGMse3Bhc3NpdmU6ZX0pOmEuYWRkRXZlbnRMaXN0ZW5lcihiLGMsITEpfWZ1bmN0aW9uIGdnKGEsYixjLGQsZSl7dmFyIGY9ZDtpZigwPT09KGImMSkmJjA9PT0oYiYyKSYmbnVsbCE9PWQpYTpmb3IoOzspe2lmKG51bGw9PT1kKXJldHVybjt2YXIgZz1kLnRhZztpZigzPT09Z3x8ND09PWcpe3ZhciBoPWQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87aWYoaD09PWV8fDg9PT1oLm5vZGVUeXBlJiZoLnBhcmVudE5vZGU9PT1lKWJyZWFrO2lmKDQ9PT1nKWZvcihnPWQucmV0dXJuO251bGwhPT1nOyl7dmFyIGs9Zy50YWc7aWYoMz09PWt8fDQ9PT1rKWlmKGs9Zy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxrPT09ZXx8OD09PWsubm9kZVR5cGUmJmsucGFyZW50Tm9kZT09PWUpcmV0dXJuO2c9Zy5yZXR1cm59Zm9yKDtudWxsIT09aDspe2c9V2EoaCk7aWYobnVsbD09PWcpcmV0dXJuO2s9Zy50YWc7aWYoNT09PWt8fDY9PT0NCmspe2Q9Zj1nO2NvbnRpbnVlIGF9aD1oLnBhcmVudE5vZGV9fWQ9ZC5yZXR1cm59c2koZnVuY3Rpb24oKXt2YXIgZD1mLGU9VWQoYyksZz1bXTthOnt2YXIgaD1jZy5nZXQoYSk7aWYodm9pZCAwIT09aCl7dmFyIGs9a2UsbT1hO3N3aXRjaChhKXtjYXNlICJrZXlwcmVzcyI6aWYoMD09PVJjKGMpKWJyZWFrIGE7Y2FzZSAia2V5ZG93biI6Y2FzZSAia2V5dXAiOms9Ymo7YnJlYWs7Y2FzZSAiZm9jdXNpbiI6bT0iZm9jdXMiO2s9cWU7YnJlYWs7Y2FzZSAiZm9jdXNvdXQiOm09ImJsdXIiO2s9cWU7YnJlYWs7Y2FzZSAiYmVmb3JlYmx1ciI6Y2FzZSAiYWZ0ZXJibHVyIjprPXFlO2JyZWFrO2Nhc2UgImNsaWNrIjppZigyPT09Yy5idXR0b24pYnJlYWsgYTtjYXNlICJhdXhjbGljayI6Y2FzZSAiZGJsY2xpY2siOmNhc2UgIm1vdXNlZG93biI6Y2FzZSAibW91c2Vtb3ZlIjpjYXNlICJtb3VzZXVwIjpjYXNlICJtb3VzZW91dCI6Y2FzZSAibW91c2VvdmVyIjpjYXNlICJjb250ZXh0bWVudSI6az0NCkZnO2JyZWFrO2Nhc2UgImRyYWciOmNhc2UgImRyYWdlbmQiOmNhc2UgImRyYWdlbnRlciI6Y2FzZSAiZHJhZ2V4aXQiOmNhc2UgImRyYWdsZWF2ZSI6Y2FzZSAiZHJhZ292ZXIiOmNhc2UgImRyYWdzdGFydCI6Y2FzZSAiZHJvcCI6az1jajticmVhaztjYXNlICJ0b3VjaGNhbmNlbCI6Y2FzZSAidG91Y2hlbmQiOmNhc2UgInRvdWNobW92ZSI6Y2FzZSAidG91Y2hzdGFydCI6az1kajticmVhaztjYXNlIEdnOmNhc2UgSGc6Y2FzZSBJZzprPWVqO2JyZWFrO2Nhc2UgSmc6az1majticmVhaztjYXNlICJzY3JvbGwiOms9Z2o7YnJlYWs7Y2FzZSAid2hlZWwiOms9aGo7YnJlYWs7Y2FzZSAiY29weSI6Y2FzZSAiY3V0IjpjYXNlICJwYXN0ZSI6az1pajticmVhaztjYXNlICJnb3Rwb2ludGVyY2FwdHVyZSI6Y2FzZSAibG9zdHBvaW50ZXJjYXB0dXJlIjpjYXNlICJwb2ludGVyY2FuY2VsIjpjYXNlICJwb2ludGVyZG93biI6Y2FzZSAicG9pbnRlcm1vdmUiOmNhc2UgInBvaW50ZXJvdXQiOmNhc2UgInBvaW50ZXJvdmVyIjpjYXNlICJwb2ludGVydXAiOms9DQpLZ312YXIgbD0wIT09KGImNCksQz0hbCYmInNjcm9sbCI9PT1hLHg9bD9udWxsIT09aD9oKyJDYXB0dXJlIjpudWxsOmg7bD1bXTtmb3IodmFyIHA9ZCxxO251bGwhPT1wOyl7cT1wO3ZhciB1PXEuc3RhdGVOb2RlOzU9PT1xLnRhZyYmbnVsbCE9PXUmJihxPXUsbnVsbCE9PXgmJih1PVBiKHAseCksbnVsbCE9dSYmbC5wdXNoKGFjKHAsdSxxKSkpKTtpZihDKWJyZWFrO3A9cC5yZXR1cm59MDxsLmxlbmd0aCYmKGg9bmV3IGsoaCxtLG51bGwsYyxlKSxnLnB1c2goe2V2ZW50OmgsbGlzdGVuZXJzOmx9KSl9fWlmKDA9PT0oYiY3KSl7YTp7aD0ibW91c2VvdmVyIj09PWF8fCJwb2ludGVyb3ZlciI9PT1hO2s9Im1vdXNlb3V0Ij09PWF8fCJwb2ludGVyb3V0Ij09PWE7aWYoaCYmMD09PShiJjE2KSYmKG09Yy5yZWxhdGVkVGFyZ2V0fHxjLmZyb21FbGVtZW50KSYmKFdhKG0pfHxtW3JiXSkpYnJlYWsgYTtpZihrfHxoKXtoPWUud2luZG93PT09ZT9lOihoPWUub3duZXJEb2N1bWVudCk/aC5kZWZhdWx0Vmlld3x8DQpoLnBhcmVudFdpbmRvdzp3aW5kb3c7aWYoayl7aWYobT1jLnJlbGF0ZWRUYXJnZXR8fGMudG9FbGVtZW50LGs9ZCxtPW0/V2EobSk6bnVsbCxudWxsIT09bSYmKEM9VmEobSksbSE9PUN8fDUhPT1tLnRhZyYmNiE9PW0udGFnKSltPW51bGx9ZWxzZSBrPW51bGwsbT1kO2lmKGshPT1tKXtsPUZnO3U9Im9uTW91c2VMZWF2ZSI7eD0ib25Nb3VzZUVudGVyIjtwPSJtb3VzZSI7aWYoInBvaW50ZXJvdXQiPT09YXx8InBvaW50ZXJvdmVyIj09PWEpbD1LZyx1PSJvblBvaW50ZXJMZWF2ZSIseD0ib25Qb2ludGVyRW50ZXIiLHA9InBvaW50ZXIiO0M9bnVsbD09az9oOnBiKGspO3E9bnVsbD09bT9oOnBiKG0pO2g9bmV3IGwodSxwKyJsZWF2ZSIsayxjLGUpO2gudGFyZ2V0PUM7aC5yZWxhdGVkVGFyZ2V0PXE7dT1udWxsO1dhKGUpPT09ZCYmKGw9bmV3IGwoeCxwKyJlbnRlciIsbSxjLGUpLGwudGFyZ2V0PXEsbC5yZWxhdGVkVGFyZ2V0PUMsdT1sKTtDPXU7aWYoayYmbSliOntsPWs7eD1tO3A9DQowO2ZvcihxPWw7cTtxPXNiKHEpKXArKztxPTA7Zm9yKHU9eDt1O3U9c2IodSkpcSsrO2Zvcig7MDxwLXE7KWw9c2IobCkscC0tO2Zvcig7MDxxLXA7KXg9c2IoeCkscS0tO2Zvcig7cC0tOyl7aWYobD09PXh8fG51bGwhPT14JiZsPT09eC5hbHRlcm5hdGUpYnJlYWsgYjtsPXNiKGwpO3g9c2IoeCl9bD1udWxsfWVsc2UgbD1udWxsO251bGwhPT1rJiZMZyhnLGgsayxsLCExKTtudWxsIT09bSYmbnVsbCE9PUMmJkxnKGcsQyxtLGwsITApfX19YTp7aD1kP3BiKGQpOndpbmRvdztrPWgubm9kZU5hbWUmJmgubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZigic2VsZWN0Ij09PWt8fCJpbnB1dCI9PT1rJiYiZmlsZSI9PT1oLnR5cGUpdmFyIG49Vmk7ZWxzZSBpZihvZyhoKSlpZihNZyluPVppO2Vsc2V7bj1YaTt2YXIgZGE9V2l9ZWxzZShrPWgubm9kZU5hbWUpJiYiaW5wdXQiPT09ay50b0xvd2VyQ2FzZSgpJiYoImNoZWNrYm94Ij09PWgudHlwZXx8InJhZGlvIj09PWgudHlwZSkmJihuPVlpKTsNCmlmKG4mJihuPW4oYSxkKSkpe3BnKGcsbixjLGUpO2JyZWFrIGF9ZGEmJmRhKGEsaCxkKTsiZm9jdXNvdXQiPT09YSYmKGRhPWguX3dyYXBwZXJTdGF0ZSkmJmRhLmNvbnRyb2xsZWQmJiJudW1iZXIiPT09aC50eXBlJiZPZChoLCJudW1iZXIiLGgudmFsdWUpfWRhPWQ/cGIoZCk6d2luZG93O3N3aXRjaChhKXtjYXNlICJmb2N1c2luIjppZihvZyhkYSl8fCJ0cnVlIj09PWRhLmNvbnRlbnRFZGl0YWJsZSlxYj1kYSxvZT1kLCRiPW51bGw7YnJlYWs7Y2FzZSAiZm9jdXNvdXQiOiRiPW9lPXFiPW51bGw7YnJlYWs7Y2FzZSAibW91c2Vkb3duIjpuZT0hMDticmVhaztjYXNlICJjb250ZXh0bWVudSI6Y2FzZSAibW91c2V1cCI6Y2FzZSAiZHJhZ2VuZCI6bmU9ITE7eGcoZyxjLGUpO2JyZWFrO2Nhc2UgInNlbGVjdGlvbmNoYW5nZSI6aWYoamopYnJlYWs7Y2FzZSAia2V5ZG93biI6Y2FzZSAia2V5dXAiOnhnKGcsYyxlKX12YXIgRWE7aWYoamUpYjp7c3dpdGNoKGEpe2Nhc2UgImNvbXBvc2l0aW9uc3RhcnQiOnZhciBGPQ0KIm9uQ29tcG9zaXRpb25TdGFydCI7YnJlYWsgYjtjYXNlICJjb21wb3NpdGlvbmVuZCI6Rj0ib25Db21wb3NpdGlvbkVuZCI7YnJlYWsgYjtjYXNlICJjb21wb3NpdGlvbnVwZGF0ZSI6Rj0ib25Db21wb3NpdGlvblVwZGF0ZSI7YnJlYWsgYn1GPXZvaWQgMH1lbHNlIG9iP2pnKGEsYykmJihGPSJvbkNvbXBvc2l0aW9uRW5kIik6ImtleWRvd24iPT09YSYmMjI5PT09Yy5rZXlDb2RlJiYoRj0ib25Db21wb3NpdGlvblN0YXJ0Iik7RiYmKG5nJiYia28iIT09Yy5sb2NhbGUmJihvYnx8Im9uQ29tcG9zaXRpb25TdGFydCIhPT1GPyJvbkNvbXBvc2l0aW9uRW5kIj09PUYmJm9iJiYoRWE9aGcoKSk6KENhPWUsaGU9InZhbHVlImluIENhP0NhLnZhbHVlOkNhLnRleHRDb250ZW50LG9iPSEwKSksZGE9VGMoZCxGKSwwPGRhLmxlbmd0aCYmKEY9bmV3IE5nKEYsYSxudWxsLGMsZSksZy5wdXNoKHtldmVudDpGLGxpc3RlbmVyczpkYX0pLEVhP0YuZGF0YT1FYTooRWE9a2coYyksbnVsbCE9PUVhJiYNCihGLmRhdGE9RWEpKSkpO2lmKEVhPWtqP1FpKGEsYyk6UmkoYSxjKSlkPVRjKGQsIm9uQmVmb3JlSW5wdXQiKSwwPGQubGVuZ3RoJiYoZT1uZXcgbGooIm9uQmVmb3JlSW5wdXQiLCJiZWZvcmVpbnB1dCIsbnVsbCxjLGUpLGcucHVzaCh7ZXZlbnQ6ZSxsaXN0ZW5lcnM6ZH0pLGUuZGF0YT1FYSl9cWcoZyxiKX0pfWZ1bmN0aW9uIGFjKGEsYixjKXtyZXR1cm57aW5zdGFuY2U6YSxsaXN0ZW5lcjpiLGN1cnJlbnRUYXJnZXQ6Y319ZnVuY3Rpb24gVGMoYSxiKXtmb3IodmFyIGM9YisiQ2FwdHVyZSIsZD1bXTtudWxsIT09YTspe3ZhciBlPWEsZj1lLnN0YXRlTm9kZTs1PT09ZS50YWcmJm51bGwhPT1mJiYoZT1mLGY9UGIoYSxjKSxudWxsIT1mJiZkLnVuc2hpZnQoYWMoYSxmLGUpKSxmPVBiKGEsYiksbnVsbCE9ZiYmZC5wdXNoKGFjKGEsZixlKSkpO2E9YS5yZXR1cm59cmV0dXJuIGR9ZnVuY3Rpb24gc2IoYSl7aWYobnVsbD09PWEpcmV0dXJuIG51bGw7ZG8gYT1hLnJldHVybjt3aGlsZShhJiYNCjUhPT1hLnRhZyk7cmV0dXJuIGE/YTpudWxsfWZ1bmN0aW9uIExnKGEsYixjLGQsZSl7Zm9yKHZhciBmPWIuX3JlYWN0TmFtZSxnPVtdO251bGwhPT1jJiZjIT09ZDspe3ZhciBoPWMsaz1oLmFsdGVybmF0ZSx2PWguc3RhdGVOb2RlO2lmKG51bGwhPT1rJiZrPT09ZClicmVhazs1PT09aC50YWcmJm51bGwhPT12JiYoaD12LGU/KGs9UGIoYyxmKSxudWxsIT1rJiZnLnVuc2hpZnQoYWMoYyxrLGgpKSk6ZXx8KGs9UGIoYyxmKSxudWxsIT1rJiZnLnB1c2goYWMoYyxrLGgpKSkpO2M9Yy5yZXR1cm59MCE9PWcubGVuZ3RoJiZhLnB1c2goe2V2ZW50OmIsbGlzdGVuZXJzOmd9KX1mdW5jdGlvbiBWYygpe31mdW5jdGlvbiBPZyhhLGIpe3N3aXRjaChhKXtjYXNlICJidXR0b24iOmNhc2UgImlucHV0IjpjYXNlICJzZWxlY3QiOmNhc2UgInRleHRhcmVhIjpyZXR1cm4hIWIuYXV0b0ZvY3VzfXJldHVybiExfWZ1bmN0aW9uIHJlKGEsYil7cmV0dXJuInRleHRhcmVhIj09PWF8fCJvcHRpb24iPT09DQphfHwibm9zY3JpcHQiPT09YXx8InN0cmluZyI9PT10eXBlb2YgYi5jaGlsZHJlbnx8Im51bWJlciI9PT10eXBlb2YgYi5jaGlsZHJlbnx8Im9iamVjdCI9PT10eXBlb2YgYi5kYW5nZXJvdXNseVNldElubmVySFRNTCYmbnVsbCE9PWIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJm51bGwhPWIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sfWZ1bmN0aW9uIHNlKGEpezE9PT1hLm5vZGVUeXBlP2EudGV4dENvbnRlbnQ9IiI6OT09PWEubm9kZVR5cGUmJihhPWEuYm9keSxudWxsIT1hJiYoYS50ZXh0Q29udGVudD0iIikpfWZ1bmN0aW9uIHRiKGEpe2Zvcig7bnVsbCE9YTthPWEubmV4dFNpYmxpbmcpe3ZhciBiPWEubm9kZVR5cGU7aWYoMT09PWJ8fDM9PT1iKWJyZWFrfXJldHVybiBhfWZ1bmN0aW9uIFBnKGEpe2E9YS5wcmV2aW91c1NpYmxpbmc7Zm9yKHZhciBiPTA7YTspe2lmKDg9PT1hLm5vZGVUeXBlKXt2YXIgYz1hLmRhdGE7aWYoIiQiPT09Y3x8IiQhIj09PWN8fCIkPyI9PT0NCmMpe2lmKDA9PT1iKXJldHVybiBhO2ItLX1lbHNlIi8kIj09PWMmJmIrK31hPWEucHJldmlvdXNTaWJsaW5nfXJldHVybiBudWxsfWZ1bmN0aW9uIG1qKGEpe3JldHVybnskJHR5cGVvZjp0ZSx0b1N0cmluZzphLHZhbHVlT2Y6YX19ZnVuY3Rpb24gV2EoYSl7dmFyIGI9YVtGYV07aWYoYilyZXR1cm4gYjtmb3IodmFyIGM9YS5wYXJlbnROb2RlO2M7KXtpZihiPWNbcmJdfHxjW0ZhXSl7Yz1iLmFsdGVybmF0ZTtpZihudWxsIT09Yi5jaGlsZHx8bnVsbCE9PWMmJm51bGwhPT1jLmNoaWxkKWZvcihhPVBnKGEpO251bGwhPT1hOyl7aWYoYz1hW0ZhXSlyZXR1cm4gYzthPVBnKGEpfXJldHVybiBifWE9YztjPWEucGFyZW50Tm9kZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBPYihhKXthPWFbRmFdfHxhW3JiXTtyZXR1cm4hYXx8NSE9PWEudGFnJiY2IT09YS50YWcmJjEzIT09YS50YWcmJjMhPT1hLnRhZz9udWxsOmF9ZnVuY3Rpb24gcGIoYSl7aWYoNT09PWEudGFnfHw2PT09YS50YWcpcmV0dXJuIGEuc3RhdGVOb2RlOw0KdGhyb3cgRXJyb3IobSgzMykpO31mdW5jdGlvbiBIYyhhKXtyZXR1cm4gYVtXY118fG51bGx9ZnVuY3Rpb24gemcoYSl7dmFyIGI9YVtRZ107dm9pZCAwPT09YiYmKGI9YVtRZ109bmV3IFNldCk7cmV0dXJuIGJ9ZnVuY3Rpb24gR2EoYSl7cmV0dXJue2N1cnJlbnQ6YX19ZnVuY3Rpb24gdChhLGIpezA+dWJ8fChhLmN1cnJlbnQ9dWVbdWJdLHVlW3ViXT1udWxsLHViLS0pfWZ1bmN0aW9uIEEoYSxiLGMpe3ViKys7dWVbdWJdPWEuY3VycmVudDthLmN1cnJlbnQ9Yn1mdW5jdGlvbiB2YihhLGIpe3ZhciBjPWEudHlwZS5jb250ZXh0VHlwZXM7aWYoIWMpcmV0dXJuIEhhO3ZhciBkPWEuc3RhdGVOb2RlO2lmKGQmJmQuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dD09PWIpcmV0dXJuIGQuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQ7dmFyIGU9e30sZjtmb3IoZiBpbiBjKWVbZl09YltmXTtkJiYoYT1hLnN0YXRlTm9kZSxhLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9DQpiLGEuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQ9ZSk7cmV0dXJuIGV9ZnVuY3Rpb24gUyhhKXthPWEuY2hpbGRDb250ZXh0VHlwZXM7cmV0dXJuIG51bGwhPT1hJiZ2b2lkIDAhPT1hfWZ1bmN0aW9uIFJnKGEsYixjKXtpZihELmN1cnJlbnQhPT1IYSl0aHJvdyBFcnJvcihtKDE2OCkpO0EoRCxiKTtBKEosYyl9ZnVuY3Rpb24gU2coYSxiLGMpe3ZhciBkPWEuc3RhdGVOb2RlO2E9Yi5jaGlsZENvbnRleHRUeXBlcztpZigiZnVuY3Rpb24iIT09dHlwZW9mIGQuZ2V0Q2hpbGRDb250ZXh0KXJldHVybiBjO2Q9ZC5nZXRDaGlsZENvbnRleHQoKTtmb3IodmFyIGUgaW4gZClpZighKGUgaW4gYSkpdGhyb3cgRXJyb3IobSgxMDgsaGIoYil8fCJVbmtub3duIixlKSk7cmV0dXJuIEIoe30sYyxkKX1mdW5jdGlvbiBYYyhhKXthPShhPWEuc3RhdGVOb2RlKSYmYS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dHx8SGE7WWE9RC5jdXJyZW50Ow0KQShELGEpO0EoSixKLmN1cnJlbnQpO3JldHVybiEwfWZ1bmN0aW9uIFRnKGEsYixjKXt2YXIgZD1hLnN0YXRlTm9kZTtpZighZCl0aHJvdyBFcnJvcihtKDE2OSkpO2M/KGE9U2coYSxiLFlhKSxkLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0PWEsdChKKSx0KEQpLEEoRCxhKSk6dChKKTtBKEosYyl9ZnVuY3Rpb24gd2IoKXtzd2l0Y2gobmooKSl7Y2FzZSBZYzpyZXR1cm4gOTk7Y2FzZSBVZzpyZXR1cm4gOTg7Y2FzZSBWZzpyZXR1cm4gOTc7Y2FzZSBXZzpyZXR1cm4gOTY7Y2FzZSBYZzpyZXR1cm4gOTU7ZGVmYXVsdDp0aHJvdyBFcnJvcihtKDMzMikpO319ZnVuY3Rpb24gWWcoYSl7c3dpdGNoKGEpe2Nhc2UgOTk6cmV0dXJuIFljO2Nhc2UgOTg6cmV0dXJuIFVnO2Nhc2UgOTc6cmV0dXJuIFZnO2Nhc2UgOTY6cmV0dXJuIFdnO2Nhc2UgOTU6cmV0dXJuIFhnO2RlZmF1bHQ6dGhyb3cgRXJyb3IobSgzMzIpKTt9fWZ1bmN0aW9uIFphKGEsYil7YT1ZZyhhKTsNCnJldHVybiBvaihhLGIpfWZ1bmN0aW9uIGJjKGEsYixjKXthPVlnKGEpO3JldHVybiB2ZShhLGIsYyl9ZnVuY3Rpb24gamEoKXtpZihudWxsIT09WmMpe3ZhciBhPVpjO1pjPW51bGw7d2UoYSl9WmcoKX1mdW5jdGlvbiBaZygpe2lmKCF4ZSYmbnVsbCE9PXBhKXt4ZT0hMDt2YXIgYT0wO3RyeXt2YXIgYj1wYTtaYSg5OSxmdW5jdGlvbigpe2Zvcig7YTxiLmxlbmd0aDthKyspe3ZhciBjPWJbYV07ZG8gYz1jKCEwKTt3aGlsZShudWxsIT09Yyl9fSk7cGE9bnVsbH1jYXRjaChjKXt0aHJvdyBudWxsIT09cGEmJihwYT1wYS5zbGljZShhKzEpKSx2ZShZYyxqYSksYzt9ZmluYWxseXt4ZT0hMX19fWZ1bmN0aW9uIGVhKGEsYil7aWYoYSYmYS5kZWZhdWx0UHJvcHMpe2I9Qih7fSxiKTthPWEuZGVmYXVsdFByb3BzO2Zvcih2YXIgYyBpbiBhKXZvaWQgMD09PWJbY10mJihiW2NdPWFbY10pO3JldHVybiBifXJldHVybiBifWZ1bmN0aW9uIHllKCl7JGM9eGI9YWQ9bnVsbH1mdW5jdGlvbiB6ZShhKXt2YXIgYj0NCmJkLmN1cnJlbnQ7dChiZCk7YS50eXBlLl9jb250ZXh0Ll9jdXJyZW50VmFsdWU9Yn1mdW5jdGlvbiAkZyhhLGIpe2Zvcig7bnVsbCE9PWE7KXt2YXIgYz1hLmFsdGVybmF0ZTtpZigoYS5jaGlsZExhbmVzJmIpPT09YilpZihudWxsPT09Y3x8KGMuY2hpbGRMYW5lcyZiKT09PWIpYnJlYWs7ZWxzZSBjLmNoaWxkTGFuZXN8PWI7ZWxzZSBhLmNoaWxkTGFuZXN8PWIsbnVsbCE9PWMmJihjLmNoaWxkTGFuZXN8PWIpO2E9YS5yZXR1cm59fWZ1bmN0aW9uIHliKGEsYil7YWQ9YTskYz14Yj1udWxsO2E9YS5kZXBlbmRlbmNpZXM7bnVsbCE9PWEmJm51bGwhPT1hLmZpcnN0Q29udGV4dCYmKDAhPT0oYS5sYW5lcyZiKSYmKGZhPSEwKSxhLmZpcnN0Q29udGV4dD1udWxsKX1mdW5jdGlvbiBZKGEsYil7aWYoJGMhPT1hJiYhMSE9PWImJjAhPT1iKXtpZigibnVtYmVyIiE9PXR5cGVvZiBifHwxMDczNzQxODIzPT09YikkYz1hLGI9MTA3Mzc0MTgyMztiPXtjb250ZXh0OmEsb2JzZXJ2ZWRCaXRzOmIsDQpuZXh0Om51bGx9O2lmKG51bGw9PT14Yil7aWYobnVsbD09PWFkKXRocm93IEVycm9yKG0oMzA4KSk7eGI9YjthZC5kZXBlbmRlbmNpZXM9e2xhbmVzOjAsZmlyc3RDb250ZXh0OmIscmVzcG9uZGVyczpudWxsfX1lbHNlIHhiPXhiLm5leHQ9Yn1yZXR1cm4gYS5fY3VycmVudFZhbHVlfWZ1bmN0aW9uIEFlKGEpe2EudXBkYXRlUXVldWU9e2Jhc2VTdGF0ZTphLm1lbW9pemVkU3RhdGUsZmlyc3RCYXNlVXBkYXRlOm51bGwsbGFzdEJhc2VVcGRhdGU6bnVsbCxzaGFyZWQ6e3BlbmRpbmc6bnVsbH0sZWZmZWN0czpudWxsfX1mdW5jdGlvbiBhaChhLGIpe2E9YS51cGRhdGVRdWV1ZTtiLnVwZGF0ZVF1ZXVlPT09YSYmKGIudXBkYXRlUXVldWU9e2Jhc2VTdGF0ZTphLmJhc2VTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6YS5maXJzdEJhc2VVcGRhdGUsbGFzdEJhc2VVcGRhdGU6YS5sYXN0QmFzZVVwZGF0ZSxzaGFyZWQ6YS5zaGFyZWQsZWZmZWN0czphLmVmZmVjdHN9KX1mdW5jdGlvbiBJYShhLGIpe3JldHVybntldmVudFRpbWU6YSwNCmxhbmU6Yix0YWc6MCxwYXlsb2FkOm51bGwsY2FsbGJhY2s6bnVsbCxuZXh0Om51bGx9fWZ1bmN0aW9uIEphKGEsYil7YT1hLnVwZGF0ZVF1ZXVlO2lmKG51bGwhPT1hKXthPWEuc2hhcmVkO3ZhciBjPWEucGVuZGluZztudWxsPT09Yz9iLm5leHQ9YjooYi5uZXh0PWMubmV4dCxjLm5leHQ9Yik7YS5wZW5kaW5nPWJ9fWZ1bmN0aW9uIGJoKGEsYil7dmFyIGM9YS51cGRhdGVRdWV1ZSxkPWEuYWx0ZXJuYXRlO2lmKG51bGwhPT1kJiYoZD1kLnVwZGF0ZVF1ZXVlLGM9PT1kKSl7dmFyIGU9bnVsbCxmPW51bGw7Yz1jLmZpcnN0QmFzZVVwZGF0ZTtpZihudWxsIT09Yyl7ZG97dmFyIGc9e2V2ZW50VGltZTpjLmV2ZW50VGltZSxsYW5lOmMubGFuZSx0YWc6Yy50YWcscGF5bG9hZDpjLnBheWxvYWQsY2FsbGJhY2s6Yy5jYWxsYmFjayxuZXh0Om51bGx9O251bGw9PT1mP2U9Zj1nOmY9Zi5uZXh0PWc7Yz1jLm5leHR9d2hpbGUobnVsbCE9PWMpO251bGw9PT1mP2U9Zj1iOmY9Zi5uZXh0PWJ9ZWxzZSBlPQ0KZj1iO2M9e2Jhc2VTdGF0ZTpkLmJhc2VTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6ZSxsYXN0QmFzZVVwZGF0ZTpmLHNoYXJlZDpkLnNoYXJlZCxlZmZlY3RzOmQuZWZmZWN0c307YS51cGRhdGVRdWV1ZT1jO3JldHVybn1hPWMubGFzdEJhc2VVcGRhdGU7bnVsbD09PWE/Yy5maXJzdEJhc2VVcGRhdGU9YjphLm5leHQ9YjtjLmxhc3RCYXNlVXBkYXRlPWJ9ZnVuY3Rpb24gY2MoYSxiLGMsZCl7dmFyIGU9YS51cGRhdGVRdWV1ZTtLYT0hMTt2YXIgZj1lLmZpcnN0QmFzZVVwZGF0ZSxnPWUubGFzdEJhc2VVcGRhdGUsaD1lLnNoYXJlZC5wZW5kaW5nO2lmKG51bGwhPT1oKXtlLnNoYXJlZC5wZW5kaW5nPW51bGw7dmFyIGs9aCx2PWsubmV4dDtrLm5leHQ9bnVsbDtudWxsPT09Zz9mPXY6Zy5uZXh0PXY7Zz1rO3ZhciBtPWEuYWx0ZXJuYXRlO2lmKG51bGwhPT1tKXttPW0udXBkYXRlUXVldWU7dmFyIGw9bS5sYXN0QmFzZVVwZGF0ZTtsIT09ZyYmKG51bGw9PT1sP20uZmlyc3RCYXNlVXBkYXRlPQ0KdjpsLm5leHQ9dixtLmxhc3RCYXNlVXBkYXRlPWspfX1pZihudWxsIT09Zil7bD1lLmJhc2VTdGF0ZTtnPTA7bT12PWs9bnVsbDtkb3toPWYubGFuZTt2YXIgcj1mLmV2ZW50VGltZTtpZigoZCZoKT09PWgpe251bGwhPT1tJiYobT1tLm5leHQ9e2V2ZW50VGltZTpyLGxhbmU6MCx0YWc6Zi50YWcscGF5bG9hZDpmLnBheWxvYWQsY2FsbGJhY2s6Zi5jYWxsYmFjayxuZXh0Om51bGx9KTthOnt2YXIgbj1hLHQ9ZjtoPWI7cj1jO3N3aXRjaCh0LnRhZyl7Y2FzZSAxOm49dC5wYXlsb2FkO2lmKCJmdW5jdGlvbiI9PT10eXBlb2Ygbil7bD1uLmNhbGwocixsLGgpO2JyZWFrIGF9bD1uO2JyZWFrIGE7Y2FzZSAzOm4uZmxhZ3M9bi5mbGFncyYtNDA5N3w2NDtjYXNlIDA6bj10LnBheWxvYWQ7aD0iZnVuY3Rpb24iPT09dHlwZW9mIG4/bi5jYWxsKHIsbCxoKTpuO2lmKG51bGw9PT1ofHx2b2lkIDA9PT1oKWJyZWFrIGE7bD1CKHt9LGwsaCk7YnJlYWsgYTtjYXNlIDI6S2E9ITB9fW51bGwhPT1mLmNhbGxiYWNrJiYNCihhLmZsYWdzfD0zMixoPWUuZWZmZWN0cyxudWxsPT09aD9lLmVmZmVjdHM9W2ZdOmgucHVzaChmKSl9ZWxzZSByPXtldmVudFRpbWU6cixsYW5lOmgsdGFnOmYudGFnLHBheWxvYWQ6Zi5wYXlsb2FkLGNhbGxiYWNrOmYuY2FsbGJhY2ssbmV4dDpudWxsfSxudWxsPT09bT8odj1tPXIsaz1sKTptPW0ubmV4dD1yLGd8PWg7Zj1mLm5leHQ7aWYobnVsbD09PWYpaWYoaD1lLnNoYXJlZC5wZW5kaW5nLG51bGw9PT1oKWJyZWFrO2Vsc2UgZj1oLm5leHQsaC5uZXh0PW51bGwsZS5sYXN0QmFzZVVwZGF0ZT1oLGUuc2hhcmVkLnBlbmRpbmc9bnVsbH13aGlsZSgxKTtudWxsPT09bSYmKGs9bCk7ZS5iYXNlU3RhdGU9aztlLmZpcnN0QmFzZVVwZGF0ZT12O2UubGFzdEJhc2VVcGRhdGU9bTtMYXw9ZzthLmxhbmVzPWc7YS5tZW1vaXplZFN0YXRlPWx9fWZ1bmN0aW9uIGNoKGEsYixjKXthPWIuZWZmZWN0cztiLmVmZmVjdHM9bnVsbDtpZihudWxsIT09YSlmb3IoYj0wO2I8YS5sZW5ndGg7YisrKXt2YXIgZD0NCmFbYl0sZT1kLmNhbGxiYWNrO2lmKG51bGwhPT1lKXtkLmNhbGxiYWNrPW51bGw7ZD1jO2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgZSl0aHJvdyBFcnJvcihtKDE5MSxlKSk7ZS5jYWxsKGQpfX19ZnVuY3Rpb24gY2QoYSxiLGMsZCl7Yj1hLm1lbW9pemVkU3RhdGU7Yz1jKGQsYik7Yz1udWxsPT09Y3x8dm9pZCAwPT09Yz9iOkIoe30sYixjKTthLm1lbW9pemVkU3RhdGU9YzswPT09YS5sYW5lcyYmKGEudXBkYXRlUXVldWUuYmFzZVN0YXRlPWMpfWZ1bmN0aW9uIGRoKGEsYixjLGQsZSxmLGcpe2E9YS5zdGF0ZU5vZGU7cmV0dXJuImZ1bmN0aW9uIj09PXR5cGVvZiBhLnNob3VsZENvbXBvbmVudFVwZGF0ZT9hLnNob3VsZENvbXBvbmVudFVwZGF0ZShkLGYsZyk6Yi5wcm90b3R5cGUmJmIucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50PyFaYihjLGQpfHwhWmIoZSxmKTohMH1mdW5jdGlvbiBlaChhLGIsYyl7dmFyIGQ9ITEsZT1IYTt2YXIgZj1iLmNvbnRleHRUeXBlOyJvYmplY3QiPT09DQp0eXBlb2YgZiYmbnVsbCE9PWY/Zj1ZKGYpOihlPVMoYik/WWE6RC5jdXJyZW50LGQ9Yi5jb250ZXh0VHlwZXMsZj0oZD1udWxsIT09ZCYmdm9pZCAwIT09ZCk/dmIoYSxlKTpIYSk7Yj1uZXcgYihjLGYpO2EubWVtb2l6ZWRTdGF0ZT1udWxsIT09Yi5zdGF0ZSYmdm9pZCAwIT09Yi5zdGF0ZT9iLnN0YXRlOm51bGw7Yi51cGRhdGVyPWRkO2Euc3RhdGVOb2RlPWI7Yi5fcmVhY3RJbnRlcm5hbHM9YTtkJiYoYT1hLnN0YXRlTm9kZSxhLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9ZSxhLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0PWYpO3JldHVybiBifWZ1bmN0aW9uIGZoKGEsYixjLGQpe2E9Yi5zdGF0ZTsiZnVuY3Rpb24iPT09dHlwZW9mIGIuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmYi5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKGMsZCk7ImZ1bmN0aW9uIj09PXR5cGVvZiBiLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiYNCmIuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoYyxkKTtiLnN0YXRlIT09YSYmZGQuZW5xdWV1ZVJlcGxhY2VTdGF0ZShiLGIuc3RhdGUsbnVsbCl9ZnVuY3Rpb24gQmUoYSxiLGMsZCl7dmFyIGU9YS5zdGF0ZU5vZGU7ZS5wcm9wcz1jO2Uuc3RhdGU9YS5tZW1vaXplZFN0YXRlO2UucmVmcz1naDtBZShhKTt2YXIgZj1iLmNvbnRleHRUeXBlOyJvYmplY3QiPT09dHlwZW9mIGYmJm51bGwhPT1mP2UuY29udGV4dD1ZKGYpOihmPVMoYik/WWE6RC5jdXJyZW50LGUuY29udGV4dD12YihhLGYpKTtjYyhhLGMsZSxkKTtlLnN0YXRlPWEubWVtb2l6ZWRTdGF0ZTtmPWIuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOyJmdW5jdGlvbiI9PT10eXBlb2YgZiYmKGNkKGEsYixmLGMpLGUuc3RhdGU9YS5tZW1vaXplZFN0YXRlKTsiZnVuY3Rpb24iPT09dHlwZW9mIGIuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzfHwiZnVuY3Rpb24iPT09dHlwZW9mIGUuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGV8fA0KImZ1bmN0aW9uIiE9PXR5cGVvZiBlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQmJiJmdW5jdGlvbiIhPT10eXBlb2YgZS5jb21wb25lbnRXaWxsTW91bnR8fChiPWUuc3RhdGUsImZ1bmN0aW9uIj09PXR5cGVvZiBlLmNvbXBvbmVudFdpbGxNb3VudCYmZS5jb21wb25lbnRXaWxsTW91bnQoKSwiZnVuY3Rpb24iPT09dHlwZW9mIGUuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCksYiE9PWUuc3RhdGUmJmRkLmVucXVldWVSZXBsYWNlU3RhdGUoZSxlLnN0YXRlLG51bGwpLGNjKGEsYyxlLGQpLGUuc3RhdGU9YS5tZW1vaXplZFN0YXRlKTsiZnVuY3Rpb24iPT09dHlwZW9mIGUuY29tcG9uZW50RGlkTW91bnQmJihhLmZsYWdzfD00KX1mdW5jdGlvbiBkYyhhLGIsYyl7YT1jLnJlZjtpZihudWxsIT09YSYmImZ1bmN0aW9uIiE9PXR5cGVvZiBhJiYib2JqZWN0IiE9PXR5cGVvZiBhKXtpZihjLl9vd25lcil7Yz1jLl9vd25lcjtpZihjKXtpZigxIT09DQpjLnRhZyl0aHJvdyBFcnJvcihtKDMwOSkpO3ZhciBkPWMuc3RhdGVOb2RlfWlmKCFkKXRocm93IEVycm9yKG0oMTQ3LGEpKTt2YXIgZT0iIithO2lmKG51bGwhPT1iJiZudWxsIT09Yi5yZWYmJiJmdW5jdGlvbiI9PT10eXBlb2YgYi5yZWYmJmIucmVmLl9zdHJpbmdSZWY9PT1lKXJldHVybiBiLnJlZjtiPWZ1bmN0aW9uKGEpe3ZhciBiPWQucmVmcztiPT09Z2gmJihiPWQucmVmcz17fSk7bnVsbD09PWE/ZGVsZXRlIGJbZV06YltlXT1hfTtiLl9zdHJpbmdSZWY9ZTtyZXR1cm4gYn1pZigic3RyaW5nIiE9PXR5cGVvZiBhKXRocm93IEVycm9yKG0oMjg0KSk7aWYoIWMuX293bmVyKXRocm93IEVycm9yKG0oMjkwLGEpKTt9cmV0dXJuIGF9ZnVuY3Rpb24gZWQoYSxiKXtpZigidGV4dGFyZWEiIT09YS50eXBlKXRocm93IEVycm9yKG0oMzEsIltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYik/Im9iamVjdCB3aXRoIGtleXMgeyIrT2JqZWN0LmtleXMoYikuam9pbigiLCAiKSsNCiJ9IjpiKSk7fWZ1bmN0aW9uIGhoKGEpe2Z1bmN0aW9uIGIoYixjKXtpZihhKXt2YXIgZD1iLmxhc3RFZmZlY3Q7bnVsbCE9PWQ/KGQubmV4dEVmZmVjdD1jLGIubGFzdEVmZmVjdD1jKTpiLmZpcnN0RWZmZWN0PWIubGFzdEVmZmVjdD1jO2MubmV4dEVmZmVjdD1udWxsO2MuZmxhZ3M9OH19ZnVuY3Rpb24gYyhjLGQpe2lmKCFhKXJldHVybiBudWxsO2Zvcig7bnVsbCE9PWQ7KWIoYyxkKSxkPWQuc2libGluZztyZXR1cm4gbnVsbH1mdW5jdGlvbiBkKGEsYil7Zm9yKGE9bmV3IE1hcDtudWxsIT09YjspbnVsbCE9PWIua2V5P2Euc2V0KGIua2V5LGIpOmEuc2V0KGIuaW5kZXgsYiksYj1iLnNpYmxpbmc7cmV0dXJuIGF9ZnVuY3Rpb24gZShhLGIpe2E9TWEoYSxiKTthLmluZGV4PTA7YS5zaWJsaW5nPW51bGw7cmV0dXJuIGF9ZnVuY3Rpb24gZihiLGMsZCl7Yi5pbmRleD1kO2lmKCFhKXJldHVybiBjO2Q9Yi5hbHRlcm5hdGU7aWYobnVsbCE9PWQpcmV0dXJuIGQ9ZC5pbmRleCxkPGM/KGIuZmxhZ3M9DQoyLGMpOmQ7Yi5mbGFncz0yO3JldHVybiBjfWZ1bmN0aW9uIGcoYil7YSYmbnVsbD09PWIuYWx0ZXJuYXRlJiYoYi5mbGFncz0yKTtyZXR1cm4gYn1mdW5jdGlvbiBoKGEsYixjLGQpe2lmKG51bGw9PT1ifHw2IT09Yi50YWcpcmV0dXJuIGI9Q2UoYyxhLm1vZGUsZCksYi5yZXR1cm49YSxiO2I9ZShiLGMpO2IucmV0dXJuPWE7cmV0dXJuIGJ9ZnVuY3Rpb24gayhhLGIsYyxkKXtpZihudWxsIT09YiYmYi5lbGVtZW50VHlwZT09PWMudHlwZSlyZXR1cm4gZD1lKGIsYy5wcm9wcyksZC5yZWY9ZGMoYSxiLGMpLGQucmV0dXJuPWEsZDtkPWZkKGMudHlwZSxjLmtleSxjLnByb3BzLG51bGwsYS5tb2RlLGQpO2QucmVmPWRjKGEsYixjKTtkLnJldHVybj1hO3JldHVybiBkfWZ1bmN0aW9uIHYoYSxiLGMsZCl7aWYobnVsbD09PWJ8fDQhPT1iLnRhZ3x8Yi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyE9PWMuY29udGFpbmVySW5mb3x8Yi5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24hPT1jLmltcGxlbWVudGF0aW9uKXJldHVybiBiPQ0KRGUoYyxhLm1vZGUsZCksYi5yZXR1cm49YSxiO2I9ZShiLGMuY2hpbGRyZW58fFtdKTtiLnJldHVybj1hO3JldHVybiBifWZ1bmN0aW9uIGwoYSxiLGMsZCxmKXtpZihudWxsPT09Ynx8NyE9PWIudGFnKXJldHVybiBiPXpiKGMsYS5tb2RlLGQsZiksYi5yZXR1cm49YSxiO2I9ZShiLGMpO2IucmV0dXJuPWE7cmV0dXJuIGJ9ZnVuY3Rpb24gbihhLGIsYyl7aWYoInN0cmluZyI9PT10eXBlb2YgYnx8Im51bWJlciI9PT10eXBlb2YgYilyZXR1cm4gYj1DZSgiIitiLGEubW9kZSxjKSxiLnJldHVybj1hLGI7aWYoIm9iamVjdCI9PT10eXBlb2YgYiYmbnVsbCE9PWIpe3N3aXRjaChiLiQkdHlwZW9mKXtjYXNlIGVjOnJldHVybiBjPWZkKGIudHlwZSxiLmtleSxiLnByb3BzLG51bGwsYS5tb2RlLGMpLGMucmVmPWRjKGEsbnVsbCxiKSxjLnJldHVybj1hLGM7Y2FzZSBVYTpyZXR1cm4gYj1EZShiLGEubW9kZSxjKSxiLnJldHVybj1hLGJ9aWYoZ2QoYil8fEpiKGIpKXJldHVybiBiPXpiKGIsDQphLm1vZGUsYyxudWxsKSxiLnJldHVybj1hLGI7ZWQoYSxiKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiByKGEsYixjLGQpe3ZhciBlPW51bGwhPT1iP2Iua2V5Om51bGw7aWYoInN0cmluZyI9PT10eXBlb2YgY3x8Im51bWJlciI9PT10eXBlb2YgYylyZXR1cm4gbnVsbCE9PWU/bnVsbDpoKGEsYiwiIitjLGQpO2lmKCJvYmplY3QiPT09dHlwZW9mIGMmJm51bGwhPT1jKXtzd2l0Y2goYy4kJHR5cGVvZil7Y2FzZSBlYzpyZXR1cm4gYy5rZXk9PT1lP2MudHlwZT09PXdhP2woYSxiLGMucHJvcHMuY2hpbGRyZW4sZCxlKTprKGEsYixjLGQpOm51bGw7Y2FzZSBVYTpyZXR1cm4gYy5rZXk9PT1lP3YoYSxiLGMsZCk6bnVsbH1pZihnZChjKXx8SmIoYykpcmV0dXJuIG51bGwhPT1lP251bGw6bChhLGIsYyxkLG51bGwpO2VkKGEsYyl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gdChhLGIsYyxkLGUpe2lmKCJzdHJpbmciPT09dHlwZW9mIGR8fCJudW1iZXIiPT09dHlwZW9mIGQpcmV0dXJuIGE9YS5nZXQoYyl8fA0KbnVsbCxoKGIsYSwiIitkLGUpO2lmKCJvYmplY3QiPT09dHlwZW9mIGQmJm51bGwhPT1kKXtzd2l0Y2goZC4kJHR5cGVvZil7Y2FzZSBlYzpyZXR1cm4gYT1hLmdldChudWxsPT09ZC5rZXk/YzpkLmtleSl8fG51bGwsZC50eXBlPT09d2E/bChiLGEsZC5wcm9wcy5jaGlsZHJlbixlLGQua2V5KTprKGIsYSxkLGUpO2Nhc2UgVWE6cmV0dXJuIGE9YS5nZXQobnVsbD09PWQua2V5P2M6ZC5rZXkpfHxudWxsLHYoYixhLGQsZSl9aWYoZ2QoZCl8fEpiKGQpKXJldHVybiBhPWEuZ2V0KGMpfHxudWxsLGwoYixhLGQsZSxudWxsKTtlZChiLGQpfXJldHVybiBudWxsfWZ1bmN0aW9uIHcoZSxnLGgsayl7Zm9yKHZhciBtPW51bGwsdj1udWxsLGw9ZyxwPWc9MCx4PW51bGw7bnVsbCE9PWwmJnA8aC5sZW5ndGg7cCsrKXtsLmluZGV4PnA/KHg9bCxsPW51bGwpOng9bC5zaWJsaW5nO3ZhciBDPXIoZSxsLGhbcF0sayk7aWYobnVsbD09PUMpe251bGw9PT1sJiYobD14KTticmVha31hJiZsJiZudWxsPT09DQpDLmFsdGVybmF0ZSYmYihlLGwpO2c9ZihDLGcscCk7bnVsbD09PXY/bT1DOnYuc2libGluZz1DO3Y9QztsPXh9aWYocD09PWgubGVuZ3RoKXJldHVybiBjKGUsbCksbTtpZihudWxsPT09bCl7Zm9yKDtwPGgubGVuZ3RoO3ArKylsPW4oZSxoW3BdLGspLG51bGwhPT1sJiYoZz1mKGwsZyxwKSxudWxsPT09dj9tPWw6di5zaWJsaW5nPWwsdj1sKTtyZXR1cm4gbX1mb3IobD1kKGUsbCk7cDxoLmxlbmd0aDtwKyspeD10KGwsZSxwLGhbcF0sayksbnVsbCE9PXgmJihhJiZudWxsIT09eC5hbHRlcm5hdGUmJmwuZGVsZXRlKG51bGw9PT14LmtleT9wOngua2V5KSxnPWYoeCxnLHApLG51bGw9PT12P209eDp2LnNpYmxpbmc9eCx2PXgpO2EmJmwuZm9yRWFjaChmdW5jdGlvbihhKXtyZXR1cm4gYihlLGEpfSk7cmV0dXJuIG19ZnVuY3Rpb24geihlLGcsaCxrKXt2YXIgbD1KYihoKTtpZigiZnVuY3Rpb24iIT09dHlwZW9mIGwpdGhyb3cgRXJyb3IobSgxNTApKTtoPWwuY2FsbChoKTtpZihudWxsPT0NCmgpdGhyb3cgRXJyb3IobSgxNTEpKTtmb3IodmFyIHY9bD1udWxsLHA9Zyx4PWc9MCxDPW51bGwscT1oLm5leHQoKTtudWxsIT09cCYmIXEuZG9uZTt4KysscT1oLm5leHQoKSl7cC5pbmRleD54PyhDPXAscD1udWxsKTpDPXAuc2libGluZzt2YXIgRGE9cihlLHAscS52YWx1ZSxrKTtpZihudWxsPT09RGEpe251bGw9PT1wJiYocD1DKTticmVha31hJiZwJiZudWxsPT09RGEuYWx0ZXJuYXRlJiZiKGUscCk7Zz1mKERhLGcseCk7bnVsbD09PXY/bD1EYTp2LnNpYmxpbmc9RGE7dj1EYTtwPUN9aWYocS5kb25lKXJldHVybiBjKGUscCksbDtpZihudWxsPT09cCl7Zm9yKDshcS5kb25lO3grKyxxPWgubmV4dCgpKXE9bihlLHEudmFsdWUsayksbnVsbCE9PXEmJihnPWYocSxnLHgpLG51bGw9PT12P2w9cTp2LnNpYmxpbmc9cSx2PXEpO3JldHVybiBsfWZvcihwPWQoZSxwKTshcS5kb25lO3grKyxxPWgubmV4dCgpKXE9dChwLGUseCxxLnZhbHVlLGspLG51bGwhPT1xJiYoYSYmbnVsbCE9PQ0KcS5hbHRlcm5hdGUmJnAuZGVsZXRlKG51bGw9PT1xLmtleT94OnEua2V5KSxnPWYocSxnLHgpLG51bGw9PT12P2w9cTp2LnNpYmxpbmc9cSx2PXEpO2EmJnAuZm9yRWFjaChmdW5jdGlvbihhKXtyZXR1cm4gYihlLGEpfSk7cmV0dXJuIGx9cmV0dXJuIGZ1bmN0aW9uKGEsZCxmLGgpe3ZhciBrPSJvYmplY3QiPT09dHlwZW9mIGYmJm51bGwhPT1mJiZmLnR5cGU9PT13YSYmbnVsbD09PWYua2V5O2smJihmPWYucHJvcHMuY2hpbGRyZW4pO3ZhciBsPSJvYmplY3QiPT09dHlwZW9mIGYmJm51bGwhPT1mO2lmKGwpc3dpdGNoKGYuJCR0eXBlb2Ype2Nhc2UgZWM6YTp7bD1mLmtleTtmb3Ioaz1kO251bGwhPT1rOyl7aWYoay5rZXk9PT1sKXtzd2l0Y2goay50YWcpe2Nhc2UgNzppZihmLnR5cGU9PT13YSl7YyhhLGsuc2libGluZyk7ZD1lKGssZi5wcm9wcy5jaGlsZHJlbik7ZC5yZXR1cm49YTthPWQ7YnJlYWsgYX1icmVhaztkZWZhdWx0OmlmKGsuZWxlbWVudFR5cGU9PT1mLnR5cGUpe2MoYSwNCmsuc2libGluZyk7ZD1lKGssZi5wcm9wcyk7ZC5yZWY9ZGMoYSxrLGYpO2QucmV0dXJuPWE7YT1kO2JyZWFrIGF9fWMoYSxrKTticmVha31lbHNlIGIoYSxrKTtrPWsuc2libGluZ31mLnR5cGU9PT13YT8oZD16YihmLnByb3BzLmNoaWxkcmVuLGEubW9kZSxoLGYua2V5KSxkLnJldHVybj1hLGE9ZCk6KGg9ZmQoZi50eXBlLGYua2V5LGYucHJvcHMsbnVsbCxhLm1vZGUsaCksaC5yZWY9ZGMoYSxkLGYpLGgucmV0dXJuPWEsYT1oKX1yZXR1cm4gZyhhKTtjYXNlIFVhOmE6e2ZvcihrPWYua2V5O251bGwhPT1kOyl7aWYoZC5rZXk9PT1rKWlmKDQ9PT1kLnRhZyYmZC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbz09PWYuY29udGFpbmVySW5mbyYmZC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb249PT1mLmltcGxlbWVudGF0aW9uKXtjKGEsZC5zaWJsaW5nKTtkPWUoZCxmLmNoaWxkcmVufHxbXSk7ZC5yZXR1cm49YTthPWQ7YnJlYWsgYX1lbHNle2MoYSxkKTticmVha31lbHNlIGIoYSxkKTtkPQ0KZC5zaWJsaW5nfWQ9RGUoZixhLm1vZGUsaCk7ZC5yZXR1cm49YTthPWR9cmV0dXJuIGcoYSl9aWYoInN0cmluZyI9PT10eXBlb2YgZnx8Im51bWJlciI9PT10eXBlb2YgZilyZXR1cm4gZj0iIitmLG51bGwhPT1kJiY2PT09ZC50YWc/KGMoYSxkLnNpYmxpbmcpLGQ9ZShkLGYpLGQucmV0dXJuPWEsYT1kKTooYyhhLGQpLGQ9Q2UoZixhLm1vZGUsaCksZC5yZXR1cm49YSxhPWQpLGcoYSk7aWYoZ2QoZikpcmV0dXJuIHcoYSxkLGYsaCk7aWYoSmIoZikpcmV0dXJuIHooYSxkLGYsaCk7bCYmZWQoYSxmKTtpZigidW5kZWZpbmVkIj09PXR5cGVvZiBmJiYhaylzd2l0Y2goYS50YWcpe2Nhc2UgMTpjYXNlIDIyOmNhc2UgMDpjYXNlIDExOmNhc2UgMTU6dGhyb3cgRXJyb3IobSgxNTIsaGIoYS50eXBlKXx8IkNvbXBvbmVudCIpKTt9cmV0dXJuIGMoYSxkKX19ZnVuY3Rpb24gJGEoYSl7aWYoYT09PWZjKXRocm93IEVycm9yKG0oMTc0KSk7cmV0dXJuIGF9ZnVuY3Rpb24gRWUoYSxiKXtBKGdjLA0KYik7QShoYyxhKTtBKGthLGZjKTthPWIubm9kZVR5cGU7c3dpdGNoKGEpe2Nhc2UgOTpjYXNlIDExOmI9KGI9Yi5kb2N1bWVudEVsZW1lbnQpP2IubmFtZXNwYWNlVVJJOlJkKG51bGwsIiIpO2JyZWFrO2RlZmF1bHQ6YT04PT09YT9iLnBhcmVudE5vZGU6YixiPWEubmFtZXNwYWNlVVJJfHxudWxsLGE9YS50YWdOYW1lLGI9UmQoYixhKX10KGthKTtBKGthLGIpfWZ1bmN0aW9uIEFiKGEpe3Qoa2EpO3QoaGMpO3QoZ2MpfWZ1bmN0aW9uIGloKGEpeyRhKGdjLmN1cnJlbnQpO3ZhciBiPSRhKGthLmN1cnJlbnQpO3ZhciBjPVJkKGIsYS50eXBlKTtiIT09YyYmKEEoaGMsYSksQShrYSxjKSl9ZnVuY3Rpb24gRmUoYSl7aGMuY3VycmVudD09PWEmJih0KGthKSx0KGhjKSl9ZnVuY3Rpb24gaGQoYSl7Zm9yKHZhciBiPWE7bnVsbCE9PWI7KXtpZigxMz09PWIudGFnKXt2YXIgYz1iLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PWMmJihjPWMuZGVoeWRyYXRlZCxudWxsPT09Y3x8IiQ/Ij09PWMuZGF0YXx8DQoiJCEiPT09Yy5kYXRhKSlyZXR1cm4gYn1lbHNlIGlmKDE5PT09Yi50YWcmJnZvaWQgMCE9PWIubWVtb2l6ZWRQcm9wcy5yZXZlYWxPcmRlcil7aWYoMCE9PShiLmZsYWdzJjY0KSlyZXR1cm4gYn1lbHNlIGlmKG51bGwhPT1iLmNoaWxkKXtiLmNoaWxkLnJldHVybj1iO2I9Yi5jaGlsZDtjb250aW51ZX1pZihiPT09YSlicmVhaztmb3IoO251bGw9PT1iLnNpYmxpbmc7KXtpZihudWxsPT09Yi5yZXR1cm58fGIucmV0dXJuPT09YSlyZXR1cm4gbnVsbDtiPWIucmV0dXJufWIuc2libGluZy5yZXR1cm49Yi5yZXR1cm47Yj1iLnNpYmxpbmd9cmV0dXJuIG51bGx9ZnVuY3Rpb24gamgoYSxiKXt2YXIgYz1aKDUsbnVsbCxudWxsLDApO2MuZWxlbWVudFR5cGU9IkRFTEVURUQiO2MudHlwZT0iREVMRVRFRCI7Yy5zdGF0ZU5vZGU9YjtjLnJldHVybj1hO2MuZmxhZ3M9ODtudWxsIT09YS5sYXN0RWZmZWN0PyhhLmxhc3RFZmZlY3QubmV4dEVmZmVjdD1jLGEubGFzdEVmZmVjdD1jKTphLmZpcnN0RWZmZWN0PQ0KYS5sYXN0RWZmZWN0PWN9ZnVuY3Rpb24ga2goYSxiKXtzd2l0Y2goYS50YWcpe2Nhc2UgNTp2YXIgYz1hLnR5cGU7Yj0xIT09Yi5ub2RlVHlwZXx8Yy50b0xvd2VyQ2FzZSgpIT09Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP251bGw6YjtyZXR1cm4gbnVsbCE9PWI/KGEuc3RhdGVOb2RlPWIsITApOiExO2Nhc2UgNjpyZXR1cm4gYj0iIj09PWEucGVuZGluZ1Byb3BzfHwzIT09Yi5ub2RlVHlwZT9udWxsOmIsbnVsbCE9PWI/KGEuc3RhdGVOb2RlPWIsITApOiExO2Nhc2UgMTM6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gR2UoYSl7aWYobGEpe3ZhciBiPU5hO2lmKGIpe3ZhciBjPWI7aWYoIWtoKGEsYikpe2I9dGIoYy5uZXh0U2libGluZyk7aWYoIWJ8fCFraChhLGIpKXthLmZsYWdzPWEuZmxhZ3MmLTEwMjV8MjtsYT0hMTtyYT1hO3JldHVybn1qaChyYSxjKX1yYT1hO05hPXRiKGIuZmlyc3RDaGlsZCl9ZWxzZSBhLmZsYWdzPWEuZmxhZ3MmLTEwMjV8MixsYT0hMSwNCnJhPWF9fWZ1bmN0aW9uIGxoKGEpe2ZvcihhPWEucmV0dXJuO251bGwhPT1hJiY1IT09YS50YWcmJjMhPT1hLnRhZyYmMTMhPT1hLnRhZzspYT1hLnJldHVybjtyYT1hfWZ1bmN0aW9uIGlkKGEpe2lmKGEhPT1yYSlyZXR1cm4hMTtpZighbGEpcmV0dXJuIGxoKGEpLGxhPSEwLCExO3ZhciBiPWEudHlwZTtpZig1IT09YS50YWd8fCJoZWFkIiE9PWImJiJib2R5IiE9PWImJiFyZShiLGEubWVtb2l6ZWRQcm9wcykpZm9yKGI9TmE7YjspamgoYSxiKSxiPXRiKGIubmV4dFNpYmxpbmcpO2xoKGEpO2lmKDEzPT09YS50YWcpe2E9YS5tZW1vaXplZFN0YXRlO2E9bnVsbCE9PWE/YS5kZWh5ZHJhdGVkOm51bGw7aWYoIWEpdGhyb3cgRXJyb3IobSgzMTcpKTthOnthPWEubmV4dFNpYmxpbmc7Zm9yKGI9MDthOyl7aWYoOD09PWEubm9kZVR5cGUpe3ZhciBjPWEuZGF0YTtpZigiLyQiPT09Yyl7aWYoMD09PWIpe05hPXRiKGEubmV4dFNpYmxpbmcpO2JyZWFrIGF9Yi0tfWVsc2UiJCIhPT1jJiYiJCEiIT09DQpjJiYiJD8iIT09Y3x8YisrfWE9YS5uZXh0U2libGluZ31OYT1udWxsfX1lbHNlIE5hPXJhP3RiKGEuc3RhdGVOb2RlLm5leHRTaWJsaW5nKTpudWxsO3JldHVybiEwfWZ1bmN0aW9uIEhlKCl7TmE9cmE9bnVsbDtsYT0hMX1mdW5jdGlvbiBJZSgpe2Zvcih2YXIgYT0wO2E8QmIubGVuZ3RoO2ErKylCYlthXS5fd29ya0luUHJvZ3Jlc3NWZXJzaW9uUHJpbWFyeT1udWxsO0JiLmxlbmd0aD0wfWZ1bmN0aW9uIFQoKXt0aHJvdyBFcnJvcihtKDMyMSkpO31mdW5jdGlvbiBKZShhLGIpe2lmKG51bGw9PT1iKXJldHVybiExO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGgmJmM8YS5sZW5ndGg7YysrKWlmKCFYKGFbY10sYltjXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gS2UoYSxiLGMsZCxlLGYpe2ljPWY7eT1iO2IubWVtb2l6ZWRTdGF0ZT1udWxsO2IudXBkYXRlUXVldWU9bnVsbDtiLmxhbmVzPTA7amMuY3VycmVudD1udWxsPT09YXx8bnVsbD09PWEubWVtb2l6ZWRTdGF0ZT9wajpxajsNCmE9YyhkLGUpO2lmKGtjKXtmPTA7ZG97a2M9ITE7aWYoISgyNT5mKSl0aHJvdyBFcnJvcihtKDMwMSkpO2YrPTE7Sz1OPW51bGw7Yi51cGRhdGVRdWV1ZT1udWxsO2pjLmN1cnJlbnQ9cmo7YT1jKGQsZSl9d2hpbGUoa2MpfWpjLmN1cnJlbnQ9amQ7Yj1udWxsIT09TiYmbnVsbCE9PU4ubmV4dDtpYz0wO0s9Tj15PW51bGw7a2Q9ITE7aWYoYil0aHJvdyBFcnJvcihtKDMwMCkpO3JldHVybiBhfWZ1bmN0aW9uIGFiKCl7dmFyIGE9e21lbW9pemVkU3RhdGU6bnVsbCxiYXNlU3RhdGU6bnVsbCxiYXNlUXVldWU6bnVsbCxxdWV1ZTpudWxsLG5leHQ6bnVsbH07bnVsbD09PUs/eS5tZW1vaXplZFN0YXRlPUs9YTpLPUsubmV4dD1hO3JldHVybiBLfWZ1bmN0aW9uIGJiKCl7aWYobnVsbD09PU4pe3ZhciBhPXkuYWx0ZXJuYXRlO2E9bnVsbCE9PWE/YS5tZW1vaXplZFN0YXRlOm51bGx9ZWxzZSBhPU4ubmV4dDt2YXIgYj1udWxsPT09Sz95Lm1lbW9pemVkU3RhdGU6Sy5uZXh0O2lmKG51bGwhPT0NCmIpSz1iLE49YTtlbHNle2lmKG51bGw9PT1hKXRocm93IEVycm9yKG0oMzEwKSk7Tj1hO2E9e21lbW9pemVkU3RhdGU6Ti5tZW1vaXplZFN0YXRlLGJhc2VTdGF0ZTpOLmJhc2VTdGF0ZSxiYXNlUXVldWU6Ti5iYXNlUXVldWUscXVldWU6Ti5xdWV1ZSxuZXh0Om51bGx9O251bGw9PT1LP3kubWVtb2l6ZWRTdGF0ZT1LPWE6Sz1LLm5leHQ9YX1yZXR1cm4gS31mdW5jdGlvbiBtYShhLGIpe3JldHVybiJmdW5jdGlvbiI9PT10eXBlb2YgYj9iKGEpOmJ9ZnVuY3Rpb24gbGMoYSxiLGMpe2I9YmIoKTtjPWIucXVldWU7aWYobnVsbD09PWMpdGhyb3cgRXJyb3IobSgzMTEpKTtjLmxhc3RSZW5kZXJlZFJlZHVjZXI9YTt2YXIgZD1OLGU9ZC5iYXNlUXVldWUsZj1jLnBlbmRpbmc7aWYobnVsbCE9PWYpe2lmKG51bGwhPT1lKXt2YXIgZz1lLm5leHQ7ZS5uZXh0PWYubmV4dDtmLm5leHQ9Z31kLmJhc2VRdWV1ZT1lPWY7Yy5wZW5kaW5nPW51bGx9aWYobnVsbCE9PWUpe2U9ZS5uZXh0O2Q9ZC5iYXNlU3RhdGU7DQp2YXIgaD1nPWY9bnVsbCxrPWU7ZG97dmFyIGw9ay5sYW5lO2lmKChpYyZsKT09PWwpbnVsbCE9PWgmJihoPWgubmV4dD17bGFuZTowLGFjdGlvbjprLmFjdGlvbixlYWdlclJlZHVjZXI6ay5lYWdlclJlZHVjZXIsZWFnZXJTdGF0ZTprLmVhZ2VyU3RhdGUsbmV4dDpudWxsfSksZD1rLmVhZ2VyUmVkdWNlcj09PWE/ay5lYWdlclN0YXRlOmEoZCxrLmFjdGlvbik7ZWxzZXt2YXIgbj17bGFuZTpsLGFjdGlvbjprLmFjdGlvbixlYWdlclJlZHVjZXI6ay5lYWdlclJlZHVjZXIsZWFnZXJTdGF0ZTprLmVhZ2VyU3RhdGUsbmV4dDpudWxsfTtudWxsPT09aD8oZz1oPW4sZj1kKTpoPWgubmV4dD1uO3kubGFuZXN8PWw7TGF8PWx9az1rLm5leHR9d2hpbGUobnVsbCE9PWsmJmshPT1lKTtudWxsPT09aD9mPWQ6aC5uZXh0PWc7WChkLGIubWVtb2l6ZWRTdGF0ZSl8fChmYT0hMCk7Yi5tZW1vaXplZFN0YXRlPWQ7Yi5iYXNlU3RhdGU9ZjtiLmJhc2VRdWV1ZT1oO2MubGFzdFJlbmRlcmVkU3RhdGU9DQpkfXJldHVybltiLm1lbW9pemVkU3RhdGUsYy5kaXNwYXRjaF19ZnVuY3Rpb24gbWMoYSxiLGMpe2I9YmIoKTtjPWIucXVldWU7aWYobnVsbD09PWMpdGhyb3cgRXJyb3IobSgzMTEpKTtjLmxhc3RSZW5kZXJlZFJlZHVjZXI9YTt2YXIgZD1jLmRpc3BhdGNoLGU9Yy5wZW5kaW5nLGY9Yi5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1lKXtjLnBlbmRpbmc9bnVsbDt2YXIgZz1lPWUubmV4dDtkbyBmPWEoZixnLmFjdGlvbiksZz1nLm5leHQ7d2hpbGUoZyE9PWUpO1goZixiLm1lbW9pemVkU3RhdGUpfHwoZmE9ITApO2IubWVtb2l6ZWRTdGF0ZT1mO251bGw9PT1iLmJhc2VRdWV1ZSYmKGIuYmFzZVN0YXRlPWYpO2MubGFzdFJlbmRlcmVkU3RhdGU9Zn1yZXR1cm5bZixkXX1mdW5jdGlvbiBtaChhLGIsYyl7dmFyIGQ9Yi5fZ2V0VmVyc2lvbjtkPWQoYi5fc291cmNlKTt2YXIgZT1iLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5O2lmKG51bGwhPT1lKWE9ZT09PWQ7ZWxzZSBpZihhPWEubXV0YWJsZVJlYWRMYW5lcywNCmE9KGljJmEpPT09YSliLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5PWQsQmIucHVzaChiKTtpZihhKXJldHVybiBjKGIuX3NvdXJjZSk7QmIucHVzaChiKTt0aHJvdyBFcnJvcihtKDM1MCkpO31mdW5jdGlvbiBuaChhLGIsYyxkKXt2YXIgZT1SO2lmKG51bGw9PT1lKXRocm93IEVycm9yKG0oMzQ5KSk7dmFyIGY9Yi5fZ2V0VmVyc2lvbixnPWYoYi5fc291cmNlKSxoPWpjLmN1cnJlbnQsaz1oLnVzZVN0YXRlKGZ1bmN0aW9uKCl7cmV0dXJuIG1oKGUsYixjKX0pLGw9a1sxXSxuPWtbMF07az1LO3ZhciB0PWEubWVtb2l6ZWRTdGF0ZSxyPXQucmVmcyx3PXIuZ2V0U25hcHNob3Qsej10LnNvdXJjZTt0PXQuc3Vic2NyaWJlO3ZhciBCPXk7YS5tZW1vaXplZFN0YXRlPXtyZWZzOnIsc291cmNlOmIsc3Vic2NyaWJlOmR9O2gudXNlRWZmZWN0KGZ1bmN0aW9uKCl7ci5nZXRTbmFwc2hvdD1jO3Iuc2V0U25hcHNob3Q9bDt2YXIgYT1mKGIuX3NvdXJjZSk7aWYoIVgoZyxhKSl7YT1jKGIuX3NvdXJjZSk7DQpYKG4sYSl8fChsKGEpLGE9T2EoQiksZS5tdXRhYmxlUmVhZExhbmVzfD1hJmUucGVuZGluZ0xhbmVzKTthPWUubXV0YWJsZVJlYWRMYW5lcztlLmVudGFuZ2xlZExhbmVzfD1hO2Zvcih2YXIgZD1lLmVudGFuZ2xlbWVudHMsaD1hOzA8aDspe3ZhciBrPTMxLUJhKGgpLG09MTw8aztkW2tdfD1hO2gmPX5tfX19LFtjLGIsZF0pO2gudXNlRWZmZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIGQoYi5fc291cmNlLGZ1bmN0aW9uKCl7dmFyIGE9ci5nZXRTbmFwc2hvdCxjPXIuc2V0U25hcHNob3Q7dHJ5e2MoYShiLl9zb3VyY2UpKTt2YXIgZD1PYShCKTtlLm11dGFibGVSZWFkTGFuZXN8PWQmZS5wZW5kaW5nTGFuZXN9Y2F0Y2gocSl7YyhmdW5jdGlvbigpe3Rocm93IHE7fSl9fSl9LFtiLGRdKTtYKHcsYykmJlgoeixiKSYmWCh0LGQpfHwoYT17cGVuZGluZzpudWxsLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjptYSxsYXN0UmVuZGVyZWRTdGF0ZTpufSxhLmRpc3BhdGNoPWw9TGUuYmluZChudWxsLA0KeSxhKSxrLnF1ZXVlPWEsay5iYXNlUXVldWU9bnVsbCxuPW1oKGUsYixjKSxrLm1lbW9pemVkU3RhdGU9ay5iYXNlU3RhdGU9bik7cmV0dXJuIG59ZnVuY3Rpb24gb2goYSxiLGMpe3ZhciBkPWJiKCk7cmV0dXJuIG5oKGQsYSxiLGMpfWZ1bmN0aW9uIG5jKGEpe3ZhciBiPWFiKCk7ImZ1bmN0aW9uIj09PXR5cGVvZiBhJiYoYT1hKCkpO2IubWVtb2l6ZWRTdGF0ZT1iLmJhc2VTdGF0ZT1hO2E9Yi5xdWV1ZT17cGVuZGluZzpudWxsLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjptYSxsYXN0UmVuZGVyZWRTdGF0ZTphfTthPWEuZGlzcGF0Y2g9TGUuYmluZChudWxsLHksYSk7cmV0dXJuW2IubWVtb2l6ZWRTdGF0ZSxhXX1mdW5jdGlvbiBsZChhLGIsYyxkKXthPXt0YWc6YSxjcmVhdGU6YixkZXN0cm95OmMsZGVwczpkLG5leHQ6bnVsbH07Yj15LnVwZGF0ZVF1ZXVlO251bGw9PT1iPyhiPXtsYXN0RWZmZWN0Om51bGx9LHkudXBkYXRlUXVldWU9YixiLmxhc3RFZmZlY3Q9DQphLm5leHQ9YSk6KGM9Yi5sYXN0RWZmZWN0LG51bGw9PT1jP2IubGFzdEVmZmVjdD1hLm5leHQ9YTooZD1jLm5leHQsYy5uZXh0PWEsYS5uZXh0PWQsYi5sYXN0RWZmZWN0PWEpKTtyZXR1cm4gYX1mdW5jdGlvbiBwaChhKXt2YXIgYj1hYigpO2E9e2N1cnJlbnQ6YX07cmV0dXJuIGIubWVtb2l6ZWRTdGF0ZT1hfWZ1bmN0aW9uIG1kKGEpe3JldHVybiBiYigpLm1lbW9pemVkU3RhdGV9ZnVuY3Rpb24gTWUoYSxiLGMsZCl7dmFyIGU9YWIoKTt5LmZsYWdzfD1hO2UubWVtb2l6ZWRTdGF0ZT1sZCgxfGIsYyx2b2lkIDAsdm9pZCAwPT09ZD9udWxsOmQpfWZ1bmN0aW9uIE5lKGEsYixjLGQpe3ZhciBlPWJiKCk7ZD12b2lkIDA9PT1kP251bGw6ZDt2YXIgZj12b2lkIDA7aWYobnVsbCE9PU4pe3ZhciBnPU4ubWVtb2l6ZWRTdGF0ZTtmPWcuZGVzdHJveTtpZihudWxsIT09ZCYmSmUoZCxnLmRlcHMpKXtsZChiLGMsZixkKTtyZXR1cm59fXkuZmxhZ3N8PWE7ZS5tZW1vaXplZFN0YXRlPWxkKDF8DQpiLGMsZixkKX1mdW5jdGlvbiBxaChhLGIpe3JldHVybiBNZSg1MTYsNCxhLGIpfWZ1bmN0aW9uIG5kKGEsYil7cmV0dXJuIE5lKDUxNiw0LGEsYil9ZnVuY3Rpb24gcmgoYSxiKXtyZXR1cm4gTmUoNCwyLGEsYil9ZnVuY3Rpb24gc2goYSxiKXtpZigiZnVuY3Rpb24iPT09dHlwZW9mIGIpcmV0dXJuIGE9YSgpLGIoYSksZnVuY3Rpb24oKXtiKG51bGwpfTtpZihudWxsIT09YiYmdm9pZCAwIT09YilyZXR1cm4gYT1hKCksYi5jdXJyZW50PWEsZnVuY3Rpb24oKXtiLmN1cnJlbnQ9bnVsbH19ZnVuY3Rpb24gdGgoYSxiLGMpe2M9bnVsbCE9PWMmJnZvaWQgMCE9PWM/Yy5jb25jYXQoW2FdKTpudWxsO3JldHVybiBOZSg0LDIsc2guYmluZChudWxsLGIsYSksYyl9ZnVuY3Rpb24gT2UoYSxiKXt9ZnVuY3Rpb24gdWgoYSxiKXt2YXIgYz1iYigpO2I9dm9pZCAwPT09Yj9udWxsOmI7dmFyIGQ9Yy5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1kJiZudWxsIT09YiYmSmUoYixkWzFdKSlyZXR1cm4gZFswXTsNCmMubWVtb2l6ZWRTdGF0ZT1bYSxiXTtyZXR1cm4gYX1mdW5jdGlvbiB2aChhLGIpe3ZhciBjPWJiKCk7Yj12b2lkIDA9PT1iP251bGw6Yjt2YXIgZD1jLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PWQmJm51bGwhPT1iJiZKZShiLGRbMV0pKXJldHVybiBkWzBdO2E9YSgpO2MubWVtb2l6ZWRTdGF0ZT1bYSxiXTtyZXR1cm4gYX1mdW5jdGlvbiBzaihhLGIpe3ZhciBjPXdiKCk7WmEoOTg+Yz85ODpjLGZ1bmN0aW9uKCl7YSghMCl9KTtaYSg5NzxjPzk3OmMsZnVuY3Rpb24oKXt2YXIgYz1hYS50cmFuc2l0aW9uO2FhLnRyYW5zaXRpb249MTt0cnl7YSghMSksYigpfWZpbmFsbHl7YWEudHJhbnNpdGlvbj1jfX0pfWZ1bmN0aW9uIExlKGEsYixjKXt2YXIgZD1XKCksZT1PYShhKSxmPXtsYW5lOmUsYWN0aW9uOmMsZWFnZXJSZWR1Y2VyOm51bGwsZWFnZXJTdGF0ZTpudWxsLG5leHQ6bnVsbH0sZz1iLnBlbmRpbmc7bnVsbD09PWc/Zi5uZXh0PWY6KGYubmV4dD1nLm5leHQsZy5uZXh0PWYpOw0KYi5wZW5kaW5nPWY7Zz1hLmFsdGVybmF0ZTtpZihhPT09eXx8bnVsbCE9PWcmJmc9PT15KWtjPWtkPSEwO2Vsc2V7aWYoMD09PWEubGFuZXMmJihudWxsPT09Z3x8MD09PWcubGFuZXMpJiYoZz1iLmxhc3RSZW5kZXJlZFJlZHVjZXIsbnVsbCE9PWcpKXRyeXt2YXIgaD1iLmxhc3RSZW5kZXJlZFN0YXRlLGs9ZyhoLGMpO2YuZWFnZXJSZWR1Y2VyPWc7Zi5lYWdlclN0YXRlPWs7aWYoWChrLGgpKXJldHVybn1jYXRjaCh2KXt9ZmluYWxseXt9UGEoYSxlLGQpfX1mdW5jdGlvbiBVKGEsYixjLGQpe2IuY2hpbGQ9bnVsbD09PWE/d2goYixudWxsLGMsZCk6b2QoYixhLmNoaWxkLGMsZCl9ZnVuY3Rpb24geGgoYSxiLGMsZCxlKXtjPWMucmVuZGVyO3ZhciBmPWIucmVmO3liKGIsZSk7ZD1LZShhLGIsYyxkLGYsZSk7aWYobnVsbCE9PWEmJiFmYSlyZXR1cm4gYi51cGRhdGVRdWV1ZT1hLnVwZGF0ZVF1ZXVlLGIuZmxhZ3MmPS01MTcsYS5sYW5lcyY9fmUsc2EoYSxiLGUpO2IuZmxhZ3N8PTE7DQpVKGEsYixkLGUpO3JldHVybiBiLmNoaWxkfWZ1bmN0aW9uIHloKGEsYixjLGQsZSxmKXtpZihudWxsPT09YSl7dmFyIGc9Yy50eXBlO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgZyYmIVBlKGcpJiZ2b2lkIDA9PT1nLmRlZmF1bHRQcm9wcyYmbnVsbD09PWMuY29tcGFyZSYmdm9pZCAwPT09Yy5kZWZhdWx0UHJvcHMpcmV0dXJuIGIudGFnPTE1LGIudHlwZT1nLHpoKGEsYixnLGQsZSxmKTthPWZkKGMudHlwZSxudWxsLGQsYixiLm1vZGUsZik7YS5yZWY9Yi5yZWY7YS5yZXR1cm49YjtyZXR1cm4gYi5jaGlsZD1hfWc9YS5jaGlsZDtpZigwPT09KGUmZikmJihlPWcubWVtb2l6ZWRQcm9wcyxjPWMuY29tcGFyZSxjPW51bGwhPT1jP2M6WmIsYyhlLGQpJiZhLnJlZj09PWIucmVmKSlyZXR1cm4gc2EoYSxiLGYpO2IuZmxhZ3N8PTE7YT1NYShnLGQpO2EucmVmPWIucmVmO2EucmV0dXJuPWI7cmV0dXJuIGIuY2hpbGQ9YX1mdW5jdGlvbiB6aChhLGIsYyxkLGUsZil7aWYobnVsbCE9PWEmJlpiKGEubWVtb2l6ZWRQcm9wcywNCmQpJiZhLnJlZj09PWIucmVmKWlmKGZhPSExLDAhPT0oZiZlKSkwIT09KGEuZmxhZ3MmMTYzODQpJiYoZmE9ITApO2Vsc2UgcmV0dXJuIGIubGFuZXM9YS5sYW5lcyxzYShhLGIsZik7cmV0dXJuIFFlKGEsYixjLGQsZil9ZnVuY3Rpb24gUmUoYSxiLGMpe3ZhciBkPWIucGVuZGluZ1Byb3BzLGU9ZC5jaGlsZHJlbixmPW51bGwhPT1hP2EubWVtb2l6ZWRTdGF0ZTpudWxsO2lmKCJoaWRkZW4iPT09ZC5tb2RlfHwidW5zdGFibGUtZGVmZXItd2l0aG91dC1oaWRpbmciPT09ZC5tb2RlKWlmKDA9PT0oYi5tb2RlJjQpKWIubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOjB9LHBkKGIsYyk7ZWxzZSBpZigwIT09KGMmMTA3Mzc0MTgyNCkpYi5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6MH0scGQoYixudWxsIT09Zj9mLmJhc2VMYW5lczpjKTtlbHNlIHJldHVybiBhPW51bGwhPT1mP2YuYmFzZUxhbmVzfGM6YyxiLmxhbmVzPWIuY2hpbGRMYW5lcz0xMDczNzQxODI0LGIubWVtb2l6ZWRTdGF0ZT0NCntiYXNlTGFuZXM6YX0scGQoYixhKSxudWxsO2Vsc2UgbnVsbCE9PWY/KGQ9Zi5iYXNlTGFuZXN8YyxiLm1lbW9pemVkU3RhdGU9bnVsbCk6ZD1jLHBkKGIsZCk7VShhLGIsZSxjKTtyZXR1cm4gYi5jaGlsZH1mdW5jdGlvbiBBaChhLGIpe3ZhciBjPWIucmVmO2lmKG51bGw9PT1hJiZudWxsIT09Y3x8bnVsbCE9PWEmJmEucmVmIT09YyliLmZsYWdzfD0xMjh9ZnVuY3Rpb24gUWUoYSxiLGMsZCxlKXt2YXIgZj1TKGMpP1lhOkQuY3VycmVudDtmPXZiKGIsZik7eWIoYixlKTtjPUtlKGEsYixjLGQsZixlKTtpZihudWxsIT09YSYmIWZhKXJldHVybiBiLnVwZGF0ZVF1ZXVlPWEudXBkYXRlUXVldWUsYi5mbGFncyY9LTUxNyxhLmxhbmVzJj1+ZSxzYShhLGIsZSk7Yi5mbGFnc3w9MTtVKGEsYixjLGUpO3JldHVybiBiLmNoaWxkfWZ1bmN0aW9uIEJoKGEsYixjLGQsZSl7aWYoUyhjKSl7dmFyIGY9ITA7WGMoYil9ZWxzZSBmPSExO3liKGIsZSk7aWYobnVsbD09PWIuc3RhdGVOb2RlKW51bGwhPT0NCmEmJihhLmFsdGVybmF0ZT1udWxsLGIuYWx0ZXJuYXRlPW51bGwsYi5mbGFnc3w9MiksZWgoYixjLGQpLEJlKGIsYyxkLGUpLGQ9ITA7ZWxzZSBpZihudWxsPT09YSl7dmFyIGc9Yi5zdGF0ZU5vZGUsaD1iLm1lbW9pemVkUHJvcHM7Zy5wcm9wcz1oO3ZhciBrPWcuY29udGV4dCxsPWMuY29udGV4dFR5cGU7Im9iamVjdCI9PT10eXBlb2YgbCYmbnVsbCE9PWw/bD1ZKGwpOihsPVMoYyk/WWE6RC5jdXJyZW50LGw9dmIoYixsKSk7dmFyIG09Yy5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsbj0iZnVuY3Rpb24iPT09dHlwZW9mIG18fCJmdW5jdGlvbiI9PT10eXBlb2YgZy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZTtufHwiZnVuY3Rpb24iIT09dHlwZW9mIGcuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJiJmdW5jdGlvbiIhPT10eXBlb2YgZy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzfHwoaCE9PWR8fGshPT1sKSYmZmgoYixnLGQsbCk7S2E9ITE7dmFyIHI9Yi5tZW1vaXplZFN0YXRlOw0KZy5zdGF0ZT1yO2NjKGIsZCxnLGUpO2s9Yi5tZW1vaXplZFN0YXRlO2ghPT1kfHxyIT09a3x8Si5jdXJyZW50fHxLYT8oImZ1bmN0aW9uIj09PXR5cGVvZiBtJiYoY2QoYixjLG0sZCksaz1iLm1lbW9pemVkU3RhdGUpLChoPUthfHxkaChiLGMsaCxkLHIsayxsKSk/KG58fCJmdW5jdGlvbiIhPT10eXBlb2YgZy5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiYiZnVuY3Rpb24iIT09dHlwZW9mIGcuY29tcG9uZW50V2lsbE1vdW50fHwoImZ1bmN0aW9uIj09PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxNb3VudCYmZy5jb21wb25lbnRXaWxsTW91bnQoKSwiZnVuY3Rpb24iPT09dHlwZW9mIGcuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmZy5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCkpLCJmdW5jdGlvbiI9PT10eXBlb2YgZy5jb21wb25lbnREaWRNb3VudCYmKGIuZmxhZ3N8PTQpKTooImZ1bmN0aW9uIj09PXR5cGVvZiBnLmNvbXBvbmVudERpZE1vdW50JiYoYi5mbGFnc3w9NCksDQpiLm1lbW9pemVkUHJvcHM9ZCxiLm1lbW9pemVkU3RhdGU9ayksZy5wcm9wcz1kLGcuc3RhdGU9ayxnLmNvbnRleHQ9bCxkPWgpOigiZnVuY3Rpb24iPT09dHlwZW9mIGcuY29tcG9uZW50RGlkTW91bnQmJihiLmZsYWdzfD00KSxkPSExKX1lbHNle2c9Yi5zdGF0ZU5vZGU7YWgoYSxiKTtoPWIubWVtb2l6ZWRQcm9wcztsPWIudHlwZT09PWIuZWxlbWVudFR5cGU/aDplYShiLnR5cGUsaCk7Zy5wcm9wcz1sO249Yi5wZW5kaW5nUHJvcHM7cj1nLmNvbnRleHQ7az1jLmNvbnRleHRUeXBlOyJvYmplY3QiPT09dHlwZW9mIGsmJm51bGwhPT1rP2s9WShrKTooaz1TKGMpP1lhOkQuY3VycmVudCxrPXZiKGIsaykpO3ZhciB0PWMuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOyhtPSJmdW5jdGlvbiI9PT10eXBlb2YgdHx8ImZ1bmN0aW9uIj09PXR5cGVvZiBnLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKXx8ImZ1bmN0aW9uIiE9PXR5cGVvZiBnLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiYNCiJmdW5jdGlvbiIhPT10eXBlb2YgZy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzfHwoaCE9PW58fHIhPT1rKSYmZmgoYixnLGQsayk7S2E9ITE7cj1iLm1lbW9pemVkU3RhdGU7Zy5zdGF0ZT1yO2NjKGIsZCxnLGUpO3ZhciB3PWIubWVtb2l6ZWRTdGF0ZTtoIT09bnx8ciE9PXd8fEouY3VycmVudHx8S2E/KCJmdW5jdGlvbiI9PT10eXBlb2YgdCYmKGNkKGIsYyx0LGQpLHc9Yi5tZW1vaXplZFN0YXRlKSwobD1LYXx8ZGgoYixjLGwsZCxyLHcsaykpPyhtfHwiZnVuY3Rpb24iIT09dHlwZW9mIGcuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUmJiJmdW5jdGlvbiIhPT10eXBlb2YgZy5jb21wb25lbnRXaWxsVXBkYXRlfHwoImZ1bmN0aW9uIj09PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxVcGRhdGUmJmcuY29tcG9uZW50V2lsbFVwZGF0ZShkLHcsayksImZ1bmN0aW9uIj09PXR5cGVvZiBnLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlJiZnLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlKGQsDQp3LGspKSwiZnVuY3Rpb24iPT09dHlwZW9mIGcuY29tcG9uZW50RGlkVXBkYXRlJiYoYi5mbGFnc3w9NCksImZ1bmN0aW9uIj09PXR5cGVvZiBnLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlJiYoYi5mbGFnc3w9MjU2KSk6KCJmdW5jdGlvbiIhPT10eXBlb2YgZy5jb21wb25lbnREaWRVcGRhdGV8fGg9PT1hLm1lbW9pemVkUHJvcHMmJnI9PT1hLm1lbW9pemVkU3RhdGV8fChiLmZsYWdzfD00KSwiZnVuY3Rpb24iIT09dHlwZW9mIGcuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGV8fGg9PT1hLm1lbW9pemVkUHJvcHMmJnI9PT1hLm1lbW9pemVkU3RhdGV8fChiLmZsYWdzfD0yNTYpLGIubWVtb2l6ZWRQcm9wcz1kLGIubWVtb2l6ZWRTdGF0ZT13KSxnLnByb3BzPWQsZy5zdGF0ZT13LGcuY29udGV4dD1rLGQ9bCk6KCJmdW5jdGlvbiIhPT10eXBlb2YgZy5jb21wb25lbnREaWRVcGRhdGV8fGg9PT1hLm1lbW9pemVkUHJvcHMmJnI9PT1hLm1lbW9pemVkU3RhdGV8fChiLmZsYWdzfD00KSwiZnVuY3Rpb24iIT09DQp0eXBlb2YgZy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXx8aD09PWEubWVtb2l6ZWRQcm9wcyYmcj09PWEubWVtb2l6ZWRTdGF0ZXx8KGIuZmxhZ3N8PTI1NiksZD0hMSl9cmV0dXJuIFNlKGEsYixjLGQsZixlKX1mdW5jdGlvbiBTZShhLGIsYyxkLGUsZil7QWgoYSxiKTt2YXIgZz0wIT09KGIuZmxhZ3MmNjQpO2lmKCFkJiYhZylyZXR1cm4gZSYmVGcoYixjLCExKSxzYShhLGIsZik7ZD1iLnN0YXRlTm9kZTt0ai5jdXJyZW50PWI7dmFyIGg9ZyYmImZ1bmN0aW9uIiE9PXR5cGVvZiBjLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcj9udWxsOmQucmVuZGVyKCk7Yi5mbGFnc3w9MTtudWxsIT09YSYmZz8oYi5jaGlsZD1vZChiLGEuY2hpbGQsbnVsbCxmKSxiLmNoaWxkPW9kKGIsbnVsbCxoLGYpKTpVKGEsYixoLGYpO2IubWVtb2l6ZWRTdGF0ZT1kLnN0YXRlO2UmJlRnKGIsYywhMCk7cmV0dXJuIGIuY2hpbGR9ZnVuY3Rpb24gQ2goYSl7dmFyIGI9YS5zdGF0ZU5vZGU7Yi5wZW5kaW5nQ29udGV4dD8NClJnKGEsYi5wZW5kaW5nQ29udGV4dCxiLnBlbmRpbmdDb250ZXh0IT09Yi5jb250ZXh0KTpiLmNvbnRleHQmJlJnKGEsYi5jb250ZXh0LCExKTtFZShhLGIuY29udGFpbmVySW5mbyl9ZnVuY3Rpb24gRGgoYSxiLGMpe3ZhciBkPWIucGVuZGluZ1Byb3BzLGU9RS5jdXJyZW50LGY9ITEsZzsoZz0wIT09KGIuZmxhZ3MmNjQpKXx8KGc9bnVsbCE9PWEmJm51bGw9PT1hLm1lbW9pemVkU3RhdGU/ITE6MCE9PShlJjIpKTtnPyhmPSEwLGIuZmxhZ3MmPS02NSk6bnVsbCE9PWEmJm51bGw9PT1hLm1lbW9pemVkU3RhdGV8fHZvaWQgMD09PWQuZmFsbGJhY2t8fCEwPT09ZC51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFja3x8KGV8PTEpO0EoRSxlJjEpO2lmKG51bGw9PT1hKXt2b2lkIDAhPT1kLmZhbGxiYWNrJiZHZShiKTthPWQuY2hpbGRyZW47ZT1kLmZhbGxiYWNrO2lmKGYpcmV0dXJuIGE9RWgoYixhLGUsYyksYi5jaGlsZC5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6Y30sYi5tZW1vaXplZFN0YXRlPQ0KcWQsYTtpZigibnVtYmVyIj09PXR5cGVvZiBkLnVuc3RhYmxlX2V4cGVjdGVkTG9hZFRpbWUpcmV0dXJuIGE9RWgoYixhLGUsYyksYi5jaGlsZC5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6Y30sYi5tZW1vaXplZFN0YXRlPXFkLGIubGFuZXM9MzM1NTQ0MzIsYTtjPVRlKHttb2RlOiJ2aXNpYmxlIixjaGlsZHJlbjphfSxiLm1vZGUsYyxudWxsKTtjLnJldHVybj1iO3JldHVybiBiLmNoaWxkPWN9aWYobnVsbCE9PWEubWVtb2l6ZWRTdGF0ZSl7aWYoZilyZXR1cm4gZD1GaChhLGIsZC5jaGlsZHJlbixkLmZhbGxiYWNrLGMpLGY9Yi5jaGlsZCxlPWEuY2hpbGQubWVtb2l6ZWRTdGF0ZSxmLm1lbW9pemVkU3RhdGU9bnVsbD09PWU/e2Jhc2VMYW5lczpjfTp7YmFzZUxhbmVzOmUuYmFzZUxhbmVzfGN9LGYuY2hpbGRMYW5lcz1hLmNoaWxkTGFuZXMmfmMsYi5tZW1vaXplZFN0YXRlPXFkLGQ7Yz1HaChhLGIsZC5jaGlsZHJlbixjKTtiLm1lbW9pemVkU3RhdGU9bnVsbDtyZXR1cm4gY31pZihmKXJldHVybiBkPQ0KRmgoYSxiLGQuY2hpbGRyZW4sZC5mYWxsYmFjayxjKSxmPWIuY2hpbGQsZT1hLmNoaWxkLm1lbW9pemVkU3RhdGUsZi5tZW1vaXplZFN0YXRlPW51bGw9PT1lP3tiYXNlTGFuZXM6Y306e2Jhc2VMYW5lczplLmJhc2VMYW5lc3xjfSxmLmNoaWxkTGFuZXM9YS5jaGlsZExhbmVzJn5jLGIubWVtb2l6ZWRTdGF0ZT1xZCxkO2M9R2goYSxiLGQuY2hpbGRyZW4sYyk7Yi5tZW1vaXplZFN0YXRlPW51bGw7cmV0dXJuIGN9ZnVuY3Rpb24gRWgoYSxiLGMsZCl7dmFyIGU9YS5tb2RlLGY9YS5jaGlsZDtiPXttb2RlOiJoaWRkZW4iLGNoaWxkcmVuOmJ9OzA9PT0oZSYyKSYmbnVsbCE9PWY/KGYuY2hpbGRMYW5lcz0wLGYucGVuZGluZ1Byb3BzPWIpOmY9VGUoYixlLDAsbnVsbCk7Yz16YihjLGUsZCxudWxsKTtmLnJldHVybj1hO2MucmV0dXJuPWE7Zi5zaWJsaW5nPWM7YS5jaGlsZD1mO3JldHVybiBjfWZ1bmN0aW9uIEdoKGEsYixjLGQpe3ZhciBlPWEuY2hpbGQ7YT1lLnNpYmxpbmc7Yz1NYShlLA0Ke21vZGU6InZpc2libGUiLGNoaWxkcmVuOmN9KTswPT09KGIubW9kZSYyKSYmKGMubGFuZXM9ZCk7Yy5yZXR1cm49YjtjLnNpYmxpbmc9bnVsbDtudWxsIT09YSYmKGEubmV4dEVmZmVjdD1udWxsLGEuZmxhZ3M9OCxiLmZpcnN0RWZmZWN0PWIubGFzdEVmZmVjdD1hKTtyZXR1cm4gYi5jaGlsZD1jfWZ1bmN0aW9uIEZoKGEsYixjLGQsZSl7dmFyIGY9Yi5tb2RlLGc9YS5jaGlsZDthPWcuc2libGluZzt2YXIgaD17bW9kZToiaGlkZGVuIixjaGlsZHJlbjpjfTswPT09KGYmMikmJmIuY2hpbGQhPT1nPyhjPWIuY2hpbGQsYy5jaGlsZExhbmVzPTAsYy5wZW5kaW5nUHJvcHM9aCxnPWMubGFzdEVmZmVjdCxudWxsIT09Zz8oYi5maXJzdEVmZmVjdD1jLmZpcnN0RWZmZWN0LGIubGFzdEVmZmVjdD1nLGcubmV4dEVmZmVjdD1udWxsKTpiLmZpcnN0RWZmZWN0PWIubGFzdEVmZmVjdD1udWxsKTpjPU1hKGcsaCk7bnVsbCE9PWE/ZD1NYShhLGQpOihkPXpiKGQsZixlLG51bGwpLGQuZmxhZ3N8PQ0KMik7ZC5yZXR1cm49YjtjLnJldHVybj1iO2Muc2libGluZz1kO2IuY2hpbGQ9YztyZXR1cm4gZH1mdW5jdGlvbiBIaChhLGIpe2EubGFuZXN8PWI7dmFyIGM9YS5hbHRlcm5hdGU7bnVsbCE9PWMmJihjLmxhbmVzfD1iKTskZyhhLnJldHVybixiKX1mdW5jdGlvbiBVZShhLGIsYyxkLGUsZil7dmFyIGc9YS5tZW1vaXplZFN0YXRlO251bGw9PT1nP2EubWVtb2l6ZWRTdGF0ZT17aXNCYWNrd2FyZHM6YixyZW5kZXJpbmc6bnVsbCxyZW5kZXJpbmdTdGFydFRpbWU6MCxsYXN0OmQsdGFpbDpjLHRhaWxNb2RlOmUsbGFzdEVmZmVjdDpmfTooZy5pc0JhY2t3YXJkcz1iLGcucmVuZGVyaW5nPW51bGwsZy5yZW5kZXJpbmdTdGFydFRpbWU9MCxnLmxhc3Q9ZCxnLnRhaWw9YyxnLnRhaWxNb2RlPWUsZy5sYXN0RWZmZWN0PWYpfWZ1bmN0aW9uIEloKGEsYixjKXt2YXIgZD1iLnBlbmRpbmdQcm9wcyxlPWQucmV2ZWFsT3JkZXIsZj1kLnRhaWw7VShhLGIsZC5jaGlsZHJlbixjKTtkPUUuY3VycmVudDsNCmlmKDAhPT0oZCYyKSlkPWQmMXwyLGIuZmxhZ3N8PTY0O2Vsc2V7aWYobnVsbCE9PWEmJjAhPT0oYS5mbGFncyY2NCkpYTpmb3IoYT1iLmNoaWxkO251bGwhPT1hOyl7aWYoMTM9PT1hLnRhZyludWxsIT09YS5tZW1vaXplZFN0YXRlJiZIaChhLGMpO2Vsc2UgaWYoMTk9PT1hLnRhZylIaChhLGMpO2Vsc2UgaWYobnVsbCE9PWEuY2hpbGQpe2EuY2hpbGQucmV0dXJuPWE7YT1hLmNoaWxkO2NvbnRpbnVlfWlmKGE9PT1iKWJyZWFrIGE7Zm9yKDtudWxsPT09YS5zaWJsaW5nOyl7aWYobnVsbD09PWEucmV0dXJufHxhLnJldHVybj09PWIpYnJlYWsgYTthPWEucmV0dXJufWEuc2libGluZy5yZXR1cm49YS5yZXR1cm47YT1hLnNpYmxpbmd9ZCY9MX1BKEUsZCk7aWYoMD09PShiLm1vZGUmMikpYi5tZW1vaXplZFN0YXRlPW51bGw7ZWxzZSBzd2l0Y2goZSl7Y2FzZSAiZm9yd2FyZHMiOmM9Yi5jaGlsZDtmb3IoZT1udWxsO251bGwhPT1jOylhPWMuYWx0ZXJuYXRlLG51bGwhPT1hJiZudWxsPT09DQpoZChhKSYmKGU9YyksYz1jLnNpYmxpbmc7Yz1lO251bGw9PT1jPyhlPWIuY2hpbGQsYi5jaGlsZD1udWxsKTooZT1jLnNpYmxpbmcsYy5zaWJsaW5nPW51bGwpO1VlKGIsITEsZSxjLGYsYi5sYXN0RWZmZWN0KTticmVhaztjYXNlICJiYWNrd2FyZHMiOmM9bnVsbDtlPWIuY2hpbGQ7Zm9yKGIuY2hpbGQ9bnVsbDtudWxsIT09ZTspe2E9ZS5hbHRlcm5hdGU7aWYobnVsbCE9PWEmJm51bGw9PT1oZChhKSl7Yi5jaGlsZD1lO2JyZWFrfWE9ZS5zaWJsaW5nO2Uuc2libGluZz1jO2M9ZTtlPWF9VWUoYiwhMCxjLG51bGwsZixiLmxhc3RFZmZlY3QpO2JyZWFrO2Nhc2UgInRvZ2V0aGVyIjpVZShiLCExLG51bGwsbnVsbCx2b2lkIDAsYi5sYXN0RWZmZWN0KTticmVhaztkZWZhdWx0OmIubWVtb2l6ZWRTdGF0ZT1udWxsfXJldHVybiBiLmNoaWxkfWZ1bmN0aW9uIHNhKGEsYixjKXtudWxsIT09YSYmKGIuZGVwZW5kZW5jaWVzPWEuZGVwZW5kZW5jaWVzKTtMYXw9Yi5sYW5lcztpZigwIT09KGMmDQpiLmNoaWxkTGFuZXMpKXtpZihudWxsIT09YSYmYi5jaGlsZCE9PWEuY2hpbGQpdGhyb3cgRXJyb3IobSgxNTMpKTtpZihudWxsIT09Yi5jaGlsZCl7YT1iLmNoaWxkO2M9TWEoYSxhLnBlbmRpbmdQcm9wcyk7Yi5jaGlsZD1jO2ZvcihjLnJldHVybj1iO251bGwhPT1hLnNpYmxpbmc7KWE9YS5zaWJsaW5nLGM9Yy5zaWJsaW5nPU1hKGEsYS5wZW5kaW5nUHJvcHMpLGMucmV0dXJuPWI7Yy5zaWJsaW5nPW51bGx9cmV0dXJuIGIuY2hpbGR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gb2MoYSxiKXtpZighbGEpc3dpdGNoKGEudGFpbE1vZGUpe2Nhc2UgImhpZGRlbiI6Yj1hLnRhaWw7Zm9yKHZhciBjPW51bGw7bnVsbCE9PWI7KW51bGwhPT1iLmFsdGVybmF0ZSYmKGM9YiksYj1iLnNpYmxpbmc7bnVsbD09PWM/YS50YWlsPW51bGw6Yy5zaWJsaW5nPW51bGw7YnJlYWs7Y2FzZSAiY29sbGFwc2VkIjpjPWEudGFpbDtmb3IodmFyIGQ9bnVsbDtudWxsIT09YzspbnVsbCE9PWMuYWx0ZXJuYXRlJiYNCihkPWMpLGM9Yy5zaWJsaW5nO251bGw9PT1kP2J8fG51bGw9PT1hLnRhaWw/YS50YWlsPW51bGw6YS50YWlsLnNpYmxpbmc9bnVsbDpkLnNpYmxpbmc9bnVsbH19ZnVuY3Rpb24gdWooYSxiLGMpe3ZhciBkPWIucGVuZGluZ1Byb3BzO3N3aXRjaChiLnRhZyl7Y2FzZSAyOmNhc2UgMTY6Y2FzZSAxNTpjYXNlIDA6Y2FzZSAxMTpjYXNlIDc6Y2FzZSA4OmNhc2UgMTI6Y2FzZSA5OmNhc2UgMTQ6cmV0dXJuIG51bGw7Y2FzZSAxOnJldHVybiBTKGIudHlwZSkmJih0KEopLHQoRCkpLG51bGw7Y2FzZSAzOkFiKCk7dChKKTt0KEQpO0llKCk7ZD1iLnN0YXRlTm9kZTtkLnBlbmRpbmdDb250ZXh0JiYoZC5jb250ZXh0PWQucGVuZGluZ0NvbnRleHQsZC5wZW5kaW5nQ29udGV4dD1udWxsKTtpZihudWxsPT09YXx8bnVsbD09PWEuY2hpbGQpaWQoYik/Yi5mbGFnc3w9NDpkLmh5ZHJhdGV8fChiLmZsYWdzfD0yNTYpO0poKGIpO3JldHVybiBudWxsO2Nhc2UgNTpGZShiKTt2YXIgZT0kYShnYy5jdXJyZW50KTsNCmM9Yi50eXBlO2lmKG51bGwhPT1hJiZudWxsIT1iLnN0YXRlTm9kZSl2aihhLGIsYyxkLGUpLGEucmVmIT09Yi5yZWYmJihiLmZsYWdzfD0xMjgpO2Vsc2V7aWYoIWQpe2lmKG51bGw9PT1iLnN0YXRlTm9kZSl0aHJvdyBFcnJvcihtKDE2NikpO3JldHVybiBudWxsfWE9JGEoa2EuY3VycmVudCk7aWYoaWQoYikpe2Q9Yi5zdGF0ZU5vZGU7Yz1iLnR5cGU7dmFyIGY9Yi5tZW1vaXplZFByb3BzO2RbRmFdPWI7ZFtXY109Zjtzd2l0Y2goYyl7Y2FzZSAiZGlhbG9nIjp6KCJjYW5jZWwiLGQpO3ooImNsb3NlIixkKTticmVhaztjYXNlICJpZnJhbWUiOmNhc2UgIm9iamVjdCI6Y2FzZSAiZW1iZWQiOnooImxvYWQiLGQpO2JyZWFrO2Nhc2UgInZpZGVvIjpjYXNlICJhdWRpbyI6Zm9yKGE9MDthPHBjLmxlbmd0aDthKyspeihwY1thXSxkKTticmVhaztjYXNlICJzb3VyY2UiOnooImVycm9yIixkKTticmVhaztjYXNlICJpbWciOmNhc2UgImltYWdlIjpjYXNlICJsaW5rIjp6KCJlcnJvciIsZCk7DQp6KCJsb2FkIixkKTticmVhaztjYXNlICJkZXRhaWxzIjp6KCJ0b2dnbGUiLGQpO2JyZWFrO2Nhc2UgImlucHV0IjpGZihkLGYpO3ooImludmFsaWQiLGQpO2JyZWFrO2Nhc2UgInNlbGVjdCI6ZC5fd3JhcHBlclN0YXRlPXt3YXNNdWx0aXBsZTohIWYubXVsdGlwbGV9O3ooImludmFsaWQiLGQpO2JyZWFrO2Nhc2UgInRleHRhcmVhIjpJZihkLGYpLHooImludmFsaWQiLGQpfVNkKGMsZik7YT1udWxsO2Zvcih2YXIgZyBpbiBmKWYuaGFzT3duUHJvcGVydHkoZykmJihlPWZbZ10sImNoaWxkcmVuIj09PWc/InN0cmluZyI9PT10eXBlb2YgZT9kLnRleHRDb250ZW50IT09ZSYmKGE9WyJjaGlsZHJlbiIsZV0pOiJudW1iZXIiPT09dHlwZW9mIGUmJmQudGV4dENvbnRlbnQhPT0iIitlJiYoYT1bImNoaWxkcmVuIiwiIitlXSk6SWIuaGFzT3duUHJvcGVydHkoZykmJm51bGwhPWUmJiJvblNjcm9sbCI9PT1nJiZ6KCJzY3JvbGwiLGQpKTtzd2l0Y2goYyl7Y2FzZSAiaW5wdXQiOkZjKGQpO0hmKGQsDQpmLCEwKTticmVhaztjYXNlICJ0ZXh0YXJlYSI6RmMoZCk7S2YoZCk7YnJlYWs7Y2FzZSAic2VsZWN0IjpjYXNlICJvcHRpb24iOmJyZWFrO2RlZmF1bHQ6ImZ1bmN0aW9uIj09PXR5cGVvZiBmLm9uQ2xpY2smJihkLm9uY2xpY2s9VmMpfWQ9YTtiLnVwZGF0ZVF1ZXVlPWQ7bnVsbCE9PWQmJihiLmZsYWdzfD00KX1lbHNle2c9OT09PWUubm9kZVR5cGU/ZTplLm93bmVyRG9jdW1lbnQ7Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPT09YSYmKGE9TGYoYykpOyJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj09PWE/InNjcmlwdCI9PT1jPyhhPWcuY3JlYXRlRWxlbWVudCgiZGl2IiksYS5pbm5lckhUTUw9IjxzY3JpcHQ+XHgzYy9zY3JpcHQ+IixhPWEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKSk6InN0cmluZyI9PT10eXBlb2YgZC5pcz9hPWcuY3JlYXRlRWxlbWVudChjLHtpczpkLmlzfSk6KGE9Zy5jcmVhdGVFbGVtZW50KGMpLCJzZWxlY3QiPT09YyYmKGc9YSxkLm11bHRpcGxlPw0KZy5tdWx0aXBsZT0hMDpkLnNpemUmJihnLnNpemU9ZC5zaXplKSkpOmE9Zy5jcmVhdGVFbGVtZW50TlMoYSxjKTthW0ZhXT1iO2FbV2NdPWQ7d2ooYSxiLCExLCExKTtiLnN0YXRlTm9kZT1hO2c9VGQoYyxkKTtzd2l0Y2goYyl7Y2FzZSAiZGlhbG9nIjp6KCJjYW5jZWwiLGEpO3ooImNsb3NlIixhKTtlPWQ7YnJlYWs7Y2FzZSAiaWZyYW1lIjpjYXNlICJvYmplY3QiOmNhc2UgImVtYmVkIjp6KCJsb2FkIixhKTtlPWQ7YnJlYWs7Y2FzZSAidmlkZW8iOmNhc2UgImF1ZGlvIjpmb3IoZT0wO2U8cGMubGVuZ3RoO2UrKyl6KHBjW2VdLGEpO2U9ZDticmVhaztjYXNlICJzb3VyY2UiOnooImVycm9yIixhKTtlPWQ7YnJlYWs7Y2FzZSAiaW1nIjpjYXNlICJpbWFnZSI6Y2FzZSAibGluayI6eigiZXJyb3IiLGEpO3ooImxvYWQiLGEpO2U9ZDticmVhaztjYXNlICJkZXRhaWxzIjp6KCJ0b2dnbGUiLGEpO2U9ZDticmVhaztjYXNlICJpbnB1dCI6RmYoYSxkKTtlPU1kKGEsZCk7eigiaW52YWxpZCIsDQphKTticmVhaztjYXNlICJvcHRpb24iOmU9UGQoYSxkKTticmVhaztjYXNlICJzZWxlY3QiOmEuX3dyYXBwZXJTdGF0ZT17d2FzTXVsdGlwbGU6ISFkLm11bHRpcGxlfTtlPUIoe30sZCx7dmFsdWU6dm9pZCAwfSk7eigiaW52YWxpZCIsYSk7YnJlYWs7Y2FzZSAidGV4dGFyZWEiOklmKGEsZCk7ZT1RZChhLGQpO3ooImludmFsaWQiLGEpO2JyZWFrO2RlZmF1bHQ6ZT1kfVNkKGMsZSk7dmFyIGg9ZTtmb3IoZiBpbiBoKWlmKGguaGFzT3duUHJvcGVydHkoZikpe3ZhciBrPWhbZl07InN0eWxlIj09PWY/TmYoYSxrKToiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiPT09Zj8oaz1rP2suX19odG1sOnZvaWQgMCxudWxsIT1rJiZLaChhLGspKToiY2hpbGRyZW4iPT09Zj8ic3RyaW5nIj09PXR5cGVvZiBrPygidGV4dGFyZWEiIT09Y3x8IiIhPT1rKSYmcWMoYSxrKToibnVtYmVyIj09PXR5cGVvZiBrJiZxYyhhLCIiK2spOiJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmciIT09ZiYmInN1cHByZXNzSHlkcmF0aW9uV2FybmluZyIhPT0NCmYmJiJhdXRvRm9jdXMiIT09ZiYmKEliLmhhc093blByb3BlcnR5KGYpP251bGwhPWsmJiJvblNjcm9sbCI9PT1mJiZ6KCJzY3JvbGwiLGEpOm51bGwhPWsmJkVkKGEsZixrLGcpKX1zd2l0Y2goYyl7Y2FzZSAiaW5wdXQiOkZjKGEpO0hmKGEsZCwhMSk7YnJlYWs7Y2FzZSAidGV4dGFyZWEiOkZjKGEpO0tmKGEpO2JyZWFrO2Nhc2UgIm9wdGlvbiI6bnVsbCE9ZC52YWx1ZSYmYS5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIit4YShkLnZhbHVlKSk7YnJlYWs7Y2FzZSAic2VsZWN0IjphLm11bHRpcGxlPSEhZC5tdWx0aXBsZTtmPWQudmFsdWU7bnVsbCE9Zj9pYihhLCEhZC5tdWx0aXBsZSxmLCExKTpudWxsIT1kLmRlZmF1bHRWYWx1ZSYmaWIoYSwhIWQubXVsdGlwbGUsZC5kZWZhdWx0VmFsdWUsITApO2JyZWFrO2RlZmF1bHQ6ImZ1bmN0aW9uIj09PXR5cGVvZiBlLm9uQ2xpY2smJihhLm9uY2xpY2s9VmMpfU9nKGMsZCkmJihiLmZsYWdzfD00KX1udWxsIT09Yi5yZWYmJihiLmZsYWdzfD0NCjEyOCl9cmV0dXJuIG51bGw7Y2FzZSA2OmlmKGEmJm51bGwhPWIuc3RhdGVOb2RlKXhqKGEsYixhLm1lbW9pemVkUHJvcHMsZCk7ZWxzZXtpZigic3RyaW5nIiE9PXR5cGVvZiBkJiZudWxsPT09Yi5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IobSgxNjYpKTtjPSRhKGdjLmN1cnJlbnQpOyRhKGthLmN1cnJlbnQpO2lkKGIpPyhkPWIuc3RhdGVOb2RlLGM9Yi5tZW1vaXplZFByb3BzLGRbRmFdPWIsZC5ub2RlVmFsdWUhPT1jJiYoYi5mbGFnc3w9NCkpOihkPSg5PT09Yy5ub2RlVHlwZT9jOmMub3duZXJEb2N1bWVudCkuY3JlYXRlVGV4dE5vZGUoZCksZFtGYV09YixiLnN0YXRlTm9kZT1kKX1yZXR1cm4gbnVsbDtjYXNlIDEzOnQoRSk7ZD1iLm1lbW9pemVkU3RhdGU7aWYoMCE9PShiLmZsYWdzJjY0KSlyZXR1cm4gYi5sYW5lcz1jLGI7ZD1udWxsIT09ZDtjPSExO251bGw9PT1hP3ZvaWQgMCE9PWIubWVtb2l6ZWRQcm9wcy5mYWxsYmFjayYmaWQoYik6Yz1udWxsIT09YS5tZW1vaXplZFN0YXRlOw0KaWYoZCYmIWMmJjAhPT0oYi5tb2RlJjIpKWlmKG51bGw9PT1hJiYhMCE9PWIubWVtb2l6ZWRQcm9wcy51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFja3x8MCE9PShFLmN1cnJlbnQmMSkpMD09PUwmJihMPTMpO2Vsc2V7aWYoMD09PUx8fDM9PT1MKUw9NDtudWxsPT09Unx8MD09PShMYSYxMzQyMTc3MjcpJiYwPT09KENiJjEzNDIxNzcyNyl8fERiKFIsTyl9aWYoZHx8YyliLmZsYWdzfD00O3JldHVybiBudWxsO2Nhc2UgNDpyZXR1cm4gQWIoKSxKaChiKSxudWxsPT09YSYmQmcoYi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyksbnVsbDtjYXNlIDEwOnJldHVybiB6ZShiKSxudWxsO2Nhc2UgMTc6cmV0dXJuIFMoYi50eXBlKSYmKHQoSiksdChEKSksbnVsbDtjYXNlIDE5OnQoRSk7ZD1iLm1lbW9pemVkU3RhdGU7aWYobnVsbD09PWQpcmV0dXJuIG51bGw7Zj0wIT09KGIuZmxhZ3MmNjQpO2c9ZC5yZW5kZXJpbmc7aWYobnVsbD09PWcpaWYoZilvYyhkLCExKTtlbHNle2lmKDAhPT1MfHxudWxsIT09DQphJiYwIT09KGEuZmxhZ3MmNjQpKWZvcihhPWIuY2hpbGQ7bnVsbCE9PWE7KXtnPWhkKGEpO2lmKG51bGwhPT1nKXtiLmZsYWdzfD02NDtvYyhkLCExKTtmPWcudXBkYXRlUXVldWU7bnVsbCE9PWYmJihiLnVwZGF0ZVF1ZXVlPWYsYi5mbGFnc3w9NCk7bnVsbD09PWQubGFzdEVmZmVjdCYmKGIuZmlyc3RFZmZlY3Q9bnVsbCk7Yi5sYXN0RWZmZWN0PWQubGFzdEVmZmVjdDtkPWM7Zm9yKGM9Yi5jaGlsZDtudWxsIT09YzspZj1jLGE9ZCxmLmZsYWdzJj0yLGYubmV4dEVmZmVjdD1udWxsLGYuZmlyc3RFZmZlY3Q9bnVsbCxmLmxhc3RFZmZlY3Q9bnVsbCxnPWYuYWx0ZXJuYXRlLG51bGw9PT1nPyhmLmNoaWxkTGFuZXM9MCxmLmxhbmVzPWEsZi5jaGlsZD1udWxsLGYubWVtb2l6ZWRQcm9wcz1udWxsLGYubWVtb2l6ZWRTdGF0ZT1udWxsLGYudXBkYXRlUXVldWU9bnVsbCxmLmRlcGVuZGVuY2llcz1udWxsLGYuc3RhdGVOb2RlPW51bGwpOihmLmNoaWxkTGFuZXM9Zy5jaGlsZExhbmVzLGYubGFuZXM9DQpnLmxhbmVzLGYuY2hpbGQ9Zy5jaGlsZCxmLm1lbW9pemVkUHJvcHM9Zy5tZW1vaXplZFByb3BzLGYubWVtb2l6ZWRTdGF0ZT1nLm1lbW9pemVkU3RhdGUsZi51cGRhdGVRdWV1ZT1nLnVwZGF0ZVF1ZXVlLGYudHlwZT1nLnR5cGUsYT1nLmRlcGVuZGVuY2llcyxmLmRlcGVuZGVuY2llcz1udWxsPT09YT9udWxsOntsYW5lczphLmxhbmVzLGZpcnN0Q29udGV4dDphLmZpcnN0Q29udGV4dH0pLGM9Yy5zaWJsaW5nO0EoRSxFLmN1cnJlbnQmMXwyKTtyZXR1cm4gYi5jaGlsZH1hPWEuc2libGluZ31udWxsIT09ZC50YWlsJiZQKCk+VmUmJihiLmZsYWdzfD02NCxmPSEwLG9jKGQsITEpLGIubGFuZXM9MzM1NTQ0MzIpfWVsc2V7aWYoIWYpaWYoYT1oZChnKSxudWxsIT09YSl7aWYoYi5mbGFnc3w9NjQsZj0hMCxjPWEudXBkYXRlUXVldWUsbnVsbCE9PWMmJihiLnVwZGF0ZVF1ZXVlPWMsYi5mbGFnc3w9NCksb2MoZCwhMCksbnVsbD09PWQudGFpbCYmImhpZGRlbiI9PT1kLnRhaWxNb2RlJiYNCiFnLmFsdGVybmF0ZSYmIWxhKXJldHVybiBiPWIubGFzdEVmZmVjdD1kLmxhc3RFZmZlY3QsbnVsbCE9PWImJihiLm5leHRFZmZlY3Q9bnVsbCksbnVsbH1lbHNlIDIqUCgpLWQucmVuZGVyaW5nU3RhcnRUaW1lPlZlJiYxMDczNzQxODI0IT09YyYmKGIuZmxhZ3N8PTY0LGY9ITAsb2MoZCwhMSksYi5sYW5lcz0zMzU1NDQzMik7ZC5pc0JhY2t3YXJkcz8oZy5zaWJsaW5nPWIuY2hpbGQsYi5jaGlsZD1nKTooYz1kLmxhc3QsbnVsbCE9PWM/Yy5zaWJsaW5nPWc6Yi5jaGlsZD1nLGQubGFzdD1nKX1yZXR1cm4gbnVsbCE9PWQudGFpbD8oYz1kLnRhaWwsZC5yZW5kZXJpbmc9YyxkLnRhaWw9Yy5zaWJsaW5nLGQubGFzdEVmZmVjdD1iLmxhc3RFZmZlY3QsZC5yZW5kZXJpbmdTdGFydFRpbWU9UCgpLGMuc2libGluZz1udWxsLGI9RS5jdXJyZW50LEEoRSxmP2ImMXwyOmImMSksYyk6bnVsbDtjYXNlIDIzOmNhc2UgMjQ6cmV0dXJuIHRhPWNiLmN1cnJlbnQsdChjYiksbnVsbCE9PWEmJm51bGwhPT0NCmEubWVtb2l6ZWRTdGF0ZSE9PShudWxsIT09Yi5tZW1vaXplZFN0YXRlKSYmInVuc3RhYmxlLWRlZmVyLXdpdGhvdXQtaGlkaW5nIiE9PWQubW9kZSYmKGIuZmxhZ3N8PTQpLG51bGx9dGhyb3cgRXJyb3IobSgxNTYsYi50YWcpKTt9ZnVuY3Rpb24geWooYSxiKXtzd2l0Y2goYS50YWcpe2Nhc2UgMTpyZXR1cm4gUyhhLnR5cGUpJiYodChKKSx0KEQpKSxiPWEuZmxhZ3MsYiY0MDk2PyhhLmZsYWdzPWImLTQwOTd8NjQsYSk6bnVsbDtjYXNlIDM6QWIoKTt0KEopO3QoRCk7SWUoKTtiPWEuZmxhZ3M7aWYoMCE9PShiJjY0KSl0aHJvdyBFcnJvcihtKDI4NSkpO2EuZmxhZ3M9YiYtNDA5N3w2NDtyZXR1cm4gYTtjYXNlIDU6cmV0dXJuIEZlKGEpLG51bGw7Y2FzZSAxMzpyZXR1cm4gdChFKSxiPWEuZmxhZ3MsYiY0MDk2PyhhLmZsYWdzPWImLTQwOTd8NjQsYSk6bnVsbDtjYXNlIDE5OnJldHVybiB0KEUpLG51bGw7Y2FzZSA0OnJldHVybiBBYigpLG51bGw7Y2FzZSAxMDpyZXR1cm4gemUoYSksDQpudWxsO2Nhc2UgMjM6Y2FzZSAyNDpyZXR1cm4gdGE9Y2IuY3VycmVudCx0KGNiKSxudWxsO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIFdlKGEsYil7dHJ5e3ZhciBjPSIiLGQ9YjtkbyBjKz1vaShkKSxkPWQucmV0dXJuO3doaWxlKGQpO3ZhciBlPWN9Y2F0Y2goZil7ZT0iXG5FcnJvciBnZW5lcmF0aW5nIHN0YWNrOiAiK2YubWVzc2FnZSsiXG4iK2Yuc3RhY2t9cmV0dXJue3ZhbHVlOmEsc291cmNlOmIsc3RhY2s6ZX19ZnVuY3Rpb24gWGUoYSxiKXt0cnl7Y29uc29sZS5lcnJvcihiLnZhbHVlKX1jYXRjaChjKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgYzt9KX19ZnVuY3Rpb24gTGgoYSxiLGMpe2M9SWEoLTEsYyk7Yy50YWc9MztjLnBheWxvYWQ9e2VsZW1lbnQ6bnVsbH07dmFyIGQ9Yi52YWx1ZTtjLmNhbGxiYWNrPWZ1bmN0aW9uKCl7cmR8fChyZD0hMCxZZT1kKTtYZShhLGIpfTtyZXR1cm4gY31mdW5jdGlvbiBNaChhLGIsYyl7Yz1JYSgtMSxjKTtjLnRhZz0NCjM7dmFyIGQ9YS50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjtpZigiZnVuY3Rpb24iPT09dHlwZW9mIGQpe3ZhciBlPWIudmFsdWU7Yy5wYXlsb2FkPWZ1bmN0aW9uKCl7WGUoYSxiKTtyZXR1cm4gZChlKX19dmFyIGY9YS5zdGF0ZU5vZGU7bnVsbCE9PWYmJiJmdW5jdGlvbiI9PT10eXBlb2YgZi5jb21wb25lbnREaWRDYXRjaCYmKGMuY2FsbGJhY2s9ZnVuY3Rpb24oKXsiZnVuY3Rpb24iIT09dHlwZW9mIGQmJihudWxsPT09bmE/bmE9bmV3IFNldChbdGhpc10pOm5hLmFkZCh0aGlzKSxYZShhLGIpKTt2YXIgYz1iLnN0YWNrO3RoaXMuY29tcG9uZW50RGlkQ2F0Y2goYi52YWx1ZSx7Y29tcG9uZW50U3RhY2s6bnVsbCE9PWM/YzoiIn0pfSk7cmV0dXJuIGN9ZnVuY3Rpb24gTmgoYSl7dmFyIGI9YS5yZWY7aWYobnVsbCE9PWIpaWYoImZ1bmN0aW9uIj09PXR5cGVvZiBiKXRyeXtiKG51bGwpfWNhdGNoKGMpe1FhKGEsYyl9ZWxzZSBiLmN1cnJlbnQ9bnVsbH1mdW5jdGlvbiB6aihhLA0KYil7c3dpdGNoKGIudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OmNhc2UgMjI6cmV0dXJuO2Nhc2UgMTppZihiLmZsYWdzJjI1NiYmbnVsbCE9PWEpe3ZhciBjPWEubWVtb2l6ZWRQcm9wcyxkPWEubWVtb2l6ZWRTdGF0ZTthPWIuc3RhdGVOb2RlO2I9YS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShiLmVsZW1lbnRUeXBlPT09Yi50eXBlP2M6ZWEoYi50eXBlLGMpLGQpO2EuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGU9Yn1yZXR1cm47Y2FzZSAzOmIuZmxhZ3MmMjU2JiZzZShiLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtyZXR1cm47Y2FzZSA1OmNhc2UgNjpjYXNlIDQ6Y2FzZSAxNzpyZXR1cm59dGhyb3cgRXJyb3IobSgxNjMpKTt9ZnVuY3Rpb24gQWooYSxiLGMsZCl7c3dpdGNoKGMudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OmNhc2UgMjI6Yj1jLnVwZGF0ZVF1ZXVlO2I9bnVsbCE9PWI/Yi5sYXN0RWZmZWN0Om51bGw7aWYobnVsbCE9PWIpe2E9Yj1iLm5leHQ7DQpkbyAzPT09KGEudGFnJjMpJiYoZD1hLmNyZWF0ZSxhLmRlc3Ryb3k9ZCgpKSxhPWEubmV4dDt3aGlsZShhIT09Yil9Yj1jLnVwZGF0ZVF1ZXVlO2I9bnVsbCE9PWI/Yi5sYXN0RWZmZWN0Om51bGw7aWYobnVsbCE9PWIpe2E9Yj1iLm5leHQ7ZG97dmFyIGU9YTtkPWUubmV4dDtlPWUudGFnOzAhPT0oZSY0KSYmMCE9PShlJjEpJiYoT2goYyxhKSxCaihjLGEpKTthPWR9d2hpbGUoYSE9PWIpfXJldHVybjtjYXNlIDE6YT1jLnN0YXRlTm9kZTtjLmZsYWdzJjQmJihudWxsPT09Yj9hLmNvbXBvbmVudERpZE1vdW50KCk6KGQ9Yy5lbGVtZW50VHlwZT09PWMudHlwZT9iLm1lbW9pemVkUHJvcHM6ZWEoYy50eXBlLGIubWVtb2l6ZWRQcm9wcyksYS5jb21wb25lbnREaWRVcGRhdGUoZCxiLm1lbW9pemVkU3RhdGUsYS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSkpKTtiPWMudXBkYXRlUXVldWU7bnVsbCE9PWImJmNoKGMsYixhKTtyZXR1cm47Y2FzZSAzOmI9Yy51cGRhdGVRdWV1ZTsNCmlmKG51bGwhPT1iKXthPW51bGw7aWYobnVsbCE9PWMuY2hpbGQpc3dpdGNoKGMuY2hpbGQudGFnKXtjYXNlIDU6YT1jLmNoaWxkLnN0YXRlTm9kZTticmVhaztjYXNlIDE6YT1jLmNoaWxkLnN0YXRlTm9kZX1jaChjLGIsYSl9cmV0dXJuO2Nhc2UgNTphPWMuc3RhdGVOb2RlO251bGw9PT1iJiZjLmZsYWdzJjQmJk9nKGMudHlwZSxjLm1lbW9pemVkUHJvcHMpJiZhLmZvY3VzKCk7cmV0dXJuO2Nhc2UgNjpyZXR1cm47Y2FzZSA0OnJldHVybjtjYXNlIDEyOnJldHVybjtjYXNlIDEzOm51bGw9PT1jLm1lbW9pemVkU3RhdGUmJihjPWMuYWx0ZXJuYXRlLG51bGwhPT1jJiYoYz1jLm1lbW9pemVkU3RhdGUsbnVsbCE9PWMmJihjPWMuZGVoeWRyYXRlZCxudWxsIT09YyYmYWcoYykpKSk7cmV0dXJuO2Nhc2UgMTk6Y2FzZSAxNzpjYXNlIDIwOmNhc2UgMjE6Y2FzZSAyMzpjYXNlIDI0OnJldHVybn10aHJvdyBFcnJvcihtKDE2MykpO31mdW5jdGlvbiBQaChhLGIpe2Zvcih2YXIgYz1hOzspe2lmKDU9PT0NCmMudGFnKXt2YXIgZD1jLnN0YXRlTm9kZTtpZihiKWQ9ZC5zdHlsZSwiZnVuY3Rpb24iPT09dHlwZW9mIGQuc2V0UHJvcGVydHk/ZC5zZXRQcm9wZXJ0eSgiZGlzcGxheSIsIm5vbmUiLCJpbXBvcnRhbnQiKTpkLmRpc3BsYXk9Im5vbmUiO2Vsc2V7ZD1jLnN0YXRlTm9kZTt2YXIgZT1jLm1lbW9pemVkUHJvcHMuc3R5bGU7ZT12b2lkIDAhPT1lJiZudWxsIT09ZSYmZS5oYXNPd25Qcm9wZXJ0eSgiZGlzcGxheSIpP2UuZGlzcGxheTpudWxsO2Quc3R5bGUuZGlzcGxheT1NZigiZGlzcGxheSIsZSl9fWVsc2UgaWYoNj09PWMudGFnKWMuc3RhdGVOb2RlLm5vZGVWYWx1ZT1iPyIiOmMubWVtb2l6ZWRQcm9wcztlbHNlIGlmKCgyMyE9PWMudGFnJiYyNCE9PWMudGFnfHxudWxsPT09Yy5tZW1vaXplZFN0YXRlfHxjPT09YSkmJm51bGwhPT1jLmNoaWxkKXtjLmNoaWxkLnJldHVybj1jO2M9Yy5jaGlsZDtjb250aW51ZX1pZihjPT09YSlicmVhaztmb3IoO251bGw9PT1jLnNpYmxpbmc7KXtpZihudWxsPT09DQpjLnJldHVybnx8Yy5yZXR1cm49PT1hKXJldHVybjtjPWMucmV0dXJufWMuc2libGluZy5yZXR1cm49Yy5yZXR1cm47Yz1jLnNpYmxpbmd9fWZ1bmN0aW9uIFFoKGEsYixjKXtpZihkYiYmImZ1bmN0aW9uIj09PXR5cGVvZiBkYi5vbkNvbW1pdEZpYmVyVW5tb3VudCl0cnl7ZGIub25Db21taXRGaWJlclVubW91bnQoWmUsYil9Y2F0Y2goZil7fXN3aXRjaChiLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmNhc2UgMjI6YT1iLnVwZGF0ZVF1ZXVlO2lmKG51bGwhPT1hJiYoYT1hLmxhc3RFZmZlY3QsbnVsbCE9PWEpKXtjPWE9YS5uZXh0O2Rve3ZhciBkPWMsZT1kLmRlc3Ryb3k7ZD1kLnRhZztpZih2b2lkIDAhPT1lKWlmKDAhPT0oZCY0KSlPaChiLGMpO2Vsc2V7ZD1iO3RyeXtlKCl9Y2F0Y2goZil7UWEoZCxmKX19Yz1jLm5leHR9d2hpbGUoYyE9PWEpfWJyZWFrO2Nhc2UgMTpOaChiKTthPWIuc3RhdGVOb2RlO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgYS5jb21wb25lbnRXaWxsVW5tb3VudCl0cnl7YS5wcm9wcz0NCmIubWVtb2l6ZWRQcm9wcyxhLnN0YXRlPWIubWVtb2l6ZWRTdGF0ZSxhLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2goZil7UWEoYixmKX1icmVhaztjYXNlIDU6TmgoYik7YnJlYWs7Y2FzZSA0OlJoKGEsYil9fWZ1bmN0aW9uIFNoKGEpe2EuYWx0ZXJuYXRlPW51bGw7YS5jaGlsZD1udWxsO2EuZGVwZW5kZW5jaWVzPW51bGw7YS5maXJzdEVmZmVjdD1udWxsO2EubGFzdEVmZmVjdD1udWxsO2EubWVtb2l6ZWRQcm9wcz1udWxsO2EubWVtb2l6ZWRTdGF0ZT1udWxsO2EucGVuZGluZ1Byb3BzPW51bGw7YS5yZXR1cm49bnVsbDthLnVwZGF0ZVF1ZXVlPW51bGx9ZnVuY3Rpb24gVGgoYSl7cmV0dXJuIDU9PT1hLnRhZ3x8Mz09PWEudGFnfHw0PT09YS50YWd9ZnVuY3Rpb24gVWgoYSl7YTp7Zm9yKHZhciBiPWEucmV0dXJuO251bGwhPT1iOyl7aWYoVGgoYikpYnJlYWsgYTtiPWIucmV0dXJufXRocm93IEVycm9yKG0oMTYwKSk7fXZhciBjPWI7Yj1jLnN0YXRlTm9kZTtzd2l0Y2goYy50YWcpe2Nhc2UgNTp2YXIgZD0NCiExO2JyZWFrO2Nhc2UgMzpiPWIuY29udGFpbmVySW5mbztkPSEwO2JyZWFrO2Nhc2UgNDpiPWIuY29udGFpbmVySW5mbztkPSEwO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IobSgxNjEpKTt9Yy5mbGFncyYxNiYmKHFjKGIsIiIpLGMuZmxhZ3MmPS0xNyk7YTpiOmZvcihjPWE7Oyl7Zm9yKDtudWxsPT09Yy5zaWJsaW5nOyl7aWYobnVsbD09PWMucmV0dXJufHxUaChjLnJldHVybikpe2M9bnVsbDticmVhayBhfWM9Yy5yZXR1cm59Yy5zaWJsaW5nLnJldHVybj1jLnJldHVybjtmb3IoYz1jLnNpYmxpbmc7NSE9PWMudGFnJiY2IT09Yy50YWcmJjE4IT09Yy50YWc7KXtpZihjLmZsYWdzJjIpY29udGludWUgYjtpZihudWxsPT09Yy5jaGlsZHx8ND09PWMudGFnKWNvbnRpbnVlIGI7ZWxzZSBjLmNoaWxkLnJldHVybj1jLGM9Yy5jaGlsZH1pZighKGMuZmxhZ3MmMikpe2M9Yy5zdGF0ZU5vZGU7YnJlYWsgYX19ZD8kZShhLGMsYik6YWYoYSxjLGIpfWZ1bmN0aW9uICRlKGEsYixjKXt2YXIgZD0NCmEudGFnLGU9NT09PWR8fDY9PT1kO2lmKGUpYT1lP2Euc3RhdGVOb2RlOmEuc3RhdGVOb2RlLmluc3RhbmNlLGI/OD09PWMubm9kZVR5cGU/Yy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLGIpOmMuaW5zZXJ0QmVmb3JlKGEsYik6KDg9PT1jLm5vZGVUeXBlPyhiPWMucGFyZW50Tm9kZSxiLmluc2VydEJlZm9yZShhLGMpKTooYj1jLGIuYXBwZW5kQ2hpbGQoYSkpLGM9Yy5fcmVhY3RSb290Q29udGFpbmVyLG51bGwhPT1jJiZ2b2lkIDAhPT1jfHxudWxsIT09Yi5vbmNsaWNrfHwoYi5vbmNsaWNrPVZjKSk7ZWxzZSBpZig0IT09ZCYmKGE9YS5jaGlsZCxudWxsIT09YSkpZm9yKCRlKGEsYixjKSxhPWEuc2libGluZztudWxsIT09YTspJGUoYSxiLGMpLGE9YS5zaWJsaW5nfWZ1bmN0aW9uIGFmKGEsYixjKXt2YXIgZD1hLnRhZyxlPTU9PT1kfHw2PT09ZDtpZihlKWE9ZT9hLnN0YXRlTm9kZTphLnN0YXRlTm9kZS5pbnN0YW5jZSxiP2MuaW5zZXJ0QmVmb3JlKGEsYik6Yy5hcHBlbmRDaGlsZChhKTsNCmVsc2UgaWYoNCE9PWQmJihhPWEuY2hpbGQsbnVsbCE9PWEpKWZvcihhZihhLGIsYyksYT1hLnNpYmxpbmc7bnVsbCE9PWE7KWFmKGEsYixjKSxhPWEuc2libGluZ31mdW5jdGlvbiBSaChhLGIsYyl7Yz1iO2Zvcih2YXIgZD0hMSxlLGY7Oyl7aWYoIWQpe2U9Yy5yZXR1cm47YTpmb3IoOzspe2lmKG51bGw9PT1lKXRocm93IEVycm9yKG0oMTYwKSk7Zj1lLnN0YXRlTm9kZTtzd2l0Y2goZS50YWcpe2Nhc2UgNTplPWY7Zj0hMTticmVhayBhO2Nhc2UgMzplPWYuY29udGFpbmVySW5mbztmPSEwO2JyZWFrIGE7Y2FzZSA0OmU9Zi5jb250YWluZXJJbmZvO2Y9ITA7YnJlYWsgYX1lPWUucmV0dXJufWQ9ITB9aWYoNT09PWMudGFnfHw2PT09Yy50YWcpe2E6Zm9yKHZhciBnPWEsaD1jLGs9aDs7KWlmKFFoKGcsayksbnVsbCE9PWsuY2hpbGQmJjQhPT1rLnRhZylrLmNoaWxkLnJldHVybj1rLGs9ay5jaGlsZDtlbHNle2lmKGs9PT1oKWJyZWFrIGE7Zm9yKDtudWxsPT09ay5zaWJsaW5nOyl7aWYobnVsbD09PQ0Kay5yZXR1cm58fGsucmV0dXJuPT09aClicmVhayBhO2s9ay5yZXR1cm59ay5zaWJsaW5nLnJldHVybj1rLnJldHVybjtrPWsuc2libGluZ31mPyhnPWUsaD1jLnN0YXRlTm9kZSw4PT09Zy5ub2RlVHlwZT9nLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaCk6Zy5yZW1vdmVDaGlsZChoKSk6ZS5yZW1vdmVDaGlsZChjLnN0YXRlTm9kZSl9ZWxzZSBpZig0PT09Yy50YWcpe2lmKG51bGwhPT1jLmNoaWxkKXtlPWMuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87Zj0hMDtjLmNoaWxkLnJldHVybj1jO2M9Yy5jaGlsZDtjb250aW51ZX19ZWxzZSBpZihRaChhLGMpLG51bGwhPT1jLmNoaWxkKXtjLmNoaWxkLnJldHVybj1jO2M9Yy5jaGlsZDtjb250aW51ZX1pZihjPT09YilicmVhaztmb3IoO251bGw9PT1jLnNpYmxpbmc7KXtpZihudWxsPT09Yy5yZXR1cm58fGMucmV0dXJuPT09YilyZXR1cm47Yz1jLnJldHVybjs0PT09Yy50YWcmJihkPSExKX1jLnNpYmxpbmcucmV0dXJuPWMucmV0dXJuO2M9DQpjLnNpYmxpbmd9fWZ1bmN0aW9uIGJmKGEsYil7c3dpdGNoKGIudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6Y2FzZSAyMjp2YXIgYz1iLnVwZGF0ZVF1ZXVlO2M9bnVsbCE9PWM/Yy5sYXN0RWZmZWN0Om51bGw7aWYobnVsbCE9PWMpe3ZhciBkPWM9Yy5uZXh0O2RvIDM9PT0oZC50YWcmMykmJihhPWQuZGVzdHJveSxkLmRlc3Ryb3k9dm9pZCAwLHZvaWQgMCE9PWEmJmEoKSksZD1kLm5leHQ7d2hpbGUoZCE9PWMpfXJldHVybjtjYXNlIDE6cmV0dXJuO2Nhc2UgNTpjPWIuc3RhdGVOb2RlO2lmKG51bGwhPWMpe2Q9Yi5tZW1vaXplZFByb3BzO3ZhciBlPW51bGwhPT1hP2EubWVtb2l6ZWRQcm9wczpkO2E9Yi50eXBlO3ZhciBmPWIudXBkYXRlUXVldWU7Yi51cGRhdGVRdWV1ZT1udWxsO2lmKG51bGwhPT1mKXtjW1djXT1kOyJpbnB1dCI9PT1hJiYicmFkaW8iPT09ZC50eXBlJiZudWxsIT1kLm5hbWUmJkdmKGMsZCk7VGQoYSxlKTtiPVRkKGEsZCk7Zm9yKGU9MDtlPGYubGVuZ3RoO2UrPQ0KMil7dmFyIGc9ZltlXSxoPWZbZSsxXTsic3R5bGUiPT09Zz9OZihjLGgpOiJkYW5nZXJvdXNseVNldElubmVySFRNTCI9PT1nP0toKGMsaCk6ImNoaWxkcmVuIj09PWc/cWMoYyxoKTpFZChjLGcsaCxiKX1zd2l0Y2goYSl7Y2FzZSAiaW5wdXQiOk5kKGMsZCk7YnJlYWs7Y2FzZSAidGV4dGFyZWEiOkpmKGMsZCk7YnJlYWs7Y2FzZSAic2VsZWN0IjphPWMuX3dyYXBwZXJTdGF0ZS53YXNNdWx0aXBsZSxjLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGU9ISFkLm11bHRpcGxlLGY9ZC52YWx1ZSxudWxsIT1mP2liKGMsISFkLm11bHRpcGxlLGYsITEpOmEhPT0hIWQubXVsdGlwbGUmJihudWxsIT1kLmRlZmF1bHRWYWx1ZT9pYihjLCEhZC5tdWx0aXBsZSxkLmRlZmF1bHRWYWx1ZSwhMCk6aWIoYywhIWQubXVsdGlwbGUsZC5tdWx0aXBsZT9bXToiIiwhMSkpfX19cmV0dXJuO2Nhc2UgNjppZihudWxsPT09Yi5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IobSgxNjIpKTtiLnN0YXRlTm9kZS5ub2RlVmFsdWU9DQpiLm1lbW9pemVkUHJvcHM7cmV0dXJuO2Nhc2UgMzpjPWIuc3RhdGVOb2RlO2MuaHlkcmF0ZSYmKGMuaHlkcmF0ZT0hMSxhZyhjLmNvbnRhaW5lckluZm8pKTtyZXR1cm47Y2FzZSAxMjpyZXR1cm47Y2FzZSAxMzpudWxsIT09Yi5tZW1vaXplZFN0YXRlJiYoY2Y9UCgpLFBoKGIuY2hpbGQsITApKTtWaChiKTtyZXR1cm47Y2FzZSAxOTpWaChiKTtyZXR1cm47Y2FzZSAxNzpyZXR1cm47Y2FzZSAyMzpjYXNlIDI0OlBoKGIsbnVsbCE9PWIubWVtb2l6ZWRTdGF0ZSk7cmV0dXJufXRocm93IEVycm9yKG0oMTYzKSk7fWZ1bmN0aW9uIFZoKGEpe3ZhciBiPWEudXBkYXRlUXVldWU7aWYobnVsbCE9PWIpe2EudXBkYXRlUXVldWU9bnVsbDt2YXIgYz1hLnN0YXRlTm9kZTtudWxsPT09YyYmKGM9YS5zdGF0ZU5vZGU9bmV3IENqKTtiLmZvckVhY2goZnVuY3Rpb24oYil7dmFyIGQ9RGouYmluZChudWxsLGEsYik7Yy5oYXMoYil8fChjLmFkZChiKSxiLnRoZW4oZCxkKSl9KX19ZnVuY3Rpb24gRWooYSwNCmIpe3JldHVybiBudWxsIT09YSYmKGE9YS5tZW1vaXplZFN0YXRlLG51bGw9PT1hfHxudWxsIT09YS5kZWh5ZHJhdGVkKT8oYj1iLm1lbW9pemVkU3RhdGUsbnVsbCE9PWImJm51bGw9PT1iLmRlaHlkcmF0ZWQpOiExfWZ1bmN0aW9uIEViKCl7VmU9UCgpKzUwMH1mdW5jdGlvbiBXKCl7cmV0dXJuIDAhPT0obiY0OCk/UCgpOi0xIT09c2Q/c2Q6c2Q9UCgpfWZ1bmN0aW9uIE9hKGEpe2E9YS5tb2RlO2lmKDA9PT0oYSYyKSlyZXR1cm4gMTtpZigwPT09KGEmNCkpcmV0dXJuIDk5PT09d2IoKT8xOjI7MD09PXVhJiYodWE9RmIpO2lmKDAhPT1Gai50cmFuc2l0aW9uKXswIT09dGQmJih0ZD1udWxsIT09ZGY/ZGYucGVuZGluZ0xhbmVzOjApO2E9dWE7dmFyIGI9NDE4NjExMiZ+dGQ7YiY9LWI7MD09PWImJihhPTQxODYxMTImfmEsYj1hJi1hLDA9PT1iJiYoYj04MTkyKSk7cmV0dXJuIGJ9YT13YigpOzAhPT0obiY0KSYmOTg9PT1hP2E9TmMoMTIsdWEpOihhPUVpKGEpLGE9TmMoYSx1YSkpOw0KcmV0dXJuIGF9ZnVuY3Rpb24gUGEoYSxiLGMpe2lmKDUwPHJjKXRocm93IHJjPTAsZWY9bnVsbCxFcnJvcihtKDE4NSkpO2E9dWQoYSxiKTtpZihudWxsPT09YSlyZXR1cm4gbnVsbDtPYyhhLGIsYyk7YT09PVImJihDYnw9Yiw0PT09TCYmRGIoYSxPKSk7dmFyIGQ9d2IoKTsxPT09Yj8wIT09KG4mOCkmJjA9PT0obiY0OCk/ZmYoYSk6KGJhKGEsYyksMD09PW4mJihFYigpLGphKCkpKTooMD09PShuJjQpfHw5OCE9PWQmJjk5IT09ZHx8KG51bGw9PT12YT92YT1uZXcgU2V0KFthXSk6dmEuYWRkKGEpKSxiYShhLGMpKTtkZj1hfWZ1bmN0aW9uIHVkKGEsYil7YS5sYW5lc3w9Yjt2YXIgYz1hLmFsdGVybmF0ZTtudWxsIT09YyYmKGMubGFuZXN8PWIpO2M9YTtmb3IoYT1hLnJldHVybjtudWxsIT09YTspYS5jaGlsZExhbmVzfD1iLGM9YS5hbHRlcm5hdGUsbnVsbCE9PWMmJihjLmNoaWxkTGFuZXN8PWIpLGM9YSxhPWEucmV0dXJuO3JldHVybiAzPT09Yy50YWc/Yy5zdGF0ZU5vZGU6bnVsbH0NCmZ1bmN0aW9uIGJhKGEsYil7Zm9yKHZhciBjPWEuY2FsbGJhY2tOb2RlLGQ9YS5zdXNwZW5kZWRMYW5lcyxlPWEucGluZ2VkTGFuZXMsZj1hLmV4cGlyYXRpb25UaW1lcyxnPWEucGVuZGluZ0xhbmVzOzA8Zzspe3ZhciBoPTMxLUJhKGcpLGs9MTw8aCxsPWZbaF07aWYoLTE9PT1sKXtpZigwPT09KGsmZCl8fDAhPT0oayZlKSl7bD1iO21iKGspO3ZhciBtPXc7ZltoXT0xMDw9bT9sKzI1MDo2PD1tP2wrNUUzOi0xfX1lbHNlIGw8PWImJihhLmV4cGlyZWRMYW5lc3w9ayk7ZyY9fmt9ZD1XYihhLGE9PT1SP086MCk7Yj13O2lmKDA9PT1kKW51bGwhPT1jJiYoYyE9PWdmJiZ3ZShjKSxhLmNhbGxiYWNrTm9kZT1udWxsLGEuY2FsbGJhY2tQcmlvcml0eT0wKTtlbHNle2lmKG51bGwhPT1jKXtpZihhLmNhbGxiYWNrUHJpb3JpdHk9PT1iKXJldHVybjtjIT09Z2YmJndlKGMpfTE1PT09Yj8oYz1mZi5iaW5kKG51bGwsYSksbnVsbD09PXBhPyhwYT1bY10sWmM9dmUoWWMsWmcpKTpwYS5wdXNoKGMpLA0KYz1nZik6MTQ9PT1iP2M9YmMoOTksZmYuYmluZChudWxsLGEpKTooYz1GaShiKSxjPWJjKGMsV2guYmluZChudWxsLGEpKSk7YS5jYWxsYmFja1ByaW9yaXR5PWI7YS5jYWxsYmFja05vZGU9Y319ZnVuY3Rpb24gV2goYSl7c2Q9LTE7dGQ9dWE9MDtpZigwIT09KG4mNDgpKXRocm93IEVycm9yKG0oMzI3KSk7dmFyIGI9YS5jYWxsYmFja05vZGU7aWYoUmEoKSYmYS5jYWxsYmFja05vZGUhPT1iKXJldHVybiBudWxsO3ZhciBjPVdiKGEsYT09PVI/TzowKTtpZigwPT09YylyZXR1cm4gbnVsbDt2YXIgZD1jO3ZhciBlPW47bnw9MTY7dmFyIGY9WGgoKTtpZihSIT09YXx8TyE9PWQpRWIoKSxHYihhLGQpO2RvIHRyeXtHaigpO2JyZWFrfWNhdGNoKGgpe1loKGEsaCl9d2hpbGUoMSk7eWUoKTt2ZC5jdXJyZW50PWY7bj1lO251bGwhPT1HP2Q9MDooUj1udWxsLE89MCxkPUwpO2lmKDAhPT0oRmImQ2IpKUdiKGEsMCk7ZWxzZSBpZigwIT09ZCl7Mj09PWQmJihufD02NCxhLmh5ZHJhdGUmJihhLmh5ZHJhdGU9DQohMSxzZShhLmNvbnRhaW5lckluZm8pKSxjPWRnKGEpLDAhPT1jJiYoZD1zYyhhLGMpKSk7aWYoMT09PWQpdGhyb3cgYj13ZCxHYihhLDApLERiKGEsYyksYmEoYSxQKCkpLGI7YS5maW5pc2hlZFdvcms9YS5jdXJyZW50LmFsdGVybmF0ZTthLmZpbmlzaGVkTGFuZXM9Yztzd2l0Y2goZCl7Y2FzZSAwOmNhc2UgMTp0aHJvdyBFcnJvcihtKDM0NSkpO2Nhc2UgMjplYihhKTticmVhaztjYXNlIDM6RGIoYSxjKTtpZigoYyY2MjkxNDU2MCk9PT1jJiYoZD1jZis1MDAtUCgpLDEwPGQpKXtpZigwIT09V2IoYSwwKSlicmVhaztlPWEuc3VzcGVuZGVkTGFuZXM7aWYoKGUmYykhPT1jKXtXKCk7YS5waW5nZWRMYW5lc3w9YS5zdXNwZW5kZWRMYW5lcyZlO2JyZWFrfWEudGltZW91dEhhbmRsZT1aaChlYi5iaW5kKG51bGwsYSksZCk7YnJlYWt9ZWIoYSk7YnJlYWs7Y2FzZSA0OkRiKGEsYyk7aWYoKGMmNDE4NjExMik9PT1jKWJyZWFrO2Q9YS5ldmVudFRpbWVzO2ZvcihlPS0xOzA8Yzspe3ZhciBnPQ0KMzEtQmEoYyk7Zj0xPDxnO2c9ZFtnXTtnPmUmJihlPWcpO2MmPX5mfWM9ZTtjPVAoKS1jO2M9KDEyMD5jPzEyMDo0ODA+Yz80ODA6MTA4MD5jPzEwODA6MTkyMD5jPzE5MjA6M0UzPmM/M0UzOjQzMjA+Yz80MzIwOjE5NjAqSGooYy8xOTYwKSktYztpZigxMDxjKXthLnRpbWVvdXRIYW5kbGU9WmgoZWIuYmluZChudWxsLGEpLGMpO2JyZWFrfWViKGEpO2JyZWFrO2Nhc2UgNTplYihhKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKG0oMzI5KSk7fX1iYShhLFAoKSk7cmV0dXJuIGEuY2FsbGJhY2tOb2RlPT09Yj9XaC5iaW5kKG51bGwsYSk6bnVsbH1mdW5jdGlvbiBEYihhLGIpe2ImPX5oZjtiJj1+Q2I7YS5zdXNwZW5kZWRMYW5lc3w9YjthLnBpbmdlZExhbmVzJj1+Yjtmb3IoYT1hLmV4cGlyYXRpb25UaW1lczswPGI7KXt2YXIgYz0zMS1CYShiKSxkPTE8PGM7YVtjXT0tMTtiJj1+ZH19ZnVuY3Rpb24gZmYoYSl7aWYoMCE9PShuJjQ4KSl0aHJvdyBFcnJvcihtKDMyNykpO1JhKCk7DQppZihhPT09UiYmMCE9PShhLmV4cGlyZWRMYW5lcyZPKSl7dmFyIGI9Tzt2YXIgYz1zYyhhLGIpOzAhPT0oRmImQ2IpJiYoYj1XYihhLGIpLGM9c2MoYSxiKSl9ZWxzZSBiPVdiKGEsMCksYz1zYyhhLGIpOzAhPT1hLnRhZyYmMj09PWMmJihufD02NCxhLmh5ZHJhdGUmJihhLmh5ZHJhdGU9ITEsc2UoYS5jb250YWluZXJJbmZvKSksYj1kZyhhKSwwIT09YiYmKGM9c2MoYSxiKSkpO2lmKDE9PT1jKXRocm93IGM9d2QsR2IoYSwwKSxEYihhLGIpLGJhKGEsUCgpKSxjO2EuZmluaXNoZWRXb3JrPWEuY3VycmVudC5hbHRlcm5hdGU7YS5maW5pc2hlZExhbmVzPWI7ZWIoYSk7YmEoYSxQKCkpO3JldHVybiBudWxsfWZ1bmN0aW9uIElqKCl7aWYobnVsbCE9PXZhKXt2YXIgYT12YTt2YT1udWxsO2EuZm9yRWFjaChmdW5jdGlvbihhKXthLmV4cGlyZWRMYW5lc3w9MjQmYS5wZW5kaW5nTGFuZXM7YmEoYSxQKCkpfSl9amEoKX1mdW5jdGlvbiAkaChhLGIpe3ZhciBjPW47bnw9MTt0cnl7cmV0dXJuIGEoYil9ZmluYWxseXtuPQ0KYywwPT09biYmKEViKCksamEoKSl9fWZ1bmN0aW9uIGFpKGEsYil7dmFyIGM9bjtuJj0tMjtufD04O3RyeXtyZXR1cm4gYShiKX1maW5hbGx5e249YywwPT09biYmKEViKCksamEoKSl9fWZ1bmN0aW9uIHBkKGEsYil7QShjYix0YSk7dGF8PWI7RmJ8PWJ9ZnVuY3Rpb24gR2IoYSxiKXthLmZpbmlzaGVkV29yaz1udWxsO2EuZmluaXNoZWRMYW5lcz0wO3ZhciBjPWEudGltZW91dEhhbmRsZTstMSE9PWMmJihhLnRpbWVvdXRIYW5kbGU9LTEsSmooYykpO2lmKG51bGwhPT1HKWZvcihjPUcucmV0dXJuO251bGwhPT1jOyl7dmFyIGQ9Yztzd2l0Y2goZC50YWcpe2Nhc2UgMTpkPWQudHlwZS5jaGlsZENvbnRleHRUeXBlcztudWxsIT09ZCYmdm9pZCAwIT09ZCYmKHQoSiksdChEKSk7YnJlYWs7Y2FzZSAzOkFiKCk7dChKKTt0KEQpO0llKCk7YnJlYWs7Y2FzZSA1OkZlKGQpO2JyZWFrO2Nhc2UgNDpBYigpO2JyZWFrO2Nhc2UgMTM6dChFKTticmVhaztjYXNlIDE5OnQoRSk7YnJlYWs7Y2FzZSAxMDp6ZShkKTsNCmJyZWFrO2Nhc2UgMjM6Y2FzZSAyNDp0YT1jYi5jdXJyZW50LHQoY2IpfWM9Yy5yZXR1cm59Uj1hO0c9TWEoYS5jdXJyZW50LG51bGwpO089dGE9RmI9YjtMPTA7d2Q9bnVsbDtoZj1DYj1MYT0wfWZ1bmN0aW9uIFloKGEsYil7ZG97dmFyIGM9Rzt0cnl7eWUoKTtqYy5jdXJyZW50PWpkO2lmKGtkKXtmb3IodmFyIGQ9eS5tZW1vaXplZFN0YXRlO251bGwhPT1kOyl7dmFyIGU9ZC5xdWV1ZTtudWxsIT09ZSYmKGUucGVuZGluZz1udWxsKTtkPWQubmV4dH1rZD0hMX1pYz0wO0s9Tj15PW51bGw7a2M9ITE7amYuY3VycmVudD1udWxsO2lmKG51bGw9PT1jfHxudWxsPT09Yy5yZXR1cm4pe0w9MTt3ZD1iO0c9bnVsbDticmVha31hOnt2YXIgZj1hLGc9Yy5yZXR1cm4saD1jLGs9YjtiPU87aC5mbGFnc3w9MjA0ODtoLmZpcnN0RWZmZWN0PWgubGFzdEVmZmVjdD1udWxsO2lmKG51bGwhPT1rJiYib2JqZWN0Ij09PXR5cGVvZiBrJiYiZnVuY3Rpb24iPT09dHlwZW9mIGsudGhlbil7dmFyIGw9azsNCmlmKDA9PT0oaC5tb2RlJjIpKXt2YXIgbT1oLmFsdGVybmF0ZTttPyhoLnVwZGF0ZVF1ZXVlPW0udXBkYXRlUXVldWUsaC5tZW1vaXplZFN0YXRlPW0ubWVtb2l6ZWRTdGF0ZSxoLmxhbmVzPW0ubGFuZXMpOihoLnVwZGF0ZVF1ZXVlPW51bGwsaC5tZW1vaXplZFN0YXRlPW51bGwpfXZhciBuPTAhPT0oRS5jdXJyZW50JjEpLHI9Zztkb3t2YXIgdDtpZih0PTEzPT09ci50YWcpe3ZhciB3PXIubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09dyl0PW51bGwhPT13LmRlaHlkcmF0ZWQ/ITA6ITE7ZWxzZXt2YXIgej1yLm1lbW9pemVkUHJvcHM7dD12b2lkIDA9PT16LmZhbGxiYWNrPyExOiEwIT09ei51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjaz8hMDpuPyExOiEwfX1pZih0KXt2YXIgQz1yLnVwZGF0ZVF1ZXVlO2lmKG51bGw9PT1DKXt2YXIgeD1uZXcgU2V0O3guYWRkKGwpO3IudXBkYXRlUXVldWU9eH1lbHNlIEMuYWRkKGwpO2lmKDA9PT0oci5tb2RlJjIpKXtyLmZsYWdzfD02NDtoLmZsYWdzfD0NCjE2Mzg0O2guZmxhZ3MmPS0yOTgxO2lmKDE9PT1oLnRhZylpZihudWxsPT09aC5hbHRlcm5hdGUpaC50YWc9MTc7ZWxzZXt2YXIgcD1JYSgtMSwxKTtwLnRhZz0yO0phKGgscCl9aC5sYW5lc3w9MTticmVhayBhfWs9dm9pZCAwO2g9Yjt2YXIgcT1mLnBpbmdDYWNoZTtudWxsPT09cT8ocT1mLnBpbmdDYWNoZT1uZXcgS2osaz1uZXcgU2V0LHEuc2V0KGwsaykpOihrPXEuZ2V0KGwpLHZvaWQgMD09PWsmJihrPW5ldyBTZXQscS5zZXQobCxrKSkpO2lmKCFrLmhhcyhoKSl7ay5hZGQoaCk7dmFyIHU9TGouYmluZChudWxsLGYsbCxoKTtsLnRoZW4odSx1KX1yLmZsYWdzfD00MDk2O3IubGFuZXM9YjticmVhayBhfXI9ci5yZXR1cm59d2hpbGUobnVsbCE9PXIpO2s9RXJyb3IoKGhiKGgudHlwZSl8fCJBIFJlYWN0IGNvbXBvbmVudCIpKyIgc3VzcGVuZGVkIHdoaWxlIHJlbmRlcmluZywgYnV0IG5vIGZhbGxiYWNrIFVJIHdhcyBzcGVjaWZpZWQuXG5cbkFkZCBhIDxTdXNwZW5zZSBmYWxsYmFjaz0uLi4+IGNvbXBvbmVudCBoaWdoZXIgaW4gdGhlIHRyZWUgdG8gcHJvdmlkZSBhIGxvYWRpbmcgaW5kaWNhdG9yIG9yIHBsYWNlaG9sZGVyIHRvIGRpc3BsYXkuIil9NSE9PQ0KTCYmKEw9Mik7az1XZShrLGgpO3I9Zztkb3tzd2l0Y2goci50YWcpe2Nhc2UgMzpmPWs7ci5mbGFnc3w9NDA5NjtiJj0tYjtyLmxhbmVzfD1iO3ZhciBCPUxoKHIsZixiKTtiaChyLEIpO2JyZWFrIGE7Y2FzZSAxOmY9azt2YXIgQT1yLnR5cGUsRD1yLnN0YXRlTm9kZTtpZigwPT09KHIuZmxhZ3MmNjQpJiYoImZ1bmN0aW9uIj09PXR5cGVvZiBBLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcnx8bnVsbCE9PUQmJiJmdW5jdGlvbiI9PT10eXBlb2YgRC5jb21wb25lbnREaWRDYXRjaCYmKG51bGw9PT1uYXx8IW5hLmhhcyhEKSkpKXtyLmZsYWdzfD00MDk2O2ImPS1iO3IubGFuZXN8PWI7dmFyIEY9TWgocixmLGIpO2JoKHIsRik7YnJlYWsgYX19cj1yLnJldHVybn13aGlsZShudWxsIT09cil9YmkoYyl9Y2F0Y2gocWEpe2I9cWE7Rz09PWMmJm51bGwhPT1jJiYoRz1jPWMucmV0dXJuKTtjb250aW51ZX1icmVha313aGlsZSgxKX1mdW5jdGlvbiBYaCgpe3ZhciBhPXZkLmN1cnJlbnQ7dmQuY3VycmVudD0NCmpkO3JldHVybiBudWxsPT09YT9qZDphfWZ1bmN0aW9uIHNjKGEsYil7dmFyIGM9bjtufD0xNjt2YXIgZD1YaCgpO1I9PT1hJiZPPT09Ynx8R2IoYSxiKTtkbyB0cnl7TWooKTticmVha31jYXRjaChlKXtZaChhLGUpfXdoaWxlKDEpO3llKCk7bj1jO3ZkLmN1cnJlbnQ9ZDtpZihudWxsIT09Ryl0aHJvdyBFcnJvcihtKDI2MSkpO1I9bnVsbDtPPTA7cmV0dXJuIEx9ZnVuY3Rpb24gTWooKXtmb3IoO251bGwhPT1HOyljaShHKX1mdW5jdGlvbiBHaigpe2Zvcig7bnVsbCE9PUcmJiFOaigpOyljaShHKX1mdW5jdGlvbiBjaShhKXt2YXIgYj1PaihhLmFsdGVybmF0ZSxhLHRhKTthLm1lbW9pemVkUHJvcHM9YS5wZW5kaW5nUHJvcHM7bnVsbD09PWI/YmkoYSk6Rz1iO2pmLmN1cnJlbnQ9bnVsbH1mdW5jdGlvbiBiaShhKXt2YXIgYj1hO2Rve3ZhciBjPWIuYWx0ZXJuYXRlO2E9Yi5yZXR1cm47aWYoMD09PShiLmZsYWdzJjIwNDgpKXtjPXVqKGMsYix0YSk7aWYobnVsbCE9PWMpe0c9YztyZXR1cm59Yz0NCmI7aWYoMjQhPT1jLnRhZyYmMjMhPT1jLnRhZ3x8bnVsbD09PWMubWVtb2l6ZWRTdGF0ZXx8MCE9PSh0YSYxMDczNzQxODI0KXx8MD09PShjLm1vZGUmNCkpe2Zvcih2YXIgZD0wLGU9Yy5jaGlsZDtudWxsIT09ZTspZHw9ZS5sYW5lc3xlLmNoaWxkTGFuZXMsZT1lLnNpYmxpbmc7Yy5jaGlsZExhbmVzPWR9bnVsbCE9PWEmJjA9PT0oYS5mbGFncyYyMDQ4KSYmKG51bGw9PT1hLmZpcnN0RWZmZWN0JiYoYS5maXJzdEVmZmVjdD1iLmZpcnN0RWZmZWN0KSxudWxsIT09Yi5sYXN0RWZmZWN0JiYobnVsbCE9PWEubGFzdEVmZmVjdCYmKGEubGFzdEVmZmVjdC5uZXh0RWZmZWN0PWIuZmlyc3RFZmZlY3QpLGEubGFzdEVmZmVjdD1iLmxhc3RFZmZlY3QpLDE8Yi5mbGFncyYmKG51bGwhPT1hLmxhc3RFZmZlY3Q/YS5sYXN0RWZmZWN0Lm5leHRFZmZlY3Q9YjphLmZpcnN0RWZmZWN0PWIsYS5sYXN0RWZmZWN0PWIpKX1lbHNle2M9eWooYik7aWYobnVsbCE9PWMpe2MuZmxhZ3MmPTIwNDc7Rz1jOw0KcmV0dXJufW51bGwhPT1hJiYoYS5maXJzdEVmZmVjdD1hLmxhc3RFZmZlY3Q9bnVsbCxhLmZsYWdzfD0yMDQ4KX1iPWIuc2libGluZztpZihudWxsIT09Yil7Rz1iO3JldHVybn1HPWI9YX13aGlsZShudWxsIT09Yik7MD09PUwmJihMPTUpfWZ1bmN0aW9uIGViKGEpe3ZhciBiPXdiKCk7WmEoOTksUGouYmluZChudWxsLGEsYikpO3JldHVybiBudWxsfWZ1bmN0aW9uIFBqKGEsYil7ZG8gUmEoKTt3aGlsZShudWxsIT09dGMpO2lmKDAhPT0obiY0OCkpdGhyb3cgRXJyb3IobSgzMjcpKTt2YXIgYz1hLmZpbmlzaGVkV29yaztpZihudWxsPT09YylyZXR1cm4gbnVsbDthLmZpbmlzaGVkV29yaz1udWxsO2EuZmluaXNoZWRMYW5lcz0wO2lmKGM9PT1hLmN1cnJlbnQpdGhyb3cgRXJyb3IobSgxNzcpKTthLmNhbGxiYWNrTm9kZT1udWxsO3ZhciBkPWMubGFuZXN8Yy5jaGlsZExhbmVzLGU9ZCxmPWEucGVuZGluZ0xhbmVzJn5lO2EucGVuZGluZ0xhbmVzPWU7YS5zdXNwZW5kZWRMYW5lcz0wOw0KYS5waW5nZWRMYW5lcz0wO2EuZXhwaXJlZExhbmVzJj1lO2EubXV0YWJsZVJlYWRMYW5lcyY9ZTthLmVudGFuZ2xlZExhbmVzJj1lO2U9YS5lbnRhbmdsZW1lbnRzO2Zvcih2YXIgZz1hLmV2ZW50VGltZXMsaD1hLmV4cGlyYXRpb25UaW1lczswPGY7KXt2YXIgaz0zMS1CYShmKSx2PTE8PGs7ZVtrXT0wO2dba109LTE7aFtrXT0tMTtmJj1+dn1udWxsIT09dmEmJjA9PT0oZCYyNCkmJnZhLmhhcyhhKSYmdmEuZGVsZXRlKGEpO2E9PT1SJiYoRz1SPW51bGwsTz0wKTsxPGMuZmxhZ3M/bnVsbCE9PWMubGFzdEVmZmVjdD8oYy5sYXN0RWZmZWN0Lm5leHRFZmZlY3Q9YyxkPWMuZmlyc3RFZmZlY3QpOmQ9YzpkPWMuZmlyc3RFZmZlY3Q7aWYobnVsbCE9PWQpe2U9bjtufD0zMjtqZi5jdXJyZW50PW51bGw7a2Y9UGM7Zz13ZygpO2lmKG1lKGcpKXtpZigic2VsZWN0aW9uU3RhcnQiaW4gZyloPXtzdGFydDpnLnNlbGVjdGlvblN0YXJ0LGVuZDpnLnNlbGVjdGlvbkVuZH07ZWxzZSBhOmlmKGg9DQooaD1nLm93bmVyRG9jdW1lbnQpJiZoLmRlZmF1bHRWaWV3fHx3aW5kb3csKHY9aC5nZXRTZWxlY3Rpb24mJmguZ2V0U2VsZWN0aW9uKCkpJiYwIT09di5yYW5nZUNvdW50KXtoPXYuYW5jaG9yTm9kZTtmPXYuYW5jaG9yT2Zmc2V0O2s9di5mb2N1c05vZGU7dj12LmZvY3VzT2Zmc2V0O3RyeXtoLm5vZGVUeXBlLGsubm9kZVR5cGV9Y2F0Y2gocWEpe2g9bnVsbDticmVhayBhfXZhciB0PTAsdz0tMSxyPS0xLHo9MCxCPTAseT1nLEM9bnVsbDtiOmZvcig7Oyl7Zm9yKHZhciB4Ozspe3khPT1ofHwwIT09ZiYmMyE9PXkubm9kZVR5cGV8fCh3PXQrZik7eSE9PWt8fDAhPT12JiYzIT09eS5ub2RlVHlwZXx8KHI9dCt2KTszPT09eS5ub2RlVHlwZSYmKHQrPXkubm9kZVZhbHVlLmxlbmd0aCk7aWYobnVsbD09PSh4PXkuZmlyc3RDaGlsZCkpYnJlYWs7Qz15O3k9eH1mb3IoOzspe2lmKHk9PT1nKWJyZWFrIGI7Qz09PWgmJisrej09PWYmJih3PXQpO0M9PT1rJiYrK0I9PT12JiYocj10KTtpZihudWxsIT09DQooeD15Lm5leHRTaWJsaW5nKSlicmVhazt5PUM7Qz15LnBhcmVudE5vZGV9eT14fWg9LTE9PT13fHwtMT09PXI/bnVsbDp7c3RhcnQ6dyxlbmQ6cn19ZWxzZSBoPW51bGw7aD1ofHx7c3RhcnQ6MCxlbmQ6MH19ZWxzZSBoPW51bGw7bGY9e2ZvY3VzZWRFbGVtOmcsc2VsZWN0aW9uUmFuZ2U6aH07UGM9ITE7dWM9bnVsbDt4ZD0hMTtsPWQ7ZG8gdHJ5e1FqKCl9Y2F0Y2gocWEpe2lmKG51bGw9PT1sKXRocm93IEVycm9yKG0oMzMwKSk7UWEobCxxYSk7bD1sLm5leHRFZmZlY3R9d2hpbGUobnVsbCE9PWwpO3VjPW51bGw7bD1kO2RvIHRyeXtmb3IoZz1hO251bGwhPT1sOyl7dmFyIHA9bC5mbGFncztwJjE2JiZxYyhsLnN0YXRlTm9kZSwiIik7aWYocCYxMjgpe3ZhciBxPWwuYWx0ZXJuYXRlO2lmKG51bGwhPT1xKXt2YXIgdT1xLnJlZjtudWxsIT09dSYmKCJmdW5jdGlvbiI9PT10eXBlb2YgdT91KG51bGwpOnUuY3VycmVudD1udWxsKX19c3dpdGNoKHAmMTAzOCl7Y2FzZSAyOlVoKGwpO2wuZmxhZ3MmPQ0KLTM7YnJlYWs7Y2FzZSA2OlVoKGwpO2wuZmxhZ3MmPS0zO2JmKGwuYWx0ZXJuYXRlLGwpO2JyZWFrO2Nhc2UgMTAyNDpsLmZsYWdzJj0tMTAyNTticmVhaztjYXNlIDEwMjg6bC5mbGFncyY9LTEwMjU7YmYobC5hbHRlcm5hdGUsbCk7YnJlYWs7Y2FzZSA0OmJmKGwuYWx0ZXJuYXRlLGwpO2JyZWFrO2Nhc2UgODpoPWw7UmgoZyxoKTt2YXIgQT1oLmFsdGVybmF0ZTtTaChoKTtudWxsIT09QSYmU2goQSl9bD1sLm5leHRFZmZlY3R9fWNhdGNoKHFhKXtpZihudWxsPT09bCl0aHJvdyBFcnJvcihtKDMzMCkpO1FhKGwscWEpO2w9bC5uZXh0RWZmZWN0fXdoaWxlKG51bGwhPT1sKTt1PWxmO3E9d2coKTtwPXUuZm9jdXNlZEVsZW07Zz11LnNlbGVjdGlvblJhbmdlO2lmKHEhPT1wJiZwJiZwLm93bmVyRG9jdW1lbnQmJnZnKHAub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQscCkpe251bGwhPT1nJiZtZShwKSYmKHE9Zy5zdGFydCx1PWcuZW5kLHZvaWQgMD09PXUmJih1PXEpLCJzZWxlY3Rpb25TdGFydCJpbg0KcD8ocC5zZWxlY3Rpb25TdGFydD1xLHAuc2VsZWN0aW9uRW5kPU1hdGgubWluKHUscC52YWx1ZS5sZW5ndGgpKToodT0ocT1wLm93bmVyRG9jdW1lbnR8fGRvY3VtZW50KSYmcS5kZWZhdWx0Vmlld3x8d2luZG93LHUuZ2V0U2VsZWN0aW9uJiYodT11LmdldFNlbGVjdGlvbigpLGg9cC50ZXh0Q29udGVudC5sZW5ndGgsQT1NYXRoLm1pbihnLnN0YXJ0LGgpLGc9dm9pZCAwPT09Zy5lbmQ/QTpNYXRoLm1pbihnLmVuZCxoKSwhdS5leHRlbmQmJkE+ZyYmKGg9ZyxnPUEsQT1oKSxoPXVnKHAsQSksZj11ZyhwLGcpLGgmJmYmJigxIT09dS5yYW5nZUNvdW50fHx1LmFuY2hvck5vZGUhPT1oLm5vZGV8fHUuYW5jaG9yT2Zmc2V0IT09aC5vZmZzZXR8fHUuZm9jdXNOb2RlIT09Zi5ub2RlfHx1LmZvY3VzT2Zmc2V0IT09Zi5vZmZzZXQpJiYocT1xLmNyZWF0ZVJhbmdlKCkscS5zZXRTdGFydChoLm5vZGUsaC5vZmZzZXQpLHUucmVtb3ZlQWxsUmFuZ2VzKCksQT5nPyh1LmFkZFJhbmdlKHEpLHUuZXh0ZW5kKGYubm9kZSwNCmYub2Zmc2V0KSk6KHEuc2V0RW5kKGYubm9kZSxmLm9mZnNldCksdS5hZGRSYW5nZShxKSkpKSkpO3E9W107Zm9yKHU9cDt1PXUucGFyZW50Tm9kZTspMT09PXUubm9kZVR5cGUmJnEucHVzaCh7ZWxlbWVudDp1LGxlZnQ6dS5zY3JvbGxMZWZ0LHRvcDp1LnNjcm9sbFRvcH0pOyJmdW5jdGlvbiI9PT10eXBlb2YgcC5mb2N1cyYmcC5mb2N1cygpO2ZvcihwPTA7cDxxLmxlbmd0aDtwKyspdT1xW3BdLHUuZWxlbWVudC5zY3JvbGxMZWZ0PXUubGVmdCx1LmVsZW1lbnQuc2Nyb2xsVG9wPXUudG9wfVBjPSEha2Y7bGY9a2Y9bnVsbDthLmN1cnJlbnQ9YztsPWQ7ZG8gdHJ5e2ZvcihwPWE7bnVsbCE9PWw7KXt2YXIgRD1sLmZsYWdzO0QmMzYmJkFqKHAsbC5hbHRlcm5hdGUsbCk7aWYoRCYxMjgpe3E9dm9pZCAwO3ZhciBFPWwucmVmO2lmKG51bGwhPT1FKXt2YXIgRj1sLnN0YXRlTm9kZTtzd2l0Y2gobC50YWcpe2Nhc2UgNTpxPUY7YnJlYWs7ZGVmYXVsdDpxPUZ9ImZ1bmN0aW9uIj09PXR5cGVvZiBFPw0KRShxKTpFLmN1cnJlbnQ9cX19bD1sLm5leHRFZmZlY3R9fWNhdGNoKHFhKXtpZihudWxsPT09bCl0aHJvdyBFcnJvcihtKDMzMCkpO1FhKGwscWEpO2w9bC5uZXh0RWZmZWN0fXdoaWxlKG51bGwhPT1sKTtsPW51bGw7UmooKTtuPWV9ZWxzZSBhLmN1cnJlbnQ9YztpZihTYSlTYT0hMSx0Yz1hLHZjPWI7ZWxzZSBmb3IobD1kO251bGwhPT1sOyliPWwubmV4dEVmZmVjdCxsLm5leHRFZmZlY3Q9bnVsbCxsLmZsYWdzJjgmJihEPWwsRC5zaWJsaW5nPW51bGwsRC5zdGF0ZU5vZGU9bnVsbCksbD1iO2Q9YS5wZW5kaW5nTGFuZXM7MD09PWQmJihuYT1udWxsKTsxPT09ZD9hPT09ZWY/cmMrKzoocmM9MCxlZj1hKTpyYz0wO2M9Yy5zdGF0ZU5vZGU7aWYoZGImJiJmdW5jdGlvbiI9PT10eXBlb2YgZGIub25Db21taXRGaWJlclJvb3QpdHJ5e2RiLm9uQ29tbWl0RmliZXJSb290KFplLGMsdm9pZCAwLDY0PT09KGMuY3VycmVudC5mbGFncyY2NCkpfWNhdGNoKHFhKXt9YmEoYSxQKCkpO2lmKHJkKXRocm93IHJkPQ0KITEsYT1ZZSxZZT1udWxsLGE7aWYoMCE9PShuJjgpKXJldHVybiBudWxsO2phKCk7cmV0dXJuIG51bGx9ZnVuY3Rpb24gUWooKXtmb3IoO251bGwhPT1sOyl7dmFyIGE9bC5hbHRlcm5hdGU7eGR8fG51bGw9PT11Y3x8KDAhPT0obC5mbGFncyY4KT9WZihsLHVjKSYmKHhkPSEwKToxMz09PWwudGFnJiZFaihhLGwpJiZWZihsLHVjKSYmKHhkPSEwKSk7dmFyIGI9bC5mbGFnczswIT09KGImMjU2KSYmemooYSxsKTswPT09KGImNTEyKXx8U2F8fChTYT0hMCxiYyg5NyxmdW5jdGlvbigpe1JhKCk7cmV0dXJuIG51bGx9KSk7bD1sLm5leHRFZmZlY3R9fWZ1bmN0aW9uIFJhKCl7aWYoOTAhPT12Yyl7dmFyIGE9OTc8dmM/OTc6dmM7dmM9OTA7cmV0dXJuIFphKGEsU2opfXJldHVybiExfWZ1bmN0aW9uIEJqKGEsYil7bWYucHVzaChiLGEpO1NhfHwoU2E9ITAsYmMoOTcsZnVuY3Rpb24oKXtSYSgpO3JldHVybiBudWxsfSkpfWZ1bmN0aW9uIE9oKGEsYil7bmYucHVzaChiLGEpO1NhfHwoU2E9DQohMCxiYyg5NyxmdW5jdGlvbigpe1JhKCk7cmV0dXJuIG51bGx9KSl9ZnVuY3Rpb24gU2ooKXtpZihudWxsPT09dGMpcmV0dXJuITE7dmFyIGE9dGM7dGM9bnVsbDtpZigwIT09KG4mNDgpKXRocm93IEVycm9yKG0oMzMxKSk7dmFyIGI9bjtufD0zMjt2YXIgYz1uZjtuZj1bXTtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrPTIpe3ZhciBlPWNbZF0sZj1jW2QrMV0sZz1lLmRlc3Ryb3k7ZS5kZXN0cm95PXZvaWQgMDtpZigiZnVuY3Rpb24iPT09dHlwZW9mIGcpdHJ5e2coKX1jYXRjaChrKXtpZihudWxsPT09Zil0aHJvdyBFcnJvcihtKDMzMCkpO1FhKGYsayl9fWM9bWY7bWY9W107Zm9yKGQ9MDtkPGMubGVuZ3RoO2QrPTIpe2U9Y1tkXTtmPWNbZCsxXTt0cnl7dmFyIGg9ZS5jcmVhdGU7ZS5kZXN0cm95PWgoKX1jYXRjaChrKXtpZihudWxsPT09Zil0aHJvdyBFcnJvcihtKDMzMCkpO1FhKGYsayl9fWZvcihoPWEuY3VycmVudC5maXJzdEVmZmVjdDtudWxsIT09aDspYT1oLm5leHRFZmZlY3QsDQpoLm5leHRFZmZlY3Q9bnVsbCxoLmZsYWdzJjgmJihoLnNpYmxpbmc9bnVsbCxoLnN0YXRlTm9kZT1udWxsKSxoPWE7bj1iO2phKCk7cmV0dXJuITB9ZnVuY3Rpb24gZGkoYSxiLGMpe2I9V2UoYyxiKTtiPUxoKGEsYiwxKTtKYShhLGIpO2I9VygpO2E9dWQoYSwxKTtudWxsIT09YSYmKE9jKGEsMSxiKSxiYShhLGIpKX1mdW5jdGlvbiBRYShhLGIpe2lmKDM9PT1hLnRhZylkaShhLGEsYik7ZWxzZSBmb3IodmFyIGM9YS5yZXR1cm47bnVsbCE9PWM7KXtpZigzPT09Yy50YWcpe2RpKGMsYSxiKTticmVha31lbHNlIGlmKDE9PT1jLnRhZyl7dmFyIGQ9Yy5zdGF0ZU5vZGU7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBjLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yfHwiZnVuY3Rpb24iPT09dHlwZW9mIGQuY29tcG9uZW50RGlkQ2F0Y2gmJihudWxsPT09bmF8fCFuYS5oYXMoZCkpKXthPVdlKGIsYSk7dmFyIGU9TWgoYyxhLDEpO0phKGMsZSk7ZT1XKCk7Yz11ZChjLDEpO2lmKG51bGwhPT0NCmMpT2MoYywxLGUpLGJhKGMsZSk7ZWxzZSBpZigiZnVuY3Rpb24iPT09dHlwZW9mIGQuY29tcG9uZW50RGlkQ2F0Y2gmJihudWxsPT09bmF8fCFuYS5oYXMoZCkpKXRyeXtkLmNvbXBvbmVudERpZENhdGNoKGIsYSl9Y2F0Y2goZil7fWJyZWFrfX1jPWMucmV0dXJufX1mdW5jdGlvbiBMaihhLGIsYyl7dmFyIGQ9YS5waW5nQ2FjaGU7bnVsbCE9PWQmJmQuZGVsZXRlKGIpO2I9VygpO2EucGluZ2VkTGFuZXN8PWEuc3VzcGVuZGVkTGFuZXMmYztSPT09YSYmKE8mYyk9PT1jJiYoND09PUx8fDM9PT1MJiYoTyY2MjkxNDU2MCk9PT1PJiY1MDA+UCgpLWNmP0diKGEsMCk6aGZ8PWMpO2JhKGEsYil9ZnVuY3Rpb24gRGooYSxiKXt2YXIgYz1hLnN0YXRlTm9kZTtudWxsIT09YyYmYy5kZWxldGUoYik7Yj0wOzA9PT1iJiYoYj1hLm1vZGUsMD09PShiJjIpP2I9MTowPT09KGImNCk/Yj05OT09PXdiKCk/MToyOigwPT09dWEmJih1YT1GYiksYj1uYig2MjkxNDU2MCZ+dWEpLDA9PT1iJiYoYj00MTk0MzA0KSkpOw0KYz1XKCk7YT11ZChhLGIpO251bGwhPT1hJiYoT2MoYSxiLGMpLGJhKGEsYykpfWZ1bmN0aW9uIFRqKGEsYixjLGQpe3RoaXMudGFnPWE7dGhpcy5rZXk9Yzt0aGlzLnNpYmxpbmc9dGhpcy5jaGlsZD10aGlzLnJldHVybj10aGlzLnN0YXRlTm9kZT10aGlzLnR5cGU9dGhpcy5lbGVtZW50VHlwZT1udWxsO3RoaXMuaW5kZXg9MDt0aGlzLnJlZj1udWxsO3RoaXMucGVuZGluZ1Byb3BzPWI7dGhpcy5kZXBlbmRlbmNpZXM9dGhpcy5tZW1vaXplZFN0YXRlPXRoaXMudXBkYXRlUXVldWU9dGhpcy5tZW1vaXplZFByb3BzPW51bGw7dGhpcy5tb2RlPWQ7dGhpcy5mbGFncz0wO3RoaXMubGFzdEVmZmVjdD10aGlzLmZpcnN0RWZmZWN0PXRoaXMubmV4dEVmZmVjdD1udWxsO3RoaXMuY2hpbGRMYW5lcz10aGlzLmxhbmVzPTA7dGhpcy5hbHRlcm5hdGU9bnVsbH1mdW5jdGlvbiBQZShhKXthPWEucHJvdG90eXBlO3JldHVybiEoIWF8fCFhLmlzUmVhY3RDb21wb25lbnQpfWZ1bmN0aW9uIFVqKGEpe2lmKCJmdW5jdGlvbiI9PT0NCnR5cGVvZiBhKXJldHVybiBQZShhKT8xOjA7aWYodm9pZCAwIT09YSYmbnVsbCE9PWEpe2E9YS4kJHR5cGVvZjtpZihhPT09RGMpcmV0dXJuIDExO2lmKGE9PT1FYylyZXR1cm4gMTR9cmV0dXJuIDJ9ZnVuY3Rpb24gTWEoYSxiKXt2YXIgYz1hLmFsdGVybmF0ZTtudWxsPT09Yz8oYz1aKGEudGFnLGIsYS5rZXksYS5tb2RlKSxjLmVsZW1lbnRUeXBlPWEuZWxlbWVudFR5cGUsYy50eXBlPWEudHlwZSxjLnN0YXRlTm9kZT1hLnN0YXRlTm9kZSxjLmFsdGVybmF0ZT1hLGEuYWx0ZXJuYXRlPWMpOihjLnBlbmRpbmdQcm9wcz1iLGMudHlwZT1hLnR5cGUsYy5mbGFncz0wLGMubmV4dEVmZmVjdD1udWxsLGMuZmlyc3RFZmZlY3Q9bnVsbCxjLmxhc3RFZmZlY3Q9bnVsbCk7Yy5jaGlsZExhbmVzPWEuY2hpbGRMYW5lcztjLmxhbmVzPWEubGFuZXM7Yy5jaGlsZD1hLmNoaWxkO2MubWVtb2l6ZWRQcm9wcz1hLm1lbW9pemVkUHJvcHM7Yy5tZW1vaXplZFN0YXRlPWEubWVtb2l6ZWRTdGF0ZTtjLnVwZGF0ZVF1ZXVlPQ0KYS51cGRhdGVRdWV1ZTtiPWEuZGVwZW5kZW5jaWVzO2MuZGVwZW5kZW5jaWVzPW51bGw9PT1iP251bGw6e2xhbmVzOmIubGFuZXMsZmlyc3RDb250ZXh0OmIuZmlyc3RDb250ZXh0fTtjLnNpYmxpbmc9YS5zaWJsaW5nO2MuaW5kZXg9YS5pbmRleDtjLnJlZj1hLnJlZjtyZXR1cm4gY31mdW5jdGlvbiBmZChhLGIsYyxkLGUsZil7dmFyIGc9MjtkPWE7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBhKVBlKGEpJiYoZz0xKTtlbHNlIGlmKCJzdHJpbmciPT09dHlwZW9mIGEpZz01O2Vsc2UgYTpzd2l0Y2goYSl7Y2FzZSB3YTpyZXR1cm4gemIoYy5jaGlsZHJlbixlLGYsYik7Y2FzZSBlaTpnPTg7ZXw9MTY7YnJlYWs7Y2FzZSBIZDpnPTg7ZXw9MTticmVhaztjYXNlIExiOnJldHVybiBhPVooMTIsYyxiLGV8OCksYS5lbGVtZW50VHlwZT1MYixhLnR5cGU9TGIsYS5sYW5lcz1mLGE7Y2FzZSBNYjpyZXR1cm4gYT1aKDEzLGMsYixlKSxhLnR5cGU9TWIsYS5lbGVtZW50VHlwZT1NYixhLmxhbmVzPQ0KZixhO2Nhc2UgQ2M6cmV0dXJuIGE9WigxOSxjLGIsZSksYS5lbGVtZW50VHlwZT1DYyxhLmxhbmVzPWYsYTtjYXNlIG9mOnJldHVybiBUZShjLGUsZixiKTtjYXNlIHBmOnJldHVybiBhPVooMjQsYyxiLGUpLGEuZWxlbWVudFR5cGU9cGYsYS5sYW5lcz1mLGE7ZGVmYXVsdDppZigib2JqZWN0Ij09PXR5cGVvZiBhJiZudWxsIT09YSlzd2l0Y2goYS4kJHR5cGVvZil7Y2FzZSBKZDpnPTEwO2JyZWFrIGE7Y2FzZSBJZDpnPTk7YnJlYWsgYTtjYXNlIERjOmc9MTE7YnJlYWsgYTtjYXNlIEVjOmc9MTQ7YnJlYWsgYTtjYXNlIExkOmc9MTY7ZD1udWxsO2JyZWFrIGE7Y2FzZSBLZDpnPTIyO2JyZWFrIGF9dGhyb3cgRXJyb3IobSgxMzAsbnVsbD09YT9hOnR5cGVvZiBhLCIiKSk7fWI9WihnLGMsYixlKTtiLmVsZW1lbnRUeXBlPWE7Yi50eXBlPWQ7Yi5sYW5lcz1mO3JldHVybiBifWZ1bmN0aW9uIHpiKGEsYixjLGQpe2E9Wig3LGEsZCxiKTthLmxhbmVzPWM7cmV0dXJuIGF9ZnVuY3Rpb24gVGUoYSwNCmIsYyxkKXthPVooMjMsYSxkLGIpO2EuZWxlbWVudFR5cGU9b2Y7YS5sYW5lcz1jO3JldHVybiBhfWZ1bmN0aW9uIENlKGEsYixjKXthPVooNixhLG51bGwsYik7YS5sYW5lcz1jO3JldHVybiBhfWZ1bmN0aW9uIERlKGEsYixjKXtiPVooNCxudWxsIT09YS5jaGlsZHJlbj9hLmNoaWxkcmVuOltdLGEua2V5LGIpO2IubGFuZXM9YztiLnN0YXRlTm9kZT17Y29udGFpbmVySW5mbzphLmNvbnRhaW5lckluZm8scGVuZGluZ0NoaWxkcmVuOm51bGwsaW1wbGVtZW50YXRpb246YS5pbXBsZW1lbnRhdGlvbn07cmV0dXJuIGJ9ZnVuY3Rpb24gVmooYSxiLGMpe3RoaXMudGFnPWI7dGhpcy5jb250YWluZXJJbmZvPWE7dGhpcy5maW5pc2hlZFdvcms9dGhpcy5waW5nQ2FjaGU9dGhpcy5jdXJyZW50PXRoaXMucGVuZGluZ0NoaWxkcmVuPW51bGw7dGhpcy50aW1lb3V0SGFuZGxlPS0xO3RoaXMucGVuZGluZ0NvbnRleHQ9dGhpcy5jb250ZXh0PW51bGw7dGhpcy5oeWRyYXRlPWM7dGhpcy5jYWxsYmFja05vZGU9DQpudWxsO3RoaXMuY2FsbGJhY2tQcmlvcml0eT0wO3RoaXMuZXZlbnRUaW1lcz1BcnJheSgzMSkuZmlsbCgwKTt0aGlzLmV4cGlyYXRpb25UaW1lcz1BcnJheSgzMSkuZmlsbCgtMSk7dGhpcy5lbnRhbmdsZWRMYW5lcz10aGlzLmZpbmlzaGVkTGFuZXM9dGhpcy5tdXRhYmxlUmVhZExhbmVzPXRoaXMuZXhwaXJlZExhbmVzPXRoaXMucGluZ2VkTGFuZXM9dGhpcy5zdXNwZW5kZWRMYW5lcz10aGlzLnBlbmRpbmdMYW5lcz0wO3RoaXMuZW50YW5nbGVtZW50cz1BcnJheSgzMSkuZmlsbCgwKTt0aGlzLm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE9bnVsbH1mdW5jdGlvbiBXaihhLGIsYyl7dmFyIGQ9Mzxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOm51bGw7cmV0dXJueyQkdHlwZW9mOlVhLGtleTpudWxsPT1kP251bGw6IiIrZCxjaGlsZHJlbjphLGNvbnRhaW5lckluZm86YixpbXBsZW1lbnRhdGlvbjpjfX1mdW5jdGlvbiB5ZChhLA0KYixjLGQpe3ZhciBlPWIuY3VycmVudCxmPVcoKSxnPU9hKGUpO2E6aWYoYyl7Yz1jLl9yZWFjdEludGVybmFscztiOntpZihWYShjKSE9PWN8fDEhPT1jLnRhZyl0aHJvdyBFcnJvcihtKDE3MCkpO3ZhciBoPWM7ZG97c3dpdGNoKGgudGFnKXtjYXNlIDM6aD1oLnN0YXRlTm9kZS5jb250ZXh0O2JyZWFrIGI7Y2FzZSAxOmlmKFMoaC50eXBlKSl7aD1oLnN0YXRlTm9kZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dDticmVhayBifX1oPWgucmV0dXJufXdoaWxlKG51bGwhPT1oKTt0aHJvdyBFcnJvcihtKDE3MSkpO31pZigxPT09Yy50YWcpe3ZhciBrPWMudHlwZTtpZihTKGspKXtjPVNnKGMsayxoKTticmVhayBhfX1jPWh9ZWxzZSBjPUhhO251bGw9PT1iLmNvbnRleHQ/Yi5jb250ZXh0PWM6Yi5wZW5kaW5nQ29udGV4dD1jO2I9SWEoZixnKTtiLnBheWxvYWQ9e2VsZW1lbnQ6YX07ZD12b2lkIDA9PT1kP251bGw6ZDtudWxsIT09ZCYmKGIuY2FsbGJhY2s9DQpkKTtKYShlLGIpO1BhKGUsZyxmKTtyZXR1cm4gZ31mdW5jdGlvbiBxZihhKXthPWEuY3VycmVudDtpZighYS5jaGlsZClyZXR1cm4gbnVsbDtzd2l0Y2goYS5jaGlsZC50YWcpe2Nhc2UgNTpyZXR1cm4gYS5jaGlsZC5zdGF0ZU5vZGU7ZGVmYXVsdDpyZXR1cm4gYS5jaGlsZC5zdGF0ZU5vZGV9fWZ1bmN0aW9uIGZpKGEsYil7YT1hLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PWEmJm51bGwhPT1hLmRlaHlkcmF0ZWQpe3ZhciBjPWEucmV0cnlMYW5lO2EucmV0cnlMYW5lPTAhPT1jJiZjPGI/YzpifX1mdW5jdGlvbiByZihhLGIpe2ZpKGEsYik7KGE9YS5hbHRlcm5hdGUpJiZmaShhLGIpfWZ1bmN0aW9uIFhqKGEpe2E9VWYoYSk7cmV0dXJuIG51bGw9PT1hP251bGw6YS5zdGF0ZU5vZGV9ZnVuY3Rpb24gWWooYSl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gc2YoYSxiLGMpe3ZhciBkPW51bGwhPWMmJm51bGwhPWMuaHlkcmF0aW9uT3B0aW9ucyYmYy5oeWRyYXRpb25PcHRpb25zLm11dGFibGVTb3VyY2VzfHwNCm51bGw7Yz1uZXcgVmooYSxiLG51bGwhPWMmJiEwPT09Yy5oeWRyYXRlKTtiPVooMyxudWxsLG51bGwsMj09PWI/NzoxPT09Yj8zOjApO2MuY3VycmVudD1iO2Iuc3RhdGVOb2RlPWM7QWUoYik7YVtyYl09Yy5jdXJyZW50O0JnKDg9PT1hLm5vZGVUeXBlP2EucGFyZW50Tm9kZTphKTtpZihkKWZvcihhPTA7YTxkLmxlbmd0aDthKyspe2I9ZFthXTt2YXIgZT1iLl9nZXRWZXJzaW9uO2U9ZShiLl9zb3VyY2UpO251bGw9PWMubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YT9jLm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE9W2IsZV06Yy5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhLnB1c2goYixlKX10aGlzLl9pbnRlcm5hbFJvb3Q9Y31mdW5jdGlvbiB3YyhhKXtyZXR1cm4hKCFhfHwxIT09YS5ub2RlVHlwZSYmOSE9PWEubm9kZVR5cGUmJjExIT09YS5ub2RlVHlwZSYmKDghPT1hLm5vZGVUeXBlfHwiIHJlYWN0LW1vdW50LXBvaW50LXVuc3RhYmxlICIhPT0NCmEubm9kZVZhbHVlKSl9ZnVuY3Rpb24gWmooYSxiKXtifHwoYj1hPzk9PT1hLm5vZGVUeXBlP2EuZG9jdW1lbnRFbGVtZW50OmEuZmlyc3RDaGlsZDpudWxsLGI9ISghYnx8MSE9PWIubm9kZVR5cGV8fCFiLmhhc0F0dHJpYnV0ZSgiZGF0YS1yZWFjdHJvb3QiKSkpO2lmKCFiKWZvcih2YXIgYztjPWEubGFzdENoaWxkOylhLnJlbW92ZUNoaWxkKGMpO3JldHVybiBuZXcgc2YoYSwwLGI/e2h5ZHJhdGU6ITB9OnZvaWQgMCl9ZnVuY3Rpb24gemQoYSxiLGMsZCxlKXt2YXIgZj1jLl9yZWFjdFJvb3RDb250YWluZXI7aWYoZil7dmFyIGc9Zi5faW50ZXJuYWxSb290O2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgZSl7dmFyIGg9ZTtlPWZ1bmN0aW9uKCl7dmFyIGE9cWYoZyk7aC5jYWxsKGEpfX15ZChiLGcsYSxlKX1lbHNle2Y9Yy5fcmVhY3RSb290Q29udGFpbmVyPVpqKGMsZCk7Zz1mLl9pbnRlcm5hbFJvb3Q7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBlKXt2YXIgaz1lO2U9ZnVuY3Rpb24oKXt2YXIgYT0NCnFmKGcpO2suY2FsbChhKX19YWkoZnVuY3Rpb24oKXt5ZChiLGcsYSxlKX0pfXJldHVybiBxZihnKX1mdW5jdGlvbiBnaShhLGIpe3ZhciBjPTI8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsO2lmKCF3YyhiKSl0aHJvdyBFcnJvcihtKDIwMCkpO3JldHVybiBXaihhLGIsbnVsbCxjKX1pZighaGEpdGhyb3cgRXJyb3IobSgyMjcpKTt2YXIgeWY9bmV3IFNldCxJYj17fSxvYT0hKCJ1bmRlZmluZWQiPT09dHlwZW9mIHdpbmRvd3x8InVuZGVmaW5lZCI9PT10eXBlb2Ygd2luZG93LmRvY3VtZW50fHwidW5kZWZpbmVkIj09PXR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCksbGk9L15bOkEtWl9hLXpcdTAwQzAtXHUwMEQ2XHUwMEQ4LVx1MDBGNlx1MDBGOC1cdTAyRkZcdTAzNzAtXHUwMzdEXHUwMzdGLVx1MUZGRlx1MjAwQy1cdTIwMERcdTIwNzAtXHUyMThGXHUyQzAwLVx1MkZFRlx1MzAwMS1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZGRF1bOkEtWl9hLXpcdTAwQzAtXHUwMEQ2XHUwMEQ4LVx1MDBGNlx1MDBGOC1cdTAyRkZcdTAzNzAtXHUwMzdEXHUwMzdGLVx1MUZGRlx1MjAwQy1cdTIwMERcdTIwNzAtXHUyMThGXHUyQzAwLVx1MkZFRlx1MzAwMS1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZGRFwtLjAtOVx1MDBCN1x1MDMwMC1cdTAzNkZcdTIwM0YtXHUyMDQwXSokLywNCnpmPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksQmY9e30sQWY9e30sST17fTsiY2hpbGRyZW4gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgZGVmYXVsdFZhbHVlIGRlZmF1bHRDaGVja2VkIGlubmVySFRNTCBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcgc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIHN0eWxlIi5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oYSl7SVthXT1uZXcgUShhLDAsITEsYSxudWxsLCExLCExKX0pO1tbImFjY2VwdENoYXJzZXQiLCJhY2NlcHQtY2hhcnNldCJdLFsiY2xhc3NOYW1lIiwiY2xhc3MiXSxbImh0bWxGb3IiLCJmb3IiXSxbImh0dHBFcXVpdiIsImh0dHAtZXF1aXYiXV0uZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYj1hWzBdO0lbYl09bmV3IFEoYiwxLCExLGFbMV0sbnVsbCwhMSwhMSl9KTtbImNvbnRlbnRFZGl0YWJsZSIsImRyYWdnYWJsZSIsInNwZWxsQ2hlY2siLCJ2YWx1ZSJdLmZvckVhY2goZnVuY3Rpb24oYSl7SVthXT0NCm5ldyBRKGEsMiwhMSxhLnRvTG93ZXJDYXNlKCksbnVsbCwhMSwhMSl9KTtbImF1dG9SZXZlcnNlIiwiZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCIsImZvY3VzYWJsZSIsInByZXNlcnZlQWxwaGEiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0lbYV09bmV3IFEoYSwyLCExLGEsbnVsbCwhMSwhMSl9KTsiYWxsb3dGdWxsU2NyZWVuIGFzeW5jIGF1dG9Gb2N1cyBhdXRvUGxheSBjb250cm9scyBkZWZhdWx0IGRlZmVyIGRpc2FibGVkIGRpc2FibGVQaWN0dXJlSW5QaWN0dXJlIGRpc2FibGVSZW1vdGVQbGF5YmFjayBmb3JtTm9WYWxpZGF0ZSBoaWRkZW4gbG9vcCBub01vZHVsZSBub1ZhbGlkYXRlIG9wZW4gcGxheXNJbmxpbmUgcmVhZE9ubHkgcmVxdWlyZWQgcmV2ZXJzZWQgc2NvcGVkIHNlYW1sZXNzIGl0ZW1TY29wZSIuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0lbYV09bmV3IFEoYSwzLCExLGEudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO1siY2hlY2tlZCIsIm11bHRpcGxlIiwNCiJtdXRlZCIsInNlbGVjdGVkIl0uZm9yRWFjaChmdW5jdGlvbihhKXtJW2FdPW5ldyBRKGEsMywhMCxhLG51bGwsITEsITEpfSk7WyJjYXB0dXJlIiwiZG93bmxvYWQiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0lbYV09bmV3IFEoYSw0LCExLGEsbnVsbCwhMSwhMSl9KTtbImNvbHMiLCJyb3dzIiwic2l6ZSIsInNwYW4iXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0lbYV09bmV3IFEoYSw2LCExLGEsbnVsbCwhMSwhMSl9KTtbInJvd1NwYW4iLCJzdGFydCJdLmZvckVhY2goZnVuY3Rpb24oYSl7SVthXT1uZXcgUShhLDUsITEsYS50b0xvd2VyQ2FzZSgpLG51bGwsITEsITEpfSk7dmFyIHRmPS9bXC06XShbYS16XSkvZyx1Zj1mdW5jdGlvbihhKXtyZXR1cm4gYVsxXS50b1VwcGVyQ2FzZSgpfTsiYWNjZW50LWhlaWdodCBhbGlnbm1lbnQtYmFzZWxpbmUgYXJhYmljLWZvcm0gYmFzZWxpbmUtc2hpZnQgY2FwLWhlaWdodCBjbGlwLXBhdGggY2xpcC1ydWxlIGNvbG9yLWludGVycG9sYXRpb24gY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIGNvbG9yLXByb2ZpbGUgY29sb3ItcmVuZGVyaW5nIGRvbWluYW50LWJhc2VsaW5lIGVuYWJsZS1iYWNrZ3JvdW5kIGZpbGwtb3BhY2l0eSBmaWxsLXJ1bGUgZmxvb2QtY29sb3IgZmxvb2Qtb3BhY2l0eSBmb250LWZhbWlseSBmb250LXNpemUgZm9udC1zaXplLWFkanVzdCBmb250LXN0cmV0Y2ggZm9udC1zdHlsZSBmb250LXZhcmlhbnQgZm9udC13ZWlnaHQgZ2x5cGgtbmFtZSBnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIGdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsIGhvcml6LWFkdi14IGhvcml6LW9yaWdpbi14IGltYWdlLXJlbmRlcmluZyBsZXR0ZXItc3BhY2luZyBsaWdodGluZy1jb2xvciBtYXJrZXItZW5kIG1hcmtlci1taWQgbWFya2VyLXN0YXJ0IG92ZXJsaW5lLXBvc2l0aW9uIG92ZXJsaW5lLXRoaWNrbmVzcyBwYWludC1vcmRlciBwYW5vc2UtMSBwb2ludGVyLWV2ZW50cyByZW5kZXJpbmctaW50ZW50IHNoYXBlLXJlbmRlcmluZyBzdG9wLWNvbG9yIHN0b3Atb3BhY2l0eSBzdHJpa2V0aHJvdWdoLXBvc2l0aW9uIHN0cmlrZXRocm91Z2gtdGhpY2tuZXNzIHN0cm9rZS1kYXNoYXJyYXkgc3Ryb2tlLWRhc2hvZmZzZXQgc3Ryb2tlLWxpbmVjYXAgc3Ryb2tlLWxpbmVqb2luIHN0cm9rZS1taXRlcmxpbWl0IHN0cm9rZS1vcGFjaXR5IHN0cm9rZS13aWR0aCB0ZXh0LWFuY2hvciB0ZXh0LWRlY29yYXRpb24gdGV4dC1yZW5kZXJpbmcgdW5kZXJsaW5lLXBvc2l0aW9uIHVuZGVybGluZS10aGlja25lc3MgdW5pY29kZS1iaWRpIHVuaWNvZGUtcmFuZ2UgdW5pdHMtcGVyLWVtIHYtYWxwaGFiZXRpYyB2LWhhbmdpbmcgdi1pZGVvZ3JhcGhpYyB2LW1hdGhlbWF0aWNhbCB2ZWN0b3ItZWZmZWN0IHZlcnQtYWR2LXkgdmVydC1vcmlnaW4teCB2ZXJ0LW9yaWdpbi15IHdvcmQtc3BhY2luZyB3cml0aW5nLW1vZGUgeG1sbnM6eGxpbmsgeC1oZWlnaHQiLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYj0NCmEucmVwbGFjZSh0Zix1Zik7SVtiXT1uZXcgUShiLDEsITEsYSxudWxsLCExLCExKX0pOyJ4bGluazphY3R1YXRlIHhsaW5rOmFyY3JvbGUgeGxpbms6cm9sZSB4bGluazpzaG93IHhsaW5rOnRpdGxlIHhsaW5rOnR5cGUiLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2UodGYsdWYpO0lbYl09bmV3IFEoYiwxLCExLGEsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCExLCExKX0pO1sieG1sOmJhc2UiLCJ4bWw6bGFuZyIsInhtbDpzcGFjZSJdLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI9YS5yZXBsYWNlKHRmLHVmKTtJW2JdPW5ldyBRKGIsMSwhMSxhLCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCExLCExKX0pO1sidGFiSW5kZXgiLCJjcm9zc09yaWdpbiJdLmZvckVhY2goZnVuY3Rpb24oYSl7SVthXT1uZXcgUShhLDEsITEsYS50b0xvd2VyQ2FzZSgpLG51bGwsITEsITEpfSk7SS54bGlua0hyZWY9bmV3IFEoInhsaW5rSHJlZiIsDQoxLCExLCJ4bGluazpocmVmIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsITAsITEpO1sic3JjIiwiaHJlZiIsImFjdGlvbiIsImZvcm1BY3Rpb24iXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0lbYV09bmV3IFEoYSwxLCExLGEudG9Mb3dlckNhc2UoKSxudWxsLCEwLCEwKX0pO3ZhciBCPWhhLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELmFzc2lnbixmYj1oYS5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCxlYz02MDEwMyxVYT02MDEwNix3YT02MDEwNyxIZD02MDEwOCxMYj02MDExNCxKZD02MDEwOSxJZD02MDExMCxEYz02MDExMixNYj02MDExMyxDYz02MDEyMCxFYz02MDExNSxMZD02MDExNixLZD02MDEyMSx0ZT02MDEyOCxlaT02MDEyOSxvZj02MDEzMCxwZj02MDEzMTtpZigiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvcil7dmFyIEg9U3ltYm9sLmZvcjtlYz0NCkgoInJlYWN0LmVsZW1lbnQiKTtVYT1IKCJyZWFjdC5wb3J0YWwiKTt3YT1IKCJyZWFjdC5mcmFnbWVudCIpO0hkPUgoInJlYWN0LnN0cmljdF9tb2RlIik7TGI9SCgicmVhY3QucHJvZmlsZXIiKTtKZD1IKCJyZWFjdC5wcm92aWRlciIpO0lkPUgoInJlYWN0LmNvbnRleHQiKTtEYz1IKCJyZWFjdC5mb3J3YXJkX3JlZiIpO01iPUgoInJlYWN0LnN1c3BlbnNlIik7Q2M9SCgicmVhY3Quc3VzcGVuc2VfbGlzdCIpO0VjPUgoInJlYWN0Lm1lbW8iKTtMZD1IKCJyZWFjdC5sYXp5Iik7S2Q9SCgicmVhY3QuYmxvY2siKTtIKCJyZWFjdC5zY29wZSIpO3RlPUgoInJlYWN0Lm9wYXF1ZS5pZCIpO2VpPUgoInJlYWN0LmRlYnVnX3RyYWNlX21vZGUiKTtvZj1IKCJyZWFjdC5vZmZzY3JlZW4iKTtwZj1IKCJyZWFjdC5sZWdhY3lfaGlkZGVuIil9dmFyIENmPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3IsRmQsR2Q9ITEsQWQsS2g9ZnVuY3Rpb24oYSl7cmV0dXJuInVuZGVmaW5lZCIhPT0NCnR5cGVvZiBNU0FwcCYmTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24/ZnVuY3Rpb24oYixjLGQsZSl7TVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24oKXtyZXR1cm4gYShiLGMsZCxlKX0pfTphfShmdW5jdGlvbihhLGIpe2lmKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIhPT1hLm5hbWVzcGFjZVVSSXx8ImlubmVySFRNTCJpbiBhKWEuaW5uZXJIVE1MPWI7ZWxzZXtBZD1BZHx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7QWQuaW5uZXJIVE1MPSI8c3ZnPiIrYi52YWx1ZU9mKCkudG9TdHJpbmcoKSsiPC9zdmc+Ijtmb3IoYj1BZC5maXJzdENoaWxkO2EuZmlyc3RDaGlsZDspYS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpO2Zvcig7Yi5maXJzdENoaWxkOylhLmFwcGVuZENoaWxkKGIuZmlyc3RDaGlsZCl9fSkscWM9ZnVuY3Rpb24oYSxiKXtpZihiKXt2YXIgYz1hLmZpcnN0Q2hpbGQ7aWYoYyYmYz09PWEubGFzdENoaWxkJiYzPT09Yy5ub2RlVHlwZSl7Yy5ub2RlVmFsdWU9DQpiO3JldHVybn19YS50ZXh0Q29udGVudD1ifSxOYj17YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ITAsYm9yZGVySW1hZ2VPdXRzZXQ6ITAsYm9yZGVySW1hZ2VTbGljZTohMCxib3JkZXJJbWFnZVdpZHRoOiEwLGJveEZsZXg6ITAsYm94RmxleEdyb3VwOiEwLGJveE9yZGluYWxHcm91cDohMCxjb2x1bW5Db3VudDohMCxjb2x1bW5zOiEwLGZsZXg6ITAsZmxleEdyb3c6ITAsZmxleFBvc2l0aXZlOiEwLGZsZXhTaHJpbms6ITAsZmxleE5lZ2F0aXZlOiEwLGZsZXhPcmRlcjohMCxncmlkQXJlYTohMCxncmlkUm93OiEwLGdyaWRSb3dFbmQ6ITAsZ3JpZFJvd1NwYW46ITAsZ3JpZFJvd1N0YXJ0OiEwLGdyaWRDb2x1bW46ITAsZ3JpZENvbHVtbkVuZDohMCxncmlkQ29sdW1uU3BhbjohMCxncmlkQ29sdW1uU3RhcnQ6ITAsZm9udFdlaWdodDohMCxsaW5lQ2xhbXA6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsdGFiU2l6ZTohMCx3aWRvd3M6ITAsekluZGV4OiEwLA0Kem9vbTohMCxmaWxsT3BhY2l0eTohMCxmbG9vZE9wYWNpdHk6ITAsc3RvcE9wYWNpdHk6ITAsc3Ryb2tlRGFzaGFycmF5OiEwLHN0cm9rZURhc2hvZmZzZXQ6ITAsc3Ryb2tlTWl0ZXJsaW1pdDohMCxzdHJva2VPcGFjaXR5OiEwLHN0cm9rZVdpZHRoOiEwfSxhaz1bIldlYmtpdCIsIm1zIiwiTW96IiwiTyJdO09iamVjdC5rZXlzKE5iKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2FrLmZvckVhY2goZnVuY3Rpb24oYil7Yj1iK2EuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYS5zdWJzdHJpbmcoMSk7TmJbYl09TmJbYV19KX0pO3ZhciByaT1CKHttZW51aXRlbTohMH0se2FyZWE6ITAsYmFzZTohMCxicjohMCxjb2w6ITAsZW1iZWQ6ITAsaHI6ITAsaW1nOiEwLGlucHV0OiEwLGtleWdlbjohMCxsaW5rOiEwLG1ldGE6ITAscGFyYW06ITAsc291cmNlOiEwLHRyYWNrOiEwLHdicjohMH0pLFZkPW51bGwsamI9bnVsbCxrYj1udWxsLGxlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEoYil9LGVnPWZ1bmN0aW9uKGEsDQpiLGMsZCxlKXtyZXR1cm4gYShiLGMsZCxlKX0sWGQ9ZnVuY3Rpb24oKXt9LFJmPWxlLFhhPSExLFlkPSExLHBlPSExO2lmKG9hKXRyeXt2YXIgeGM9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KHhjLCJwYXNzaXZlIix7Z2V0OmZ1bmN0aW9uKCl7cGU9ITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLHhjLHhjKTt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIseGMseGMpfWNhdGNoKGEpe3BlPSExfXZhciB1aT1mdW5jdGlvbihhLGIsYyxkLGUsZixnLGgsayl7dmFyIGw9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDMpO3RyeXtiLmFwcGx5KGMsbCl9Y2F0Y2goRGEpe3RoaXMub25FcnJvcihEYSl9fSxRYj0hMSxJYz1udWxsLEpjPSExLFpkPW51bGwsdmk9e29uRXJyb3I6ZnVuY3Rpb24oYSl7UWI9ITA7SWM9YX19LGNhPWhhLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELlNjaGVkdWxlciwNCmJrPWNhLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrLEJkPWNhLnVuc3RhYmxlX25vdyxaZj1jYS51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrLGNrPWNhLnVuc3RhYmxlX3Nob3VsZFlpZWxkLGhpPWNhLnVuc3RhYmxlX3JlcXVlc3RQYWludCxhZT1jYS51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHksZGs9Y2EudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwsZWs9Y2EudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHksaWk9Y2EudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksJGY9Y2EudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksZms9Y2EudW5zdGFibGVfTG93UHJpb3JpdHksZ2s9Y2EudW5zdGFibGVfSWRsZVByaW9yaXR5LGNlPSExLGlhPVtdLHlhPW51bGwsemE9bnVsbCxBYT1udWxsLFJiPW5ldyBNYXAsU2I9bmV3IE1hcCxWYj1bXSxmZz0ibW91c2Vkb3duIG1vdXNldXAgdG91Y2hjYW5jZWwgdG91Y2hlbmQgdG91Y2hzdGFydCBhdXhjbGljayBkYmxjbGljayBwb2ludGVyY2FuY2VsIHBvaW50ZXJkb3duIHBvaW50ZXJ1cCBkcmFnZW5kIGRyYWdzdGFydCBkcm9wIGNvbXBvc2l0aW9uZW5kIGNvbXBvc2l0aW9uc3RhcnQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBpbnB1dCB0ZXh0SW5wdXQgY29weSBjdXQgcGFzdGUgY2xpY2sgY2hhbmdlIGNvbnRleHRtZW51IHJlc2V0IHN1Ym1pdCIuc3BsaXQoIiAiKSwNCmxiPXthbmltYXRpb25lbmQ6TGMoIkFuaW1hdGlvbiIsIkFuaW1hdGlvbkVuZCIpLGFuaW1hdGlvbml0ZXJhdGlvbjpMYygiQW5pbWF0aW9uIiwiQW5pbWF0aW9uSXRlcmF0aW9uIiksYW5pbWF0aW9uc3RhcnQ6TGMoIkFuaW1hdGlvbiIsIkFuaW1hdGlvblN0YXJ0IiksdHJhbnNpdGlvbmVuZDpMYygiVHJhbnNpdGlvbiIsIlRyYW5zaXRpb25FbmQiKX0sZGU9e30sYmc9e307b2EmJihiZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKS5zdHlsZSwiQW5pbWF0aW9uRXZlbnQiaW4gd2luZG93fHwoZGVsZXRlIGxiLmFuaW1hdGlvbmVuZC5hbmltYXRpb24sZGVsZXRlIGxiLmFuaW1hdGlvbml0ZXJhdGlvbi5hbmltYXRpb24sZGVsZXRlIGxiLmFuaW1hdGlvbnN0YXJ0LmFuaW1hdGlvbiksIlRyYW5zaXRpb25FdmVudCJpbiB3aW5kb3d8fGRlbGV0ZSBsYi50cmFuc2l0aW9uZW5kLnRyYW5zaXRpb24pO3ZhciBHZz1NYygiYW5pbWF0aW9uZW5kIiksSGc9TWMoImFuaW1hdGlvbml0ZXJhdGlvbiIpLA0KSWc9TWMoImFuaW1hdGlvbnN0YXJ0IiksSmc9TWMoInRyYW5zaXRpb25lbmQiKSxjZz1uZXcgTWFwLGZlPW5ldyBNYXAsaGs9WyJhYm9ydCIsImFib3J0IixHZywiYW5pbWF0aW9uRW5kIixIZywiYW5pbWF0aW9uSXRlcmF0aW9uIixJZywiYW5pbWF0aW9uU3RhcnQiLCJjYW5wbGF5IiwiY2FuUGxheSIsImNhbnBsYXl0aHJvdWdoIiwiY2FuUGxheVRocm91Z2giLCJkdXJhdGlvbmNoYW5nZSIsImR1cmF0aW9uQ2hhbmdlIiwiZW1wdGllZCIsImVtcHRpZWQiLCJlbmNyeXB0ZWQiLCJlbmNyeXB0ZWQiLCJlbmRlZCIsImVuZGVkIiwiZXJyb3IiLCJlcnJvciIsImdvdHBvaW50ZXJjYXB0dXJlIiwiZ290UG9pbnRlckNhcHR1cmUiLCJsb2FkIiwibG9hZCIsImxvYWRlZGRhdGEiLCJsb2FkZWREYXRhIiwibG9hZGVkbWV0YWRhdGEiLCJsb2FkZWRNZXRhZGF0YSIsImxvYWRzdGFydCIsImxvYWRTdGFydCIsImxvc3Rwb2ludGVyY2FwdHVyZSIsImxvc3RQb2ludGVyQ2FwdHVyZSIsInBsYXlpbmciLA0KInBsYXlpbmciLCJwcm9ncmVzcyIsInByb2dyZXNzIiwic2Vla2luZyIsInNlZWtpbmciLCJzdGFsbGVkIiwic3RhbGxlZCIsInN1c3BlbmQiLCJzdXNwZW5kIiwidGltZXVwZGF0ZSIsInRpbWVVcGRhdGUiLEpnLCJ0cmFuc2l0aW9uRW5kIiwid2FpdGluZyIsIndhaXRpbmciXTtCZCgpO3ZhciB3PTgsQmE9TWF0aC5jbHozMj9NYXRoLmNsejMyOkdpLEhpPU1hdGgubG9nLElpPU1hdGguTE4yLE1pPWlpLExpPWFlLFBjPSEwLENhPW51bGwsaGU9bnVsbCxRYz1udWxsLEhiPXtldmVudFBoYXNlOjAsYnViYmxlczowLGNhbmNlbGFibGU6MCx0aW1lU3RhbXA6ZnVuY3Rpb24oYSl7cmV0dXJuIGEudGltZVN0YW1wfHxEYXRlLm5vdygpfSxkZWZhdWx0UHJldmVudGVkOjAsaXNUcnVzdGVkOjB9LGtlPVYoSGIpLHljPUIoe30sSGIse3ZpZXc6MCxkZXRhaWw6MH0pLGdqPVYoeWMpLHZmLHdmLHpjLENkPUIoe30seWMse3NjcmVlblg6MCxzY3JlZW5ZOjAsY2xpZW50WDowLGNsaWVudFk6MCxwYWdlWDowLA0KcGFnZVk6MCxjdHJsS2V5OjAsc2hpZnRLZXk6MCxhbHRLZXk6MCxtZXRhS2V5OjAsZ2V0TW9kaWZpZXJTdGF0ZTppZSxidXR0b246MCxidXR0b25zOjAscmVsYXRlZFRhcmdldDpmdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwPT09YS5yZWxhdGVkVGFyZ2V0P2EuZnJvbUVsZW1lbnQ9PT1hLnNyY0VsZW1lbnQ/YS50b0VsZW1lbnQ6YS5mcm9tRWxlbWVudDphLnJlbGF0ZWRUYXJnZXR9LG1vdmVtZW50WDpmdW5jdGlvbihhKXtpZigibW92ZW1lbnRYImluIGEpcmV0dXJuIGEubW92ZW1lbnRYO2EhPT16YyYmKHpjJiYibW91c2Vtb3ZlIj09PWEudHlwZT8odmY9YS5zY3JlZW5YLXpjLnNjcmVlblgsd2Y9YS5zY3JlZW5ZLXpjLnNjcmVlblkpOndmPXZmPTAsemM9YSk7cmV0dXJuIHZmfSxtb3ZlbWVudFk6ZnVuY3Rpb24oYSl7cmV0dXJuIm1vdmVtZW50WSJpbiBhP2EubW92ZW1lbnRZOndmfX0pLEZnPVYoQ2QpLGlrPUIoe30sQ2Qse2RhdGFUcmFuc2ZlcjowfSksY2o9Vihpayksams9Qih7fSwNCnljLHtyZWxhdGVkVGFyZ2V0OjB9KSxxZT1WKGprKSxraz1CKHt9LEhiLHthbmltYXRpb25OYW1lOjAsZWxhcHNlZFRpbWU6MCxwc2V1ZG9FbGVtZW50OjB9KSxlaj1WKGtrKSxsaz1CKHt9LEhiLHtjbGlwYm9hcmREYXRhOmZ1bmN0aW9uKGEpe3JldHVybiJjbGlwYm9hcmREYXRhImluIGE/YS5jbGlwYm9hcmREYXRhOndpbmRvdy5jbGlwYm9hcmREYXRhfX0pLGlqPVYobGspLG1rPUIoe30sSGIse2RhdGE6MH0pLE5nPVYobWspLGxqPU5nLG5rPXtFc2M6IkVzY2FwZSIsU3BhY2ViYXI6IiAiLExlZnQ6IkFycm93TGVmdCIsVXA6IkFycm93VXAiLFJpZ2h0OiJBcnJvd1JpZ2h0IixEb3duOiJBcnJvd0Rvd24iLERlbDoiRGVsZXRlIixXaW46Ik9TIixNZW51OiJDb250ZXh0TWVudSIsQXBwczoiQ29udGV4dE1lbnUiLFNjcm9sbDoiU2Nyb2xsTG9jayIsTW96UHJpbnRhYmxlS2V5OiJVbmlkZW50aWZpZWQifSxvaz17ODoiQmFja3NwYWNlIiw5OiJUYWIiLDEyOiJDbGVhciIsMTM6IkVudGVyIiwNCjE2OiJTaGlmdCIsMTc6IkNvbnRyb2wiLDE4OiJBbHQiLDE5OiJQYXVzZSIsMjA6IkNhcHNMb2NrIiwyNzoiRXNjYXBlIiwzMjoiICIsMzM6IlBhZ2VVcCIsMzQ6IlBhZ2VEb3duIiwzNToiRW5kIiwzNjoiSG9tZSIsMzc6IkFycm93TGVmdCIsMzg6IkFycm93VXAiLDM5OiJBcnJvd1JpZ2h0Iiw0MDoiQXJyb3dEb3duIiw0NToiSW5zZXJ0Iiw0NjoiRGVsZXRlIiwxMTI6IkYxIiwxMTM6IkYyIiwxMTQ6IkYzIiwxMTU6IkY0IiwxMTY6IkY1IiwxMTc6IkY2IiwxMTg6IkY3IiwxMTk6IkY4IiwxMjA6IkY5IiwxMjE6IkYxMCIsMTIyOiJGMTEiLDEyMzoiRjEyIiwxNDQ6Ik51bUxvY2siLDE0NToiU2Nyb2xsTG9jayIsMjI0OiJNZXRhIn0sT2k9e0FsdDoiYWx0S2V5IixDb250cm9sOiJjdHJsS2V5IixNZXRhOiJtZXRhS2V5IixTaGlmdDoic2hpZnRLZXkifSxwaz1CKHt9LHljLHtrZXk6ZnVuY3Rpb24oYSl7aWYoYS5rZXkpe3ZhciBiPW5rW2Eua2V5XXx8YS5rZXk7aWYoIlVuaWRlbnRpZmllZCIhPT0NCmIpcmV0dXJuIGJ9cmV0dXJuImtleXByZXNzIj09PWEudHlwZT8oYT1SYyhhKSwxMz09PWE/IkVudGVyIjpTdHJpbmcuZnJvbUNoYXJDb2RlKGEpKToia2V5ZG93biI9PT1hLnR5cGV8fCJrZXl1cCI9PT1hLnR5cGU/b2tbYS5rZXlDb2RlXXx8IlVuaWRlbnRpZmllZCI6IiJ9LGNvZGU6MCxsb2NhdGlvbjowLGN0cmxLZXk6MCxzaGlmdEtleTowLGFsdEtleTowLG1ldGFLZXk6MCxyZXBlYXQ6MCxsb2NhbGU6MCxnZXRNb2RpZmllclN0YXRlOmllLGNoYXJDb2RlOmZ1bmN0aW9uKGEpe3JldHVybiJrZXlwcmVzcyI9PT1hLnR5cGU/UmMoYSk6MH0sa2V5Q29kZTpmdW5jdGlvbihhKXtyZXR1cm4ia2V5ZG93biI9PT1hLnR5cGV8fCJrZXl1cCI9PT1hLnR5cGU/YS5rZXlDb2RlOjB9LHdoaWNoOmZ1bmN0aW9uKGEpe3JldHVybiJrZXlwcmVzcyI9PT1hLnR5cGU/UmMoYSk6ImtleWRvd24iPT09YS50eXBlfHwia2V5dXAiPT09YS50eXBlP2Eua2V5Q29kZTowfX0pLGJqPVYocGspLHFrPUIoe30sDQpDZCx7cG9pbnRlcklkOjAsd2lkdGg6MCxoZWlnaHQ6MCxwcmVzc3VyZTowLHRhbmdlbnRpYWxQcmVzc3VyZTowLHRpbHRYOjAsdGlsdFk6MCx0d2lzdDowLHBvaW50ZXJUeXBlOjAsaXNQcmltYXJ5OjB9KSxLZz1WKHFrKSxyaz1CKHt9LHljLHt0b3VjaGVzOjAsdGFyZ2V0VG91Y2hlczowLGNoYW5nZWRUb3VjaGVzOjAsYWx0S2V5OjAsbWV0YUtleTowLGN0cmxLZXk6MCxzaGlmdEtleTowLGdldE1vZGlmaWVyU3RhdGU6aWV9KSxkaj1WKHJrKSxzaz1CKHt9LEhiLHtwcm9wZXJ0eU5hbWU6MCxlbGFwc2VkVGltZTowLHBzZXVkb0VsZW1lbnQ6MH0pLGZqPVYoc2spLHRrPUIoe30sQ2Qse2RlbHRhWDpmdW5jdGlvbihhKXtyZXR1cm4iZGVsdGFYImluIGE/YS5kZWx0YVg6IndoZWVsRGVsdGFYImluIGE/LWEud2hlZWxEZWx0YVg6MH0sZGVsdGFZOmZ1bmN0aW9uKGEpe3JldHVybiJkZWx0YVkiaW4gYT9hLmRlbHRhWToid2hlZWxEZWx0YVkiaW4gYT8tYS53aGVlbERlbHRhWToid2hlZWxEZWx0YSJpbg0KYT8tYS53aGVlbERlbHRhOjB9LGRlbHRhWjowLGRlbHRhTW9kZTowfSksaGo9Vih0ayksUGk9WzksMTMsMjcsMzJdLGplPW9hJiYiQ29tcG9zaXRpb25FdmVudCJpbiB3aW5kb3csQWM9bnVsbDtvYSYmImRvY3VtZW50TW9kZSJpbiBkb2N1bWVudCYmKEFjPWRvY3VtZW50LmRvY3VtZW50TW9kZSk7dmFyIGtqPW9hJiYiVGV4dEV2ZW50ImluIHdpbmRvdyYmIUFjLG5nPW9hJiYoIWplfHxBYyYmODxBYyYmMTE+PUFjKSxtZz1TdHJpbmcuZnJvbUNoYXJDb2RlKDMyKSxsZz0hMSxvYj0hMSxTaT17Y29sb3I6ITAsZGF0ZTohMCxkYXRldGltZTohMCwiZGF0ZXRpbWUtbG9jYWwiOiEwLGVtYWlsOiEwLG1vbnRoOiEwLG51bWJlcjohMCxwYXNzd29yZDohMCxyYW5nZTohMCxzZWFyY2g6ITAsdGVsOiEwLHRleHQ6ITAsdGltZTohMCx1cmw6ITAsd2VlazohMH0sWGI9bnVsbCxZYj1udWxsLE1nPSExO29hJiYoTWc9VGkoImlucHV0IikmJighZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHw5PGRvY3VtZW50LmRvY3VtZW50TW9kZSkpOw0KdmFyIFg9ImZ1bmN0aW9uIj09PXR5cGVvZiBPYmplY3QuaXM/T2JqZWN0LmlzOiRpLGFqPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksamo9b2EmJiJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQmJjExPj1kb2N1bWVudC5kb2N1bWVudE1vZGUscWI9bnVsbCxvZT1udWxsLCRiPW51bGwsbmU9ITE7ZWUoImNhbmNlbCBjYW5jZWwgY2xpY2sgY2xpY2sgY2xvc2UgY2xvc2UgY29udGV4dG1lbnUgY29udGV4dE1lbnUgY29weSBjb3B5IGN1dCBjdXQgYXV4Y2xpY2sgYXV4Q2xpY2sgZGJsY2xpY2sgZG91YmxlQ2xpY2sgZHJhZ2VuZCBkcmFnRW5kIGRyYWdzdGFydCBkcmFnU3RhcnQgZHJvcCBkcm9wIGZvY3VzaW4gZm9jdXMgZm9jdXNvdXQgYmx1ciBpbnB1dCBpbnB1dCBpbnZhbGlkIGludmFsaWQga2V5ZG93biBrZXlEb3duIGtleXByZXNzIGtleVByZXNzIGtleXVwIGtleVVwIG1vdXNlZG93biBtb3VzZURvd24gbW91c2V1cCBtb3VzZVVwIHBhc3RlIHBhc3RlIHBhdXNlIHBhdXNlIHBsYXkgcGxheSBwb2ludGVyY2FuY2VsIHBvaW50ZXJDYW5jZWwgcG9pbnRlcmRvd24gcG9pbnRlckRvd24gcG9pbnRlcnVwIHBvaW50ZXJVcCByYXRlY2hhbmdlIHJhdGVDaGFuZ2UgcmVzZXQgcmVzZXQgc2Vla2VkIHNlZWtlZCBzdWJtaXQgc3VibWl0IHRvdWNoY2FuY2VsIHRvdWNoQ2FuY2VsIHRvdWNoZW5kIHRvdWNoRW5kIHRvdWNoc3RhcnQgdG91Y2hTdGFydCB2b2x1bWVjaGFuZ2Ugdm9sdW1lQ2hhbmdlIi5zcGxpdCgiICIpLA0KMCk7ZWUoImRyYWcgZHJhZyBkcmFnZW50ZXIgZHJhZ0VudGVyIGRyYWdleGl0IGRyYWdFeGl0IGRyYWdsZWF2ZSBkcmFnTGVhdmUgZHJhZ292ZXIgZHJhZ092ZXIgbW91c2Vtb3ZlIG1vdXNlTW92ZSBtb3VzZW91dCBtb3VzZU91dCBtb3VzZW92ZXIgbW91c2VPdmVyIHBvaW50ZXJtb3ZlIHBvaW50ZXJNb3ZlIHBvaW50ZXJvdXQgcG9pbnRlck91dCBwb2ludGVyb3ZlciBwb2ludGVyT3ZlciBzY3JvbGwgc2Nyb2xsIHRvZ2dsZSB0b2dnbGUgdG91Y2htb3ZlIHRvdWNoTW92ZSB3aGVlbCB3aGVlbCIuc3BsaXQoIiAiKSwxKTtlZShoaywyKTsoZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKylmZS5zZXQoYVtjXSxiKX0pKCJjaGFuZ2Ugc2VsZWN0aW9uY2hhbmdlIHRleHRJbnB1dCBjb21wb3NpdGlvbnN0YXJ0IGNvbXBvc2l0aW9uZW5kIGNvbXBvc2l0aW9udXBkYXRlIi5zcGxpdCgiICIpLDApO2diKCJvbk1vdXNlRW50ZXIiLFsibW91c2VvdXQiLCJtb3VzZW92ZXIiXSk7DQpnYigib25Nb3VzZUxlYXZlIixbIm1vdXNlb3V0IiwibW91c2VvdmVyIl0pO2diKCJvblBvaW50ZXJFbnRlciIsWyJwb2ludGVyb3V0IiwicG9pbnRlcm92ZXIiXSk7Z2IoIm9uUG9pbnRlckxlYXZlIixbInBvaW50ZXJvdXQiLCJwb2ludGVyb3ZlciJdKTtUYSgib25DaGFuZ2UiLCJjaGFuZ2UgY2xpY2sgZm9jdXNpbiBmb2N1c291dCBpbnB1dCBrZXlkb3duIGtleXVwIHNlbGVjdGlvbmNoYW5nZSIuc3BsaXQoIiAiKSk7VGEoIm9uU2VsZWN0IiwiZm9jdXNvdXQgY29udGV4dG1lbnUgZHJhZ2VuZCBmb2N1c2luIGtleWRvd24ga2V5dXAgbW91c2Vkb3duIG1vdXNldXAgc2VsZWN0aW9uY2hhbmdlIi5zcGxpdCgiICIpKTtUYSgib25CZWZvcmVJbnB1dCIsWyJjb21wb3NpdGlvbmVuZCIsImtleXByZXNzIiwidGV4dElucHV0IiwicGFzdGUiXSk7VGEoIm9uQ29tcG9zaXRpb25FbmQiLCJjb21wb3NpdGlvbmVuZCBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93biIuc3BsaXQoIiAiKSk7DQpUYSgib25Db21wb3NpdGlvblN0YXJ0IiwiY29tcG9zaXRpb25zdGFydCBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93biIuc3BsaXQoIiAiKSk7VGEoIm9uQ29tcG9zaXRpb25VcGRhdGUiLCJjb21wb3NpdGlvbnVwZGF0ZSBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93biIuc3BsaXQoIiAiKSk7dmFyIHBjPSJhYm9ydCBjYW5wbGF5IGNhbnBsYXl0aHJvdWdoIGR1cmF0aW9uY2hhbmdlIGVtcHRpZWQgZW5jcnlwdGVkIGVuZGVkIGVycm9yIGxvYWRlZGRhdGEgbG9hZGVkbWV0YWRhdGEgbG9hZHN0YXJ0IHBhdXNlIHBsYXkgcGxheWluZyBwcm9ncmVzcyByYXRlY2hhbmdlIHNlZWtlZCBzZWVraW5nIHN0YWxsZWQgc3VzcGVuZCB0aW1ldXBkYXRlIHZvbHVtZWNoYW5nZSB3YWl0aW5nIi5zcGxpdCgiICIpLERnPW5ldyBTZXQoImNhbmNlbCBjbG9zZSBpbnZhbGlkIGxvYWQgc2Nyb2xsIHRvZ2dsZSIuc3BsaXQoIiAiKS5jb25jYXQocGMpKSwNCkNnPSJfcmVhY3RMaXN0ZW5pbmciK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpLGtmPW51bGwsbGY9bnVsbCxaaD0iZnVuY3Rpb24iPT09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDp2b2lkIDAsSmo9ImZ1bmN0aW9uIj09PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0OnZvaWQgMCx4Zj0wLERkPU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpLEZhPSJfX3JlYWN0RmliZXIkIitEZCxXYz0iX19yZWFjdFByb3BzJCIrRGQscmI9Il9fcmVhY3RDb250YWluZXIkIitEZCxRZz0iX19yZWFjdEV2ZW50cyQiK0RkLHVlPVtdLHViPS0xLEhhPXt9LEQ9R2EoSGEpLEo9R2EoITEpLFlhPUhhLFplPW51bGwsZGI9bnVsbCxvaj1hZSx2ZT1aZix3ZT1iayxuaj1kayxZYz1layxVZz1paSxWZz0kZixXZz1mayxYZz1nayxnZj17fSxOaj1jayxSaj12b2lkIDAhPT1oaT9oaTpmdW5jdGlvbigpe30scGE9bnVsbCxaYz1udWxsLHhlPSExLGppPUJkKCksDQpQPTFFND5qaT9CZDpmdW5jdGlvbigpe3JldHVybiBCZCgpLWppfSxGaj1mYi5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZyxiZD1HYShudWxsKSxhZD1udWxsLHhiPW51bGwsJGM9bnVsbCxLYT0hMSxnaD0obmV3IGhhLkNvbXBvbmVudCkucmVmcyxkZD17aXNNb3VudGVkOmZ1bmN0aW9uKGEpe3JldHVybihhPWEuX3JlYWN0SW50ZXJuYWxzKT9WYShhKT09PWE6ITF9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbihhLGIsYyl7YT1hLl9yZWFjdEludGVybmFsczt2YXIgZD1XKCksZT1PYShhKSxmPUlhKGQsZSk7Zi5wYXlsb2FkPWI7dm9pZCAwIT09YyYmbnVsbCE9PWMmJihmLmNhbGxiYWNrPWMpO0phKGEsZik7UGEoYSxlLGQpfSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKGEsYixjKXthPWEuX3JlYWN0SW50ZXJuYWxzO3ZhciBkPVcoKSxlPU9hKGEpLGY9SWEoZCxlKTtmLnRhZz0xO2YucGF5bG9hZD1iO3ZvaWQgMCE9PWMmJm51bGwhPT1jJiYoZi5jYWxsYmFjaz1jKTtKYShhLGYpOw0KUGEoYSxlLGQpfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oYSxiKXthPWEuX3JlYWN0SW50ZXJuYWxzO3ZhciBjPVcoKSxkPU9hKGEpLGU9SWEoYyxkKTtlLnRhZz0yO3ZvaWQgMCE9PWImJm51bGwhPT1iJiYoZS5jYWxsYmFjaz1iKTtKYShhLGUpO1BhKGEsZCxjKX19LGdkPUFycmF5LmlzQXJyYXksb2Q9aGgoITApLHdoPWhoKCExKSxmYz17fSxrYT1HYShmYyksaGM9R2EoZmMpLGdjPUdhKGZjKSxFPUdhKDApLHJhPW51bGwsTmE9bnVsbCxsYT0hMSxCYj1bXSxqYz1mYi5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLGFhPWZiLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLGljPTAseT1udWxsLE49bnVsbCxLPW51bGwsa2Q9ITEsa2M9ITEsamQ9e3JlYWRDb250ZXh0OlksdXNlQ2FsbGJhY2s6VCx1c2VDb250ZXh0OlQsdXNlRWZmZWN0OlQsdXNlSW1wZXJhdGl2ZUhhbmRsZTpULHVzZUxheW91dEVmZmVjdDpULHVzZU1lbW86VCx1c2VSZWR1Y2VyOlQsdXNlUmVmOlQsdXNlU3RhdGU6VCwNCnVzZURlYnVnVmFsdWU6VCx1c2VEZWZlcnJlZFZhbHVlOlQsdXNlVHJhbnNpdGlvbjpULHVzZU11dGFibGVTb3VyY2U6VCx1c2VPcGFxdWVJZGVudGlmaWVyOlQsdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiExfSxwaj17cmVhZENvbnRleHQ6WSx1c2VDYWxsYmFjazpmdW5jdGlvbihhLGIpe2FiKCkubWVtb2l6ZWRTdGF0ZT1bYSx2b2lkIDA9PT1iP251bGw6Yl07cmV0dXJuIGF9LHVzZUNvbnRleHQ6WSx1c2VFZmZlY3Q6cWgsdXNlSW1wZXJhdGl2ZUhhbmRsZTpmdW5jdGlvbihhLGIsYyl7Yz1udWxsIT09YyYmdm9pZCAwIT09Yz9jLmNvbmNhdChbYV0pOm51bGw7cmV0dXJuIE1lKDQsMixzaC5iaW5kKG51bGwsYixhKSxjKX0sdXNlTGF5b3V0RWZmZWN0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIE1lKDQsMixhLGIpfSx1c2VNZW1vOmZ1bmN0aW9uKGEsYil7dmFyIGM9YWIoKTtiPXZvaWQgMD09PWI/bnVsbDpiO2E9YSgpO2MubWVtb2l6ZWRTdGF0ZT1bYSxiXTtyZXR1cm4gYX0sdXNlUmVkdWNlcjpmdW5jdGlvbihhLA0KYixjKXt2YXIgZD1hYigpO2I9dm9pZCAwIT09Yz9jKGIpOmI7ZC5tZW1vaXplZFN0YXRlPWQuYmFzZVN0YXRlPWI7YT1kLnF1ZXVlPXtwZW5kaW5nOm51bGwsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOmEsbGFzdFJlbmRlcmVkU3RhdGU6Yn07YT1hLmRpc3BhdGNoPUxlLmJpbmQobnVsbCx5LGEpO3JldHVybltkLm1lbW9pemVkU3RhdGUsYV19LHVzZVJlZjpwaCx1c2VTdGF0ZTpuYyx1c2VEZWJ1Z1ZhbHVlOk9lLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGI9bmMoYSksYz1iWzBdLGQ9YlsxXTtxaChmdW5jdGlvbigpe3ZhciBiPWFhLnRyYW5zaXRpb247YWEudHJhbnNpdGlvbj0xO3RyeXtkKGEpfWZpbmFsbHl7YWEudHJhbnNpdGlvbj1ifX0sW2FdKTtyZXR1cm4gY30sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBhPW5jKCExKSxiPWFbMF07YT1zai5iaW5kKG51bGwsYVsxXSk7cGgoYSk7cmV0dXJuW2EsYl19LHVzZU11dGFibGVTb3VyY2U6ZnVuY3Rpb24oYSwNCmIsYyl7dmFyIGQ9YWIoKTtkLm1lbW9pemVkU3RhdGU9e3JlZnM6e2dldFNuYXBzaG90OmIsc2V0U25hcHNob3Q6bnVsbH0sc291cmNlOmEsc3Vic2NyaWJlOmN9O3JldHVybiBuaChkLGEsYixjKX0sdXNlT3BhcXVlSWRlbnRpZmllcjpmdW5jdGlvbigpe2lmKGxhKXt2YXIgYT0hMSxiPW1qKGZ1bmN0aW9uKCl7YXx8KGE9ITAsYygicjoiKyh4ZisrKS50b1N0cmluZygzNikpKTt0aHJvdyBFcnJvcihtKDM1NSkpO30pLGM9bmMoYilbMV07MD09PSh5Lm1vZGUmMikmJih5LmZsYWdzfD01MTYsbGQoNSxmdW5jdGlvbigpe2MoInI6IisoeGYrKykudG9TdHJpbmcoMzYpKX0sdm9pZCAwLG51bGwpKTtyZXR1cm4gYn1iPSJyOiIrKHhmKyspLnRvU3RyaW5nKDM2KTtuYyhiKTtyZXR1cm4gYn0sdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiExfSxxaj17cmVhZENvbnRleHQ6WSx1c2VDYWxsYmFjazp1aCx1c2VDb250ZXh0OlksdXNlRWZmZWN0Om5kLHVzZUltcGVyYXRpdmVIYW5kbGU6dGgsdXNlTGF5b3V0RWZmZWN0OnJoLA0KdXNlTWVtbzp2aCx1c2VSZWR1Y2VyOmxjLHVzZVJlZjptZCx1c2VTdGF0ZTpmdW5jdGlvbihhKXtyZXR1cm4gbGMobWEpfSx1c2VEZWJ1Z1ZhbHVlOk9lLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGI9bGMobWEpLGM9YlswXSxkPWJbMV07bmQoZnVuY3Rpb24oKXt2YXIgYj1hYS50cmFuc2l0aW9uO2FhLnRyYW5zaXRpb249MTt0cnl7ZChhKX1maW5hbGx5e2FhLnRyYW5zaXRpb249Yn19LFthXSk7cmV0dXJuIGN9LHVzZVRyYW5zaXRpb246ZnVuY3Rpb24oKXt2YXIgYT1sYyhtYSlbMF07cmV0dXJuW21kKCkuY3VycmVudCxhXX0sdXNlTXV0YWJsZVNvdXJjZTpvaCx1c2VPcGFxdWVJZGVudGlmaWVyOmZ1bmN0aW9uKCl7cmV0dXJuIGxjKG1hKVswXX0sdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiExfSxyaj17cmVhZENvbnRleHQ6WSx1c2VDYWxsYmFjazp1aCx1c2VDb250ZXh0OlksdXNlRWZmZWN0Om5kLHVzZUltcGVyYXRpdmVIYW5kbGU6dGgsdXNlTGF5b3V0RWZmZWN0OnJoLA0KdXNlTWVtbzp2aCx1c2VSZWR1Y2VyOm1jLHVzZVJlZjptZCx1c2VTdGF0ZTpmdW5jdGlvbihhKXtyZXR1cm4gbWMobWEpfSx1c2VEZWJ1Z1ZhbHVlOk9lLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGI9bWMobWEpLGM9YlswXSxkPWJbMV07bmQoZnVuY3Rpb24oKXt2YXIgYj1hYS50cmFuc2l0aW9uO2FhLnRyYW5zaXRpb249MTt0cnl7ZChhKX1maW5hbGx5e2FhLnRyYW5zaXRpb249Yn19LFthXSk7cmV0dXJuIGN9LHVzZVRyYW5zaXRpb246ZnVuY3Rpb24oKXt2YXIgYT1tYyhtYSlbMF07cmV0dXJuW21kKCkuY3VycmVudCxhXX0sdXNlTXV0YWJsZVNvdXJjZTpvaCx1c2VPcGFxdWVJZGVudGlmaWVyOmZ1bmN0aW9uKCl7cmV0dXJuIG1jKG1hKVswXX0sdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiExfSx0aj1mYi5SZWFjdEN1cnJlbnRPd25lcixmYT0hMSxxZD17ZGVoeWRyYXRlZDpudWxsLHJldHJ5TGFuZTowfTt2YXIgd2o9ZnVuY3Rpb24oYSxiLGMsZCl7Zm9yKGM9DQpiLmNoaWxkO251bGwhPT1jOyl7aWYoNT09PWMudGFnfHw2PT09Yy50YWcpYS5hcHBlbmRDaGlsZChjLnN0YXRlTm9kZSk7ZWxzZSBpZig0IT09Yy50YWcmJm51bGwhPT1jLmNoaWxkKXtjLmNoaWxkLnJldHVybj1jO2M9Yy5jaGlsZDtjb250aW51ZX1pZihjPT09YilicmVhaztmb3IoO251bGw9PT1jLnNpYmxpbmc7KXtpZihudWxsPT09Yy5yZXR1cm58fGMucmV0dXJuPT09YilyZXR1cm47Yz1jLnJldHVybn1jLnNpYmxpbmcucmV0dXJuPWMucmV0dXJuO2M9Yy5zaWJsaW5nfX07dmFyIEpoPWZ1bmN0aW9uKGEpe307dmFyIHZqPWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9YS5tZW1vaXplZFByb3BzO2lmKGYhPT1kKXthPWIuc3RhdGVOb2RlOyRhKGthLmN1cnJlbnQpO2U9bnVsbDtzd2l0Y2goYyl7Y2FzZSAiaW5wdXQiOmY9TWQoYSxmKTtkPU1kKGEsZCk7ZT1bXTticmVhaztjYXNlICJvcHRpb24iOmY9UGQoYSxmKTtkPVBkKGEsZCk7ZT1bXTticmVhaztjYXNlICJzZWxlY3QiOmY9DQpCKHt9LGYse3ZhbHVlOnZvaWQgMH0pO2Q9Qih7fSxkLHt2YWx1ZTp2b2lkIDB9KTtlPVtdO2JyZWFrO2Nhc2UgInRleHRhcmVhIjpmPVFkKGEsZik7ZD1RZChhLGQpO2U9W107YnJlYWs7ZGVmYXVsdDoiZnVuY3Rpb24iIT09dHlwZW9mIGYub25DbGljayYmImZ1bmN0aW9uIj09PXR5cGVvZiBkLm9uQ2xpY2smJihhLm9uY2xpY2s9VmMpfVNkKGMsZCk7dmFyIGc7Yz1udWxsO2ZvcihsIGluIGYpaWYoIWQuaGFzT3duUHJvcGVydHkobCkmJmYuaGFzT3duUHJvcGVydHkobCkmJm51bGwhPWZbbF0paWYoInN0eWxlIj09PWwpe3ZhciBoPWZbbF07Zm9yKGcgaW4gaCloLmhhc093blByb3BlcnR5KGcpJiYoY3x8KGM9e30pLGNbZ109IiIpfWVsc2UiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiIT09bCYmImNoaWxkcmVuIiE9PWwmJiJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmciIT09bCYmInN1cHByZXNzSHlkcmF0aW9uV2FybmluZyIhPT1sJiYiYXV0b0ZvY3VzIiE9PWwmJihJYi5oYXNPd25Qcm9wZXJ0eShsKT8NCmV8fChlPVtdKTooZT1lfHxbXSkucHVzaChsLG51bGwpKTtmb3IobCBpbiBkKXt2YXIgaz1kW2xdO2g9bnVsbCE9Zj9mW2xdOnZvaWQgMDtpZihkLmhhc093blByb3BlcnR5KGwpJiZrIT09aCYmKG51bGwhPWt8fG51bGwhPWgpKWlmKCJzdHlsZSI9PT1sKWlmKGgpe2ZvcihnIGluIGgpIWguaGFzT3duUHJvcGVydHkoZyl8fGsmJmsuaGFzT3duUHJvcGVydHkoZyl8fChjfHwoYz17fSksY1tnXT0iIik7Zm9yKGcgaW4gaylrLmhhc093blByb3BlcnR5KGcpJiZoW2ddIT09a1tnXSYmKGN8fChjPXt9KSxjW2ddPWtbZ10pfWVsc2UgY3x8KGV8fChlPVtdKSxlLnB1c2gobCxjKSksYz1rO2Vsc2UiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiPT09bD8oaz1rP2suX19odG1sOnZvaWQgMCxoPWg/aC5fX2h0bWw6dm9pZCAwLG51bGwhPWsmJmghPT1rJiYoZT1lfHxbXSkucHVzaChsLGspKToiY2hpbGRyZW4iPT09bD8ic3RyaW5nIiE9PXR5cGVvZiBrJiYibnVtYmVyIiE9PXR5cGVvZiBrfHwoZT0NCmV8fFtdKS5wdXNoKGwsIiIrayk6InN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyIhPT1sJiYic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIiE9PWwmJihJYi5oYXNPd25Qcm9wZXJ0eShsKT8obnVsbCE9ayYmIm9uU2Nyb2xsIj09PWwmJnooInNjcm9sbCIsYSksZXx8aD09PWt8fChlPVtdKSk6Im9iamVjdCI9PT10eXBlb2YgayYmbnVsbCE9PWsmJmsuJCR0eXBlb2Y9PT10ZT9rLnRvU3RyaW5nKCk6KGU9ZXx8W10pLnB1c2gobCxrKSl9YyYmKGU9ZXx8W10pLnB1c2goInN0eWxlIixjKTt2YXIgbD1lO2lmKGIudXBkYXRlUXVldWU9bCliLmZsYWdzfD00fX07dmFyIHhqPWZ1bmN0aW9uKGEsYixjLGQpe2MhPT1kJiYoYi5mbGFnc3w9NCl9O3ZhciBLaj0iZnVuY3Rpb24iPT09dHlwZW9mIFdlYWtNYXA/V2Vha01hcDpNYXAsQ2o9ImZ1bmN0aW9uIj09PXR5cGVvZiBXZWFrU2V0P1dlYWtTZXQ6U2V0LEhqPU1hdGguY2VpbCx2ZD1mYi5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLGpmPQ0KZmIuUmVhY3RDdXJyZW50T3duZXIsbj0wLFI9bnVsbCxHPW51bGwsTz0wLHRhPTAsY2I9R2EoMCksTD0wLHdkPW51bGwsRmI9MCxMYT0wLENiPTAsaGY9MCxkZj1udWxsLGNmPTAsVmU9SW5maW5pdHksbD1udWxsLHJkPSExLFllPW51bGwsbmE9bnVsbCxTYT0hMSx0Yz1udWxsLHZjPTkwLG1mPVtdLG5mPVtdLHZhPW51bGwscmM9MCxlZj1udWxsLHNkPS0xLHVhPTAsdGQ9MCx1Yz1udWxsLHhkPSExO3ZhciBPaj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9Yi5sYW5lcztpZihudWxsIT09YSlpZihhLm1lbW9pemVkUHJvcHMhPT1iLnBlbmRpbmdQcm9wc3x8Si5jdXJyZW50KWZhPSEwO2Vsc2UgaWYoMCE9PShjJmQpKWZhPTAhPT0oYS5mbGFncyYxNjM4NCk/ITA6ITE7ZWxzZXtmYT0hMTtzd2l0Y2goYi50YWcpe2Nhc2UgMzpDaChiKTtIZSgpO2JyZWFrO2Nhc2UgNTppaChiKTticmVhaztjYXNlIDE6UyhiLnR5cGUpJiZYYyhiKTticmVhaztjYXNlIDQ6RWUoYixiLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTsNCmJyZWFrO2Nhc2UgMTA6ZD1iLm1lbW9pemVkUHJvcHMudmFsdWU7dmFyIGU9Yi50eXBlLl9jb250ZXh0O0EoYmQsZS5fY3VycmVudFZhbHVlKTtlLl9jdXJyZW50VmFsdWU9ZDticmVhaztjYXNlIDEzOmlmKG51bGwhPT1iLm1lbW9pemVkU3RhdGUpe2lmKDAhPT0oYyZiLmNoaWxkLmNoaWxkTGFuZXMpKXJldHVybiBEaChhLGIsYyk7QShFLEUuY3VycmVudCYxKTtiPXNhKGEsYixjKTtyZXR1cm4gbnVsbCE9PWI/Yi5zaWJsaW5nOm51bGx9QShFLEUuY3VycmVudCYxKTticmVhaztjYXNlIDE5OmQ9MCE9PShjJmIuY2hpbGRMYW5lcyk7aWYoMCE9PShhLmZsYWdzJjY0KSl7aWYoZClyZXR1cm4gSWgoYSxiLGMpO2IuZmxhZ3N8PTY0fWU9Yi5tZW1vaXplZFN0YXRlO251bGwhPT1lJiYoZS5yZW5kZXJpbmc9bnVsbCxlLnRhaWw9bnVsbCxlLmxhc3RFZmZlY3Q9bnVsbCk7QShFLEUuY3VycmVudCk7aWYoZClicmVhaztlbHNlIHJldHVybiBudWxsO2Nhc2UgMjM6Y2FzZSAyNDpyZXR1cm4gYi5sYW5lcz0NCjAsUmUoYSxiLGMpfXJldHVybiBzYShhLGIsYyl9ZWxzZSBmYT0hMTtiLmxhbmVzPTA7c3dpdGNoKGIudGFnKXtjYXNlIDI6ZD1iLnR5cGU7bnVsbCE9PWEmJihhLmFsdGVybmF0ZT1udWxsLGIuYWx0ZXJuYXRlPW51bGwsYi5mbGFnc3w9Mik7YT1iLnBlbmRpbmdQcm9wcztlPXZiKGIsRC5jdXJyZW50KTt5YihiLGMpO2U9S2UobnVsbCxiLGQsYSxlLGMpO2IuZmxhZ3N8PTE7aWYoIm9iamVjdCI9PT10eXBlb2YgZSYmbnVsbCE9PWUmJiJmdW5jdGlvbiI9PT10eXBlb2YgZS5yZW5kZXImJnZvaWQgMD09PWUuJCR0eXBlb2Ype2IudGFnPTE7Yi5tZW1vaXplZFN0YXRlPW51bGw7Yi51cGRhdGVRdWV1ZT1udWxsO2lmKFMoZCkpe3ZhciBmPSEwO1hjKGIpfWVsc2UgZj0hMTtiLm1lbW9pemVkU3RhdGU9bnVsbCE9PWUuc3RhdGUmJnZvaWQgMCE9PWUuc3RhdGU/ZS5zdGF0ZTpudWxsO0FlKGIpO3ZhciBnPWQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOyJmdW5jdGlvbiI9PT10eXBlb2YgZyYmDQpjZChiLGQsZyxhKTtlLnVwZGF0ZXI9ZGQ7Yi5zdGF0ZU5vZGU9ZTtlLl9yZWFjdEludGVybmFscz1iO0JlKGIsZCxhLGMpO2I9U2UobnVsbCxiLGQsITAsZixjKX1lbHNlIGIudGFnPTAsVShudWxsLGIsZSxjKSxiPWIuY2hpbGQ7cmV0dXJuIGI7Y2FzZSAxNjplPWIuZWxlbWVudFR5cGU7YTp7bnVsbCE9PWEmJihhLmFsdGVybmF0ZT1udWxsLGIuYWx0ZXJuYXRlPW51bGwsYi5mbGFnc3w9Mik7YT1iLnBlbmRpbmdQcm9wcztmPWUuX2luaXQ7ZT1mKGUuX3BheWxvYWQpO2IudHlwZT1lO2Y9Yi50YWc9VWooZSk7YT1lYShlLGEpO3N3aXRjaChmKXtjYXNlIDA6Yj1RZShudWxsLGIsZSxhLGMpO2JyZWFrIGE7Y2FzZSAxOmI9QmgobnVsbCxiLGUsYSxjKTticmVhayBhO2Nhc2UgMTE6Yj14aChudWxsLGIsZSxhLGMpO2JyZWFrIGE7Y2FzZSAxNDpiPXloKG51bGwsYixlLGVhKGUudHlwZSxhKSxkLGMpO2JyZWFrIGF9dGhyb3cgRXJyb3IobSgzMDYsZSwiIikpO31yZXR1cm4gYjtjYXNlIDA6cmV0dXJuIGQ9DQpiLnR5cGUsZT1iLnBlbmRpbmdQcm9wcyxlPWIuZWxlbWVudFR5cGU9PT1kP2U6ZWEoZCxlKSxRZShhLGIsZCxlLGMpO2Nhc2UgMTpyZXR1cm4gZD1iLnR5cGUsZT1iLnBlbmRpbmdQcm9wcyxlPWIuZWxlbWVudFR5cGU9PT1kP2U6ZWEoZCxlKSxCaChhLGIsZCxlLGMpO2Nhc2UgMzpDaChiKTtkPWIudXBkYXRlUXVldWU7aWYobnVsbD09PWF8fG51bGw9PT1kKXRocm93IEVycm9yKG0oMjgyKSk7ZD1iLnBlbmRpbmdQcm9wcztlPWIubWVtb2l6ZWRTdGF0ZTtlPW51bGwhPT1lP2UuZWxlbWVudDpudWxsO2FoKGEsYik7Y2MoYixkLG51bGwsYyk7ZD1iLm1lbW9pemVkU3RhdGUuZWxlbWVudDtpZihkPT09ZSlIZSgpLGI9c2EoYSxiLGMpO2Vsc2V7ZT1iLnN0YXRlTm9kZTtpZihmPWUuaHlkcmF0ZSlOYT10YihiLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLmZpcnN0Q2hpbGQpLHJhPWIsZj1sYT0hMDtpZihmKXthPWUubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YTtpZihudWxsIT0NCmEpZm9yKGU9MDtlPGEubGVuZ3RoO2UrPTIpZj1hW2VdLGYuX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnk9YVtlKzFdLEJiLnB1c2goZik7Yz13aChiLG51bGwsZCxjKTtmb3IoYi5jaGlsZD1jO2M7KWMuZmxhZ3M9Yy5mbGFncyYtM3wxMDI0LGM9Yy5zaWJsaW5nfWVsc2UgVShhLGIsZCxjKSxIZSgpO2I9Yi5jaGlsZH1yZXR1cm4gYjtjYXNlIDU6cmV0dXJuIGloKGIpLG51bGw9PT1hJiZHZShiKSxkPWIudHlwZSxlPWIucGVuZGluZ1Byb3BzLGY9bnVsbCE9PWE/YS5tZW1vaXplZFByb3BzOm51bGwsZz1lLmNoaWxkcmVuLHJlKGQsZSk/Zz1udWxsOm51bGwhPT1mJiZyZShkLGYpJiYoYi5mbGFnc3w9MTYpLEFoKGEsYiksVShhLGIsZyxjKSxiLmNoaWxkO2Nhc2UgNjpyZXR1cm4gbnVsbD09PWEmJkdlKGIpLG51bGw7Y2FzZSAxMzpyZXR1cm4gRGgoYSxiLGMpO2Nhc2UgNDpyZXR1cm4gRWUoYixiLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxkPWIucGVuZGluZ1Byb3BzLG51bGw9PT0NCmE/Yi5jaGlsZD1vZChiLG51bGwsZCxjKTpVKGEsYixkLGMpLGIuY2hpbGQ7Y2FzZSAxMTpyZXR1cm4gZD1iLnR5cGUsZT1iLnBlbmRpbmdQcm9wcyxlPWIuZWxlbWVudFR5cGU9PT1kP2U6ZWEoZCxlKSx4aChhLGIsZCxlLGMpO2Nhc2UgNzpyZXR1cm4gVShhLGIsYi5wZW5kaW5nUHJvcHMsYyksYi5jaGlsZDtjYXNlIDg6cmV0dXJuIFUoYSxiLGIucGVuZGluZ1Byb3BzLmNoaWxkcmVuLGMpLGIuY2hpbGQ7Y2FzZSAxMjpyZXR1cm4gVShhLGIsYi5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sYyksYi5jaGlsZDtjYXNlIDEwOmE6e2Q9Yi50eXBlLl9jb250ZXh0O2U9Yi5wZW5kaW5nUHJvcHM7Zz1iLm1lbW9pemVkUHJvcHM7Zj1lLnZhbHVlO3ZhciBoPWIudHlwZS5fY29udGV4dDtBKGJkLGguX2N1cnJlbnRWYWx1ZSk7aC5fY3VycmVudFZhbHVlPWY7aWYobnVsbCE9PWcpaWYoaD1nLnZhbHVlLGY9WChoLGYpPzA6KCJmdW5jdGlvbiI9PT10eXBlb2YgZC5fY2FsY3VsYXRlQ2hhbmdlZEJpdHM/DQpkLl9jYWxjdWxhdGVDaGFuZ2VkQml0cyhoLGYpOjEwNzM3NDE4MjMpfDAsMD09PWYpe2lmKGcuY2hpbGRyZW49PT1lLmNoaWxkcmVuJiYhSi5jdXJyZW50KXtiPXNhKGEsYixjKTticmVhayBhfX1lbHNlIGZvcihoPWIuY2hpbGQsbnVsbCE9PWgmJihoLnJldHVybj1iKTtudWxsIT09aDspe3ZhciBrPWguZGVwZW5kZW5jaWVzO2lmKG51bGwhPT1rKXtnPWguY2hpbGQ7Zm9yKHZhciBsPWsuZmlyc3RDb250ZXh0O251bGwhPT1sOyl7aWYobC5jb250ZXh0PT09ZCYmMCE9PShsLm9ic2VydmVkQml0cyZmKSl7MT09PWgudGFnJiYobD1JYSgtMSxjJi1jKSxsLnRhZz0yLEphKGgsbCkpO2gubGFuZXN8PWM7bD1oLmFsdGVybmF0ZTtudWxsIT09bCYmKGwubGFuZXN8PWMpOyRnKGgucmV0dXJuLGMpO2subGFuZXN8PWM7YnJlYWt9bD1sLm5leHR9fWVsc2UgZz0xMD09PWgudGFnP2gudHlwZT09PWIudHlwZT9udWxsOmguY2hpbGQ6aC5jaGlsZDtpZihudWxsIT09ZylnLnJldHVybj1oO2Vsc2UgZm9yKGc9DQpoO251bGwhPT1nOyl7aWYoZz09PWIpe2c9bnVsbDticmVha31oPWcuc2libGluZztpZihudWxsIT09aCl7aC5yZXR1cm49Zy5yZXR1cm47Zz1oO2JyZWFrfWc9Zy5yZXR1cm59aD1nfVUoYSxiLGUuY2hpbGRyZW4sYyk7Yj1iLmNoaWxkfXJldHVybiBiO2Nhc2UgOTpyZXR1cm4gZT1iLnR5cGUsZj1iLnBlbmRpbmdQcm9wcyxkPWYuY2hpbGRyZW4seWIoYixjKSxlPVkoZSxmLnVuc3RhYmxlX29ic2VydmVkQml0cyksZD1kKGUpLGIuZmxhZ3N8PTEsVShhLGIsZCxjKSxiLmNoaWxkO2Nhc2UgMTQ6cmV0dXJuIGU9Yi50eXBlLGY9ZWEoZSxiLnBlbmRpbmdQcm9wcyksZj1lYShlLnR5cGUsZikseWgoYSxiLGUsZixkLGMpO2Nhc2UgMTU6cmV0dXJuIHpoKGEsYixiLnR5cGUsYi5wZW5kaW5nUHJvcHMsZCxjKTtjYXNlIDE3OnJldHVybiBkPWIudHlwZSxlPWIucGVuZGluZ1Byb3BzLGU9Yi5lbGVtZW50VHlwZT09PWQ/ZTplYShkLGUpLG51bGwhPT1hJiYoYS5hbHRlcm5hdGU9bnVsbCxiLmFsdGVybmF0ZT0NCm51bGwsYi5mbGFnc3w9MiksYi50YWc9MSxTKGQpPyhhPSEwLFhjKGIpKTphPSExLHliKGIsYyksZWgoYixkLGUpLEJlKGIsZCxlLGMpLFNlKG51bGwsYixkLCEwLGEsYyk7Y2FzZSAxOTpyZXR1cm4gSWgoYSxiLGMpO2Nhc2UgMjM6cmV0dXJuIFJlKGEsYixjKTtjYXNlIDI0OnJldHVybiBSZShhLGIsYyl9dGhyb3cgRXJyb3IobSgxNTYsYi50YWcpKTt9O3ZhciBaPWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBuZXcgVGooYSxiLGMsZCl9O3NmLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oYSl7eWQoYSx0aGlzLl9pbnRlcm5hbFJvb3QsbnVsbCxudWxsKX07c2YucHJvdG90eXBlLnVubW91bnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9pbnRlcm5hbFJvb3QsYj1hLmNvbnRhaW5lckluZm87eWQobnVsbCxhLG51bGwsZnVuY3Rpb24oKXtiW3JiXT1udWxsfSl9O3ZhciBEaT1mdW5jdGlvbihhKXtpZigxMz09PWEudGFnKXt2YXIgYj1XKCk7UGEoYSw0LGIpO3JmKGEsNCl9fTt2YXIgWGY9DQpmdW5jdGlvbihhKXtpZigxMz09PWEudGFnKXt2YXIgYj1XKCk7UGEoYSw2NzEwODg2NCxiKTtyZihhLDY3MTA4ODY0KX19O3ZhciBCaT1mdW5jdGlvbihhKXtpZigxMz09PWEudGFnKXt2YXIgYj1XKCksYz1PYShhKTtQYShhLGMsYik7cmYoYSxjKX19O3ZhciBBaT1mdW5jdGlvbihhLGIpe3JldHVybiBiKCl9O1ZkPWZ1bmN0aW9uKGEsYixjKXtzd2l0Y2goYil7Y2FzZSAiaW5wdXQiOk5kKGEsYyk7Yj1jLm5hbWU7aWYoInJhZGlvIj09PWMudHlwZSYmbnVsbCE9Yil7Zm9yKGM9YTtjLnBhcmVudE5vZGU7KWM9Yy5wYXJlbnROb2RlO2M9Yy5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dFtuYW1lPSIrSlNPTi5zdHJpbmdpZnkoIiIrYikrJ11bdHlwZT0icmFkaW8iXScpO2ZvcihiPTA7YjxjLmxlbmd0aDtiKyspe3ZhciBkPWNbYl07aWYoZCE9PWEmJmQuZm9ybT09PWEuZm9ybSl7dmFyIGU9SGMoZCk7aWYoIWUpdGhyb3cgRXJyb3IobSg5MCkpO0VmKGQpO05kKGQsZSl9fX1icmVhaztjYXNlICJ0ZXh0YXJlYSI6SmYoYSwNCmMpO2JyZWFrO2Nhc2UgInNlbGVjdCI6Yj1jLnZhbHVlLG51bGwhPWImJmliKGEsISFjLm11bHRpcGxlLGIsITEpfX07KGZ1bmN0aW9uKGEsYixjLGQpe2xlPWE7ZWc9YjtYZD1jO1JmPWR9KSgkaCxmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPW47bnw9NDt0cnl7cmV0dXJuIFphKDk4LGEuYmluZChudWxsLGIsYyxkLGUpKX1maW5hbGx5e249ZiwwPT09biYmKEViKCksamEoKSl9fSxmdW5jdGlvbigpezA9PT0obiY0OSkmJihJaigpLFJhKCkpfSxmdW5jdGlvbihhLGIpe3ZhciBjPW47bnw9Mjt0cnl7cmV0dXJuIGEoYil9ZmluYWxseXtuPWMsMD09PW4mJihFYigpLGphKCkpfX0pO3ZhciB1az17RXZlbnRzOltPYixwYixIYyxQZixRZixSYSx7Y3VycmVudDohMX1dfTsoZnVuY3Rpb24oYSl7YT17YnVuZGxlVHlwZTphLmJ1bmRsZVR5cGUsdmVyc2lvbjphLnZlcnNpb24scmVuZGVyZXJQYWNrYWdlTmFtZTphLnJlbmRlcmVyUGFja2FnZU5hbWUscmVuZGVyZXJDb25maWc6YS5yZW5kZXJlckNvbmZpZywNCm92ZXJyaWRlSG9va1N0YXRlOm51bGwsb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoOm51bGwsb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoOm51bGwsb3ZlcnJpZGVQcm9wczpudWxsLG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoOm51bGwsb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGg6bnVsbCxzZXRTdXNwZW5zZUhhbmRsZXI6bnVsbCxzY2hlZHVsZVVwZGF0ZTpudWxsLGN1cnJlbnREaXNwYXRjaGVyUmVmOmZiLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsZmluZEhvc3RJbnN0YW5jZUJ5RmliZXI6WGosZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6YS5maW5kRmliZXJCeUhvc3RJbnN0YW5jZXx8WWosZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoOm51bGwsc2NoZWR1bGVSZWZyZXNoOm51bGwsc2NoZWR1bGVSb290Om51bGwsc2V0UmVmcmVzaEhhbmRsZXI6bnVsbCxnZXRDdXJyZW50RmliZXI6bnVsbH07aWYoInVuZGVmaW5lZCI9PT10eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fKWE9DQohMTtlbHNle3ZhciBiPV9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztpZighYi5pc0Rpc2FibGVkJiZiLnN1cHBvcnRzRmliZXIpdHJ5e1plPWIuaW5qZWN0KGEpLGRiPWJ9Y2F0Y2goYyl7fWE9ITB9cmV0dXJuIGF9KSh7ZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6V2EsYnVuZGxlVHlwZTowLHZlcnNpb246IjE3LjAuMCIscmVuZGVyZXJQYWNrYWdlTmFtZToicmVhY3QtZG9tIn0pO00uX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ9dWs7TS5jcmVhdGVQb3J0YWw9Z2k7TS5maW5kRE9NTm9kZT1mdW5jdGlvbihhKXtpZihudWxsPT1hKXJldHVybiBudWxsO2lmKDE9PT1hLm5vZGVUeXBlKXJldHVybiBhO3ZhciBiPWEuX3JlYWN0SW50ZXJuYWxzO2lmKHZvaWQgMD09PWIpe2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgYS5yZW5kZXIpdGhyb3cgRXJyb3IobSgxODgpKTt0aHJvdyBFcnJvcihtKDI2OCxPYmplY3Qua2V5cyhhKSkpOw0KfWE9VWYoYik7YT1udWxsPT09YT9udWxsOmEuc3RhdGVOb2RlO3JldHVybiBhfTtNLmZsdXNoU3luYz1mdW5jdGlvbihhLGIpe3ZhciBjPW47aWYoMCE9PShjJjQ4KSlyZXR1cm4gYShiKTtufD0xO3RyeXtpZihhKXJldHVybiBaYSg5OSxhLmJpbmQobnVsbCxiKSl9ZmluYWxseXtuPWMsamEoKX19O00uaHlkcmF0ZT1mdW5jdGlvbihhLGIsYyl7aWYoIXdjKGIpKXRocm93IEVycm9yKG0oMjAwKSk7cmV0dXJuIHpkKG51bGwsYSxiLCEwLGMpfTtNLnJlbmRlcj1mdW5jdGlvbihhLGIsYyl7aWYoIXdjKGIpKXRocm93IEVycm9yKG0oMjAwKSk7cmV0dXJuIHpkKG51bGwsYSxiLCExLGMpfTtNLnVubW91bnRDb21wb25lbnRBdE5vZGU9ZnVuY3Rpb24oYSl7aWYoIXdjKGEpKXRocm93IEVycm9yKG0oNDApKTtyZXR1cm4gYS5fcmVhY3RSb290Q29udGFpbmVyPyhhaShmdW5jdGlvbigpe3pkKG51bGwsbnVsbCxhLCExLGZ1bmN0aW9uKCl7YS5fcmVhY3RSb290Q29udGFpbmVyPW51bGw7YVtyYl09DQpudWxsfSl9KSwhMCk6ITF9O00udW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM9JGg7TS51bnN0YWJsZV9jcmVhdGVQb3J0YWw9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZ2koYSxiLDI8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsKX07TS51bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcj1mdW5jdGlvbihhLGIsYyxkKXtpZighd2MoYykpdGhyb3cgRXJyb3IobSgyMDApKTtpZihudWxsPT1hfHx2b2lkIDA9PT1hLl9yZWFjdEludGVybmFscyl0aHJvdyBFcnJvcihtKDM4KSk7cmV0dXJuIHpkKGEsYixjLCExLGQpfTtNLnZlcnNpb249IjE3LjAuMCJ9KTsNCn0pKCk7DQo="></script> <script src="data:application/javascript;base64,LyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAovKioqKioqLyAJLy8gVGhlIG1vZHVsZSBjYWNoZQovKioqKioqLyAJdmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTsKLyoqKioqKi8KLyoqKioqKi8gCS8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uCi8qKioqKiovIAlmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7Ci8qKioqKiovCi8qKioqKiovIAkJLy8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlCi8qKioqKiovIAkJaWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHsKLyoqKioqKi8gCQkJcmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7Ci8qKioqKiovIAkJfQovKioqKioqLyAJCS8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpCi8qKioqKiovIAkJdmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0gewovKioqKioqLyAJCQlpOiBtb2R1bGVJZCwKLyoqKioqKi8gCQkJbDogZmFsc2UsCi8qKioqKiovIAkJCWV4cG9ydHM6IHt9Ci8qKioqKiovIAkJfTsKLyoqKioqKi8KLyoqKioqKi8gCQkvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb24KLyoqKioqKi8gCQltb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTsKLyoqKioqKi8KLyoqKioqKi8gCQkvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkCi8qKioqKiovIAkJbW9kdWxlLmwgPSB0cnVlOwovKioqKioqLwovKioqKioqLyAJCS8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlCi8qKioqKiovIAkJcmV0dXJuIG1vZHVsZS5leHBvcnRzOwovKioqKioqLyAJfQovKioqKioqLwovKioqKioqLwovKioqKioqLyAJLy8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXykKLyoqKioqKi8gCV9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7Ci8qKioqKiovCi8qKioqKiovIAkvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZQovKioqKioqLyAJX193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlczsKLyoqKioqKi8KLyoqKioqKi8gCS8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0cwovKioqKioqLyAJX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7Ci8qKioqKiovIAkJaWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkgewovKioqKioqLyAJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTsKLyoqKioqKi8gCQl9Ci8qKioqKiovIAl9OwovKioqKioqLwovKioqKioqLyAJLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0cwovKioqKioqLyAJX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykgewovKioqKioqLyAJCWlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykgewovKioqKioqLyAJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTsKLyoqKioqKi8gCQl9Ci8qKioqKiovIAkJT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTsKLyoqKioqKi8gCX07Ci8qKioqKiovCi8qKioqKiovIAkvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3QKLyoqKioqKi8gCS8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdAovKioqKioqLyAJLy8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zCi8qKioqKiovIAkvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3QKLyoqKioqKi8gCS8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmUKLyoqKioqKi8gCV9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7Ci8qKioqKiovIAkJaWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7Ci8qKioqKiovIAkJaWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTsKLyoqKioqKi8gCQlpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlOwovKioqKioqLyAJCXZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7Ci8qKioqKiovIAkJX193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTsKLyoqKioqKi8gCQlPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7Ci8qKioqKiovIAkJaWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpOwovKioqKioqLyAJCXJldHVybiBuczsKLyoqKioqKi8gCX07Ci8qKioqKiovCi8qKioqKiovIAkvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlcwovKioqKioqLyAJX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7Ci8qKioqKiovIAkJdmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/Ci8qKioqKiovIAkJCWZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6Ci8qKioqKiovIAkJCWZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07Ci8qKioqKiovIAkJX193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpOwovKioqKioqLyAJCXJldHVybiBnZXR0ZXI7Ci8qKioqKiovIAl9OwovKioqKioqLwovKioqKioqLyAJLy8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsCi8qKioqKiovIAlfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07Ci8qKioqKiovCi8qKioqKiovIAkvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfXwovKioqKioqLyAJX193ZWJwYWNrX3JlcXVpcmVfXy5wID0gIiI7Ci8qKioqKiovCi8qKioqKiovCi8qKioqKiovIAkvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHMKLyoqKioqKi8gCXJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9ICIuL3NyY2pzL3JlYWN0LXRvb2xzLmpzIik7Ci8qKioqKiovIH0pCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKiovICh7CgovKioqLyAiLi9zcmNqcy9pbnB1dC5qcyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICEqKiogLi9zcmNqcy9pbnB1dC5qcyAqKiohCiAgXCoqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlYWN0U2hpbnlJbnB1dCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoidXNlIHN0cmljdCI7Cl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAicmVhY3RTaGlueUlucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiByZWFjdFNoaW55SW5wdXQ7IH0pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHJlYWN0ICovICJyZWFjdCIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihyZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X2RvbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgcmVhY3QtZG9tICovICJyZWFjdC1kb20iKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X2RvbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHJlYWN0X2RvbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHNoaW55X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBzaGlueSAqLyAic2hpbnkiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHNoaW55X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oc2hpbnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBqcXVlcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGpxdWVyeSAqLyAianF1ZXJ5Iik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBqcXVlcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihqcXVlcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyk7CmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7ICJAYmFiZWwvaGVscGVycyAtIHR5cGVvZiI7IGlmICh0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICJzeW1ib2wiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyAic3ltYm9sIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfQoKZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTsgfSB9CgpmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmICgidmFsdWUiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfQoKZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH0KCmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09ICJmdW5jdGlvbiIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH0KCmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9CgpmdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfQoKZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gIm9iamVjdCIgfHwgdHlwZW9mIGNhbGwgPT09ICJmdW5jdGlvbiIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9CgpmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpOyB9IHJldHVybiBzZWxmOyB9CgpmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICJ1bmRlZmluZWQiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSAiZnVuY3Rpb24iKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH0KCmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH0KCgoKCgovKg0KICogVGhpcyBkZWZhdWx0IHJlY2VpdmVNZXNzYWdlIGltcGxlbWVudGF0aW9uIGV4cGVjdHMgZGF0YSB0byBjb250YWluIHdob2xlDQogKiBjb25maWd1cmF0aW9uIGFuZCB2YWx1ZSBwcm9wZXJ0aWVzLiBJZiBlaXRoZXIgaXMgcHJlc2VudCwgaXQgd2lsbCBiZSBzZXQgYW5kDQogKiB0aGUgY29tcG9uZW50IHdpbGwgYmUgcmUtcmVuZGVyZWQuIEJlY2F1c2UgcmVjZWl2ZU1lc3NhZ2UgaXMgdHlwaWNhbGx5IHVzZWQNCiAqIGJ5IGlucHV0IGF1dGhvcnMgdG8gcGVyZm9ybSBpbmNyZW1lbnRhbCB1cGRhdGVzLCB0aGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24NCiAqIGNhbiBiZSBvdmVycmlkZW4gYnkgdGhlIHVzZXIgd2l0aCB0aGUgcmVjZWl2ZU1lc3NhZ2UgYXJndW1lbnRzIHRvDQogKiByZWFjdFNoaW55SW5wdXQuDQogKi8KCmZ1bmN0aW9uIGRlZmF1bHRSZWNlaXZlTWVzc2FnZShlbCwgX3JlZikgewogIHZhciBjb25maWd1cmF0aW9uID0gX3JlZi5jb25maWd1cmF0aW9uLAogICAgICB2YWx1ZSA9IF9yZWYudmFsdWU7CiAgdmFyIGRpcnR5ID0gZmFsc2U7CgogIGlmIChjb25maWd1cmF0aW9uICE9PSB1bmRlZmluZWQpIHsKICAgIHRoaXMuc2V0SW5wdXRDb25maWd1cmF0aW9uKGVsLCBjb25maWd1cmF0aW9uKTsKICAgIGRpcnR5ID0gdHJ1ZTsKICB9CgogIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7CiAgICB0aGlzLnNldElucHV0VmFsdWUoZWwsIHZhbHVlKTsKICAgIGRpcnR5ID0gdHJ1ZTsKICB9CgogIGlmIChkaXJ0eSkgewogICAgdGhpcy5nZXRDYWxsYmFjayhlbCkoKTsKICAgIHRoaXMucmVuZGVyKGVsKTsKICB9Cn0KCnZhciBkZWZhdWx0T3B0aW9ucyA9IHsKICByZWNlaXZlTWVzc2FnZTogZGVmYXVsdFJlY2VpdmVNZXNzYWdlLAogIHR5cGU6IGZhbHNlLAogIHJhdGVQb2xpY3k6IG51bGwKfTsKLyoqDQogKiBJbnN0YWxscyBhIG5ldyBTaGlueSBpbnB1dCBiaW5kaW5nIGJhc2VkIG9uIGEgUmVhY3QgY29tcG9uZW50Lg0KICoNCiAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIGpRdWVyeSBzZWxlY3RvciB0aGF0IHNob3VsZCBpZGVudGlmeSB0aGUgc2V0IG9mDQogKiBjb250YWluZXIgZWxlbWVudHMgd2l0aGluIHRoZSBzY29wZSBhcmd1bWVudCBvZiBTaGlueS5JbnB1dEJpbmRpbmcuZmluZC4NCiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gQSBuYW1lIHN1Y2ggYXMgJ2FjbWUuRm9vSW5wdXQnIHRoYXQgc2hvdWxkIHVuaXF1ZWx5DQogKiBpZGVudGlmeSB0aGUgY29tcG9uZW50Lg0KICogQHBhcmFtIHtPYmplY3R9IGNvbXBvbmVudCAtIFJlYWN0IENvbXBvbmVudCwgZWl0aGVyIGNsYXNzIG9yIGZ1bmN0aW9uLg0KICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gU3VwcG9ydGVkDQogKiBvcHRpb25zIGFyZToNCiAqIC0gcmVjZWl2ZU1lc3NhZ2U6IEltcGxlbWVudGF0aW9uIG9mIFNoaW55LklucHV0QmluZGluZyB0byB1c2UgaW4gcGxhY2Ugb2YNCiAqICAgdGhlIGRlZmF1bHQuIFR5cGljYWxseSBvdmVycmlkZGVuIGFzIGFuIG9wdGltaXphdGlvbiB0byBwZXJmb3JtDQogKiAgIGluY3JlbWVudGFsIHZhbHVlIHVwZGF0ZXMuDQogKiAtIHR5cGU6IGBmYWxzZWAsIGEgc3RyaW5nLCBvciBhIGZ1bmN0aW9uLg0KICogICAgIC0gYGZhbHNlYCAodGhlIGRlZmF1bHQpOiBkZW5vdGVzIHRoYXQgdGhlIHZhbHVlIHByb2R1Y2VkIGJ5IHRoaXMgaW5wdXQNCiAqICAgICAgIHNob3VsZCBub3QgYmUgaW50ZXJjZXB0ZWQgYnkgYW55IGhhbmRsZXJzIHJlZ2lzdGVyZWQgaW4gUiBvbiB0aGUNCiAqICAgICAgIHNlcnZlciB1c2luZyBzaGlueTo6cmVnaXN0ZXJJbnB1dEhhbmRsZXIoKS4NCiAqICAgICAtIHN0cmluZzogZGVub3RlcyB0aGUgaW5wdXQncyAqdHlwZSogYW5kIHNob3VsZCBjb3JyZXNwb25kIHRvIHRoZQ0KICogICAgICAgdHlwZSBwYXJhbWV0ZXIgb2Ygc2hpbnk6OnJlZ2lzdGVySW5wdXRIYW5kbGVyKCkuDQogKiAgICAgLSBmdW5jdGlvbjogQSBmdW5jdGlvbiBjYWxsZWQgd2l0aCBgdGhpc2AgYm91bmQgdG8gdGhlIElucHV0QmluZGluZw0KICogICAgICAgaW5zdGFuY2UgYW5kIHBhc3NlZCBhIHNpbmdsZSBhcmd1bWVudCwgdGhlIGlucHV0J3MgY29udGFpbmluZyBET00NCiAqICAgICAgIGVsZW1lbnQuIFRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGVpdGhlciBgZmFsc2VgIG9yIGEgc3RyaW5nDQogKiAgICAgICBjb3JyZXNwb25kaW5nIHRvIHRoZSB0eXBlIHBhcmFtZXRlciBvZiBzaGlueTo6cmVnaXN0ZXJJbnB1dEhhbmRsZXIoKS4NCiAqIC0gcmF0ZVBvbGljeTogQSByYXRlIHBvbGljeSBvYmplY3QgYXMgZGVmaW5lZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3INCiAqICAgICBnZXRSYXRlUG9saWN5KCk6IGh0dHBzOi8vc2hpbnkucnN0dWRpby5jb20vYXJ0aWNsZXMvYnVpbGRpbmctaW5wdXRzLmh0bWwNCiAqICAgICBBIHJhdGUgcG9saWN5IG9iamVjdCBoYXMgdHdvIG1lbWJlcnM6DQogKiAgICAgLSBgcG9saWN5YDogVmFsaWQgdmFsdWVzIGFyZSB0aGUgc3RyaW5ncyAiZGlyZWN0IiwgImRlYm91bmNlIiwgYW5kDQogKiAgICAgICAidGhyb3R0bGUiLiAiZGlyZWN0IiBtZWFucyB0aGF0IGFsbCBldmVudHMgYXJlIHNlbnQgaW1tZWRpYXRlbHkuDQogKiAgICAgLSBgZGVsYXlgOiBOdW1iZXIgaW5kaWNhdGluZyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0aGF0IHNob3VsZCBiZQ0KICogICAgICAgdXNlZCB3aGVuIGRlYm91bmNpbmcgb3IgdGhyb3R0bGluZy4gSGFzIG5vIGVmZmVjdCBpZiB0aGUgcG9saWN5IGlzDQogKiAgICAgICBkaXJlY3QuDQogKiAgICAgVGhlIHNwZWNpZmllZCByYXRlIHBvbGljeSBpcyBvbmx5IGFwcGxpZWQgd2hlbiBgdHJ1ZWAgaXMgcGFzc2VkIGFzIHRoZQ0KICogICAgIHNlY29uZCBhcmd1bWVudCB0byB0aGUgYHNldFZhbHVlYCBmdW5jdGlvbiBwYXNzZWQgYXMgYSBwcm9wIHRvIHRoZQ0KICogICAgIGlucHV0IGNvbXBvbmVudC4NCiAqDQogKi8KCmZ1bmN0aW9uIHJlYWN0U2hpbnlJbnB1dChzZWxlY3RvciwgbmFtZSwgY29tcG9uZW50LCBvcHRpb25zKSB7CiAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTsKICBzaGlueV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQuYS5pbnB1dEJpbmRpbmdzLnJlZ2lzdGVyKG5ldyAoIC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1NoaW55JElucHV0QmluZGluZykgewogICAgX2luaGVyaXRzKF9jbGFzcywgX1NoaW55JElucHV0QmluZGluZyk7CgogICAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihfY2xhc3MpOwoKICAgIGZ1bmN0aW9uIF9jbGFzcygpIHsKICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIF9jbGFzcyk7CgogICAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICB9CgogICAgX2NyZWF0ZUNsYXNzKF9jbGFzcywgW3sKICAgICAga2V5OiAiZmluZCIsCgogICAgICAvKg0KICAgICAgICogTWV0aG9kcyBvdmVycmlkZSB0aG9zZSBpbiBTaGlueS5JbnB1dEJpbmRpbmcNCiAgICAgICAqLwogICAgICB2YWx1ZTogZnVuY3Rpb24gZmluZChzY29wZSkgewogICAgICAgIHJldHVybiBqcXVlcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX19kZWZhdWx0KCkoc2NvcGUpLmZpbmQoc2VsZWN0b3IpOwogICAgICB9CiAgICB9LCB7CiAgICAgIGtleTogImdldFZhbHVlIiwKICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlKGVsKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SW5wdXRWYWx1ZShlbCk7CiAgICAgIH0KICAgIH0sIHsKICAgICAga2V5OiAic2V0VmFsdWUiLAogICAgICB2YWx1ZTogZnVuY3Rpb24gc2V0VmFsdWUoZWwsIHZhbHVlKSB7CiAgICAgICAgdmFyIHJhdGVMaW1pdGVkID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTsKCiAgICAgICAgLyoNCiAgICAgICAgICogV2UgaGF2ZSB0byBjaGVjayB3aGV0aGVyICQoZWwpLmRhdGEoJ2NhbGxiYWNrJykgaXMgdW5kZWZpbmVkIGhlcmUNCiAgICAgICAgICogaW4gY2FzZSBzaGlueTo6cmVuZGVyVUkoKSBpcyBpbnZvbHZlZC4gSWYgYW4gaW5wdXQgaXMgY29udGFpbmVkIGluIGENCiAgICAgICAgICogc2hpbnk6OnVpT3V0cHV0KCksIHRoZSBmb2xsb3dpbmcgc3RyYW5nZSB0aGluZyBoYXBwZW5zIG9jY2FzaW9uYWxseToNCiAgICAgICAgICoNCiAgICAgICAgICogICAxLiBzZXRWYWx1ZSgpIGlzIGJvdW5kIHRvIGFuIGVsIGluIHRoaXMucmVuZGVyKCksIGJlbG93DQogICAgICAgICAqICAgMi4gQW4gZXZlbnQgdGhhdCB3aWxsIGNhbGwgc2V0VmFsdWUoKSBpcyBlbnF1ZXVlZA0KICAgICAgICAgKiAgIDMuIFdoaWxlIHRoZSBldmVudCBpcyBzdGlsbCBlbnF1ZXVlZCwgZWwgaXMgdW5ib3VuZCBhbmQgcmVtb3ZlZA0KICAgICAgICAgKiAgICAgIGZyb20gdGhlIERPTSBieSB0aGUgSlMgY29kZSBhc3NvY2lhdGVkIHdpdGggc2hpbnk6OnVpT3V0cHV0KCkNCiAgICAgICAgICogICAgICAtIFRoYXQgY29kZSB1c2VzIGpRdWVyeSAuaHRtbCgpIGluIG91dHB1dF9iaW5kaW5nX2h0bWwuanMNCiAgICAgICAgICogICAgICAtIC5odG1sKCkgcmVtb3ZlcyBlbCBmcm9tIHRoZSBET00gYW5kIGNsZWFycyBpc3QgZGF0YSBhbmQgZXZlbnRzDQogICAgICAgICAqICAgNC4gQnkgdGhlIHRpbWUgdGhlIHNldFZhbHVlKCkgYm91bmQgdG8gdGhlIG9yaWdpbmFsIGVsIGlzIGludm9rZWQsDQogICAgICAgICAqICAgICAgZWwgaGFzIGJlZW4gdW5ib3VuZCBhbmQgaXRzIGRhdGEgY2xlYXJlZC4NCiAgICAgICAgICoNCiAgICAgICAgICogIFNpbmNlIHRoZSBvcmlnaW5hbCBpbnB1dCBpcyBnb25lIGFsb25nIHdpdGggaXRzIGNhbGxiYWNrLCBpdA0KICAgICAgICAgKiAgc2VlbXMgdG8gbWFrZSB0aGUgbW9zdCBzZW5zZSB0byBkbyBub3RoaW5nLg0KICAgICAgICAgKi8KICAgICAgICBpZiAoanF1ZXJ5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19fZGVmYXVsdCgpKGVsKS5kYXRhKCdjYWxsYmFjaycpICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgIHRoaXMuc2V0SW5wdXRWYWx1ZShlbCwgdmFsdWUpOwogICAgICAgICAgdGhpcy5nZXRDYWxsYmFjayhlbCkocmF0ZUxpbWl0ZWQpOwogICAgICAgICAgdGhpcy5yZW5kZXIoZWwpOwogICAgICAgIH0KICAgICAgfQogICAgfSwgewogICAgICBrZXk6ICJpbml0aWFsaXplIiwKICAgICAgdmFsdWU6IGZ1bmN0aW9uIGluaXRpYWxpemUoZWwpIHsKICAgICAgICBqcXVlcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX19kZWZhdWx0KCkoZWwpLmRhdGEoJ3ZhbHVlJywgSlNPTi5wYXJzZShqcXVlcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX19kZWZhdWx0KCkoZWwpLm5leHQoKS50ZXh0KCkpKTsKICAgICAgICBqcXVlcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX19kZWZhdWx0KCkoZWwpLmRhdGEoJ2NvbmZpZ3VyYXRpb24nLCBKU09OLnBhcnNlKGpxdWVyeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fX2RlZmF1bHQoKShlbCkubmV4dCgpLm5leHQoKS50ZXh0KCkpKTsKICAgICAgfQogICAgfSwgewogICAgICBrZXk6ICJzdWJzY3JpYmUiLAogICAgICB2YWx1ZTogZnVuY3Rpb24gc3Vic2NyaWJlKGVsLCBjYWxsYmFjaykgewogICAgICAgIGpxdWVyeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fX2RlZmF1bHQoKShlbCkuZGF0YSgnY2FsbGJhY2snLCBjYWxsYmFjayk7CiAgICAgICAgdGhpcy5yZW5kZXIoZWwpOwogICAgICB9CiAgICB9LCB7CiAgICAgIGtleTogInVuc3Vic2NyaWJlIiwKICAgICAgdmFsdWU6IGZ1bmN0aW9uIHVuc3Vic2NyaWJlKGVsKSB7CiAgICAgICAgcmVhY3RfZG9tX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLnJlbmRlcihudWxsLCBlbCk7CiAgICAgIH0KICAgIH0sIHsKICAgICAga2V5OiAicmVjZWl2ZU1lc3NhZ2UiLAogICAgICB2YWx1ZTogZnVuY3Rpb24gcmVjZWl2ZU1lc3NhZ2UoZWwsIGRhdGEpIHsKICAgICAgICBvcHRpb25zLnJlY2VpdmVNZXNzYWdlLmNhbGwodGhpcywgZWwsIGRhdGEpOwogICAgICB9CiAgICB9LCB7CiAgICAgIGtleTogImdldFR5cGUiLAogICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VHlwZShlbCkgewogICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50eXBlID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICByZXR1cm4gb3B0aW9ucy50eXBlLmNhbGwodGhpcywgZWwpOwogICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy50eXBlID09PSBmYWxzZSB8fCB0eXBlb2Ygb3B0aW9ucy50eXBlID09PSAnc3RyaW5nJykgewogICAgICAgICAgcmV0dXJuIG9wdGlvbnMudHlwZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zLnR5cGUgbXVzdCBiZSBmYWxzZSwgYSBzdHJpbmcsIG9yIGEgZnVuY3Rpb24nKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0sIHsKICAgICAga2V5OiAiZ2V0UmF0ZVBvbGljeSIsCiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSYXRlUG9saWN5KCkgewogICAgICAgIHJldHVybiBvcHRpb25zLnJhdGVQb2xpY3k7CiAgICAgIH0KICAgICAgLyoNCiAgICAgICAqIE1ldGhvZHMgbm90IHByZXNlbnQgaW4gU2hpbnkuSW5wdXRCaW5kaW5nIGJ1dCBhY2Nlc3NpYmxlIHRvIHVzZXJzDQogICAgICAgKiB0aHJvdWdoIGB0aGlzYCBpbiByZWNlaXZlTWVzc2FnZQ0KICAgICAgICovCgogICAgfSwgewogICAgICBrZXk6ICJnZXRJbnB1dFZhbHVlIiwKICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldElucHV0VmFsdWUoZWwpIHsKICAgICAgICByZXR1cm4ganF1ZXJ5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19fZGVmYXVsdCgpKGVsKS5kYXRhKCd2YWx1ZScpOwogICAgICB9CiAgICB9LCB7CiAgICAgIGtleTogInNldElucHV0VmFsdWUiLAogICAgICB2YWx1ZTogZnVuY3Rpb24gc2V0SW5wdXRWYWx1ZShlbCwgdmFsdWUpIHsKICAgICAgICBqcXVlcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX19kZWZhdWx0KCkoZWwpLmRhdGEoJ3ZhbHVlJywgdmFsdWUpOwogICAgICB9CiAgICB9LCB7CiAgICAgIGtleTogImdldElucHV0Q29uZmlndXJhdGlvbiIsCiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJbnB1dENvbmZpZ3VyYXRpb24oZWwpIHsKICAgICAgICByZXR1cm4ganF1ZXJ5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19fZGVmYXVsdCgpKGVsKS5kYXRhKCdjb25maWd1cmF0aW9uJyk7CiAgICAgIH0KICAgIH0sIHsKICAgICAga2V5OiAic2V0SW5wdXRDb25maWd1cmF0aW9uIiwKICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNldElucHV0Q29uZmlndXJhdGlvbihlbCwgY29uZmlndXJhdGlvbikgewogICAgICAgIGpxdWVyeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fX2RlZmF1bHQoKShlbCkuZGF0YSgnY29uZmlndXJhdGlvbicsIGNvbmZpZ3VyYXRpb24pOwogICAgICB9CiAgICB9LCB7CiAgICAgIGtleTogImdldENhbGxiYWNrIiwKICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldENhbGxiYWNrKGVsKSB7CiAgICAgICAgcmV0dXJuIGpxdWVyeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fX2RlZmF1bHQoKShlbCkuZGF0YSgnY2FsbGJhY2snKTsKICAgICAgfQogICAgfSwgewogICAgICBrZXk6ICJyZW5kZXIiLAogICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKGVsKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChjb21wb25lbnQsIHsKICAgICAgICAgIGNvbmZpZ3VyYXRpb246IHRoaXMuZ2V0SW5wdXRDb25maWd1cmF0aW9uKGVsKSwKICAgICAgICAgIHZhbHVlOiB0aGlzLmdldFZhbHVlKGVsKSwKICAgICAgICAgIHNldFZhbHVlOiB0aGlzLnNldFZhbHVlLmJpbmQodGhpcywgZWwpLAogICAgICAgICAgZWw6IGVsCiAgICAgICAgfSk7CiAgICAgICAgcmVhY3RfZG9tX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLnJlbmRlcihlbGVtZW50LCBlbCk7CiAgICAgIH0KICAgIH1dKTsKCiAgICByZXR1cm4gX2NsYXNzOwogIH0oc2hpbnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0LmEuSW5wdXRCaW5kaW5nKSkoKSwgbmFtZSk7Cn0KCi8qKiovIH0pLAoKLyoqKi8gIi4vc3JjanMvcmVhY3QtdG9vbHMuanMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAhKioqIC4vc3JjanMvcmVhY3QtdG9vbHMuanMgKioqIQogIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBleHBvcnRzIHByb3ZpZGVkICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKCiJ1c2Ugc3RyaWN0IjsKX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3dpZGdldF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi93aWRnZXQgKi8gIi4vc3JjanMvd2lkZ2V0LmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaW5wdXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vaW5wdXQgKi8gIi4vc3JjanMvaW5wdXQuanMiKTsKCgp3aW5kb3cucmVhY3RSID0gewogIHJlYWN0U2hpbnlJbnB1dDogX2lucHV0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInJlYWN0U2hpbnlJbnB1dCJdLAogIHJlYWN0V2lkZ2V0OiBfd2lkZ2V0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bInJlYWN0V2lkZ2V0Il0sCiAgaHlkcmF0ZTogX3dpZGdldF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJoeWRyYXRlIl0KfTsKCi8qKiovIH0pLAoKLyoqKi8gIi4vc3JjanMvd2lkZ2V0LmpzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICEqKiogLi9zcmNqcy93aWRnZXQuanMgKioqIQogIFwqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgZXhwb3J0cyBwcm92aWRlZDogaHlkcmF0ZSwgZGVmYXVsdE9wdGlvbnMsIG1lcmdlT3B0aW9ucywgZm9ybWF0RGltZW5zaW9uLCBpc1RhZywgcmVhY3RXaWRnZXQgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKInVzZSBzdHJpY3QiOwpfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImh5ZHJhdGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGh5ZHJhdGU7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJkZWZhdWx0T3B0aW9ucyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGVmYXVsdE9wdGlvbnM7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJtZXJnZU9wdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIG1lcmdlT3B0aW9uczsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImZvcm1hdERpbWVuc2lvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZm9ybWF0RGltZW5zaW9uOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiaXNUYWciLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzVGFnOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAicmVhY3RXaWRnZXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlYWN0V2lkZ2V0OyB9KTsKZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gInN5bWJvbCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/ICJzeW1ib2wiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9CgovKioNCiAqIFJlY3Vyc2l2ZWx5IHRyYW5zZm9ybXMgdGFnLCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYW4gaW5zdGFuY2Ugb2YgYQ0KICogUmVhY3QgY29tcG9uZW50IGFuZCBpdHMgY2hpbGRyZW4sIGludG8gYSBSZWFjdCBlbGVtZW50IHN1aXRhYmxlIGZvcg0KICogcGFzc2luZyB0byBSZWFjdERPTS5yZW5kZXIuDQogKiBAcGFyYW0ge09iamVjdH0gY29tcG9uZW50cw0KICogQHBhcmFtIHtPYmplY3R9IHRhZw0KICovCmZ1bmN0aW9uIGh5ZHJhdGUoY29tcG9uZW50cywgdGFnKSB7CiAgaWYgKHR5cGVvZiB0YWcgPT09ICdzdHJpbmcnKSByZXR1cm4gdGFnOwoKICBpZiAodGFnLm5hbWVbMF0gPT09IHRhZy5uYW1lWzBdLnRvVXBwZXJDYXNlKCkgJiYgIWNvbXBvbmVudHMuaGFzT3duUHJvcGVydHkodGFnLm5hbWUpKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY29tcG9uZW50OiAiICsgdGFnLm5hbWUpOwogIH0KCiAgdmFyIGVsZW0gPSBjb21wb25lbnRzLmhhc093blByb3BlcnR5KHRhZy5uYW1lKSA/IGNvbXBvbmVudHNbdGFnLm5hbWVdIDogdGFnLm5hbWUsCiAgICAgIGFyZ3MgPSBbZWxlbSwgdGFnLmF0dHJpYnNdOwoKICBmb3IgKHZhciBpID0gMDsgaSA8IHRhZy5jaGlsZHJlbi5sZW5ndGg7IGkrKykgewogICAgYXJncy5wdXNoKGh5ZHJhdGUoY29tcG9uZW50cywgdGFnLmNoaWxkcmVuW2ldKSk7CiAgfQoKICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudC5hcHBseShSZWFjdCwgYXJncyk7Cn0KdmFyIGRlZmF1bHRPcHRpb25zID0gewogIC8vIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBvbiB0aGUgcm9vdCB0YWcgdG8gdXNlIGZvciB0aGUgd2lkdGgsIGlmCiAgLy8gaXQncyB1cGRhdGVkLgogIHdpZHRoUHJvcGVydHk6ICJ3aWR0aCIsCiAgLy8gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IG9uIHRoZSByb290IHRhZyB0byB1c2UgZm9yIHRoZSBoZWlnaHQsIGlmCiAgLy8gaXQncyB1cGRhdGVkLgogIGhlaWdodFByb3BlcnR5OiAiaGVpZ2h0IiwKICAvLyBXaGV0aGVyIG9yIG5vdCB0byBhcHBlbmQgdGhlIHN0cmluZyAncHgnIHRvIHRoZSB3aWR0aCBhbmQgaGVpZ2h0CiAgLy8gcHJvcGVydGllcyB3aGVuIHRoZXkgY2hhbmdlLgogIGFwcGVuZFB4OiBmYWxzZSwKICAvLyBXaGV0aGVyIG9yIG5vdCB0byBkeW5hbWljYWxseSB1cGRhdGUgdGhlIHdpZHRoIGFuZCBoZWlnaHQgcHJvcGVydGllcwogIC8vIG9mIHRoZSBsYXN0IGtub3duIHRhZyB3aGVuIHRoZSBjb21wdXRlZCB3aWR0aCBhbmQgaGVpZ2h0IGNoYW5nZSBpbgogIC8vIHRoZSBicm93c2VyLgogIHJlbmRlck9uUmVzaXplOiBmYWxzZQp9OwpmdW5jdGlvbiBtZXJnZU9wdGlvbnMob3B0aW9ucykgewogIHZhciBtZXJnZWQgPSB7fTsKCiAgZm9yICh2YXIgayBpbiBkZWZhdWx0T3B0aW9ucykgewogICAgbWVyZ2VkW2tdID0gZGVmYXVsdE9wdGlvbnNba107CiAgfQoKICBmb3IgKHZhciBrIGluIG9wdGlvbnMpIHsKICAgIGlmICghZGVmYXVsdE9wdGlvbnMuaGFzT3duUHJvcGVydHkoaykpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgb3B0aW9uOiAiICsgayk7CiAgICB9CgogICAgbWVyZ2VkW2tdID0gb3B0aW9uc1trXTsKICB9CgogIHJldHVybiBtZXJnZWQ7Cn0KZnVuY3Rpb24gZm9ybWF0RGltZW5zaW9uKGRpbSwgb3B0aW9ucykgewogIGlmIChvcHRpb25zLmFwcGVuZFB4KSB7CiAgICByZXR1cm4gZGltICsgJ3B4JzsKICB9IGVsc2UgewogICAgcmV0dXJuIGRpbTsKICB9Cn0KZnVuY3Rpb24gaXNUYWcodmFsdWUpIHsKICByZXR1cm4gX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIHZhbHVlLmhhc093blByb3BlcnR5KCduYW1lJykgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoJ2F0dHJpYnMnKSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnY2hpbGRyZW4nKTsKfQovKioNCiAqIENyZWF0ZXMgYW4gSFRNTFdpZGdldCB0aGF0IGlzIHVwZGF0ZWQgYnkgcmVuZGVyaW5nIGEgUmVhY3QgY29tcG9uZW50Lg0KICogUmVhY3QgY29tcG9uZW50IGNvbnN0cnVjdG9ycyBhcmUgbWFkZSBhdmFpbGFibGUgYnkgc3BlY2lmeWluZyB0aGVtIGJ5DQogKiBuYW1lIGluIHRoZSBjb21wb25lbnRzIG9iamVjdC4NCiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lDQogKiBAcGFyYW0ge3N0cmluZ30gdHlwZQ0KICogQHBhcmFtIHtPYmplY3R9IGNvbXBvbmVudHMNCiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zDQogKi8KCmZ1bmN0aW9uIHJlYWN0V2lkZ2V0KG5hbWUsIHR5cGUsIGNvbXBvbmVudHMsIG9wdGlvbnMpIHsKICB2YXIgYWN0dWFsT3B0aW9ucyA9IG1lcmdlT3B0aW9ucyhvcHRpb25zKTsKICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0KHsKICAgIG5hbWU6IG5hbWUsCiAgICB0eXBlOiB0eXBlLAogICAgZmFjdG9yeTogZnVuY3Rpb24gZmFjdG9yeShlbCwgd2lkdGgsIGhlaWdodCkgewogICAgICB2YXIgbGFzdFZhbHVlLAogICAgICAgICAgaW5zdGFuY2UgPSB7fSwKICAgICAgICAgIHJlbmRlclZhbHVlID0gZnVuY3Rpb24gcmVuZGVyVmFsdWUodmFsdWUpIHsKICAgICAgICBpZiAoYWN0dWFsT3B0aW9ucy5yZW5kZXJPblJlc2l6ZSkgewogICAgICAgICAgLy8gdmFsdWUudGFnIG1pZ2h0IGJlIGEgcHJpbWl0aXZlIHN0cmluZywgaW4gd2hpY2gKICAgICAgICAgIC8vIGNhc2UgdGhlcmUgaXMgbm8gYXR0cmlicyBwcm9wZXJ0eS4KICAgICAgICAgIGlmIChfdHlwZW9mKHZhbHVlLnRhZykgPT09ICdvYmplY3QnKSB7CiAgICAgICAgICAgIHZhbHVlLnRhZy5hdHRyaWJzW2FjdHVhbE9wdGlvbnNbIndpZHRoUHJvcGVydHkiXV0gPSBmb3JtYXREaW1lbnNpb24od2lkdGgpOwogICAgICAgICAgICB2YWx1ZS50YWcuYXR0cmlic1thY3R1YWxPcHRpb25zWyJoZWlnaHRQcm9wZXJ0eSJdXSA9IGZvcm1hdERpbWVuc2lvbihoZWlnaHQpOwogICAgICAgICAgfQoKICAgICAgICAgIGxhc3RWYWx1ZSA9IHZhbHVlOwogICAgICAgIH0gLy8gd2l0aCBmdW5jdGlvbmFsIHN0YXRlbGVzcyBjb21wb25lbnRzIHRoaXMgd2lsbCBiZSBudWxsCiAgICAgICAgLy8gc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1kb20uaHRtbCNyZW5kZXIgZm9yIG1vcmUgZGV0YWlscwoKCiAgICAgICAgdGhpcy5pbnN0YW5jZS5jb21wb25lbnQgPSBSZWFjdERPTS5yZW5kZXIoaHlkcmF0ZShjb21wb25lbnRzLCB2YWx1ZS50YWcpLCBlbCk7CiAgICAgIH07CgogICAgICByZXR1cm4gewogICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZSwKICAgICAgICByZW5kZXJWYWx1ZTogcmVuZGVyVmFsdWUsCiAgICAgICAgcmVzaXplOiBmdW5jdGlvbiByZXNpemUobmV3V2lkdGgsIG5ld0hlaWdodCkgewogICAgICAgICAgaWYgKGFjdHVhbE9wdGlvbnMucmVuZGVyT25SZXNpemUpIHsKICAgICAgICAgICAgd2lkdGggPSBuZXdXaWR0aDsKICAgICAgICAgICAgaGVpZ2h0ID0gbmV3SGVpZ2h0OwogICAgICAgICAgICByZW5kZXJWYWx1ZShsYXN0VmFsdWUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgIH0KICB9KTsKfQoKLyoqKi8gfSksCgovKioqLyAianF1ZXJ5IjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAhKioqIGV4dGVybmFsICJ3aW5kb3cualF1ZXJ5IiAqKiohCiAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewoKbW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cualF1ZXJ5OwoKLyoqKi8gfSksCgovKioqLyAicmVhY3QiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgISoqKiBleHRlcm5hbCAid2luZG93LlJlYWN0IiAqKiohCiAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7Cgptb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5SZWFjdDsKCi8qKiovIH0pLAoKLyoqKi8gInJlYWN0LWRvbSI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAhKioqIGV4dGVybmFsICJ3aW5kb3cuUmVhY3RET00iICoqKiEKICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsKCm1vZHVsZS5leHBvcnRzID0gd2luZG93LlJlYWN0RE9NOwoKLyoqKi8gfSksCgovKioqLyAic2hpbnkiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgISoqKiBleHRlcm5hbCAid2luZG93LlNoaW55IiAqKiohCiAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7Cgptb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5TaGlueTsKCi8qKiovIH0pCgovKioqKioqLyB9KTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVhY3QtdG9vbHMuanMubWFw"></script> <script src="data:application/javascript;base64,KGZ1bmN0aW9uKCkgewogIC8vIElmIHdpbmRvdy5IVE1MV2lkZ2V0cyBpcyBhbHJlYWR5IGRlZmluZWQsIHRoZW4gdXNlIGl0OyBvdGhlcndpc2UgY3JlYXRlIGEKICAvLyBuZXcgb2JqZWN0LiBUaGlzIGFsbG93cyBwcmVjZWRpbmcgY29kZSB0byBzZXQgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUKICAvLyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh0aG91Z2ggbm9uZSBjdXJyZW50bHkgZXhpc3QpLgogIHdpbmRvdy5IVE1MV2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cyB8fCB7fTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aWV3ZXIgcGFuZS4gSWYgbm90LCB3ZSdyZSBpbiBhIHdlYiBicm93c2VyLgogIHZhciB2aWV3ZXJNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnZpZXdlck1vZGUgPQogICAgICAvXGJ2aWV3ZXJfcGFuZT0xXGIvLnRlc3Qod2luZG93LmxvY2F0aW9uKTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gU2hpbnkgbW9kZS4gSWYgbm90LCBpdCdzIGEgc3RhdGljIGRvY3VtZW50LgogIC8vIE5vdGUgdGhhdCBzdGF0aWMgd2lkZ2V0cyBjYW4gYXBwZWFyIGluIGJvdGggU2hpbnkgYW5kIHN0YXRpYyBtb2RlcywgYnV0CiAgLy8gb2J2aW91c2x5LCBTaGlueSB3aWRnZXRzIGNhbiBvbmx5IGFwcGVhciBpbiBTaGlueSBhcHBzL2RvY3VtZW50cy4KICB2YXIgc2hpbnlNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnNoaW55TW9kZSA9CiAgICAgIHR5cGVvZih3aW5kb3cuU2hpbnkpICE9PSAidW5kZWZpbmVkIiAmJiAhIXdpbmRvdy5TaGlueS5vdXRwdXRCaW5kaW5nczsKCiAgLy8gV2UgY2FuJ3QgY291bnQgb24galF1ZXJ5IGJlaW5nIGF2YWlsYWJsZSwgc28gd2UgaW1wbGVtZW50IG91ciBvd24KICAvLyB2ZXJzaW9uIGlmIG5lY2Vzc2FyeS4KICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKHR5cGVvZihqUXVlcnkpICE9PSAidW5kZWZpbmVkIiAmJiBzY29wZSBpbnN0YW5jZW9mIGpRdWVyeSkgewogICAgICByZXR1cm4gc2NvcGUuZmluZChzZWxlY3Rvcik7CiAgICB9CiAgICBpZiAoc2NvcGUucXVlcnlTZWxlY3RvckFsbCkgewogICAgICByZXR1cm4gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT09IG51bGwpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICgkLmlzQXJyYXkodmFsdWUpKQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gW3ZhbHVlXTsKICB9CgogIC8vIEltcGxlbWVudCBqUXVlcnkncyBleHRlbmQKICBmdW5jdGlvbiBleHRlbmQodGFyZ2V0IC8qLCAuLi4gKi8pIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07CiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7CiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgQXJyYXkuZm9yRWFjaC4KICBmdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgY2FsbGJhY2ssIHRoaXNBcmcpIHsKICAgIGlmICh2YWx1ZXMuZm9yRWFjaCkgewogICAgICB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB2YWx1ZXMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZXBsYWNlcyB0aGUgc3BlY2lmaWVkIG1ldGhvZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgZnVuY1NvdXJjZS4KICAvLwogIC8vIE5vdGUgdGhhdCBmdW5jU291cmNlIHNob3VsZCBub3QgQkUgdGhlIG5ldyBtZXRob2QsIGl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uCiAgLy8gdGhhdCBSRVRVUk5TIHRoZSBuZXcgbWV0aG9kLiBmdW5jU291cmNlIHJlY2VpdmVzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgaXMKICAvLyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IG1ldGhvZC4gVGhlIG92ZXJyaWRkZW4KICAvLyBtZXRob2QgY2FuIGJlIGNhbGxlZCBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiwgaXQgaGFzIHRoZSB0YXJnZXQgcGVybWFuZW50bHkKICAvLyBib3VuZCB0byBpdCBzbyAidGhpcyIgd2lsbCB3b3JrIGNvcnJlY3RseS4KICBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCh0YXJnZXQsIG1ldGhvZE5hbWUsIGZ1bmNTb3VyY2UpIHsKICAgIHZhciBzdXBlckZ1bmMgPSB0YXJnZXRbbWV0aG9kTmFtZV0gfHwgZnVuY3Rpb24oKSB7fTsKICAgIHZhciBzdXBlckZ1bmNCb3VuZCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gc3VwZXJGdW5jLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsKICAgIH07CiAgICB0YXJnZXRbbWV0aG9kTmFtZV0gPSBmdW5jU291cmNlKHN1cGVyRnVuY0JvdW5kKTsKICB9CgogIC8vIEFkZCBhIG1ldGhvZCB0byBkZWxlZ2F0b3IgdGhhdCwgd2hlbiBpbnZva2VkLCBjYWxscwogIC8vIGRlbGVnYXRlZS5tZXRob2ROYW1lLiBJZiB0aGVyZSBpcyBubyBzdWNoIG1ldGhvZCBvbgogIC8vIHRoZSBkZWxlZ2F0ZWUsIGJ1dCB0aGVyZSB3YXMgb25lIG9uIGRlbGVnYXRvciBiZWZvcmUKICAvLyBkZWxlZ2F0ZU1ldGhvZCB3YXMgY2FsbGVkLCB0aGVuIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCiAgLy8gaXMgaW52b2tlZCBpbnN0ZWFkLgogIC8vIEZvciBleGFtcGxlOgogIC8vCiAgLy8gdmFyIGEgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2ExJyk7IH0KICAvLyAgIG1ldGhvZDI6IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnYTInKTsgfQogIC8vIH07CiAgLy8gdmFyIGIgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2IxJyk7IH0KICAvLyB9OwogIC8vIGRlbGVnYXRlTWV0aG9kKGEsIGIsICJtZXRob2QxIik7CiAgLy8gZGVsZWdhdGVNZXRob2QoYSwgYiwgIm1ldGhvZDIiKTsKICAvLyBhLm1ldGhvZDEoKTsKICAvLyBhLm1ldGhvZDIoKTsKICAvLwogIC8vIFRoZSBvdXRwdXQgd291bGQgYmUgImIxIiwgImEyIi4KICBmdW5jdGlvbiBkZWxlZ2F0ZU1ldGhvZChkZWxlZ2F0b3IsIGRlbGVnYXRlZSwgbWV0aG9kTmFtZSkgewogICAgdmFyIGluaGVyaXRlZCA9IGRlbGVnYXRvclttZXRob2ROYW1lXTsKICAgIGRlbGVnYXRvclttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgdGFyZ2V0ID0gZGVsZWdhdGVlOwogICAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGVlW21ldGhvZE5hbWVdOwoKICAgICAgLy8gVGhlIG1ldGhvZCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBkZWxlZ2F0ZWUuIEluc3RlYWQsCiAgICAgIC8vIGNhbGwgdGhlIG1ldGhvZCBvbiB0aGUgZGVsZWdhdG9yLCBpZiBpdCBleGlzdHMuCiAgICAgIGlmICghbWV0aG9kKSB7CiAgICAgICAgdGFyZ2V0ID0gZGVsZWdhdG9yOwogICAgICAgIG1ldGhvZCA9IGluaGVyaXRlZDsKICAgICAgfQoKICAgICAgaWYgKG1ldGhvZCkgewogICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9OwogIH0KCiAgLy8gSW1wbGVtZW50IGEgdmFndWUgZmFjc2ltaWxpZSBvZiBqUXVlcnkncyBkYXRhIG1ldGhvZAogIGZ1bmN0aW9uIGVsZW1lbnREYXRhKGVsLCBuYW1lLCB2YWx1ZSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICByZXR1cm4gZWxbImh0bWx3aWRnZXRfZGF0YV8iICsgbmFtZV07CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykgewogICAgICBlbFsiaHRtbHdpZGdldF9kYXRhXyIgKyBuYW1lXSA9IHZhbHVlOwogICAgICByZXR1cm4gZWw7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGVsZW1lbnREYXRhOiAiICsKICAgICAgICBhcmd1bWVudHMubGVuZ3RoKTsKICAgIH0KICB9CgogIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ0NjE3MC9lc2NhcGUtc3RyaW5nLWZvci11c2UtaW4tamF2YXNjcmlwdC1yZWdleAogIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHIpIHsKICAgIHJldHVybiBzdHIucmVwbGFjZSgvW1wtXFtcXVwvXHtcfVwoXClcKlwrXD9cLlxcXF5cJFx8XS9nLCAiXFwkJiIpOwogIH0KCiAgZnVuY3Rpb24gaGFzQ2xhc3MoZWwsIGNsYXNzTmFtZSkgewogICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiXFxiIiArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgIlxcYiIpOwogICAgcmV0dXJuIHJlLnRlc3QoZWwuY2xhc3NOYW1lKTsKICB9CgogIC8vIGVsZW1lbnRzIC0gYXJyYXkgKG9yIGFycmF5LWxpa2Ugb2JqZWN0KSBvZiBIVE1MIGVsZW1lbnRzCiAgLy8gY2xhc3NOYW1lIC0gY2xhc3MgbmFtZSB0byB0ZXN0IGZvcgogIC8vIGluY2x1ZGUgLSBpZiB0cnVlLCBvbmx5IHJldHVybiBlbGVtZW50cyB3aXRoIGdpdmVuIGNsYXNzTmFtZTsKICAvLyAgIGlmIGZhbHNlLCBvbmx5IHJldHVybiBlbGVtZW50cyAqd2l0aG91dCogZ2l2ZW4gY2xhc3NOYW1lCiAgZnVuY3Rpb24gZmlsdGVyQnlDbGFzcyhlbGVtZW50cywgY2xhc3NOYW1lLCBpbmNsdWRlKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaGFzQ2xhc3MoZWxlbWVudHNbaV0sIGNsYXNzTmFtZSkgPT0gaW5jbHVkZSkKICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudHNbaV0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQoKICBmdW5jdGlvbiBvbihvYmosIGV2ZW50TmFtZSwgZnVuYykgewogICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgIG9iai5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuYywgZmFsc2UpOwogICAgfSBlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpIHsKICAgICAgb2JqLmF0dGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBvZmYob2JqLCBldmVudE5hbWUsIGZ1bmMpIHsKICAgIGlmIChvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICAgb2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jLCBmYWxzZSk7CiAgICBlbHNlIGlmIChvYmouZGV0YWNoRXZlbnQpIHsKICAgICAgb2JqLmRldGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICAvLyBUcmFuc2xhdGUgYXJyYXkgb2YgdmFsdWVzIHRvIHRvcC9yaWdodC9ib3R0b20vbGVmdCwgYXMgdXN1YWwgd2l0aAogIC8vIHRoZSAicGFkZGluZyIgQ1NTIHByb3BlcnR5CiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3BhZGRpbmcKICBmdW5jdGlvbiB1bnBhY2tQYWRkaW5nKHZhbHVlKSB7CiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gIm51bWJlciIpCiAgICAgIHZhbHVlID0gW3ZhbHVlXTsKICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMF0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzBdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDIpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDMpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDQpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzNdfTsKICAgIH0KICB9CgogIC8vIENvbnZlcnQgYW4gdW5wYWNrZWQgcGFkZGluZyBvYmplY3QgdG8gYSBDU1MgdmFsdWUKICBmdW5jdGlvbiBwYWRkaW5nVG9Dc3MocGFkZGluZ09iaikgewogICAgcmV0dXJuIHBhZGRpbmdPYmoudG9wICsgInB4ICIgKyBwYWRkaW5nT2JqLnJpZ2h0ICsgInB4ICIgKyBwYWRkaW5nT2JqLmJvdHRvbSArICJweCAiICsgcGFkZGluZ09iai5sZWZ0ICsgInB4IjsKICB9CgogIC8vIE1ha2VzIGEgbnVtYmVyIHN1aXRhYmxlIGZvciBDU1MKICBmdW5jdGlvbiBweCh4KSB7CiAgICBpZiAodHlwZW9mKHgpID09PSAibnVtYmVyIikKICAgICAgcmV0dXJuIHggKyAicHgiOwogICAgZWxzZQogICAgICByZXR1cm4geDsKICB9CgogIC8vIFJldHJpZXZlcyBydW50aW1lIHdpZGdldCBzaXppbmcgaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQuCiAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBlaXRoZXIgbnVsbCwgb3IgYW4gb2JqZWN0IHdpdGggZmlsbCwgcGFkZGluZywKICAvLyBkZWZhdWx0V2lkdGgsIGRlZmF1bHRIZWlnaHQgZmllbGRzLgogIGZ1bmN0aW9uIHNpemluZ1BvbGljeShlbCkgewogICAgdmFyIHNpemluZ0VsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vaHRtbHdpZGdldC1zaXppbmcnXSIpOwogICAgaWYgKCFzaXppbmdFbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICB2YXIgc3AgPSBKU09OLnBhcnNlKHNpemluZ0VsLnRleHRDb250ZW50IHx8IHNpemluZ0VsLnRleHQgfHwgInt9Iik7CiAgICBpZiAodmlld2VyTW9kZSkgewogICAgICByZXR1cm4gc3Audmlld2VyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHNwLmJyb3dzZXI7CiAgICB9CiAgfQoKICAvLyBAcGFyYW0gdGFza3MgQXJyYXkgb2Ygc3RyaW5ncyAob3IgZmFsc3kgdmFsdWUsIGluIHdoaWNoIGNhc2Ugbm8tb3ApLgogIC8vICAgRWFjaCBlbGVtZW50IG11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdGhhdCB5aWVsZHMgYQogIC8vICAgZnVuY3Rpb24uIE9yLCBjYW4gYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICJjb2RlIiBhbmQgImRhdGEiCiAgLy8gICBwcm9wZXJ0aWVzOyBpbiB0aGlzIGNhc2UsIHRoZSAiY29kZSIgcHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nCiAgLy8gICBvZiBKUyB0aGF0J3MgYW4gZXhwciB0aGF0IHlpZWxkcyBhIGZ1bmN0aW9uLCBhbmQgImRhdGEiIHNob3VsZCBiZQogIC8vICAgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBhZGRlZCBhcyBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50IHdoZW4gdGhhdAogIC8vICAgZnVuY3Rpb24gaXMgY2FsbGVkLgogIC8vIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgInRoaXMiIGZvciBlYWNoIGZ1bmN0aW9uCiAgLy8gICBleGVjdXRpb24uCiAgLy8gQHBhcmFtIGFyZ3MgQXJyYXkgb2YgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zLiAoVGhlCiAgLy8gICBzYW1lIGFyZ3VtZW50cyB3aWxsIGJlIHBhc3NlZCB0byBhbGwgZnVuY3Rpb25zLikKICBmdW5jdGlvbiBldmFsQW5kUnVuKHRhc2tzLCB0YXJnZXQsIGFyZ3MpIHsKICAgIGlmICh0YXNrcykgewogICAgICBmb3JFYWNoKHRhc2tzLCBmdW5jdGlvbih0YXNrKSB7CiAgICAgICAgdmFyIHRoZXNlQXJncyA9IGFyZ3M7CiAgICAgICAgaWYgKHR5cGVvZih0YXNrKSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIHRoZXNlQXJncyA9IHRoZXNlQXJncy5jb25jYXQoW3Rhc2suZGF0YV0pOwogICAgICAgICAgdGFzayA9IHRhc2suY29kZTsKICAgICAgICB9CiAgICAgICAgdmFyIHRhc2tGdW5jID0gdHJ5RXZhbCh0YXNrKTsKICAgICAgICBpZiAodHlwZW9mKHRhc2tGdW5jKSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUYXNrIG11c3QgYmUgYSBmdW5jdGlvbiEgU291cmNlOlxuIiArIHRhc2spOwogICAgICAgIH0KICAgICAgICB0YXNrRnVuYy5hcHBseSh0YXJnZXQsIHRoZXNlQXJncyk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8gQXR0ZW1wdCBldmFsKCkgYm90aCB3aXRoIGFuZCB3aXRob3V0IGVuY2xvc2luZyBpbiBwYXJlbnRoZXNlcy4KICAvLyBOb3RlIHRoYXQgZW5jbG9zaW5nIGNvZXJjZXMgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpbnRvCiAgLy8gYW4gZXhwcmVzc2lvbiB0aGF0IGV2YWwoKSBjYW4gcGFyc2UKICAvLyAob3RoZXJ3aXNlLCBhIFN5bnRheEVycm9yIGlzIHRocm93bikKICBmdW5jdGlvbiB0cnlFdmFsKGNvZGUpIHsKICAgIHZhciByZXN1bHQgPSBudWxsOwogICAgdHJ5IHsKICAgICAgcmVzdWx0ID0gZXZhbCgiKCIgKyBjb2RlICsgIikiKTsKICAgIH0gY2F0Y2goZXJyb3IpIHsKICAgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikpIHsKICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgfQogICAgICB0cnkgewogICAgICAgIHJlc3VsdCA9IGV2YWwoY29kZSk7CiAgICAgIH0gY2F0Y2goZSkgewogICAgICAgIGlmIChlIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHsKICAgICAgICAgIHRocm93IGVycm9yOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGZ1bmN0aW9uIGluaXRTaXppbmcoZWwpIHsKICAgIHZhciBzaXppbmcgPSBzaXppbmdQb2xpY3koZWwpOwogICAgaWYgKCFzaXppbmcpCiAgICAgIHJldHVybjsKCiAgICB2YXIgY2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImh0bWx3aWRnZXRfY29udGFpbmVyIik7CiAgICBpZiAoIWNlbCkKICAgICAgcmV0dXJuOwoKICAgIGlmICh0eXBlb2Yoc2l6aW5nLnBhZGRpbmcpICE9PSAidW5kZWZpbmVkIikgewogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm1hcmdpbiA9ICIwIjsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nID0gcGFkZGluZ1RvQ3NzKHVucGFja1BhZGRpbmcoc2l6aW5nLnBhZGRpbmcpKTsKICAgIH0KCiAgICBpZiAoc2l6aW5nLmZpbGwpIHsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICJoaWRkZW4iOwogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLndpZHRoID0gIjEwMCUiOwogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmhlaWdodCA9ICIxMDAlIjsKICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLndpZHRoID0gIjEwMCUiOwogICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICBpZiAoY2VsKSB7CiAgICAgICAgY2VsLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKICAgICAgICB2YXIgcGFkID0gdW5wYWNrUGFkZGluZyhzaXppbmcucGFkZGluZyk7CiAgICAgICAgY2VsLnN0eWxlLnRvcCA9IHBhZC50b3AgKyAicHgiOwogICAgICAgIGNlbC5zdHlsZS5yaWdodCA9IHBhZC5yaWdodCArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLmJvdHRvbSA9IHBhZC5ib3R0b20gKyAicHgiOwogICAgICAgIGNlbC5zdHlsZS5sZWZ0ID0gcGFkLmxlZnQgKyAicHgiOwogICAgICAgIGVsLnN0eWxlLndpZHRoID0gIjEwMCUiOwogICAgICAgIGVsLnN0eWxlLmhlaWdodCA9ICIxMDAlIjsKICAgICAgfQoKICAgICAgcmV0dXJuIHsKICAgICAgICBnZXRXaWR0aDogZnVuY3Rpb24oKSB7IHJldHVybiBjZWwub2Zmc2V0V2lkdGg7IH0sCiAgICAgICAgZ2V0SGVpZ2h0OiBmdW5jdGlvbigpIHsgcmV0dXJuIGNlbC5vZmZzZXRIZWlnaHQ7IH0KICAgICAgfTsKCiAgICB9IGVsc2UgewogICAgICBlbC5zdHlsZS53aWR0aCA9IHB4KHNpemluZy53aWR0aCk7CiAgICAgIGVsLnN0eWxlLmhlaWdodCA9IHB4KHNpemluZy5oZWlnaHQpOwoKICAgICAgcmV0dXJuIHsKICAgICAgICBnZXRXaWR0aDogZnVuY3Rpb24oKSB7IHJldHVybiBlbC5vZmZzZXRXaWR0aDsgfSwKICAgICAgICBnZXRIZWlnaHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZWwub2Zmc2V0SGVpZ2h0OyB9CiAgICAgIH07CiAgICB9CiAgfQoKICAvLyBEZWZhdWx0IGltcGxlbWVudGF0aW9ucyBmb3IgbWV0aG9kcwogIHZhciBkZWZhdWx0cyA9IHsKICAgIGZpbmQ6IGZ1bmN0aW9uKHNjb3BlKSB7CiAgICAgIHJldHVybiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCAiLiIgKyB0aGlzLm5hbWUpOwogICAgfSwKICAgIHJlbmRlckVycm9yOiBmdW5jdGlvbihlbCwgZXJyKSB7CiAgICAgIHZhciAkZWwgPSAkKGVsKTsKCiAgICAgIHRoaXMuY2xlYXJFcnJvcihlbCk7CgogICAgICAvLyBBZGQgYWxsIHRoZXNlIGVycm9yIGNsYXNzZXMsIGFzIFNoaW55IGRvZXMKICAgICAgdmFyIGVyckNsYXNzID0gInNoaW55LW91dHB1dC1lcnJvciI7CiAgICAgIGlmIChlcnIudHlwZSAhPT0gbnVsbCkgewogICAgICAgIC8vIHVzZSB0aGUgY2xhc3NlcyBvZiB0aGUgZXJyb3IgY29uZGl0aW9uIGFzIENTUyBjbGFzcyBuYW1lcwogICAgICAgIGVyckNsYXNzID0gZXJyQ2xhc3MgKyAiICIgKyAkLm1hcChhc0FycmF5KGVyci50eXBlKSwgZnVuY3Rpb24odHlwZSkgewogICAgICAgICAgcmV0dXJuIGVyckNsYXNzICsgIi0iICsgdHlwZTsKICAgICAgICB9KS5qb2luKCIgIik7CiAgICAgIH0KICAgICAgZXJyQ2xhc3MgPSBlcnJDbGFzcyArICIgaHRtbHdpZGdldHMtZXJyb3IiOwoKICAgICAgLy8gSXMgZWwgaW5saW5lIG9yIGJsb2NrPyBJZiBpbmxpbmUgb3IgaW5saW5lLWJsb2NrLCBqdXN0IGRpc3BsYXk6bm9uZSBpdAogICAgICAvLyBhbmQgYWRkIGFuIGlubGluZSBlcnJvci4KICAgICAgdmFyIGRpc3BsYXkgPSAkZWwuY3NzKCJkaXNwbGF5Iik7CiAgICAgICRlbC5kYXRhKCJyZXN0b3JlLWRpc3BsYXktbW9kZSIsIGRpc3BsYXkpOwoKICAgICAgaWYgKGRpc3BsYXkgPT09ICJpbmxpbmUiIHx8IGRpc3BsYXkgPT09ICJpbmxpbmUtYmxvY2siKSB7CiAgICAgICAgJGVsLmhpZGUoKTsKICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgIT09ICIiKSB7CiAgICAgICAgICB2YXIgZXJyb3JTcGFuID0gJCgiPHNwYW4+IikuYWRkQ2xhc3MoZXJyQ2xhc3MpOwogICAgICAgICAgZXJyb3JTcGFuLnRleHQoZXJyLm1lc3NhZ2UpOwogICAgICAgICAgJGVsLmFmdGVyKGVycm9yU3Bhbik7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGRpc3BsYXkgPT09ICJibG9jayIpIHsKICAgICAgICAvLyBJZiBibG9jaywgYWRkIGFuIGVycm9yIGp1c3QgYWZ0ZXIgdGhlIGVsLCBzZXQgdmlzaWJpbGl0eTpub25lIG9uIHRoZQogICAgICAgIC8vIGVsLCBhbmQgcG9zaXRpb24gdGhlIGVycm9yIHRvIGJlIG9uIHRvcCBvZiB0aGUgZWwuCiAgICAgICAgLy8gTWFyayBpdCB3aXRoIGEgdW5pcXVlIElEIGFuZCBDU1MgY2xhc3Mgc28gd2UgY2FuIHJlbW92ZSBpdCBsYXRlci4KICAgICAgICAkZWwuY3NzKCJ2aXNpYmlsaXR5IiwgImhpZGRlbiIpOwogICAgICAgIGlmIChlcnIubWVzc2FnZSAhPT0gIiIpIHsKICAgICAgICAgIHZhciBlcnJvckRpdiA9ICQoIjxkaXY+IikuYWRkQ2xhc3MoZXJyQ2xhc3MpLmNzcygicG9zaXRpb24iLCAiYWJzb2x1dGUiKQogICAgICAgICAgICAuY3NzKCJ0b3AiLCBlbC5vZmZzZXRUb3ApCiAgICAgICAgICAgIC5jc3MoImxlZnQiLCBlbC5vZmZzZXRMZWZ0KQogICAgICAgICAgICAvLyBzZXR0aW5nIHdpZHRoIGNhbiBwdXNoIG91dCB0aGUgcGFnZSBzaXplLCBmb3JjaW5nIG90aGVyd2lzZQogICAgICAgICAgICAvLyB1bm5lY2Vzc2FyeSBzY3JvbGxiYXJzIHRvIGFwcGVhciBhbmQgbWFraW5nIGl0IGltcG9zc2libGUgZm9yCiAgICAgICAgICAgIC8vIHRoZSBlbGVtZW50IHRvIHNocmluazsgc28gdXNlIG1heC13aWR0aCBpbnN0ZWFkCiAgICAgICAgICAgIC5jc3MoIm1heFdpZHRoIiwgZWwub2Zmc2V0V2lkdGgpCiAgICAgICAgICAgIC5jc3MoImhlaWdodCIsIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICBlcnJvckRpdi50ZXh0KGVyci5tZXNzYWdlKTsKICAgICAgICAgICRlbC5hZnRlcihlcnJvckRpdik7CgogICAgICAgICAgLy8gUmVhbGx5IGR1bWIgd2F5IHRvIGtlZXAgdGhlIHNpemUvcG9zaXRpb24gb2YgdGhlIGVycm9yIGluIHN5bmMgd2l0aAogICAgICAgICAgLy8gdGhlIHBhcmVudCBlbGVtZW50IGFzIHRoZSB3aW5kb3cgaXMgcmVzaXplZCBvciB3aGF0ZXZlci4KICAgICAgICAgIHZhciBpbnRJZCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAoIWVycm9yRGl2WzBdLnBhcmVudEVsZW1lbnQpIHsKICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludElkKTsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZXJyb3JEaXYKICAgICAgICAgICAgICAuY3NzKCJ0b3AiLCBlbC5vZmZzZXRUb3ApCiAgICAgICAgICAgICAgLmNzcygibGVmdCIsIGVsLm9mZnNldExlZnQpCiAgICAgICAgICAgICAgLmNzcygibWF4V2lkdGgiLCBlbC5vZmZzZXRXaWR0aCkKICAgICAgICAgICAgICAuY3NzKCJoZWlnaHQiLCBlbC5vZmZzZXRIZWlnaHQpOwogICAgICAgICAgfSwgNTAwKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBjbGVhckVycm9yOiBmdW5jdGlvbihlbCkgewogICAgICB2YXIgJGVsID0gJChlbCk7CiAgICAgIHZhciBkaXNwbGF5ID0gJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIik7CiAgICAgICRlbC5kYXRhKCJyZXN0b3JlLWRpc3BsYXktbW9kZSIsIG51bGwpOwoKICAgICAgaWYgKGRpc3BsYXkgPT09ICJpbmxpbmUiIHx8IGRpc3BsYXkgPT09ICJpbmxpbmUtYmxvY2siKSB7CiAgICAgICAgaWYgKGRpc3BsYXkpCiAgICAgICAgICAkZWwuY3NzKCJkaXNwbGF5IiwgZGlzcGxheSk7CiAgICAgICAgJChlbC5uZXh0U2libGluZykuZmlsdGVyKCIuaHRtbHdpZGdldHMtZXJyb3IiKS5yZW1vdmUoKTsKICAgICAgfSBlbHNlIGlmIChkaXNwbGF5ID09PSAiYmxvY2siKXsKICAgICAgICAkZWwuY3NzKCJ2aXNpYmlsaXR5IiwgImluaGVyaXQiKTsKICAgICAgICAkKGVsLm5leHRTaWJsaW5nKS5maWx0ZXIoIi5odG1sd2lkZ2V0cy1lcnJvciIpLnJlbW92ZSgpOwogICAgICB9CiAgICB9LAogICAgc2l6aW5nOiB7fQogIH07CgogIC8vIENhbGxlZCBieSB3aWRnZXQgYmluZGluZ3MgdG8gcmVnaXN0ZXIgYSBuZXcgdHlwZSBvZiB3aWRnZXQuIFRoZSBkZWZpbml0aW9uCiAgLy8gb2JqZWN0IGNhbiBjb250YWluIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKICAvLyAtIG5hbWUgKHJlcXVpcmVkKSAtIEEgc3RyaW5nIGluZGljYXRpbmcgdGhlIGJpbmRpbmcgbmFtZSwgd2hpY2ggd2lsbCBiZQogIC8vICAgdXNlZCBieSBkZWZhdWx0IGFzIHRoZSBDU1MgY2xhc3NuYW1lIHRvIGxvb2sgZm9yLgogIC8vIC0gaW5pdGlhbGl6ZSAob3B0aW9uYWwpIC0gQSBmdW5jdGlvbihlbCkgdGhhdCB3aWxsIGJlIGNhbGxlZCBvbmNlIHBlcgogIC8vICAgd2lkZ2V0IGVsZW1lbnQ7IGlmIGEgdmFsdWUgaXMgcmV0dXJuZWQsIGl0IHdpbGwgYmUgcGFzc2VkIGFzIHRoZSB0aGlyZAogIC8vICAgdmFsdWUgdG8gcmVuZGVyVmFsdWUuCiAgLy8gLSByZW5kZXJWYWx1ZSAocmVxdWlyZWQpIC0gQSBmdW5jdGlvbihlbCwgZGF0YSwgaW5pdFZhbHVlKSB0aGF0IHdpbGwgYmUKICAvLyAgIGNhbGxlZCB3aXRoIGRhdGEuIFN0YXRpYyBjb250ZXh0cyB3aWxsIGNhdXNlIHRoaXMgdG8gYmUgY2FsbGVkIG9uY2UgcGVyCiAgLy8gICBlbGVtZW50OyBTaGlueSBhcHBzIHdpbGwgY2F1c2UgdGhpcyB0byBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgcGVyCiAgLy8gICBlbGVtZW50LCBhcyB0aGUgZGF0YSBjaGFuZ2VzLgogIHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXQgPSBmdW5jdGlvbihkZWZpbml0aW9uKSB7CiAgICBpZiAoIWRlZmluaXRpb24ubmFtZSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldpZGdldCBtdXN0IGhhdmUgYSBuYW1lIik7CiAgICB9CiAgICBpZiAoIWRlZmluaXRpb24udHlwZSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldpZGdldCBtdXN0IGhhdmUgYSB0eXBlIik7CiAgICB9CiAgICAvLyBDdXJyZW50bHkgd2Ugb25seSBzdXBwb3J0IG91dHB1dCB3aWRnZXRzCiAgICBpZiAoZGVmaW5pdGlvbi50eXBlICE9PSAib3V0cHV0IikgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB3aWRnZXQgdHlwZSAnIiArIGRlZmluaXRpb24udHlwZSArICInIik7CiAgICB9CiAgICAvLyBUT0RPOiBWZXJpZnkgdGhhdCAubmFtZSBpcyBhIHZhbGlkIENTUyBjbGFzc25hbWUKCiAgICAvLyBTdXBwb3J0IG5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9ucy4gT2xkLXN0eWxlIGNsYXNzLWJvdW5kCiAgICAvLyBkZWZpbml0aW9ucyBoYXZlIG9uZSB3aWRnZXQgIm9iamVjdCIgcGVyIHdpZGdldCBwZXIgdHlwZS9jbGFzcyBvZgogICAgLy8gd2lkZ2V0OyB0aGUgcmVuZGVyVmFsdWUgYW5kIHJlc2l6ZSBtZXRob2RzIG9uIHN1Y2ggd2lkZ2V0IG9iamVjdHMKICAgIC8vIHRha2UgZWwgYW5kIGluc3RhbmNlIGFyZ3VtZW50cywgYmVjYXVzZSB0aGUgd2lkZ2V0IG9iamVjdCBjYW4ndAogICAgLy8gc3RvcmUgdGhlbS4gTmV3LXN0eWxlIGluc3RhbmNlLWJvdW5kIGRlZmluaXRpb25zIGhhdmUgb25lIHdpZGdldAogICAgLy8gb2JqZWN0IHBlciB3aWRnZXQgaW5zdGFuY2U7IHRoZSBkZWZpbml0aW9uIHRoYXQncyBwYXNzZWQgaW4gZG9lc24ndAogICAgLy8gcHJvdmlkZSByZW5kZXJWYWx1ZSBvciByZXNpemUgbWV0aG9kcyBhdCBhbGwsIGp1c3QgdGhlIHNpbmdsZSBtZXRob2QKICAgIC8vICAgZmFjdG9yeShlbCwgd2lkdGgsIGhlaWdodCkKICAgIC8vIHdoaWNoIHJldHVybnMgYW4gb2JqZWN0IHRoYXQgaGFzIHJlbmRlclZhbHVlKHgpIGFuZCByZXNpemUodywgaCkuCiAgICAvLyBUaGlzIGVuYWJsZXMgYSBmYXIgbW9yZSBuYXR1cmFsIHByb2dyYW1taW5nIHN0eWxlIGZvciB0aGUgd2lkZ2V0CiAgICAvLyBhdXRob3IsIHdobyBjYW4gc3RvcmUgcGVyLWluc3RhbmNlIHN0YXRlIHVzaW5nIGVpdGhlciBPTy1zdHlsZQogICAgLy8gaW5zdGFuY2UgZmllbGRzIG9yIGZ1bmN0aW9uYWwtc3R5bGUgY2xvc3VyZSB2YXJpYWJsZXMgKEkgZ3Vlc3MgdGhpcwogICAgLy8gaXMgaW4gY29udHJhc3QgdG8gd2hhdCBjYW4gb25seSBiZSBjYWxsZWQgQy1zdHlsZSBwc2V1ZG8tT08gd2hpY2ggaXMKICAgIC8vIHdoYXQgd2UgcmVxdWlyZWQgYmVmb3JlKS4KICAgIGlmIChkZWZpbml0aW9uLmZhY3RvcnkpIHsKICAgICAgZGVmaW5pdGlvbiA9IGNyZWF0ZUxlZ2FjeURlZmluaXRpb25BZGFwdGVyKGRlZmluaXRpb24pOwogICAgfQoKICAgIGlmICghZGVmaW5pdGlvbi5yZW5kZXJWYWx1ZSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldpZGdldCBtdXN0IGhhdmUgYSByZW5kZXJWYWx1ZSBmdW5jdGlvbiIpOwogICAgfQoKICAgIC8vIEZvciBzdGF0aWMgcmVuZGVyaW5nIChub24tU2hpbnkpLCB1c2UgYSBzaW1wbGUgd2lkZ2V0IHJlZ2lzdHJhdGlvbgogICAgLy8gc2NoZW1lLiBXZSBhbHNvIHVzZSB0aGlzIHNjaGVtZSBmb3IgU2hpbnkgYXBwcy9kb2N1bWVudHMgdGhhdCBhbHNvCiAgICAvLyBjb250YWluIHN0YXRpYyB3aWRnZXRzLgogICAgd2luZG93LkhUTUxXaWRnZXRzLndpZGdldHMgPSB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cyB8fCBbXTsKICAgIC8vIE1lcmdlIGRlZmF1bHRzIGludG8gdGhlIGRlZmluaXRpb247IGRvbid0IG11dGF0ZSB0aGUgb3JpZ2luYWwgZGVmaW5pdGlvbi4KICAgIHZhciBzdGF0aWNCaW5kaW5nID0gZXh0ZW5kKHt9LCBkZWZhdWx0cywgZGVmaW5pdGlvbik7CiAgICBvdmVycmlkZU1ldGhvZChzdGF0aWNCaW5kaW5nLCAiZmluZCIsIGZ1bmN0aW9uKHN1cGVyZnVuYykgewogICAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgICB2YXIgcmVzdWx0cyA9IHN1cGVyZnVuYyhzY29wZSk7CiAgICAgICAgLy8gRmlsdGVyIG91dCBTaGlueSBvdXRwdXRzLCB3ZSBvbmx5IHdhbnQgdGhlIHN0YXRpYyBraW5kCiAgICAgICAgcmV0dXJuIGZpbHRlckJ5Q2xhc3MocmVzdWx0cywgImh0bWwtd2lkZ2V0LW91dHB1dCIsIGZhbHNlKTsKICAgICAgfTsKICAgIH0pOwogICAgd2luZG93LkhUTUxXaWRnZXRzLndpZGdldHMucHVzaChzdGF0aWNCaW5kaW5nKTsKCiAgICBpZiAoc2hpbnlNb2RlKSB7CiAgICAgIC8vIFNoaW55IGlzIHJ1bm5pbmcuIFJlZ2lzdGVyIHRoZSBkZWZpbml0aW9uIHdpdGggYW4gb3V0cHV0IGJpbmRpbmcuCiAgICAgIC8vIFRoZSBkZWZpbml0aW9uIGl0c2VsZiB3aWxsIG5vdCBiZSB0aGUgb3V0cHV0IGJpbmRpbmcsIGluc3RlYWQKICAgICAgLy8gd2Ugd2lsbCBtYWtlIGFuIG91dHB1dCBiaW5kaW5nIG9iamVjdCB0aGF0IGRlbGVnYXRlcyB0byB0aGUKICAgICAgLy8gZGVmaW5pdGlvbi4gVGhpcyBpcyBiZWNhdXNlIHdlIGZvb2xpc2hseSB1c2VkIHRoZSBzYW1lIG1ldGhvZAogICAgICAvLyBuYW1lIChyZW5kZXJWYWx1ZSkgZm9yIGh0bWx3aWRnZXRzIGRlZmluaXRpb24gYW5kIFNoaW55IGJpbmRpbmdzCiAgICAgIC8vIGJ1dCB0aGV5IGFjdHVhbGx5IGhhdmUgcXVpdGUgZGlmZmVyZW50IHNlbWFudGljcyAodGhlIFNoaW55CiAgICAgIC8vIGJpbmRpbmdzIHJlY2VpdmUgZGF0YSB0aGF0IGluY2x1ZGVzIGxvdHMgb2YgbWV0YWRhdGEgdGhhdCBpdAogICAgICAvLyBzdHJpcHMgb2ZmIGJlZm9yZSBjYWxsaW5nIGh0bWx3aWRnZXRzIHJlbmRlclZhbHVlKS4gV2UgY2FuJ3QKICAgICAgLy8ganVzdCBpZ25vcmUgdGhlIGRpZmZlcmVuY2UgYmVjYXVzZSBpbiBzb21lIHdpZGdldHMgaXQncyBoZWxwZnVsCiAgICAgIC8vIHRvIGNhbGwgdGhpcy5yZW5kZXJWYWx1ZSgpIGZyb20gaW5zaWRlIG9mIHJlc2l6ZSgpLCBhbmQgaWYKICAgICAgLy8gd2UncmUgbm90IGRlbGVnYXRpbmcsIHRoZW4gdGhhdCBjYWxsIHdpbGwgZ28gdG8gdGhlIFNoaW55CiAgICAgIC8vIHZlcnNpb24gaW5zdGVhZCBvZiB0aGUgaHRtbHdpZGdldHMgdmVyc2lvbi4KCiAgICAgIC8vIE1lcmdlIGRlZmF1bHRzIHdpdGggZGVmaW5pdGlvbiwgd2l0aG91dCBtdXRhdGluZyBlaXRoZXIuCiAgICAgIHZhciBiaW5kaW5nRGVmID0gZXh0ZW5kKHt9LCBkZWZhdWx0cywgZGVmaW5pdGlvbik7CgogICAgICAvLyBUaGlzIG9iamVjdCB3aWxsIGJlIG91ciBhY3R1YWwgU2hpbnkgYmluZGluZy4KICAgICAgdmFyIHNoaW55QmluZGluZyA9IG5ldyBTaGlueS5PdXRwdXRCaW5kaW5nKCk7CgogICAgICAvLyBXaXRoIGEgZmV3IGV4Y2VwdGlvbnMsIHdlJ2xsIHdhbnQgdG8gc2ltcGx5IHVzZSB0aGUgYmluZGluZ0RlZidzCiAgICAgIC8vIHZlcnNpb24gb2YgbWV0aG9kcyBpZiB0aGV5IGFyZSBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KICAgICAgLy8gU2hpbnkncyBkZWZhdWx0cy4gTk9URTogSWYgU2hpbnkncyBvdXRwdXQgYmluZGluZ3MgZ2FpbiBhZGRpdGlvbmFsCiAgICAgIC8vIG1ldGhvZHMgaW4gdGhlIGZ1dHVyZSwgYW5kIHdlIHdhbnQgdGhlbSB0byBiZSBvdmVycmlkZWFibGUgYnkKICAgICAgLy8gSFRNTFdpZGdldCBiaW5kaW5nIGRlZmluaXRpb25zLCB0aGVuIHdlJ2xsIG5lZWQgdG8gYWRkIHRoZW0gdG8gdGhpcwogICAgICAvLyBsaXN0LgogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJnZXRJZCIpOwogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJvblZhbHVlQ2hhbmdlIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgIm9uVmFsdWVFcnJvciIpOwogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJyZW5kZXJFcnJvciIpOwogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJjbGVhckVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgInNob3dQcm9ncmVzcyIpOwoKICAgICAgLy8gVGhlIGZpbmQsIHJlbmRlclZhbHVlLCBhbmQgcmVzaXplIGFyZSBoYW5kbGVkIGRpZmZlcmVudGx5LCBiZWNhdXNlIHdlCiAgICAgIC8vIHdhbnQgdG8gYWN0dWFsbHkgZGVjb3JhdGUgdGhlIGJlaGF2aW9yIG9mIHRoZSBiaW5kaW5nRGVmIG1ldGhvZHMuCgogICAgICBzaGlueUJpbmRpbmcuZmluZCA9IGZ1bmN0aW9uKHNjb3BlKSB7CiAgICAgICAgdmFyIHJlc3VsdHMgPSBiaW5kaW5nRGVmLmZpbmQoc2NvcGUpOwoKICAgICAgICAvLyBPbmx5IHJldHVybiBlbGVtZW50cyB0aGF0IGFyZSBTaGlueSBvdXRwdXRzLCBub3Qgc3RhdGljIG9uZXMKICAgICAgICB2YXIgZHluYW1pY1Jlc3VsdHMgPSByZXN1bHRzLmZpbHRlcigiLmh0bWwtd2lkZ2V0LW91dHB1dCIpOwoKICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgd2hhdGV2ZXIgY2F1c2VkIFNoaW55IHRvIHRoaW5rIHRoZXJlIG1pZ2h0IGJlCiAgICAgICAgLy8gbmV3IGR5bmFtaWMgb3V0cHV0cywgYWxzbyBjYXVzZWQgdGhlcmUgdG8gYmUgbmV3IHN0YXRpYyBvdXRwdXRzLgogICAgICAgIC8vIFNpbmNlIHRoZXJlIG1pZ2h0IGJlIGxvdHMgb2YgZGlmZmVyZW50IGh0bWx3aWRnZXRzIGJpbmRpbmdzLCB3ZQogICAgICAgIC8vIHNjaGVkdWxlIGV4ZWN1dGlvbiBmb3IgbGF0ZXItLW5vIG5lZWQgdG8gc3RhdGljUmVuZGVyIG11bHRpcGxlCiAgICAgICAgLy8gdGltZXMuCiAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoICE9PSBkeW5hbWljUmVzdWx0cy5sZW5ndGgpCiAgICAgICAgICBzY2hlZHVsZVN0YXRpY1JlbmRlcigpOwoKICAgICAgICByZXR1cm4gZHluYW1pY1Jlc3VsdHM7CiAgICAgIH07CgogICAgICAvLyBXcmFwIHJlbmRlclZhbHVlIHRvIGhhbmRsZSBpbml0aWFsaXphdGlvbiwgd2hpY2ggdW5mb3J0dW5hdGVseSBpc24ndAogICAgICAvLyBzdXBwb3J0ZWQgbmF0aXZlbHkgYnkgU2hpbnkgYXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nLgoKICAgICAgc2hpbnlCaW5kaW5nLnJlbmRlclZhbHVlID0gZnVuY3Rpb24oZWwsIGRhdGEpIHsKICAgICAgICBTaGlueS5yZW5kZXJEZXBlbmRlbmNpZXMoZGF0YS5kZXBzKTsKICAgICAgICAvLyBSZXNvbHZlIHN0cmluZ3MgbWFya2VkIGFzIGphdmFzY3JpcHQgbGl0ZXJhbHMgdG8gb2JqZWN0cwogICAgICAgIGlmICghKGRhdGEuZXZhbHMgaW5zdGFuY2VvZiBBcnJheSkpIGRhdGEuZXZhbHMgPSBbZGF0YS5ldmFsc107CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGRhdGEuZXZhbHMgJiYgaSA8IGRhdGEuZXZhbHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5ldmFsdWF0ZVN0cmluZ01lbWJlcihkYXRhLngsIGRhdGEuZXZhbHNbaV0pOwogICAgICAgIH0KICAgICAgICBpZiAoIWJpbmRpbmdEZWYucmVuZGVyT25OdWxsVmFsdWUpIHsKICAgICAgICAgIGlmIChkYXRhLnggPT09IG51bGwpIHsKICAgICAgICAgICAgZWwuc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBlbC5zdHlsZS52aXNpYmlsaXR5ID0gImluaGVyaXQiOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIWVsZW1lbnREYXRhKGVsLCAiaW5pdGlhbGl6ZWQiKSkgewogICAgICAgICAgaW5pdFNpemluZyhlbCk7CgogICAgICAgICAgZWxlbWVudERhdGEoZWwsICJpbml0aWFsaXplZCIsIHRydWUpOwogICAgICAgICAgaWYgKGJpbmRpbmdEZWYuaW5pdGlhbGl6ZSkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gYmluZGluZ0RlZi5pbml0aWFsaXplKGVsLCBlbC5vZmZzZXRXaWR0aCwKICAgICAgICAgICAgICBlbC5vZmZzZXRIZWlnaHQpOwogICAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiwgcmVzdWx0KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYmluZGluZ0RlZi5yZW5kZXJWYWx1ZShlbCwgZGF0YS54LCBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IikpOwogICAgICAgIGV2YWxBbmRSdW4oZGF0YS5qc0hvb2tzLnJlbmRlciwgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpLCBbZWwsIGRhdGEueF0pOwogICAgICB9OwoKICAgICAgLy8gT25seSBvdmVycmlkZSByZXNpemUgaWYgYmluZGluZ0RlZiBpbXBsZW1lbnRzIGl0CiAgICAgIGlmIChiaW5kaW5nRGVmLnJlc2l6ZSkgewogICAgICAgIHNoaW55QmluZGluZy5yZXNpemUgPSBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCkgewogICAgICAgICAgLy8gU2hpbnkgY2FuIGNhbGwgcmVzaXplIGJlZm9yZSBpbml0aWFsaXplL3JlbmRlclZhbHVlIGhhdmUgYmVlbgogICAgICAgICAgLy8gY2FsbGVkLCB3aGljaCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZm9yIHdpZGdldHMuCiAgICAgICAgICBpZiAoZWxlbWVudERhdGEoZWwsICJpbml0aWFsaXplZCIpKSB7CiAgICAgICAgICAgIGJpbmRpbmdEZWYucmVzaXplKGVsLCB3aWR0aCwgaGVpZ2h0LCBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IikpOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0KCiAgICAgIFNoaW55Lm91dHB1dEJpbmRpbmdzLnJlZ2lzdGVyKHNoaW55QmluZGluZywgYmluZGluZ0RlZi5uYW1lKTsKICAgIH0KICB9OwoKICB2YXIgc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkID0gbnVsbDsKICBmdW5jdGlvbiBzY2hlZHVsZVN0YXRpY1JlbmRlcigpIHsKICAgIGlmICghc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkKSB7CiAgICAgIHNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkID0gbnVsbDsKICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuc3RhdGljUmVuZGVyKCk7CiAgICAgIH0sIDEpOwogICAgfQogIH0KCiAgLy8gUmVuZGVyIHN0YXRpYyB3aWRnZXRzIGFmdGVyIHRoZSBkb2N1bWVudCBmaW5pc2hlcyBsb2FkaW5nCiAgLy8gU3RhdGljYWxseSByZW5kZXIgYWxsIGVsZW1lbnRzIHRoYXQgYXJlIG9mIHRoaXMgd2lkZ2V0J3MgY2xhc3MKICB3aW5kb3cuSFRNTFdpZGdldHMuc3RhdGljUmVuZGVyID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgYmluZGluZ3MgPSB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cyB8fCBbXTsKICAgIGZvckVhY2goYmluZGluZ3MsIGZ1bmN0aW9uKGJpbmRpbmcpIHsKICAgICAgdmFyIG1hdGNoZXMgPSBiaW5kaW5nLmZpbmQoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTsKICAgICAgZm9yRWFjaChtYXRjaGVzLCBmdW5jdGlvbihlbCkgewogICAgICAgIHZhciBzaXplT2JqID0gaW5pdFNpemluZyhlbCwgYmluZGluZyk7CgogICAgICAgIGlmIChoYXNDbGFzcyhlbCwgImh0bWwtd2lkZ2V0LXN0YXRpYy1ib3VuZCIpKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGVsLmNsYXNzTmFtZSA9IGVsLmNsYXNzTmFtZSArICIgaHRtbC13aWRnZXQtc3RhdGljLWJvdW5kIjsKCiAgICAgICAgdmFyIGluaXRSZXN1bHQ7CiAgICAgICAgaWYgKGJpbmRpbmcuaW5pdGlhbGl6ZSkgewogICAgICAgICAgaW5pdFJlc3VsdCA9IGJpbmRpbmcuaW5pdGlhbGl6ZShlbCwKICAgICAgICAgICAgc2l6ZU9iaiA/IHNpemVPYmouZ2V0V2lkdGgoKSA6IGVsLm9mZnNldFdpZHRoLAogICAgICAgICAgICBzaXplT2JqID8gc2l6ZU9iai5nZXRIZWlnaHQoKSA6IGVsLm9mZnNldEhlaWdodAogICAgICAgICAgKTsKICAgICAgICAgIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiLCBpbml0UmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIGlmIChiaW5kaW5nLnJlc2l6ZSkgewogICAgICAgICAgdmFyIGxhc3RTaXplID0gewogICAgICAgICAgICB3OiBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgIGg6IHNpemVPYmogPyBzaXplT2JqLmdldEhlaWdodCgpIDogZWwub2Zmc2V0SGVpZ2h0CiAgICAgICAgICB9OwogICAgICAgICAgdmFyIHJlc2l6ZUhhbmRsZXIgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHZhciBzaXplID0gewogICAgICAgICAgICAgIHc6IHNpemVPYmogPyBzaXplT2JqLmdldFdpZHRoKCkgOiBlbC5vZmZzZXRXaWR0aCwKICAgICAgICAgICAgICBoOiBzaXplT2JqID8gc2l6ZU9iai5nZXRIZWlnaHQoKSA6IGVsLm9mZnNldEhlaWdodAogICAgICAgICAgICB9OwogICAgICAgICAgICBpZiAoc2l6ZS53ID09PSAwICYmIHNpemUuaCA9PT0gMCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGlmIChzaXplLncgPT09IGxhc3RTaXplLncgJiYgc2l6ZS5oID09PSBsYXN0U2l6ZS5oKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgbGFzdFNpemUgPSBzaXplOwogICAgICAgICAgICBiaW5kaW5nLnJlc2l6ZShlbCwgc2l6ZS53LCBzaXplLmgsIGluaXRSZXN1bHQpOwogICAgICAgICAgfTsKCiAgICAgICAgICBvbih3aW5kb3csICJyZXNpemUiLCByZXNpemVIYW5kbGVyKTsKCiAgICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgY2FzZXMgd2hlcmUgd2UncmUgcnVubmluZyBpbiBhIFNoaW55CiAgICAgICAgICAvLyBhcHAsIGJ1dCB0aGUgd2lkZ2V0IGl0c2VsZiBpcyBub3QgYSBTaGlueSBvdXRwdXQsIGJ1dAogICAgICAgICAgLy8gcmF0aGVyIGEgc2ltcGxlIHN0YXRpYyB3aWRnZXQuIE9uZSBleGFtcGxlIG9mIHRoaXMgaXMKICAgICAgICAgIC8vIGFuIHJtYXJrZG93biBkb2N1bWVudCB0aGF0IGhhcyBydW50aW1lOnNoaW55IGFuZCB3aWRnZXQKICAgICAgICAgIC8vIHRoYXQgaXNuJ3QgaW4gYSByZW5kZXIgZnVuY3Rpb24uIFNoaW55IG9ubHkga25vd3MgdG8KICAgICAgICAgIC8vIGNhbGwgcmVzaXplIGhhbmRsZXJzIGZvciBTaGlueSBvdXRwdXRzLCBub3QgZm9yIHN0YXRpYwogICAgICAgICAgLy8gd2lkZ2V0cywgc28gd2UgZG8gaXQgb3Vyc2VsdmVzLgogICAgICAgICAgaWYgKHdpbmRvdy5qUXVlcnkpIHsKICAgICAgICAgICAgd2luZG93LmpRdWVyeShkb2N1bWVudCkub24oCiAgICAgICAgICAgICAgInNob3duLmh0bWx3aWRnZXRzIHNob3duLmJzLnRhYi5odG1sd2lkZ2V0cyBzaG93bi5icy5jb2xsYXBzZS5odG1sd2lkZ2V0cyIsCiAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcgogICAgICAgICAgICApOwogICAgICAgICAgICB3aW5kb3cualF1ZXJ5KGRvY3VtZW50KS5vbigKICAgICAgICAgICAgICAiaGlkZGVuLmh0bWx3aWRnZXRzIGhpZGRlbi5icy50YWIuaHRtbHdpZGdldHMgaGlkZGVuLmJzLmNvbGxhcHNlLmh0bWx3aWRnZXRzIiwKICAgICAgICAgICAgICByZXNpemVIYW5kbGVyCiAgICAgICAgICAgICk7CiAgICAgICAgICB9CgogICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIHRoZSBzcGVjaWZpYyBjYXNlIG9mIGlvc2xpZGVzLCB3aGljaAogICAgICAgICAgLy8gZmxpcHMgc2xpZGVzIGJldHdlZW4gZGlzcGxheTpub25lIGFuZCBkaXNwbGF5OmJsb2NrLgogICAgICAgICAgLy8gSWRlYWxseSB3ZSB3b3VsZCBub3QgaGF2ZSB0byBoYXZlIGlvc2xpZGUtc3BlY2lmaWMgY29kZQogICAgICAgICAgLy8gaGVyZSwgYnV0IHJhdGhlciBoYXZlIGlvc2xpZGVzIHJhaXNlIGEgZ2VuZXJpYyBldmVudCwKICAgICAgICAgIC8vIGJ1dCB0aGUgcm1hcmtkb3duIHBhY2thZ2UganVzdCB3ZW50IHRvIENSQU4gc28gdGhlCiAgICAgICAgICAvLyB3aW5kb3cgdG8gZ2V0dGluZyB0aGF0IGZpeGVkIG1heSBiZSBsb25nLgogICAgICAgICAgaWYgKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgICAgICAgIC8vIEl0J3MgT0sgdG8gbGltaXQgdGhpcyB0byB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcgogICAgICAgICAgICAvLyBicm93c2VycyBiZWNhdXNlIGlvc2xpZGVzIGl0c2VsZiBvbmx5IHN1cHBvcnRzCiAgICAgICAgICAgIC8vIHN1Y2ggYnJvd3NlcnMuCiAgICAgICAgICAgIG9uKGRvY3VtZW50LCAic2xpZGVlbnRlciIsIHJlc2l6ZUhhbmRsZXIpOwogICAgICAgICAgICBvbihkb2N1bWVudCwgInNsaWRlbGVhdmUiLCByZXNpemVIYW5kbGVyKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZhciBzY3JpcHREYXRhID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vanNvbiddIik7CiAgICAgICAgaWYgKHNjcmlwdERhdGEpIHsKICAgICAgICAgIHZhciBkYXRhID0gSlNPTi5wYXJzZShzY3JpcHREYXRhLnRleHRDb250ZW50IHx8IHNjcmlwdERhdGEudGV4dCk7CiAgICAgICAgICAvLyBSZXNvbHZlIHN0cmluZ3MgbWFya2VkIGFzIGphdmFzY3JpcHQgbGl0ZXJhbHMgdG8gb2JqZWN0cwogICAgICAgICAgaWYgKCEoZGF0YS5ldmFscyBpbnN0YW5jZW9mIEFycmF5KSkgZGF0YS5ldmFscyA9IFtkYXRhLmV2YWxzXTsKICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBkYXRhLmV2YWxzICYmIGsgPCBkYXRhLmV2YWxzLmxlbmd0aDsgaysrKSB7CiAgICAgICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5ldmFsdWF0ZVN0cmluZ01lbWJlcihkYXRhLngsIGRhdGEuZXZhbHNba10pOwogICAgICAgICAgfQogICAgICAgICAgYmluZGluZy5yZW5kZXJWYWx1ZShlbCwgZGF0YS54LCBpbml0UmVzdWx0KTsKICAgICAgICAgIGV2YWxBbmRSdW4oZGF0YS5qc0hvb2tzLnJlbmRlciwgaW5pdFJlc3VsdCwgW2VsLCBkYXRhLnhdKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CgogICAgaW52b2tlUG9zdFJlbmRlckhhbmRsZXJzKCk7CiAgfQoKCiAgZnVuY3Rpb24gaGFzX2pRdWVyeTMoKSB7CiAgICBpZiAoIXdpbmRvdy5qUXVlcnkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdmFyICR2ZXJzaW9uID0gd2luZG93LmpRdWVyeS5mbi5qcXVlcnk7CiAgICB2YXIgJG1ham9yX3ZlcnNpb24gPSBwYXJzZUludCgkdmVyc2lvbi5zcGxpdCgiLiIpWzBdKTsKICAgIHJldHVybiAkbWFqb3JfdmVyc2lvbiA+PSAzOwogIH0KCiAgLyoKICAvIFNoaW55IDEuNCBidW1wZWQgalF1ZXJ5IGZyb20gMS54IHRvIDMueCB3aGljaCBtZWFucyBqUXVlcnkncwogIC8gb24tcmVhZHkgaGFuZGxlciAoaS5lLiwgJChmbikpIGlzIG5vdyBhc3luY3Jvbm91cyAoaS5lLiwgaXQgbm93CiAgLyByZWFsbHkgbWVhbnMgJChzZXRUaW1lb3V0KGZuKSkuCiAgLyBodHRwczovL2pxdWVyeS5jb20vdXBncmFkZS1ndWlkZS8zLjAvI2JyZWFraW5nLWNoYW5nZS1kb2N1bWVudC1yZWFkeS1oYW5kbGVycy1hcmUtbm93LWFzeW5jaHJvbm91cwogIC8KICAvIFNpbmNlIFNoaW55IHVzZXMgJCgpIHRvIHNjaGVkdWxlIGluaXRTaGlueSwgc2hpbnk+PTEuNCBjYWxscyBpbml0U2hpbnkKICAvIG9uZSB0aWNrIGxhdGVyIHRoYW4gaXQgZGlkIGJlZm9yZSwgd2hpY2ggbWVhbnMgc3RhdGljUmVuZGVyKCkgaXMKICAvIGNhbGxlZCByZW5kZXJWYWx1ZSgpIGVhcmxpZXIgdGhhbiAoYWR2YW5jZWQpIHdpZGdldCBhdXRob3JzIG1pZ2h0IGJlIGV4cGVjdGluZy4KICAvIGh0dHBzOi8vZ2l0aHViLmNvbS9yc3R1ZGlvL3NoaW55L2lzc3Vlcy8yNjMwCiAgLwogIC8gRm9yIGEgY29uY3JldGUgZXhhbXBsZSwgbGVhZmxldCBoYXMgc29tZSBtZXRob2RzIChlLmcuLCB1cGRhdGVCb3VuZHMpCiAgLyB3aGljaCByZWZlcmVuY2UgU2hpbnkgbWV0aG9kcyByZWdpc3RlcmVkIGluIGluaXRTaGlueSAoZS5nLiwgc2V0SW5wdXRWYWx1ZSkuCiAgLyBTaW5jZSBsZWFmbGV0IGlzIHByaXZ5IHRvIHRoaXMgbGlmZS1jeWNsZSwgaXQga25vd3MgdG8gdXNlIHNldFRpbWVvdXQoKSB0bwogIC8gZGVsYXkgZXhlY3V0aW9uIG9mIHRob3NlIG1ldGhvZHMgKHVudGlsIFNoaW55IG1ldGhvZHMgYXJlIHJlYWR5KQogIC8gaHR0cHM6Ly9naXRodWIuY29tL3JzdHVkaW8vbGVhZmxldC9ibG9iLzE4ZWM5ODEvamF2YXNjcmlwdC9zcmMvaW5kZXguanMjTDI2Ni1MMjY4CiAgLwogIC8gSWRlYWxseSB3aWRnZXQgYXV0aG9ycyB3b3VsZG4ndCBuZWVkIHRvIHVzZSB0aGlzIHNldFRpbWVvdXQoKSBoYWNrIHRoYXQKICAvIGxlYWZsZXQgdXNlcyB0byBjYWxsIFNoaW55IG1ldGhvZHMgb24gYSBzdGF0aWNSZW5kZXIoKS4gSW4gdGhlIGxvbmcgcnVuLAogIC8gdGhlIGxvZ2ljIGluaXRTaGlueSBzaG91bGQgYmUgYnJva2VuIHVwIHNvIHRoYXQgbWV0aG9kIHJlZ2lzdHJhdGlvbiBoYXBwZW5zCiAgLyByaWdodCBhd2F5LCBidXQgYmluZGluZyBoYXBwZW5zIGxhdGVyLgogICovCiAgZnVuY3Rpb24gbWF5YmVTdGF0aWNSZW5kZXJMYXRlcigpIHsKICAgIGlmIChzaGlueU1vZGUgJiYgaGFzX2pRdWVyeTMoKSkgewogICAgICB3aW5kb3cualF1ZXJ5KHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIpOwogICAgfSBlbHNlIHsKICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgfQogIH0KCiAgaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBmdW5jdGlvbigpIHsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGFyZ3VtZW50cy5jYWxsZWUsIGZhbHNlKTsKICAgICAgbWF5YmVTdGF0aWNSZW5kZXJMYXRlcigpOwogICAgfSwgZmFsc2UpOwogIH0gZWxzZSBpZiAoZG9jdW1lbnQuYXR0YWNoRXZlbnQpIHsKICAgIGRvY3VtZW50LmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBmdW5jdGlvbigpIHsKICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIpIHsKICAgICAgICBkb2N1bWVudC5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgYXJndW1lbnRzLmNhbGxlZSk7CiAgICAgICAgbWF5YmVTdGF0aWNSZW5kZXJMYXRlcigpOwogICAgICB9CiAgICB9KTsKICB9CgoKICB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0QXR0YWNobWVudFVybCA9IGZ1bmN0aW9uKGRlcG5hbWUsIGtleSkgewogICAgLy8gSWYgbm8ga2V5LCBkZWZhdWx0IHRvIHRoZSBmaXJzdCBpdGVtCiAgICBpZiAodHlwZW9mKGtleSkgPT09ICJ1bmRlZmluZWQiKQogICAgICBrZXkgPSAxOwoKICAgIHZhciBsaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVwbmFtZSArICItIiArIGtleSArICItYXR0YWNobWVudCIpOwogICAgaWYgKCFsaW5rKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiQXR0YWNobWVudCAiICsgZGVwbmFtZSArICIvIiArIGtleSArICIgbm90IGZvdW5kIGluIGRvY3VtZW50Iik7CiAgICB9CiAgICByZXR1cm4gbGluay5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKICB9OwoKICB3aW5kb3cuSFRNTFdpZGdldHMuZGF0YWZyYW1lVG9EMyA9IGZ1bmN0aW9uKGRmKSB7CiAgICB2YXIgbmFtZXMgPSBbXTsKICAgIHZhciBsZW5ndGg7CiAgICBmb3IgKHZhciBuYW1lIGluIGRmKSB7CiAgICAgICAgaWYgKGRmLmhhc093blByb3BlcnR5KG5hbWUpKQogICAgICAgICAgICBuYW1lcy5wdXNoKG5hbWUpOwogICAgICAgIGlmICh0eXBlb2YoZGZbbmFtZV0pICE9PSAib2JqZWN0IiB8fCB0eXBlb2YoZGZbbmFtZV0ubGVuZ3RoKSA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIik7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YobGVuZ3RoKSAhPT0gInVuZGVmaW5lZCIgJiYgbGVuZ3RoICE9PSBkZltuYW1lXS5sZW5ndGgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCIpOwogICAgICAgIH0KICAgICAgICBsZW5ndGggPSBkZltuYW1lXS5sZW5ndGg7CiAgICB9CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdmFyIGl0ZW07CiAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCBsZW5ndGg7IHJvdysrKSB7CiAgICAgICAgaXRlbSA9IHt9OwogICAgICAgIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG5hbWVzLmxlbmd0aDsgY29sKyspIHsKICAgICAgICAgICAgaXRlbVtuYW1lc1tjb2xdXSA9IGRmW25hbWVzW2NvbF1dW3Jvd107CiAgICAgICAgfQogICAgICAgIHJlc3VsdHMucHVzaChpdGVtKTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH07CgogIHdpbmRvdy5IVE1MV2lkZ2V0cy50cmFuc3Bvc2VBcnJheTJEID0gZnVuY3Rpb24oYXJyYXkpIHsKICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGFycmF5OwogICAgICB2YXIgbmV3QXJyYXkgPSBhcnJheVswXS5tYXAoZnVuY3Rpb24oY29sLCBpKSB7CiAgICAgICAgICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uKHJvdykgewogICAgICAgICAgICAgIHJldHVybiByb3dbaV0KICAgICAgICAgIH0pCiAgICAgIH0pOwogICAgICByZXR1cm4gbmV3QXJyYXk7CiAgfTsKICAvLyBTcGxpdCB2YWx1ZSBhdCBzcGxpdENoYXIsIGJ1dCBhbGxvdyBzcGxpdENoYXIgdG8gYmUgZXNjYXBlZAogIC8vIHVzaW5nIGVzY2FwZUNoYXIuIEFueSBvdGhlciBjaGFyYWN0ZXJzIGVzY2FwZWQgYnkgZXNjYXBlQ2hhcgogIC8vIHdpbGwgYmUgaW5jbHVkZWQgYXMgdXN1YWwgKGluY2x1ZGluZyBlc2NhcGVDaGFyIGl0c2VsZikuCiAgZnVuY3Rpb24gc3BsaXRXaXRoRXNjYXBlKHZhbHVlLCBzcGxpdENoYXIsIGVzY2FwZUNoYXIpIHsKICAgIHZhciByZXN1bHRzID0gW107CiAgICB2YXIgZXNjYXBlTW9kZSA9IGZhbHNlOwogICAgdmFyIGN1cnJlbnRSZXN1bHQgPSAiIjsKICAgIGZvciAodmFyIHBvcyA9IDA7IHBvcyA8IHZhbHVlLmxlbmd0aDsgcG9zKyspIHsKICAgICAgaWYgKCFlc2NhcGVNb2RlKSB7CiAgICAgICAgaWYgKHZhbHVlW3Bvc10gPT09IHNwbGl0Q2hhcikgewogICAgICAgICAgcmVzdWx0cy5wdXNoKGN1cnJlbnRSZXN1bHQpOwogICAgICAgICAgY3VycmVudFJlc3VsdCA9ICIiOwogICAgICAgIH0gZWxzZSBpZiAodmFsdWVbcG9zXSA9PT0gZXNjYXBlQ2hhcikgewogICAgICAgICAgZXNjYXBlTW9kZSA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGN1cnJlbnRSZXN1bHQgKz0gdmFsdWVbcG9zXTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY3VycmVudFJlc3VsdCArPSB2YWx1ZVtwb3NdOwogICAgICAgIGVzY2FwZU1vZGUgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaWYgKGN1cnJlbnRSZXN1bHQgIT09ICIiKSB7CiAgICAgIHJlc3VsdHMucHVzaChjdXJyZW50UmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH0KICAvLyBGdW5jdGlvbiBhdXRob3JlZCBieSBZaWh1aS9KSiBBbGxhaXJlCiAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyID0gZnVuY3Rpb24obywgbWVtYmVyKSB7CiAgICB2YXIgcGFydHMgPSBzcGxpdFdpdGhFc2NhcGUobWVtYmVyLCAnLicsICdcXCcpOwogICAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgdmFyIHBhcnQgPSBwYXJ0c1tpXTsKICAgICAgLy8gcGFydCBtYXkgYmUgYSBjaGFyYWN0ZXIgb3IgJ251bWVyaWMnIG1lbWJlciBuYW1lCiAgICAgIGlmIChvICE9PSBudWxsICYmIHR5cGVvZiBvID09PSAib2JqZWN0IiAmJiBwYXJ0IGluIG8pIHsKICAgICAgICBpZiAoaSA9PSAobCAtIDEpKSB7IC8vIGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIHRoZW4gZXZhbHVsYXRlCiAgICAgICAgICBpZiAodHlwZW9mIG9bcGFydF0gPT09ICJzdHJpbmciKQogICAgICAgICAgICBvW3BhcnRdID0gdHJ5RXZhbChvW3BhcnRdKTsKICAgICAgICB9IGVsc2UgeyAvLyBvdGhlcndpc2UgY29udGludWUgdG8gbmV4dCBlbWJlZGRlZCBvYmplY3QKICAgICAgICAgIG8gPSBvW3BhcnRdOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH07CgogIC8vIFJldHJpZXZlIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlIChpLmUuIHRoZSByZXR1cm4gdmFsdWUgb2YgYW4KICAvLyBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQogIC8vIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGVtZW50LCBvciBudWxsIGlmIG5vbmUuCiAgd2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlID0gZnVuY3Rpb24oZWwpIHsKICAgIHJldHVybiBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0Iik7CiAgfTsKCiAgLy8gRmluZHMgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHNjb3BlIHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IsCiAgLy8gYW5kIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2UgKGkuZS4gdGhlIHJldHVybiB2YWx1ZSBvZgogIC8vIGFuIEhUTUxXaWRnZXQgYmluZGluZydzIGluaXRpYWxpemUoKSBvciBmYWN0b3J5KCkgZnVuY3Rpb24pCiAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoYXQgZWxlbWVudCwgaWYgYW55LiBJZiBubyBlbGVtZW50IG1hdGNoZXMgdGhlCiAgLy8gc2VsZWN0b3IsIG9yIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGhhcyBubyBIVE1MV2lkZ2V0CiAgLy8gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIGl0LCB0aGVuIG51bGwgaXMgcmV0dXJuZWQuCiAgLy8KICAvLyBUaGUgc2NvcGUgYXJndW1lbnQgaXMgb3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byB3aW5kb3cuZG9jdW1lbnQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmZpbmQgPSBmdW5jdGlvbihzY29wZSwgc2VsZWN0b3IpIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgc2VsZWN0b3IgPSBzY29wZTsKICAgICAgc2NvcGUgPSBkb2N1bWVudDsKICAgIH0KCiAgICB2YXIgZWwgPSBzY29wZS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKICAgIGlmIChlbCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0SW5zdGFuY2UoZWwpOwogICAgfQogIH07CgogIC8vIEZpbmRzIGFsbCBlbGVtZW50cyBpbiB0aGUgc2NvcGUgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IsIGFuZAogIC8vIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2VzIChpLmUuIHRoZSByZXR1cm4gdmFsdWVzIG9mCiAgLy8gYW4gSFRNTFdpZGdldCBiaW5kaW5nJ3MgaW5pdGlhbGl6ZSgpIG9yIGZhY3RvcnkoKSBmdW5jdGlvbikKICAvLyBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnRzLCBpbiBhbiBhcnJheS4gSWYgZWxlbWVudHMgdGhhdAogIC8vIG1hdGNoIHRoZSBzZWxlY3RvciBkb24ndCBoYXZlIGFuIGFzc29jaWF0ZWQgSFRNTFdpZGdldAogIC8vIGluc3RhbmNlLCB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBjb250YWluIG51bGxzLgogIC8vCiAgLy8gVGhlIHNjb3BlIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCBhbmQgZGVmYXVsdHMgdG8gd2luZG93LmRvY3VtZW50LgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5maW5kQWxsID0gZnVuY3Rpb24oc2NvcGUsIHNlbGVjdG9yKSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgIHNlbGVjdG9yID0gc2NvcGU7CiAgICAgIHNjb3BlID0gZG9jdW1lbnQ7CiAgICB9CgogICAgdmFyIG5vZGVzID0gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykgewogICAgICByZXN1bHRzLnB1c2god2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlKG5vZGVzW2ldKSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9OwoKICB2YXIgcG9zdFJlbmRlckhhbmRsZXJzID0gW107CiAgZnVuY3Rpb24gaW52b2tlUG9zdFJlbmRlckhhbmRsZXJzKCkgewogICAgd2hpbGUgKHBvc3RSZW5kZXJIYW5kbGVycy5sZW5ndGgpIHsKICAgICAgdmFyIGhhbmRsZXIgPSBwb3N0UmVuZGVySGFuZGxlcnMuc2hpZnQoKTsKICAgICAgaWYgKGhhbmRsZXIpIHsKICAgICAgICBoYW5kbGVyKCk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vIFJlZ2lzdGVyIHRoZSBnaXZlbiBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBpbnZva2VkIGFmdGVyIHRoZQogIC8vIG5leHQgdGltZSBzdGF0aWMgd2lkZ2V0cyBhcmUgcmVuZGVyZWQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmFkZFBvc3RSZW5kZXJIYW5kbGVyID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgIHBvc3RSZW5kZXJIYW5kbGVycy5wdXNoKGNhbGxiYWNrKTsKICB9OwoKICAvLyBUYWtlcyBhIG5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9uLCBhbmQgcmV0dXJucyBhbgogIC8vIG9sZC1zdHlsZSBjbGFzcy1ib3VuZCBkZWZpbml0aW9uLiBUaGlzIHNhdmVzIHVzIGZyb20gaGF2aW5nCiAgLy8gdG8gcmV3cml0ZSBhbGwgdGhlIGxvZ2ljIGluIHRoaXMgZmlsZSB0byBhY2NvbW9kYXRlIGJvdGgKICAvLyB0eXBlcyBvZiBkZWZpbml0aW9ucy4KICBmdW5jdGlvbiBjcmVhdGVMZWdhY3lEZWZpbml0aW9uQWRhcHRlcihkZWZuKSB7CiAgICB2YXIgcmVzdWx0ID0gewogICAgICBuYW1lOiBkZWZuLm5hbWUsCiAgICAgIHR5cGU6IGRlZm4udHlwZSwKICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICByZXR1cm4gZGVmbi5mYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgfSwKICAgICAgcmVuZGVyVmFsdWU6IGZ1bmN0aW9uKGVsLCB4LCBpbnN0YW5jZSkgewogICAgICAgIHJldHVybiBpbnN0YW5jZS5yZW5kZXJWYWx1ZSh4KTsKICAgICAgfSwKICAgICAgcmVzaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCwgaW5zdGFuY2UpIHsKICAgICAgICByZXR1cm4gaW5zdGFuY2UucmVzaXplKHdpZHRoLCBoZWlnaHQpOwogICAgICB9CiAgICB9OwoKICAgIGlmIChkZWZuLmZpbmQpCiAgICAgIHJlc3VsdC5maW5kID0gZGVmbi5maW5kOwogICAgaWYgKGRlZm4ucmVuZGVyRXJyb3IpCiAgICAgIHJlc3VsdC5yZW5kZXJFcnJvciA9IGRlZm4ucmVuZGVyRXJyb3I7CiAgICBpZiAoZGVmbi5jbGVhckVycm9yKQogICAgICByZXN1bHQuY2xlYXJFcnJvciA9IGRlZm4uY2xlYXJFcnJvcjsKCiAgICByZXR1cm4gcmVzdWx0OwogIH0KfSkoKTsKCg=="></script> <script src="data:application/javascript;base64,IWZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Z1bmN0aW9uIHIobil7aWYodFtuXSlyZXR1cm4gdFtuXS5leHBvcnRzO3ZhciBhPXRbbl09e2k6bixsOiExLGV4cG9ydHM6e319O3JldHVybiBlW25dLmNhbGwoYS5leHBvcnRzLGEsYS5leHBvcnRzLHIpLGEubD0hMCxhLmV4cG9ydHN9ci5tPWUsci5jPXQsci5kPWZ1bmN0aW9uKGUsdCxuKXtyLm8oZSx0KXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7ZW51bWVyYWJsZTohMCxnZXQ6bn0pfSxyLnI9ZnVuY3Rpb24oZSl7InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sci50PWZ1bmN0aW9uKGUsdCl7aWYoMSZ0JiYoZT1yKGUpKSw4JnQpcmV0dXJuIGU7aWYoNCZ0JiYib2JqZWN0Ij09dHlwZW9mIGUmJmUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKHIucihuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6ZX0pLDImdCYmInN0cmluZyIhPXR5cGVvZiBlKWZvcih2YXIgYSBpbiBlKXIuZChuLGEsZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19LmJpbmQobnVsbCxhKSk7cmV0dXJuIG59LHIubj1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gci5kKHQsImEiLHQpLHR9LHIubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sci5wPSIiLHIoci5zPTIwKX0oW2Z1bmN0aW9uKGUsdCxyKXtlLmV4cG9ydHM9cigxMykoKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9d2luZG93LlJlYWN0fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlJlYWN0VGFibGVEZWZhdWx0cz12b2lkIDA7dmFyIG49ZnVuY3Rpb24oZSx0KXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlO2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSkpcmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIHI9W10sbj0hMCxhPSExLG89dm9pZCAwO3RyeXtmb3IodmFyIGksbD1lW1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KGk9bC5uZXh0KCkpLmRvbmUpJiYoci5wdXNoKGkudmFsdWUpLCF0fHxyLmxlbmd0aCE9PXQpO249ITApO31jYXRjaChlKXthPSEwLG89ZX1maW5hbGx5e3RyeXshbiYmbC5yZXR1cm4mJmwucmV0dXJuKCl9ZmluYWxseXtpZihhKXRocm93IG99fXJldHVybiByfShlLHQpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX0sYT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSxvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbih0LHIsbil7cmV0dXJuIHImJmUodC5wcm90b3R5cGUsciksbiYmZSh0LG4pLHR9fSgpLGk9cigxKSxsPWcoaSkscz1nKHIoNCkpLHU9ZyhyKDUpKSxjPWcocig4KSksZj1nKHIoOSkpLGQ9ZyhyKDEwKSkscD1nKHIoMTIpKTtmdW5jdGlvbiBnKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10LlJlYWN0VGFibGVEZWZhdWx0cz1kLmRlZmF1bHQ7dmFyIGg9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KTt2YXIgcj1mdW5jdGlvbihlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fSh0aGlzLCh0Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKS5jYWxsKHRoaXMpKTtyZXR1cm4gci5nZXRSZXNvbHZlZFN0YXRlPXIuZ2V0UmVzb2x2ZWRTdGF0ZS5iaW5kKHIpLHIuZ2V0RGF0YU1vZGVsPXIuZ2V0RGF0YU1vZGVsLmJpbmQociksci5nZXRTb3J0ZWREYXRhPXIuZ2V0U29ydGVkRGF0YS5iaW5kKHIpLHIuZmlyZUZldGNoRGF0YT1yLmZpcmVGZXRjaERhdGEuYmluZChyKSxyLmdldFByb3BPclN0YXRlPXIuZ2V0UHJvcE9yU3RhdGUuYmluZChyKSxyLmdldFN0YXRlT3JQcm9wPXIuZ2V0U3RhdGVPclByb3AuYmluZChyKSxyLmZpbHRlckRhdGE9ci5maWx0ZXJEYXRhLmJpbmQociksci5zb3J0RGF0YT1yLnNvcnREYXRhLmJpbmQociksci5nZXRNaW5Sb3dzPXIuZ2V0TWluUm93cy5iaW5kKHIpLHIub25QYWdlQ2hhbmdlPXIub25QYWdlQ2hhbmdlLmJpbmQociksci5vblBhZ2VTaXplQ2hhbmdlPXIub25QYWdlU2l6ZUNoYW5nZS5iaW5kKHIpLHIuc29ydENvbHVtbj1yLnNvcnRDb2x1bW4uYmluZChyKSxyLmZpbHRlckNvbHVtbj1yLmZpbHRlckNvbHVtbi5iaW5kKHIpLHIucmVzaXplQ29sdW1uU3RhcnQ9ci5yZXNpemVDb2x1bW5TdGFydC5iaW5kKHIpLHIucmVzaXplQ29sdW1uRW5kPXIucmVzaXplQ29sdW1uRW5kLmJpbmQociksci5yZXNpemVDb2x1bW5Nb3Zpbmc9ci5yZXNpemVDb2x1bW5Nb3ZpbmcuYmluZChyKSxyLnN0YXRlPXtwYWdlOjAscGFnZVNpemU6ZS5kZWZhdWx0UGFnZVNpemUsc29ydGVkOmUuZGVmYXVsdFNvcnRlZCxleHBhbmRlZDplLmRlZmF1bHRFeHBhbmRlZCxmaWx0ZXJlZDplLmRlZmF1bHRGaWx0ZXJlZCxyZXNpemVkOmUuZGVmYXVsdFJlc2l6ZWQsY3VycmVudGx5UmVzaXppbmc6ITEsc2tpcE5leHRTb3J0OiExfSxyfXJldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9KHQsZSksbyh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuZ2V0UmVzb2x2ZWRTdGF0ZSgpLHI9dC5jaGlsZHJlbixvPXQuY2xhc3NOYW1lLGk9dC5zdHlsZSxjPXQuZ2V0UHJvcHMsZj10LmdldFRhYmxlUHJvcHMscD10LmdldFRoZWFkR3JvdXBQcm9wcyxnPXQuZ2V0VGhlYWRHcm91cFRyUHJvcHMsaD10LmdldFRoZWFkR3JvdXBUaFByb3BzLG09dC5nZXRUaGVhZFByb3BzLGI9dC5nZXRUaGVhZFRyUHJvcHMseT10LmdldFRoZWFkVGhQcm9wcyx2PXQuZ2V0VGhlYWRGaWx0ZXJQcm9wcyx3PXQuZ2V0VGhlYWRGaWx0ZXJUclByb3BzLHg9dC5nZXRUaGVhZEZpbHRlclRoUHJvcHMsUz10LmdldFRib2R5UHJvcHMsUD10LmdldFRyR3JvdXBQcm9wcyxDPXQuZ2V0VHJQcm9wcyxPPXQuZ2V0VGRQcm9wcyxrPXQuZ2V0VGZvb3RQcm9wcyxUPXQuZ2V0VGZvb3RUclByb3BzLGo9dC5nZXRUZm9vdFRkUHJvcHMsRT10LmdldFBhZ2luYXRpb25Qcm9wcyxSPXQuZ2V0TG9hZGluZ1Byb3BzLE49dC5nZXROb0RhdGFQcm9wcyxBPXQuZ2V0UmVzaXplclByb3BzLEQ9dC5zaG93UGFnaW5hdGlvbix6PXQuc2hvd1BhZ2luYXRpb25Ub3AsXz10LnNob3dQYWdpbmF0aW9uQm90dG9tLEY9dC5tYW51YWwsTT10LmxvYWRpbmdUZXh0LEk9dC5ub0RhdGFUZXh0LEw9dC5zb3J0YWJsZSxXPXQucmVzaXphYmxlLEs9dC5maWx0ZXJhYmxlLEI9dC5waXZvdElES2V5LEg9dC5waXZvdFZhbEtleSxHPXQucGl2b3RCeSxVPXQuc3ViUm93c0tleSxWPXQuYWdncmVnYXRlZEtleSxKPXQub3JpZ2luYWxLZXksJD10LmluZGV4S2V5LHE9dC5ncm91cGVkQnlQaXZvdEtleSxYPXQubG9hZGluZyxZPXQucGFnZVNpemUsWj10LnBhZ2UsUT10LnNvcnRlZCxlZT10LmZpbHRlcmVkLHRlPXQucmVzaXplZCxyZT10LmV4cGFuZGVkLG5lPXQucGFnZXMsYWU9dC5vbkV4cGFuZGVkQ2hhbmdlLG9lPXQuVGFibGVDb21wb25lbnQsaWU9dC5UaGVhZENvbXBvbmVudCxsZT10LlRib2R5Q29tcG9uZW50LHNlPXQuVHJHcm91cENvbXBvbmVudCx1ZT10LlRyQ29tcG9uZW50LGNlPXQuVGhDb21wb25lbnQsZmU9dC5UZENvbXBvbmVudCxkZT10LlRmb290Q29tcG9uZW50LHBlPXQuUGFnaW5hdGlvbkNvbXBvbmVudCxnZT10LkxvYWRpbmdDb21wb25lbnQsaGU9dC5TdWJDb21wb25lbnQsbWU9dC5Ob0RhdGFDb21wb25lbnQsYmU9dC5SZXNpemVyQ29tcG9uZW50LHllPXQuRXhwYW5kZXJDb21wb25lbnQsdmU9dC5QaXZvdFZhbHVlQ29tcG9uZW50LHdlPXQuUGl2b3RDb21wb25lbnQseGU9dC5BZ2dyZWdhdGVkQ29tcG9uZW50LFNlPXQuRmlsdGVyQ29tcG9uZW50LFBlPXQuUGFkUm93Q29tcG9uZW50LENlPXQucmVzb2x2ZWREYXRhLE9lPXQuYWxsVmlzaWJsZUNvbHVtbnMsa2U9dC5oZWFkZXJHcm91cHMsVGU9dC5oYXNIZWFkZXJHcm91cHMsamU9dC5zb3J0ZWREYXRhLEVlPXQuY3VycmVudGx5UmVzaXppbmcsUmU9WSpaLE5lPVJlK1ksQWU9Rj9DZTpqZS5zbGljZShSZSxOZSksRGU9dGhpcy5nZXRNaW5Sb3dzKCksemU9dS5kZWZhdWx0LnJhbmdlKE1hdGgubWF4KERlLUFlLmxlbmd0aCwwKSksX2U9T2Uuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuRm9vdGVyfSkpLEZlPUt8fE9lLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmZpbHRlcmFibGV9KSksTWU9ZnVuY3Rpb24gZSh0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10sbz1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06LTE7cmV0dXJuW3QubWFwKChmdW5jdGlvbih0LGkpe28rKzt2YXIgbD1hKHt9LHQse192aWV3SW5kZXg6b30pLHM9ci5jb25jYXQoW2ldKTtpZihsW1VdJiZ1LmRlZmF1bHQuZ2V0KHJlLHMpKXt2YXIgYz1lKGxbVV0scyxvKSxmPW4oYywyKTtsW1VdPWZbMF0sbz1mWzFdfXJldHVybiBsfSkpLG9dfShBZSksSWU9bihNZSwxKTtBZT1JZVswXTt2YXIgTGU9Wj4wLFdlPVorMTxuZSxLZT11LmRlZmF1bHQuc3VtKE9lLm1hcCgoZnVuY3Rpb24oZSl7dmFyIHQ9dGUuZmluZCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWQ9PT1lLmlkfSkpfHx7fTtyZXR1cm4gdS5kZWZhdWx0LmdldEZpcnN0RGVmaW5lZCh0LnZhbHVlLGUud2lkdGgsZS5taW5XaWR0aCl9KSkpLEJlPS0xLEhlPWEoe30sdCx7c3RhcnRSb3c6UmUsZW5kUm93Ok5lLHBhZ2VSb3dzOkFlLG1pblJvd3M6RGUscGFkUm93czp6ZSxoYXNDb2x1bW5Gb290ZXI6X2UsY2FuUHJldmlvdXM6TGUsY2FuTmV4dDpXZSxyb3dNaW5XaWR0aDpLZX0pLEdlPWZ1bmN0aW9uKHQscil7dmFyIG49ZnVuY3Rpb24oZSl7cmV0dXJuKHRlLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkPT09ZS5pZH0pKXx8e30pLnZhbHVlfSxvPXUuZGVmYXVsdC5zdW0odC5jb2x1bW5zLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUud2lkdGh8fG4oZSk/MDplLm1pbldpZHRofSkpKSxpPXUuZGVmYXVsdC5zdW0odC5jb2x1bW5zLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHUuZGVmYXVsdC5nZXRGaXJzdERlZmluZWQobihlKSxlLndpZHRoLGUubWluV2lkdGgpfSkpKSxjPXUuZGVmYXVsdC5zdW0odC5jb2x1bW5zLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHUuZGVmYXVsdC5nZXRGaXJzdERlZmluZWQobihlKSxlLndpZHRoLGUubWF4V2lkdGgpfSkpKSxmPXUuZGVmYXVsdC5zcGxpdFByb3BzKGgoSGUsdm9pZCAwLHQsZSkpLGQ9dS5kZWZhdWx0LnNwbGl0UHJvcHModC5nZXRIZWFkZXJQcm9wcyhIZSx2b2lkIDAsdCxlKSkscD1bdC5oZWFkZXJDbGFzc05hbWUsZi5jbGFzc05hbWUsZC5jbGFzc05hbWVdLGc9YSh7fSx0LmhlYWRlclN0eWxlLGYuc3R5bGUsZC5zdHlsZSksbT1hKHt9LGYucmVzdCxkLnJlc3QpLGI9e2ZsZXg6bysiIDAgYXV0byIsd2lkdGg6dS5kZWZhdWx0LmFzUHgoaSksbWF4V2lkdGg6dS5kZWZhdWx0LmFzUHgoYyl9O3JldHVybiBsLmRlZmF1bHQuY3JlYXRlRWxlbWVudChjZSxhKHtrZXk6cisiLSIrdC5pZCxjbGFzc05hbWU6KDAscy5kZWZhdWx0KShwKSxzdHlsZTphKHt9LGcsYil9LG0pLHUuZGVmYXVsdC5ub3JtYWxpemVDb21wb25lbnQodC5IZWFkZXIse2RhdGE6amUsY29sdW1uOnR9KSl9LFVlPWZ1bmN0aW9uKHQscil7dmFyIG49dGUuZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWQ9PT10LmlkfSkpfHx7fSxvPShRLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkPT09dC5pZH0pKSwiZnVuY3Rpb24iPT10eXBlb2YgdC5zaG93P3Quc2hvdygpOnQuc2hvdyksaT11LmRlZmF1bHQuZ2V0Rmlyc3REZWZpbmVkKG4udmFsdWUsdC53aWR0aCx0Lm1pbldpZHRoKSxjPXUuZGVmYXVsdC5nZXRGaXJzdERlZmluZWQobi52YWx1ZSx0LndpZHRoLHQubWF4V2lkdGgpLGY9dS5kZWZhdWx0LnNwbGl0UHJvcHMoeShIZSx2b2lkIDAsdCxlKSksZD11LmRlZmF1bHQuc3BsaXRQcm9wcyh0LmdldEhlYWRlclByb3BzKEhlLHZvaWQgMCx0LGUpKSxwPVt0LmhlYWRlckNsYXNzTmFtZSxmLmNsYXNzTmFtZSxkLmNsYXNzTmFtZV0sZz1hKHt9LHQuaGVhZGVyU3R5bGUsZi5zdHlsZSxkLnN0eWxlKSxoPWEoe30sZi5yZXN0LGQucmVzdCksbT11LmRlZmF1bHQuZ2V0Rmlyc3REZWZpbmVkKHQucmVzaXphYmxlLFcsITEpLGI9bT9sLmRlZmF1bHQuY3JlYXRlRWxlbWVudChiZSxhKHtvbk1vdXNlRG93bjpmdW5jdGlvbihyKXtyZXR1cm4gZS5yZXNpemVDb2x1bW5TdGFydChyLHQsITEpfSxvblRvdWNoU3RhcnQ6ZnVuY3Rpb24ocil7cmV0dXJuIGUucmVzaXplQ29sdW1uU3RhcnQocix0LCEwKX19LHR0KSk6bnVsbCx2PXUuZGVmYXVsdC5nZXRGaXJzdERlZmluZWQodC5zb3J0YWJsZSxMLCExKSx3PXZvaWQgMDtyZXR1cm4gdz1tP2wuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InJ0LXJlc2l6YWJsZS1oZWFkZXItY29udGVudCJ9LHUuZGVmYXVsdC5ub3JtYWxpemVDb21wb25lbnQodC5IZWFkZXIse2RhdGE6amUsY29sdW1uOnR9KSk6dS5kZWZhdWx0Lm5vcm1hbGl6ZUNvbXBvbmVudCh0LkhlYWRlcix7ZGF0YTpqZSxjb2x1bW46dH0pLGwuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGNlLGEoe2tleTpyKyItIit0LmlkLGNsYXNzTmFtZTooMCxzLmRlZmF1bHQpKHAsbSYmInJ0LXJlc2l6YWJsZS1oZWFkZXIiLHYmJiItY3Vyc29yLXBvaW50ZXIiLCFvJiYiLWhpZGRlbiIsRyYmRy5zbGljZSgwLC0xKS5pbmNsdWRlcyh0LmlkKSYmInJ0LWhlYWRlci1waXZvdCIpLHN0eWxlOmEoe30sZyx7ZmxleDppKyIgMCBhdXRvIix3aWR0aDp1LmRlZmF1bHQuYXNQeChpKSxtYXhXaWR0aDp1LmRlZmF1bHQuYXNQeChjKX0pLHRvZ2dsZVNvcnQ6dj9mdW5jdGlvbihyKXtyZXR1cm4gZS5zb3J0Q29sdW1uKHQsci5zaGlmdEtleSl9OnZvaWQgMH0saCksdyxiKX0sVmU9ZnVuY3Rpb24odCxyKXt2YXIgbj10ZS5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4gZS5pZD09PXQuaWR9KSl8fHt9LG89dS5kZWZhdWx0LmdldEZpcnN0RGVmaW5lZChuLnZhbHVlLHQud2lkdGgsdC5taW5XaWR0aCksaT11LmRlZmF1bHQuZ2V0Rmlyc3REZWZpbmVkKG4udmFsdWUsdC53aWR0aCx0Lm1heFdpZHRoKSxjPXUuZGVmYXVsdC5zcGxpdFByb3BzKHgoSGUsdm9pZCAwLHQsZSkpLGY9dS5kZWZhdWx0LnNwbGl0UHJvcHModC5nZXRIZWFkZXJQcm9wcyhIZSx2b2lkIDAsdCxlKSkscD1bdC5oZWFkZXJDbGFzc05hbWUsYy5jbGFzc05hbWUsZi5jbGFzc05hbWVdLGc9YSh7fSx0LmhlYWRlclN0eWxlLGMuc3R5bGUsZi5zdHlsZSksaD1hKHt9LGMucmVzdCxmLnJlc3QpLG09ZWUuZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWQ9PT10LmlkfSkpLGI9dC5GaWx0ZXJ8fFNlLHk9dS5kZWZhdWx0LmdldEZpcnN0RGVmaW5lZCh0LmZpbHRlcmFibGUsSywhMSk7cmV0dXJuIGwuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGZlLGEoe2tleTpyKyItIit0LmlkLGNsYXNzTmFtZTooMCxzLmRlZmF1bHQpKHApLHN0eWxlOmEoe30sZyx7ZmxleDpvKyIgMCBhdXRvIix3aWR0aDp1LmRlZmF1bHQuYXNQeChvKSxtYXhXaWR0aDp1LmRlZmF1bHQuYXNQeChpKX0pfSxoKSx5P3UuZGVmYXVsdC5ub3JtYWxpemVDb21wb25lbnQoYix7Y29sdW1uOnQsZmlsdGVyOm0sb25DaGFuZ2U6ZnVuY3Rpb24ocil7cmV0dXJuIGUuZmlsdGVyQ29sdW1uKHQscil9fSxkLmRlZmF1bHQuY29sdW1uLkZpbHRlcik6bnVsbCl9LEplPWZ1bmN0aW9uKHQscil7dmFyIG49UChIZSx2b2lkIDAsdm9pZCAwLGUpLG89dS5kZWZhdWx0LnNwbGl0UHJvcHMoQyhIZSx2b2lkIDAsdm9pZCAwLGUpKTtyZXR1cm4gbC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoc2UsYSh7a2V5OnJ9LG4pLGwuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHVlLHtjbGFzc05hbWU6KDAscy5kZWZhdWx0KSgiLXBhZFJvdyIsby5jbGFzc05hbWUpLHN0eWxlOm8uc3R5bGV8fHt9fSxPZS5tYXAoJGUpKSl9LCRlPWZ1bmN0aW9uKHQscil7dmFyIG49dGUuZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWQ9PT10LmlkfSkpfHx7fSxvPSJmdW5jdGlvbiI9PXR5cGVvZiB0LnNob3c/dC5zaG93KCk6dC5zaG93LGk9dS5kZWZhdWx0LmdldEZpcnN0RGVmaW5lZChuLnZhbHVlLHQud2lkdGgsdC5taW5XaWR0aCksYz1pLGY9dS5kZWZhdWx0LmdldEZpcnN0RGVmaW5lZChuLnZhbHVlLHQud2lkdGgsdC5tYXhXaWR0aCksZD11LmRlZmF1bHQuc3BsaXRQcm9wcyhPKEhlLHZvaWQgMCx0LGUpKSxwPXUuZGVmYXVsdC5zcGxpdFByb3BzKHQuZ2V0UHJvcHMoSGUsdm9pZCAwLHQsZSkpLGc9W2QuY2xhc3NOYW1lLHQuY2xhc3NOYW1lLHAuY2xhc3NOYW1lXSxoPWEoe30sZC5zdHlsZSx0LnN0eWxlLHAuc3R5bGUpO3JldHVybiBsLmRlZmF1bHQuY3JlYXRlRWxlbWVudChmZSxhKHtrZXk6cisiLSIrdC5pZCxjbGFzc05hbWU6KDAscy5kZWZhdWx0KShnLCFvJiYiaGlkZGVuIiksc3R5bGU6YSh7fSxoLHtmbGV4OmMrIiAwIGF1dG8iLHdpZHRoOnUuZGVmYXVsdC5hc1B4KGkpLG1heFdpZHRoOnUuZGVmYXVsdC5hc1B4KGYpfSl9LGQucmVzdCksdS5kZWZhdWx0Lm5vcm1hbGl6ZUNvbXBvbmVudChQZSkpfSxxZT1mdW5jdGlvbih0LHIpe3ZhciBuPXRlLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkPT09dC5pZH0pKXx8e30sbz0iZnVuY3Rpb24iPT10eXBlb2YgdC5zaG93P3Quc2hvdygpOnQuc2hvdyxpPXUuZGVmYXVsdC5nZXRGaXJzdERlZmluZWQobi52YWx1ZSx0LndpZHRoLHQubWluV2lkdGgpLGM9dS5kZWZhdWx0LmdldEZpcnN0RGVmaW5lZChuLnZhbHVlLHQud2lkdGgsdC5tYXhXaWR0aCksZj11LmRlZmF1bHQuc3BsaXRQcm9wcyhqKEhlLHZvaWQgMCx2b2lkIDAsZSkpLGQ9dS5kZWZhdWx0LnNwbGl0UHJvcHModC5nZXRQcm9wcyhIZSx2b2lkIDAsdCxlKSkscD11LmRlZmF1bHQuc3BsaXRQcm9wcyh0LmdldEZvb3RlclByb3BzKEhlLHZvaWQgMCx0LGUpKSxnPVtmLmNsYXNzTmFtZSx0LmZvb3RlckNsYXNzTmFtZSxkLmZvb3RlckNsYXNzTmFtZSxwLmNsYXNzTmFtZV0saD1hKHt9LGYuc3R5bGUsdC5mb290ZXJTdHlsZSxkLmZvb3RlclN0eWxlLHAuc3R5bGUpO3JldHVybiBsLmRlZmF1bHQuY3JlYXRlRWxlbWVudChmZSxhKHtrZXk6cisiLSIrdC5pZCxjbGFzc05hbWU6KDAscy5kZWZhdWx0KShnLCFvJiYiaGlkZGVuIiksc3R5bGU6YSh7fSxoLHtmbGV4OmkrIiAwIGF1dG8iLHdpZHRoOnUuZGVmYXVsdC5hc1B4KGkpLG1heFdpZHRoOnUuZGVmYXVsdC5hc1B4KGMpfSl9LGQucmVzdCxmLnJlc3QscC5yZXN0KSx1LmRlZmF1bHQubm9ybWFsaXplQ29tcG9uZW50KHQuRm9vdGVyLHtkYXRhOmplLGNvbHVtbjp0fSkpfSxYZT11LmRlZmF1bHQuc3BsaXRQcm9wcyhjKEhlLHZvaWQgMCx2b2lkIDAsdGhpcykpLFllPXUuZGVmYXVsdC5zcGxpdFByb3BzKGYoSGUsdm9pZCAwLHZvaWQgMCx0aGlzKSksWmU9dS5kZWZhdWx0LnNwbGl0UHJvcHMoUyhIZSx2b2lkIDAsdm9pZCAwLHRoaXMpKSxRZT1SKEhlLHZvaWQgMCx2b2lkIDAsdGhpcyksZXQ9TihIZSx2b2lkIDAsdm9pZCAwLHRoaXMpLHR0PUEoSGUsdm9pZCAwLHZvaWQgMCx0aGlzKSxydD1mdW5jdGlvbigpe3ZhciByLG4sYyxmLGQsaCx5LHgsUyxqPShyPXUuZGVmYXVsdC5zcGxpdFByb3BzKEUoSGUsdm9pZCAwLHZvaWQgMCxlKSksbC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQocGUsYSh7fSx0LHtwYWdlczpuZSxjYW5QcmV2aW91czpMZSxjYW5OZXh0OldlLG9uUGFnZUNoYW5nZTplLm9uUGFnZUNoYW5nZSxvblBhZ2VTaXplQ2hhbmdlOmUub25QYWdlU2l6ZUNoYW5nZSxjbGFzc05hbWU6ci5jbGFzc05hbWUsc3R5bGU6ci5zdHlsZX0sci5yZXN0KSkpO3JldHVybiBsLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2IixhKHtjbGFzc05hbWU6KDAscy5kZWZhdWx0KSgiUmVhY3RUYWJsZSIsbyxYZS5jbGFzc05hbWUpLHN0eWxlOmEoe30saSxYZS5zdHlsZSl9LFhlLnJlc3QpLEQmJno/bC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToicGFnaW5hdGlvbi10b3AifSxqKTpudWxsLGwuZGVmYXVsdC5jcmVhdGVFbGVtZW50KG9lLGEoe2NsYXNzTmFtZTooMCxzLmRlZmF1bHQpKFllLmNsYXNzTmFtZSxFZT8icnQtcmVzaXppbmciOiIiKSxzdHlsZTpZZS5zdHlsZX0sWWUucmVzdCksVGU/KHg9dS5kZWZhdWx0LnNwbGl0UHJvcHMocChIZSx2b2lkIDAsdm9pZCAwLGUpKSxTPXUuZGVmYXVsdC5zcGxpdFByb3BzKGcoSGUsdm9pZCAwLHZvaWQgMCxlKSksbC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoaWUsYSh7Y2xhc3NOYW1lOigwLHMuZGVmYXVsdCkoIi1oZWFkZXJHcm91cHMiLHguY2xhc3NOYW1lKSxzdHlsZTphKHt9LHguc3R5bGUse21pbldpZHRoOktlKyJweCJ9KX0seC5yZXN0KSxsLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh1ZSxhKHtjbGFzc05hbWU6Uy5jbGFzc05hbWUsc3R5bGU6Uy5zdHlsZX0sUy5yZXN0KSxrZS5tYXAoR2UpKSkpOm51bGwsKGg9dS5kZWZhdWx0LnNwbGl0UHJvcHMobShIZSx2b2lkIDAsdm9pZCAwLGUpKSx5PXUuZGVmYXVsdC5zcGxpdFByb3BzKGIoSGUsdm9pZCAwLHZvaWQgMCxlKSksbC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoaWUsYSh7Y2xhc3NOYW1lOigwLHMuZGVmYXVsdCkoIi1oZWFkZXIiLGguY2xhc3NOYW1lKSxzdHlsZTphKHt9LGguc3R5bGUse21pbldpZHRoOktlKyJweCJ9KX0saC5yZXN0KSxsLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh1ZSxhKHtjbGFzc05hbWU6eS5jbGFzc05hbWUsc3R5bGU6eS5zdHlsZX0seS5yZXN0KSxPZS5tYXAoVWUpKSkpLEZlPyhmPXUuZGVmYXVsdC5zcGxpdFByb3BzKHYoSGUsdm9pZCAwLHZvaWQgMCxlKSksZD11LmRlZmF1bHQuc3BsaXRQcm9wcyh3KEhlLHZvaWQgMCx2b2lkIDAsZSkpLGwuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGllLGEoe2NsYXNzTmFtZTooMCxzLmRlZmF1bHQpKCItZmlsdGVycyIsZi5jbGFzc05hbWUpLHN0eWxlOmEoe30sZi5zdHlsZSx7bWluV2lkdGg6S2UrInB4In0pfSxmLnJlc3QpLGwuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHVlLGEoe2NsYXNzTmFtZTpkLmNsYXNzTmFtZSxzdHlsZTpkLnN0eWxlfSxkLnJlc3QpLE9lLm1hcChWZSkpKSk6bnVsbCxsLmRlZmF1bHQuY3JlYXRlRWxlbWVudChsZSxhKHtjbGFzc05hbWU6KDAscy5kZWZhdWx0KShaZS5jbGFzc05hbWUpLHN0eWxlOmEoe30sWmUuc3R5bGUse21pbldpZHRoOktlKyJweCJ9KX0sWmUucmVzdCksQWUubWFwKChmdW5jdGlvbih0LHIpe3JldHVybiBmdW5jdGlvbiB0KHIsbil7dmFyIG89YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOltdLGk9e29yaWdpbmFsOnJbSl0scm93OnIsaW5kZXg6clskXSx2aWV3SW5kZXg6KytCZSxwYWdlU2l6ZTpZLHBhZ2U6WixsZXZlbDpvLmxlbmd0aCxuZXN0aW5nUGF0aDpvLmNvbmNhdChbbl0pLGFnZ3JlZ2F0ZWQ6cltWXSxncm91cGVkQnlQaXZvdDpyW3FdLHN1YlJvd3M6cltVXX0sYz11LmRlZmF1bHQuZ2V0KHJlLGkubmVzdGluZ1BhdGgpLGY9UChIZSxpLHZvaWQgMCxlKSxkPXUuZGVmYXVsdC5zcGxpdFByb3BzKEMoSGUsaSx2b2lkIDAsZSkpO3JldHVybiBsLmRlZmF1bHQuY3JlYXRlRWxlbWVudChzZSxhKHtrZXk6aS5uZXN0aW5nUGF0aC5qb2luKCJfIil9LGYpLGwuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHVlLGEoe2NsYXNzTmFtZTpkLmNsYXNzTmFtZSxzdHlsZTpkLnN0eWxlfSxkLnJlc3QpLE9lLm1hcCgoZnVuY3Rpb24odCxuKXt2YXIgbz10ZS5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4gZS5pZD09PXQuaWR9KSl8fHt9LGY9ImZ1bmN0aW9uIj09dHlwZW9mIHQuc2hvdz90LnNob3coKTp0LnNob3csZD11LmRlZmF1bHQuZ2V0Rmlyc3REZWZpbmVkKG8udmFsdWUsdC53aWR0aCx0Lm1pbldpZHRoKSxwPXUuZGVmYXVsdC5nZXRGaXJzdERlZmluZWQoby52YWx1ZSx0LndpZHRoLHQubWF4V2lkdGgpLGc9dS5kZWZhdWx0LnNwbGl0UHJvcHMoTyhIZSxpLHQsZSkpLGg9dS5kZWZhdWx0LnNwbGl0UHJvcHModC5nZXRQcm9wcyhIZSxpLHQsZSkpLG09W2cuY2xhc3NOYW1lLHQuY2xhc3NOYW1lLGguY2xhc3NOYW1lXSxiPWEoe30sZy5zdHlsZSx0LnN0eWxlLGguc3R5bGUpLHk9YSh7fSxpLHtpc0V4cGFuZGVkOmMsY29sdW1uOmEoe30sdCksdmFsdWU6aS5yb3dbdC5pZF0scGl2b3RlZDp0LnBpdm90ZWQsZXhwYW5kZXI6dC5leHBhbmRlcixyZXNpemVkOnRlLHNob3c6Zix3aWR0aDpkLG1heFdpZHRoOnAsdGRQcm9wczpnLGNvbHVtblByb3BzOmgsY2xhc3NlczptLHN0eWxlczpifSksdj15LnZhbHVlLHc9dm9pZCAwLHg9dm9pZCAwLFM9dm9pZCAwLFA9dS5kZWZhdWx0Lm5vcm1hbGl6ZUNvbXBvbmVudCh0LkNlbGwseSx2KSxDPXQuQWdncmVnYXRlZHx8KHQuYWdncmVnYXRlP3QuQ2VsbDp4ZSksaz10LkV4cGFuZGVyfHx5ZSxUPXQuUGl2b3RWYWx1ZXx8dmUsaj13ZXx8ZnVuY3Rpb24oZSl7cmV0dXJuIGwuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLG51bGwsbC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoayxlKSxsLmRlZmF1bHQuY3JlYXRlRWxlbWVudChULGUpKX0sRT10LlBpdm90fHxqOyh5LnBpdm90ZWR8fHkuZXhwYW5kZXIpJiYoeS5leHBhbmRhYmxlPSEwLHc9ITAseS5waXZvdGVkJiYheS5zdWJSb3dzJiYoeS5leHBhbmRhYmxlPSExLHc9ITEpKSx5LnBpdm90ZWQ/KHg9aS5yb3dbQl09PT10LmlkJiZ5LnN1YlJvd3MsUz1HLmluZGV4T2YodC5pZCk+Ry5pbmRleE9mKGkucm93W0JdKSYmeS5zdWJSb3dzLFA9eD91LmRlZmF1bHQubm9ybWFsaXplQ29tcG9uZW50KEUsYSh7fSx5LHt2YWx1ZTpyW0hdfSkscltIXSk6Uz91LmRlZmF1bHQubm9ybWFsaXplQ29tcG9uZW50KEMseSx2KTpudWxsKTp5LmFnZ3JlZ2F0ZWQmJihQPXUuZGVmYXVsdC5ub3JtYWxpemVDb21wb25lbnQoQyx5LHYpKSx5LmV4cGFuZGVyJiYoUD11LmRlZmF1bHQubm9ybWFsaXplQ29tcG9uZW50KGsseSxyW0hdKSxHJiYoeS5ncm91cGVkQnlQaXZvdCYmKFA9bnVsbCkseS5zdWJSb3dzfHxoZXx8KFA9bnVsbCkpKTt2YXIgUj13P2Z1bmN0aW9uKHQpe3ZhciByPXUuZGVmYXVsdC5jbG9uZShyZSk7cmV0dXJuIHI9Yz91LmRlZmF1bHQuc2V0KHIseS5uZXN0aW5nUGF0aCwhMSk6dS5kZWZhdWx0LnNldChyLHkubmVzdGluZ1BhdGgse30pLGUuc2V0U3RhdGVXaXRoRGF0YSh7ZXhwYW5kZWQ6cn0sKGZ1bmN0aW9uKCl7YWUmJmFlKHIseS5uZXN0aW5nUGF0aCx0KX0pKX06dm9pZCAwLE49e29uQ2xpY2s6Un07cmV0dXJuIGcucmVzdC5vbkNsaWNrJiYoTi5vbkNsaWNrPWZ1bmN0aW9uKGUpe2cucmVzdC5vbkNsaWNrKGUsUj9mdW5jdGlvbigpe3JldHVybiBSKGUpfTp2b2lkIDApfSksaC5yZXN0Lm9uQ2xpY2smJihOLm9uQ2xpY2s9ZnVuY3Rpb24oZSl7aC5yZXN0Lm9uQ2xpY2soZSxSP2Z1bmN0aW9uKCl7cmV0dXJuIFIoZSl9OnZvaWQgMCl9KSxsLmRlZmF1bHQuY3JlYXRlRWxlbWVudChmZSxhKHtrZXk6bisiLSIrdC5pZCxjbGFzc05hbWU6KDAscy5kZWZhdWx0KShtLCFmJiYiaGlkZGVuIix5LmV4cGFuZGFibGUmJiJydC1leHBhbmRhYmxlIiwoeHx8UykmJiJydC1waXZvdCIpLHN0eWxlOmEoe30sYix7ZmxleDpkKyIgMCBhdXRvIix3aWR0aDp1LmRlZmF1bHQuYXNQeChkKSxtYXhXaWR0aDp1LmRlZmF1bHQuYXNQeChwKX0pfSxnLnJlc3QsaC5yZXN0LE4pLFApfSkpKSxpLnN1YlJvd3MmJmMmJmkuc3ViUm93cy5tYXAoKGZ1bmN0aW9uKGUscil7cmV0dXJuIHQoZSxyLGkubmVzdGluZ1BhdGgpfSkpLGhlJiYhaS5zdWJSb3dzJiZjJiZoZShpKSl9KHQscil9KSksemUubWFwKEplKSksX2U/KG49ayhIZSx2b2lkIDAsdm9pZCAwLGUpLGM9dS5kZWZhdWx0LnNwbGl0UHJvcHMoVChIZSx2b2lkIDAsdm9pZCAwLGUpKSxsLmRlZmF1bHQuY3JlYXRlRWxlbWVudChkZSxhKHtjbGFzc05hbWU6bi5jbGFzc05hbWUsc3R5bGU6YSh7fSxuLnN0eWxlLHttaW5XaWR0aDpLZSsicHgifSl9LG4ucmVzdCksbC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQodWUsYSh7Y2xhc3NOYW1lOigwLHMuZGVmYXVsdCkoYy5jbGFzc05hbWUpLHN0eWxlOmMuc3R5bGV9LGMucmVzdCksT2UubWFwKHFlKSkpKTpudWxsKSxEJiZfP2wuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InBhZ2luYXRpb24tYm90dG9tIn0saik6bnVsbCwhQWUubGVuZ3RoJiZsLmRlZmF1bHQuY3JlYXRlRWxlbWVudChtZSxldCx1LmRlZmF1bHQubm9ybWFsaXplQ29tcG9uZW50KEkpKSxsLmRlZmF1bHQuY3JlYXRlRWxlbWVudChnZSxhKHtsb2FkaW5nOlgsbG9hZGluZ1RleHQ6TX0sUWUpKSl9O3JldHVybiByP3IoSGUscnQsdGhpcyk6cnQoKX19XSksdH0oKDAsZi5kZWZhdWx0KSgoMCxjLmRlZmF1bHQpKGkuQ29tcG9uZW50KSkpO2gucHJvcFR5cGVzPXAuZGVmYXVsdCxoLmRlZmF1bHRQcm9wcz1kLmRlZmF1bHQsdC5kZWZhdWx0PWh9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXdpbmRvdy5yZWFjdFJ9LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbjsKLyohCiAgQ29weXJpZ2h0IChjKSAyMDE3IEplZCBXYXRzb24uCiAgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWUKICBodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzCiovIWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciByPXt9Lmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGEoKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtpZihuKXt2YXIgbz10eXBlb2YgbjtpZigic3RyaW5nIj09PW98fCJudW1iZXIiPT09byllLnB1c2gobik7ZWxzZSBpZihBcnJheS5pc0FycmF5KG4pJiZuLmxlbmd0aCl7dmFyIGk9YS5hcHBseShudWxsLG4pO2kmJmUucHVzaChpKX1lbHNlIGlmKCJvYmplY3QiPT09bylmb3IodmFyIGwgaW4gbilyLmNhbGwobixsKSYmbltsXSYmZS5wdXNoKGwpfX1yZXR1cm4gZS5qb2luKCIgIil9ZS5leHBvcnRzPyhhLmRlZmF1bHQ9YSxlLmV4cG9ydHM9YSk6dm9pZCAwPT09KG49ZnVuY3Rpb24oKXtyZXR1cm4gYX0uYXBwbHkodCxbXSkpfHwoZS5leHBvcnRzPW4pfSgpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSxhPWkocigxKSksbz1pKHIoNCkpO2Z1bmN0aW9uIGkoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIGwoZSx0KXt2YXIgcj17fTtmb3IodmFyIG4gaW4gZSl0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYocltuXT1lW25dKTtyZXR1cm4gcn1mdW5jdGlvbiBzKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIGZ1bmN0aW9uIGUodCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdO2lmKHModCkpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspZSh0W25dLHIpO2Vsc2Ugci5wdXNoKHQpO3JldHVybiByfShlKS5qb2luKCIuIikucmVwbGFjZSgvXFsvZywiLiIpLnJlcGxhY2UoL1xdL2csIiIpLnNwbGl0KCIuIil9dC5kZWZhdWx0PXtnZXQ6ZnVuY3Rpb24oZSx0LHIpe2lmKCF0KXJldHVybiBlO3ZhciBuPXUodCksYT12b2lkIDA7dHJ5e2E9bi5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF19KSxlKX1jYXRjaChlKXt9cmV0dXJuIHZvaWQgMCE9PWE/YTpyfSxzZXQ6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD1hcmd1bWVudHNbMV0scj1hcmd1bWVudHNbMl0sbj11KHQpLGE9dm9pZCAwLG89ZTtmb3IoOyhhPW4uc2hpZnQoKSkmJm4ubGVuZ3RoOylvW2FdfHwob1thXT17fSksbz1vW2FdO3JldHVybiBvW2FdPXIsZX0sdGFrZVJpZ2h0OmZ1bmN0aW9uKGUsdCl7dmFyIHI9dD5lLmxlbmd0aD8wOmUubGVuZ3RoLXQ7cmV0dXJuIGUuc2xpY2Uocil9LGxhc3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbZS5sZW5ndGgtMV19LG9yZGVyQnk6ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIGUuc29ydCgoZnVuY3Rpb24oZSxhKXtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIGk9dFtvXSxsPSExPT09cltvXXx8ImRlc2MiPT09cltvXSxzPWkoZSxhKTtpZihzKXJldHVybiBsPy1zOnN9cmV0dXJuIHJbMF0/ZVtuXS1hW25dOmFbbl0tZVtuXX0pKX0scmFuZ2U6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGU7cisrKXQucHVzaChlKTtyZXR1cm4gdH0scmVtb3ZlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZmlsdGVyKChmdW5jdGlvbihyLG4pe3JldHVybiEhdChyKSYmKGUuc3BsaWNlKG4sMSksITApfSkpfSxjbG9uZTpmdW5jdGlvbihlKXt0cnl7cmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZSwoZnVuY3Rpb24oZSx0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90LnRvU3RyaW5nKCk6dH0pKSl9Y2F0Y2godCl7cmV0dXJuIGV9fSxnZXRGaXJzdERlZmluZWQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PUFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09YXJndW1lbnRzW3JdO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKHZvaWQgMCE9PXRbbl0pcmV0dXJuIHRbbl19LHN1bTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdH0pLDApfSxtYWtlVGVtcGxhdGVDb21wb25lbnQ6ZnVuY3Rpb24oZSx0KXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIk5vIGRpc3BsYXlOYW1lIGZvdW5kIGZvciB0ZW1wbGF0ZSBjb21wb25lbnQ6IixlKTt2YXIgcj1mdW5jdGlvbih0KXt2YXIgcj10LmNoaWxkcmVuLGk9dC5jbGFzc05hbWUscz1sKHQsWyJjaGlsZHJlbiIsImNsYXNzTmFtZSJdKTtyZXR1cm4gYS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIsbih7Y2xhc3NOYW1lOigwLG8uZGVmYXVsdCkoZSxpKX0scykscil9O3JldHVybiByLmRpc3BsYXlOYW1lPXQscn0sZ3JvdXBCeTpmdW5jdGlvbihlLHQpe3JldHVybiBlLnJlZHVjZSgoZnVuY3Rpb24oZSxyLG4pe3ZhciBhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3QocixuKTpyW3RdO3JldHVybiBlW2FdPXMoZVthXSk/ZVthXTpbXSxlW2FdLnB1c2gociksZX0pLHt9KX0saXNBcnJheTpzLHNwbGl0UHJvcHM6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jbGFzc05hbWUscj1lLnN0eWxlLG49bChlLFsiY2xhc3NOYW1lIiwic3R5bGUiXSk7cmV0dXJue2NsYXNzTmFtZTp0LHN0eWxlOnIscmVzdDpufHx7fX19LGNvbXBhY3RPYmplY3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9e307Zm9yKHZhciByIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShyKSYmdm9pZCAwIT09ZVtyXSYmdm9pZCAwIT09ZVtyXSYmKHRbcl09ZVtyXSk7cmV0dXJuIHR9LGlzU29ydGluZ0Rlc2M6ZnVuY3Rpb24oZSl7cmV0dXJuISgiZGVzYyIhPT1lLnNvcnQmJiEwIT09ZS5kZXNjJiYhMSE9PWUuYXNjKX0sbm9ybWFsaXplQ29tcG9uZW50OmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxyPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTplO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP09iamVjdC5nZXRQcm90b3R5cGVPZihlKS5pc1JlYWN0Q29tcG9uZW50P2EuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGUsdCk6ZSh0KTpyfSxhc1B4OmZ1bmN0aW9uKGUpe3JldHVybiBlPU51bWJlcihlKSxOdW1iZXIuaXNOYU4oZSk/bnVsbDplKyJweCJ9fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoKGZ1bmN0aW9uKHQpe3ZhciByPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZVsxXXx8IiIsbj1lWzNdO2lmKCFuKXJldHVybiByO2lmKHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBidG9hKXt2YXIgYT0oaT1uLCIvKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsIitidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShpKSkpKSsiICovIiksbz1uLnNvdXJjZXMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4iLyojIHNvdXJjZVVSTD0iK24uc291cmNlUm9vdCtlKyIgKi8ifSkpO3JldHVybltyXS5jb25jYXQobykuY29uY2F0KFthXSkuam9pbigiXG4iKX12YXIgaTtyZXR1cm5bcl0uam9pbigiXG4iKX0odCxlKTtyZXR1cm4gdFsyXT8iQG1lZGlhICIrdFsyXSsieyIrcisifSI6cn0pKS5qb2luKCIiKX0sdC5pPWZ1bmN0aW9uKGUscil7InN0cmluZyI9PXR5cGVvZiBlJiYoZT1bW251bGwsZSwiIl1dKTtmb3IodmFyIG49e30sYT0wO2E8dGhpcy5sZW5ndGg7YSsrKXt2YXIgbz10aGlzW2FdWzBdO251bGwhPW8mJihuW29dPSEwKX1mb3IoYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgaT1lW2FdO251bGwhPWlbMF0mJm5baVswXV18fChyJiYhaVsyXT9pWzJdPXI6ciYmKGlbMl09IigiK2lbMl0rIikgYW5kICgiK3IrIikiKSx0LnB1c2goaSkpfX0sdH19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLG89e30saT0obj1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cmJmRvY3VtZW50JiZkb2N1bWVudC5hbGwmJiF3aW5kb3cuYXRvYn0sZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09YSYmKGE9bi5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGF9KSxsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/dC5xdWVyeVNlbGVjdG9yKGUpOmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHM9ZnVuY3Rpb24oZSl7dmFyIHQ9e307cmV0dXJuIGZ1bmN0aW9uKGUscil7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUpcmV0dXJuIGUoKTtpZih2b2lkIDA9PT10W2VdKXt2YXIgbj1sLmNhbGwodGhpcyxlLHIpO2lmKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCYmbiBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCl0cnl7bj1uLmNvbnRlbnREb2N1bWVudC5oZWFkfWNhdGNoKGUpe249bnVsbH10W2VdPW59cmV0dXJuIHRbZV19fSgpLHU9bnVsbCxjPTAsZj1bXSxkPXIoMTcpO2Z1bmN0aW9uIHAoZSx0KXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXSxhPW9bbi5pZF07aWYoYSl7YS5yZWZzKys7Zm9yKHZhciBpPTA7aTxhLnBhcnRzLmxlbmd0aDtpKyspYS5wYXJ0c1tpXShuLnBhcnRzW2ldKTtmb3IoO2k8bi5wYXJ0cy5sZW5ndGg7aSsrKWEucGFydHMucHVzaCh2KG4ucGFydHNbaV0sdCkpfWVsc2V7dmFyIGw9W107Zm9yKGk9MDtpPG4ucGFydHMubGVuZ3RoO2krKylsLnB1c2godihuLnBhcnRzW2ldLHQpKTtvW24uaWRdPXtpZDpuLmlkLHJlZnM6MSxwYXJ0czpsfX19fWZ1bmN0aW9uIGcoZSx0KXtmb3IodmFyIHI9W10sbj17fSxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBvPWVbYV0saT10LmJhc2U/b1swXSt0LmJhc2U6b1swXSxsPXtjc3M6b1sxXSxtZWRpYTpvWzJdLHNvdXJjZU1hcDpvWzNdfTtuW2ldP25baV0ucGFydHMucHVzaChsKTpyLnB1c2gobltpXT17aWQ6aSxwYXJ0czpbbF19KX1yZXR1cm4gcn1mdW5jdGlvbiBoKGUsdCl7dmFyIHI9cyhlLmluc2VydEludG8pO2lmKCFyKXRocm93IG5ldyBFcnJvcigiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnRJbnRvJyBwYXJhbWV0ZXIgaXMgaW52YWxpZC4iKTt2YXIgbj1mW2YubGVuZ3RoLTFdO2lmKCJ0b3AiPT09ZS5pbnNlcnRBdCluP24ubmV4dFNpYmxpbmc/ci5pbnNlcnRCZWZvcmUodCxuLm5leHRTaWJsaW5nKTpyLmFwcGVuZENoaWxkKHQpOnIuaW5zZXJ0QmVmb3JlKHQsci5maXJzdENoaWxkKSxmLnB1c2godCk7ZWxzZSBpZigiYm90dG9tIj09PWUuaW5zZXJ0QXQpci5hcHBlbmRDaGlsZCh0KTtlbHNle2lmKCJvYmplY3QiIT10eXBlb2YgZS5pbnNlcnRBdHx8IWUuaW5zZXJ0QXQuYmVmb3JlKXRocm93IG5ldyBFcnJvcigiW1N0eWxlIExvYWRlcl1cblxuIEludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAnaW5zZXJ0QXQnICgnb3B0aW9ucy5pbnNlcnRBdCcpIGZvdW5kLlxuIE11c3QgYmUgJ3RvcCcsICdib3R0b20nLCBvciBPYmplY3QuXG4gKGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrLWNvbnRyaWIvc3R5bGUtbG9hZGVyI2luc2VydGF0KVxuIik7dmFyIGE9cyhlLmluc2VydEF0LmJlZm9yZSxyKTtyLmluc2VydEJlZm9yZSh0LGEpfX1mdW5jdGlvbiBtKGUpe2lmKG51bGw9PT1lLnBhcmVudE5vZGUpcmV0dXJuITE7ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpO3ZhciB0PWYuaW5kZXhPZihlKTt0Pj0wJiZmLnNwbGljZSh0LDEpfWZ1bmN0aW9uIGIoZSl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtpZih2b2lkIDA9PT1lLmF0dHJzLnR5cGUmJihlLmF0dHJzLnR5cGU9InRleHQvY3NzIiksdm9pZCAwPT09ZS5hdHRycy5ub25jZSl7dmFyIG49ZnVuY3Rpb24oKXswO3JldHVybiByLm5jfSgpO24mJihlLmF0dHJzLm5vbmNlPW4pfXJldHVybiB5KHQsZS5hdHRycyksaChlLHQpLHR9ZnVuY3Rpb24geShlLHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKHIpe2Uuc2V0QXR0cmlidXRlKHIsdFtyXSl9KSl9ZnVuY3Rpb24gdihlLHQpe3ZhciByLG4sYSxvO2lmKHQudHJhbnNmb3JtJiZlLmNzcyl7aWYoIShvPSJmdW5jdGlvbiI9PXR5cGVvZiB0LnRyYW5zZm9ybT90LnRyYW5zZm9ybShlLmNzcyk6dC50cmFuc2Zvcm0uZGVmYXVsdChlLmNzcykpKXJldHVybiBmdW5jdGlvbigpe307ZS5jc3M9b31pZih0LnNpbmdsZXRvbil7dmFyIGk9YysrO3I9dXx8KHU9Yih0KSksbj1TLmJpbmQobnVsbCxyLGksITEpLGE9Uy5iaW5kKG51bGwscixpLCEwKX1lbHNlIGUuc291cmNlTWFwJiYiZnVuY3Rpb24iPT10eXBlb2YgVVJMJiYiZnVuY3Rpb24iPT10eXBlb2YgVVJMLmNyZWF0ZU9iamVjdFVSTCYmImZ1bmN0aW9uIj09dHlwZW9mIFVSTC5yZXZva2VPYmplY3RVUkwmJiJmdW5jdGlvbiI9PXR5cGVvZiBCbG9iJiYiZnVuY3Rpb24iPT10eXBlb2YgYnRvYT8ocj1mdW5jdGlvbihlKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIik7cmV0dXJuIHZvaWQgMD09PWUuYXR0cnMudHlwZSYmKGUuYXR0cnMudHlwZT0idGV4dC9jc3MiKSxlLmF0dHJzLnJlbD0ic3R5bGVzaGVldCIseSh0LGUuYXR0cnMpLGgoZSx0KSx0fSh0KSxuPUMuYmluZChudWxsLHIsdCksYT1mdW5jdGlvbigpe20ociksci5ocmVmJiZVUkwucmV2b2tlT2JqZWN0VVJMKHIuaHJlZil9KToocj1iKHQpLG49UC5iaW5kKG51bGwsciksYT1mdW5jdGlvbigpe20ocil9KTtyZXR1cm4gbihlKSxmdW5jdGlvbih0KXtpZih0KXtpZih0LmNzcz09PWUuY3NzJiZ0Lm1lZGlhPT09ZS5tZWRpYSYmdC5zb3VyY2VNYXA9PT1lLnNvdXJjZU1hcClyZXR1cm47bihlPXQpfWVsc2UgYSgpfX1lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIERFQlVHJiZERUJVRyYmIm9iamVjdCIhPXR5cGVvZiBkb2N1bWVudCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBzdHlsZS1sb2FkZXIgY2Fubm90IGJlIHVzZWQgaW4gYSBub24tYnJvd3NlciBlbnZpcm9ubWVudCIpOyh0PXR8fHt9KS5hdHRycz0ib2JqZWN0Ij09dHlwZW9mIHQuYXR0cnM/dC5hdHRyczp7fSx0LnNpbmdsZXRvbnx8ImJvb2xlYW4iPT10eXBlb2YgdC5zaW5nbGV0b258fCh0LnNpbmdsZXRvbj1pKCkpLHQuaW5zZXJ0SW50b3x8KHQuaW5zZXJ0SW50bz0iaGVhZCIpLHQuaW5zZXJ0QXR8fCh0Lmluc2VydEF0PSJib3R0b20iKTt2YXIgcj1nKGUsdCk7cmV0dXJuIHAocix0KSxmdW5jdGlvbihlKXtmb3IodmFyIG49W10sYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgaT1yW2FdOyhsPW9baS5pZF0pLnJlZnMtLSxuLnB1c2gobCl9ZSYmcChnKGUsdCksdCk7Zm9yKGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIGw7aWYoMD09PShsPW5bYV0pLnJlZnMpe2Zvcih2YXIgcz0wO3M8bC5wYXJ0cy5sZW5ndGg7cysrKWwucGFydHNbc10oKTtkZWxldGUgb1tsLmlkXX19fX07dmFyIHcseD0odz1bXSxmdW5jdGlvbihlLHQpe3JldHVybiB3W2VdPXQsdy5maWx0ZXIoQm9vbGVhbikuam9pbigiXG4iKX0pO2Z1bmN0aW9uIFMoZSx0LHIsbil7dmFyIGE9cj8iIjpuLmNzcztpZihlLnN0eWxlU2hlZXQpZS5zdHlsZVNoZWV0LmNzc1RleHQ9eCh0LGEpO2Vsc2V7dmFyIG89ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYSksaT1lLmNoaWxkTm9kZXM7aVt0XSYmZS5yZW1vdmVDaGlsZChpW3RdKSxpLmxlbmd0aD9lLmluc2VydEJlZm9yZShvLGlbdF0pOmUuYXBwZW5kQ2hpbGQobyl9fWZ1bmN0aW9uIFAoZSx0KXt2YXIgcj10LmNzcyxuPXQubWVkaWE7aWYobiYmZS5zZXRBdHRyaWJ1dGUoIm1lZGlhIixuKSxlLnN0eWxlU2hlZXQpZS5zdHlsZVNoZWV0LmNzc1RleHQ9cjtlbHNle2Zvcig7ZS5maXJzdENoaWxkOyllLnJlbW92ZUNoaWxkKGUuZmlyc3RDaGlsZCk7ZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShyKSl9fWZ1bmN0aW9uIEMoZSx0LHIpe3ZhciBuPXIuY3NzLGE9ci5zb3VyY2VNYXAsbz12b2lkIDA9PT10LmNvbnZlcnRUb0Fic29sdXRlVXJscyYmYTsodC5jb252ZXJ0VG9BYnNvbHV0ZVVybHN8fG8pJiYobj1kKG4pKSxhJiYobis9IlxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCwiK2J0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGEpKSkpKyIgKi8iKTt2YXIgaT1uZXcgQmxvYihbbl0se3R5cGU6InRleHQvY3NzIn0pLGw9ZS5ocmVmO2UuaHJlZj1VUkwuY3JlYXRlT2JqZWN0VVJMKGkpLGwmJlVSTC5yZXZva2VPYmplY3RVUkwobCl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24odCxyLG4pe3JldHVybiByJiZlKHQucHJvdG90eXBlLHIpLG4mJmUodCxuKSx0fX0oKTtmdW5jdGlvbiBhKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbyhlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fXQuZGVmYXVsdD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBhKHRoaXMsdCksbyh0aGlzLCh0Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9KHQsZSksbih0LFt7a2V5OiJVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2V0U3RhdGVXaXRoRGF0YSh0aGlzLmdldERhdGFNb2RlbCh0aGlzLmdldFJlc29sdmVkU3RhdGUoKSkpfX0se2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5maXJlRmV0Y2hEYXRhKCl9fSx7a2V5OiJVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmdldFJlc29sdmVkU3RhdGUoKSxuPXRoaXMuZ2V0UmVzb2x2ZWRTdGF0ZShlLHQpO1sic29ydGVkIiwiZmlsdGVyZWQiLCJyZXNpemVkIiwiZXhwYW5kZWQiXS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD0iZGVmYXVsdCIrKGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKSk7SlNPTi5zdHJpbmdpZnkoclt0XSkhPT1KU09OLnN0cmluZ2lmeShuW3RdKSYmKG5bZV09blt0XSl9KSk7WyJzb3J0YWJsZSIsImZpbHRlcmFibGUiLCJyZXNpemFibGUiXS5mb3JFYWNoKChmdW5jdGlvbihlKXtpZihyW2VdIT09bltlXSl7dmFyIHQ9ZS5yZXBsYWNlKCJhYmxlIiwiIikrImVkIixhPSJkZWZhdWx0IisodC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpKTtuW3RdPW5bYV19fSkpLHIuZGF0YT09PW4uZGF0YSYmci5jb2x1bW5zPT09bi5jb2x1bW5zJiZyLnBpdm90Qnk9PT1uLnBpdm90QnkmJnIuc29ydGVkPT09bi5zb3J0ZWQmJnIuZmlsdGVyZWQ9PT1uLmZpbHRlcmVkfHx0aGlzLnNldFN0YXRlV2l0aERhdGEodGhpcy5nZXREYXRhTW9kZWwobikpfX0se2tleToic2V0U3RhdGVXaXRoRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLG49dGhpcy5nZXRSZXNvbHZlZFN0YXRlKCksYT10aGlzLmdldFJlc29sdmVkU3RhdGUoe30sZSksbz1hLmZyZWV6ZVdoZW5FeHBhbmRlZDtpZihhLmZyb3plbj0hMSxvKWZvcih2YXIgaT1PYmplY3Qua2V5cyhhLmV4cGFuZGVkKSxsPTA7bDxpLmxlbmd0aDtsKyspaWYoYS5leHBhbmRlZFtpW2xdXSl7YS5mcm96ZW49ITA7YnJlYWt9cmV0dXJuKG4uZnJvemVuJiYhYS5mcm96ZW58fG4uc29ydGVkIT09YS5zb3J0ZWR8fG4uZmlsdGVyZWQhPT1hLmZpbHRlcmVkfHxuLnNob3dGaWx0ZXJzIT09YS5zaG93RmlsdGVyc3x8IWEuZnJvemVuJiZuLnJlc29sdmVkRGF0YSE9PWEucmVzb2x2ZWREYXRhKSYmKChuLnNvcnRlZCE9PWEuc29ydGVkJiZ0aGlzLnByb3BzLmNvbGxhcHNlT25Tb3J0aW5nQ2hhbmdlfHxuLmZpbHRlcmVkIT09YS5maWx0ZXJlZHx8bi5zaG93RmlsdGVycyE9PWEuc2hvd0ZpbHRlcnN8fG4uc29ydGVkRGF0YSYmIWEuZnJvemVuJiZuLnJlc29sdmVkRGF0YSE9PWEucmVzb2x2ZWREYXRhJiZ0aGlzLnByb3BzLmNvbGxhcHNlT25EYXRhQ2hhbmdlKSYmKGEuZXhwYW5kZWQ9e30pLE9iamVjdC5hc3NpZ24oYSx0aGlzLmdldFNvcnRlZERhdGEoYSkpKSxuLmZpbHRlcmVkIT09YS5maWx0ZXJlZCYmKGEucGFnZT0wKSxhLnNvcnRlZERhdGEmJihhLnBhZ2VzPWEubWFudWFsP2EucGFnZXM6TWF0aC5jZWlsKGEuc29ydGVkRGF0YS5sZW5ndGgvYS5wYWdlU2l6ZSksYS5wYWdlPU1hdGgubWF4KGEucGFnZT49YS5wYWdlcz9hLnBhZ2VzLTE6YS5wYWdlLDApKSx0aGlzLnNldFN0YXRlKGEsKGZ1bmN0aW9uKCl7dCYmdCgpLG4ucGFnZT09PWEucGFnZSYmbi5wYWdlU2l6ZT09PWEucGFnZVNpemUmJm4uc29ydGVkPT09YS5zb3J0ZWQmJm4uZmlsdGVyZWQ9PT1hLmZpbHRlcmVkfHxyLmZpcmVGZXRjaERhdGEoKX0pKX19XSksdH0oZSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGU7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKSlyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgcj1bXSxuPSEwLGE9ITEsbz12b2lkIDA7dHJ5e2Zvcih2YXIgaSxsPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0oaT1sLm5leHQoKSkuZG9uZSkmJihyLnB1c2goaS52YWx1ZSksIXR8fHIubGVuZ3RoIT09dCk7bj0hMCk7fWNhdGNoKGUpe2E9ITAsbz1lfWZpbmFsbHl7dHJ5eyFuJiZsLnJldHVybiYmbC5yZXR1cm4oKX1maW5hbGx5e2lmKGEpdGhyb3cgb319cmV0dXJuIHJ9KGUsdCk7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSxhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxvPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9LGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gciYmZSh0LnByb3RvdHlwZSxyKSxuJiZlKHQsbiksdH19KCksbD11KHIoMSkpLHM9dShyKDUpKTtmdW5jdGlvbiB1KGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX1mdW5jdGlvbiBmKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgdD0wLHI9QXJyYXkoZS5sZW5ndGgpO3Q8ZS5sZW5ndGg7dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1yZXR1cm4gQXJyYXkuZnJvbShlKX1mdW5jdGlvbiBkKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gcChlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fXQuZGVmYXVsdD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBkKHRoaXMsdCkscCh0aGlzLCh0Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9KHQsZSksaSh0LFt7a2V5OiJnZXRSZXNvbHZlZFN0YXRlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBvKHt9LHMuZGVmYXVsdC5jb21wYWN0T2JqZWN0KHRoaXMuc3RhdGUpLHMuZGVmYXVsdC5jb21wYWN0T2JqZWN0KHRoaXMucHJvcHMpLHMuZGVmYXVsdC5jb21wYWN0T2JqZWN0KHQpLHMuZGVmYXVsdC5jb21wYWN0T2JqZWN0KGUpKX19LHtrZXk6ImdldERhdGFNb2RlbCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUuY29sdW1ucyxpPWUucGl2b3RCeSx1PXZvaWQgMD09PWk/W106aSxkPWUuZGF0YSxwPWUucGl2b3RJREtleSxnPWUucGl2b3RWYWxLZXksaD1lLnN1YlJvd3NLZXksbT1lLmFnZ3JlZ2F0ZWRLZXksYj1lLm5lc3RpbmdMZXZlbEtleSx5PWUub3JpZ2luYWxLZXksdj1lLmluZGV4S2V5LHc9ZS5ncm91cGVkQnlQaXZvdEtleSx4PWUuU3ViQ29tcG9uZW50LFM9ITE7ci5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmNvbHVtbnMmJihTPSEwKX0pKTt2YXIgUD1bXS5jb25jYXQoZihyKSksQz1yLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmV4cGFuZGVyfHxlLmNvbHVtbnMmJmUuY29sdW1ucy5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gZS5leHBhbmRlcn0pKX0pKTtDJiYhQy5leHBhbmRlciYmKEM9Qy5jb2x1bW5zLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmV4cGFuZGVyfSkpKSx4JiYhQyYmKFA9W0M9e2V4cGFuZGVyOiEwfV0uY29uY2F0KGYoUCkpKTt2YXIgTz1mdW5jdGlvbihlLHIpe3ZhciBuPWZ1bmN0aW9uKGUscil7dmFyIG49dm9pZCAwO2lmKChuPWUuZXhwYW5kZXI/byh7fSx0LnByb3BzLmNvbHVtbix0LnByb3BzLmV4cGFuZGVyRGVmYXVsdHMsZSk6byh7fSx0LnByb3BzLmNvbHVtbixlKSkubWF4V2lkdGg8bi5taW5XaWR0aCYmKG4ubWluV2lkdGg9bi5tYXhXaWR0aCksciYmKG4ucGFyZW50Q29sdW1uPXIpLCJzdHJpbmciPT10eXBlb2Ygbi5hY2Nlc3Nvcil7dmFyIGk9ZnVuY3Rpb24oKXtuLmlkPW4uaWR8fG4uYWNjZXNzb3I7dmFyIGU9bi5hY2Nlc3NvcjtyZXR1cm4gbi5hY2Nlc3Nvcj1mdW5jdGlvbih0KXtyZXR1cm4gcy5kZWZhdWx0LmdldCh0LGUpfSx7djpufX0oKTtpZigib2JqZWN0Ij09PSh2b2lkIDA9PT1pPyJ1bmRlZmluZWQiOmEoaSkpKXJldHVybiBpLnZ9aWYobi5hY2Nlc3NvciYmIW4uaWQpdGhyb3cgY29uc29sZS53YXJuKG4pLG5ldyBFcnJvcigiQSBjb2x1bW4gaWQgaXMgcmVxdWlyZWQgaWYgdXNpbmcgYSBub24tc3RyaW5nIGFjY2Vzc29yIGZvciBjb2x1bW4gYWJvdmUuIik7cmV0dXJuIG4uYWNjZXNzb3J8fChuLmFjY2Vzc29yPWZ1bmN0aW9uKGUpe30pLG59KGUscik7cmV0dXJuIGsucHVzaChuKSxufSxrPVtdLFQ9UC5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sdW1ucz9vKHt9LGUse2NvbHVtbnM6ZS5jb2x1bW5zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIE8odCxlKX0pKX0pOk8oZSl9KSkuc2xpY2UoKSxqPVtdLEU9KFQ9KFQ9VC5tYXAoKGZ1bmN0aW9uKGUsdCl7aWYoZS5jb2x1bW5zKXt2YXIgcj1lLmNvbHVtbnMuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hKHUuaW5kZXhPZihlLmlkKT4tMSkmJnMuZGVmYXVsdC5nZXRGaXJzdERlZmluZWQoZS5zaG93LCEwKX0pKTtyZXR1cm4gbyh7fSxlLHtjb2x1bW5zOnJ9KX1yZXR1cm4gZX0pKSkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5jb2x1bW5zP2UuY29sdW1ucy5sZW5ndGg6ISh1LmluZGV4T2YoZS5pZCk+LTEpJiZzLmRlZmF1bHQuZ2V0Rmlyc3REZWZpbmVkKGUuc2hvdywhMCl9KSkpLmZpbmRJbmRleCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUucGl2b3R9KSk7dS5sZW5ndGgmJmZ1bmN0aW9uKCl7dmFyIGU9W107dS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgcj1rLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkPT09dH0pKTtyJiZlLnB1c2gocil9KSk7dmFyIHI9ZS5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmU9PT10LnBhcmVudENvbHVtbiYmdC5wYXJlbnRDb2x1bW59KSxlWzBdLnBhcmVudENvbHVtbiksbj1TJiZyLkhlYWRlcixhPXtIZWFkZXI6bj1ufHxmdW5jdGlvbigpe3JldHVybiBsLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3Ryb25nIixudWxsLCJQaXZvdGVkIil9LGNvbHVtbnM6ZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBvKHt9LHQucHJvcHMucGl2b3REZWZhdWx0cyxlLHtwaXZvdGVkOiEwfSl9KSl9O0U+PTA/KGE9byh7fSxUW0VdLGEpLFQuc3BsaWNlKEUsMSxhKSk6VC51bnNoaWZ0KGEpfSgpO3ZhciBSPVtdLE49W10sQT1mdW5jdGlvbihlLHIpe1IucHVzaChvKHt9LHQucHJvcHMuY29sdW1uLHIse2NvbHVtbnM6ZX0pKSxOPVtdfTtULmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7aWYoZS5jb2x1bW5zKXJldHVybiBqPWouY29uY2F0KGUuY29sdW1ucyksTi5sZW5ndGg+MCYmQShOKSx2b2lkIEEoZS5jb2x1bW5zLGUpO2oucHVzaChlKSxOLnB1c2goZSl9KSksUyYmTi5sZW5ndGg+MCYmQShOKTt2YXIgRD1kLm1hcCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24gZSh0LHIpe3ZhciBuLGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjAsbz0oYyhuPXt9LHksdCksYyhuLHYsciksYyhuLGgsdFtoXSksYyhuLGIsYSksbik7cmV0dXJuIGsuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5leHBhbmRlcnx8KG9bZS5pZF09ZS5hY2Nlc3Nvcih0KSl9KSksb1toXSYmKG9baF09b1toXS5tYXAoKGZ1bmN0aW9uKHQscil7cmV0dXJuIGUodCxyLGErMSl9KSkpLG99KGUsdCl9KSksej1mdW5jdGlvbihlKXt2YXIgdD17fTtyZXR1cm4gXy5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgbj1lLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGVbci5pZF19KSk7dFtyLmlkXT1yLmFnZ3JlZ2F0ZShuLGUpfSkpLHR9LF89ai5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLmV4cGFuZGVyJiZlLmFnZ3JlZ2F0ZX0pKTtyZXR1cm4gdS5sZW5ndGgmJihEPWZ1bmN0aW9uIGUodCxyKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MDtpZihhPT09ci5sZW5ndGgpcmV0dXJuIHQ7dmFyIGk9T2JqZWN0LmVudHJpZXMocy5kZWZhdWx0Lmdyb3VwQnkodCxyW2FdKSkubWFwKChmdW5jdGlvbihlKXt2YXIgdCxvPW4oZSwyKSxpPW9bMF0sbD1vWzFdO3JldHVybiBjKHQ9e30scCxyW2FdKSxjKHQsZyxpKSxjKHQsclthXSxpKSxjKHQsaCxsKSxjKHQsYixhKSxjKHQsdywhMCksdH0pKTtyZXR1cm4gaT1pLm1hcCgoZnVuY3Rpb24odCl7dmFyIG4saT1lKHRbaF0scixhKzEpO3JldHVybiBvKHt9LHQsKGMobj17fSxoLGkpLGMobixtLCEwKSxuKSx6KGkpKX0pKX0oRCx1KSksbyh7fSxlLHtyZXNvbHZlZERhdGE6RCxhbGxWaXNpYmxlQ29sdW1uczpqLGhlYWRlckdyb3VwczpSLGFsbERlY29yYXRlZENvbHVtbnM6ayxoYXNIZWFkZXJHcm91cHM6U30pfX0se2tleToiZ2V0U29ydGVkRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tYW51YWwscj1lLnNvcnRlZCxuPWUuZmlsdGVyZWQsYT1lLmRlZmF1bHRGaWx0ZXJNZXRob2Qsbz1lLnJlc29sdmVkRGF0YSxpPWUuYWxsVmlzaWJsZUNvbHVtbnMsbD1lLmFsbERlY29yYXRlZENvbHVtbnMscz17fTtyZXR1cm4gbC5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNvcnRNZXRob2R9KSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7c1tlLmlkXT1lLnNvcnRNZXRob2R9KSkse3NvcnRlZERhdGE6dD9vOnRoaXMuc29ydERhdGEodGhpcy5maWx0ZXJEYXRhKG8sbixhLGkpLHIscyl9fX0se2tleToiZmlyZUZldGNoRGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByb3BzLm9uRmV0Y2hEYXRhKHRoaXMuZ2V0UmVzb2x2ZWRTdGF0ZSgpLHRoaXMpfX0se2tleToiZ2V0UHJvcE9yU3RhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBzLmRlZmF1bHQuZ2V0Rmlyc3REZWZpbmVkKHRoaXMucHJvcHNbZV0sdGhpcy5zdGF0ZVtlXSl9fSx7a2V5OiJnZXRTdGF0ZU9yUHJvcCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHMuZGVmYXVsdC5nZXRGaXJzdERlZmluZWQodGhpcy5zdGF0ZVtlXSx0aGlzLnByb3BzW2VdKX19LHtrZXk6ImZpbHRlckRhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhPXRoaXMsaT1lO3JldHVybiB0Lmxlbmd0aCYmKGk9KGk9dC5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7dmFyIGE9bi5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4gZS5pZD09PXQuaWR9KSk7aWYoIWF8fCExPT09YS5maWx0ZXJhYmxlKXJldHVybiBlO3ZhciBvPWEuZmlsdGVyTWV0aG9kfHxyO3JldHVybiBhLmZpbHRlckFsbD9vKHQsZSxhKTplLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIG8odCxlLGEpfSkpfSksaSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGVbYS5wcm9wcy5zdWJSb3dzS2V5XT9vKHt9LGUsYyh7fSxhLnByb3BzLnN1YlJvd3NLZXksYS5maWx0ZXJEYXRhKGVbYS5wcm9wcy5zdWJSb3dzS2V5XSx0LHIsbikpKTplfSkpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWVbYS5wcm9wcy5zdWJSb3dzS2V5XXx8ZVthLnByb3BzLnN1YlJvd3NLZXldLmxlbmd0aD4wfSkpKSxpfX0se2tleToic29ydERhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcyxuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtpZighdC5sZW5ndGgpcmV0dXJuIGU7dmFyIGE9KHRoaXMucHJvcHMub3JkZXJCeU1ldGhvZHx8cy5kZWZhdWx0Lm9yZGVyQnkpKGUsdC5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBuW2UuaWRdP2Z1bmN0aW9uKHQscil7cmV0dXJuIG5bZS5pZF0odFtlLmlkXSxyW2UuaWRdLGUuZGVzYyl9OmZ1bmN0aW9uKHQsbil7cmV0dXJuIHIucHJvcHMuZGVmYXVsdFNvcnRNZXRob2QodFtlLmlkXSxuW2UuaWRdLGUuZGVzYyl9fSkpLHQubWFwKChmdW5jdGlvbihlKXtyZXR1cm4hZS5kZXNjfSkpLHRoaXMucHJvcHMuaW5kZXhLZXkpO3JldHVybiBhLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Vbci5wcm9wcy5zdWJSb3dzS2V5XSYmKGVbci5wcm9wcy5zdWJSb3dzS2V5XT1yLnNvcnREYXRhKGVbci5wcm9wcy5zdWJSb3dzS2V5XSx0LG4pKX0pKSxhfX0se2tleToiZ2V0TWluUm93cyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gcy5kZWZhdWx0LmdldEZpcnN0RGVmaW5lZCh0aGlzLnByb3BzLm1pblJvd3MsdGhpcy5nZXRTdGF0ZU9yUHJvcCgicGFnZVNpemUiKSl9fSx7a2V5OiJvblBhZ2VDaGFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMscj10Lm9uUGFnZUNoYW5nZSxuPXQuY29sbGFwc2VPblBhZ2VDaGFuZ2UsYT17cGFnZTplfTtuJiYoYS5leHBhbmRlZD17fSksdGhpcy5zZXRTdGF0ZVdpdGhEYXRhKGEsKGZ1bmN0aW9uKCl7ciYmcihlKX0pKX19LHtrZXk6Im9uUGFnZVNpemVDaGFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMub25QYWdlU2l6ZUNoYW5nZSxyPXRoaXMuZ2V0UmVzb2x2ZWRTdGF0ZSgpLG49ci5wYWdlU2l6ZSpyLnBhZ2UsYT1NYXRoLmZsb29yKG4vZSk7dGhpcy5zZXRTdGF0ZVdpdGhEYXRhKHtwYWdlU2l6ZTplLHBhZ2U6YX0sKGZ1bmN0aW9uKCl7dCYmdChlLGEpfSkpfX0se2tleToic29ydENvbHVtbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmdldFJlc29sdmVkU3RhdGUoKSxuPXIuc29ydGVkLGE9ci5za2lwTmV4dFNvcnQsbz1yLmRlZmF1bHRTb3J0RGVzYyxpPWUuaGFzT3duUHJvcGVydHkoImRlZmF1bHRTb3J0RGVzYyIpP2UuZGVmYXVsdFNvcnREZXNjOm8sbD0haTtpZihhKXRoaXMuc2V0U3RhdGVXaXRoRGF0YSh7c2tpcE5leHRTb3J0OiExfSk7ZWxzZXt2YXIgdT10aGlzLnByb3BzLm9uU29ydGVkQ2hhbmdlLGM9cy5kZWZhdWx0LmNsb25lKG58fFtdKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRlc2M9cy5kZWZhdWx0LmlzU29ydGluZ0Rlc2MoZSksZX0pKTtpZihzLmRlZmF1bHQuaXNBcnJheShlKSkhZnVuY3Rpb24oKXt2YXIgcj1jLmZpbmRJbmRleCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWQ9PT1lWzBdLmlkfSkpO3I+LTE/KGNbcl0uZGVzYz09PWw/dD9jLnNwbGljZShyLGUubGVuZ3RoKTplLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7Y1tyK3RdLmRlc2M9aX0pKTplLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7Y1tyK3RdLmRlc2M9bH0pKSx0fHwoYz1jLnNsaWNlKHIsZS5sZW5ndGgpKSk6Yz10P2MuY29uY2F0KGUubWFwKChmdW5jdGlvbihlKXtyZXR1cm57aWQ6ZS5pZCxkZXNjOml9fSkpKTplLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJue2lkOmUuaWQsZGVzYzppfX0pKX0oKTtlbHNle3ZhciBmPWMuZmluZEluZGV4KChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZD09PWUuaWR9KSk7aWYoZj4tMSl7dmFyIGQ9Y1tmXTtkLmRlc2M9PT1sP3Q/Yy5zcGxpY2UoZiwxKTooZC5kZXNjPWksYz1bZF0pOihkLmRlc2M9bCx0fHwoYz1bZF0pKX1lbHNlIHQ/Yy5wdXNoKHtpZDplLmlkLGRlc2M6aX0pOmM9W3tpZDplLmlkLGRlc2M6aX1dfXRoaXMuc2V0U3RhdGVXaXRoRGF0YSh7cGFnZTohbi5sZW5ndGgmJmMubGVuZ3RofHwhdD8wOnRoaXMuc3RhdGUucGFnZSxzb3J0ZWQ6Y30sKGZ1bmN0aW9uKCl7dSYmdShjLGUsdCl9KSl9fX0se2tleToiZmlsdGVyQ29sdW1uIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuZ2V0UmVzb2x2ZWRTdGF0ZSgpLmZpbHRlcmVkLG49dGhpcy5wcm9wcy5vbkZpbHRlcmVkQ2hhbmdlLGE9KHJ8fFtdKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe2lmKHQuaWQhPT1lLmlkKXJldHVybiEwfSkpOyIiIT09dCYmYS5wdXNoKHtpZDplLmlkLHZhbHVlOnR9KSx0aGlzLnNldFN0YXRlV2l0aERhdGEoe2ZpbHRlcmVkOmF9LChmdW5jdGlvbigpe24mJm4oYSxlLHQpfSkpfX0se2tleToicmVzaXplQ29sdW1uU3RhcnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzO2Uuc3RvcFByb3BhZ2F0aW9uKCk7dmFyIGE9ZS50YXJnZXQucGFyZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCxvPXZvaWQgMDtvPXI/ZS5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWDplLnBhZ2VYLHRoaXMudHJhcEV2ZW50cz0hMCx0aGlzLnNldFN0YXRlV2l0aERhdGEoe2N1cnJlbnRseVJlc2l6aW5nOntpZDp0LmlkLHN0YXJ0WDpvLHBhcmVudFdpZHRoOmF9fSwoZnVuY3Rpb24oKXtyPyhkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLG4ucmVzaXplQ29sdW1uTW92aW5nKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGNhbmNlbCIsbi5yZXNpemVDb2x1bW5FbmQpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixuLnJlc2l6ZUNvbHVtbkVuZCkpOihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLG4ucmVzaXplQ29sdW1uTW92aW5nKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixuLnJlc2l6ZUNvbHVtbkVuZCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsbi5yZXNpemVDb2x1bW5FbmQpKX0pKX19LHtrZXk6InJlc2l6ZUNvbHVtbk1vdmluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKTt2YXIgdD10aGlzLnByb3BzLm9uUmVzaXplZENoYW5nZSxyPXRoaXMuZ2V0UmVzb2x2ZWRTdGF0ZSgpLG49ci5yZXNpemVkLGE9ci5jdXJyZW50bHlSZXNpemluZyxvPW4uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5pZCE9PWEuaWR9KSksaT12b2lkIDA7InRvdWNobW92ZSI9PT1lLnR5cGU/aT1lLmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VYOiJtb3VzZW1vdmUiPT09ZS50eXBlJiYoaT1lLnBhZ2VYKTt2YXIgbD1NYXRoLm1heChhLnBhcmVudFdpZHRoK2ktYS5zdGFydFgsMTEpO28ucHVzaCh7aWQ6YS5pZCx2YWx1ZTpsfSksdGhpcy5zZXRTdGF0ZVdpdGhEYXRhKHtyZXNpemVkOm99LChmdW5jdGlvbigpe3QmJnQobyxlKX0pKX19LHtrZXk6InJlc2l6ZUNvbHVtbkVuZCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKTt2YXIgdD0idG91Y2hlbmQiPT09ZS50eXBlfHwidG91Y2hjYW5jZWwiPT09ZS50eXBlO3QmJihkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMucmVzaXplQ29sdW1uTW92aW5nKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGNhbmNlbCIsdGhpcy5yZXNpemVDb2x1bW5FbmQpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIix0aGlzLnJlc2l6ZUNvbHVtbkVuZCkpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5yZXNpemVDb2x1bW5Nb3ZpbmcpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMucmVzaXplQ29sdW1uRW5kKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIix0aGlzLnJlc2l6ZUNvbHVtbkVuZCksdHx8dGhpcy5zZXRTdGF0ZVdpdGhEYXRhKHtza2lwTmV4dFNvcnQ6ITAsY3VycmVudGx5UmVzaXppbmc6ITF9KX19XSksdH0oZSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSxhPXMocigxKSksbz1zKHIoNCkpLGk9cyhyKDUpKSxsPXMocigxMSkpO2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIHUoZSx0KXt2YXIgcj17fTtmb3IodmFyIG4gaW4gZSl0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYocltuXT1lW25dKTtyZXR1cm4gcn12YXIgYz1mdW5jdGlvbigpe3JldHVybnt9fTt0LmRlZmF1bHQ9e2RhdGE6W10sbG9hZGluZzohMSxzaG93UGFnaW5hdGlvbjohMCxzaG93UGFnaW5hdGlvblRvcDohMSxzaG93UGFnaW5hdGlvbkJvdHRvbTohMCxzaG93UGFnZVNpemVPcHRpb25zOiEwLHBhZ2VTaXplT3B0aW9uczpbNSwxMCwyMCwyNSw1MCwxMDBdLGRlZmF1bHRQYWdlU2l6ZToyMCxzaG93UGFnZUp1bXA6ITAsY29sbGFwc2VPblNvcnRpbmdDaGFuZ2U6ITAsY29sbGFwc2VPblBhZ2VDaGFuZ2U6ITAsY29sbGFwc2VPbkRhdGFDaGFuZ2U6ITAsZnJlZXplV2hlbkV4cGFuZGVkOiExLHNvcnRhYmxlOiEwLHJlc2l6YWJsZTohMCxmaWx0ZXJhYmxlOiExLGRlZmF1bHRTb3J0RGVzYzohMSxkZWZhdWx0U29ydGVkOltdLGRlZmF1bHRGaWx0ZXJlZDpbXSxkZWZhdWx0UmVzaXplZDpbXSxkZWZhdWx0RXhwYW5kZWQ6e30sZGVmYXVsdEZpbHRlck1ldGhvZDpmdW5jdGlvbihlLHQscil7dmFyIG49ZS5waXZvdElkfHxlLmlkO3JldHVybiB2b2lkIDA9PT10W25dfHxTdHJpbmcodFtuXSkuc3RhcnRzV2l0aChlLnZhbHVlKX0sZGVmYXVsdFNvcnRNZXRob2Q6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0PW51bGw9PXQ/IiI6dCwoZT0ic3RyaW5nIj09dHlwZW9mKGU9bnVsbD09ZT8iIjplKT9lLnRvTG93ZXJDYXNlKCk6ZSk+KHQ9InN0cmluZyI9PXR5cGVvZiB0P3QudG9Mb3dlckNhc2UoKTp0KT8xOmU8dD8tMTowfSxvblBhZ2VDaGFuZ2U6dm9pZCAwLG9uUGFnZVNpemVDaGFuZ2U6dm9pZCAwLG9uU29ydGVkQ2hhbmdlOnZvaWQgMCxvbkZpbHRlcmVkQ2hhbmdlOnZvaWQgMCxvblJlc2l6ZWRDaGFuZ2U6dm9pZCAwLG9uRXhwYW5kZWRDaGFuZ2U6dm9pZCAwLHBpdm90Qnk6dm9pZCAwLHBpdm90VmFsS2V5OiJfcGl2b3RWYWwiLHBpdm90SURLZXk6Il9waXZvdElEIixzdWJSb3dzS2V5OiJfc3ViUm93cyIsYWdncmVnYXRlZEtleToiX2FnZ3JlZ2F0ZWQiLG5lc3RpbmdMZXZlbEtleToiX25lc3RpbmdMZXZlbCIsb3JpZ2luYWxLZXk6Il9vcmlnaW5hbCIsaW5kZXhLZXk6Il9pbmRleCIsZ3JvdXBlZEJ5UGl2b3RLZXk6Il9ncm91cGVkQnlQaXZvdCIsb25GZXRjaERhdGE6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sY2xhc3NOYW1lOiIiLHN0eWxlOnt9LGdldFByb3BzOmMsZ2V0VGFibGVQcm9wczpjLGdldFRoZWFkR3JvdXBQcm9wczpjLGdldFRoZWFkR3JvdXBUclByb3BzOmMsZ2V0VGhlYWRHcm91cFRoUHJvcHM6YyxnZXRUaGVhZFByb3BzOmMsZ2V0VGhlYWRUclByb3BzOmMsZ2V0VGhlYWRUaFByb3BzOmMsZ2V0VGhlYWRGaWx0ZXJQcm9wczpjLGdldFRoZWFkRmlsdGVyVHJQcm9wczpjLGdldFRoZWFkRmlsdGVyVGhQcm9wczpjLGdldFRib2R5UHJvcHM6YyxnZXRUckdyb3VwUHJvcHM6YyxnZXRUclByb3BzOmMsZ2V0VGRQcm9wczpjLGdldFRmb290UHJvcHM6YyxnZXRUZm9vdFRyUHJvcHM6YyxnZXRUZm9vdFRkUHJvcHM6YyxnZXRQYWdpbmF0aW9uUHJvcHM6YyxnZXRMb2FkaW5nUHJvcHM6YyxnZXROb0RhdGFQcm9wczpjLGdldFJlc2l6ZXJQcm9wczpjLGNvbHVtbjp7Q2VsbDp2b2lkIDAsSGVhZGVyOnZvaWQgMCxGb290ZXI6dm9pZCAwLEFnZ3JlZ2F0ZWQ6dm9pZCAwLFBpdm90OnZvaWQgMCxQaXZvdFZhbHVlOnZvaWQgMCxFeHBhbmRlcjp2b2lkIDAsRmlsdGVyOnZvaWQgMCxzb3J0YWJsZTp2b2lkIDAscmVzaXphYmxlOnZvaWQgMCxmaWx0ZXJhYmxlOnZvaWQgMCxzaG93OiEwLG1pbldpZHRoOjEwMCxjbGFzc05hbWU6IiIsc3R5bGU6e30sZ2V0UHJvcHM6YyxhZ2dyZWdhdGU6dm9pZCAwLGhlYWRlckNsYXNzTmFtZToiIixoZWFkZXJTdHlsZTp7fSxnZXRIZWFkZXJQcm9wczpjLGZvb3RlckNsYXNzTmFtZToiIixmb290ZXJTdHlsZTp7fSxnZXRGb290ZXJQcm9wczpjLGZpbHRlck1ldGhvZDp2b2lkIDAsZmlsdGVyQWxsOiExLHNvcnRNZXRob2Q6dm9pZCAwfSxleHBhbmRlckRlZmF1bHRzOntzb3J0YWJsZTohMSxyZXNpemFibGU6ITEsZmlsdGVyYWJsZTohMSx3aWR0aDozNX0scGl2b3REZWZhdWx0czp7fSxwcmV2aW91c1RleHQ6IlByZXZpb3VzIixuZXh0VGV4dDoiTmV4dCIsbG9hZGluZ1RleHQ6IkxvYWRpbmcuLi4iLG5vRGF0YVRleHQ6Ik5vIHJvd3MgZm91bmQiLHBhZ2VUZXh0OiJQYWdlIixvZlRleHQ6Im9mIixyb3dzVGV4dDoicm93cyIsVGFibGVDb21wb25lbnQ6aS5kZWZhdWx0Lm1ha2VUZW1wbGF0ZUNvbXBvbmVudCgicnQtdGFibGUiLCJUYWJsZSIpLFRoZWFkQ29tcG9uZW50OmkuZGVmYXVsdC5tYWtlVGVtcGxhdGVDb21wb25lbnQoInJ0LXRoZWFkIiwiVGhlYWQiKSxUYm9keUNvbXBvbmVudDppLmRlZmF1bHQubWFrZVRlbXBsYXRlQ29tcG9uZW50KCJydC10Ym9keSIsIlRib2R5IiksVHJHcm91cENvbXBvbmVudDppLmRlZmF1bHQubWFrZVRlbXBsYXRlQ29tcG9uZW50KCJydC10ci1ncm91cCIsIlRyR3JvdXAiKSxUckNvbXBvbmVudDppLmRlZmF1bHQubWFrZVRlbXBsYXRlQ29tcG9uZW50KCJydC10ciIsIlRyIiksVGhDb21wb25lbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50b2dnbGVTb3J0LHI9ZS5jbGFzc05hbWUsaT1lLmNoaWxkcmVuLGw9dShlLFsidG9nZ2xlU29ydCIsImNsYXNzTmFtZSIsImNoaWxkcmVuIl0pO3JldHVybiBhLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2IixuKHtjbGFzc05hbWU6KDAsby5kZWZhdWx0KShyLCJydC10aCIpLG9uQ2xpY2s6dD9mdW5jdGlvbihlKXtyZXR1cm4gdChlKX06dm9pZCAwfSxsKSxpKX0sVGRDb21wb25lbnQ6aS5kZWZhdWx0Lm1ha2VUZW1wbGF0ZUNvbXBvbmVudCgicnQtdGQiLCJUZCIpLFRmb290Q29tcG9uZW50OmkuZGVmYXVsdC5tYWtlVGVtcGxhdGVDb21wb25lbnQoInJ0LXRmb290IiwiVGZvb3QiKSxGaWx0ZXJDb21wb25lbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5maWx0ZXIscj1lLm9uQ2hhbmdlO3JldHVybiBhLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaW5wdXQiLHt0eXBlOiJ0ZXh0IixzdHlsZTp7d2lkdGg6IjEwMCUifSx2YWx1ZTp0P3QudmFsdWU6IiIsb25DaGFuZ2U6ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZS50YXJnZXQudmFsdWUpfX0pfSxFeHBhbmRlckNvbXBvbmVudDpmdW5jdGlvbihlKXt2YXIgdD1lLmlzRXhwYW5kZWQ7cmV0dXJuIGEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6KDAsby5kZWZhdWx0KSgicnQtZXhwYW5kZXIiLHQmJiItb3BlbiIpfSwi4oCiIil9LFBpdm90VmFsdWVDb21wb25lbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdWJSb3dzLHI9ZS52YWx1ZTtyZXR1cm4gYS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLG51bGwsciwiICIsdCYmIigiK3QubGVuZ3RoKyIpIil9LEFnZ3JlZ2F0ZWRDb21wb25lbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdWJSb3dzLHI9ZS5jb2x1bW4sbj10LmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWVbci5pZF19KSkubWFwKChmdW5jdGlvbihlLG4pe3JldHVybiBhLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2tleTpufSxlW3IuaWRdLG48dC5sZW5ndGgtMT8iLCAiOiIiKX0pKTtyZXR1cm4gYS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLG51bGwsbil9LFBpdm90Q29tcG9uZW50OnZvaWQgMCxQYWdpbmF0aW9uQ29tcG9uZW50OmwuZGVmYXVsdCxQcmV2aW91c0NvbXBvbmVudDp2b2lkIDAsTmV4dENvbXBvbmVudDp2b2lkIDAsTG9hZGluZ0NvbXBvbmVudDpmdW5jdGlvbihlKXt2YXIgdD1lLmNsYXNzTmFtZSxyPWUubG9hZGluZyxpPWUubG9hZGluZ1RleHQsbD11KGUsWyJjbGFzc05hbWUiLCJsb2FkaW5nIiwibG9hZGluZ1RleHQiXSk7cmV0dXJuIGEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLG4oe2NsYXNzTmFtZTooMCxvLmRlZmF1bHQpKCItbG9hZGluZyIseyItYWN0aXZlIjpyfSx0KX0sbCksYS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiLWxvYWRpbmctaW5uZXIifSxpKSl9LE5vRGF0YUNvbXBvbmVudDppLmRlZmF1bHQubWFrZVRlbXBsYXRlQ29tcG9uZW50KCJydC1ub0RhdGEiLCJOb0RhdGEiKSxSZXNpemVyQ29tcG9uZW50OmkuZGVmYXVsdC5tYWtlVGVtcGxhdGVDb21wb25lbnQoInJ0LXJlc2l6ZXIiLCJSZXNpemVyIiksUGFkUm93Q29tcG9uZW50OmZ1bmN0aW9uKCl7cmV0dXJuIGEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIixudWxsLCLCoCIpfX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbih0LHIsbil7cmV0dXJuIHImJmUodC5wcm90b3R5cGUsciksbiYmZSh0LG4pLHR9fSgpLGE9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pJiYoZVtuXT1yW25dKX1yZXR1cm4gZX0sbz1yKDEpLGk9cyhvKSxsPXMocig0KSk7ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dmFyIHU9ZnVuY3Rpb24oZSl7cmV0dXJuIGkuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJidXR0b24iLGEoe3R5cGU6ImJ1dHRvbiJ9LGUse2NsYXNzTmFtZToiLWJ0biJ9KSxlLmNoaWxkcmVuKX0sYz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpO3ZhciByPWZ1bmN0aW9uKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPXR5cGVvZiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdD9lOnR9KHRoaXMsKHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkpLmNhbGwodGhpcykpO3JldHVybiByLmdldFNhZmVQYWdlPXIuZ2V0U2FmZVBhZ2UuYmluZChyKSxyLmNoYW5nZVBhZ2U9ci5jaGFuZ2VQYWdlLmJpbmQociksci5hcHBseVBhZ2U9ci5hcHBseVBhZ2UuYmluZChyKSxyLnN0YXRlPXtwYWdlOmUucGFnZX0scn1yZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfSh0LGUpLG4odCxbe2tleToiVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuc2V0U3RhdGUoe3BhZ2U6ZS5wYWdlfSl9fSx7a2V5OiJnZXRTYWZlUGFnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGlzTmFOKGUpJiYoZT10aGlzLnByb3BzLnBhZ2UpLE1hdGgubWluKE1hdGgubWF4KGUsMCksdGhpcy5wcm9wcy5wYWdlcy0xKX19LHtrZXk6ImNoYW5nZVBhZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe2U9dGhpcy5nZXRTYWZlUGFnZShlKSx0aGlzLnNldFN0YXRlKHtwYWdlOmV9KSx0aGlzLnByb3BzLnBhZ2UhPT1lJiZ0aGlzLnByb3BzLm9uUGFnZUNoYW5nZShlKX19LHtrZXk6ImFwcGx5UGFnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7ZSYmZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciB0PXRoaXMuc3RhdGUucGFnZTt0aGlzLmNoYW5nZVBhZ2UoIiI9PT10P3RoaXMucHJvcHMucGFnZTp0KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxyPXQucGFnZXMsbj10LnBhZ2UsYT10LnNob3dQYWdlU2l6ZU9wdGlvbnMsbz10LnBhZ2VTaXplT3B0aW9ucyxzPXQucGFnZVNpemUsYz10LnNob3dQYWdlSnVtcCxmPXQuY2FuUHJldmlvdXMsZD10LmNhbk5leHQscD10Lm9uUGFnZVNpemVDaGFuZ2UsZz10LmNsYXNzTmFtZSxoPXQuUHJldmlvdXNDb21wb25lbnQsbT12b2lkIDA9PT1oP3U6aCxiPXQuTmV4dENvbXBvbmVudCx5PXZvaWQgMD09PWI/dTpiO3JldHVybiBpLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOigwLGwuZGVmYXVsdCkoZywiLXBhZ2luYXRpb24iKSxzdHlsZTp0aGlzLnByb3BzLnBhZ2luYXRpb25TdHlsZX0saS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiLXByZXZpb3VzIn0saS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQobSx7b25DbGljazpmdW5jdGlvbih0KXtmJiZlLmNoYW5nZVBhZ2Uobi0xKX0sZGlzYWJsZWQ6IWZ9LHRoaXMucHJvcHMucHJldmlvdXNUZXh0KSksaS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiLWNlbnRlciJ9LGkuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiItcGFnZUluZm8ifSx0aGlzLnByb3BzLnBhZ2VUZXh0LCIgIixjP2kuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6Ii1wYWdlSnVtcCJ9LGkuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJpbnB1dCIse3R5cGU6IiI9PT10aGlzLnN0YXRlLnBhZ2U/InRleHQiOiJudW1iZXIiLG9uQ2hhbmdlOmZ1bmN0aW9uKHQpe3ZhciByPXQudGFyZ2V0LnZhbHVlLG49ci0xO2lmKCIiPT09cilyZXR1cm4gZS5zZXRTdGF0ZSh7cGFnZTpyfSk7ZS5zZXRTdGF0ZSh7cGFnZTplLmdldFNhZmVQYWdlKG4pfSl9LHZhbHVlOiIiPT09dGhpcy5zdGF0ZS5wYWdlPyIiOnRoaXMuc3RhdGUucGFnZSsxLG9uQmx1cjp0aGlzLmFwcGx5UGFnZSxvbktleVByZXNzOmZ1bmN0aW9uKHQpezEzIT09dC53aGljaCYmMTMhPT10LmtleUNvZGV8fGUuYXBwbHlQYWdlKCl9fSkpOmkuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiItY3VycmVudFBhZ2UifSxuKzEpLCIgIix0aGlzLnByb3BzLm9mVGV4dCwiICIsaS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6Ii10b3RhbFBhZ2VzIn0scnx8MSkpLGEmJmkuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJzZWxlY3Qtd3JhcCAtcGFnZVNpemVPcHRpb25zIn0saS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIse29uQ2hhbmdlOmZ1bmN0aW9uKGUpe3JldHVybiBwKE51bWJlcihlLnRhcmdldC52YWx1ZSkpfSx2YWx1ZTpzfSxvLm1hcCgoZnVuY3Rpb24odCxyKXtyZXR1cm4gaS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIse2tleTpyLHZhbHVlOnR9LHQsIiAiLGUucHJvcHMucm93c1RleHQpfSkpKSkpLGkuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6Ii1uZXh0In0saS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoeSx7b25DbGljazpmdW5jdGlvbih0KXtkJiZlLmNoYW5nZVBhZ2UobisxKX0sZGlzYWJsZWQ6IWR9LHRoaXMucHJvcHMubmV4dFRleHQpKSl9fV0pLHR9KG8uQ29tcG9uZW50KTt0LmRlZmF1bHQ9Y30sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG4sYT1yKDApLG89KG49YSkmJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59O3QuZGVmYXVsdD17ZGF0YTpvLmRlZmF1bHQuYXJyYXksbG9hZGluZzpvLmRlZmF1bHQuYm9vbCxzaG93UGFnaW5hdGlvbjpvLmRlZmF1bHQuYm9vbCxzaG93UGFnaW5hdGlvblRvcDpvLmRlZmF1bHQuYm9vbCxzaG93UGFnaW5hdGlvbkJvdHRvbTpvLmRlZmF1bHQuYm9vbCxzaG93UGFnZVNpemVPcHRpb25zOm8uZGVmYXVsdC5ib29sLHBhZ2VTaXplT3B0aW9uczpvLmRlZmF1bHQuYXJyYXksZGVmYXVsdFBhZ2VTaXplOm8uZGVmYXVsdC5udW1iZXIsc2hvd1BhZ2VKdW1wOm8uZGVmYXVsdC5ib29sLGNvbGxhcHNlT25Tb3J0aW5nQ2hhbmdlOm8uZGVmYXVsdC5ib29sLGNvbGxhcHNlT25QYWdlQ2hhbmdlOm8uZGVmYXVsdC5ib29sLGNvbGxhcHNlT25EYXRhQ2hhbmdlOm8uZGVmYXVsdC5ib29sLGZyZWV6ZVdoZW5FeHBhbmRlZDpvLmRlZmF1bHQuYm9vbCxzb3J0YWJsZTpvLmRlZmF1bHQuYm9vbCxyZXNpemFibGU6by5kZWZhdWx0LmJvb2wsZmlsdGVyYWJsZTpvLmRlZmF1bHQuYm9vbCxkZWZhdWx0U29ydERlc2M6by5kZWZhdWx0LmJvb2wsZGVmYXVsdFNvcnRlZDpvLmRlZmF1bHQuYXJyYXksZGVmYXVsdEZpbHRlcmVkOm8uZGVmYXVsdC5hcnJheSxkZWZhdWx0UmVzaXplZDpvLmRlZmF1bHQuYXJyYXksZGVmYXVsdEV4cGFuZGVkOm8uZGVmYXVsdC5vYmplY3QsZGVmYXVsdEZpbHRlck1ldGhvZDpvLmRlZmF1bHQuZnVuYyxkZWZhdWx0U29ydE1ldGhvZDpvLmRlZmF1bHQuZnVuYyxvblBhZ2VDaGFuZ2U6by5kZWZhdWx0LmZ1bmMsb25QYWdlU2l6ZUNoYW5nZTpvLmRlZmF1bHQuZnVuYyxvblNvcnRlZENoYW5nZTpvLmRlZmF1bHQuZnVuYyxvbkZpbHRlcmVkQ2hhbmdlOm8uZGVmYXVsdC5mdW5jLG9uUmVzaXplZENoYW5nZTpvLmRlZmF1bHQuZnVuYyxvbkV4cGFuZGVkQ2hhbmdlOm8uZGVmYXVsdC5mdW5jLHBpdm90Qnk6by5kZWZhdWx0LmFycmF5LHBpdm90VmFsS2V5Om8uZGVmYXVsdC5zdHJpbmcscGl2b3RJREtleTpvLmRlZmF1bHQuc3RyaW5nLHN1YlJvd3NLZXk6by5kZWZhdWx0LnN0cmluZyxhZ2dyZWdhdGVkS2V5Om8uZGVmYXVsdC5zdHJpbmcsbmVzdGluZ0xldmVsS2V5Om8uZGVmYXVsdC5zdHJpbmcsb3JpZ2luYWxLZXk6by5kZWZhdWx0LnN0cmluZyxpbmRleEtleTpvLmRlZmF1bHQuc3RyaW5nLGdyb3VwZWRCeVBpdm90S2V5Om8uZGVmYXVsdC5zdHJpbmcsb25GZXRjaERhdGE6by5kZWZhdWx0LmZ1bmMsY2xhc3NOYW1lOm8uZGVmYXVsdC5zdHJpbmcsc3R5bGU6by5kZWZhdWx0Lm9iamVjdCxnZXRQcm9wczpvLmRlZmF1bHQub2JqZWN0LGdldFRhYmxlUHJvcHM6by5kZWZhdWx0Lm9iamVjdCxnZXRUaGVhZEdyb3VwUHJvcHM6by5kZWZhdWx0Lm9iamVjdCxnZXRUaGVhZEdyb3VwVHJQcm9wczpvLmRlZmF1bHQub2JqZWN0LGdldFRoZWFkR3JvdXBUaFByb3BzOm8uZGVmYXVsdC5vYmplY3QsZ2V0VGhlYWRQcm9wczpvLmRlZmF1bHQub2JqZWN0LGdldFRoZWFkVHJQcm9wczpvLmRlZmF1bHQub2JqZWN0LGdldFRoZWFkVGhQcm9wczpvLmRlZmF1bHQub2JqZWN0LGdldFRoZWFkRmlsdGVyUHJvcHM6by5kZWZhdWx0Lm9iamVjdCxnZXRUaGVhZEZpbHRlclRyUHJvcHM6by5kZWZhdWx0Lm9iamVjdCxnZXRUaGVhZEZpbHRlclRoUHJvcHM6by5kZWZhdWx0Lm9iamVjdCxnZXRUYm9keVByb3BzOm8uZGVmYXVsdC5vYmplY3QsZ2V0VHJHcm91cFByb3BzOm8uZGVmYXVsdC5vYmplY3QsZ2V0VHJQcm9wczpvLmRlZmF1bHQub2JqZWN0LGdldFRkUHJvcHM6by5kZWZhdWx0Lm9iamVjdCxnZXRUZm9vdFByb3BzOm8uZGVmYXVsdC5vYmplY3QsZ2V0VGZvb3RUclByb3BzOm8uZGVmYXVsdC5vYmplY3QsZ2V0VGZvb3RUZFByb3BzOm8uZGVmYXVsdC5vYmplY3QsZ2V0UGFnaW5hdGlvblByb3BzOm8uZGVmYXVsdC5vYmplY3QsZ2V0TG9hZGluZ1Byb3BzOm8uZGVmYXVsdC5vYmplY3QsZ2V0Tm9EYXRhUHJvcHM6by5kZWZhdWx0Lm9iamVjdCxnZXRSZXNpemVyUHJvcHM6by5kZWZhdWx0Lm9iamVjdCxjb2x1bW5zOm8uZGVmYXVsdC5zaGFwZSh7Q2VsbDpvLmRlZmF1bHQub25lT2ZUeXBlKFtvLmRlZmF1bHQuZWxlbWVudCxvLmRlZmF1bHQuc3RyaW5nLG8uZGVmYXVsdC5mdW5jXSksSGVhZGVyOm8uZGVmYXVsdC5vbmVPZlR5cGUoW28uZGVmYXVsdC5lbGVtZW50LG8uZGVmYXVsdC5zdHJpbmcsby5kZWZhdWx0LmZ1bmNdKSxGb290ZXI6by5kZWZhdWx0Lm9uZU9mVHlwZShbby5kZWZhdWx0LmVsZW1lbnQsby5kZWZhdWx0LnN0cmluZyxvLmRlZmF1bHQuZnVuY10pLEFnZ3JlZ2F0ZWQ6by5kZWZhdWx0Lm9uZU9mVHlwZShbby5kZWZhdWx0LmVsZW1lbnQsby5kZWZhdWx0LnN0cmluZyxvLmRlZmF1bHQuZnVuY10pLFBpdm90Om8uZGVmYXVsdC5vbmVPZlR5cGUoW28uZGVmYXVsdC5lbGVtZW50LG8uZGVmYXVsdC5zdHJpbmcsby5kZWZhdWx0LmZ1bmNdKSxQaXZvdFZhbHVlOm8uZGVmYXVsdC5vbmVPZlR5cGUoW28uZGVmYXVsdC5lbGVtZW50LG8uZGVmYXVsdC5zdHJpbmcsby5kZWZhdWx0LmZ1bmNdKSxFeHBhbmRlcjpvLmRlZmF1bHQub25lT2ZUeXBlKFtvLmRlZmF1bHQuZWxlbWVudCxvLmRlZmF1bHQuc3RyaW5nLG8uZGVmYXVsdC5mdW5jXSksRmlsdGVyOm8uZGVmYXVsdC5vbmVPZlR5cGUoW28uZGVmYXVsdC5lbGVtZW50LG8uZGVmYXVsdC5mdW5jXSksc29ydGFibGU6by5kZWZhdWx0LmJvb2wscmVzaXphYmxlOm8uZGVmYXVsdC5ib29sLGZpbHRlcmFibGU6by5kZWZhdWx0LmJvb2wsc2hvdzpvLmRlZmF1bHQuYm9vbCxtaW5XaWR0aDpvLmRlZmF1bHQubnVtYmVyLGNsYXNzTmFtZTpvLmRlZmF1bHQuc3RyaW5nLHN0eWxlOm8uZGVmYXVsdC5vYmplY3QsZ2V0UHJvcHM6by5kZWZhdWx0Lm9iamVjdCxhZ2dyZWdhdGU6by5kZWZhdWx0LmZ1bmMsaGVhZGVyQ2xhc3NOYW1lOm8uZGVmYXVsdC5zdHJpbmcsaGVhZGVyU3R5bGU6by5kZWZhdWx0Lm9iamVjdCxnZXRIZWFkZXJQcm9wczpvLmRlZmF1bHQub2JqZWN0LGZvb3RlckNsYXNzTmFtZTpvLmRlZmF1bHQuc3RyaW5nLGZvb3RlclN0eWxlOm8uZGVmYXVsdC5vYmplY3QsZ2V0Rm9vdGVyUHJvcHM6by5kZWZhdWx0Lm9iamVjdCxmaWx0ZXJNZXRob2Q6by5kZWZhdWx0LmZ1bmMsZmlsdGVyQWxsOm8uZGVmYXVsdC5ib29sLHNvcnRNZXRob2Q6by5kZWZhdWx0LmZ1bmN9KSxleHBhbmRlckRlZmF1bHRzOm8uZGVmYXVsdC5zaGFwZSh7c29ydGFibGU6by5kZWZhdWx0LmJvb2wscmVzaXphYmxlOm8uZGVmYXVsdC5ib29sLGZpbHRlcmFibGU6by5kZWZhdWx0LmJvb2wsd2lkdGg6by5kZWZhdWx0Lm51bWJlcn0pLHBpdm90RGVmYXVsdHM6by5kZWZhdWx0Lm9iamVjdCxwcmV2aW91c1RleHQ6by5kZWZhdWx0LnN0cmluZyxuZXh0VGV4dDpvLmRlZmF1bHQuc3RyaW5nLGxvYWRpbmdUZXh0Om8uZGVmYXVsdC5zdHJpbmcsbm9EYXRhVGV4dDpvLmRlZmF1bHQuc3RyaW5nLHBhZ2VUZXh0Om8uZGVmYXVsdC5zdHJpbmcsb2ZUZXh0Om8uZGVmYXVsdC5zdHJpbmcscm93c1RleHQ6by5kZWZhdWx0LnN0cmluZyxUYWJsZUNvbXBvbmVudDpvLmRlZmF1bHQuZWxlbWVudCxUaGVhZENvbXBvbmVudDpvLmRlZmF1bHQuZWxlbWVudCxUYm9keUNvbXBvbmVudDpvLmRlZmF1bHQuZWxlbWVudCxUckdyb3VwQ29tcG9uZW50Om8uZGVmYXVsdC5lbGVtZW50LFRyQ29tcG9uZW50Om8uZGVmYXVsdC5lbGVtZW50LFRoQ29tcG9uZW50Om8uZGVmYXVsdC5lbGVtZW50LFRkQ29tcG9uZW50Om8uZGVmYXVsdC5lbGVtZW50LFRmb290Q29tcG9uZW50Om8uZGVmYXVsdC5lbGVtZW50LEZpbHRlckNvbXBvbmVudDpvLmRlZmF1bHQuZWxlbWVudCxFeHBhbmRlckNvbXBvbmVudDpvLmRlZmF1bHQuZWxlbWVudCxQaXZvdFZhbHVlQ29tcG9uZW50Om8uZGVmYXVsdC5lbGVtZW50LEFnZ3JlZ2F0ZWRDb21wb25lbnQ6by5kZWZhdWx0LmVsZW1lbnQsUGl2b3RDb21wb25lbnQ6by5kZWZhdWx0LmVsZW1lbnQsUGFnaW5hdGlvbkNvbXBvbmVudDpvLmRlZmF1bHQuZWxlbWVudCxQcmV2aW91c0NvbXBvbmVudDpvLmRlZmF1bHQuZWxlbWVudCxOZXh0Q29tcG9uZW50Om8uZGVmYXVsdC5lbGVtZW50LExvYWRpbmdDb21wb25lbnQ6by5kZWZhdWx0LmVsZW1lbnQsTm9EYXRhQ29tcG9uZW50Om8uZGVmYXVsdC5lbGVtZW50LFJlc2l6ZXJDb21wb25lbnQ6by5kZWZhdWx0LmVsZW1lbnQsUGFkUm93Q29tcG9uZW50Om8uZGVmYXVsdC5lbGVtZW50fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDE0KTtmdW5jdGlvbiBhKCl7fWZ1bmN0aW9uIG8oKXt9by5yZXNldFdhcm5pbmdDYWNoZT1hLGUuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LHIsYSxvLGkpe2lmKGkhPT1uKXt2YXIgbD1uZXcgRXJyb3IoIkNhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuIFVzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uIFJlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMiKTt0aHJvdyBsLm5hbWU9IkludmFyaWFudCBWaW9sYXRpb24iLGx9fWZ1bmN0aW9uIHQoKXtyZXR1cm4gZX1lLmlzUmVxdWlyZWQ9ZTt2YXIgcj17YXJyYXk6ZSxib29sOmUsZnVuYzplLG51bWJlcjplLG9iamVjdDplLHN0cmluZzplLHN5bWJvbDplLGFueTplLGFycmF5T2Y6dCxlbGVtZW50OmUsZWxlbWVudFR5cGU6ZSxpbnN0YW5jZU9mOnQsbm9kZTplLG9iamVjdE9mOnQsb25lT2Y6dCxvbmVPZlR5cGU6dCxzaGFwZTp0LGV4YWN0OnQsY2hlY2tQcm9wVHlwZXM6byxyZXNldFdhcm5pbmdDYWNoZTphfTtyZXR1cm4gci5Qcm9wVHlwZXM9cixyfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9IlNFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEIn0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoMTYpOyJzdHJpbmciPT10eXBlb2YgbiYmKG49W1tlLmksbiwiIl1dKTt2YXIgYT17aG1yOiEwLHRyYW5zZm9ybTp2b2lkIDAsaW5zZXJ0SW50bzp2b2lkIDB9O3IoNykobixhKTtuLmxvY2FscyYmKGUuZXhwb3J0cz1uLmxvY2Fscyl9LGZ1bmN0aW9uKGUsdCxyKXsoZS5leHBvcnRzPXIoNikoITEpKS5wdXNoKFtlLmksIi5SZWFjdFRhYmxle3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1ib3gtb3JpZW50OnZlcnRpY2FsOy13ZWJraXQtYm94LWRpcmVjdGlvbjpub3JtYWw7LW1zLWZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LlJlYWN0VGFibGUgKnstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LlJlYWN0VGFibGUgLnJ0LXRhYmxley13ZWJraXQtYm94LWZsZXg6MTstbXMtZmxleDphdXRvIDE7ZmxleDphdXRvIDE7ZmxleC1kaXJlY3Rpb246Y29sdW1uOy13ZWJraXQtYm94LWFsaWduOnN0cmV0Y2g7LW1zLWZsZXgtYWxpZ246c3RyZXRjaDthbGlnbi1pdGVtczpzdHJldGNoO3dpZHRoOjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO292ZXJmbG93OmF1dG99LlJlYWN0VGFibGUgLnJ0LXRhYmxlLC5SZWFjdFRhYmxlIC5ydC10aGVhZHtkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDstd2Via2l0LWJveC1kaXJlY3Rpb246bm9ybWFsOy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW59LlJlYWN0VGFibGUgLnJ0LXRoZWFke2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uUmVhY3RUYWJsZSAucnQtdGhlYWQgLnJ0LXRye3RleHQtYWxpZ246Y2VudGVyfS5SZWFjdFRhYmxlIC5ydC10aGVhZCAucnQtdGQsLlJlYWN0VGFibGUgLnJ0LXRoZWFkIC5ydC10aHtsaW5lLWhlaWdodDpub3JtYWw7cG9zaXRpb246cmVsYXRpdmV9LlJlYWN0VGFibGUgLnJ0LXRoZWFkIC5ydC10ZC4tY3Vyc29yLXBvaW50ZXIsLlJlYWN0VGFibGUgLnJ0LXRoZWFkIC5ydC10aC4tY3Vyc29yLXBvaW50ZXJ7Y3Vyc29yOnBvaW50ZXJ9LlJlYWN0VGFibGUgLnJ0LXRoZWFkIC5ydC1yZXNpemFibGUtaGVhZGVye292ZXJmbG93OnZpc2libGV9LlJlYWN0VGFibGUgLnJ0LXRoZWFkIC5ydC1yZXNpemFibGUtaGVhZGVyOmxhc3QtY2hpbGR7b3ZlcmZsb3c6aGlkZGVufS5SZWFjdFRhYmxlIC5ydC10aGVhZCAucnQtcmVzaXphYmxlLWhlYWRlci1jb250ZW50e292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5SZWFjdFRhYmxlIC5ydC10Ym9keXtkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDstd2Via2l0LWJveC1kaXJlY3Rpb246bm9ybWFsOy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1kaXJlY3Rpb246Y29sdW1uO292ZXJmbG93OmF1dG99LlJlYWN0VGFibGUgLnJ0LXRib2R5IC5ydC1leHBhbmRhYmxle2N1cnNvcjpwb2ludGVyfS5SZWFjdFRhYmxlIC5ydC10ci1ncm91cHstd2Via2l0LWJveC1mbGV4OjE7LW1zLWZsZXg6MSAwIGF1dG87ZmxleDoxIDAgYXV0bztkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDstd2Via2l0LWJveC1kaXJlY3Rpb246bm9ybWFsOy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1kaXJlY3Rpb246Y29sdW1uOy13ZWJraXQtYm94LWFsaWduOnN0cmV0Y2g7LW1zLWZsZXgtYWxpZ246c3RyZXRjaDthbGlnbi1pdGVtczpzdHJldGNofS5SZWFjdFRhYmxlIC5ydC10cnstd2Via2l0LWJveC1mbGV4OjE7LW1zLWZsZXg6MSAwIGF1dG87ZmxleDoxIDAgYXV0bztkaXNwbGF5Oi13ZWJraXQtaW5saW5lLWJveDtkaXNwbGF5Oi1tcy1pbmxpbmUtZmxleGJveDtkaXNwbGF5OmlubGluZS1mbGV4fS5SZWFjdFRhYmxlIC5ydC10ZCwuUmVhY3RUYWJsZSAucnQtdGh7LXdlYmtpdC1ib3gtZmxleDoxOy1tcy1mbGV4OjEgMCAwcHg7ZmxleDoxIDAgMDtvdmVyZmxvdzpoaWRkZW59LlJlYWN0VGFibGUgLnJ0LXRkLi1oaWRkZW4sLlJlYWN0VGFibGUgLnJ0LXRoLi1oaWRkZW57d2lkdGg6MCFpbXBvcnRhbnQ7bWluLXdpZHRoOjAhaW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7Ym9yZGVyOjAhaW1wb3J0YW50O29wYWNpdHk6MCFpbXBvcnRhbnR9LlJlYWN0VGFibGUgLnJ0LXJlc2l6ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MzZweDt0b3A6MDtib3R0b206MDtyaWdodDotMThweDtjdXJzb3I6Y29sLXJlc2l6ZTt6LWluZGV4OjEwfS5SZWFjdFRhYmxlIC5ydC10Zm9vdHtkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDstd2Via2l0LWJveC1kaXJlY3Rpb246bm9ybWFsOy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5SZWFjdFRhYmxlIC4tbG9hZGluZ3tkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtyaWdodDowO3RvcDowO2JvdHRvbTowO2JhY2tncm91bmQ6aHNsYSgwLDAlLDEwMCUsLjgpOy13ZWJraXQtdHJhbnNpdGlvbjphbGwgLjNzIGVhc2U7dHJhbnNpdGlvbjphbGwgLjNzIGVhc2U7ei1pbmRleDotMTtvcGFjaXR5OjA7cG9pbnRlci1ldmVudHM6bm9uZX0uUmVhY3RUYWJsZSAuLWxvYWRpbmc+ZGl2e3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6YmxvY2s7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MTAwJTt0b3A6NTAlO2xlZnQ6MDtmb250LXNpemU6MTVweDtjb2xvcjpyZ2JhKDAsMCwwLC42KTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC01MiUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MiUpOy13ZWJraXQtdHJhbnNpdGlvbjphbGwgLjNzIGN1YmljLWJlemllciguMjUsLjQ2LC40NSwuOTQpO3RyYW5zaXRpb246YWxsIC4zcyBjdWJpYy1iZXppZXIoLjI1LC40NiwuNDUsLjk0KX0uUmVhY3RUYWJsZSAuLWxvYWRpbmcuLWFjdGl2ZXtvcGFjaXR5OjE7ei1pbmRleDoyO3BvaW50ZXItZXZlbnRzOmFsbH0uUmVhY3RUYWJsZSAuLWxvYWRpbmcuLWFjdGl2ZT5kaXZ7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSg1MCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDUwJSl9LlJlYWN0VGFibGUgLnJ0LXJlc2l6aW5nIC5ydC10ZCwuUmVhY3RUYWJsZSAucnQtcmVzaXppbmcgLnJ0LXRoey13ZWJraXQtdHJhbnNpdGlvbjpub25lIWltcG9ydGFudDt0cmFuc2l0aW9uOm5vbmUhaW1wb3J0YW50O2N1cnNvcjpjb2wtcmVzaXplOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0iLCIiXSl9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cubG9jYXRpb247aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJmaXhVcmxzIHJlcXVpcmVzIHdpbmRvdy5sb2NhdGlvbiIpO2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIGU7dmFyIHI9dC5wcm90b2NvbCsiLy8iK3QuaG9zdCxuPXIrdC5wYXRobmFtZS5yZXBsYWNlKC9cL1teXC9dKiQvLCIvIik7cmV0dXJuIGUucmVwbGFjZSgvdXJsXHMqXCgoKD86W14pKF18XCgoPzpbXikoXSt8XChbXikoXSpcKSkqXCkpKilcKS9naSwoZnVuY3Rpb24oZSx0KXt2YXIgYSxvPXQudHJpbSgpLnJlcGxhY2UoL14iKC4qKSIkLywoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdH0pKS5yZXBsYWNlKC9eJyguKiknJC8sKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR9KSk7cmV0dXJuL14oI3xkYXRhOnxodHRwOlwvXC98aHR0cHM6XC9cL3xmaWxlOlwvXC9cL3xccyokKS9pLnRlc3Qobyk/ZTooYT0wPT09by5pbmRleE9mKCIvLyIpP286MD09PW8uaW5kZXhPZigiLyIpP3IrbzpuK28ucmVwbGFjZSgvXlwuXC8vLCIiKSwidXJsKCIrSlNPTi5zdHJpbmdpZnkoYSkrIikiKX0pKX19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDE5KTsic3RyaW5nIj09dHlwZW9mIG4mJihuPVtbZS5pLG4sIiJdXSk7dmFyIGE9e2htcjohMCx0cmFuc2Zvcm06dm9pZCAwLGluc2VydEludG86dm9pZCAwfTtyKDcpKG4sYSk7bi5sb2NhbHMmJihlLmV4cG9ydHM9bi5sb2NhbHMpfSxmdW5jdGlvbihlLHQscil7KGUuZXhwb3J0cz1yKDYpKCExKSkucHVzaChbZS5pLCcuUmVhY3RUYWJsZXtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LnJ0LWlubGluZXtkaXNwbGF5Oi13ZWJraXQtaW5saW5lLWJveDtkaXNwbGF5Oi1tcy1pbmxpbmUtZmxleGJveDtkaXNwbGF5OmlubGluZS1mbGV4fS5ydC10aHtmb250LXdlaWdodDo2MDB9LnJ0LXRkLC5ydC10aHtwYWRkaW5nOjdweCA4cHg7b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkO21heC13aWR0aDoxMDAlO3dvcmQtd3JhcDpicmVhay13b3JkfS5ydC1jb21wYWN0IC5ydC10ZCwucnQtY29tcGFjdCAucnQtdGh7cGFkZGluZzo0cHggNnB4fS5ydC1ub3dyYXAgLnJ0LXRkLC5ydC1ub3dyYXAgLnJ0LXRoe3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5ydC10aC1jb250ZW50e292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5ydC10ZC1zZWxlY3R7LXdlYmtpdC1ib3gtYWxpZ246YmFzZWxpbmU7LW1zLWZsZXgtYWxpZ246YmFzZWxpbmU7YWxpZ24taXRlbXM6YmFzZWxpbmU7LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn0ucnQtc2VsZWN0LC5ydC10ZC1zZWxlY3R7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleH0ucnQtc2VsZWN0ey13ZWJraXQtYm94LWFsaWduOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfWlucHV0W3R5cGU9Y2hlY2tib3hdLnJ0LXNlbGVjdC1pbnB1dCxpbnB1dFt0eXBlPXJhZGlvXS5ydC1zZWxlY3QtaW5wdXR7ZGlzcGxheTpibG9jazttYXJnaW46MH0ucnQtYWxpZ24tbGVmdHt0ZXh0LWFsaWduOmxlZnR9LnJ0LWFsaWduLXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LnJ0LWFsaWduLWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0ucnQtdGFibGV7Ym9yZGVyLXdpZHRoOjFweDtib3JkZXItY29sb3I6I2U2ZTZlNn0ucnQtYm9yZGVyZWQgLnJ0LXRhYmxlLC5ydC1vdXRsaW5lZCAucnQtdGFibGV7Ym9yZGVyLXN0eWxlOnNvbGlkfS5ydC10aHtib3JkZXItYm90dG9tOjJweCBzb2xpZCAjZTZlNmU2O2JvcmRlci1sZWZ0LXdpZHRoOjFweDtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDAsMCwwLC4wNSl9LnJ0LWJvcmRlcmVkIC5ydC10aCwucnQtb3V0bGluZWQgLnJ0LXRoe2JvcmRlci1ib3R0b20td2lkdGg6MXB4fS5ydC10ZHtib3JkZXItdG9wOjFweCBzb2xpZCAjZjJmMmYyO2JvcmRlci1sZWZ0LXdpZHRoOjFweDtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDAsMCwwLC4wNSl9LnJ0LWJvcmRlcmxlc3MgLnJ0LXRkLC5ydC10ci1ncm91cDpmaXJzdC1jaGlsZD4ucnQtdHI6Zmlyc3QtY2hpbGQgLnJ0LXRke2JvcmRlci10b3A6bm9uZX0ucnQtYm9yZGVyZWQgLnJ0LXRkLC5ydC1ib3JkZXJlZCAucnQtdGh7Ym9yZGVyLWxlZnQtc3R5bGU6c29saWR9LnJ0LWJvcmRlcmVkIC5ydC10ZDpmaXJzdC1jaGlsZCwucnQtYm9yZGVyZWQgLnJ0LXRoOmZpcnN0LWNoaWxke2JvcmRlci1sZWZ0Om5vbmV9LnJ0LXRoLWdyb3VwLC5ydC10aC1ncm91cC1ub25le2JvcmRlci1ib3R0b20tc3R5bGU6bm9uZX0ucnQtdGgtZ3JvdXA6YWZ0ZXJ7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTttYXJnaW46YXV0bztsZWZ0OjhweDtyaWdodDo4cHg7Ym90dG9tOjA7d2lkdGg6MTAwJTtoZWlnaHQ6MXB4O2JhY2tncm91bmQtY29sb3I6I2U2ZTZlNn0ucnQtYm9yZGVyZWQgLnJ0LXRoLWdyb3VwOmFmdGVyLC5ydC1vdXRsaW5lZCAucnQtdGgtZ3JvdXA6YWZ0ZXJ7bGVmdDowO3JpZ2h0OjB9LnJ0LWJvcmRlcmVkIC5ydC10aC1ncm91cC1ub25le2JvcmRlci1ib3R0b20tc3R5bGU6c29saWR9LnJ0LXRyLXN0cmlwZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wMyl9LnJ0LXRyLWhpZ2hsaWdodDpob3ZlciwucnQtdHItc3RyaXBlZC5ydC10ci1oaWdobGlnaHQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNSl9LnJ0LXRyLi1wYWRSb3d7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5SZWFjdFRhYmxlIC5ydC10Ym9keSwuUmVhY3RUYWJsZSAucnQtdGZvb3QsLlJlYWN0VGFibGUgLnJ0LXRoZWFkLi1oZWFkZXJ7LW1zLWZsZXgtbmVnYXRpdmU6MDtmbGV4LXNocmluazowfUBzdXBwb3J0cyAoKHBvc2l0aW9uOi13ZWJraXQtc3RpY2t5KSBvciAocG9zaXRpb246c3RpY2t5KSl7LlJlYWN0VGFibGUgLnJ0LXRhYmxle2JhY2tncm91bmQ6aW5oZXJpdH0uUmVhY3RUYWJsZSAucnQtdGJvZHl7b3ZlcmZsb3c6dmlzaWJsZX0uUmVhY3RUYWJsZSAucnQtdGhlYWQuLWhlYWRlcnt0b3A6MH0uUmVhY3RUYWJsZSAucnQtdGZvb3QsLlJlYWN0VGFibGUgLnJ0LXRoZWFkLi1oZWFkZXJ7cG9zaXRpb246LXdlYmtpdC1zdGlja3k7cG9zaXRpb246c3RpY2t5O2JhY2tncm91bmQ6aW5oZXJpdDt6LWluZGV4OjJ9LlJlYWN0VGFibGUgLnJ0LXRmb290e2JvdHRvbTowfX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKSxzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDpub25lKXsuUmVhY3RUYWJsZSAucnQtdGJvZHl7b3ZlcmZsb3c6YXV0bzstbXMtb3ZlcmZsb3ctc3R5bGU6LW1zLWF1dG9oaWRpbmctc2Nyb2xsYmFyfX0ucnQtdGQtZmlsdGVye2JvcmRlci10b3A6MDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjJmMmYyfS5ydC1ib3JkZXJsZXNzIC5ydC10ZC1maWx0ZXJ7Ym9yZGVyLWJvdHRvbTowfS5ydC1maWx0ZXJ7cGFkZGluZzo1cHggN3B4O2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwuMSk7Ym9yZGVyLXJhZGl1czozcHg7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7b3V0bGluZS13aWR0aDowO291dGxpbmUtc3R5bGU6c29saWR9LnJ0LWZpbHRlcjpmb2N1c3tib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjI1KX0ucnQtc29ydC1oZWFkZXJ7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleH0ucnQtYWxpZ24tY2VudGVyIC5ydC1zb3J0LWhlYWRlcnstd2Via2l0LWJveC1wYWNrOmNlbnRlcjstbXMtZmxleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5ydC1hbGlnbi1yaWdodCAucnQtc29ydC1oZWFkZXJ7LXdlYmtpdC1ib3gtcGFjazplbmQ7LW1zLWZsZXgtcGFjazplbmQ7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5ydC10aHtvdXRsaW5lLXdpZHRoOjA7b3V0bGluZS1zdHlsZTpzb2xpZH0ucnQtdGhbYXJpYS1zb3J0XSAucnQtc29ydC1sZWZ0OmFmdGVye3BhZGRpbmctcmlnaHQ6NXB4O2xpbmUtaGVpZ2h0OjB9LnJ0LXRoW2FyaWEtc29ydF0gLnJ0LXNvcnQtcmlnaHQ6YWZ0ZXJ7cGFkZGluZy1sZWZ0OjVweDtsaW5lLWhlaWdodDowfS5ydC10aFthcmlhLXNvcnQ9YXNjZW5kaW5nXSAucnQtc29ydC1sZWZ0OmFmdGVyLC5ydC10aFthcmlhLXNvcnQ9YXNjZW5kaW5nXSAucnQtc29ydC1yaWdodDphZnRlcntjb250ZW50OiJcXDIxOTEifS5ydC10aFthcmlhLXNvcnQ9ZGVzY2VuZGluZ10gLnJ0LXNvcnQtbGVmdDphZnRlciwucnQtdGhbYXJpYS1zb3J0PWRlc2NlbmRpbmddIC5ydC1zb3J0LXJpZ2h0OmFmdGVye2NvbnRlbnQ6IlxcMjE5MyJ9LnJ0LXRoW2FyaWEtc29ydD1ub25lXSAucnQtc29ydDphZnRlcntjb250ZW50OiJcXDIxOTUiO29wYWNpdHk6LjR9LnJ0LXRoW2RhdGEtc29ydC1oaW50PWFzY2VuZGluZ10gLnJ0LXNvcnQtbGVmdDphZnRlciwucnQtdGhbZGF0YS1zb3J0LWhpbnQ9YXNjZW5kaW5nXSAucnQtc29ydC1yaWdodDphZnRlcntjb250ZW50OiJcXDIxOTEiO29wYWNpdHk6LjR9LnJ0LXRoW2RhdGEtc29ydC1oaW50PWRlc2NlbmRpbmddIC5ydC1zb3J0LWxlZnQ6YWZ0ZXIsLnJ0LXRoW2RhdGEtc29ydC1oaW50PWRlc2NlbmRpbmddIC5ydC1zb3J0LXJpZ2h0OmFmdGVye2NvbnRlbnQ6IlxcMjE5MyI7b3BhY2l0eTouNH0ucnQtZXhwYW5kZXItYnV0dG9ue21hcmdpbjowIDJweDtwYWRkaW5nOjA7YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyfS5ydC1leHBhbmRlcntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOjAgOHB4O2NvbG9yOnRyYW5zcGFyZW50O291dGxpbmUtd2lkdGg6MDtvdXRsaW5lLXN0eWxlOnNvbGlkfS5ydC1leHBhbmRlcjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjA7aGVpZ2h0OjA7dG9wOjUwJTtsZWZ0OjUwJTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKSByb3RhdGUoLTkwZGVnKTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSkgcm90YXRlKC05MGRlZyk7Ym9yZGVyLWxlZnQ6NS4wNHB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodDo1LjA0cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcDo3cHggc29saWQgcmdiYSgwLDAsMCwuOCk7LXdlYmtpdC10cmFuc2l0aW9uOmFsbCAuM3MgY3ViaWMtYmV6aWVyKC4xNzUsLjg4NSwuMzIsMS4yNzUpO3RyYW5zaXRpb246YWxsIC4zcyBjdWJpYy1iZXppZXIoLjE3NSwuODg1LC4zMiwxLjI3NSk7Y3Vyc29yOnBvaW50ZXJ9LnJ0LWV4cGFuZGVyLi1vcGVuOmFmdGVyey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpIHJvdGF0ZSgwKTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSkgcm90YXRlKDApfS5ydC1wYWdpbmF0aW9ue2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1ib3gtcGFjazpqdXN0aWZ5Oy1tcy1mbGV4LXBhY2s6anVzdGlmeTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjstd2Via2l0LWJveC1hbGlnbjpiYXNlbGluZTstbXMtZmxleC1hbGlnbjpiYXNlbGluZTthbGlnbi1pdGVtczpiYXNlbGluZTstbXMtZmxleC13cmFwOndyYXA7ZmxleC13cmFwOndyYXA7cGFkZGluZzo2cHggNHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNmMmYyZjJ9LnJ0LWJvcmRlcmVkIC5ydC1wYWdpbmF0aW9uLC5ydC1vdXRsaW5lZCAucnQtcGFnaW5hdGlvbntib3JkZXItdG9wOm5vbmV9LnJ0LXBhZ2luYXRpb24taW5mbyA6bm90KDpsYXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6MTZweH0ucnQtcGFnZS1pbmZve2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjo2cHggOHB4O29wYWNpdHk6Ljl9LnJ0LXBhZ2Utc2l6ZXtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MCA4cHh9LnJ0LXBhZ2Utc2l6ZS1zZWxlY3R7bWFyZ2luOjAgMnB4fS5ydC1wYWdlLWJ1dHRvbiwucnQtcGFnZS1qdW1wLC5ydC1wYWdlLXNpemUtc2VsZWN0e2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtsaW5lLWhlaWdodDppbmhlcml0fS5ydC1wYWdlLWp1bXAsLnJ0LXBhZ2Utc2l6ZS1zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjojZmZmO3BhZGRpbmc6M3B4O2JvcmRlci1yYWRpdXM6M3B4O2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwuMDUpfUBzdXBwb3J0cyAoLW1vei1hcHBlYXJhbmNlOm5vbmUpey5ydC1wYWdlLXNpemUtc2VsZWN0ey1tb3otYXBwZWFyYW5jZTpub25lO3BhZGRpbmctcmlnaHQ6MTJweDtiYWNrZ3JvdW5kLWltYWdlOnVybChcJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVTLUFTQ0lJLDxzdmcgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiUyMzMzMyIgZD0iTTI0IDEuNWwtMTIgMjEtMTItMjFoMjR6Ii8+PC9zdmc+XCcpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOnJpZ2h0IDZweCBjZW50ZXI7YmFja2dyb3VuZC1zaXplOjZweH19LnJ0LXBhZ2UtYnV0dG9ue3BhZGRpbmc6NnB4IDEycHg7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjNweDtvdXRsaW5lLXdpZHRoOjA7b3V0bGluZS1zdHlsZTpzb2xpZDtjdXJzb3I6cG9pbnRlcn0ucnQtcGFnZS1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7cGFkZGluZzowO2JvcmRlci1zdHlsZTpub25lfS5ydC1wYWdlLWJ1dHRvbjpkaXNhYmxlZHtvcGFjaXR5Oi42O2N1cnNvcjpkZWZhdWx0fS5ydC1wYWdlLWJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjA0KX0ucnQtcGFnZS1idXR0b246YWN0aXZle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDgpfS5ydC1rZXlib2FyZC1hY3RpdmUgLnJ0LXBhZ2UtYnV0dG9uOmZvY3Vze2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDQpfS5ydC1wYWdlLWJ1dHRvbjpkaXNhYmxlZDpmb2N1cywucnQtcGFnZS1idXR0b246ZGlzYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ucnQtcGFnZS1idXR0b24tY3VycmVudHtmb250LXdlaWdodDo3MDB9LnJ0LXBhZ2UtZWxsaXBzaXN7bWFyZ2luOjAgNHB4O3BvaW50ZXItZXZlbnRzOm5vbmV9LnJ0LXBhZ2UtbnVtYmVyc3tkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MCA4cHg7d2hpdGUtc3BhY2U6bm93cmFwfS5ydC1wYWdlLWp1bXB7d2lkdGg6NzBweDt0ZXh0LWFsaWduOmNlbnRlcn0ucnQtdGJvZHktbm9EYXRhe3Bvc2l0aW9uOnJlbGF0aXZlfS5ydC10Ym9keS1ub0RhdGEgLnJ0LXRke2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0ucnQtbm9EYXRhe2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo1MCU7dG9wOjUwJTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7bGluZS1oZWlnaHQ6MDt6LWluZGV4OjF9LnJ0LXNlYXJjaHtkaXNwbGF5OmJsb2NrOy1tcy1mbGV4LWl0ZW0tYWxpZ246ZW5kO2FsaWduLXNlbGY6ZmxleC1lbmQ7bWFyZ2luLWJvdHRvbTo4cHg7cGFkZGluZzo1cHggN3B4O2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwuMSk7Ym9yZGVyLXJhZGl1czozcHg7b3V0bGluZS13aWR0aDowO291dGxpbmUtc3R5bGU6c29saWQ7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdH0ucnQtc2VhcmNoOmFjdGl2ZSwucnQtc2VhcmNoOmZvY3Vze2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwuMjUpfScsIiJdKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyLnIodCk7dmFyIG49cigzKSxhPXIoMSksbz1yLm4oYSksaT1yKDIpLGw9ci5uKGkpLHM9cigwKSx1PXIubihzKTtmdW5jdGlvbiBjKGUsdCl7dmFyIHI9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYobj1uLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxyLnB1c2guYXBwbHkocixuKX1yZXR1cm4gcn1mdW5jdGlvbiBmKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP2MoT2JqZWN0KHIpLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtkKGUsdCxyW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHIpKTpjKE9iamVjdChyKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIGQoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfXZhciBwPWYoZih7fSxsLmEucHJvcFR5cGVzKSx7fSx7ZGF0YTp1LmEuYW55LGxvYWRpbmc6dS5hLmJvb2wsc2hvd1BhZ2luYXRpb246dS5hLmJvb2wsc2hvd1BhZ2luYXRpb25Ub3A6dS5hLmJvb2wsc2hvd1BhZ2luYXRpb25Cb3R0b206dS5hLmJvb2wsc2hvd1BhZ2VTaXplT3B0aW9uczp1LmEuYm9vbCxwYWdlU2l6ZU9wdGlvbnM6dS5hLmFycmF5LGRlZmF1bHRQYWdlU2l6ZTp1LmEubnVtYmVyLHNob3dQYWdlSnVtcDp1LmEuYm9vbCxjb2xsYXBzZU9uU29ydGluZ0NoYW5nZTp1LmEuYm9vbCxjb2xsYXBzZU9uUGFnZUNoYW5nZTp1LmEuYm9vbCxjb2xsYXBzZU9uRGF0YUNoYW5nZTp1LmEuYm9vbCxmcmVlemVXaGVuRXhwYW5kZWQ6dS5hLmJvb2wsc29ydGFibGU6dS5hLmJvb2wscmVzaXphYmxlOnUuYS5ib29sLGZpbHRlcmFibGU6dS5hLmJvb2wsZGVmYXVsdFNvcnREZXNjOnUuYS5ib29sLGRlZmF1bHRTb3J0ZWQ6dS5hLmFycmF5LGRlZmF1bHRGaWx0ZXJlZDp1LmEuYXJyYXksZGVmYXVsdFJlc2l6ZWQ6dS5hLmFycmF5LGRlZmF1bHRFeHBhbmRlZDp1LmEub2JqZWN0LGRlZmF1bHRGaWx0ZXJNZXRob2Q6dS5hLmZ1bmMsZGVmYXVsdFNvcnRNZXRob2Q6dS5hLmZ1bmMsb25QYWdlQ2hhbmdlOnUuYS5mdW5jLG9uUGFnZVNpemVDaGFuZ2U6dS5hLmZ1bmMsb25Tb3J0ZWRDaGFuZ2U6dS5hLmZ1bmMsb25GaWx0ZXJlZENoYW5nZTp1LmEuZnVuYyxvblJlc2l6ZWRDaGFuZ2U6dS5hLmZ1bmMsb25FeHBhbmRlZENoYW5nZTp1LmEuZnVuYyxwaXZvdEJ5OnUuYS5hcnJheSxwaXZvdFZhbEtleTp1LmEuc3RyaW5nLHBpdm90SURLZXk6dS5hLnN0cmluZyxzdWJSb3dzS2V5OnUuYS5zdHJpbmcsYWdncmVnYXRlZEtleTp1LmEuc3RyaW5nLG5lc3RpbmdMZXZlbEtleTp1LmEuc3RyaW5nLG9yaWdpbmFsS2V5OnUuYS5zdHJpbmcsaW5kZXhLZXk6dS5hLnN0cmluZyxncm91cGVkQnlQaXZvdEtleTp1LmEuc3RyaW5nLG9uRmV0Y2hEYXRhOnUuYS5mdW5jLGNsYXNzTmFtZTp1LmEuc3RyaW5nLHN0eWxlOnUuYS5vYmplY3QsZ2V0UHJvcHM6dS5hLmZ1bmMsZ2V0VGFibGVQcm9wczp1LmEuZnVuYyxnZXRUaGVhZEdyb3VwUHJvcHM6dS5hLmZ1bmMsZ2V0VGhlYWRHcm91cFRyUHJvcHM6dS5hLmZ1bmMsZ2V0VGhlYWRHcm91cFRoUHJvcHM6dS5hLmZ1bmMsZ2V0VGhlYWRQcm9wczp1LmEuZnVuYyxnZXRUaGVhZFRyUHJvcHM6dS5hLmZ1bmMsZ2V0VGhlYWRUaFByb3BzOnUuYS5mdW5jLGdldFRoZWFkRmlsdGVyUHJvcHM6dS5hLmZ1bmMsZ2V0VGhlYWRGaWx0ZXJUclByb3BzOnUuYS5mdW5jLGdldFRoZWFkRmlsdGVyVGhQcm9wczp1LmEuZnVuYyxnZXRUYm9keVByb3BzOnUuYS5mdW5jLGdldFRyR3JvdXBQcm9wczp1LmEuZnVuYyxnZXRUclByb3BzOnUuYS5mdW5jLGdldFRkUHJvcHM6dS5hLmZ1bmMsZ2V0VGZvb3RQcm9wczp1LmEuZnVuYyxnZXRUZm9vdFRyUHJvcHM6dS5hLmZ1bmMsZ2V0VGZvb3RUZFByb3BzOnUuYS5mdW5jLGdldFBhZ2luYXRpb25Qcm9wczp1LmEuZnVuYyxnZXRMb2FkaW5nUHJvcHM6dS5hLmZ1bmMsZ2V0Tm9EYXRhUHJvcHM6dS5hLmZ1bmMsZ2V0UmVzaXplclByb3BzOnUuYS5mdW5jLGNvbHVtbnM6dS5hLmFycmF5T2YodS5hLnNoYXBlKHtDZWxsOnUuYS5vbmVPZlR5cGUoW3UuYS5lbGVtZW50LHUuYS5zdHJpbmcsdS5hLmZ1bmNdKSxIZWFkZXI6dS5hLm9uZU9mVHlwZShbdS5hLmVsZW1lbnQsdS5hLnN0cmluZyx1LmEuZnVuY10pLEZvb3Rlcjp1LmEub25lT2ZUeXBlKFt1LmEuZWxlbWVudCx1LmEuc3RyaW5nLHUuYS5mdW5jXSksQWdncmVnYXRlZDp1LmEub25lT2ZUeXBlKFt1LmEuZWxlbWVudCx1LmEuc3RyaW5nLHUuYS5mdW5jXSksUGl2b3Q6dS5hLm9uZU9mVHlwZShbdS5hLmVsZW1lbnQsdS5hLnN0cmluZyx1LmEuZnVuY10pLFBpdm90VmFsdWU6dS5hLm9uZU9mVHlwZShbdS5hLmVsZW1lbnQsdS5hLnN0cmluZyx1LmEuZnVuY10pLEV4cGFuZGVyOnUuYS5vbmVPZlR5cGUoW3UuYS5lbGVtZW50LHUuYS5zdHJpbmcsdS5hLmZ1bmNdKSxGaWx0ZXI6dS5hLm9uZU9mVHlwZShbdS5hLmVsZW1lbnQsdS5hLmZ1bmNdKSxzb3J0YWJsZTp1LmEuYm9vbCxyZXNpemFibGU6dS5hLmJvb2wsZmlsdGVyYWJsZTp1LmEuYm9vbCxzaG93OnUuYS5ib29sLG1pbldpZHRoOnUuYS5udW1iZXIsbWluUmVzaXplV2lkdGg6dS5hLm51bWJlcixjbGFzc05hbWU6dS5hLnN0cmluZyxzdHlsZTp1LmEub2JqZWN0LGdldFByb3BzOnUuYS5mdW5jLGFnZ3JlZ2F0ZTp1LmEuZnVuYyxoZWFkZXJDbGFzc05hbWU6dS5hLnN0cmluZyxoZWFkZXJTdHlsZTp1LmEub2JqZWN0LGdldEhlYWRlclByb3BzOnUuYS5mdW5jLGZvb3RlckNsYXNzTmFtZTp1LmEuc3RyaW5nLGZvb3RlclN0eWxlOnUuYS5vYmplY3QsZ2V0Rm9vdGVyUHJvcHM6dS5hLmZ1bmMsZmlsdGVyTWV0aG9kOnUuYS5mdW5jLGZpbHRlckFsbDp1LmEuYm9vbCxzb3J0TWV0aG9kOnUuYS5mdW5jfSkpLGV4cGFuZGVyRGVmYXVsdHM6dS5hLnNoYXBlKHtzb3J0YWJsZTp1LmEuYm9vbCxyZXNpemFibGU6dS5hLmJvb2wsZmlsdGVyYWJsZTp1LmEuYm9vbCx3aWR0aDp1LmEubnVtYmVyfSkscGl2b3REZWZhdWx0czp1LmEub2JqZWN0LHByZXZpb3VzVGV4dDp1LmEubm9kZSxuZXh0VGV4dDp1LmEubm9kZSxsb2FkaW5nVGV4dDp1LmEubm9kZSxub0RhdGFUZXh0OnUuYS5ub2RlLHBhZ2VUZXh0OnUuYS5ub2RlLG9mVGV4dDp1LmEubm9kZSxyb3dzVGV4dDp1LmEubm9kZSxwYWdlSnVtcFRleHQ6dS5hLm5vZGUscm93c1NlbGVjdG9yVGV4dDp1LmEubm9kZSxUYWJsZUNvbXBvbmVudDp1LmEub25lT2ZUeXBlKFt1LmEuZnVuYyx1LmEuZWxlbWVudF0pLFRoZWFkQ29tcG9uZW50OnUuYS5vbmVPZlR5cGUoW3UuYS5mdW5jLHUuYS5lbGVtZW50XSksVGJvZHlDb21wb25lbnQ6dS5hLm9uZU9mVHlwZShbdS5hLmZ1bmMsdS5hLmVsZW1lbnRdKSxUckdyb3VwQ29tcG9uZW50OnUuYS5vbmVPZlR5cGUoW3UuYS5mdW5jLHUuYS5lbGVtZW50XSksVHJDb21wb25lbnQ6dS5hLm9uZU9mVHlwZShbdS5hLmZ1bmMsdS5hLmVsZW1lbnRdKSxUaENvbXBvbmVudDp1LmEub25lT2ZUeXBlKFt1LmEuZnVuYyx1LmEuZWxlbWVudF0pLFRkQ29tcG9uZW50OnUuYS5vbmVPZlR5cGUoW3UuYS5mdW5jLHUuYS5lbGVtZW50XSksVGZvb3RDb21wb25lbnQ6dS5hLm9uZU9mVHlwZShbdS5hLmZ1bmMsdS5hLmVsZW1lbnRdKSxGaWx0ZXJDb21wb25lbnQ6dS5hLm9uZU9mVHlwZShbdS5hLmZ1bmMsdS5hLmVsZW1lbnRdKSxFeHBhbmRlckNvbXBvbmVudDp1LmEub25lT2ZUeXBlKFt1LmEuZnVuYyx1LmEuZWxlbWVudF0pLFBpdm90VmFsdWVDb21wb25lbnQ6dS5hLm9uZU9mVHlwZShbdS5hLmZ1bmMsdS5hLmVsZW1lbnRdKSxBZ2dyZWdhdGVkQ29tcG9uZW50OnUuYS5vbmVPZlR5cGUoW3UuYS5mdW5jLHUuYS5lbGVtZW50XSksUGl2b3RDb21wb25lbnQ6dS5hLm9uZU9mVHlwZShbdS5hLmZ1bmMsdS5hLmVsZW1lbnRdKSxQYWdpbmF0aW9uQ29tcG9uZW50OnUuYS5vbmVPZlR5cGUoW3UuYS5mdW5jLHUuYS5lbGVtZW50XSksUHJldmlvdXNDb21wb25lbnQ6dS5hLm9uZU9mVHlwZShbdS5hLmZ1bmMsdS5hLmVsZW1lbnRdKSxOZXh0Q29tcG9uZW50OnUuYS5vbmVPZlR5cGUoW3UuYS5mdW5jLHUuYS5lbGVtZW50XSksTG9hZGluZ0NvbXBvbmVudDp1LmEub25lT2ZUeXBlKFt1LmEuZnVuYyx1LmEuZWxlbWVudF0pLE5vRGF0YUNvbXBvbmVudDp1LmEub25lT2ZUeXBlKFt1LmEuZnVuYyx1LmEuZWxlbWVudF0pLFJlc2l6ZXJDb21wb25lbnQ6dS5hLm9uZU9mVHlwZShbdS5hLmZ1bmMsdS5hLmVsZW1lbnRdKSxQYWRSb3dDb21wb25lbnQ6dS5hLm9uZU9mVHlwZShbdS5hLmZ1bmMsdS5hLmVsZW1lbnRdKX0pO3ZhciBnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmlzU3BlZWR5PXZvaWQgMD09PWUuc3BlZWR5fHxlLnNwZWVkeSx0aGlzLnRhZ3M9W10sdGhpcy5jdHI9MCx0aGlzLm5vbmNlPWUubm9uY2UsdGhpcy5rZXk9ZS5rZXksdGhpcy5jb250YWluZXI9ZS5jb250YWluZXIsdGhpcy5iZWZvcmU9bnVsbH12YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5pbnNlcnQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5jdHIlKHRoaXMuaXNTcGVlZHk/NjVlMzoxKT09MCl7dmFyIHQscj1mdW5jdGlvbihlKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3JldHVybiB0LnNldEF0dHJpYnV0ZSgiZGF0YS1lbW90aW9uIixlLmtleSksdm9pZCAwIT09ZS5ub25jZSYmdC5zZXRBdHRyaWJ1dGUoIm5vbmNlIixlLm5vbmNlKSx0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSksdH0odGhpcyk7dD0wPT09dGhpcy50YWdzLmxlbmd0aD90aGlzLmJlZm9yZTp0aGlzLnRhZ3NbdGhpcy50YWdzLmxlbmd0aC0xXS5uZXh0U2libGluZyx0aGlzLmNvbnRhaW5lci5pbnNlcnRCZWZvcmUocix0KSx0aGlzLnRhZ3MucHVzaChyKX12YXIgbj10aGlzLnRhZ3NbdGhpcy50YWdzLmxlbmd0aC0xXTtpZih0aGlzLmlzU3BlZWR5KXt2YXIgYT1mdW5jdGlvbihlKXtpZihlLnNoZWV0KXJldHVybiBlLnNoZWV0O2Zvcih2YXIgdD0wO3Q8ZG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3RoO3QrKylpZihkb2N1bWVudC5zdHlsZVNoZWV0c1t0XS5vd25lck5vZGU9PT1lKXJldHVybiBkb2N1bWVudC5zdHlsZVNoZWV0c1t0XX0obik7dHJ5e3ZhciBvPTEwNT09PWUuY2hhckNvZGVBdCgxKSYmNjQ9PT1lLmNoYXJDb2RlQXQoMCk7YS5pbnNlcnRSdWxlKGUsbz8wOmEuY3NzUnVsZXMubGVuZ3RoKX1jYXRjaChlKXswfX1lbHNlIG4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSkpO3RoaXMuY3RyKyt9LHQuZmx1c2g9ZnVuY3Rpb24oKXt0aGlzLnRhZ3MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKX0pKSx0aGlzLnRhZ3M9W10sdGhpcy5jdHI9MH0sZX0oKTt2YXIgaD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsdCxuKXt2YXIgYT10LnRyaW0oKS5zcGxpdChnKTt0PWE7dmFyIG89YS5sZW5ndGgsaT1lLmxlbmd0aDtzd2l0Y2goaSl7Y2FzZSAwOmNhc2UgMTp2YXIgbD0wO2ZvcihlPTA9PT1pPyIiOmVbMF0rIiAiO2w8bzsrK2wpdFtsXT1yKGUsdFtsXSxuKS50cmltKCk7YnJlYWs7ZGVmYXVsdDp2YXIgcz1sPTA7Zm9yKHQ9W107bDxvOysrbClmb3IodmFyIHU9MDt1PGk7Kyt1KXRbcysrXT1yKGVbdV0rIiAiLGFbbF0sbikudHJpbSgpfXJldHVybiB0fWZ1bmN0aW9uIHIoZSx0LHIpe3ZhciBuPXQuY2hhckNvZGVBdCgwKTtzd2l0Y2goMzM+biYmKG49KHQ9dC50cmltKCkpLmNoYXJDb2RlQXQoMCkpLG4pe2Nhc2UgMzg6cmV0dXJuIHQucmVwbGFjZShoLCIkMSIrZS50cmltKCkpO2Nhc2UgNTg6cmV0dXJuIGUudHJpbSgpK3QucmVwbGFjZShoLCIkMSIrZS50cmltKCkpO2RlZmF1bHQ6aWYoMDwxKnImJjA8dC5pbmRleE9mKCJcZiIpKXJldHVybiB0LnJlcGxhY2UoaCwoNTg9PT1lLmNoYXJDb2RlQXQoMCk/IiI6IiQxIikrZS50cmltKCkpfXJldHVybiBlK3R9ZnVuY3Rpb24gbihlLHQscixvKXt2YXIgaT1lKyI7IixsPTIqdCszKnIrNCpvO2lmKDk0ND09PWwpe2U9aS5pbmRleE9mKCI6Iiw5KSsxO3ZhciBzPWkuc3Vic3RyaW5nKGUsaS5sZW5ndGgtMSkudHJpbSgpO3JldHVybiBzPWkuc3Vic3RyaW5nKDAsZSkudHJpbSgpK3MrIjsiLDE9PT1FfHwyPT09RSYmYShzLDEpPyItd2Via2l0LSIrcytzOnN9aWYoMD09PUV8fDI9PT1FJiYhYShpLDEpKXJldHVybiBpO3N3aXRjaChsKXtjYXNlIDEwMTU6cmV0dXJuIDk3PT09aS5jaGFyQ29kZUF0KDEwKT8iLXdlYmtpdC0iK2kraTppO2Nhc2UgOTUxOnJldHVybiAxMTY9PT1pLmNoYXJDb2RlQXQoMyk/Ii13ZWJraXQtIitpK2k6aTtjYXNlIDk2MzpyZXR1cm4gMTEwPT09aS5jaGFyQ29kZUF0KDUpPyItd2Via2l0LSIraStpOmk7Y2FzZSAxMDA5OmlmKDEwMCE9PWkuY2hhckNvZGVBdCg0KSlicmVhaztjYXNlIDk2OTpjYXNlIDk0MjpyZXR1cm4iLXdlYmtpdC0iK2kraTtjYXNlIDk3ODpyZXR1cm4iLXdlYmtpdC0iK2krIi1tb3otIitpK2k7Y2FzZSAxMDE5OmNhc2UgOTgzOnJldHVybiItd2Via2l0LSIraSsiLW1vei0iK2krIi1tcy0iK2kraTtjYXNlIDg4MzppZig0NT09PWkuY2hhckNvZGVBdCg4KSlyZXR1cm4iLXdlYmtpdC0iK2kraTtpZigwPGkuaW5kZXhPZigiaW1hZ2Utc2V0KCIsMTEpKXJldHVybiBpLnJlcGxhY2UoTywiJDEtd2Via2l0LSQyIikraTticmVhaztjYXNlIDkzMjppZig0NT09PWkuY2hhckNvZGVBdCg0KSlzd2l0Y2goaS5jaGFyQ29kZUF0KDUpKXtjYXNlIDEwMzpyZXR1cm4iLXdlYmtpdC1ib3gtIitpLnJlcGxhY2UoIi1ncm93IiwiIikrIi13ZWJraXQtIitpKyItbXMtIitpLnJlcGxhY2UoImdyb3ciLCJwb3NpdGl2ZSIpK2k7Y2FzZSAxMTU6cmV0dXJuIi13ZWJraXQtIitpKyItbXMtIitpLnJlcGxhY2UoInNocmluayIsIm5lZ2F0aXZlIikraTtjYXNlIDk4OnJldHVybiItd2Via2l0LSIraSsiLW1zLSIraS5yZXBsYWNlKCJiYXNpcyIsInByZWZlcnJlZC1zaXplIikraX1yZXR1cm4iLXdlYmtpdC0iK2krIi1tcy0iK2kraTtjYXNlIDk2NDpyZXR1cm4iLXdlYmtpdC0iK2krIi1tcy1mbGV4LSIraStpO2Nhc2UgMTAyMzppZig5OSE9PWkuY2hhckNvZGVBdCg4KSlicmVhaztyZXR1cm4iLXdlYmtpdC1ib3gtcGFjayIrKHM9aS5zdWJzdHJpbmcoaS5pbmRleE9mKCI6IiwxNSkpLnJlcGxhY2UoImZsZXgtIiwiIikucmVwbGFjZSgic3BhY2UtYmV0d2VlbiIsImp1c3RpZnkiKSkrIi13ZWJraXQtIitpKyItbXMtZmxleC1wYWNrIitzK2k7Y2FzZSAxMDA1OnJldHVybiBkLnRlc3QoaSk/aS5yZXBsYWNlKGYsIjotd2Via2l0LSIpK2kucmVwbGFjZShmLCI6LW1vei0iKStpOmk7Y2FzZSAxZTM6c3dpdGNoKHQ9KHM9aS5zdWJzdHJpbmcoMTMpLnRyaW0oKSkuaW5kZXhPZigiLSIpKzEscy5jaGFyQ29kZUF0KDApK3MuY2hhckNvZGVBdCh0KSl7Y2FzZSAyMjY6cz1pLnJlcGxhY2UodiwidGIiKTticmVhaztjYXNlIDIzMjpzPWkucmVwbGFjZSh2LCJ0Yi1ybCIpO2JyZWFrO2Nhc2UgMjIwOnM9aS5yZXBsYWNlKHYsImxyIik7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gaX1yZXR1cm4iLXdlYmtpdC0iK2krIi1tcy0iK3MraTtjYXNlIDEwMTc6aWYoLTE9PT1pLmluZGV4T2YoInN0aWNreSIsOSkpYnJlYWs7Y2FzZSA5NzU6c3dpdGNoKHQ9KGk9ZSkubGVuZ3RoLTEwLGw9KHM9KDMzPT09aS5jaGFyQ29kZUF0KHQpP2kuc3Vic3RyaW5nKDAsdCk6aSkuc3Vic3RyaW5nKGUuaW5kZXhPZigiOiIsNykrMSkudHJpbSgpKS5jaGFyQ29kZUF0KDApKygwfHMuY2hhckNvZGVBdCg3KSkpe2Nhc2UgMjAzOmlmKDExMT5zLmNoYXJDb2RlQXQoOCkpYnJlYWs7Y2FzZSAxMTU6aT1pLnJlcGxhY2UocywiLXdlYmtpdC0iK3MpKyI7IitpO2JyZWFrO2Nhc2UgMjA3OmNhc2UgMTAyOmk9aS5yZXBsYWNlKHMsIi13ZWJraXQtIisoMTAyPGw/ImlubGluZS0iOiIiKSsiYm94IikrIjsiK2kucmVwbGFjZShzLCItd2Via2l0LSIrcykrIjsiK2kucmVwbGFjZShzLCItbXMtIitzKyJib3giKSsiOyIraX1yZXR1cm4gaSsiOyI7Y2FzZSA5Mzg6aWYoNDU9PT1pLmNoYXJDb2RlQXQoNSkpc3dpdGNoKGkuY2hhckNvZGVBdCg2KSl7Y2FzZSAxMDU6cmV0dXJuIHM9aS5yZXBsYWNlKCItaXRlbXMiLCIiKSwiLXdlYmtpdC0iK2krIi13ZWJraXQtYm94LSIrcysiLW1zLWZsZXgtIitzK2k7Y2FzZSAxMTU6cmV0dXJuIi13ZWJraXQtIitpKyItbXMtZmxleC1pdGVtLSIraS5yZXBsYWNlKFMsIiIpK2k7ZGVmYXVsdDpyZXR1cm4iLXdlYmtpdC0iK2krIi1tcy1mbGV4LWxpbmUtcGFjayIraS5yZXBsYWNlKCJhbGlnbi1jb250ZW50IiwiIikucmVwbGFjZShTLCIiKStpfWJyZWFrO2Nhc2UgOTczOmNhc2UgOTg5OmlmKDQ1IT09aS5jaGFyQ29kZUF0KDMpfHwxMjI9PT1pLmNoYXJDb2RlQXQoNCkpYnJlYWs7Y2FzZSA5MzE6Y2FzZSA5NTM6aWYoITA9PT1DLnRlc3QoZSkpcmV0dXJuIDExNT09PShzPWUuc3Vic3RyaW5nKGUuaW5kZXhPZigiOiIpKzEpKS5jaGFyQ29kZUF0KDApP24oZS5yZXBsYWNlKCJzdHJldGNoIiwiZmlsbC1hdmFpbGFibGUiKSx0LHIsbykucmVwbGFjZSgiOmZpbGwtYXZhaWxhYmxlIiwiOnN0cmV0Y2giKTppLnJlcGxhY2UocywiLXdlYmtpdC0iK3MpK2kucmVwbGFjZShzLCItbW96LSIrcy5yZXBsYWNlKCJmaWxsLSIsIiIpKStpO2JyZWFrO2Nhc2UgOTYyOmlmKGk9Ii13ZWJraXQtIitpKygxMDI9PT1pLmNoYXJDb2RlQXQoNSk/Ii1tcy0iK2k6IiIpK2ksMjExPT09citvJiYxMDU9PT1pLmNoYXJDb2RlQXQoMTMpJiYwPGkuaW5kZXhPZigidHJhbnNmb3JtIiwxMCkpcmV0dXJuIGkuc3Vic3RyaW5nKDAsaS5pbmRleE9mKCI7IiwyNykrMSkucmVwbGFjZShwLCIkMS13ZWJraXQtJDIiKStpfXJldHVybiBpfWZ1bmN0aW9uIGEoZSx0KXt2YXIgcj1lLmluZGV4T2YoMT09PXQ/IjoiOiJ7Iiksbj1lLnN1YnN0cmluZygwLDMhPT10P3I6MTApO3JldHVybiByPWUuc3Vic3RyaW5nKHIrMSxlLmxlbmd0aC0xKSxEKDIhPT10P246bi5yZXBsYWNlKFAsIiQxIikscix0KX1mdW5jdGlvbiBvKGUsdCl7dmFyIHI9bih0LHQuY2hhckNvZGVBdCgwKSx0LmNoYXJDb2RlQXQoMSksdC5jaGFyQ29kZUF0KDIpKTtyZXR1cm4gciE9PXQrIjsiP3IucmVwbGFjZSh4LCIgb3IgKCQxKSIpLnN1YnN0cmluZyg0KToiKCIrdCsiKSJ9ZnVuY3Rpb24gaShlLHQscixuLGEsbyxpLGwsdSxjKXtmb3IodmFyIGYsZD0wLHA9dDtkPEE7KytkKXN3aXRjaChmPU5bZF0uY2FsbChzLGUscCxyLG4sYSxvLGksbCx1LGMpKXtjYXNlIHZvaWQgMDpjYXNlITE6Y2FzZSEwOmNhc2UgbnVsbDpicmVhaztkZWZhdWx0OnA9Zn1pZihwIT09dClyZXR1cm4gcH1mdW5jdGlvbiBsKGUpe3JldHVybiB2b2lkIDAhPT0oZT1lLnByZWZpeCkmJihEPW51bGwsZT8iZnVuY3Rpb24iIT10eXBlb2YgZT9FPTE6KEU9MixEPWUpOkU9MCksbH1mdW5jdGlvbiBzKGUscil7dmFyIGw9ZTtpZigzMz5sLmNoYXJDb2RlQXQoMCkmJihsPWwudHJpbSgpKSxsPVtsXSwwPEEpe3ZhciBzPWkoLTEscixsLGwsVCxrLDAsMCwwLDApO3ZvaWQgMCE9PXMmJiJzdHJpbmciPT10eXBlb2YgcyYmKHI9cyl9dmFyIGY9ZnVuY3Rpb24gZShyLGwscyxmLGQpe2Zvcih2YXIgcCxnLGgsdix4LFM9MCxQPTAsQz0wLE89MCxOPTAsRD0wLF89aD1wPTAsRj0wLE09MCxJPTAsTD0wLFc9cy5sZW5ndGgsSz1XLTEsQj0iIixIPSIiLEc9IiIsVT0iIjtGPFc7KXtpZihnPXMuY2hhckNvZGVBdChGKSxGPT09SyYmMCE9PVArTytDK1MmJigwIT09UCYmKGc9NDc9PT1QPzEwOjQ3KSxPPUM9Uz0wLFcrKyxLKyspLDA9PT1QK08rQytTKXtpZihGPT09SyYmKDA8TSYmKEI9Qi5yZXBsYWNlKGMsIiIpKSwwPEIudHJpbSgpLmxlbmd0aCkpe3N3aXRjaChnKXtjYXNlIDMyOmNhc2UgOTpjYXNlIDU5OmNhc2UgMTM6Y2FzZSAxMDpicmVhaztkZWZhdWx0OkIrPXMuY2hhckF0KEYpfWc9NTl9c3dpdGNoKGcpe2Nhc2UgMTIzOmZvcihwPShCPUIudHJpbSgpKS5jaGFyQ29kZUF0KDApLGg9MSxMPSsrRjtGPFc7KXtzd2l0Y2goZz1zLmNoYXJDb2RlQXQoRikpe2Nhc2UgMTIzOmgrKzticmVhaztjYXNlIDEyNTpoLS07YnJlYWs7Y2FzZSA0Nzpzd2l0Y2goZz1zLmNoYXJDb2RlQXQoRisxKSl7Y2FzZSA0MjpjYXNlIDQ3OmU6e2ZvcihfPUYrMTtfPEs7KytfKXN3aXRjaChzLmNoYXJDb2RlQXQoXykpe2Nhc2UgNDc6aWYoNDI9PT1nJiY0Mj09PXMuY2hhckNvZGVBdChfLTEpJiZGKzIhPT1fKXtGPV8rMTticmVhayBlfWJyZWFrO2Nhc2UgMTA6aWYoNDc9PT1nKXtGPV8rMTticmVhayBlfX1GPV99fWJyZWFrO2Nhc2UgOTE6ZysrO2Nhc2UgNDA6ZysrO2Nhc2UgMzQ6Y2FzZSAzOTpmb3IoO0YrKzxLJiZzLmNoYXJDb2RlQXQoRikhPT1nOyk7fWlmKDA9PT1oKWJyZWFrO0YrK31zd2l0Y2goaD1zLnN1YnN0cmluZyhMLEYpLDA9PT1wJiYocD0oQj1CLnJlcGxhY2UodSwiIikudHJpbSgpKS5jaGFyQ29kZUF0KDApKSxwKXtjYXNlIDY0OnN3aXRjaCgwPE0mJihCPUIucmVwbGFjZShjLCIiKSksZz1CLmNoYXJDb2RlQXQoMSkpe2Nhc2UgMTAwOmNhc2UgMTA5OmNhc2UgMTE1OmNhc2UgNDU6TT1sO2JyZWFrO2RlZmF1bHQ6TT1SfWlmKEw9KGg9ZShsLE0saCxnLGQrMSkpLmxlbmd0aCwwPEEmJih4PWkoMyxoLE09dChSLEIsSSksbCxULGssTCxnLGQsZiksQj1NLmpvaW4oIiIpLHZvaWQgMCE9PXgmJjA9PT0oTD0oaD14LnRyaW0oKSkubGVuZ3RoKSYmKGc9MCxoPSIiKSksMDxMKXN3aXRjaChnKXtjYXNlIDExNTpCPUIucmVwbGFjZSh3LG8pO2Nhc2UgMTAwOmNhc2UgMTA5OmNhc2UgNDU6aD1CKyJ7IitoKyJ9IjticmVhaztjYXNlIDEwNzpoPShCPUIucmVwbGFjZShtLCIkMSAkMiIpKSsieyIraCsifSIsaD0xPT09RXx8Mj09PUUmJmEoIkAiK2gsMyk/IkAtd2Via2l0LSIraCsiQCIraDoiQCIraDticmVhaztkZWZhdWx0Omg9QitoLDExMj09PWYmJihIKz1oLGg9IiIpfWVsc2UgaD0iIjticmVhaztkZWZhdWx0Omg9ZShsLHQobCxCLEkpLGgsZixkKzEpfUcrPWgsaD1JPU09Xz1wPTAsQj0iIixnPXMuY2hhckNvZGVBdCgrK0YpO2JyZWFrO2Nhc2UgMTI1OmNhc2UgNTk6aWYoMTwoTD0oQj0oMDxNP0IucmVwbGFjZShjLCIiKTpCKS50cmltKCkpLmxlbmd0aCkpc3dpdGNoKDA9PT1fJiYocD1CLmNoYXJDb2RlQXQoMCksNDU9PT1wfHw5NjxwJiYxMjM+cCkmJihMPShCPUIucmVwbGFjZSgiICIsIjoiKSkubGVuZ3RoKSwwPEEmJnZvaWQgMCE9PSh4PWkoMSxCLGwscixULGssSC5sZW5ndGgsZixkLGYpKSYmMD09PShMPShCPXgudHJpbSgpKS5sZW5ndGgpJiYoQj0iXDBcMCIpLHA9Qi5jaGFyQ29kZUF0KDApLGc9Qi5jaGFyQ29kZUF0KDEpLHApe2Nhc2UgMDpicmVhaztjYXNlIDY0OmlmKDEwNT09PWd8fDk5PT09Zyl7VSs9QitzLmNoYXJBdChGKTticmVha31kZWZhdWx0OjU4IT09Qi5jaGFyQ29kZUF0KEwtMSkmJihIKz1uKEIscCxnLEIuY2hhckNvZGVBdCgyKSkpfUk9TT1fPXA9MCxCPSIiLGc9cy5jaGFyQ29kZUF0KCsrRil9fXN3aXRjaChnKXtjYXNlIDEzOmNhc2UgMTA6NDc9PT1QP1A9MDowPT09MStwJiYxMDchPT1mJiYwPEIubGVuZ3RoJiYoTT0xLEIrPSJcMCIpLDA8QSp6JiZpKDAsQixsLHIsVCxrLEgubGVuZ3RoLGYsZCxmKSxrPTEsVCsrO2JyZWFrO2Nhc2UgNTk6Y2FzZSAxMjU6aWYoMD09PVArTytDK1Mpe2srKzticmVha31kZWZhdWx0OnN3aXRjaChrKyssdj1zLmNoYXJBdChGKSxnKXtjYXNlIDk6Y2FzZSAzMjppZigwPT09TytTK1Apc3dpdGNoKE4pe2Nhc2UgNDQ6Y2FzZSA1ODpjYXNlIDk6Y2FzZSAzMjp2PSIiO2JyZWFrO2RlZmF1bHQ6MzIhPT1nJiYodj0iICIpfWJyZWFrO2Nhc2UgMDp2PSJcXDAiO2JyZWFrO2Nhc2UgMTI6dj0iXFxmIjticmVhaztjYXNlIDExOnY9IlxcdiI7YnJlYWs7Y2FzZSAzODowPT09TytQK1MmJihNPUk9MSx2PSJcZiIrdik7YnJlYWs7Y2FzZSAxMDg6aWYoMD09PU8rUCtTK2omJjA8Xylzd2l0Y2goRi1fKXtjYXNlIDI6MTEyPT09TiYmNTg9PT1zLmNoYXJDb2RlQXQoRi0zKSYmKGo9Tik7Y2FzZSA4OjExMT09PUQmJihqPUQpfWJyZWFrO2Nhc2UgNTg6MD09PU8rUCtTJiYoXz1GKTticmVhaztjYXNlIDQ0OjA9PT1QK0MrTytTJiYoTT0xLHYrPSJcciIpO2JyZWFrO2Nhc2UgMzQ6Y2FzZSAzOTowPT09UCYmKE89Tz09PWc/MDowPT09Tz9nOk8pO2JyZWFrO2Nhc2UgOTE6MD09PU8rUCtDJiZTKys7YnJlYWs7Y2FzZSA5MzowPT09TytQK0MmJlMtLTticmVhaztjYXNlIDQxOjA9PT1PK1ArUyYmQy0tO2JyZWFrO2Nhc2UgNDA6aWYoMD09PU8rUCtTKXtpZigwPT09cClzd2l0Y2goMipOKzMqRCl7Y2FzZSA1MzM6YnJlYWs7ZGVmYXVsdDpwPTF9QysrfWJyZWFrO2Nhc2UgNjQ6MD09PVArQytPK1MrXytoJiYoaD0xKTticmVhaztjYXNlIDQyOmNhc2UgNDc6aWYoISgwPE8rUytDKSlzd2l0Y2goUCl7Y2FzZSAwOnN3aXRjaCgyKmcrMypzLmNoYXJDb2RlQXQoRisxKSl7Y2FzZSAyMzU6UD00NzticmVhaztjYXNlIDIyMDpMPUYsUD00Mn1icmVhaztjYXNlIDQyOjQ3PT09ZyYmNDI9PT1OJiZMKzIhPT1GJiYoMzM9PT1zLmNoYXJDb2RlQXQoTCsyKSYmKEgrPXMuc3Vic3RyaW5nKEwsRisxKSksdj0iIixQPTApfX0wPT09UCYmKEIrPXYpfUQ9TixOPWcsRisrfWlmKDA8KEw9SC5sZW5ndGgpKXtpZihNPWwsMDxBJiYodm9pZCAwIT09KHg9aSgyLEgsTSxyLFQsayxMLGYsZCxmKSkmJjA9PT0oSD14KS5sZW5ndGgpKXJldHVybiBVK0grRztpZihIPU0uam9pbigiLCIpKyJ7IitIKyJ9IiwwIT1FKmope3N3aXRjaCgyIT09RXx8YShILDIpfHwoaj0wKSxqKXtjYXNlIDExMTpIPUgucmVwbGFjZSh5LCI6LW1vei0kMSIpK0g7YnJlYWs7Y2FzZSAxMTI6SD1ILnJlcGxhY2UoYiwiOjotd2Via2l0LWlucHV0LSQxIikrSC5yZXBsYWNlKGIsIjo6LW1vei0kMSIpK0gucmVwbGFjZShiLCI6LW1zLWlucHV0LSQxIikrSH1qPTB9fXJldHVybiBVK0grR30oUixsLHIsMCwwKTtyZXR1cm4gMDxBJiYodm9pZCAwIT09KHM9aSgtMixmLGwsbCxULGssZi5sZW5ndGgsMCwwLDApKSYmKGY9cykpLCIiLGo9MCxrPVQ9MSxmfXZhciB1PS9eXDArL2csYz0vW1wwXHJcZl0vZyxmPS86ICovZyxkPS96b298Z3JhLyxwPS8oWyw6IF0pKHRyYW5zZm9ybSkvZyxnPS8sXHIrPy9nLGg9LyhbXHRcclxuIF0pKlxmPyYvZyxtPS9AKGtcdyspXHMqKFxTKilccyovLGI9Lzo6KHBsYWNlKS9nLHk9LzoocmVhZC1vbmx5KS9nLHY9L1tzdmhdXHcrLVt0YmxyXXsyfS8sdz0vXChccyooLiopXHMqXCkvZyx4PS8oW1xzXFNdKj8pOy9nLFM9Ly1zZWxmfGZsZXgtL2csUD0vW15dKj8oOltycF1bZWxdYVtcdy1dKylbXl0qLyxDPS9zdHJldGNofDpccypcdytcLSg/OmNvbnRlfGF2YWlsKS8sTz0vKFteLV0pKGltYWdlLXNldFwoKS8saz0xLFQ9MSxqPTAsRT0xLFI9W10sTj1bXSxBPTAsRD1udWxsLHo9MDtyZXR1cm4gcy51c2U9ZnVuY3Rpb24gZSh0KXtzd2l0Y2godCl7Y2FzZSB2b2lkIDA6Y2FzZSBudWxsOkE9Ti5sZW5ndGg9MDticmVhaztkZWZhdWx0OmlmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KU5bQSsrXT10O2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiB0KWZvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuOysrcillKHRbcl0pO2Vsc2Ugej0wfCEhdH1yZXR1cm4gZX0scy5zZXQ9bCx2b2lkIDAhPT1lJiZsKGUpLHN9O2Z1bmN0aW9uIG0oZSl7ZSYmYi5jdXJyZW50Lmluc2VydChlKyJ9Iil9dmFyIGI9e2N1cnJlbnQ6bnVsbH0seT1mdW5jdGlvbihlLHQscixuLGEsbyxpLGwscyx1KXtzd2l0Y2goZSl7Y2FzZSAxOnN3aXRjaCh0LmNoYXJDb2RlQXQoMCkpe2Nhc2UgNjQ6cmV0dXJuIGIuY3VycmVudC5pbnNlcnQodCsiOyIpLCIiO2Nhc2UgMTA4OmlmKDk4PT09dC5jaGFyQ29kZUF0KDIpKXJldHVybiIifWJyZWFrO2Nhc2UgMjppZigwPT09bClyZXR1cm4gdCsiLyp8Ki8iO2JyZWFrO2Nhc2UgMzpzd2l0Y2gobCl7Y2FzZSAxMDI6Y2FzZSAxMTI6cmV0dXJuIGIuY3VycmVudC5pbnNlcnQoclswXSt0KSwiIjtkZWZhdWx0OnJldHVybiB0KygwPT09dT8iLyp8Ki8iOiIiKX1jYXNlLTI6dC5zcGxpdCgiLyp8Ki99IikuZm9yRWFjaChtKX19LHY9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciB0LHI9ZS5rZXl8fCJjc3MiO3ZvaWQgMCE9PWUucHJlZml4JiYodD17cHJlZml4OmUucHJlZml4fSk7dmFyIG49bmV3IGgodCk7dmFyIGEsbz17fTthPWUuY29udGFpbmVyfHxkb2N1bWVudC5oZWFkO3ZhciBpLGw9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgic3R5bGVbZGF0YS1lbW90aW9uLSIrcisiXSIpO0FycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwobCwoZnVuY3Rpb24oZSl7ZS5nZXRBdHRyaWJ1dGUoImRhdGEtZW1vdGlvbi0iK3IpLnNwbGl0KCIgIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7b1tlXT0hMH0pKSxlLnBhcmVudE5vZGUhPT1hJiZhLmFwcGVuZENoaWxkKGUpfSkpLG4udXNlKGUuc3R5bGlzUGx1Z2lucykoeSksaT1mdW5jdGlvbihlLHQscixhKXt2YXIgbz10Lm5hbWU7Yi5jdXJyZW50PXIsbihlLHQuc3R5bGVzKSxhJiYocy5pbnNlcnRlZFtvXT0hMCl9O3ZhciBzPXtrZXk6cixzaGVldDpuZXcgZyh7a2V5OnIsY29udGFpbmVyOmEsbm9uY2U6ZS5ub25jZSxzcGVlZHk6ZS5zcGVlZHl9KSxub25jZTplLm5vbmNlLGluc2VydGVkOm8scmVnaXN0ZXJlZDp7fSxpbnNlcnQ6aX07cmV0dXJuIHN9O3ZhciB3PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPTAsbj0wLGE9ZS5sZW5ndGg7YT49NDsrK24sYS09NCl0PTE1NDA0ODM0NzcqKDY1NTM1Jih0PTI1NSZlLmNoYXJDb2RlQXQobil8KDI1NSZlLmNoYXJDb2RlQXQoKytuKSk8PDh8KDI1NSZlLmNoYXJDb2RlQXQoKytuKSk8PDE2fCgyNTUmZS5jaGFyQ29kZUF0KCsrbikpPDwyNCkpKyg1OTc5NyoodD4+PjE2KTw8MTYpLHI9MTU0MDQ4MzQ3NyooNjU1MzUmKHRePXQ+Pj4yNCkpKyg1OTc5NyoodD4+PjE2KTw8MTYpXjE1NDA0ODM0NzcqKDY1NTM1JnIpKyg1OTc5Nyoocj4+PjE2KTw8MTYpO3N3aXRjaChhKXtjYXNlIDM6cl49KDI1NSZlLmNoYXJDb2RlQXQobisyKSk8PDE2O2Nhc2UgMjpyXj0oMjU1JmUuY2hhckNvZGVBdChuKzEpKTw8ODtjYXNlIDE6cj0xNTQwNDgzNDc3Kig2NTUzNSYocl49MjU1JmUuY2hhckNvZGVBdChuKSkpKyg1OTc5Nyoocj4+PjE2KTw8MTYpfXJldHVybigoKHI9MTU0MDQ4MzQ3NyooNjU1MzUmKHJePXI+Pj4xMykpKyg1OTc5Nyoocj4+PjE2KTw8MTYpKV5yPj4+MTUpPj4+MCkudG9TdHJpbmcoMzYpfSx4PXthbmltYXRpb25JdGVyYXRpb25Db3VudDoxLGJvcmRlckltYWdlT3V0c2V0OjEsYm9yZGVySW1hZ2VTbGljZToxLGJvcmRlckltYWdlV2lkdGg6MSxib3hGbGV4OjEsYm94RmxleEdyb3VwOjEsYm94T3JkaW5hbEdyb3VwOjEsY29sdW1uQ291bnQ6MSxjb2x1bW5zOjEsZmxleDoxLGZsZXhHcm93OjEsZmxleFBvc2l0aXZlOjEsZmxleFNocmluazoxLGZsZXhOZWdhdGl2ZToxLGZsZXhPcmRlcjoxLGdyaWRSb3c6MSxncmlkUm93RW5kOjEsZ3JpZFJvd1NwYW46MSxncmlkUm93U3RhcnQ6MSxncmlkQ29sdW1uOjEsZ3JpZENvbHVtbkVuZDoxLGdyaWRDb2x1bW5TcGFuOjEsZ3JpZENvbHVtblN0YXJ0OjEsbXNHcmlkUm93OjEsbXNHcmlkUm93U3BhbjoxLG1zR3JpZENvbHVtbjoxLG1zR3JpZENvbHVtblNwYW46MSxmb250V2VpZ2h0OjEsbGluZUhlaWdodDoxLG9wYWNpdHk6MSxvcmRlcjoxLG9ycGhhbnM6MSx0YWJTaXplOjEsd2lkb3dzOjEsekluZGV4OjEsem9vbToxLFdlYmtpdExpbmVDbGFtcDoxLGZpbGxPcGFjaXR5OjEsZmxvb2RPcGFjaXR5OjEsc3RvcE9wYWNpdHk6MSxzdHJva2VEYXNoYXJyYXk6MSxzdHJva2VEYXNob2Zmc2V0OjEsc3Ryb2tlTWl0ZXJsaW1pdDoxLHN0cm9rZU9wYWNpdHk6MSxzdHJva2VXaWR0aDoxfTt2YXIgUz0vW0EtWl18Xm1zL2csUD0vX0VNT18oW15fXSs/KV8oW15dKj8pX0VNT18vZyxDPWZ1bmN0aW9uKGUpe3JldHVybiA0NT09PWUuY2hhckNvZGVBdCgxKX0sTz1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmImJvb2xlYW4iIT10eXBlb2YgZX0saz1mdW5jdGlvbihlKXt2YXIgdD17fTtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHZvaWQgMD09PXRbcl0mJih0W3JdPWUocikpLHRbcl19fSgoZnVuY3Rpb24oZSl7cmV0dXJuIEMoZSk/ZTplLnJlcGxhY2UoUywiLSQmIikudG9Mb3dlckNhc2UoKX0pKSxUPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2UiYW5pbWF0aW9uIjpjYXNlImFuaW1hdGlvbk5hbWUiOmlmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdC5yZXBsYWNlKFAsKGZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gRT17bmFtZTp0LHN0eWxlczpyLG5leHQ6RX0sdH0pKX1yZXR1cm4gMT09PXhbZV18fEMoZSl8fCJudW1iZXIiIT10eXBlb2YgdHx8MD09PXQ/dDp0KyJweCJ9O2Z1bmN0aW9uIGooZSx0LHIsbil7aWYobnVsbD09cilyZXR1cm4iIjtpZih2b2lkIDAhPT1yLl9fZW1vdGlvbl9zdHlsZXMpcmV0dXJuIHI7c3dpdGNoKHR5cGVvZiByKXtjYXNlImJvb2xlYW4iOnJldHVybiIiO2Nhc2Uib2JqZWN0IjppZigxPT09ci5hbmltKXJldHVybiBFPXtuYW1lOnIubmFtZSxzdHlsZXM6ci5zdHlsZXMsbmV4dDpFfSxyLm5hbWU7aWYodm9pZCAwIT09ci5zdHlsZXMpe3ZhciBhPXIubmV4dDtpZih2b2lkIDAhPT1hKWZvcig7dm9pZCAwIT09YTspRT17bmFtZTphLm5hbWUsc3R5bGVzOmEuc3R5bGVzLG5leHQ6RX0sYT1hLm5leHQ7cmV0dXJuIHIuc3R5bGVzKyI7In1yZXR1cm4gZnVuY3Rpb24oZSx0LHIpe3ZhciBuPSIiO2lmKEFycmF5LmlzQXJyYXkocikpZm9yKHZhciBhPTA7YTxyLmxlbmd0aDthKyspbis9aihlLHQsclthXSwhMSk7ZWxzZSBmb3IodmFyIG8gaW4gcil7dmFyIGk9cltvXTtpZigib2JqZWN0IiE9dHlwZW9mIGkpbnVsbCE9dCYmdm9pZCAwIT09dFtpXT9uKz1vKyJ7Iit0W2ldKyJ9IjpPKGkpJiYobis9ayhvKSsiOiIrVChvLGkpKyI7Iik7ZWxzZSBpZighQXJyYXkuaXNBcnJheShpKXx8InN0cmluZyIhPXR5cGVvZiBpWzBdfHxudWxsIT10JiZ2b2lkIDAhPT10W2lbMF1dKXt2YXIgbD1qKGUsdCxpLCExKTtzd2l0Y2gobyl7Y2FzZSJhbmltYXRpb24iOmNhc2UiYW5pbWF0aW9uTmFtZSI6bis9ayhvKSsiOiIrbCsiOyI7YnJlYWs7ZGVmYXVsdDpuKz1vKyJ7IitsKyJ9In19ZWxzZSBmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKylPKGlbc10pJiYobis9ayhvKSsiOiIrVChvLGlbc10pKyI7Iil9cmV0dXJuIG59KGUsdCxyKTtjYXNlImZ1bmN0aW9uIjppZih2b2lkIDAhPT1lKXt2YXIgbz1FLGk9cihlKTtyZXR1cm4gRT1vLGooZSx0LGksbil9YnJlYWs7Y2FzZSJzdHJpbmciOn1pZihudWxsPT10KXJldHVybiByO3ZhciBsPXRbcl07cmV0dXJuIHZvaWQgMD09PWx8fG4/cjpsfXZhciBFLFI9L2xhYmVsOlxzKihbXlxzO1xue10rKVxzKjsvZzt2YXIgTj1mdW5jdGlvbihlLHQscil7aWYoMT09PWUubGVuZ3RoJiYib2JqZWN0Ij09dHlwZW9mIGVbMF0mJm51bGwhPT1lWzBdJiZ2b2lkIDAhPT1lWzBdLnN0eWxlcylyZXR1cm4gZVswXTt2YXIgbj0hMCxhPSIiO0U9dm9pZCAwO3ZhciBvPWVbMF07bnVsbD09b3x8dm9pZCAwPT09by5yYXc/KG49ITEsYSs9aihyLHQsbywhMSkpOmErPW9bMF07Zm9yKHZhciBpPTE7aTxlLmxlbmd0aDtpKyspYSs9aihyLHQsZVtpXSw0Nj09PWEuY2hhckNvZGVBdChhLmxlbmd0aC0xKSksbiYmKGErPW9baV0pO1IubGFzdEluZGV4PTA7Zm9yKHZhciBsLHM9IiI7bnVsbCE9PShsPVIuZXhlYyhhKSk7KXMrPSItIitsWzFdO3JldHVybntuYW1lOncoYSkrcyxzdHlsZXM6YSxuZXh0OkV9fTtmdW5jdGlvbiBBKGUsdCxyKXt2YXIgbj0iIjtyZXR1cm4gci5zcGxpdCgiICIpLmZvckVhY2goKGZ1bmN0aW9uKHIpe3ZvaWQgMCE9PWVbcl0/dC5wdXNoKGVbcl0pOm4rPXIrIiAifSkpLG59dmFyIEQ9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUua2V5KyItIit0Lm5hbWU7aWYoITE9PT1yJiZ2b2lkIDA9PT1lLnJlZ2lzdGVyZWRbbl0mJihlLnJlZ2lzdGVyZWRbbl09dC5zdHlsZXMpLHZvaWQgMD09PWUuaW5zZXJ0ZWRbdC5uYW1lXSl7dmFyIGE9dDtkb3tlLmluc2VydCgiLiIrbixhLGUuc2hlZXQsITApO2E9YS5uZXh0fXdoaWxlKHZvaWQgMCE9PWEpfX07ZnVuY3Rpb24geihlLHQpe2lmKHZvaWQgMD09PWUuaW5zZXJ0ZWRbdC5uYW1lXSlyZXR1cm4gZS5pbnNlcnQoIiIsdCxlLnNoZWV0LCEwKX1mdW5jdGlvbiBfKGUsdCxyKXt2YXIgbj1bXSxhPUEoZSxuLHIpO3JldHVybiBuLmxlbmd0aDwyP3I6YSt0KG4pfXZhciBGPWZ1bmN0aW9uIGUodCl7Zm9yKHZhciByPSIiLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGE9dFtuXTtpZihudWxsIT1hKXt2YXIgbz12b2lkIDA7c3dpdGNoKHR5cGVvZiBhKXtjYXNlImJvb2xlYW4iOmJyZWFrO2Nhc2Uib2JqZWN0IjppZihBcnJheS5pc0FycmF5KGEpKW89ZShhKTtlbHNlIGZvcih2YXIgaSBpbiBvPSIiLGEpYVtpXSYmaSYmKG8mJihvKz0iICIpLG8rPWkpO2JyZWFrO2RlZmF1bHQ6bz1hfW8mJihyJiYocis9IiAiKSxyKz1vKX19cmV0dXJuIHJ9LE09ZnVuY3Rpb24oZSl7dmFyIHQ9dihlKTt0LnNoZWV0LnNwZWVkeT1mdW5jdGlvbihlKXt0aGlzLmlzU3BlZWR5PWV9LHQuY29tcGF0PSEwO3ZhciByPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspcltuXT1hcmd1bWVudHNbbl07dmFyIGE9TihyLHQucmVnaXN0ZXJlZCx2b2lkIDApO3JldHVybiBEKHQsYSwhMSksdC5rZXkrIi0iK2EubmFtZX07cmV0dXJue2NzczpyLGN4OmZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkoZSksYT0wO2E8ZTthKyspblthXT1hcmd1bWVudHNbYV07cmV0dXJuIF8odC5yZWdpc3RlcmVkLHIsRihuKSl9LGluamVjdEdsb2JhbDpmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXJbbl09YXJndW1lbnRzW25dO3ZhciBhPU4ocix0LnJlZ2lzdGVyZWQpO3oodCxhKX0sa2V5ZnJhbWVzOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspcltuXT1hcmd1bWVudHNbbl07dmFyIGE9TihyLHQucmVnaXN0ZXJlZCksbz0iYW5pbWF0aW9uLSIrYS5uYW1lO3JldHVybiB6KHQse25hbWU6YS5uYW1lLHN0eWxlczoiQGtleWZyYW1lcyAiK28rInsiK2Euc3R5bGVzKyJ9In0pLG99LGh5ZHJhdGU6ZnVuY3Rpb24oZSl7ZS5mb3JFYWNoKChmdW5jdGlvbihlKXt0Lmluc2VydGVkW2VdPSEwfSkpfSxmbHVzaDpmdW5jdGlvbigpe3QucmVnaXN0ZXJlZD17fSx0Lmluc2VydGVkPXt9LHQuc2hlZXQuZmx1c2goKX0sc2hlZXQ6dC5zaGVldCxjYWNoZTp0LGdldFJlZ2lzdGVyZWRTdHlsZXM6QS5iaW5kKG51bGwsdC5yZWdpc3RlcmVkKSxtZXJnZTpfLmJpbmQobnVsbCx0LnJlZ2lzdGVyZWQscil9fSgpLEk9KE0uZmx1c2gsTS5oeWRyYXRlLE0uY3gsTS5tZXJnZSxNLmdldFJlZ2lzdGVyZWRTdHlsZXMsTS5pbmplY3RHbG9iYWwsTS5rZXlmcmFtZXMsTS5jc3MpO00uc2hlZXQsTS5jYWNoZTtmdW5jdGlvbiBMKGUpe3JldHVybihMPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gVyhlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFN5bWJvbHx8IShTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGUpKSlyZXR1cm47dmFyIHI9W10sbj0hMCxhPSExLG89dm9pZCAwO3RyeXtmb3IodmFyIGksbD1lW1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KGk9bC5uZXh0KCkpLmRvbmUpJiYoci5wdXNoKGkudmFsdWUpLCF0fHxyLmxlbmd0aCE9PXQpO249ITApO31jYXRjaChlKXthPSEwLG89ZX1maW5hbGx5e3RyeXtufHxudWxsPT1sLnJldHVybnx8bC5yZXR1cm4oKX1maW5hbGx5e2lmKGEpdGhyb3cgb319cmV0dXJuIHJ9KGUsdCl8fGZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuO2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gSyhlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTsiT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSk7aWYoIk1hcCI9PT1yfHwiU2V0Ij09PXIpcmV0dXJuIEFycmF5LmZyb20oZSk7aWYoIkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKSlyZXR1cm4gSyhlLHQpfShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gSyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIEIoZSx0KXt2YXIgcj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihuPW4uZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLHIucHVzaC5hcHBseShyLG4pfXJldHVybiByfWZ1bmN0aW9uIEgoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/QihPYmplY3QociksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe0coZSx0LHJbdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocikpOkIoT2JqZWN0KHIpKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iocix0KSl9KSl9cmV0dXJuIGV9ZnVuY3Rpb24gRyhlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9ZnVuY3Rpb24gVShlKXtpZighZSlyZXR1cm4gbnVsbDt2YXIgdD1lLmNvbG9yLHI9ZS5iYWNrZ3JvdW5kQ29sb3Isbj1lLmJvcmRlckNvbG9yLGE9ZS5ib3JkZXJXaWR0aCxvPWUuc3RyaXBlZENvbG9yLGk9ZS5oaWdobGlnaHRDb2xvcixsPWUuY2VsbFBhZGRpbmcscz1lLnN0eWxlLHU9ZS50YWJsZUJvcmRlckNvbG9yLGM9dm9pZCAwPT09dT9uOnUsZj1lLnRhYmxlQm9yZGVyV2lkdGgsZD12b2lkIDA9PT1mP2E6ZixwPWUudGFibGVTdHlsZSxnPWUuaGVhZGVyQm9yZGVyQ29sb3IsaD12b2lkIDA9PT1nP246ZyxtPWUuaGVhZGVyQm9yZGVyV2lkdGgsYj12b2lkIDA9PT1tP2E6bSx5PWUuaGVhZGVyU3R5bGUsdj1lLmdyb3VwSGVhZGVyQm9yZGVyQ29sb3Isdz12b2lkIDA9PT12P246dix4PWUuZ3JvdXBIZWFkZXJCb3JkZXJXaWR0aCxTPXZvaWQgMD09PXg/YTp4LFA9ZS5ncm91cEhlYWRlclN0eWxlLEM9ZS50YWJsZUJvZHlTdHlsZSxPPWUucm93R3JvdXBTdHlsZSxrPWUucm93U3R5bGUsVD1lLnJvd1N0cmlwZWRTdHlsZSxqPWUucm93SGlnaGxpZ2h0U3R5bGUsRT1lLnJvd1NlbGVjdGVkU3R5bGUsUj1lLmNlbGxCb3JkZXJDb2xvcixOPXZvaWQgMD09PVI/bjpSLEE9ZS5jZWxsQm9yZGVyV2lkdGgsRD12b2lkIDA9PT1BP2E6QSx6PWUuY2VsbFN0eWxlLF89ZS5mb290ZXJCb3JkZXJDb2xvcixGPXZvaWQgMD09PV8/bjpfLE09ZS5mb290ZXJCb3JkZXJXaWR0aCxJPXZvaWQgMD09PU0/YTpNLEs9ZS5mb290ZXJTdHlsZSxCPWUuaW5wdXRTdHlsZSxHPWUuZmlsdGVySW5wdXRTdHlsZSxVPWUuc2VhcmNoSW5wdXRTdHlsZSxKPWUuc2VsZWN0U3R5bGUsJD1lLnBhZ2luYXRpb25TdHlsZSxxPWUucGFnZUJ1dHRvblN0eWxlLFg9ZS5wYWdlQnV0dG9uSG92ZXJTdHlsZSxZPWUucGFnZUJ1dHRvbkFjdGl2ZVN0eWxlLFo9ZS5wYWdlQnV0dG9uQ3VycmVudFN0eWxlLFE9VihbeixrLEMscCxzXSwiY29sb3IiLHQpLGVlPVYoW0osc10sImNvbG9yIix0KTtiPVYoW3ldLCJib3JkZXJXaWR0aCIsYik7dmFyIHRlLHJlPXtzdHlsZTpIKHtjb2xvcjp0LGJhY2tncm91bmRDb2xvcjpyfSxzKSx0YWJsZVN0eWxlOkgoe2JvcmRlckNvbG9yOmMsYm9yZGVyV2lkdGg6ZH0scCksaGVhZGVyU3R5bGU6SChIKHtib3JkZXJDb2xvcjpoLGJvcmRlcldpZHRoOmIscGFkZGluZzpsfSx5KSx7fSx7Ii5ydC1ib3JkZXJlZCAmLCAucnQtb3V0bGluZWQgJiI6e2JvcmRlcldpZHRoOmJ9fSksZ3JvdXBIZWFkZXJTdHlsZTpIKEgoe2JvcmRlckNvbG9yOncsYm9yZGVyV2lkdGg6U30sUCkse30seyImOjphZnRlciI6e2JhY2tncm91bmRDb2xvcjp3LGhlaWdodDpTfSwiLnJ0LWJvcmRlcmVkICYiOntib3JkZXJXaWR0aDpTfX0pLHRhYmxlQm9keVN0eWxlOkMsY2VsbFN0eWxlOkgoe2JvcmRlckNvbG9yOk4sYm9yZGVyV2lkdGg6RCxwYWRkaW5nOmx9LHopLGZvb3RlclN0eWxlOkgoe2JvcmRlckNvbG9yOkYsYm9yZGVyV2lkdGg6SSxwYWRkaW5nOmx9LEspLHJvd0dyb3VwU3R5bGU6Tyxyb3dTdHlsZTpIKEgoe30saykse30seyImLnJ0LXRyLXN0cmlwZWQiOkgoe2JhY2tncm91bmRDb2xvcjpvfSxUKSwiJi5ydC10ci1oaWdobGlnaHQ6aG92ZXIiOkgoe2JhY2tncm91bmRDb2xvcjppfSxqKSwiJi5ydC10ci1zZWxlY3RlZCI6SCh7fSxFKX0pLGZpbHRlckNlbGxTdHlsZTpIKHtib3JkZXJDb2xvcjpOLGJvcmRlcldpZHRoOkQscGFkZGluZzpsfSx6KSxleHBhbmRlclN0eWxlOnsiJjo6YWZ0ZXIiOntib3JkZXJUb3BDb2xvcjpRfX0sZmlsdGVySW5wdXRTdHlsZTpIKEgoe30sQiksRyksc2VhcmNoSW5wdXRTdHlsZTpIKEgoe30sQiksVSkscGFnaW5hdGlvblN0eWxlOkgoSCh7Ym9yZGVyVG9wQ29sb3I6Tixib3JkZXJUb3BXaWR0aDpEfSwkKSx7fSx7Ii5ydC1wYWdlLWp1bXAiOkgoe30sQiksIi5ydC1wYWdlLXNpemUtc2VsZWN0IjpIKEgoe30sSikse30seyJAc3VwcG9ydHMgKC1tb3otYXBwZWFyYW5jZTogbm9uZSkiOntiYWNrZ3JvdW5kSW1hZ2U6ZWUmJid1cmwoXCdkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VUy1BU0NJSSw8c3ZnIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4nKyc8cGF0aCBmaWxsPSInLmNvbmNhdCgodGU9ZWUsZW5jb2RlVVJJQ29tcG9uZW50KHRlKS5yZXBsYWNlKCIoIiwiJTI4IikucmVwbGFjZSgiKSIsIiUyOSIpKSwnIiBkPSJNMjQgMS41bC0xMiAyMS0xMi0yMWgyNHoiLz48L3N2Zz5cJyknKX19KSwiLnJ0LXBhZ2UtYnV0dG9uIjpIKHt9LHEpLCIucnQtcGFnZS1idXR0b246bm90KDpkaXNhYmxlZCk6aG92ZXIiOkgoe30sWCksIi5ydC1wYWdlLWJ1dHRvbjpub3QoOmRpc2FibGVkKTphY3RpdmUiOkgoe30sWSksIi5ydC1rZXlib2FyZC1hY3RpdmUgJiAucnQtcGFnZS1idXR0b246bm90KDpkaXNhYmxlZCk6Zm9jdXMiOkgoe30sWCksIi5ydC1wYWdlLWJ1dHRvbi1jdXJyZW50IjpIKHt9LFopfSl9O3JldHVybiBmdW5jdGlvbiBlKHQpe2Zvcih2YXIgcj0wLG49T2JqZWN0LmVudHJpZXModCk7cjxuLmxlbmd0aDtyKyspe3ZhciBhPVcobltyXSwyKSxvPWFbMF0saT1hWzFdOyJvYmplY3QiPT09TChpKT8oZShpKSwwPT09T2JqZWN0LmtleXMoaSkubGVuZ3RoJiZkZWxldGUgdFtvXSk6bnVsbD09aSYmZGVsZXRlIHRbb119fShyZSkscmV9ZnVuY3Rpb24gVihlLHQscil7dmFyIG49ZS5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4gZSYmbnVsbCE9ZVt0XX0pKTtyZXR1cm4gbj9uW3RdOnJ9ZnVuY3Rpb24gSigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09YXJndW1lbnRzW3JdO3JldHVybih0PXQuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZX0pKSkubGVuZ3RoP0kodCk6bnVsbH1mdW5jdGlvbiAkKGUpe3JldHVybigkPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9dmFyIHE9e3NvcnRMYWJlbDoiU29ydCB7bmFtZX0iLGZpbHRlclBsYWNlaG9sZGVyOiIiLGZpbHRlckxhYmVsOiJGaWx0ZXIge25hbWV9IixzZWFyY2hQbGFjZWhvbGRlcjoiU2VhcmNoIixzZWFyY2hMYWJlbDoiU2VhcmNoIixub0RhdGE6Ik5vIHJvd3MgZm91bmQiLHBhZ2VOZXh0OiJOZXh0IixwYWdlUHJldmlvdXM6IlByZXZpb3VzIixwYWdlTnVtYmVyczoie3BhZ2V9IG9mIHtwYWdlc30iLHBhZ2VJbmZvOiJ7cm93U3RhcnR9Ii5jb25jYXQoU3RyaW5nLmZyb21DaGFyQ29kZSg4MjExKSwie3Jvd0VuZH0gb2Yge3Jvd3N9IHJvd3MiKSxwYWdlU2l6ZU9wdGlvbnM6IlNob3cge3Jvd3N9IixwYWdlTmV4dExhYmVsOiJOZXh0IHBhZ2UiLHBhZ2VQcmV2aW91c0xhYmVsOiJQcmV2aW91cyBwYWdlIixwYWdlTnVtYmVyTGFiZWw6IlBhZ2Uge3BhZ2V9IixwYWdlSnVtcExhYmVsOiJHbyB0byBwYWdlIixwYWdlU2l6ZU9wdGlvbnNMYWJlbDoiUm93cyBwZXIgcGFnZSIsZGVmYXVsdEdyb3VwSGVhZGVyOiJHcm91cGVkIixkZXRhaWxzRXhwYW5kTGFiZWw6IkV4cGFuZCBkZXRhaWxzIixkZXRhaWxzQ29sbGFwc2VMYWJlbDoiQ29sbGFwc2UgZGV0YWlscyIsc2VsZWN0QWxsUm93c0xhYmVsOiJTZWxlY3QgYWxsIHJvd3MiLGRlc2VsZWN0QWxsUm93c0xhYmVsOiJEZXNlbGVjdCBhbGwgcm93cyIsc2VsZWN0QWxsU3ViUm93c0xhYmVsOiJTZWxlY3QgYWxsIHJvd3MgaW4gZ3JvdXAiLGRlc2VsZWN0QWxsU3ViUm93c0xhYmVsOiJEZXNlbGVjdCBhbGwgcm93cyBpbiBncm91cCIsc2VsZWN0Um93TGFiZWw6IlNlbGVjdCByb3ciLGRlc2VsZWN0Um93TGFiZWw6IkRlc2VsZWN0IHJvdyJ9O2Z1bmN0aW9uIFgoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKCFlfHwhdClyZXR1cm4gZTt2YXIgcj1PYmplY3Qua2V5cyh0KSxuPSIoIityLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuInsiLmNvbmNhdChlLCJ9Iil9KSkuam9pbigifCIpKyIpIixhPWUuc3BsaXQobmV3IFJlZ0V4cChuKSksbz1yLnJlZHVjZSgoZnVuY3Rpb24oZSxyKXtyZXR1cm4gZVsieyIuY29uY2F0KHIsIn0iKV09dFtyXSxlfSkse30pLGk9YS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1vW2VdP29bZV06ZX0pKTtyZXR1cm4gaS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09PSQoZSl9KSk/aTppLmpvaW4oIiIpfWZ1bmN0aW9uIFkoZSl7cmV0dXJuKFk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBaKGUsdCl7dmFyIHI9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYobj1uLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxyLnB1c2guYXBwbHkocixuKX1yZXR1cm4gcn1mdW5jdGlvbiBRKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP1ooT2JqZWN0KHIpLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtlZShlLHQsclt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhyKSk6WihPYmplY3QocikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiBlZShlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9ZnVuY3Rpb24gdGUoKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxyPTA7cjxlO3IrKyl0W3JdPWFyZ3VtZW50c1tyXTtyZXR1cm4gdC5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlfSkpLmpvaW4oIiAiKX1mdW5jdGlvbiByZSgpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09YXJndW1lbnRzW3JdO3JldHVybiB0LmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lfSkpfWZ1bmN0aW9uIG5lKGUsdCl7cmV0dXJuIHQucmVkdWNlKChmdW5jdGlvbihlLHQpe2lmKGUgaW5zdGFuY2VvZiBPYmplY3QmJnZvaWQgMCE9PWUpcmV0dXJuIGVbdF19KSxlKX1mdW5jdGlvbiBhZShlLHQscil7dmFyIG49USh7fSxlKSxhPW47cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24oZSxuKXtuPT09dC5sZW5ndGgtMT92b2lkIDA9PT1yP2RlbGV0ZSBhW2VdOmFbZV09cjooIm9iamVjdCI9PT1ZKGFbZV0pP2FbZV09USh7fSxhW2VdKTphW2VdPXt9LGE9YVtlXSl9KSksbn1mdW5jdGlvbiBvZShlKXtyZXR1cm4gZS5yZXBsYWNlKC9bLiorP14ke30oKXxbXF1cXF0vZywiXFwkJiIpfWZ1bmN0aW9uIGllKGUpe3JldHVybihpZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIGxlKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19ZnVuY3Rpb24gc2UoZSx0KXtyZXR1cm4oc2U9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfWZ1bmN0aW9uIHVlKGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1kZShlKTtpZih0KXt2YXIgYT1kZSh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KG4sYXJndW1lbnRzLGEpfWVsc2Ugcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gY2UodGhpcyxyKX19ZnVuY3Rpb24gY2UoZSx0KXtyZXR1cm4hdHx8Im9iamVjdCIhPT1pZSh0KSYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZmUoZSk6dH1mdW5jdGlvbiBmZShlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9ZnVuY3Rpb24gZGUoZSl7cmV0dXJuKGRlPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiBwZShlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZ2UoZSl9KGUpfHxmdW5jdGlvbihlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fGZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuO2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gZ2UoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7Ik9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpO2lmKCJNYXAiPT09cnx8IlNldCI9PT1yKXJldHVybiBBcnJheS5mcm9tKGUpO2lmKCJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QocikpcmV0dXJuIGdlKGUsdCl9KGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGdlKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gaGUoKXtyZXR1cm4oaGU9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pJiYoZVtuXT1yW25dKX1yZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBtZShlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHIsbixhPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgcixuLGE9e30sbz1PYmplY3Qua2V5cyhlKTtmb3Iobj0wO248by5sZW5ndGg7bisrKXI9b1tuXSx0LmluZGV4T2Yocik+PTB8fChhW3JdPWVbcl0pO3JldHVybiBhfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKylyPW9bbl0sdC5pbmRleE9mKHIpPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyKSYmKGFbcl09ZVtyXSl9cmV0dXJuIGF9dmFyIGJlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuaXNDdXJyZW50LHI9ZS5jbGFzc05hbWUsbj1tZShlLFsiaXNDdXJyZW50IiwiY2xhc3NOYW1lIl0pO3JldHVybiByPXRlKHIsInJ0LXBhZ2UtYnV0dG9uIix0PyIgcnQtcGFnZS1idXR0b24tY3VycmVudCI6bnVsbCksby5hLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIsaGUoe3R5cGU6ImJ1dHRvbiIsY2xhc3NOYW1lOnJ9LG4pLG4uY2hpbGRyZW4pfTt2YXIgeWU9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJnNlKGUsdCl9KGksZSk7dmFyIHQscixuLGE9dWUoaSk7ZnVuY3Rpb24gaShlKXt2YXIgdDtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxpKSwodD1hLmNhbGwodGhpcyxlKSkuY2hhbmdlUGFnZT10LmNoYW5nZVBhZ2UuYmluZChmZSh0KSksdC5hcHBseVBhZ2U9dC5hcHBseVBhZ2UuYmluZChmZSh0KSksdC5zdGF0ZT17cGFnZUp1bXBWYWx1ZTplLnBhZ2UrMSxwcmV2UGFnZTplLnBhZ2V9LHR9cmV0dXJuIHQ9aSxuPVt7a2V5OiJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucGFnZSE9PXQucHJldlBhZ2U/e3BhZ2VKdW1wVmFsdWU6ZS5wYWdlKzEscHJldlBhZ2U6ZS5wYWdlfTpudWxsfX1dLChyPVt7a2V5OiJjaGFuZ2VQYWdlIix2YWx1ZTpmdW5jdGlvbihlKXtlIT09dGhpcy5wcm9wcy5wYWdlKzEmJnRoaXMucHJvcHMub25QYWdlQ2hhbmdlKGUtMSl9fSx7a2V5OiJhcHBseVBhZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe2UmJmUucHJldmVudERlZmF1bHQoKTt2YXIgdD10aGlzLnN0YXRlLnBhZ2VKdW1wVmFsdWU7aWYoIiIhPT10KXRoaXMuY2hhbmdlUGFnZSh0KTtlbHNle3ZhciByPXRoaXMucHJvcHMucGFnZSsxO3RoaXMuc2V0U3RhdGUoe3BhZ2VKdW1wVmFsdWU6cn0pfX19LHtrZXk6InJlbmRlclBhZ2VJbmZvIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnBhZ2Uscj1lLnBhZ2VTaXplLG49ZS5zb3J0ZWREYXRhLGE9ZS5sYW5ndWFnZSxpPW4ubGVuZ3RoLGw9TWF0aC5taW4odCpyKzEsbi5sZW5ndGgpLHM9TWF0aC5taW4odCpyK3Isbi5sZW5ndGgpLHU9WChhLnBhZ2VJbmZvLHtyb3dTdGFydDpsLHJvd0VuZDpzLHJvd3M6aX0pO3JldHVybiBvLmEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJydC1wYWdlLWluZm8ifSx1KX19LHtrZXk6InJlbmRlclBhZ2VTaXplT3B0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYWdlU2l6ZSxyPWUucGFnZVNpemVPcHRpb25zLG49ZS5vblBhZ2VTaXplQ2hhbmdlLGE9ZS5sYW5ndWFnZSxpPW8uYS5jcmVhdGVFbGVtZW50KCJzZWxlY3QiLHtrZXk6InBhZ2Utc2l6ZS1zZWxlY3QiLGNsYXNzTmFtZToicnQtcGFnZS1zaXplLXNlbGVjdCIsImFyaWEtbGFiZWwiOmEucGFnZVNpemVPcHRpb25zTGFiZWwsb25DaGFuZ2U6ZnVuY3Rpb24oZSl7cmV0dXJuIG4oTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSl9LHZhbHVlOnR9LHIubWFwKChmdW5jdGlvbihlLHQpe3JldHVybiBvLmEuY3JlYXRlRWxlbWVudCgib3B0aW9uIix7a2V5OnQsdmFsdWU6ZX0sZSl9KSkpLGw9WChhLnBhZ2VTaXplT3B0aW9ucyx7cm93czppfSk7cmV0dXJuIG8uYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InJ0LXBhZ2Utc2l6ZSJ9LGwpfX0se2tleToicmVuZGVyUGFnZUp1bXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUub25DaGFuZ2Uscj1lLnZhbHVlLG49ZS5vbkJsdXIsYT1lLm9uS2V5UHJlc3MsaT1lLmlucHV0VHlwZSxsPWUubGFuZ3VhZ2U7cmV0dXJuIG8uYS5jcmVhdGVFbGVtZW50KCJpbnB1dCIse2tleToicGFnZS1qdW1wIixjbGFzc05hbWU6InJ0LXBhZ2UtanVtcCIsImFyaWEtbGFiZWwiOmwucGFnZUp1bXBMYWJlbCx0eXBlOmksb25DaGFuZ2U6dCx2YWx1ZTpyLG9uQmx1cjpuLG9uS2V5UHJlc3M6YX0pfX0se2tleToiZ2V0UGFnZUp1bXBQcm9wZXJ0aWVzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJue29uS2V5UHJlc3M6ZnVuY3Rpb24odCl7MTMhPT10LndoaWNoJiYxMyE9PXQua2V5Q29kZXx8ZS5hcHBseVBhZ2UoKX0sb25CbHVyOnRoaXMuYXBwbHlQYWdlLHZhbHVlOnRoaXMuc3RhdGUucGFnZUp1bXBWYWx1ZSxvbkNoYW5nZTpmdW5jdGlvbih0KXt2YXIgcj10LnRhcmdldC52YWx1ZTtpZigiIiE9PXIpe3ZhciBuPU51bWJlcihyKTtpZighTnVtYmVyLmlzTmFOKG4pKXt2YXIgYT1NYXRoLm1pbihNYXRoLm1heChuLDEpLE1hdGgubWF4KGUucHJvcHMucGFnZXMsMSkpO2Uuc2V0U3RhdGUoe3BhZ2VKdW1wVmFsdWU6YX0pfX1lbHNlIGUuc2V0U3RhdGUoe3BhZ2VKdW1wVmFsdWU6cn0pfSxpbnB1dFR5cGU6Im51bWJlciIsbGFuZ3VhZ2U6dGhpcy5wcm9wcy5sYW5ndWFnZX19fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMscj10LmF1dG9IaWRlUGFnaW5hdGlvbixuPXQucGFnaW5hdGlvblR5cGUsYT10LnNob3dQYWdlU2l6ZU9wdGlvbnMsaT10LnNob3dQYWdlSW5mbyxsPXQucGFnZSxzPXQucGFnZXMsdT10LmNhblByZXZpb3VzLGM9dC5jYW5OZXh0LGY9dC5jbGFzc05hbWUsZD10LnN0eWxlLHA9dC50aGVtZSxnPXQubGFuZ3VhZ2U7aWYocil7dmFyIGg9dGhpcy5wcm9wcyxtPWguZGVmYXVsdFBhZ2VTaXplLGI9aC5wYWdlU2l6ZU9wdGlvbnMseT1oLnJlc29sdmVkRGF0YSx2PWE/TWF0aC5taW4uYXBwbHkoTWF0aCxbbV0uY29uY2F0KHBlKGIpKSk6bTtpZih5Lmxlbmd0aDw9dilyZXR1cm4gbnVsbH12YXIgdyx4PWk/dGhpcy5yZW5kZXJQYWdlSW5mbyh0aGlzLnByb3BzKTpudWxsLFM9YT90aGlzLnJlbmRlclBhZ2VTaXplT3B0aW9ucyh0aGlzLnByb3BzKTpudWxsLFA9bCsxLEM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdDw9Nj9wZShBcnJheSh0KSkubWFwKChmdW5jdGlvbihlLHQpe3JldHVybiB0KzF9KSk6ZTw9ND9bMSwyLDMsNCw1LHRdOnQtZTwzP1sxLHQtMyx0LTIsdC0xLHRdOlsxLGUtMSxlLGUrMSx0XX0oUCxzKTtpZigibnVtYmVycyI9PT1uKXt2YXIgTz1bXTtDLmZvckVhY2goKGZ1bmN0aW9uKHQscil7dmFyIG49UD09PXQsYT1vLmEuY3JlYXRlRWxlbWVudChiZSx7a2V5OnQsaXNDdXJyZW50Om4sb25DbGljazplLmNoYW5nZVBhZ2UuYmluZChudWxsLHQpLCJhcmlhLWxhYmVsIjpYKGcucGFnZU51bWJlckxhYmVsLHtwYWdlOnR9KSsobj8iICI6IiIpLCJhcmlhLWN1cnJlbnQiOm4/InBhZ2UiOm51bGx9LHQpO3QtQ1tyLTFdPjEmJk8ucHVzaChvLmEuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToicnQtcGFnZS1lbGxpcHNpcyIsa2V5OiJlbGxpcHNpcy0iLmNvbmNhdCh0KSxyb2xlOiJzZXBhcmF0b3IifSwiLi4uIikpLE8ucHVzaChhKX0pKSx3PU99ZWxzZXt2YXIgaz0ianVtcCI9PT1uP3RoaXMucmVuZGVyUGFnZUp1bXAodGhpcy5nZXRQYWdlSnVtcFByb3BlcnRpZXMoKSk6UCxUPU1hdGgubWF4KHMsMSk7dz1vLmEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJydC1wYWdlLW51bWJlcnMifSxYKGcucGFnZU51bWJlcnMse3BhZ2U6ayxwYWdlczpUfSkpfXZhciBqPW8uYS5jcmVhdGVFbGVtZW50KGJlLHtjbGFzc05hbWU6InJ0LXByZXYtYnV0dG9uIixvbkNsaWNrOmZ1bmN0aW9uKCl7dSYmZS5jaGFuZ2VQYWdlKFAtMSl9LGRpc2FibGVkOiF1LCJhcmlhLWRpc2FibGVkIjp1P251bGw6InRydWUiLCJhcmlhLWxhYmVsIjpnLnBhZ2VQcmV2aW91c0xhYmVsfSxnLnBhZ2VQcmV2aW91cyksRT1vLmEuY3JlYXRlRWxlbWVudChiZSx7Y2xhc3NOYW1lOiJydC1uZXh0LWJ1dHRvbiIsb25DbGljazpmdW5jdGlvbigpe2MmJmUuY2hhbmdlUGFnZShQKzEpfSxkaXNhYmxlZDohYywiYXJpYS1kaXNhYmxlZCI6Yz9udWxsOiJ0cnVlIiwiYXJpYS1sYWJlbCI6Zy5wYWdlTmV4dExhYmVsfSxnLnBhZ2VOZXh0KTtyZXR1cm4gby5hLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp0ZShmLCJydC1wYWdpbmF0aW9uIixKKHAucGFnaW5hdGlvblN0eWxlKSksc3R5bGU6ZH0sby5hLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToicnQtcGFnaW5hdGlvbi1pbmZvIn0seCxTKSxvLmEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJydC1wYWdpbmF0aW9uLW5hdiJ9LGosdyxFKSl9fV0pJiZsZSh0LnByb3RvdHlwZSxyKSxuJiZsZSh0LG4pLGl9KG8uYS5Db21wb25lbnQpO2Z1bmN0aW9uIHZlKGUpe3JldHVybih2ZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIHdlKCl7cmV0dXJuKHdlPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24geGUoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIFRlKGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSkpcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxrZShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBTZShlLHQpe3ZhciByPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKG49bi5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksci5wdXNoLmFwcGx5KHIsbil9cmV0dXJuIHJ9ZnVuY3Rpb24gUGUoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/U2UoT2JqZWN0KHIpLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtDZShlLHQsclt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhyKSk6U2UoT2JqZWN0KHIpKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iocix0KSl9KSl9cmV0dXJuIGV9ZnVuY3Rpb24gQ2UoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIE9lKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgU3ltYm9sfHwhKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSkpKXJldHVybjt2YXIgcj1bXSxuPSEwLGE9ITEsbz12b2lkIDA7dHJ5e2Zvcih2YXIgaSxsPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0oaT1sLm5leHQoKSkuZG9uZSkmJihyLnB1c2goaS52YWx1ZSksIXR8fHIubGVuZ3RoIT09dCk7bj0hMCk7fWNhdGNoKGUpe2E9ITAsbz1lfWZpbmFsbHl7dHJ5e258fG51bGw9PWwucmV0dXJufHxsLnJldHVybigpfWZpbmFsbHl7aWYoYSl0aHJvdyBvfX1yZXR1cm4gcn0oZSx0KXx8a2UoZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGtlKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBUZShlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP1RlKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBUZShlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIGplKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgcixuLGE9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciByLG4sYT17fSxvPU9iamVjdC5rZXlzKGUpO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspcj1vW25dLHQuaW5kZXhPZihyKT49MHx8KGFbcl09ZVtyXSk7cmV0dXJuIGF9KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iobj0wO248by5sZW5ndGg7bisrKXI9b1tuXSx0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHIpJiYoYVtyXT1lW3JdKX1yZXR1cm4gYX1mdW5jdGlvbiBFZShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIFJlKGUsdCl7cmV0dXJuKFJlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX1mdW5jdGlvbiBOZShlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLG49RGUoZSk7aWYodCl7dmFyIGE9RGUodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIEFlKHRoaXMscil9fWZ1bmN0aW9uIEFlKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09dmUodCkmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2Z1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSk6dH1mdW5jdGlvbiBEZShlKXtyZXR1cm4oRGU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0pKGUpfXllLmRlZmF1bHRQcm9wcz17cGFnaW5hdGlvblR5cGU6Im51bWJlcnMiLGF1dG9IaWRlUGFnaW5hdGlvbjohMCxzaG93UGFnZUluZm86ITAsbGFuZ3VhZ2U6cX07dmFyIHplPWZ1bmN0aW9uKGUpe3ZhciB0PWUuc2VsZWN0VHlwZSxyPWUuY2hlY2tlZCxuPWUubGFiZWwsYT1lLnJvd3MsaT1lLnJvdyxsPWUub25DbGljaztyZXR1cm4gby5hLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToicnQtc2VsZWN0In0sby5hLmNyZWF0ZUVsZW1lbnQoImlucHV0Iix7dHlwZTp0fHwiY2hlY2tib3giLGNsYXNzTmFtZToicnQtc2VsZWN0LWlucHV0IiwiYXJpYS1sYWJlbCI6bixjaGVja2VkOnIsb25DbGljazpmdW5jdGlvbihlKXtpZihlLnN0b3BQcm9wYWdhdGlvbigpLGEpe3ZhciB0PWEubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5faW5kZXh9KSk7bCh0LCFyKX1lbHNlIGlmKGkpe3ZhciBuPWkuX2luZGV4O2wobil9fSxvbkNoYW5nZTpmdW5jdGlvbigpe319KSwi4oCLIil9O2Z1bmN0aW9uIF9lKGUpe3JldHVybihfZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIEZlKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gTWUoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBJZShlLHQpe3JldHVybihJZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9ZnVuY3Rpb24gTGUoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoRGF0ZSxbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuPUtlKGUpO2lmKHQpe3ZhciBhPUtlKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsYSl9ZWxzZSByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBXZSh0aGlzLHIpfX1mdW5jdGlvbiBXZShlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PV9lKHQpJiYiZnVuY3Rpb24iIT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gS2UoZSl7cmV0dXJuKEtlPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX12YXIgQmU9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJkllKGUsdCl9KG8sZSk7dmFyIHQscixuLGE9TGUobyk7ZnVuY3Rpb24gbygpe3JldHVybiBGZSh0aGlzLG8pLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0PW8sKHI9W3trZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc3RhdGljUmVuZGVyKCl9fSx7a2V5OiJzdGF0aWNSZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7d2luZG93LkhUTUxXaWRnZXRzJiYoby50aHJvdHRsZWQ/by5sYXN0Q2FsbD0hMDood2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpLG8udGhyb3R0bGVkPSEwLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7by5sYXN0Q2FsbCYmd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpLG8udGhyb3R0bGVkPSExLG8ubGFzdENhbGw9ITF9KSkpKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbn19XSkmJk1lKHQucHJvdG90eXBlLHIpLG4mJk1lKHQsbiksb30oby5hLkNvbXBvbmVudCk7ZnVuY3Rpb24gSGUoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIEdlKGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSkpcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxmdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybjtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIEdlKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpOyJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKTtpZigiTWFwIj09PXJ8fCJTZXQiPT09cilyZXR1cm4gQXJyYXkuZnJvbShlKTtpZigiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpKXJldHVybiBHZShlLHQpfShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBHZShlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIFVlKGUpe3JldHVybiAwPT09KGU9cWUoZSkpLmxlbmd0aD8iIjokZShlLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0fSksMCksMTIpfWZ1bmN0aW9uIFZlKGUpe3JldHVybiAwPT09KGU9cWUoZSkpLmxlbmd0aD8iIjokZShVZShlKS9lLmxlbmd0aCwxMil9dmFyIEplPXttZWFuOlZlLHN1bTpVZSxtYXg6ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT0oZT1xZShlKSkubGVuZ3RoPyIiOk1hdGgubWF4LmFwcGx5KG51bGwsZSl9LG1pbjpmdW5jdGlvbihlKXtyZXR1cm4gMD09PShlPXFlKGUpKS5sZW5ndGg/IiI6TWF0aC5taW4uYXBwbHkobnVsbCxlKX0sbWVkaWFuOmZ1bmN0aW9uKGUpe3JldHVybiAwPT09KGU9cWUoZSkpLmxlbmd0aD8iIjooZS5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLXR9KSksZS5sZW5ndGglMj09MT9lWyhlLmxlbmd0aC0xKS8yXTpWZShlLnNsaWNlKGUubGVuZ3RoLzItMSxlLmxlbmd0aC8yKzEpKSl9LGNvdW50OmZ1bmN0aW9uKGUpe3JldHVybiBlLmxlbmd0aH0sdW5pcXVlOmZ1bmN0aW9uKGUpe3JldHVybiBIZShuZXcgU2V0KGUpKS5qb2luKCIsICIpfSxmcmVxdWVuY3k6ZnVuY3Rpb24oZSl7dmFyIHQ9e307cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dFtlXT10W2VdfHwwLHRbZV0rPTF9KSksT2JqZWN0LmtleXModCkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZSsodFtlXT4xPyIgKCIuY29uY2F0KHRbZV0sIikiKToiIil9KSkuam9pbigiLCAiKX19O2Z1bmN0aW9uICRlKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTozO2lmKCFOdW1iZXIuaXNGaW5pdGUoZSkpcmV0dXJuIGU7dD10PjA/dDowO3ZhciByPU1hdGgucG93KDEwLHQpO3JldHVybiBNYXRoLnNpZ24oZSkqTWF0aC5yb3VuZChNYXRoLmFicyhlKSpyKS9yfWZ1bmN0aW9uIHFlKGUpe3JldHVybiBlLm1hcChYZSkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGV9KSl9ZnVuY3Rpb24gWGUoZSl7cmV0dXJuKG51bGw9PWV8fHZvaWQgMD09PWV8fFllKGUpKSYmKGU9bnVsbCksIkluZiI9PT1lJiYoZT0xLzApLCItSW5mIj09PWUmJihlPS0xLzApLCJzdHJpbmciPT10eXBlb2YgZSYmKGU9TnVtYmVyKGUpKSxlfWZ1bmN0aW9uIFllKGUpe3JldHVybiJOQSI9PT1lfHwiTmFOIj09PWV9ZnVuY3Rpb24gWmUoZSx0KXt2YXIgcj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihuPW4uZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLHIucHVzaC5hcHBseShyLG4pfXJldHVybiByfWZ1bmN0aW9uIFFlKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP1plKE9iamVjdChyKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZXQoZSx0LHJbdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocikpOlplKE9iamVjdChyKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIGV0KGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX1mdW5jdGlvbiB0dChlLHQpe3ZhciByO2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgU3ltYm9sfHxudWxsPT1lW1N5bWJvbC5pdGVyYXRvcl0pe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuO2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gcnQoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7Ik9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpO2lmKCJNYXAiPT09cnx8IlNldCI9PT1yKXJldHVybiBBcnJheS5mcm9tKGUpO2lmKCJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QocikpcmV0dXJuIHJ0KGUsdCl9KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIG8saT0hMCxsPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1lW1N5bWJvbC5pdGVyYXRvcl0oKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBpPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe2w9ITAsbz1lfSxmOmZ1bmN0aW9uKCl7dHJ5e2l8fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyBvfX19fWZ1bmN0aW9uIHJ0KGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gbnQoZSx0KXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPSh0PVFlKHt9LHQpKS5jb2x1bW5zO3QuY29sdW1ucz1bXSxlPWUucmVkdWNlKChmdW5jdGlvbihlLG4pe3JldHVybiBuLmlkPT09clswXT8oZS5wdXNoKHQpLHQuY29sdW1ucy5wdXNoKG4pKTpyLmluY2x1ZGVzKG4uaWQpP3QuY29sdW1ucy5wdXNoKG4pOmUucHVzaChuKSxlfSksW10pfSkpO3ZhciByLG49W107cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5jb2x1bW5zPyhuLnB1c2goZSkscj1udWxsKToocnx8KHI9e2NvbHVtbnM6W119LG4ucHVzaChyKSksci5jb2x1bW5zLnB1c2goZSkpfSkpLGU9bn1mdW5jdGlvbiBhdCgpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSx0PWUudHlwZSxyPWUubmFMYXN0O3JldHVybiBmdW5jdGlvbihlLG4sYSl7cmV0dXJuIm51bWVyaWMiPT09dD8oZT1YZShlKSxuPVhlKG4pKTooZT0ic3RyaW5nIj09dHlwZW9mIGU/ZS50b0xvd2VyQ2FzZSgpOmUsbj0ic3RyaW5nIj09dHlwZW9mIG4/bi50b0xvd2VyQ2FzZSgpOm4pLGU9PT1uPzA6bnVsbD09ZT9yP2E/LTE6MTotMTpudWxsPT1uP3I/YT8xOi0xOjE6ZT5uPzE6ZTxuPy0xOjB9fWZ1bmN0aW9uIG90KGUsdCl7dmFyIHI9dC5wcmVmaXgsbj10LnN1ZmZpeCxhPXQuZGlnaXRzLG89dC5zZXBhcmF0b3JzLGk9dC5wZXJjZW50LGw9dC5jdXJyZW5jeSxzPXQuZGF0ZXRpbWUsdT10LmRhdGUsYz10LnRpbWUsZj10LmhvdXIxMixkPXQubG9jYWxlcztpZigibnVtYmVyIj09dHlwZW9mIGUmJihvfHxpfHxsfHxudWxsIT1hfHxkKSl7dmFyIHA9e3VzZUdyb3VwaW5nOiEhb307aSYmKHAuc3R5bGU9InBlcmNlbnQiKSxsPyhwLnN0eWxlPSJjdXJyZW5jeSIscC5jdXJyZW5jeT1sKTpudWxsIT1hPyhwLm1pbmltdW1GcmFjdGlvbkRpZ2l0cz1NYXRoLm1pbihhLDE4KSxwLm1heGltdW1GcmFjdGlvbkRpZ2l0cz1NYXRoLm1pbihhLDE4KSk6cC5tYXhpbXVtRnJhY3Rpb25EaWdpdHM9MTgsZT1lLnRvTG9jYWxlU3RyaW5nKGR8fHZvaWQgMCxwKX1pZihzfHx1fHxjKXtkPWR8fHZvaWQgMDt2YXIgZz17fTtudWxsIT1mJiYoZy5ob3VyMTI9Zikscz9lPW5ldyBEYXRlKGUpLnRvTG9jYWxlU3RyaW5nKGQsZyk6dT8oIWUuaW5jbHVkZXMoIi0iKXx8ZS5pbmNsdWRlcygiVCIpfHxlLmluY2x1ZGVzKCJaIil8fChlPWUucmVwbGFjZSgvLS9nLCIvIikpLGU9bmV3IERhdGUoZSkudG9Mb2NhbGVEYXRlU3RyaW5nKGQsZykpOmMmJihlPW5ldyBEYXRlKGUpLnRvTG9jYWxlVGltZVN0cmluZyhkLGcpKX1yZXR1cm4gbnVsbCE9ciYmKGU9bnVsbCE9ZT9lOiIiLGU9U3RyaW5nKHIpK2UpLG51bGwhPW4mJihlPW51bGwhPWU/ZToiIixlKz1TdHJpbmcobikpLGV9ZnVuY3Rpb24gaXQoZSl7dmFyIHQ9bmV3IFJlZ0V4cCgiXiIrb2UoZSksImkiKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQudGVzdChlKX19ZnVuY3Rpb24gbHQoZSl7dmFyIHQ9bmV3IFJlZ0V4cChvZShlKSwiaSIpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC50ZXN0KGUpfX1yKDE1KSxyKDE4KTtmdW5jdGlvbiBzdChlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gY3QoZSl9KGUpfHxmdW5jdGlvbihlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fHV0KGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHV0KGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBjdChlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2N0KGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBjdChlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIGZ0KGUpe3JldHVybihmdD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIGR0KGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgcixuLGE9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciByLG4sYT17fSxvPU9iamVjdC5rZXlzKGUpO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspcj1vW25dLHQuaW5kZXhPZihyKT49MHx8KGFbcl09ZVtyXSk7cmV0dXJuIGF9KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iobj0wO248by5sZW5ndGg7bisrKXI9b1tuXSx0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHIpJiYoYVtyXT1lW3JdKX1yZXR1cm4gYX1mdW5jdGlvbiBwdChlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGd0KGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19ZnVuY3Rpb24gaHQoZSx0LHIpe3JldHVybiB0JiZndChlLnByb3RvdHlwZSx0KSxyJiZndChlLHIpLGV9ZnVuY3Rpb24gbXQoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmYnQoZSx0KX1mdW5jdGlvbiBidChlLHQpe3JldHVybihidD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9ZnVuY3Rpb24geXQoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoRGF0ZSxbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuPXh0KGUpO2lmKHQpe3ZhciBhPXh0KHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsYSl9ZWxzZSByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB2dCh0aGlzLHIpfX1mdW5jdGlvbiB2dChlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PWZ0KHQpJiYiZnVuY3Rpb24iIT10eXBlb2YgdD93dChlKTp0fWZ1bmN0aW9uIHd0KGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiB4dChlKXtyZXR1cm4oeHQ9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0pKGUpfWZ1bmN0aW9uIFN0KCl7cmV0dXJuKFN0PU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gUHQoZSx0KXt2YXIgcj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihuPW4uZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLHIucHVzaC5hcHBseShyLG4pfXJldHVybiByfWZ1bmN0aW9uIEN0KGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP1B0KE9iamVjdChyKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T3QoZSx0LHJbdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocikpOlB0KE9iamVjdChyKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIE90KGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX12YXIga3Q9ZnVuY3Rpb24oZSl7cmV0dXJue3JvbGU6InRhYmxlIixjbGFzc05hbWU6SihlLnRoZW1lLnRhYmxlU3R5bGUpfX0sVHQ9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXt9O24ucm9sZT1yLnNlbGVjdGFibGU/ImNlbGwiOiJjb2x1bW5oZWFkZXIiLG4uY2xhc3NOYW1lPUooZS50aGVtZS5oZWFkZXJTdHlsZSk7dmFyIGE9cmUoci5zb3J0YWJsZSxlLnNvcnRhYmxlKTtpZihhKXt2YXIgbz1lLnNvcnRlZC5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4gZS5pZD09PXIuaWR9KSksaT1vP28uZGVzYz8iZGVzY2VuZGluZyI6ImFzY2VuZGluZyI6Im5vbmUiLGw9cmUoci5kZWZhdWx0U29ydERlc2MsZS5kZWZhdWx0U29ydERlc2MpPyJkZXNjZW5kaW5nIjoiYXNjZW5kaW5nIixzPWUuY3VycmVudGx5UmVzaXppbmcmJmUuY3VycmVudGx5UmVzaXppbmcuaWQ9PT1yLmlkO249Q3QoQ3Qoe30sbikse30seyJhcmlhLWxhYmVsIjpYKGUubGFuZ3VhZ2Uuc29ydExhYmVsLHtuYW1lOnIubmFtZX0pLCJhcmlhLXNvcnQiOmksZGVmYXVsdFNvcnRPcmRlcjpsLGlzU29ydGFibGU6YSxpc1NvcnRlZDohIW8saXNSZXNpemluZzpzfSl9cmV0dXJuIG59LGp0PWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj17fTtpZihyLmNvbHVtbnMuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUucGl2b3RlZH0pKSl7dmFyIGE9ci5jb2x1bW5zO2EucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlJiZlPT09dC5wYXJlbnRDb2x1bW4mJnQucGFyZW50Q29sdW1ufSksYVswXS5wYXJlbnRDb2x1bW4pLkhlYWRlcnx8KG4uSGVhZGVyUGl2b3RlZD1lLmxhbmd1YWdlLmRlZmF1bHRHcm91cEhlYWRlcil9cmV0dXJuIHIuSGVhZGVyP249Q3QoQ3Qoe30sbikse30seyJhcmlhLWNvbHNwYW4iOnIuY29sdW1ucy5sZW5ndGgscm9sZToiY29sdW1uaGVhZGVyIixjbGFzc05hbWU6dGUoInJ0LXRoLWdyb3VwIixyLmNsYXNzTmFtZSxKKGUudGhlbWUuZ3JvdXBIZWFkZXJTdHlsZSkpfSk6bi5jbGFzc05hbWU9dGUoInJ0LXRoLWdyb3VwLW5vbmUiLEooZS50aGVtZS5ncm91cEhlYWRlclN0eWxlKSksbn0sRXQ9ZnVuY3Rpb24oKXtyZXR1cm57cm9sZToicm93In19LFJ0PWZ1bmN0aW9uKCl7cmV0dXJue3JvbGU6InJvdyJ9fSxOdD1mdW5jdGlvbihlKXtyZXR1cm57cm9sZToicm93IixjbGFzc05hbWU6dGUoSihlLnRoZW1lLnJvd1N0eWxlKSl9fSxBdD1mdW5jdGlvbihlKXtyZXR1cm57cm9sZToiY2VsbCIsY2xhc3NOYW1lOnRlKCJydC10ZC1maWx0ZXIiLEooZS50aGVtZS5maWx0ZXJDZWxsU3R5bGUpKX19LER0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9e307cmV0dXJuIHIuY2xhc3NOYW1lPUooZS50aGVtZS5yb3dHcm91cFN0eWxlKSx0fHwoclsiYXJpYS1oaWRkZW4iXT0idHJ1ZSIpLHJ9LHp0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9e307cmV0dXJuIHIuY2xhc3NOYW1lPUooZS50aGVtZS5yb3dTdHlsZSksdD8oci5yb2xlPSJyb3ciLHIpOnJ9LF90PWZ1bmN0aW9uKGUsdCl7dmFyIHI9e307cmV0dXJuIHIuY2xhc3NOYW1lPUooZS50aGVtZS5jZWxsU3R5bGUpLHQ/KHIucm9sZT0iY2VsbCIscik6cn0sRnQ9ZnVuY3Rpb24oKXtyZXR1cm57cm9sZToicm93In19LE10PWZ1bmN0aW9uKGUpe3JldHVybntyb2xlOiJjZWxsIixjbGFzc05hbWU6dGUoInJ0LXRmb290LXRkIixKKGUudGhlbWUuZm9vdGVyU3R5bGUpKX19LEl0PWkuUmVhY3RUYWJsZURlZmF1bHRzLlRoZWFkQ29tcG9uZW50LEx0PWkuUmVhY3RUYWJsZURlZmF1bHRzLlRmb290Q29tcG9uZW50O09iamVjdC5hc3NpZ24oaS5SZWFjdFRhYmxlRGVmYXVsdHMse1RoZWFkQ29tcG9uZW50OmZ1bmN0aW9uKGUpe3JldHVybiBvLmEuY3JlYXRlRWxlbWVudChJdCxTdCh7cm9sZToicm93Z3JvdXAifSxlKSl9LFRmb290Q29tcG9uZW50OmZ1bmN0aW9uKGUpe3JldHVybiBvLmEuY3JlYXRlRWxlbWVudChMdCxTdCh7cm9sZToicm93Z3JvdXAifSxlKSl9fSk7dmFyIFd0PWkuUmVhY3RUYWJsZURlZmF1bHRzLlRoQ29tcG9uZW50LEt0PWZ1bmN0aW9uKGUpe210KHIsZSk7dmFyIHQ9eXQocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gcHQodGhpcyxyKSwobj10LmNhbGwodGhpcyxlKSkuc3RhdGU9e3Nob3dGb2N1czohMSxjbGlja2VkOiExfSxufXJldHVybiBodChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMscj10LkhlYWRlclBpdm90ZWQsbj10LmRlZmF1bHRTb3J0T3JkZXIsYT10LmlzU29ydGFibGUsbz10LmlzU29ydGVkLGk9dC5pc1Jlc2l6aW5nLGw9ZHQodCxbIkhlYWRlclBpdm90ZWQiLCJkZWZhdWx0U29ydE9yZGVyIiwiaXNTb3J0YWJsZSIsImlzU29ydGVkIiwiaXNSZXNpemluZyJdKTtpZihyJiYobC5jaGlsZHJlbj1yKSxhKXt2YXIgcz1sLnRvZ2dsZVNvcnQsdT1mdW5jdGlvbih0KXtzJiZzKHQpLGUuc2V0U3RhdGUoe3Nob3dGb2N1czohMX0pfTtsPUN0KEN0KHt9LGwpLHt9LHt0b2dnbGVTb3J0OnUsb25LZXlQcmVzczpmdW5jdGlvbihlKXt2YXIgdD1lLndoaWNofHxlLmtleUNvZGU7MTMhPT10JiYzMiE9PXR8fHUoZSl9LG9uTW91c2VEb3duOmZ1bmN0aW9uKHQpeyh0LmRldGFpbD4xfHx0LnNoaWZ0S2V5KSYmdC5wcmV2ZW50RGVmYXVsdCgpLGUuc2V0U3RhdGUoe2NsaWNrZWQ6ITB9KX0sb25Gb2N1czpmdW5jdGlvbigpe2Uuc3RhdGUuY2xpY2tlZHx8b3x8aXx8ZS5zZXRTdGF0ZSh7c2hvd0ZvY3VzOiEwfSl9LG9uQmx1cjpmdW5jdGlvbigpe2Uuc2V0U3RhdGUoe3Nob3dGb2N1czohMSxjbGlja2VkOiExfSl9LHRhYkluZGV4OiIwIiwiZGF0YS1zb3J0LWhpbnQiOnRoaXMuc3RhdGUuc2hvd0ZvY3VzP246dm9pZCAwfSl9cmV0dXJuIFd0KGwpfX1dKSxyfShvLmEuQ29tcG9uZW50KTtPYmplY3QuYXNzaWduKGkuUmVhY3RUYWJsZURlZmF1bHRzLHtUaENvbXBvbmVudDpLdH0pO3ZhciBCdD1mdW5jdGlvbihlKXtyZXR1cm57c3RhdGU6ZX19LEh0PWkuUmVhY3RUYWJsZURlZmF1bHRzLlRib2R5Q29tcG9uZW50LEd0PWkuUmVhY3RUYWJsZURlZmF1bHRzLk5vRGF0YUNvbXBvbmVudDtPYmplY3QuYXNzaWduKGkuUmVhY3RUYWJsZURlZmF1bHRzLHtUYm9keUNvbXBvbmVudDpmdW5jdGlvbihlKXt2YXIgdD1lLnN0YXRlLHI9ZS5jbGFzc05hbWUsbj1lLmNoaWxkcmVuLGE9ZHQoZSxbInN0YXRlIiwiY2xhc3NOYW1lIiwiY2hpbGRyZW4iXSksaT10LnBhZ2VSb3dzLGw9dC50aGVtZSxzPXQubGFuZ3VhZ2UsdT0haS5sZW5ndGgmJm8uYS5jcmVhdGVFbGVtZW50KEd0LG51bGwscy5ub0RhdGEpO3JldHVybiByPXU/dGUociwicnQtdGJvZHktbm9EYXRhIik6cixyPXRlKHIsSihsLnRhYmxlQm9keVN0eWxlKSksby5hLmNyZWF0ZUVsZW1lbnQoSHQsU3Qoe3JvbGU6InJvd2dyb3VwIixjbGFzc05hbWU6cn0sYSksbix1KX0sTm9EYXRhQ29tcG9uZW50OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fSksT2JqZWN0LmFzc2lnbihpLlJlYWN0VGFibGVEZWZhdWx0cyx7RmlsdGVyQ29tcG9uZW50OmZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sdW1uLHI9ZS5maWx0ZXIsbj1lLm9uQ2hhbmdlLGE9dC5uYW1lLGk9dC50aGVtZSxsPXQubGFuZ3VhZ2U7cmV0dXJuIG8uYS5jcmVhdGVFbGVtZW50KCJpbnB1dCIse3R5cGU6InRleHQiLGNsYXNzTmFtZTp0ZSgicnQtZmlsdGVyIixKKGkuZmlsdGVySW5wdXRTdHlsZSkpLHN0eWxlOnt3aWR0aDoiMTAwJSJ9LHZhbHVlOnI/ci52YWx1ZToiIixvbkNoYW5nZTpmdW5jdGlvbihlKXtyZXR1cm4gbihlLnRhcmdldC52YWx1ZSl9LHBsYWNlaG9sZGVyOmwuZmlsdGVyUGxhY2Vob2xkZXIsImFyaWEtbGFiZWwiOlgobC5maWx0ZXJMYWJlbCx7bmFtZTphfSl9KX19KSxPYmplY3QuYXNzaWduKGkuUmVhY3RUYWJsZURlZmF1bHRzLHtFeHBhbmRlckNvbXBvbmVudDpmdW5jdGlvbihlKXt2YXIgdD1lLmlzRXhwYW5kZWQscj1lLmNvbHVtbixuPXIudGhlbWUsYT1yLmxhbmd1YWdlLGk9dD9hLmRldGFpbHNDb2xsYXBzZUxhYmVsOmEuZGV0YWlsc0V4cGFuZExhYmVsO3JldHVybiBvLmEuY3JlYXRlRWxlbWVudCgiYnV0dG9uIix7Y2xhc3NOYW1lOiJydC1leHBhbmRlci1idXR0b24iLCJhcmlhLWxhYmVsIjppfSxvLmEuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTp0ZSgicnQtZXhwYW5kZXIiLHQmJiItb3BlbiIsSihuLmV4cGFuZGVyU3R5bGUpKSx0YWJJbmRleDoiLTEiLCJhcmlhLWhpZGRlbiI6InRydWUifSwi4oCiIikpfX0pO3ZhciBVdD1pLlJlYWN0VGFibGVEZWZhdWx0cy5Mb2FkaW5nQ29tcG9uZW50O09iamVjdC5hc3NpZ24oaS5SZWFjdFRhYmxlRGVmYXVsdHMse0xvYWRpbmdDb21wb25lbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sb2FkaW5nLHI9ZHQoZSxbImxvYWRpbmciXSk7cmV0dXJuIHQ/VXQoQ3Qoe2xvYWRpbmc6dH0scikpOm51bGx9fSksbC5hLnByb3BUeXBlcz1wLGwuYS5wcm90b3R5cGUub2xkQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcz1sLmEucHJvdG90eXBlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLGwuYS5wcm90b3R5cGUuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzO2U9Q3Qoe30sZSksdGhpcy5wcm9wcy5kYXRhS2V5JiZ0aGlzLnByb3BzLmRhdGFLZXk9PT1lLmRhdGFLZXkmJihlLmRhdGE9dGhpcy5wcm9wcy5kYXRhLGUuY29sdW1ucz10aGlzLnByb3BzLmNvbHVtbnMpO3JldHVyblsicGl2b3RCeSIsInNvcnRlZCIsImZpbHRlcmVkIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7SlNPTi5zdHJpbmdpZnkoci5wcm9wc1t0XSk9PT1KU09OLnN0cmluZ2lmeShlW3RdKSYmKGVbdF09ci5wcm9wc1t0XSl9KSksdGhpcy5wcm9wcy5zZWFyY2hhYmxlIT09ZS5zZWFyY2hhYmxlJiYoZS5maWx0ZXJlZD10aGlzLnN0YXRlLmZpbHRlcmVkLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWQhPT1yLnByb3BzLnNlYXJjaEtleX0pKSksdGhpcy5vbGRDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKGUsdCl9LGwuYS5wcm90b3R5cGUub2xkRmlsdGVyRGF0YT1sLmEucHJvdG90eXBlLmZpbHRlckRhdGEsbC5hLnByb3RvdHlwZS5maWx0ZXJEYXRhPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhPW47aWYodGhpcy5wcm9wcy5zZWFyY2hhYmxlKXt2YXIgbz1uLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY3JlYXRlTWF0Y2hlcn0pKSxpPXtpZDp0aGlzLnByb3BzLnNlYXJjaEtleSxmaWx0ZXJBbGw6ITAsZmlsdGVyYWJsZTohMCxmaWx0ZXJNZXRob2Q6ZnVuY3Rpb24oZSx0KXtpZighZS52YWx1ZSlyZXR1cm4gdDt2YXIgcj1vLnJlZHVjZSgoZnVuY3Rpb24odCxyKXtyZXR1cm4gdFtyLmlkXT1yLmNyZWF0ZU1hdGNoZXIoZS52YWx1ZSksdH0pLHt9KTtyZXR1cm4gdD10LmZpbHRlcigoZnVuY3Rpb24oZSl7aWYoZS5fc3ViUm93cylyZXR1cm4hMDt2YXIgdCxuPWZ1bmN0aW9uKGUsdCl7dmFyIHI7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBTeW1ib2x8fG51bGw9PWVbU3ltYm9sLml0ZXJhdG9yXSl7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9dXQoZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgbyxpPSEwLGw9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPWVbU3ltYm9sLml0ZXJhdG9yXSgpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIGk9ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7bD0hMCxvPWV9LGY6ZnVuY3Rpb24oKXt0cnl7aXx8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IG99fX19KG8pO3RyeXtmb3Iobi5zKCk7ISh0PW4ubigpKS5kb25lOyl7dmFyIGE9dC52YWx1ZSxpPWUuX29yaWdpbmFsW2EuaWRdO2lmKHJbYS5pZF0oaSkpcmV0dXJuITB9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfX0pKX19O2E9YS5jb25jYXQoaSl9aWYodGhpcy5wcm9wcy5jcm9zc3RhbGtHcm91cCl7dmFyIGw9e2lkOnRoaXMucHJvcHMuY3Jvc3N0YWxrSWQsZmlsdGVyQWxsOiEwLGZpbHRlcmFibGU6ITAsZmlsdGVyTWV0aG9kOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudmFsdWU/dD10LmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuISF0Ll9zdWJSb3dzfHwoISFlLnZhbHVlLmluY2x1ZGVzKHQuX2luZGV4KXx8dm9pZCAwKX0pKTp0fX07YT1hLmNvbmNhdChsKX1yZXR1cm4gdGhpcy5vbGRGaWx0ZXJEYXRhKGUsdCxyLGEpfTt2YXIgVnQsSnQsJHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zZWFyY2hWYWx1ZSxyPWUub25TZWFyY2hDaGFuZ2Usbj1lLnNlYXJjaFBsYWNlaG9sZGVyLGw9ZS5zZWFyY2hMYWJlbCxzPWUuc2VhcmNoQ2xhc3NOYW1lLHU9ZHQoZSxbInNlYXJjaFZhbHVlIiwib25TZWFyY2hDaGFuZ2UiLCJzZWFyY2hQbGFjZWhvbGRlciIsInNlYXJjaExhYmVsIiwic2VhcmNoQ2xhc3NOYW1lIl0pLGM9by5hLmNyZWF0ZUVsZW1lbnQoImlucHV0Iix7dHlwZToidGV4dCIsdmFsdWU6dCxvbkNoYW5nZTpyLGNsYXNzTmFtZTp0ZSgicnQtc2VhcmNoIixzKSxwbGFjZWhvbGRlcjpuLCJhcmlhLWxhYmVsIjpsfSk7cmV0dXJuIG8uYS5jcmVhdGVFbGVtZW50KGEuRnJhZ21lbnQsbnVsbCxjLG8uYS5jcmVhdGVFbGVtZW50KGkuUmVhY3RUYWJsZURlZmF1bHRzLlRhYmxlQ29tcG9uZW50LHUpKX0scXQ9KFZ0PWwuYSwoSnQ9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJlJlKGUsdCl9KGksZSk7dmFyIHQscixuLGE9TmUoaSk7ZnVuY3Rpb24gaShlKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxpKSxhLmNhbGwodGhpcyxlKX1yZXR1cm4gdD1pLChyPVt7a2V5OiJyb3dTZWxlY3RvciIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcyxyPXQuaXNTZWxlY3RlZCxuPXQudG9nZ2xlU2VsZWN0aW9uLGE9dC5zZWxlY3RUeXBlLGk9dC5TZWxlY3RJbnB1dENvbXBvbmVudCxsPXQubGFuZ3VhZ2Uscz1yKGUuaW5kZXgpLHU9e2NoZWNrZWQ6cyxvbkNsaWNrOm4sc2VsZWN0VHlwZTphLHJvdzplLnJvdyxsYWJlbDpzP2wuZGVzZWxlY3RSb3dMYWJlbDpsLnNlbGVjdFJvd0xhYmVsfTtyZXR1cm4gby5hLmNyZWF0ZUVsZW1lbnQoaSx1KX19LHtrZXk6InN1YlJvd1NlbGVjdG9yIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnByb3BzLHI9dC5pc1NlbGVjdGVkLG49dC50b2dnbGVBbGwsYT10LnNlbGVjdFR5cGUsaT10LlNlbGVjdElucHV0Q29tcG9uZW50LGw9dC5sYW5ndWFnZTtpZigicmFkaW8iPT09YSlyZXR1cm4gbnVsbDt2YXIgcz1lLnN1YlJvd3M7aWYoIXN8fHMuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuX2FnZ3JlZ2F0ZWR9KSkpcmV0dXJuIG51bGw7dmFyIHU9cy5ldmVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuIHIoZS5faW5kZXgpfSkpLGM9e2NoZWNrZWQ6dSxvbkNsaWNrOm4sc2VsZWN0VHlwZTphLHJvd3M6cyxsYWJlbDp1P2wuZGVzZWxlY3RBbGxTdWJSb3dzTGFiZWw6bC5zZWxlY3RBbGxTdWJSb3dzTGFiZWx9O3JldHVybiBvLmEuY3JlYXRlRWxlbWVudChpLGMpfX0se2tleToiaGVhZFNlbGVjdG9yIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnByb3BzLHI9dC5pc1NlbGVjdGVkLG49dC5zZWxlY3RUeXBlLGE9dC50b2dnbGVBbGwsaT10LlNlbGVjdEFsbElucHV0Q29tcG9uZW50LGw9dC5sYW5ndWFnZTtpZigicmFkaW8iPT09bilyZXR1cm4gbnVsbDt2YXIgcz1lLmRhdGE7aWYoMD09PXMubGVuZ3RofHxzLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlLl9hZ2dyZWdhdGVkfSkpKXJldHVybiBudWxsO3ZhciB1PXMuZXZlcnkoKGZ1bmN0aW9uKGUpe3JldHVybiByKGUuX2luZGV4KX0pKSxjPXtjaGVja2VkOnUsb25DbGljazphLHNlbGVjdFR5cGU6bixyb3dzOnMsbGFiZWw6dT9sLmRlc2VsZWN0QWxsUm93c0xhYmVsOmwuc2VsZWN0QWxsUm93c0xhYmVsfTtyZXR1cm4gby5hLmNyZWF0ZUVsZW1lbnQoaSxjKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxyPXQuY29sdW1ucyxuPXQuc2VsZWN0V2lkdGgsYT10LmZvcndhcmRlZFJlZixpPWplKHQsWyJjb2x1bW5zIiwic2VsZWN0V2lkdGgiLCJmb3J3YXJkZWRSZWYiXSksbD10aGlzLnByb3BzLHM9bC5pc1NlbGVjdGVkLHU9bC5zZWxlY3RUeXBlLGM9bC50b2dnbGVBbGwsZj1sLnRvZ2dsZVNlbGVjdGlvbixkPWwuc2VsZWN0SWQscD17fSxnPWZ1bmN0aW9uIGUodCl7dmFyIHIsbj1mdW5jdGlvbihlLHQpe3ZhciByO2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgU3ltYm9sfHxudWxsPT1lW1N5bWJvbC5pdGVyYXRvcl0pe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWtlKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIG8saT0hMCxsPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1lW1N5bWJvbC5pdGVyYXRvcl0oKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBpPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe2w9ITAsbz1lfSxmOmZ1bmN0aW9uKCl7dHJ5e2l8fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyBvfX19fSh0LmVudHJpZXMoKSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgYT1PZShyLnZhbHVlLDIpLG89YVswXSxpPWFbMV07aWYoaS5pZD09PWQpcmV0dXJuIHA9aSx0W29dPVBlKHt9LGkpLHRbb107aWYoaS5jb2x1bW5zKXt2YXIgbD1lKGkuY29sdW1ucyk7aWYobClyZXR1cm4gbH19fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXJldHVybiBudWxsfShyKTtyZXR1cm4gZ3x8KHI9W2c9e31dLmNvbmNhdCh4ZShyKSkpLE9iamVjdC5hc3NpZ24oZyx7aWQ6ZCxhY2Nlc3NvcjpmdW5jdGlvbigpe3JldHVybiIifSxIZWFkZXI6ZnVuY3Rpb24odCl7cmV0dXJuIGUuaGVhZFNlbGVjdG9yLmJpbmQoZSkodCl9LENlbGw6ZnVuY3Rpb24odCl7cmV0dXJuIGUucm93U2VsZWN0b3IuYmluZChlKSh0KX0sQWdncmVnYXRlZDpmdW5jdGlvbih0KXtyZXR1cm4gZS5zdWJSb3dTZWxlY3Rvci5iaW5kKGUpKHQpfSxnZXRQcm9wczpmdW5jdGlvbihlLHQscil7dmFyIG49cC5nZXRQcm9wcz9wLmdldFByb3BzKGUsdCxyKTp7fTtpZighdClyZXR1cm4gbjtpZihyLnBpdm90ZWQmJnQuYWdncmVnYXRlZClyZXR1cm4gbjtpZih0LmFnZ3JlZ2F0ZWQpe2lmKCJyYWRpbyI9PT11KXJldHVybiBuO3ZhciBhPXQuc3ViUm93cztpZighYXx8YS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gZS5fYWdncmVnYXRlZH0pKSlyZXR1cm4gbjtuLm9uQ2xpY2s9ZnVuY3Rpb24oKXt2YXIgZT1hLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuX2luZGV4fSkpLHQ9ZS5ldmVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuIHMoZSl9KSk7YyhlLCF0KX19ZWxzZSBuLm9uQ2xpY2s9ZnVuY3Rpb24oKXtmKHQuaW5kZXgpfTtyZXR1cm4gbn0sZ2V0SGVhZGVyUHJvcHM6ZnVuY3Rpb24oZSl7dmFyIHQ9e307aWYoInJhZGlvIj09PXUpcmV0dXJuIHQ7dmFyIHI9ZS5zb3J0ZWREYXRhO3JldHVybiFyfHxyLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlLl9hZ2dyZWdhdGVkfSkpfHwodC5vbkNsaWNrPWZ1bmN0aW9uKCl7dmFyIGU9ci5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLl9pbmRleH0pKSx0PWUuZXZlcnkoKGZ1bmN0aW9uKGUpe3JldHVybiBzKGUpfSkpO2MoZSwhdCl9KSx0fSxzZWxlY3RhYmxlOiEwLGZpbHRlcmFibGU6ITEsc29ydGFibGU6ITEscmVzaXphYmxlOiExLGNsYXNzTmFtZTp0ZSgicnQtdGQtc2VsZWN0IixwLmNsYXNzTmFtZSksaGVhZGVyQ2xhc3NOYW1lOnRlKCJydC10ZC1zZWxlY3QiLHAuaGVhZGVyQ2xhc3NOYW1lKSx3aWR0aDpwLndpZHRofHxufSksby5hLmNyZWF0ZUVsZW1lbnQoVnQsd2Uoe3JlZjphfSxpLHtjb2x1bW5zOnJ9KSl9fV0pJiZFZSh0LnByb3RvdHlwZSxyKSxuJiZFZSh0LG4pLGl9KG8uYS5Db21wb25lbnQpKS5kaXNwbGF5TmFtZT0iUlRTZWxlY3RUYWJsZSIsSnQuZGVmYXVsdFByb3BzPXtzZWxlY3RUeXBlOiJjaGVja2JveCIsc2VsZWN0V2lkdGg6MzYsc2VsZWN0SWQ6Ii5zZWxlY3Rpb24iLFNlbGVjdElucHV0Q29tcG9uZW50OnplLFNlbGVjdEFsbElucHV0Q29tcG9uZW50OnplLGxhbmd1YWdlOnF9LG8uYS5mb3J3YXJkUmVmKChmdW5jdGlvbihlLHQpe3JldHVybiBvLmEuY3JlYXRlRWxlbWVudChKdCx3ZSh7fSxlLHtmb3J3YXJkZWRSZWY6dH0pKX0pKSksWHQ9ZnVuY3Rpb24oZSl7bXQocixlKTt2YXIgdD15dChyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHB0KHRoaXMsciksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGh0KHIsW3trZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3dpbmRvdy5TaGlueSYmd2luZG93LlNoaW55LmJpbmRBbGwodGhpcy5lbCl9fSx7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt3aW5kb3cuU2hpbnkmJndpbmRvdy5TaGlueS51bmJpbmRBbGwodGhpcy5lbCl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMscj10LmNoaWxkcmVuLG49dC5odG1sLGE9e3JlZjpmdW5jdGlvbih0KXtyZXR1cm4gZS5lbD10fX07cmV0dXJuIGE9Q3QoQ3Qoe30sYSkse30sbj97ZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6e19faHRtbDpufX06e2NoaWxkcmVuOnJ9KSxvLmEuY3JlYXRlRWxlbWVudCgiZGl2IixhKX19XSkscn0oby5hLkNvbXBvbmVudCksWXQ9ZnVuY3Rpb24oZSl7bXQocixlKTt2YXIgdD15dChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBwdCh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLGUpKS5zdGF0ZT17c2VsZWN0ZWQ6bmV3IFNldChlLmRlZmF1bHRTZWxlY3RlZCksZXhwYW5kZWQ6ZS5kZWZhdWx0RXhwYW5kZWR8fHt9LGRhdGE6bnVsbCxkYXRhS2V5Om51bGx9LG4uaXNTZWxlY3RlZD1uLmlzU2VsZWN0ZWQuYmluZCh3dChuKSksbi50b2dnbGVTZWxlY3Rpb249bi50b2dnbGVTZWxlY3Rpb24uYmluZCh3dChuKSksbi50b2dnbGVTZWxlY3Rpb25BbGw9bi50b2dnbGVTZWxlY3Rpb25BbGwuYmluZCh3dChuKSksbi5zZXRTZWxlY3Rpb249bi5zZXRTZWxlY3Rpb24uYmluZCh3dChuKSksbi50b2dnbGVFeHBhbmQ9bi50b2dnbGVFeHBhbmQuYmluZCh3dChuKSksbi50b2dnbGVFeHBhbmRBbGw9bi50b2dnbGVFeHBhbmRBbGwuYmluZCh3dChuKSksbi50b2dnbGVDb2xsYXBzZUFsbD1uLnRvZ2dsZUNvbGxhcHNlQWxsLmJpbmQod3QobikpLG4uaXNFeHBhbmRlZD1uLmlzRXhwYW5kZWQuYmluZCh3dChuKSksbi50YWJsZUluc3RhbmNlPW8uYS5jcmVhdGVSZWYoKSxuLnRhYmxlRWxlbWVudD1vLmEuY3JlYXRlUmVmKCksbn1yZXR1cm4gaHQocixbe2tleToiaXNTZWxlY3RlZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc3RhdGUuc2VsZWN0ZWQuaGFzKGUpfX0se2tleToidG9nZ2xlU2VsZWN0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgU2V0KHRoaXMuc3RhdGUuc2VsZWN0ZWQpO3RoaXMuc3RhdGUuc2VsZWN0ZWQuaGFzKGUpP3QuZGVsZXRlKGUpOigic2luZ2xlIj09PXRoaXMucHJvcHMuc2VsZWN0aW9uJiZ0LmNsZWFyKCksdC5hZGQoZSkpLHRoaXMuc2V0U3RhdGUoe3NlbGVjdGVkOnR9LHRoaXMub25TZWxlY3RlZENoYW5nZSl9fSx7a2V5OiJ0b2dnbGVTZWxlY3Rpb25BbGwiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9bmV3IFNldCh0aGlzLnN0YXRlLnNlbGVjdGVkKTt0P2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIHIuYWRkKGUpfSkpOmUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZGVsZXRlKGUpfSkpLHRoaXMuc2V0U3RhdGUoe3NlbGVjdGVkOnJ9LHRoaXMub25TZWxlY3RlZENoYW5nZSl9fSx7a2V5OiJzZXRTZWxlY3Rpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO3RoaXMuc2V0U3RhdGUoe3NlbGVjdGVkOm5ldyBTZXQoZSl9LChmdW5jdGlvbigpe3JldHVybiB0Lm9uU2VsZWN0ZWRDaGFuZ2Uocil9KSl9fSx7a2V5OiJvblNlbGVjdGVkQ2hhbmdlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0sdD10aGlzLnByb3BzLHI9dC5zZWxlY3Rpb24sbj10LnNlbGVjdGlvbklkO2lmKHImJm4mJndpbmRvdy5TaGlueSl7dmFyIGE9c3QodGhpcy5zdGF0ZS5zZWxlY3RlZCkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZSsxfSkpO3dpbmRvdy5TaGlueS5vbklucHV0Q2hhbmdlKG4sYSl9ZSYmdGhpcy51cGRhdGVDcm9zc3RhbGtTZWxlY3Rpb24oKX19LHtrZXk6InVwZGF0ZUNyb3NzdGFsa1NlbGVjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKHRoaXMuY3RTZWxlY3Rpb24pe3ZhciB0PXN0KHRoaXMuc3RhdGUuc2VsZWN0ZWQpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUucHJvcHMuY3Jvc3N0YWxrS2V5W3RdfSkpO3RoaXMuY3RTZWxlY3Rpb24uc2V0KHQpfX19LHtrZXk6InRvZ2dsZUV4cGFuZCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1DdCh7fSx0aGlzLnN0YXRlLmV4cGFuZGVkKTtpZih0KXt2YXIgbj1uZShyLGUubmVzdGluZ1BhdGgpO3I9biYmbj09PXQuaWQ/YWUocixlLm5lc3RpbmdQYXRoLHZvaWQgMCk6YWUocixlLm5lc3RpbmdQYXRoLHQuaWQpfWVsc2V7dmFyIGE9bmUocixlLm5lc3RpbmdQYXRoKTtyPWFlKHIsZS5uZXN0aW5nUGF0aCxhP3ZvaWQgMDp7fSl9dGhpcy5zZXRTdGF0ZSh7ZXhwYW5kZWQ6cn0pfX0se2tleToiaXNFeHBhbmRlZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9bmUodGhpcy5zdGF0ZS5leHBhbmRlZCxlLm5lc3RpbmdQYXRoKTtyZXR1cm4gdCYmdD09PWUuY29sdW1uLmlkfX0se2tleToidG9nZ2xlRXhwYW5kQWxsIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMudGFibGVJbnN0YW5jZS5jdXJyZW50LnN0YXRlLHQ9ZS5jb2x1bW5zLHI9ZS5zb3J0ZWREYXRhLG49dC5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kZXRhaWxzfSkpLGE9ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdC5yZWR1Y2UoKGZ1bmN0aW9uKHQscixhKXtyZXR1cm4gci5fc3ViUm93cz90W2FdPWUoci5fc3ViUm93cyk6dFthXT1uP24uaWQ6e30sdH0pLHt9KX0ocik7dGhpcy5zZXRTdGF0ZSh7ZXhwYW5kZWQ6YX0pfX0se2tleToidG9nZ2xlQ29sbGFwc2VBbGwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zZXRTdGF0ZSh7ZXhwYW5kZWQ6e319KX19LHtrZXk6ImdldFJvd0luZm8iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIGUmJnRoaXMucHJvcHMuc2VsZWN0aW9uP0N0KHtzZWxlY3RlZDplLnN1YlJvd3MmJiJtdWx0aXBsZSI9PT10aGlzLnByb3BzLnNlbGVjdGlvbj9lLnN1YlJvd3MuZXZlcnkoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmlzU2VsZWN0ZWQoZS5faW5kZXgpfSkpOnRoaXMuaXNTZWxlY3RlZChlLmluZGV4KX0sZSk6ZX19LHtrZXk6Im9uVGFibGVVcGRhdGUiLHZhbHVlOmZ1bmN0aW9uKCl7aWYod2luZG93LlNoaW55JiZ3aW5kb3cuU2hpbnkub25JbnB1dENoYW5nZSYmIXRoaXMucHJvcHMubmVzdGVkKXt2YXIgZT10aGlzLnRhYmxlRWxlbWVudC5jdXJyZW50LHQ9dGhpcy50YWJsZUluc3RhbmNlLmN1cnJlbnQ7aWYoIWV8fCF0KXJldHVybjt2YXIgcj1lLnBhcmVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLXJlYWN0YWJsZS1vdXRwdXQiKTtpZighcilyZXR1cm47dmFyIG49e3BhZ2U6dC5zdGF0ZS5wYWdlKzEscGFnZVNpemU6dC5zdGF0ZS5wYWdlU2l6ZSxwYWdlczp0LnN0YXRlLnBhZ2VzLHNlbGVjdGVkOnN0KHRoaXMuc3RhdGUuc2VsZWN0ZWQpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUrMX0pKX07T2JqZWN0LmtleXMobikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7d2luZG93LlNoaW55Lm9uSW5wdXRDaGFuZ2UoIiIuY29uY2F0KHIsIl9fcmVhY3RhYmxlX18iKS5jb25jYXQoZSksbltlXSl9KSl9fX0se2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZih0aGlzLnN0YXRlLnNlbGVjdGVkLnNpemU+MCYmdGhpcy5vblNlbGVjdGVkQ2hhbmdlKCksITA9PT10aGlzLnN0YXRlLmV4cGFuZGVkJiZ0aGlzLnRvZ2dsZUV4cGFuZEFsbCgpLHdpbmRvdy5TaGlueSYmIXRoaXMucHJvcHMubmVzdGVkKXt2YXIgdD10aGlzLnRhYmxlRWxlbWVudC5jdXJyZW50LnBhcmVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLXJlYWN0YWJsZS1vdXRwdXQiKTtpZih0KXt3aW5kb3cuU2hpbnkuYWRkQ3VzdG9tTWVzc2FnZUhhbmRsZXIoIl9fcmVhY3RhYmxlX18iLmNvbmNhdCh0KSwoZnVuY3Rpb24odCl7bnVsbCE9dC5kYXRhJiZlLnNldFN0YXRlKHtkYXRhOnQuZGF0YSxkYXRhS2V5OnQuZGF0YUtleX0pLG51bGwhPXQuc2VsZWN0ZWQmJmUuc2V0U2VsZWN0aW9uKHQuc2VsZWN0ZWQpLG51bGwhPXQucGFnZSYmZS50YWJsZUluc3RhbmNlLmN1cnJlbnQub25QYWdlQ2hhbmdlKHQucGFnZSksbnVsbCE9dC5leHBhbmRlZCYmKHQuZXhwYW5kZWQ/ZS50b2dnbGVFeHBhbmRBbGwoKTplLnRvZ2dsZUNvbGxhcHNlQWxsKCkpfSkpfX10aGlzLm9uVGFibGVVcGRhdGUoKTt2YXIgcj10aGlzLnByb3BzLmNyb3NzdGFsa0dyb3VwO2lmKHImJndpbmRvdy5jcm9zc3RhbGspe3RoaXMuY3RTZWxlY3Rpb249bmV3IHdpbmRvdy5jcm9zc3RhbGsuU2VsZWN0aW9uSGFuZGxlKHIpLHRoaXMuY3RGaWx0ZXI9bmV3IHdpbmRvdy5jcm9zc3RhbGsuRmlsdGVySGFuZGxlKHIpLHRoaXMuY3RTZWxlY3RlZD10aGlzLmN0U2VsZWN0aW9uLnZhbHVlLHRoaXMuY3RGaWx0ZXJlZD10aGlzLmN0RmlsdGVyLmZpbHRlcmVkS2V5czt2YXIgbj0odGhpcy5wcm9wcy5jcm9zc3RhbGtLZXl8fFtdKS5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yLGV9KSx7fSksYT10aGlzLnRhYmxlSW5zdGFuY2UuY3VycmVudCxvPXtpZDphLnByb3BzLmNyb3NzdGFsa0lkfSxpPWZ1bmN0aW9uKCl7dmFyIHQscj1lLmN0U2VsZWN0ZWQmJmUuY3RTZWxlY3RlZC5sZW5ndGg+MD9lLmN0U2VsZWN0ZWQ6bnVsbCxpPWUuY3RGaWx0ZXJlZCxsPSh0PXJ8fGk/cj9pP3IuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gaS5pbmNsdWRlcyhlKX0pKTpyOmk6bnVsbCk/dC5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBuW2VdfSkpOm51bGw7YS5maWx0ZXJDb2x1bW4obyxsKX0sbD1mdW5jdGlvbih0KXtlLmN0U2VsZWN0ZWQhPT10JiYoZS5jdFNlbGVjdGVkPXQsaSgpKX07dGhpcy5jdFNlbGVjdGlvbi5vbigiY2hhbmdlIiwoZnVuY3Rpb24odCl7dC5zZW5kZXIhPT1lLmN0U2VsZWN0aW9uPyhsKHQudmFsdWUpLGUuc2V0U2VsZWN0aW9uKFtdLCExKSk6bChudWxsKX0pKSx0aGlzLmN0RmlsdGVyLm9uKCJjaGFuZ2UiLChmdW5jdGlvbih0KXt2YXIgcjt0LnNlbmRlciE9PWUuY3RGaWx0ZXImJihyPXQudmFsdWUsZS5jdEZpbHRlcmVkIT09ciYmKGUuY3RGaWx0ZXJlZD1yLGkoKSkpfSkpLGkoKSx0aGlzLnByb3BzLmRlZmF1bHRTZWxlY3RlZCYmdGhpcy51cGRhdGVDcm9zc3RhbGtTZWxlY3Rpb24oKX19fSx7a2V5OiJjb21wb25lbnREaWRVcGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMscj10LmRlZmF1bHRTZWxlY3RlZCxuPXQuZGVmYXVsdEV4cGFuZGVkO2lmKGUuZGVmYXVsdFNlbGVjdGVkIT09ciYmdGhpcy5zZXRTZWxlY3Rpb24ociksZS5kZWZhdWx0RXhwYW5kZWQhPT1uKWlmKCEwPT09bil0aGlzLnRvZ2dsZUV4cGFuZEFsbCgpO2Vsc2V7dmFyIGE9bnx8e307dGhpcy5zZXRTdGF0ZSh7ZXhwYW5kZWQ6YX0pfX19LHtrZXk6ImNvbXBvbmVudFdpbGxVbm1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY3RTZWxlY3Rpb24mJnRoaXMuY3RTZWxlY3Rpb24uY2xvc2UoKSx0aGlzLmN0RmlsdGVyJiZ0aGlzLmN0RmlsdGVyLmNsb3NlKCl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMscz10LmRhdGEsdT10LmNvbHVtbnMsYz10LmNvbHVtbkdyb3VwcyxmPXQucGl2b3RCeSxkPXQuc29ydGFibGUscD10LnJlc2l6YWJsZSxnPXQuZmlsdGVyYWJsZSxoPXQuc2VhcmNoYWJsZSxtPXQuZGVmYXVsdFNvcnREZXNjLGI9dC5kZWZhdWx0U29ydGVkLHk9dC5kZWZhdWx0UGFnZVNpemUsdj10LnBhZ2VTaXplT3B0aW9ucyx3PXQucGFnaW5hdGlvblR5cGUseD10LnNob3dQYWdpbmF0aW9uLFM9dC5zaG93UGFnZVNpemVPcHRpb25zLFA9dC5zaG93UGFnZUluZm8sQz10Lm1pblJvd3MsTz10LnNlbGVjdGlvbixrPXQub25DbGljayxUPXQub3V0bGluZWQsaj10LmJvcmRlcmVkLEU9dC5ib3JkZXJsZXNzLFI9dC5zdHJpcGVkLE49dC5oaWdobGlnaHQsQT10LmNvbXBhY3QsRD10Lm5vd3JhcCx6PXQuc2hvd1NvcnRJY29uLF89dC5zaG93U29ydGFibGUsRj10LmNsYXNzTmFtZSxNPXQuc3R5bGUsST10LnJvd0NsYXNzTmFtZSxMPXQucm93U3R5bGUsVz10LmlubGluZSxLPXQud2lkdGgsQj10LmhlaWdodCxIPXQubGFuZ3VhZ2UsRz10LmNyb3NzdGFsa0dyb3VwLFY9dC5jcm9zc3RhbGtLZXksJD10LmRhdGFLZXksWD10LnRoZW1lO2Zvcih2YXIgWSBpbiBGPXRlKEYsSigoWD1VKFgpfHx7fSkuc3R5bGUpKSxIPUN0KEN0KHt9LHEpLEgpKUhbWV09SFtZXXx8bnVsbDtzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1PYmplY3Qua2V5cyhlKSxyPW5ldyBBcnJheShlW3RbMF1dLmxlbmd0aCksbj0wO248ci5sZW5ndGg7bisrKXtyW25dPXt9O3ZhciBhLG89dHQodCk7dHJ5e2ZvcihvLnMoKTshKGE9by5uKCkpLmRvbmU7KXt2YXIgaT1hLnZhbHVlO3Jbbl1baV09ZVtpXVtuXX19Y2F0Y2goZSl7by5lKGUpfWZpbmFsbHl7by5mKCl9fXJldHVybiByfSh0aGlzLnN0YXRlLmRhdGF8fHMpLHU9ZnVuY3Rpb24oZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e30sbD1yLnNvcnRhYmxlLHM9ci5zaG93U29ydEljb24sdT1yLnNob3dTb3J0YWJsZSxjPXIuaXNFeHBhbmRlZCxmPXIub25FeHBhbmRlckNsaWNrLGQ9ci50aGVtZSxwPXIubGFuZ3VhZ2U7cmV0dXJuIGU9ZS5tYXAoKGZ1bmN0aW9uKGUpe3ZhciB0PVFlKHt9LGUpO2lmKHQuaWQ9dC5hY2Nlc3Nvcix0LmFjY2Vzc29yLmluY2x1ZGVzKCIuIikmJih0LmFjY2Vzc29yPWZ1bmN0aW9uKGUpe3JldHVybiBlW3QuaWRdfSksInN0cmluZyI9PXR5cGVvZiB0LmFnZ3JlZ2F0ZSYmSmVbdC5hZ2dyZWdhdGVdKXt2YXIgcj10LmFnZ3JlZ2F0ZTt0LmFnZ3JlZ2F0ZT1KZVtyXX10LnNvcnRNZXRob2Q9YXQoe3R5cGU6dC50eXBlLG5hTGFzdDp0LnNvcnROQUxhc3R9KSx0LmZpbHRlckFsbD0hMCwibnVtZXJpYyI9PT10LnR5cGU/dC5jcmVhdGVNYXRjaGVyPWl0OnQuY3JlYXRlTWF0Y2hlcj1sdCx0LmZpbHRlck1ldGhvZD1mdW5jdGlvbihlLHIpe3ZhciBuPWUuaWQsYT10LmNyZWF0ZU1hdGNoZXIoZS52YWx1ZSk7cmV0dXJuIHIuZmlsdGVyKChmdW5jdGlvbihlKXt2YXIgdD1lW25dO3JldHVybiB2b2lkIDA9PT10fHwoISFlLl9zdWJSb3dzfHxhKHQpKX0pKX0sIm51bWVyaWMiPT09dC50eXBlP3QuYWxpZ249dC5hbGlnbnx8InJpZ2h0Ijp0LmFsaWduPXQuYWxpZ258fCJsZWZ0Iix0LkNlbGw9ZnVuY3Rpb24oZSl7dmFyIHIsbCxzPWUudmFsdWUsdT1udWxsPT1zfHwibnVtZXJpYyI9PT10LnR5cGUmJlllKHMpO3JldHVybiB1JiYocz10Lm5hKSwhdSYmdC5mb3JtYXQmJnQuZm9ybWF0LmNlbGwmJihzPW90KHMsdC5mb3JtYXQuY2VsbCkpLHQuY2VsbCYmKCJmdW5jdGlvbiI9PXR5cGVvZiB0LmNlbGwmJihzPXQuY2VsbChRZShRZSh7fSxlKSx7fSx7dmFsdWU6c30pKSksdC5jZWxsIGluc3RhbmNlb2YgQXJyYXkmJiFlLmFnZ3JlZ2F0ZWQmJihzPXQuY2VsbFtlLmluZGV4XSkmJihzPU9iamVjdChuLmh5ZHJhdGUpKHtGcmFnbWVudDphLkZyYWdtZW50LFdpZGdldENvbnRhaW5lcjpCZX0sdC5jZWxsW2UuaW5kZXhdKSkpLG51bGwhPXMmJiIiIT09c3x8KHM9IuKAiyIpLHI9by5hLmlzVmFsaWRFbGVtZW50KHMpP3M6dC5odG1sP28uYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtzdHlsZTp7ZGlzcGxheToiaW5saW5lIn0sZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6e19faHRtbDpzfX0pOlN0cmluZyhzKSx0LmRldGFpbHMmJih0LmRldGFpbHMgaW5zdGFuY2VvZiBBcnJheSYmbnVsbD09dC5kZXRhaWxzW2UuaW5kZXhdfHwobD1pLlJlYWN0VGFibGVEZWZhdWx0cy5FeHBhbmRlckNvbXBvbmVudChRZShRZSh7fSxlKSx7fSx7aXNFeHBhbmRlZDpjKGUpfSkpKSksbD9vLmEuY3JlYXRlRWxlbWVudChvLmEuRnJhZ21lbnQsbnVsbCxsLHIpOnJ9LHQuUGl2b3RWYWx1ZT1mdW5jdGlvbihlKXt2YXIgcj10LkNlbGwoZSk7cmV0dXJuIG8uYS5jcmVhdGVFbGVtZW50KCJzcGFuIixudWxsLHIsIiAiLGUuc3ViUm93cyYmIigiLmNvbmNhdChlLnN1YlJvd3MubGVuZ3RoLCIpIikpfSx0LkFnZ3JlZ2F0ZWQ9ZnVuY3Rpb24oZSl7dmFyIHI9bnVsbCE9ZS52YWx1ZT9lLnZhbHVlOiIiO3JldHVybiB0LmZvcm1hdCYmdC5mb3JtYXQuYWdncmVnYXRlZCYmKHI9b3Qocix0LmZvcm1hdC5hZ2dyZWdhdGVkKSksdC5hZ2dyZWdhdGVkJiYocj10LmFnZ3JlZ2F0ZWQoUWUoUWUoe30sZSkse30se3ZhbHVlOnJ9KSkpLHQuaHRtbD9vLmEuY3JlYXRlRWxlbWVudCgiZGl2Iix7ZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6e19faHRtbDpyfX0pOnJ9LHQuSGVhZGVyPWZ1bmN0aW9uKGUpe3ZhciByLGk9dC5uYW1lO2lmKHQuaGVhZGVyJiYoaT0iZnVuY3Rpb24iPT10eXBlb2YgdC5oZWFkZXI/dC5oZWFkZXIoZSk6T2JqZWN0KG4uaHlkcmF0ZSkoe0ZyYWdtZW50OmEuRnJhZ21lbnQsV2lkZ2V0Q29udGFpbmVyOkJlfSx0LmhlYWRlcikpLHI9by5hLmlzVmFsaWRFbGVtZW50KGkpP28uYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InJ0LXRoLWNvbnRlbnQifSxpKTp0Lmh0bWw/by5hLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToicnQtdGgtY29udGVudCIsZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6e19faHRtbDppfX0pOm8uYS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJydC10aC1jb250ZW50In0sbnVsbCE9aT9TdHJpbmcoaSk6IiIpLHJlKHQuc29ydGFibGUsbCkmJnMpe3ZhciBjPXU/InJ0LXNvcnQiOiIiO3JldHVybiJyaWdodCI9PT10LmFsaWduP28uYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InJ0LXNvcnQtaGVhZGVyIn0sby5hLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6dGUoYywicnQtc29ydC1sZWZ0IiksImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSxyKTpvLmEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJydC1zb3J0LWhlYWRlciJ9LHIsby5hLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6dGUoYywicnQtc29ydC1yaWdodCIpLCJhcmlhLWhpZGRlbiI6InRydWUifSkpfXJldHVybiByfSx0LmZvb3RlciYmKHQuRm9vdGVyPWZ1bmN0aW9uKGUpe3ZhciByO3JldHVybiByPSJmdW5jdGlvbiI9PXR5cGVvZiB0LmZvb3Rlcj90LmZvb3RlcihlKTpPYmplY3Qobi5oeWRyYXRlKSh7RnJhZ21lbnQ6YS5GcmFnbWVudCxXaWRnZXRDb250YWluZXI6QmV9LHQuZm9vdGVyKSxvLmEuaXNWYWxpZEVsZW1lbnQocik/cjp0Lmh0bWw/by5hLmNyZWF0ZUVsZW1lbnQoImRpdiIse2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MOntfX2h0bWw6cn19KTpudWxsIT1yP1N0cmluZyhyKToiIn0pO3ZhciBnPSJydC1hbGlnbi0iLmNvbmNhdCh0LmFsaWduKTt0LmhlYWRlckNsYXNzTmFtZT10ZShnLHQuaGVhZGVyQ2xhc3NOYW1lKSx0LmZvb3RlckNsYXNzTmFtZT10ZShnLHQuZm9vdGVyQ2xhc3NOYW1lKTt2YXIgaD10LmNsYXNzTmFtZSxtPXQuc3R5bGU7cmV0dXJuIHQuY2xhc3NOYW1lPXZvaWQgMCx0LnN0eWxlPXZvaWQgMCx0LmdldFByb3BzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLG89e307aWYoIXQpcmV0dXJuIG87KG49ImZ1bmN0aW9uIj09dHlwZW9mIGg/aCh0LHIsZSk6aCBpbnN0YW5jZW9mIEFycmF5P2hbdC5pbmRleF06aCxvLmNsYXNzTmFtZT10ZShnLG4pLG0pJiYoKGE9ImZ1bmN0aW9uIj09dHlwZW9mIG0/bSh0LHIsZSk6bSBpbnN0YW5jZW9mIEFycmF5P21bdC5pbmRleF06bSkmJihvLnN0eWxlPWEpKTtyZXR1cm4gci5kZXRhaWxzJiYoci5kZXRhaWxzIGluc3RhbmNlb2YgQXJyYXkmJm51bGw9PXIuZGV0YWlsc1t0LmluZGV4XXx8dC5hZ2dyZWdhdGVkfHwoby5jbGFzc05hbWU9dGUoInJ0LWV4cGFuZGFibGUiLG8uY2xhc3NOYW1lKSxudWxsPT10LnJvd1tyLmlkXSYmKG8uc3R5bGU9UWUoUWUoe30sby5zdHlsZSkse30se3RleHRPdmVyZmxvdzoiaW5oZXJpdCJ9KSksby5vbkNsaWNrPWZ1bmN0aW9uKGUsbil7Zih0LHIpLG4mJm4oKX0pKSxvfSx0LnRoZW1lPWQsdC5sYW5ndWFnZT1wLHR9KSksdCYmKGU9bnQoZSx0KSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7KG51bGwhPWUubmFtZXx8ZS5oZWFkZXIpJiYoZS5IZWFkZXI9ZnVuY3Rpb24odCl7dmFyIHI9ZS5uYW1lO3JldHVybiBlLmhlYWRlciYmKHI9ImZ1bmN0aW9uIj09dHlwZW9mIGUuaGVhZGVyP2UuaGVhZGVyKHQpOk9iamVjdChuLmh5ZHJhdGUpKHtGcmFnbWVudDphLkZyYWdtZW50LFdpZGdldENvbnRhaW5lcjpCZX0sZS5oZWFkZXIpKSxvLmEuaXNWYWxpZEVsZW1lbnQocik/cjplLmh0bWw/by5hLmNyZWF0ZUVsZW1lbnQoImRpdiIse2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MOntfX2h0bWw6cn19KTpudWxsIT1yP1N0cmluZyhyKToiIn0pLGUuYWxpZ249ZS5hbGlnbnx8ImNlbnRlciIsZS5oZWFkZXJDbGFzc05hbWU9dGUoInJ0LWFsaWduLSIuY29uY2F0KGUuYWxpZ24pLGUuaGVhZGVyQ2xhc3NOYW1lKX0pKSxlfSh1LGMse3NvcnRhYmxlOmQsc2hvd1NvcnRJY29uOnosc2hvd1NvcnRhYmxlOl8saXNFeHBhbmRlZDp0aGlzLmlzRXhwYW5kZWQsb25FeHBhbmRlckNsaWNrOnRoaXMudG9nZ2xlRXhwYW5kLHRoZW1lOlgsbGFuZ3VhZ2U6SH0pLG51bGwhPUMmJihDPU1hdGgubWF4KEMsMSkpLEY9dGUoRixUPyJydC1vdXRsaW5lZCI6IiIsaj8icnQtYm9yZGVyZWQiOiIiLEU/InJ0LWJvcmRlcmxlc3MiOiIiLEE/InJ0LWNvbXBhY3QiOiIiLFc/IiBydC1pbmxpbmUiOiIiLEQ/InJ0LW5vd3JhcCI6IiIpLE09Q3Qoe3dpZHRoOkssaGVpZ2h0OkJ9LE0pO3ZhciBaPWwuYSxRPXt9O08mJihaPXF0LFE9e2lzU2VsZWN0ZWQ6dGhpcy5pc1NlbGVjdGVkLHRvZ2dsZVNlbGVjdGlvbjp0aGlzLnRvZ2dsZVNlbGVjdGlvbix0b2dnbGVBbGw6dGhpcy50b2dnbGVTZWxlY3Rpb25BbGwsc2VsZWN0VHlwZToibXVsdGlwbGUiPT09Tz8iY2hlY2tib3giOiJyYWRpbyJ9KTt2YXIgZWU9bnVsbD09eCxhZT16dDsoUnx8Tnx8T3x8SXx8TCkmJihhZT1mdW5jdGlvbih0LHIpe3I9ZS5nZXRSb3dJbmZvKHIpO3ZhciBuLGE9enQodCxyKTsoUiYmciYmKGEuY2xhc3NOYW1lPXRlKGEuY2xhc3NOYW1lLHIudmlld0luZGV4JTI/bnVsbDoicnQtdHItc3RyaXBlZCIpKSxOJiZyJiYoYS5jbGFzc05hbWU9dGUoYS5jbGFzc05hbWUsInJ0LXRyLWhpZ2hsaWdodCIpKSxyJiZyLnNlbGVjdGVkJiYoYS5jbGFzc05hbWU9dGUoYS5jbGFzc05hbWUsInJ0LXRyLXNlbGVjdGVkIikpLEkpJiYobj0iZnVuY3Rpb24iPT10eXBlb2YgST9JKHIsdCk6SSBpbnN0YW5jZW9mIEFycmF5P3ImJklbci5pbmRleF06SSxhLmNsYXNzTmFtZT10ZShhLmNsYXNzTmFtZSxuKSk7cmV0dXJuIEwmJihhLnN0eWxlPSJmdW5jdGlvbiI9PXR5cGVvZiBMP0wocix0KTpMIGluc3RhbmNlb2YgQXJyYXk/ciYmTFtyLmluZGV4XTpMKSxhfSk7dmFyIG9lLGllPXUucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbmNhdCh0LmNvbHVtbnM/dC5jb2x1bW5zOnQpfSksW10pO2llLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRldGFpbHN9KSk/KG9lPWZ1bmN0aW9uKHQpe3ZhciBpPW5lKGUuc3RhdGUuZXhwYW5kZWQsdC5uZXN0aW5nUGF0aCksbD1pZS5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4gZS5pZD09PWl9KSk7aWYoIWwpcmV0dXJuIG51bGw7dmFyIHM9bC5kZXRhaWxzLHU9bC5odG1sLGM9e307aWYoImZ1bmN0aW9uIj09dHlwZW9mIHMpe3ZhciBmPXMoZS5nZXRSb3dJbmZvKHQpKTt1JiYoYy5odG1sPWYpLGMuY2hpbGRyZW49Zn1lbHNlIGlmKHMgaW5zdGFuY2VvZiBBcnJheSl7dmFyIGQ9c1t0LmluZGV4XTtpZihudWxsPT1kKXJldHVybiBudWxsO3UmJihjLmh0bWw9ZCksYy5jaGlsZHJlbj1PYmplY3Qobi5oeWRyYXRlKSh7UmVhY3RhYmxlOnIsRnJhZ21lbnQ6YS5GcmFnbWVudCxXaWRnZXRDb250YWluZXI6QmV9LGQpfXJldHVybiBvLmEuY3JlYXRlRWxlbWVudChYdCxTdCh7a2V5OiIiLmNvbmNhdChpLCItIikuY29uY2F0KHQuaW5kZXgpfSxjKSl9LHU9W3tleHBhbmRlcjohMCxzaG93OiExfV0uY29uY2F0KHN0KHUpKSk6b2U9bnVsbDt2YXIgbGUsc2U9ZnVuY3Rpb24oKXtPYmplY3Qua2V5cyhlLnN0YXRlLmV4cGFuZGVkKS5sZW5ndGg+MCYmZS5zZXRTdGF0ZSh7ZXhwYW5kZWQ6e319KX0sdWU9X3Q7ayYmKCJzZWxlY3QiPT09az9rPWZ1bmN0aW9uKHQscil7aWYodCYmKCFyLnBpdm90ZWR8fCF0LmFnZ3JlZ2F0ZWQpKWlmKHQuYWdncmVnYXRlZCl7aWYoInNpbmdsZSI9PT1PKXJldHVybjt2YXIgbj10LnN1YlJvd3M7aWYoIW58fG4uc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuX2FnZ3JlZ2F0ZWR9KSkpcmV0dXJuIG51bGw7dmFyIGE9bi5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLl9pbmRleH0pKSxvPWEuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmlzU2VsZWN0ZWQodCl9KSk7ZS50b2dnbGVTZWxlY3Rpb25BbGwoYSwhbyl9ZWxzZSBlLnRvZ2dsZVNlbGVjdGlvbih0LmluZGV4KX06ImV4cGFuZCI9PT1rJiYoaz1mdW5jdGlvbih0LHIpe2lmKHQpe3ZhciBuPWllLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRldGFpbHN9KSk7aWYodC5hZ2dyZWdhdGVkKXIucGl2b3RlZHx8ZS50b2dnbGVFeHBhbmQodCk7ZWxzZSBpZihuKXt2YXIgYT1uLmRldGFpbHM7aWYoYSBpbnN0YW5jZW9mIEFycmF5JiZudWxsPT1hW3QuaW5kZXhdKXJldHVybjtlLnRvZ2dsZUV4cGFuZCh0LG4pfX19KSx1ZT1mdW5jdGlvbihlLHQscil7cmV0dXJuIEN0KEN0KHt9LF90KGUsdCkpLHt9LHtvbkNsaWNrOmZ1bmN0aW9uKG4sYSl7ayh0LHIsZSksYSYmYSgpfX0pfSk7dmFyIGNlPWt0O3JldHVybiBoJiYobGU9JHQsY2U9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9ZS5maWx0ZXJlZC5maW5kKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZD09PWUuc2VhcmNoS2V5fSkpLG89YT9hLnZhbHVlOiIiO3JldHVybiBDdChDdCh7fSxrdChlKSkse30se3NlYXJjaFZhbHVlOm8sb25TZWFyY2hDaGFuZ2U6ZnVuY3Rpb24odCl7bi5maWx0ZXJDb2x1bW4oe2lkOmUuc2VhcmNoS2V5fSx0LnRhcmdldC52YWx1ZSl9LHNlYXJjaFBsYWNlaG9sZGVyOmUubGFuZ3VhZ2Uuc2VhcmNoUGxhY2Vob2xkZXIsc2VhcmNoTGFiZWw6ZS5sYW5ndWFnZS5zZWFyY2hMYWJlbCxzZWFyY2hDbGFzc05hbWU6SihlLnRoZW1lLnNlYXJjaElucHV0U3R5bGUpfSl9KSxvLmEuY3JlYXRlRWxlbWVudChaLFN0KHtkYXRhOnMsY29sdW1uczp1LHBpdm90Qnk6Znx8W10sc29ydGFibGU6ZCxyZXNpemFibGU6cCxmaWx0ZXJhYmxlOmcsc2VhcmNoYWJsZTpoLHNlYXJjaEtleToiX19zZWFyY2hfXyIsZGVmYXVsdFNvcnREZXNjOm0sZGVmYXVsdFNvcnRlZDpiLGRlZmF1bHRQYWdlU2l6ZTp5LHBhZ2VTaXplT3B0aW9uczp2LHNob3dQYWdpbmF0aW9uOngsc2hvd1BhZ2VTaXplT3B0aW9uczpTLFBhZ2luYXRpb25Db21wb25lbnQ6eWUscGFnaW5hdGlvblR5cGU6dyxhdXRvSGlkZVBhZ2luYXRpb246ZWUsc2hvd1BhZ2VJbmZvOlAsbWluUm93czpDLGNvbGxhcHNlT25Tb3J0aW5nQ2hhbmdlOiEwLGNvbGxhcHNlT25QYWdlQ2hhbmdlOiEwLGNvbGxhcHNlT25EYXRhQ2hhbmdlOiExLGNsYXNzTmFtZTpGLHN0eWxlOk0sZXhwYW5kZWQ6dGhpcy5zdGF0ZS5leHBhbmRlZCxvbkV4cGFuZGVkQ2hhbmdlOmZ1bmN0aW9uKHQpe2Uuc2V0U3RhdGUoe2V4cGFuZGVkOnR9KX0sb25QYWdlQ2hhbmdlOnNlLG9uU29ydGVkQ2hhbmdlOnNlLGdldFRhYmxlUHJvcHM6Y2UsZ2V0VGhlYWRHcm91cFRyUHJvcHM6RXQsZ2V0VGhlYWRHcm91cFRoUHJvcHM6anQsZ2V0VGhlYWRUclByb3BzOlJ0LGdldFRoZWFkVGhQcm9wczpUdCxnZXRUaGVhZEZpbHRlclRyUHJvcHM6TnQsZ2V0VGhlYWRGaWx0ZXJUaFByb3BzOkF0LGdldFRib2R5UHJvcHM6QnQsZ2V0VHJHcm91cFByb3BzOkR0LGdldFRyUHJvcHM6YWUsZ2V0VGRQcm9wczp1ZSxnZXRUZm9vdFRyUHJvcHM6RnQsZ2V0VGZvb3RUZFByb3BzOk10LFRhYmxlQ29tcG9uZW50OmxlLFN1YkNvbXBvbmVudDpvZX0sUSx7dGhlbWU6WCxsYW5ndWFnZTpILGNyb3NzdGFsa0dyb3VwOkcsY3Jvc3N0YWxrS2V5OlYsY3Jvc3N0YWxrSWQ6Il9fY3Jvc3N0YWxrX18iLGtleToiIi5jb25jYXQoeSksZGF0YUtleTp0aGlzLnN0YXRlLmRhdGFLZXl8fCQscmVmOnRoaXMudGFibGVJbnN0YW5jZSxnZXRQcm9wczpmdW5jdGlvbigpe3JldHVybiBlLm9uVGFibGVVcGRhdGUoKSx7cmVmOmUudGFibGVFbGVtZW50LG9uTW91c2VEb3duOmZ1bmN0aW9uKCl7ZS50YWJsZUVsZW1lbnQuY3VycmVudC5jbGFzc0xpc3QucmVtb3ZlKCJydC1rZXlib2FyZC1hY3RpdmUiKX0sb25LZXlEb3duOmZ1bmN0aW9uKCl7ZS50YWJsZUVsZW1lbnQuY3VycmVudC5jbGFzc0xpc3QuYWRkKCJydC1rZXlib2FyZC1hY3RpdmUiKX0sb25LZXlVcDpmdW5jdGlvbih0KXs5PT09KHQud2hpY2h8fHQua2V5Q29kZSkmJmUudGFibGVFbGVtZW50LmN1cnJlbnQuY2xhc3NMaXN0LmFkZCgicnQta2V5Ym9hcmQtYWN0aXZlIil9fX19KSl9fV0pLHJ9KG8uYS5Db21wb25lbnQpO1l0LmRlZmF1bHRQcm9wcz17c29ydGFibGU6ITAscmVzaXphYmxlOiExLHNob3dQYWdlU2l6ZU9wdGlvbnM6ITEsc2hvd1NvcnRJY29uOiEwfTt2YXIgWnQ9WXQ7T2JqZWN0KG4ucmVhY3RXaWRnZXQpKCJyZWFjdGFibGUiLCJvdXRwdXQiLHtSZWFjdGFibGU6WnR9KX1dKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVhY3RhYmxlLmpzLm1hcA=="></script> </head> <body> <div id="htmlwidget_container"> <h1 style="color:orange;background:#FFFFFF;text-align:left;font-size:32px;font-style:normal;font-weight:bold;text-decoration:;letter-spacing:px;word-spacing:px;text-transform:;text-shadow:;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px">EUROLEAGUE 2021-2022 PLAYERS PERCENTILE RANKINGS</h1> <div id="htmlwidget-98859479a776ada50c84" class="reactable html-widget" style="width:auto;height:auto;"></div> <p style="color:#000;background:#FFFFFF;text-align:left;font-size:16px;font-style:normal;font-weight:normal;text-decoration:;letter-spacing:px;word-spacing:px;text-transform:;text-shadow:;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px">percentile=80 : means that only 20% of the players perform better in that stats</p> </div> <script type="application/json" data-for="htmlwidget-98859479a776ada50c84">{"x":{"tag":{"name":"Reactable","attribs":{"data":{"player":["Nikola Mirotic","Darrun Hilliard","Sasha Vezenkov","Jan Vesely","Shane Larkin","Nando De Colo","Vasilje Micic","James Nunnally","Lorenzo Brown","Jordan Loyd","Mike James","Maodo Lo","Shavon Shields","Tornike Shengelia","Wade Baldwin IV","Edy Tavares","Scottie Wilbekin","Will Clyburn","Chris Jones","Kyle Hines","Nemanja Nedovic","Kostas Sloukas","Ante Zizic","Mario Hezonja","Vladimir Lucic","Augustine Rubit","Alexey Shved","Daryl Macon","Alpha Diallo","Guerschon Yabusele","Bryant Dunston","Marko Guduric","Johannes Voigtmann","Elie Okobo","Tyler Dorsey","Corey Walden","Luke Sikma","Brandon Davies","Simone Fontecchio","Luka Mitrovic","Vincent Poirier","Matt Costello","Nicolo Melli","Alex Poythress","Oscar da Silva","Rokas Giedraitis","Nikola Milutinov","Mathias Lessort","Keenan Evans","Nicolas Laprovittola","Moustapha Fall","Josh Nebo","Donatas Motiejunas","Jalen Reynolds","Kostas Mitoglou","Dwayne Bacon","Tibor Pleiss","Sergio Rodriguez","Dante Exum","Jordan Mickey","Shaquielle McKissic","Donta Hall","Joffrey Lauvergne","Okaro White","Nikola Kalinic","Conner Frankamp","Billy Baron","Othello Hunter","Adrien Moerman","Steven Enoch","Nate Wolters","George Papagiannis","Kyle Kuric","Thomas Heurtel","Rodrigue Beaubois","Derrick Williams","Marius Grigonis","Dyshawn Pierre","Isaiah Canaan","Nikola Ivanovic","Tonye Jekiri","Edgaras Ulanovas","Marek Blazevic","Daniel Hackett","Devin Booker","Achille Polonara","Tyler Cavanaugh","Gabriel Deck","Marcus Eriksson","Christ Koumadje","Kostas Antetokounmpo","Nick Calathes","Rudy Fernandez","Dejan Davidovac","Lukas Lekavicius","Howard Sant-Roos","Cory Higgins","John Brown","Gabriel Lundberg","William Howard","Ben Lammers","Rokas Jokubaitis","Alec Peters","Arturas Gudaitis","Ognjen Dobric","Paris Lee","Marco Spissu","Sertac Sanli","Ioannis Papapetrou","Pierria Henry","David Lighty","Youssoupha Fall","Devon Hall","Jaleen Smith","Austin Hollins","Ognen Kuzmic","Hassan Martin","Maik Zirbes","Niels Giffey","Filip Petrusev","Deshaun Thomas","Aaron White","Yovel Zoosman","Malcolm Delaney","Krunoslav Simon","Davide Alviti","Joel Bolomboy","Tadas Sedekerskis","Danilo Andjusic","Paul Lacombe","Vyacheslav Zaytsev","Arturas Milaknis","Dylan Osetkowski","Ahmet Duverioglu","Nick Weiler-Babb","Louis Olinde","Will Thomas","Jeremy Evans","Landry Nnoko","Gigi Datome","Alex Abrines","Trey Thompkins","Anthony Randolph","Mindaugas Kuzminskas","Leo Westermann","Adam Hanga","Janis Strelnieks","Kostas Papanikolaou","Livio Jean-Charles","Marcos Knight","Ognjen Jaramaz","Victor Wembanyama","Emmanuel Mudiay","Mantas Kalnietis","Pierre Oriola","Johannes Thiemann","Jayson Granger","Danilo Barthel","Tamir Blatt","Ismet Akpinar","Sergio Llull","Paulius Jankunas","Roman Sorkin","Fabien Causeur","Ben Bentil","Brock Motum","Vassilis Kavvadas","Sehmus Hazer","Dmitry Kulagin","Thomas Walkup","Angelo Caloiaro","John DiBartolomeo","James Anderson","Andrey Vorontsevich","Chris Singleton","Giannoulis Larentzakis","Elijah Bryant","Kendrick Perry","Troy Daniels","O.J. Mayo","Nigel Williams-Goss","Alberto Abalde","Nigel Hayes","James Gist","Jake Cohen","Kenneth Faried","Giampaolo Ricci","Nikita Kurbanov","Lamar Peters","Rolands Smits","Stefan Lazarevic","Regimantas Miniotas","Tai Webster","Georgios Printezis","Rob Gray","Sander Raieste","Jehyve Floyd","Jehyve Floyd","Jehyve Floyd","Jehyve Floyd","Marial Shayok","Oz Blayzer","Khyri Thomas","Andrey Zubkov","James Nnaji","Mateusz Ponitka","Jarrell Brantley","Zan Sisko","Aleksa Uskokovic","Antoine Diot","Semen Antonov","Yakuba Ouattara","Jason George","Carlos Alocen","Branko Lazic","Zoran Dragic","Tarik Biberovic","Melih Mahmutoglu","Leon Radosevic","K.C. Rivers","Charles Lombahe-Kahudi","Jeffery Taylor","Stefan Markovic","Karolis Lukosiunas","Ivan Ukhov","Dimitri Uzinskiy","Sergey Karasev","Leonidas Kaselakis","Sergi Martinez","Stefan Jovic","Tristan Vukcevic","Kaleb Tarczewski","Vanja Marinkovic","Jerian Grant","Andreas Obst","Ibrahima Faye","Jonas Mattisseck","Iftah Ziv","Malte Delow","Matthew Strazel","Kameron Taylor","Lefteris Mantzoukas","Jerry Boutsiele","Lefteris Bochoridis","Arturs Kurucs","Marko Simonovic","Tim Schneider","Nihad Djedovic","Gavin Schilling","Michael Caicedo","James Birsen"],"team":["Barca","Bayern Munich","Olympiacos","Fenerbahce Ulker","Anadolu Efes","Fenerbahce Ulker","Anadolu Efes","Maccabi FOX Tel Aviv","UNICS Kazan","Zenit Saint Petersburg","AS Monaco Basket","ALBA Berlin","AX Armani Exchange Milan","CSKA Moscow","Baskonia","Real Madrid","Maccabi FOX Tel Aviv","CSKA Moscow","ASVEL Basket","AX Armani Exchange Milan","Panathinaikos","Olympiacos","Maccabi FOX Tel Aviv","UNICS Kazan","Bayern Munich","Bayern Munich","CSKA Moscow","Panathinaikos","AS Monaco Basket","Real Madrid","Anadolu Efes","Fenerbahce Ulker","CSKA Moscow","ASVEL Basket","Olympiacos","Bayern Munich","ALBA Berlin","Barca","Baskonia","KK Crvena Zvezda","Real Madrid","Baskonia","AX Armani Exchange Milan","Zenit Saint Petersburg","ALBA Berlin","Baskonia","CSKA Moscow","Maccabi FOX Tel Aviv","Maccabi FOX Tel Aviv","Barca","Olympiacos","Zalgiris","AS Monaco Basket","Maccabi FOX Tel Aviv","AX Armani Exchange Milan","AS Monaco Basket","Anadolu Efes","AX Armani Exchange Milan","Barca","Zenit Saint Petersburg","Olympiacos","AS Monaco Basket","Zalgiris","Panathinaikos","KK Crvena Zvezda","Zenit Saint Petersburg","Zenit Saint Petersburg","Bayern Munich","Anadolu Efes","Baskonia","KK Crvena Zvezda","Panathinaikos","Barca","Real Madrid","Anadolu Efes","Maccabi FOX Tel Aviv","CSKA Moscow","Fenerbahce Ulker","UNICS Kazan","KK Crvena Zvezda","UNICS Kazan","Zalgiris","Zalgiris","CSKA Moscow","Fenerbahce Ulker","Fenerbahce Ulker","Zalgiris","Real Madrid","ALBA Berlin","ALBA Berlin","ASVEL Basket","Barca","Real Madrid","KK Crvena Zvezda","Zalgiris","Panathinaikos","Barca","UNICS Kazan","CSKA Moscow","ASVEL Basket","ALBA Berlin","Barca","Baskonia","Zenit Saint Petersburg","KK Crvena Zvezda","AS Monaco Basket","UNICS Kazan","Barca","Panathinaikos","Fenerbahce Ulker","ASVEL Basket","ASVEL Basket","AX Armani Exchange Milan","ALBA Berlin","KK Crvena Zvezda","KK Crvena Zvezda","Olympiacos","KK Crvena Zvezda","Zalgiris","Anadolu Efes","Bayern Munich","KK Crvena Zvezda","ALBA Berlin","AX Armani Exchange Milan","Anadolu Efes","AX Armani Exchange Milan","CSKA Moscow","Baskonia","AS Monaco Basket","ASVEL Basket","UNICS Kazan","Zalgiris","ASVEL Basket","Fenerbahce Ulker","Bayern Munich","ALBA Berlin","AS Monaco Basket","Panathinaikos","Bayern Munich","AX Armani Exchange Milan","Barca","Real Madrid","Real Madrid","Zenit Saint Petersburg","AS Monaco Basket","Real Madrid","Zalgiris","Olympiacos","Olympiacos","AS Monaco Basket","Bayern Munich","ASVEL Basket","Zalgiris","Zalgiris","Barca","ALBA Berlin","Baskonia","Fenerbahce Ulker","ALBA Berlin","Fenerbahce Ulker","Real Madrid","Zalgiris","Maccabi FOX Tel Aviv","Real Madrid","AX Armani Exchange Milan","AS Monaco Basket","Panathinaikos","Fenerbahce Ulker","Zenit Saint Petersburg","Olympiacos","Maccabi FOX Tel Aviv","Maccabi FOX Tel Aviv","Anadolu Efes","UNICS Kazan","Anadolu Efes","Olympiacos","Anadolu Efes","Panathinaikos","AX Armani Exchange Milan","UNICS Kazan","Real Madrid","Real Madrid","Barca","ASVEL Basket","Maccabi FOX Tel Aviv","CSKA Moscow","AX Armani Exchange Milan","CSKA Moscow","Baskonia","Barca","KK Crvena Zvezda","Zalgiris","Zalgiris","Olympiacos","AS Monaco Basket","Baskonia","Panathinaikos","Panathinaikos","Panathinaikos","Panathinaikos","Fenerbahce Ulker","Maccabi FOX Tel Aviv","Maccabi FOX Tel Aviv","Zenit Saint Petersburg","Barca","Zenit Saint Petersburg","UNICS Kazan","Bayern Munich","KK Crvena Zvezda","ASVEL Basket","CSKA Moscow","AS Monaco Basket","Bayern Munich","Real Madrid","KK Crvena Zvezda","Zalgiris","Fenerbahce Ulker","Fenerbahce Ulker","Bayern Munich","Bayern Munich","ASVEL Basket","Real Madrid","KK Crvena Zvezda","Zalgiris","CSKA Moscow","UNICS Kazan","Zenit Saint Petersburg","Panathinaikos","Barca","Panathinaikos","Real Madrid","AX Armani Exchange Milan","Baskonia","AX Armani Exchange Milan","Bayern Munich","AS Monaco Basket","ALBA Berlin","Maccabi FOX Tel Aviv","ALBA Berlin","ASVEL Basket","Maccabi FOX Tel Aviv","Panathinaikos","AS Monaco Basket","Panathinaikos","Baskonia","KK Crvena Zvezda","ALBA Berlin","Bayern Munich","Bayern Munich","Barca","Fenerbahce Ulker"],"pos":["F","SG","PF","PF","PG","G","PG","F","SG","G","PG","PG","GF","PF","G","C","G","F","G","FC","SG","PG","C","SG","SF","PF","G","PG","SF","PF","C","SG","C","PG","SG","G","PF","PF","SF","PF","C","C","PF","F","SF","SG","C","F","SG","PG","PF","FC","C","F","PF","SF","C","PG","PG","PF","F","PF","PF","F","F","PG","SG","FC","F","PF","PG","C","SG","G","G","F","SF","SF","G","PG","C","SF","C","G","PF","PF","F","F","GF","C","PF","PG","SG","SF","PG","SF","G","GF","G","F","C","PG","F","C","F","G","PG","FC","SF","G","SF","C","SG","G","G","C","F","C","GF","FC","F","F","SG","SG","F","F","FC","SF","SG","SG","G","SG","C","C","F","SF","PF","F","FC","SF","GF","PF","PF","SF","SF","SF","PG","PF","SF","G","SG","C","SG","PG","PF","C","PG","PF","PG","PG","PG","SF","SF","SG","F","PF","PF","SG","SG","G","SF","G","GF","F","FC","GF","SG","G","G","SG","SG","GF","F","PF","FC","F","F","F","PG","SF","SF","C","G","F","PG","SF","SF","SF","SF","SF","G","PF","SG","SF","C","SG","SF","G","PG","PG","SF","SG","SF","PG","SG","SG","G","SG","C","SF","SF","SF","PG","F","SF","F","SF","C","F","G","C","C","G","SG","SG","PF","G","G","GF","PG","F","F","C","PG","SG","SF","C","SG","SF","F","SF"],"min":[736.8,468.9,918.1,627.3,1027.1,463.7,827.3,794.9,704.5,626.8,1010.2,796.9,589.3,372.2,841.6,709.5,905,563.8,854.5,764.4,613.1,739.5,583.7,740.7,811.3,785.1,600.3,802,812.6,846.3,564.1,552.1,425.2,745,747.1,560.4,690.9,559,819.6,618.5,570.6,592.1,770.6,464.4,608.9,835,307.3,58,736.3,632.6,672.4,633.6,639.7,533,226.9,597.2,586.1,594.9,320.5,558.3,495,546,200.9,668.9,963.5,255.9,469.4,628.7,859,652.8,735.7,824.2,627.8,522.2,745.7,770.6,310.2,754.6,573.9,415.1,589.4,880.1,321,473.8,677.1,654.9,775.1,233,322.1,260.6,341.7,519.9,555.8,521.7,759.3,728.2,298.8,770.2,506.6,476.3,415.4,532.6,319.2,324.2,654.7,576,360.9,401.3,668.8,778.3,278.8,354.1,857,696,580,583.9,396.2,99.5,457.1,206,722.7,325.8,655.4,643.9,550.5,56,361.9,487.4,431.9,382.7,77.1,625.9,504.1,137.7,634.1,426.3,805.6,518,284.9,370.5,92,168.3,119.4,274.7,303,483.1,470.6,714.2,252.3,376.2,479.1,227.5,96,309.8,188.5,430.4,689.4,91,452.1,146.2,605.4,214.9,134.4,442.6,268.6,256.5,124.4,297.2,325.2,643.6,622.4,332.6,286.3,372.9,518.8,370.9,534.4,316.1,262.7,261.6,412.9,471.6,586.4,604,73.7,53.9,400.6,440.1,227.4,483.6,262,85.8,264.3,288.4,82.6,61.4,162,162,107,107,232.2,83.3,163.3,423,76.4,514,299,387.8,64.7,209.9,154.7,376,80,97.4,406.6,118.8,72.4,247.4,195.1,96.8,516.5,289.4,268.7,234.6,218.5,270.3,254.4,475.4,337.2,86.3,59.2,266.3,348,273.9,172.7,106.5,357.9,150,428,458.5,266.2,167.9,178.4,222.1,221.6,157.4,260.7,111.8,52.5,95.9,93.9],"points":[100,96,95,94,98,89,100,96,95,92,99,93,93,91,96,87,99,98,92,66,97,88,91,97,90,85,86,92,78,88,59,84,69,98,94,79,74,80,86,66,56,76,63,62,72,86,61,58,71,73,72,72,84,76,60,94,74,67,53,84,51,65,68,68,90,62,87,60,77,77,85,82,75,74,82,78,70,70,88,61,60,64,44,69,73,56,78,83,90,47,46,58,50,35,81,56,76,82,75,49,53,62,71,52,83,54,36,55,89,64,81,46,80,68,64,39,38,26,43,37,79,41,55,80,58,30,46,33,63,41,2,57,48,16,40,38,54,40,39,52,70,44,22,34,45,41,52,50,27,66,49,51,58,47,19,54,57,30,34,29,67,22,13,65,38,24,37,31,42,40,18,22,19,42,26,32,36,33,44,45,43,48,34,48,6,8,18,28,36,31,14,15,28,25,24,3,16,16,10,10,29,2,24,28,4,32,18,32,4,17,12,27,1,13,23,26,10,30,25,50,34,21,11,21,8,12,16,23,5,20,7,4,20,14,11,1,9,9,15,20,14,6,5,6,0,8,12,3,2,7,0],"scoring":[96,58,84,90,77,74,78,74,61,50,41,76,48,56,52,97,51,32,67,93,65,56,94,44,75,72,24,67,71,66,99,66,76,54,69,81,44,70,39,91,83,70,64,92,75,66,86,100,63,72,96,92,80,60,34,41,71,43,88,68,72,98,64,63,34,73,58,79,74,79,48,86,82,36,45,62,77,54,42,36,90,55,80,59,78,33,46,91,80,98,95,42,14,62,47,31,37,40,36,55,20,84,57,88,26,34,87,44,23,18,83,97,38,11,27,81,94,94,50,87,50,29,59,30,27,62,64,61,69,40,98,65,16,99,23,55,82,89,76,38,96,24,43,45,40,21,22,29,73,35,46,6,6,20,90,52,10,85,30,52,7,38,84,78,49,85,95,54,22,13,46,11,70,32,14,18,28,5,14,47,13,28,25,30,31,9,68,68,8,32,86,92,5,51,4,82,88,88,53,53,16,49,4,16,93,20,2,28,60,12,48,57,100,2,35,3,1,17,19,12,15,60,15,9,24,42,10,26,21,6,25,37,8,3,12,1,22,33,19,7,8,57,26,2,0,18,4,17,39,10,0],"p3specialist":[86,92,70,15,92,53,76,79,40,58,63,87,52,31,36,10,92,58,38,71,91,71,0,64,76,21,74,66,36,60,17,84,88,56,87,98,28,14,69,8,13,37,20,11,16,82,10,0,47,97,0,9,21,11,28,55,24,86,47,39,43,10,0,56,32,78,97,14,91,18,32,0,90,67,89,61,93,34,96,50,0,40,9,62,25,66,72,44,99,0,16,38,98,60,40,37,33,13,53,63,12,51,65,0,68,81,95,30,42,59,73,0,67,68,70,0,0,0,55,17,50,43,75,69,41,94,18,54,73,19,49,99,46,12,35,48,33,31,72,78,100,72,42,46,80,45,80,88,18,19,64,35,23,61,32,27,74,23,96,94,82,54,26,89,60,70,0,42,68,36,44,82,51,83,34,90,38,52,93,83,28,54,25,14,66,80,77,62,48,24,26,30,26,22,52,74,0,0,0,0,34,76,30,59,0,22,16,46,39,94,65,62,100,27,84,29,15,75,56,45,64,81,78,98,95,85,77,41,57,86,57,0,88,29,96,12,85,20,49,58,22,84,0,44,48,90,50,79,0,20,24],"usage":[96,98,53,75,77,97,99,76,87,91,96,91,80,90,95,62,90,95,83,26,100,85,81,88,57,70,80,91,52,60,24,92,40,99,94,68,69,95,71,68,55,61,34,36,71,43,36,94,33,66,30,42,84,98,82,94,81,88,40,68,58,31,98,50,87,83,93,47,25,75,84,28,41,88,63,55,58,25,86,97,17,26,89,49,46,31,53,38,64,64,54,50,33,12,85,43,74,43,76,10,70,71,47,28,88,58,28,77,80,47,44,58,55,84,69,20,33,50,45,85,71,38,36,79,52,18,38,11,78,58,1,23,50,34,12,19,3,21,36,66,46,79,60,62,44,24,44,19,62,61,74,89,100,73,7,66,66,52,62,57,92,38,30,47,64,21,64,64,60,34,1,34,8,20,14,78,28,54,92,76,66,46,18,30,31,41,11,4,78,24,2,18,86,49,78,7,13,16,13,16,53,5,27,15,31,15,47,25,8,25,13,9,0,70,9,71,55,74,34,81,18,10,22,42,6,6,22,13,2,11,36,23,17,40,71,16,2,47,6,36,10,4,3,28,4,4,22,8,55,28,0],"playmaking":[45,77,74,72,92,94,94,78,98,95,97,95,87,82,94,12,93,59,90,54,91,99,34,38,60,70,93,90,52,48,54,83,72,88,75,80,85,65,74,39,16,54,44,33,46,58,62,23,88,89,30,11,42,31,72,52,52,99,70,16,83,18,69,20,78,86,89,44,36,24,97,19,63,100,85,30,69,53,46,97,14,60,33,88,37,75,67,14,42,1,8,98,92,73,96,61,64,49,68,53,66,81,64,57,61,82,83,47,83,71,28,2,80,82,50,24,12,5,34,29,36,59,26,86,77,84,31,76,27,62,78,68,22,6,63,36,56,14,3,60,4,35,31,35,79,80,74,57,8,46,41,15,96,100,6,50,92,51,91,76,90,6,15,42,5,22,10,58,41,68,47,76,31,39,19,38,40,78,51,18,87,40,26,15,17,34,25,26,61,12,56,8,80,50,71,28,9,2,9,2,53,13,4,22,0,7,38,96,9,64,42,42,66,86,20,48,73,56,20,58,23,9,37,66,64,28,28,67,31,10,38,1,70,25,46,4,21,13,27,30,54,3,44,44,24,21,17,7,0,18,48],"stl":[72,93,90,91,97,98,91,59,99,84,96,74,80,82,89,83,99,65,98,70,42,82,44,94,68,58,92,70,98,88,87,72,64,68,31,88,95,68,80,65,78,26,93,72,81,85,27,94,96,78,49,64,46,40,76,84,22,69,30,49,80,51,32,79,83,46,5,66,34,9,71,69,39,53,54,81,63,86,48,53,86,74,36,73,70,67,42,71,10,2,59,96,79,77,66,95,50,100,84,88,60,38,43,12,67,97,48,22,31,100,46,26,50,75,92,55,18,41,61,3,18,55,74,20,45,14,14,33,13,86,4,47,87,12,94,23,50,29,4,38,5,35,7,40,18,64,66,77,24,85,57,30,62,16,42,54,57,16,19,6,34,60,10,8,73,21,3,90,58,92,62,78,38,19,82,29,56,52,32,44,28,37,60,54,75,6,36,9,76,28,52,14,28,2,58,17,62,44,25,13,23,11,76,39,0,63,90,48,60,33,15,21,20,30,22,43,47,26,20,24,11,36,51,16,56,41,35,4,37,89,0,7,8,25,1,56,52,45,40,24,15,2,0,27,17,34,8,32,6,12,10],"blk":[72,64,66,80,20,62,20,62,52,46,36,20,86,68,57,100,0,66,39,93,34,31,96,74,50,74,82,30,77,67,98,36,85,33,39,0,54,68,51,67,94,97,80,91,92,41,85,0,56,0,98,96,79,76,83,0,84,34,74,96,44,99,69,75,26,48,0,86,87,84,47,99,22,0,72,47,0,81,54,0,92,56,60,24,64,89,53,0,0,94,97,24,58,70,0,65,75,42,22,66,98,22,63,95,50,0,26,88,35,51,38,57,63,29,44,78,90,90,52,70,61,30,41,0,45,0,95,71,24,59,81,30,72,76,68,84,31,90,93,61,58,58,77,45,32,82,40,48,88,0,42,100,0,46,78,0,0,0,0,43,0,65,87,23,29,55,79,0,76,31,21,24,27,72,69,23,50,27,0,0,0,0,49,91,55,0,36,70,37,34,28,52,46,26,0,59,92,88,89,83,53,73,82,49,94,40,54,0,0,0,78,24,0,0,40,48,64,0,70,0,62,44,28,32,0,42,27,21,38,0,60,80,0,43,0,86,0,38,0,0,59,35,37,33,56,0,0,0,0,0,0],"rebounding":[93,62,95,97,54,39,36,73,70,78,56,38,72,87,68,100,32,90,60,92,34,43,94,97,76,88,48,34,89,86,72,36,79,53,41,24,98,69,80,86,95,92,99,83,72,61,99,81,49,31,92,98,90,94,85,60,84,42,55,82,40,96,78,73,75,2,20,94,93,96,51,100,37,45,33,66,16,82,21,26,98,81,63,29,85,84,90,87,39,91,62,80,68,71,10,60,17,84,43,70,68,27,64,83,28,13,22,79,58,66,52,82,25,38,30,96,75,47,59,36,64,78,61,47,57,69,86,88,10,45,35,5,65,67,76,77,76,65,88,18,19,50,64,41,22,59,23,57,52,89,16,80,40,8,74,74,32,26,13,4,20,63,48,12,53,19,35,10,17,44,67,11,71,54,56,27,58,25,5,12,40,62,38,50,20,70,51,44,7,74,21,54,6,29,0,23,42,46,44,50,16,22,46,77,56,91,28,9,30,7,12,32,1,24,8,15,4,0,33,15,55,14,24,6,14,4,31,37,42,49,26,46,6,2,1,48,14,8,34,3,30,11,66,9,2,3,52,18,58,28,18],"ft":[100,84,79,87,96,93,99,95,75,90,91,90,77,72,85,91,92,96,76,78,88,86,88,59,99,92,62,97,73,67,93,78,44,79,85,94,53,74,64,94,82,60,87,84,35,70,83,97,78,63,82,63,17,65,26,76,38,37,98,56,80,54,51,84,68,56,88,38,30,73,14,27,83,61,16,72,94,54,62,90,46,81,89,69,35,19,23,81,89,80,43,8,18,57,86,74,98,32,43,53,39,47,23,52,33,71,49,38,65,31,42,72,36,49,42,51,80,70,74,64,32,86,42,61,60,68,25,9,95,27,100,60,58,92,46,66,58,48,24,29,0,40,68,70,82,20,41,16,50,8,33,19,56,52,55,34,36,98,62,54,25,57,58,22,13,48,28,24,8,26,75,45,40,12,67,41,24,48,18,20,39,31,76,11,14,77,7,26,4,66,32,9,34,52,44,0,50,50,12,12,45,55,34,6,3,21,22,13,96,59,6,18,14,64,69,28,47,17,15,11,20,21,30,6,15,28,44,37,36,0,10,71,29,66,0,10,22,10,30,46,4,5,16,2,40,2,5,0,4,7,3],"Per":[100,90,96,96,89,92,95,80,92,80,86,90,75,88,73,99,86,73,88,88,87,85,99,65,66,82,71,71,80,72,98,68,82,63,73,74,82,75,58,82,94,84,70,90,91,55,98,100,63,73,93,94,96,81,85,72,97,61,69,63,70,98,91,50,43,82,78,86,66,78,75,93,70,77,60,46,56,52,44,77,82,47,78,58,65,57,52,67,61,97,91,75,57,50,55,41,35,68,52,43,63,65,51,80,40,54,70,62,34,32,52,95,38,28,41,75,79,94,43,88,52,49,35,30,38,60,81,60,42,57,46,39,29,79,35,46,47,63,55,49,85,40,62,56,30,35,28,28,67,58,43,40,22,39,58,47,26,69,35,25,18,30,58,39,35,54,68,41,15,22,24,22,50,26,17,13,27,10,33,32,28,24,18,24,50,38,33,24,2,25,32,54,4,35,9,46,44,21,44,21,14,30,4,18,48,17,13,30,20,14,34,32,22,6,8,6,1,20,22,18,10,15,13,12,26,15,11,16,16,11,20,7,7,2,8,5,10,12,12,2,7,3,13,0,0,3,4,9,3,6,1],"average":[86,81.4,80.2,79.7,79.2,79.1,78.8,77.2,76.9,76.4,76.1,75.4,75,74.7,74.5,74.1,73.4,73.2,73.1,73.1,72.9,72.6,72.1,72,71.7,71.2,71.2,70.8,70.6,70.2,70.1,69.9,69.9,69.1,68.8,68.6,68.2,67.8,67.2,66.6,66.6,65.7,65.4,65.4,65.1,64.7,64.7,64.7,64.4,64.2,64.2,64.1,63.9,63.2,63.1,62.8,62.7,62.6,62.4,62.1,62.1,62,62,61.8,61.6,61.6,61.5,61.4,61.3,61.3,60.4,60.3,60.2,60.1,59.9,59.8,59.6,59.1,58.7,58.7,58.5,58.4,58.1,58,57.8,57.7,57.6,57.6,57.4,57.4,57.1,56.9,56.7,56.7,56.6,56.3,55.9,55.3,55.2,55,54.9,54.8,54.8,54.7,54.4,54.4,54.4,54.2,54,53.9,53.9,53.5,53.2,53.2,52.9,51.9,51.9,51.7,51.6,51.6,51.3,50.8,50.4,50.2,50,49.9,49.8,49.6,49.4,49.4,49.4,49.3,49.3,49.3,49.2,49.2,49,49,49,48.9,48.3,47.7,47.6,47.4,47.2,47.1,47,46.9,46.9,46.7,46.5,46.5,46.3,46.2,46.1,45.8,45,45,44.2,44,43.5,43.3,42.9,42.5,41.9,41.9,41.9,41.4,40.7,40.6,40.5,40.5,40.5,39.9,39.8,38.9,38.5,38.4,38.2,37.7,37.2,37,36.9,36.7,36.5,36.3,36.2,36.1,35.7,35,34.9,34.6,34.3,34.1,34,33.9,33.65,33.65,33.65,33.65,33.6,33.6,33.1,32.9,32.9,32.8,32.8,32.7,32.6,32.5,32.5,32.4,32.4,32.2,31.8,31.7,31.7,31.5,31.4,31.4,31.2,31.1,30.9,30.8,30.8,30.3,30.1,28.5,28.5,28.2,27.9,27.6,25.3,24.9,24.6,23.9,23.7,23.5,23.2,22.6,22.3,21,21,19.5,19.1,18.3,17.4,17.3,16.7,13.6,10.4]},"columns":[{"accessor":"player","name":"player","type":"character","maxWidth":200,"align":"center"},{"accessor":"team","name":"team","type":"character","maxWidth":200,"align":"center"},{"accessor":"pos","name":"pos","type":"character","maxWidth":50},{"accessor":"min","name":"min","type":"numeric","maxWidth":50,"align":"center"},{"accessor":"points","name":"points","type":"numeric","maxWidth":70,"style":[{"background":"#006400FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#147013FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#197318FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#1E761CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0A6A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#388534FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#006400FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#147013FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#197318FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#287C26FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#056704FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#237921FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#237921FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#2D7F2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#147013FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#428B3EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#056704FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0A6A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#287C26FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#ADCAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0F6D0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#2D7F2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0F6D0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#328230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#4C9148FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#478E43FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#287C26FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#70A569FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D1DFC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#51944CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#9EC194FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0A6A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#1E761CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#6BA364FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#84B27CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#478E43FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#ADCAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E0E7D3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7AAC73FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#BCD3B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C1D6B6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#8EB886FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#478E43FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C6D9BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D6E2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#93BB8BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#89B581FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#8EB886FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#8EB886FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#51944CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7AAC73FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#CCDCC0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#1E761CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#84B27CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A8C69EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EFF1E1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#51944CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F9F7EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B2CCA7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A3C399FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A3C399FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#328230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C1D6B6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#428B3EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#CCDCC0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#75A96EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#75A96EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#4C9148FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#5B9A56FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7FAF78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#84B27CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#5B9A56FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#70A569FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#99BE90FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#99BE90FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C6D9BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#CCDCC0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFDBD3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#9EC194FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#89B581FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E0E7D3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#70A569FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#569751FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#328230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEBE1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE6DCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D6E2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFFAF0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAEA8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#609D5BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E0E7D3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7AAC73FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#5B9A56FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7FAF78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFF4EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EFF1E1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C1D6B6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#93BB8BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F4F3E6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#569751FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EAEDDCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E5EBD7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#388534FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#609D5BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE6DCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A3C399FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC3BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFBEB6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF827CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD7CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB9B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#6BA364FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFCCC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E5EBD7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D6E2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9590FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE6DCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA59EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#BCD3B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFCCC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#DBE5CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEFE6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF504CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC8C0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFBEB6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EAEDDCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC8C0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC3BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F4F3E6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#99BE90FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFDBD3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6D69FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE1D8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFCCC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F4F3E6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFFAF0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8781FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#ADCAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFF4EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F9F7EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D6E2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEBE1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5F5BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EAEDDCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#DBE5CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9590FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF918BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A8C69EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6D69FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF413EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B2CCA7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFBEB6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7773FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB9B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9B94FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC8C0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5956FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6D69FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5F5BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF827CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA099FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA59EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFDBD3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE1D8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD7CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEFE6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEFE6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1D1CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2826FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5956FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9B94FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4643FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4A48FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7D78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7773FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0E0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF504CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF504CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF918BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7773FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1413FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA099FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5956FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA099FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1413FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5551FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3B39FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8781FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0504FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF413EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF736EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF827CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9590FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7D78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFFAF0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6964FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3634FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6964FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2826FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3B39FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF504CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF736EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1918FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6460FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2321FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1413FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6460FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4643FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3634FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0504FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2C2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2C2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4A48FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6460FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4643FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1D1CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1918FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1D1CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2826FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3B39FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0E0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2321FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"}]},{"accessor":"scoring","name":"scoring","type":"numeric","maxWidth":100,"style":[{"background":"#147013FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D6E2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#51944CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#328230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#75A96EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#84B27CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#70A569FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#84B27CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C6D9BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFFAF0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFCCC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7AAC73FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEFE6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E0E7D3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F4F3E6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0F6D0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F9F7EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA099FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A8C69EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#237921FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B2CCA7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E0E7D3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#1E761CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFDBD3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7FAF78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#8EB886FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7773FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A8C69EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#93BB8BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#ADCAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#056704FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#ADCAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7AAC73FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EAEDDCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#9EC194FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#609D5BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFDBD3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#99BE90FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC3BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#2D7F2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#569751FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#99BE90FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#287C26FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7FAF78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#ADCAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#478E43FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#006400FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#BCD3B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#8EB886FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#147013FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#287C26FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#CCDCC0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFCCC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#93BB8BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD7CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A3C399FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#8EB886FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0A6A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#BCD3B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#89B581FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D6E2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#6BA364FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#84B27CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#6BA364FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEFE6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#478E43FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#5B9A56FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE1D8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C1D6B6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#75A96EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EAEDDCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#328230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E5EBD7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D1DFC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#70A569FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA59EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE6DCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#2D7F2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0A6A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#197318FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4643FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C1D6B6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEBE1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9B94FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB9B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC8C0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E5EBD7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6460FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#51944CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#DBE5CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF827CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#428B3EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFDBD3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF736EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5956FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#569751FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0F6D0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFBEB6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3634FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8781FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#609D5BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#1E761CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#1E761CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFFAF0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#428B3EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFFAF0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF918BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D1DFC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9590FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8781FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C1D6B6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C6D9BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#9EC194FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC8C0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0A6A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B2CCA7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF504CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#056704FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF736EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E5EBD7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#5B9A56FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#388534FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7AAC73FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFBEB6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#147013FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7773FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD7CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE1D8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC8C0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6964FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6D69FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF918BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#89B581FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAEA8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE6DCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1D1CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1D1CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6460FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#328230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F4F3E6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#4C9148FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9590FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F4F3E6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2321FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFBEB6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#51944CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#70A569FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFF4EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#4C9148FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#197318FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EAEDDCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6D69FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF413EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE6DCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3634FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#99BE90FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA099FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4643FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5956FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1918FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4643FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEBE1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF413EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7D78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9590FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9B94FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2C2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A3C399FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A3C399FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2826FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA099FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#478E43FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#287C26FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1918FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F9F7EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1413FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#5B9A56FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EFF1E1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EFF1E1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF504CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFF4EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1413FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF504CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#237921FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6460FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#CCDCC0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3B39FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEFE6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#DBE5CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#006400FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAEA8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0E0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0504FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5551FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5F5BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3B39FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4A48FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#CCDCC0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4A48FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2C2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7773FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF827CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6964FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1D1CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7D78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB9B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2826FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0E0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3B39FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0504FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6D69FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA59EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5F5BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2321FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2826FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#DBE5CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF827CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5956FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1413FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5551FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC3BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"}]},{"accessor":"p3specialist","name":"p3specialist","type":"numeric","maxWidth":100,"style":[{"background":"#478E43FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#287C26FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#99BE90FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4A48FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#287C26FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EFF1E1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7AAC73FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#6BA364FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC8C0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D6E2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#BCD3B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#428B3EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F4F3E6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9B94FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#287C26FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D6E2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFBEB6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#93BB8BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#2D7F2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#93BB8BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7AAC73FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6964FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#84B27CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#ADCAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#CCDCC0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5551FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#51944CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E0E7D3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#428B3EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0A6A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4643FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#9EC194FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2826FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF413EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB9B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6460FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3634FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF504CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#5B9A56FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEBE1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0F6D0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2C2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6964FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3634FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E5EBD7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7773FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#478E43FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEBE1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC3BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD7CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E0E7D3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA099FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#70A569FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0F6D0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4643FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#2D7F2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5956FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA099FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#328230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A8C69EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#388534FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C6D9BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#237921FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#147013FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFFAF0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC8C0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2C2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C1D6B6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7D78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#ADCAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#8EB886FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFDBD3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#056704FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF504CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFBEB6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0A6A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#CCDCC0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC8C0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB9B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA59EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF413EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EFF1E1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#BCD3B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3B39FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F9F7EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B2CCA7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A3C399FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#609D5BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#197318FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9590FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D1DFC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#89B581FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A8C69EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A3C399FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#99BE90FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E5EBD7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5551FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFFAF0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD7CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7FAF78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#9EC194FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFCCC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#1E761CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5956FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EAEDDCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#89B581FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5F5BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFF4EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#056704FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE6DCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3B39FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAEA8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEFE6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA59EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9B94FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#8EB886FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#70A569FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#006400FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#8EB886FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE6DCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE1D8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5956FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5F5BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAEA8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF736EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C6D9BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA099FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8781FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#84B27CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF736EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#147013FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#1E761CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#5B9A56FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EAEDDCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF827CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#388534FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#CCDCC0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#99BE90FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A3C399FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFDBD3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#5B9A56FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F9F7EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#569751FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#328230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFBEB6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F4F3E6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#237921FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#569751FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EAEDDCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7D78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4643FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#ADCAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#75A96EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C1D6B6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEFE6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7773FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF827CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9590FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF827CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6D69FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F4F3E6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#84B27CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7AAC73FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9590FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D1DFC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6D69FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF504CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE6DCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC3BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#1E761CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B2CCA7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C1D6B6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#006400FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8781FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#51944CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF918BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4A48FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7FAF78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E0E7D3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE1D8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#609D5BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#70A569FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0A6A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#197318FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#4C9148FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#75A96EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFCCC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#DBE5CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#478E43FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#DBE5CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF918BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#147013FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3B39FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#4C9148FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6460FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFF4EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D6E2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6D69FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#51944CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFDBD3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEFE6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#328230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFFAF0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#6BA364FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6460FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7773FF","color":"black","fontWeight":"normal","transition":"background 1s ease"}]},{"accessor":"usage","name":"usage","type":"numeric","maxWidth":70,"style":[{"background":"#147013FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0A6A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EFF1E1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7FAF78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#75A96EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0F6D0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#056704FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7AAC73FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#428B3EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#2D7F2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#147013FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#2D7F2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#328230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#197318FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C1D6B6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#328230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#197318FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#569751FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF827CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#006400FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#4C9148FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#609D5BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#DBE5CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#99BE90FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#2D7F2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F4F3E6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#CCDCC0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7773FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#287C26FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC8C0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#056704FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#1E761CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A3C399FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#9EC194FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#197318FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#93BB8BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A3C399FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E5EBD7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C6D9BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#93BB8BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD7CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#1E761CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA59EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#ADCAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9590FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#51944CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0A6A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#5B9A56FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#1E761CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#609D5BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC8C0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A3C399FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D6E2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9B94FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0A6A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFFAF0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#428B3EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#569751FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#237921FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEBE1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7D78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7FAF78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#51944CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFCCC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#BCD3B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E5EBD7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D6E2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7D78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#478E43FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0F6D0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5551FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF827CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#388534FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFF4EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE6DCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9B94FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EFF1E1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFBEB6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EAEDDCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFFAF0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA59EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3B39FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#4C9148FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD7CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#84B27CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD7CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7AAC73FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#99BE90FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#93BB8BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEBE1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D6E2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#75A96EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEBE1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFDBD3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D6E2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E5EBD7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#51944CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#9EC194FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6460FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA59EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFFAF0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE1D8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#4C9148FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#93BB8BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFBEB6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#6BA364FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F4F3E6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5956FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFBEB6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3634FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#70A569FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D6E2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0504FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF736EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFFAF0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3B39FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5F5BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0E0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6964FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#ADCAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE6DCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#6BA364FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#CCDCC0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C1D6B6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFDBD3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7773FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFDBD3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5F5BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C1D6B6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C6D9BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#84B27CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#388534FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#006400FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#89B581FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2321FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#ADCAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#ADCAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F4F3E6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C1D6B6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#DBE5CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#287C26FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFBEB6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9590FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEBE1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6964FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#CCDCC0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0504FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2826FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6460FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4643FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#70A569FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EAEDDCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#287C26FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7AAC73FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#ADCAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE6DCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5956FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9590FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9B94FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFCCC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3634FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1413FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#70A569FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7773FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5956FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#478E43FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFF4EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#70A569FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2321FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF413EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF504CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF413EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF504CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EFF1E1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1918FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8781FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4A48FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9B94FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4A48FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEBE1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7D78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2826FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7D78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF413EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2C2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#99BE90FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2C2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#93BB8BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E5EBD7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#84B27CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#609D5BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5956FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6D69FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1D1CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1D1CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6D69FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF413EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3634FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF736EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5551FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC8C0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#93BB8BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF504CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEBE1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1D1CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1413FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0E0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1413FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1413FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6D69FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2826FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E5EBD7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"}]},{"accessor":"playmaking","name":"playmaking","type":"numeric","maxWidth":100,"style":[{"background":"#FFE1D8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#75A96EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#84B27CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#8EB886FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#287C26FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#1E761CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#1E761CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#70A569FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0A6A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#197318FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0F6D0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#197318FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#428B3EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#5B9A56FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#1E761CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3B39FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#237921FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D1DFC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#328230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EAEDDCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#2D7F2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#056704FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFBEB6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#CCDCC0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#99BE90FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#237921FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#328230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F4F3E6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEFE6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EAEDDCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#569751FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#8EB886FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7FAF78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#4C9148FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B2CCA7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#84B27CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC3BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF504CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EAEDDCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFDBD3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA59EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE6DCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D6E2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C1D6B6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF736EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#388534FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9590FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3634FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9B94FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#8EB886FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F4F3E6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F4F3E6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#056704FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#99BE90FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF504CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#569751FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5956FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#9EC194FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6460FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#70A569FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#478E43FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#388534FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFDBD3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7773FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0F6D0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5F5BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#BCD3B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#006400FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#4C9148FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9590FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#9EC194FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EFF1E1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE6DCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0F6D0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4643FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#CCDCC0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA59EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB9B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7FAF78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A8C69EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4643FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0504FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2826FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0A6A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#287C26FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#89B581FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#147013FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C6D9BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFF4EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A3C399FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EFF1E1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#ADCAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#609D5BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#DBE5CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C6D9BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#5B9A56FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#569751FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEBE1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#569751FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#93BB8BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#5B9A56FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFFAF0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7773FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3B39FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1918FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF918BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D1DFC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF827CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#478E43FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#75A96EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#51944CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9B94FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7AAC73FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8781FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C1D6B6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#70A569FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A3C399FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6D69FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1D1CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#BCD3B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E0E7D3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4643FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0E0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#CCDCC0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1413FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAEA8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9B94FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAEA8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#6BA364FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#84B27CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#DBE5CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2826FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE6DCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFCCC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4A48FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#147013FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#006400FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1D1CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFFAF0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#287C26FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F9F7EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#2D7F2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7AAC73FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#328230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1D1CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4A48FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1918FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6D69FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D6E2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFCCC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A3C399FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEBE1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7AAC73FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9B94FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC3BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5F5BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFBEB6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC8C0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#70A569FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F9F7EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5956FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#428B3EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC8C0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF827CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4A48FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5551FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7D78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF827CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C6D9BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3B39FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E0E7D3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2826FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFFAF0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#93BB8BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2C2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2C2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EFF1E1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF413EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1413FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6D69FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2321FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFBEB6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#147013FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2C2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#ADCAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#478E43FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6460FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEFE6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#89B581FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E0E7D3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6460FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D6E2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF736EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2C2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB9B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#ADCAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A8C69EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9B94FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFBEB6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0504FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#99BE90FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7D78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE6DCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1413FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6964FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF413EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8781FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9590FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EAEDDCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0E0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFDBD3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFDBD3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7773FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6964FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5551FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2321FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5956FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEFE6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"}]},{"accessor":"stl","name":"stl","type":"numeric","maxWidth":70,"style":[{"background":"#8EB886FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#237921FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#328230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#2D7F2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0F6D0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0A6A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#2D7F2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D1DFC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#056704FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#51944CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#147013FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#84B27CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#5B9A56FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#388534FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#569751FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#056704FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B2CCA7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0A6A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#99BE90FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#5B9A56FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFDBD3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#1E761CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A3C399FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D6E2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#287C26FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#99BE90FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0A6A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#428B3EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#8EB886FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A3C399FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9B94FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#197318FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A3C399FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B2CCA7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#70A569FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF827CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#237921FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#8EB886FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#609D5BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#4C9148FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8781FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#1E761CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#147013FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#70A569FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFF4EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE6DCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC8C0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7AAC73FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#51944CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6D69FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#9EC194FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9590FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFF4EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F9F7EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA099FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#6BA364FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#569751FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE6DCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1918FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#ADCAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2C2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#93BB8BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#9EC194FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC3BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EFF1E1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EAEDDCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#609D5BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#BCD3B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#478E43FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEFE6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EFF1E1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#478E43FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#84B27CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#89B581FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#99BE90FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A8C69EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#93BB8BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D1DFC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#147013FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#6BA364FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#75A96EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#ADCAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#197318FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFFAF0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#006400FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#51944CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#CCDCC0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFBEB6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD7CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3B39FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A8C69EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0F6D0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEFE6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6D69FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9B94FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#006400FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE6DCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF827CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFFAF0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7FAF78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#287C26FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E5EBD7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5956FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFCCC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C6D9BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0E0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5956FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E5EBD7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#84B27CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6460FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE1D8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4643FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4643FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA59EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF413EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#478E43FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1413FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEBE1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#428B3EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3B39FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#1E761CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF736EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFFAF0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF918BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1413FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFBEB6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1918FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAEA8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2321FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC8C0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5956FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#ADCAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#75A96EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7773FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#4C9148FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#DBE5CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9590FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C1D6B6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF504CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EAEDDCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#DBE5CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF504CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5F5BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1D1CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#CCDCC0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2826FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#89B581FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6964FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0E0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#328230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D6E2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#287C26FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C1D6B6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#70A569FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFBEB6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5F5BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#5B9A56FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF918BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E0E7D3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F4F3E6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA099FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFDBD3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB9B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#CCDCC0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EAEDDCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7FAF78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1D1CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2C2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7AAC73FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F4F3E6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4643FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D6E2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5551FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C1D6B6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFDBD3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7D78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF413EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF736EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3634FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7AAC73FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC3BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#BCD3B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#328230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEFE6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#CCDCC0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA59EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4A48FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6964FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6460FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9590FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6D69FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD7CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEBE1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF827CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6460FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7773FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3634FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F9F7EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF504CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E0E7D3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFCCC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAEA8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1413FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB9B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#388534FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2321FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2826FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7D78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0504FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E0E7D3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F4F3E6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE1D8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC8C0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7773FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4A48FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8781FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5551FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2826FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA099FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1D1CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3B39FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"}]},{"accessor":"blk","name":"blk","type":"numeric","maxWidth":70,"style":[{"background":"#8EB886FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#ADCAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6460FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C1D6B6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6460FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C1D6B6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F4F3E6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE6DCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6460FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#478E43FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A3C399FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#DBE5CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#006400FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#ADCAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC3BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#237921FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9B94FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#147013FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#84B27CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFFAF0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#84B27CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#5B9A56FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9590FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#75A96EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A8C69EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0A6A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#4C9148FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA59EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC3BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EAEDDCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A3C399FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F9F7EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A8C69EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#1E761CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0F6D0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#2D7F2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#287C26FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFCCC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#4C9148FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E0E7D3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0A6A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#147013FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#6BA364FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7AAC73FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#569751FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#51944CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#84B27CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#147013FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFDBD3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#056704FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#9EC194FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7FAF78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF827CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEFE6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#478E43FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#428B3EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#51944CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEBE1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#056704FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6D69FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#8EB886FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEBE1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#609D5BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EAEDDCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#287C26FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E0E7D3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#CCDCC0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7773FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#388534FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EFF1E1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#1E761CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0F6D0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7773FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D6E2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#99BE90FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B2CCA7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7FAF78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6D69FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#ADCAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0A6A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6D69FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#BCD3B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#197318FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFFAF0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF827CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAEA8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F9F7EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFBEB6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#DBE5CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#BCD3B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF918BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFDBD3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#70A569FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#328230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#328230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F4F3E6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#99BE90FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C6D9BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9590FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFCCC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE1D8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#197318FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#93BB8BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7773FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D1DFC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#609D5BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9590FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#8EB886FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7AAC73FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A3C399FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#51944CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9B94FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#328230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#237921FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C6D9BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D6E2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D6E2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#75A96EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE1D8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA099FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#5B9A56FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC8C0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEFE6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#006400FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE6DCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#70A569FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD7CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B2CCA7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#428B3EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF736EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF918BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E5EBD7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#6BA364FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7AAC73FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9B94FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6964FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7773FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8781FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#8EB886FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#9EC194FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF736EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFFAF0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8781FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFF4EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#2D7F2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E5EBD7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#99BE90FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB9B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F4F3E6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE6DCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF827CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D1DFC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#287C26FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#388534FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#569751FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EFF1E1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#89B581FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#5B9A56FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFF4EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#1E761CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC8C0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EAEDDCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#70A569FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7773FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC8C0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEFE6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#99BE90FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C1D6B6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFDBD3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA099FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8781FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6964FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFBEB6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#CCDCC0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD7CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#478E43FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFBEB6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D1DFC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAEA8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB9B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA59EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E0E7D3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"}]},{"accessor":"rebounding","name":"rebounding","type":"numeric","maxWidth":100,"style":[{"background":"#237921FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C1D6B6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#197318FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0F6D0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EAEDDCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC3BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#89B581FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#99BE90FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#70A569FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E0E7D3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFBEB6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#8EB886FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#428B3EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A3C399FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#006400FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA099FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#328230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#CCDCC0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#287C26FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD7CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#1E761CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0F6D0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7AAC73FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEFE6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#388534FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#478E43FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#8EB886FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#6BA364FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EFF1E1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFCCC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7773FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0A6A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#9EC194FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#478E43FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#197318FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#287C26FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#056704FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#569751FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#8EB886FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C6D9BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#056704FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#609D5BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFF4EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9B94FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#287C26FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0A6A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#328230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#1E761CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#4C9148FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#CCDCC0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#51944CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E5EBD7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#5B9A56FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC8C0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#147013FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#70A569FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#89B581FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7FAF78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6460FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#1E761CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#237921FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#147013FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F9F7EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#006400FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB9B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE1D8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA59EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#ADCAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF504CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#5B9A56FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6964FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF827CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0A6A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#609D5BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#BCD3B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF918BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#4C9148FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#51944CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#328230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#428B3EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC3BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#2D7F2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C1D6B6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A3C399FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#93BB8BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#CCDCC0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5551FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#51944CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD7CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#99BE90FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A3C399FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8781FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#569751FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF413EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6D69FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#6BA364FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D6E2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#ADCAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F4F3E6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#5B9A56FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7D78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFBEB6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9590FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#147013FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7FAF78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEBE1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D1DFC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#70A569FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C6D9BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEBE1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#DBE5CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#9EC194FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#478E43FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE1D8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAEA8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1918FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B2CCA7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A8C69EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7AAC73FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#75A96EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7AAC73FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B2CCA7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5956FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5F5BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFFAF0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFCCC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6D69FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D1DFC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF736EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#DBE5CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F4F3E6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#388534FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF504CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC8C0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2826FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#84B27CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#84B27CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA099FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF827CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF413EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1413FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6460FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#BCD3B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEFE6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3B39FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EFF1E1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5F5BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAEA8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5551FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFDBD3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A8C69EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3634FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#93BB8BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EAEDDCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E0E7D3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8781FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D6E2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7D78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1918FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3B39FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC8C0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C1D6B6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFBEB6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFFAF0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6460FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#99BE90FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F9F7EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFDBD3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2321FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#84B27CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6964FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EAEDDCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1D1CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF918BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF736EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE6DCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFDBD3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFFAF0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF504CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6D69FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE6DCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#75A96EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E0E7D3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#2D7F2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2C2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9590FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2321FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3B39FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA099FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0504FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7773FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2826FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4A48FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1413FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA59EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4A48FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E5EBD7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4643FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7773FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1D1CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4643FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1413FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9B94FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB9B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFF4EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF827CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE6DCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1D1CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0504FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEFE6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4643FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2826FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0E0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9590FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3634FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#ADCAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2C2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0E0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F4F3E6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5956FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D6E2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5956FF","color":"black","fontWeight":"normal","transition":"background 1s ease"}]},{"accessor":"ft","name":"ft","type":"numeric","maxWidth":100,"style":[{"background":"#006400FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#51944CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#6BA364FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#428B3EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#147013FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#237921FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#056704FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#197318FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7FAF78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#328230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#2D7F2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#328230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#75A96EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#8EB886FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#4C9148FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#2D7F2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#287C26FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#147013FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7AAC73FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#70A569FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#478E43FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D1DFC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#056704FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#287C26FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C1D6B6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0F6D0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#89B581FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A8C69EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#237921FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#70A569FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFDBD3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#6BA364FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#4C9148FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#1E761CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EFF1E1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#84B27CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#1E761CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#5B9A56FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#CCDCC0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#428B3EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#51944CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAEA8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#99BE90FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#569751FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0F6D0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#70A569FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#BCD3B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#5B9A56FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#BCD3B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5551FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B2CCA7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF827CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7AAC73FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFBEB6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB9B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0A6A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E0E7D3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EAEDDCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F9F7EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#51944CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A3C399FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E0E7D3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFBEB6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9590FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#89B581FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4643FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8781FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#569751FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C6D9BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF504CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#8EB886FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#1E761CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EAEDDCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C1D6B6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#328230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE6DCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#609D5BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#388534FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#9EC194FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAEA8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5F5BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF736EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#609D5BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#388534FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD7CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2826FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5956FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#DBE5CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#478E43FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#84B27CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0A6A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA099FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD7CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EFF1E1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC3BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEBE1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF736EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F4F3E6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA59EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#93BB8BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFF4EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFBEB6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B2CCA7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9B94FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#8EB886FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFF4EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F9F7EBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#99BE90FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#84B27CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA099FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#478E43FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFD2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C6D9BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#CCDCC0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A3C399FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7D78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2C2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#197318FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8781FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#006400FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#CCDCC0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D6E2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#287C26FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE6DCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#ADCAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D6E2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEFE6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7773FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF918BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC8C0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A3C399FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#99BE90FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#5B9A56FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6460FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFCCC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF504CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFFAF0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2826FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA59EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5F5BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E0E7D3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F4F3E6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E5EBD7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#0A6A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#C1D6B6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#EAEDDCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7D78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#DBE5CEFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D6E2C9FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6D69FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF413EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEFE6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7773FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2826FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF827CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7FAF78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE1D8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC8C0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3B39FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#A8C69EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFCCC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF7773FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEFE6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5956FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6460FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC3BBFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9B94FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7AAC73FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3634FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4643FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#75A96EFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2321FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF827CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1413FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#ADCAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFA099FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2C2BFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#F4F3E6FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFDBD3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFFAF0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFFAF0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3B39FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3B39FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE1D8FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#E5EBD7FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFAAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1D1CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0E0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6964FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6D69FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF413EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#147013FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#D1DFC4FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1D1CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5956FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4643FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#B7D0ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#9EC194FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFEBE1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF5551FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4A48FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3634FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6460FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6964FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9590FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1D1CFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF4A48FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF8C86FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFDBD3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB9B1FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFB3ACFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#93BB8BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF918BFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#ADCAA3FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF6D69FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF3230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF9590FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFE6DCFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1413FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1918FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF504CFF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FFC8C0FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0A09FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1918FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0000FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF1413FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF2321FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#FF0E0EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"}]},{"accessor":"Per","name":"Per","type":"numeric","maxWidth":70,"style":[{"background":"#006400FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#328230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#147013FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#147013FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#388534FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#287C26FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#197318FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#287C26FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#65A05FFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#478E43FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#328230FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#7FAF78FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#89B581FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#056704FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#478E43FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#89B581FF","color":"black","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#3D8839FF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#428B3EFF","color":"white","fontWeight":"normal","transition":"background 1s ease"},{"background":"#4C9148FF","color":"white","fontWeight":"normal","transit