filens-preview 0.1.4 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +99 -24
- package/dist/all-in-one/filens.js +24667 -22367
- package/dist/index.d.ts +4 -0
- package/dist/split/assets/iwork-worker-DiTOJG8f.js +27 -0
- package/dist/split/chunks/{archive-Drem4a-o.js → archive-_cUUL2-3.js} +2 -2
- package/dist/split/chunks/{cad-CsU3TiHK.js → cad-Cyh8aipO.js} +1 -1
- package/dist/split/chunks/{core-BvtuMqS1.js → core-gp02JQ3r.js} +1493 -1459
- package/dist/split/chunks/{diagram-BxRNHzmO.js → diagram-rxvArV-1.js} +2 -2
- package/dist/split/chunks/{docx-Ch1AvEUX.js → docx-ecvZsSWm.js} +2 -2
- package/dist/split/chunks/{ebook-P42eILp5.js → ebook-5FyKWZ8s.js} +2 -2
- package/dist/split/chunks/{iwork-HnghW_EB.js → iwork-DlaehzuR.js} +63 -63
- package/dist/split/chunks/{media-runtime-kbzoW8bd.js → media-runtime-DwW7eq4g.js} +2 -2
- package/dist/split/chunks/{mindmap-vFlOJSIq.js → mindmap-D9lNNDoa.js} +2 -2
- package/dist/split/chunks/{model3d-DoNu7iyY.js → model3d-BtFT01ZH.js} +3 -3
- package/dist/split/chunks/{panorama-Bw_8HQsv.js → panorama-Ci6DK6sa.js} +989 -985
- package/dist/split/chunks/{vendor-Cv2Fxtsf.js → vendor-DvWhw-zP.js} +6883 -7216
- package/dist/split/chunks/{xlsx-ypLtJxeq.js → xlsx-VJTu9XNS.js} +2 -2
- package/dist/split/converter-core.wasm +0 -0
- package/dist/split/converter-office.wasm +0 -0
- package/dist/split/filens.js +3814 -1213
- package/package.json +1 -1
- package/dist/split/assets/iwork-worker-D64s_rsm.js +0 -34
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as u } from "./panorama-
|
|
1
|
+
import { aO as h } from "./vendor-DvWhw-zP.js";
|
|
2
|
+
import { t as u } from "./panorama-Ci6DK6sa.js";
|
|
3
3
|
const V = "KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEp0KFMpe3JldHVybiBTJiZTLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChTLCJkZWZhdWx0Iik/Uy5kZWZhdWx0OlN9ZnVuY3Rpb24gS3QoUyl7aWYoUy5fX2VzTW9kdWxlKXJldHVybiBTO3ZhciBJPVMuZGVmYXVsdDtpZih0eXBlb2YgST09ImZ1bmN0aW9uIil7dmFyIHE9ZnVuY3Rpb24gVSgpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgVT9SZWZsZWN0LmNvbnN0cnVjdChJLGFyZ3VtZW50cyx0aGlzLmNvbnN0cnVjdG9yKTpJLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07cS5wcm90b3R5cGU9SS5wcm90b3R5cGV9ZWxzZSBxPXt9O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmtleXMoUykuZm9yRWFjaChmdW5jdGlvbihVKXt2YXIgTj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFMsVSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsVSxOLmdldD9OOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBTW1VdfX0pfSkscX12YXIgcHQ9e2V4cG9ydHM6e319LFp0PXt9LFF0PU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLGRlZmF1bHQ6WnR9KSxOZT1LdChRdCk7KGZ1bmN0aW9uKFMsSSl7dmFyIHE9KCgpPT57dmFyIFUsTj10eXBlb2YgZG9jdW1lbnQ8InUiPyhVPWRvY3VtZW50LmN1cnJlbnRTY3JpcHQpPT1udWxsP3ZvaWQgMDpVLnNyYzp2b2lkIDA7cmV0dXJuIHR5cGVvZiBfX2ZpbGVuYW1lPCJ1IiYmKE58fChOPV9fZmlsZW5hbWUpKSxmdW5jdGlvbihaPXt9KXt2YXIgdGUsbj1aLGZlLHJlO25ldyBQcm9taXNlKChlLHQpPT57ZmU9ZSxyZT10fSk7dmFyICRlPXR5cGVvZiB3aW5kb3c9PSJvYmplY3QiLFE9dHlwZW9mIGltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiIsaGU9dHlwZW9mIHByb2Nlc3M9PSJvYmplY3QiJiZ0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucz09Im9iamVjdCImJnR5cGVvZiBwcm9jZXNzLnZlcnNpb25zLm5vZGU9PSJzdHJpbmciLFBlPU9iamVjdC5hc3NpZ24oe30sbiksVWU9Ii4vdGhpcy5wcm9ncmFtIixCPSIiO2Z1bmN0aW9uIG5yKGUpe3JldHVybiBuLmxvY2F0ZUZpbGU/bi5sb2NhdGVGaWxlKGUsQik6QitlfXZhciBkZSxMZSxDZTtpZihoZSl7dmFyIFZlPU5lLGd0PU5lO0I9X19kaXJuYW1lKyIvIixkZT0oZSx0KT0+KGU9SmUoZSk/bmV3IFVSTChlKTpndC5ub3JtYWxpemUoZSksVmUucmVhZEZpbGVTeW5jKGUsdD92b2lkIDA6InV0ZjgiKSksQ2U9ZT0+e3ZhciB0PWRlKGUsITApO3JldHVybiB0LmJ1ZmZlcnx8KHQ9bmV3IFVpbnQ4QXJyYXkodCkpLHR9LExlPShlLHQscixpPSEwKT0+e2U9SmUoZSk/bmV3IFVSTChlKTpndC5ub3JtYWxpemUoZSksVmUucmVhZEZpbGUoZSxpP3ZvaWQgMDoidXRmOCIsKF8scyk9PntfP3IoXyk6dChpP3MuYnVmZmVyOnMpfSl9LCFuLnRoaXNQcm9ncmFtJiZwcm9jZXNzLmFyZ3YubGVuZ3RoPjEmJihVZT1wcm9jZXNzLmFyZ3ZbMV0ucmVwbGFjZSgvXFwvZywiLyIpKSxwcm9jZXNzLmFyZ3Yuc2xpY2UoMil9ZWxzZSgkZXx8USkmJihRP0I9c2VsZi5sb2NhdGlvbi5ocmVmOnR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQmJihCPWRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjKSxOJiYoQj1OKSxCLnN0YXJ0c1dpdGgoImJsb2I6Iik/Qj0iIjpCPUIuc3Vic3RyKDAsQi5yZXBsYWNlKC9bPyNdLiovLCIiKS5sYXN0SW5kZXhPZigiLyIpKzEpLGRlPWU9Pnt2YXIgdD1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIHQub3BlbigiR0VUIixlLCExKSx0LnNlbmQobnVsbCksdC5yZXNwb25zZVRleHR9LFEmJihDZT1lPT57dmFyIHQ9bmV3IFhNTEh0dHBSZXF1ZXN0O3JldHVybiB0Lm9wZW4oIkdFVCIsZSwhMSksdC5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIix0LnNlbmQobnVsbCksbmV3IFVpbnQ4QXJyYXkodC5yZXNwb25zZSl9KSxMZT0oZSx0LHIpPT57aWYoSmUoZSkpe3ZhciBpPW5ldyBYTUxIdHRwUmVxdWVzdDtpLm9wZW4oIkdFVCIsZSwhMCksaS5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIixpLm9ubG9hZD0oKT0+e2lmKGkuc3RhdHVzPT0yMDB8fGkuc3RhdHVzPT0wJiZpLnJlc3BvbnNlKXt0KGkucmVzcG9uc2UpO3JldHVybn1yKCl9LGkub25lcnJvcj1yLGkuc2VuZChudWxsKTtyZXR1cm59ZmV0Y2goZSx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oXz0+Xy5vaz9fLmFycmF5QnVmZmVyKCk6UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKF8uc3RhdHVzKyIgOiAiK18udXJsKSkpLnRoZW4odCxyKX0pO3ZhciBZZT1uLnByaW50fHxjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLGNlPW4ucHJpbnRFcnJ8fGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtPYmplY3QuYXNzaWduKG4sUGUpLFBlPW51bGwsbi5hcmd1bWVudHMmJm4uYXJndW1lbnRzLG4udGhpc1Byb2dyYW0mJihVZT1uLnRoaXNQcm9ncmFtKSxuLnF1aXQmJm4ucXVpdDt2YXIgWGU7bi53YXNtQmluYXJ5JiYoWGU9bi53YXNtQmluYXJ5KTt2YXIgVGUsdnQ9ITEsTSxPLFgsdWUsdyx4LHl0LHd0O2Z1bmN0aW9uIGJ0KCl7dmFyIGU9VGUuYnVmZmVyO24uSEVBUDg9TT1uZXcgSW50OEFycmF5KGUpLG4uSEVBUDE2PVg9bmV3IEludDE2QXJyYXkoZSksbi5IRUFQVTg9Tz1uZXcgVWludDhBcnJheShlKSxuLkhFQVBVMTY9dWU9bmV3IFVpbnQxNkFycmF5KGUpLG4uSEVBUDMyPXc9bmV3IEludDMyQXJyYXkoZSksbi5IRUFQVTMyPXg9bmV3IFVpbnQzMkFycmF5KGUpLG4uSEVBUEYzMj15dD1uZXcgRmxvYXQzMkFycmF5KGUpLG4uSEVBUEY2ND13dD1uZXcgRmxvYXQ2NEFycmF5KGUpfXZhciBFdD1bXSxrdD1bXSx4dD1bXTtmdW5jdGlvbiBpcigpe2lmKG4ucHJlUnVuKWZvcih0eXBlb2Ygbi5wcmVSdW49PSJmdW5jdGlvbiImJihuLnByZVJ1bj1bbi5wcmVSdW5dKTtuLnByZVJ1bi5sZW5ndGg7KV9yKG4ucHJlUnVuLnNoaWZ0KCkpO0tlKEV0KX1mdW5jdGlvbiBhcigpeyFuLm5vRlNJbml0JiYhby5pbml0LmluaXRpYWxpemVkJiZvLmluaXQoKSxvLmlnbm9yZVBlcm1pc3Npb25zPSExLEtlKGt0KX1mdW5jdGlvbiBvcigpe2lmKG4ucG9zdFJ1bilmb3IodHlwZW9mIG4ucG9zdFJ1bj09ImZ1bmN0aW9uIiYmKG4ucG9zdFJ1bj1bbi5wb3N0UnVuXSk7bi5wb3N0UnVuLmxlbmd0aDspbHIobi5wb3N0UnVuLnNoaWZ0KCkpO0tlKHh0KX1mdW5jdGlvbiBfcihlKXtFdC51bnNoaWZ0KGUpfWZ1bmN0aW9uIHNyKGUpe2t0LnVuc2hpZnQoZSl9ZnVuY3Rpb24gbHIoZSl7eHQudW5zaGlmdChlKX12YXIgbmU9MCxtZT1udWxsO2Z1bmN0aW9uIEdlKGUpe3ZhciB0O25lKyssKHQ9bi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKT09bnVsbHx8dC5jYWxsKG4sbmUpfWZ1bmN0aW9uIERlKGUpe3ZhciB0O2lmKG5lLS0sKHQ9bi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKT09bnVsbHx8dC5jYWxsKG4sbmUpLG5lPT0wJiZtZSl7dmFyIHI9bWU7bWU9bnVsbCxyKCl9fWZ1bmN0aW9uIHBlKGUpe3ZhciB0Oyh0PW4ub25BYm9ydCk9PW51bGx8fHQuY2FsbChuLGUpLGU9IkFib3J0ZWQoIitlKyIpIixjZShlKSx2dD0hMCxlKz0iLiBCdWlsZCB3aXRoIC1zQVNTRVJUSU9OUyBmb3IgbW9yZSBpbmZvLiI7dmFyIHI9bmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcihlKTt0aHJvdyByZShyKSxyfXZhciBmcj0iZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCIsaHI9ZT0+ZS5zdGFydHNXaXRoKGZyKSxKZT1lPT5lLnN0YXJ0c1dpdGgoImZpbGU6Ly8iKTtmdW5jdGlvbiBkcigpe3ZhciBlPSJsaWJoZWlmLndhc20iO3JldHVybiBocihlKT9lOm5yKGUpfXZhciBGZTtmdW5jdGlvbiBjcihlKXtpZihlPT1GZSYmWGUpcmV0dXJuIG5ldyBVaW50OEFycmF5KFhlKTtpZihDZSlyZXR1cm4gQ2UoZSk7dGhyb3cnc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWQ6IHlvdSBjYW4gcHJlbG9hZCBpdCB0byBNb2R1bGVbIndhc21CaW5hcnkiXSBtYW51YWxseSwgb3IgZW1jYy5weSB3aWxsIGRvIHRoYXQgZm9yIHlvdSB3aGVuIGdlbmVyYXRpbmcgSFRNTCAoYnV0IG5vdCBKUyknfWZ1bmN0aW9uIHVyKGUsdCl7dmFyIHIsaT1jcihlKTtyPW5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoaSk7dmFyIF89bmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKHIsdCk7cmV0dXJuW18scl19ZnVuY3Rpb24gbXIoKXtyZXR1cm57YTp2aX19ZnVuY3Rpb24gcHIoKXt2YXIgZT1tcigpO2Z1bmN0aW9uIHQoaSxfKXtyZXR1cm4gYT1pLmV4cG9ydHMsVGU9YS5RLGJ0KCksUnQ9YS5ULHNyKGEuUiksRGUoKSxhfWlmKEdlKCksbi5pbnN0YW50aWF0ZVdhc20pdHJ5e3JldHVybiBuLmluc3RhbnRpYXRlV2FzbShlLHQpfWNhdGNoKGkpe2NlKGBNb2R1bGUuaW5zdGFudGlhdGVXYXNtIGNhbGxiYWNrIGZhaWxlZCB3aXRoIGVycm9yOiAke2l9YCkscmUoaSl9RmV8fChGZT1kcigpKTt2YXIgcj11cihGZSxlKTtyZXR1cm4gdChyWzBdKX12YXIgRSxqLEtlPWU9Pntmb3IoO2UubGVuZ3RoPjA7KWUuc2hpZnQoKShuKX07bi5ub0V4aXRSdW50aW1lO3ZhciAkdD10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2RlcigidXRmOCIpOnZvaWQgMCxfZT0oZSx0LHIpPT57Zm9yKHZhciBpPXQrcixfPXQ7ZVtfXSYmIShfPj1pKTspKytfO2lmKF8tdD4xNiYmZS5idWZmZXImJiR0KXJldHVybiAkdC5kZWNvZGUoZS5zdWJhcnJheSh0LF8pKTtmb3IodmFyIHM9IiI7dDxfOyl7dmFyIGw9ZVt0KytdO2lmKCEobCYxMjgpKXtzKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGwpO2NvbnRpbnVlfXZhciBmPWVbdCsrXSY2MztpZigobCYyMjQpPT0xOTIpe3MrPVN0cmluZy5mcm9tQ2hhckNvZGUoKGwmMzEpPDw2fGYpO2NvbnRpbnVlfXZhciBoPWVbdCsrXSY2MztpZigobCYyNDApPT0yMjQ/bD0obCYxNSk8PDEyfGY8PDZ8aDpsPShsJjcpPDwxOHxmPDwxMnxoPDw2fGVbdCsrXSY2MyxsPDY1NTM2KXMrPVN0cmluZy5mcm9tQ2hhckNvZGUobCk7ZWxzZXt2YXIgYz1sLTY1NTM2O3MrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8Yz4+MTAsNTYzMjB8YyYxMDIzKX19cmV0dXJuIHN9LGllPShlLHQpPT5lP19lKE8sZSx0KToiIixncj0oZSx0LHIsaSk9PntwZShgQXNzZXJ0aW9uIGZhaWxlZDogJHtpZShlKX0sIGF0OiBgK1t0P2llKHQpOiJ1bmtub3duIGZpbGVuYW1lIixyLGk/aWUoaSk6InVua25vd24gZnVuY3Rpb24iXSl9O2NsYXNzIHZye2NvbnN0cnVjdG9yKHQpe3RoaXMuZXhjUHRyPXQsdGhpcy5wdHI9dC0yNH1zZXRfdHlwZSh0KXt4W3RoaXMucHRyKzQ+PjJdPXR9Z2V0X3R5cGUoKXtyZXR1cm4geFt0aGlzLnB0cis0Pj4yXX1zZXRfZGVzdHJ1Y3Rvcih0KXt4W3RoaXMucHRyKzg+PjJdPXR9Z2V0X2Rlc3RydWN0b3IoKXtyZXR1cm4geFt0aGlzLnB0cis4Pj4yXX1zZXRfY2F1Z2h0KHQpe3Q9dD8xOjAsTVt0aGlzLnB0cisxMl09dH1nZXRfY2F1Z2h0KCl7cmV0dXJuIE1bdGhpcy5wdHIrMTJdIT0wfXNldF9yZXRocm93bih0KXt0PXQ/MTowLE1bdGhpcy5wdHIrMTNdPXR9Z2V0X3JldGhyb3duKCl7cmV0dXJuIE1bdGhpcy5wdHIrMTNdIT0wfWluaXQodCxyKXt0aGlzLnNldF9hZGp1c3RlZF9wdHIoMCksdGhpcy5zZXRfdHlwZSh0KSx0aGlzLnNldF9kZXN0cnVjdG9yKHIpfXNldF9hZGp1c3RlZF9wdHIodCl7eFt0aGlzLnB0cisxNj4+Ml09dH1nZXRfYWRqdXN0ZWRfcHRyKCl7cmV0dXJuIHhbdGhpcy5wdHIrMTY+PjJdfWdldF9leGNlcHRpb25fcHRyKCl7dmFyIHQ9d2kodGhpcy5nZXRfdHlwZSgpKTtpZih0KXJldHVybiB4W3RoaXMuZXhjUHRyPj4yXTt2YXIgcj10aGlzLmdldF9hZGp1c3RlZF9wdHIoKTtyZXR1cm4gciE9PTA/cjp0aGlzLmV4Y1B0cn19dmFyIFB0PTAseXI9KGUsdCxyKT0+e3ZhciBpPW5ldyB2cihlKTt0aHJvdyBpLmluaXQodCxyKSxQdD1lLFB0fTtmdW5jdGlvbiBBZSgpe3ZhciBlPXdbK1IudmFyYXJncz4+Ml07cmV0dXJuIFIudmFyYXJncys9NCxlfXZhciBzZT1BZSxDPXtpc0FiczplPT5lLmNoYXJBdCgwKT09PSIvIixzcGxpdFBhdGg6ZT0+e3ZhciB0PS9eKFwvP3wpKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXC9dKz98KShcLlteLlwvXSp8KSkoPzpbXC9dKikkLztyZXR1cm4gdC5leGVjKGUpLnNsaWNlKDEpfSxub3JtYWxpemVBcnJheTooZSx0KT0+e2Zvcih2YXIgcj0wLGk9ZS5sZW5ndGgtMTtpPj0wO2ktLSl7dmFyIF89ZVtpXTtfPT09Ii4iP2Uuc3BsaWNlKGksMSk6Xz09PSIuLiI/KGUuc3BsaWNlKGksMSkscisrKTpyJiYoZS5zcGxpY2UoaSwxKSxyLS0pfWlmKHQpZm9yKDtyO3ItLSllLnVuc2hpZnQoIi4uIik7cmV0dXJuIGV9LG5vcm1hbGl6ZTplPT57dmFyIHQ9Qy5pc0FicyhlKSxyPWUuc3Vic3RyKC0xKT09PSIvIjtyZXR1cm4gZT1DLm5vcm1hbGl6ZUFycmF5KGUuc3BsaXQoIi8iKS5maWx0ZXIoaT0+ISFpKSwhdCkuam9pbigiLyIpLCFlJiYhdCYmKGU9Ii4iKSxlJiZyJiYoZSs9Ii8iKSwodD8iLyI6IiIpK2V9LGRpcm5hbWU6ZT0+e3ZhciB0PUMuc3BsaXRQYXRoKGUpLHI9dFswXSxpPXRbMV07cmV0dXJuIXImJiFpPyIuIjooaSYmKGk9aS5zdWJzdHIoMCxpLmxlbmd0aC0xKSkscitpKX0sYmFzZW5hbWU6ZT0+e2lmKGU9PT0iLyIpcmV0dXJuIi8iO2U9Qy5ub3JtYWxpemUoZSksZT1lLnJlcGxhY2UoL1wvJC8sIiIpO3ZhciB0PWUubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gdD09PS0xP2U6ZS5zdWJzdHIodCsxKX0sam9pbjooLi4uZSk9PkMubm9ybWFsaXplKGUuam9pbigiLyIpKSxqb2luMjooZSx0KT0+Qy5ub3JtYWxpemUoZSsiLyIrdCl9LHdyPSgpPT57aWYodHlwZW9mIGNyeXB0bz09Im9iamVjdCImJnR5cGVvZiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzPT0iZnVuY3Rpb24iKXJldHVybiBpPT5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGkpO2lmKGhlKXRyeXt2YXIgZT1OZSx0PWUucmFuZG9tRmlsbFN5bmM7aWYodClyZXR1cm4gaT0+ZS5yYW5kb21GaWxsU3luYyhpKTt2YXIgcj1lLnJhbmRvbUJ5dGVzO3JldHVybiBpPT4oaS5zZXQocihpLmJ5dGVMZW5ndGgpKSxpKX1jYXRjaHt9cGUoImluaXRSYW5kb21EZXZpY2UiKX0sQ3Q9ZT0+KEN0PXdyKCkpKGUpLEc9e3Jlc29sdmU6KC4uLmUpPT57Zm9yKHZhciB0PSIiLHI9ITEsaT1lLmxlbmd0aC0xO2k+PS0xJiYhcjtpLS0pe3ZhciBfPWk+PTA/ZVtpXTpvLmN3ZCgpO2lmKHR5cGVvZiBfIT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncyIpO2lmKCFfKXJldHVybiIiO3Q9XysiLyIrdCxyPUMuaXNBYnMoXyl9cmV0dXJuIHQ9Qy5ub3JtYWxpemVBcnJheSh0LnNwbGl0KCIvIikuZmlsdGVyKHM9PiEhcyksIXIpLmpvaW4oIi8iKSwocj8iLyI6IiIpK3R8fCIuIn0scmVsYXRpdmU6KGUsdCk9PntlPUcucmVzb2x2ZShlKS5zdWJzdHIoMSksdD1HLnJlc29sdmUodCkuc3Vic3RyKDEpO2Z1bmN0aW9uIHIoYyl7Zm9yKHZhciB1PTA7dTxjLmxlbmd0aCYmY1t1XT09PSIiO3UrKyk7Zm9yKHZhciB2PWMubGVuZ3RoLTE7dj49MCYmY1t2XT09PSIiO3YtLSk7cmV0dXJuIHU+dj9bXTpjLnNsaWNlKHUsdi11KzEpfWZvcih2YXIgaT1yKGUuc3BsaXQoIi8iKSksXz1yKHQuc3BsaXQoIi8iKSkscz1NYXRoLm1pbihpLmxlbmd0aCxfLmxlbmd0aCksbD1zLGY9MDtmPHM7ZisrKWlmKGlbZl0hPT1fW2ZdKXtsPWY7YnJlYWt9Zm9yKHZhciBoPVtdLGY9bDtmPGkubGVuZ3RoO2YrKyloLnB1c2goIi4uIik7cmV0dXJuIGg9aC5jb25jYXQoXy5zbGljZShsKSksaC5qb2luKCIvIil9fSxaZT1bXSxRZT1lPT57Zm9yKHZhciB0PTAscj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgaT1lLmNoYXJDb2RlQXQocik7aTw9MTI3P3QrKzppPD0yMDQ3P3QrPTI6aT49NTUyOTYmJmk8PTU3MzQzPyh0Kz00LCsrcik6dCs9M31yZXR1cm4gdH0sZXQ9KGUsdCxyLGkpPT57aWYoIShpPjApKXJldHVybiAwO2Zvcih2YXIgXz1yLHM9citpLTEsbD0wO2w8ZS5sZW5ndGg7KytsKXt2YXIgZj1lLmNoYXJDb2RlQXQobCk7aWYoZj49NTUyOTYmJmY8PTU3MzQzKXt2YXIgaD1lLmNoYXJDb2RlQXQoKytsKTtmPTY1NTM2KygoZiYxMDIzKTw8MTApfGgmMTAyM31pZihmPD0xMjcpe2lmKHI+PXMpYnJlYWs7dFtyKytdPWZ9ZWxzZSBpZihmPD0yMDQ3KXtpZihyKzE+PXMpYnJlYWs7dFtyKytdPTE5MnxmPj42LHRbcisrXT0xMjh8ZiY2M31lbHNlIGlmKGY8PTY1NTM1KXtpZihyKzI+PXMpYnJlYWs7dFtyKytdPTIyNHxmPj4xMix0W3IrK109MTI4fGY+PjYmNjMsdFtyKytdPTEyOHxmJjYzfWVsc2V7aWYociszPj1zKWJyZWFrO3RbcisrXT0yNDB8Zj4+MTgsdFtyKytdPTEyOHxmPj4xMiY2Myx0W3IrK109MTI4fGY+PjYmNjMsdFtyKytdPTEyOHxmJjYzfX1yZXR1cm4gdFtyXT0wLHItX307ZnVuY3Rpb24gU2UoZSx0LHIpe3ZhciBpPVFlKGUpKzEsXz1uZXcgQXJyYXkoaSkscz1ldChlLF8sMCxfLmxlbmd0aCk7cmV0dXJuIHQmJihfLmxlbmd0aD1zKSxffXZhciBicj0oKT0+e2lmKCFaZS5sZW5ndGgpe3ZhciBlPW51bGw7aWYoaGUpe3ZhciB0PTI1NixyPUJ1ZmZlci5hbGxvYyh0KSxpPTAsXz1wcm9jZXNzLnN0ZGluLmZkO3RyeXtpPVZlLnJlYWRTeW5jKF8sciwwLHQpfWNhdGNoKHMpe2lmKHMudG9TdHJpbmcoKS5pbmNsdWRlcygiRU9GIikpaT0wO2Vsc2UgdGhyb3cgc31pPjAmJihlPXIuc2xpY2UoMCxpKS50b1N0cmluZygidXRmLTgiKSl9ZWxzZSB0eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5wcm9tcHQ9PSJmdW5jdGlvbiImJihlPXdpbmRvdy5wcm9tcHQoIklucHV0OiAiKSxlIT09bnVsbCYmKGUrPWAKYCkpO2lmKCFlKXJldHVybiBudWxsO1plPVNlKGUsITApfXJldHVybiBaZS5zaGlmdCgpfSxhZT17dHR5czpbXSxpbml0KCl7fSxzaHV0ZG93bigpe30scmVnaXN0ZXIoZSx0KXthZS50dHlzW2VdPXtpbnB1dDpbXSxvdXRwdXQ6W10sb3BzOnR9LG8ucmVnaXN0ZXJEZXZpY2UoZSxhZS5zdHJlYW1fb3BzKX0sc3RyZWFtX29wczp7b3BlbihlKXt2YXIgdD1hZS50dHlzW2Uubm9kZS5yZGV2XTtpZighdCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQzKTtlLnR0eT10LGUuc2Vla2FibGU9ITF9LGNsb3NlKGUpe2UudHR5Lm9wcy5mc3luYyhlLnR0eSl9LGZzeW5jKGUpe2UudHR5Lm9wcy5mc3luYyhlLnR0eSl9LHJlYWQoZSx0LHIsaSxfKXtpZighZS50dHl8fCFlLnR0eS5vcHMuZ2V0X2NoYXIpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig2MCk7Zm9yKHZhciBzPTAsbD0wO2w8aTtsKyspe3ZhciBmO3RyeXtmPWUudHR5Lm9wcy5nZXRfY2hhcihlLnR0eSl9Y2F0Y2h7dGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOSl9aWYoZj09PXZvaWQgMCYmcz09PTApdGhyb3cgbmV3IG8uRXJybm9FcnJvcig2KTtpZihmPT1udWxsKWJyZWFrO3MrKyx0W3IrbF09Zn1yZXR1cm4gcyYmKGUubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksc30sd3JpdGUoZSx0LHIsaSxfKXtpZighZS50dHl8fCFlLnR0eS5vcHMucHV0X2NoYXIpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig2MCk7dHJ5e2Zvcih2YXIgcz0wO3M8aTtzKyspZS50dHkub3BzLnB1dF9jaGFyKGUudHR5LHRbcitzXSl9Y2F0Y2h7dGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOSl9cmV0dXJuIGkmJihlLm5vZGUudGltZXN0YW1wPURhdGUubm93KCkpLHN9fSxkZWZhdWx0X3R0eV9vcHM6e2dldF9jaGFyKGUpe3JldHVybiBicigpfSxwdXRfY2hhcihlLHQpe3Q9PT1udWxsfHx0PT09MTA/KFllKF9lKGUub3V0cHV0LDApKSxlLm91dHB1dD1bXSk6dCE9MCYmZS5vdXRwdXQucHVzaCh0KX0sZnN5bmMoZSl7ZS5vdXRwdXQmJmUub3V0cHV0Lmxlbmd0aD4wJiYoWWUoX2UoZS5vdXRwdXQsMCkpLGUub3V0cHV0PVtdKX0saW9jdGxfdGNnZXRzKGUpe3JldHVybntjX2lmbGFnOjI1ODU2LGNfb2ZsYWc6NSxjX2NmbGFnOjE5MSxjX2xmbGFnOjM1Mzg3LGNfY2M6WzMsMjgsMTI3LDIxLDQsMCwxLDAsMTcsMTksMjYsMCwxOCwxNSwyMywyMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXX19LGlvY3RsX3Rjc2V0cyhlLHQscil7cmV0dXJuIDB9LGlvY3RsX3Rpb2Nnd2luc3ooZSl7cmV0dXJuWzI0LDgwXX19LGRlZmF1bHRfdHR5MV9vcHM6e3B1dF9jaGFyKGUsdCl7dD09PW51bGx8fHQ9PT0xMD8oY2UoX2UoZS5vdXRwdXQsMCkpLGUub3V0cHV0PVtdKTp0IT0wJiZlLm91dHB1dC5wdXNoKHQpfSxmc3luYyhlKXtlLm91dHB1dCYmZS5vdXRwdXQubGVuZ3RoPjAmJihjZShfZShlLm91dHB1dCwwKSksZS5vdXRwdXQ9W10pfX19LFR0PWU9PntwZSgpfSxiPXtvcHNfdGFibGU6bnVsbCxtb3VudChlKXtyZXR1cm4gYi5jcmVhdGVOb2RlKG51bGwsIi8iLDE2ODk1LDApfSxjcmVhdGVOb2RlKGUsdCxyLGkpe2lmKG8uaXNCbGtkZXYocil8fG8uaXNGSUZPKHIpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNjMpO2Iub3BzX3RhYmxlfHwoYi5vcHNfdGFibGU9e2Rpcjp7bm9kZTp7Z2V0YXR0cjpiLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjpiLm5vZGVfb3BzLnNldGF0dHIsbG9va3VwOmIubm9kZV9vcHMubG9va3VwLG1rbm9kOmIubm9kZV9vcHMubWtub2QscmVuYW1lOmIubm9kZV9vcHMucmVuYW1lLHVubGluazpiLm5vZGVfb3BzLnVubGluayxybWRpcjpiLm5vZGVfb3BzLnJtZGlyLHJlYWRkaXI6Yi5ub2RlX29wcy5yZWFkZGlyLHN5bWxpbms6Yi5ub2RlX29wcy5zeW1saW5rfSxzdHJlYW06e2xsc2VlazpiLnN0cmVhbV9vcHMubGxzZWVrfX0sZmlsZTp7bm9kZTp7Z2V0YXR0cjpiLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjpiLm5vZGVfb3BzLnNldGF0dHJ9LHN0cmVhbTp7bGxzZWVrOmIuc3RyZWFtX29wcy5sbHNlZWsscmVhZDpiLnN0cmVhbV9vcHMucmVhZCx3cml0ZTpiLnN0cmVhbV9vcHMud3JpdGUsYWxsb2NhdGU6Yi5zdHJlYW1fb3BzLmFsbG9jYXRlLG1tYXA6Yi5zdHJlYW1fb3BzLm1tYXAsbXN5bmM6Yi5zdHJlYW1fb3BzLm1zeW5jfX0sbGluazp7bm9kZTp7Z2V0YXR0cjpiLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjpiLm5vZGVfb3BzLnNldGF0dHIscmVhZGxpbms6Yi5ub2RlX29wcy5yZWFkbGlua30sc3RyZWFtOnt9fSxjaHJkZXY6e25vZGU6e2dldGF0dHI6Yi5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6Yi5ub2RlX29wcy5zZXRhdHRyfSxzdHJlYW06by5jaHJkZXZfc3RyZWFtX29wc319KTt2YXIgXz1vLmNyZWF0ZU5vZGUoZSx0LHIsaSk7cmV0dXJuIG8uaXNEaXIoXy5tb2RlKT8oXy5ub2RlX29wcz1iLm9wc190YWJsZS5kaXIubm9kZSxfLnN0cmVhbV9vcHM9Yi5vcHNfdGFibGUuZGlyLnN0cmVhbSxfLmNvbnRlbnRzPXt9KTpvLmlzRmlsZShfLm1vZGUpPyhfLm5vZGVfb3BzPWIub3BzX3RhYmxlLmZpbGUubm9kZSxfLnN0cmVhbV9vcHM9Yi5vcHNfdGFibGUuZmlsZS5zdHJlYW0sXy51c2VkQnl0ZXM9MCxfLmNvbnRlbnRzPW51bGwpOm8uaXNMaW5rKF8ubW9kZSk/KF8ubm9kZV9vcHM9Yi5vcHNfdGFibGUubGluay5ub2RlLF8uc3RyZWFtX29wcz1iLm9wc190YWJsZS5saW5rLnN0cmVhbSk6by5pc0NocmRldihfLm1vZGUpJiYoXy5ub2RlX29wcz1iLm9wc190YWJsZS5jaHJkZXYubm9kZSxfLnN0cmVhbV9vcHM9Yi5vcHNfdGFibGUuY2hyZGV2LnN0cmVhbSksXy50aW1lc3RhbXA9RGF0ZS5ub3coKSxlJiYoZS5jb250ZW50c1t0XT1fLGUudGltZXN0YW1wPV8udGltZXN0YW1wKSxffSxnZXRGaWxlRGF0YUFzVHlwZWRBcnJheShlKXtyZXR1cm4gZS5jb250ZW50cz9lLmNvbnRlbnRzLnN1YmFycmF5P2UuY29udGVudHMuc3ViYXJyYXkoMCxlLnVzZWRCeXRlcyk6bmV3IFVpbnQ4QXJyYXkoZS5jb250ZW50cyk6bmV3IFVpbnQ4QXJyYXkoMCl9LGV4cGFuZEZpbGVTdG9yYWdlKGUsdCl7dmFyIHI9ZS5jb250ZW50cz9lLmNvbnRlbnRzLmxlbmd0aDowO2lmKCEocj49dCkpe3ZhciBpPTEwNDg1NzY7dD1NYXRoLm1heCh0LHIqKHI8aT8yOjEuMTI1KT4+PjApLHIhPTAmJih0PU1hdGgubWF4KHQsMjU2KSk7dmFyIF89ZS5jb250ZW50cztlLmNvbnRlbnRzPW5ldyBVaW50OEFycmF5KHQpLGUudXNlZEJ5dGVzPjAmJmUuY29udGVudHMuc2V0KF8uc3ViYXJyYXkoMCxlLnVzZWRCeXRlcyksMCl9fSxyZXNpemVGaWxlU3RvcmFnZShlLHQpe2lmKGUudXNlZEJ5dGVzIT10KWlmKHQ9PTApZS5jb250ZW50cz1udWxsLGUudXNlZEJ5dGVzPTA7ZWxzZXt2YXIgcj1lLmNvbnRlbnRzO2UuY29udGVudHM9bmV3IFVpbnQ4QXJyYXkodCksciYmZS5jb250ZW50cy5zZXQoci5zdWJhcnJheSgwLE1hdGgubWluKHQsZS51c2VkQnl0ZXMpKSksZS51c2VkQnl0ZXM9dH19LG5vZGVfb3BzOntnZXRhdHRyKGUpe3ZhciB0PXt9O3JldHVybiB0LmRldj1vLmlzQ2hyZGV2KGUubW9kZSk/ZS5pZDoxLHQuaW5vPWUuaWQsdC5tb2RlPWUubW9kZSx0Lm5saW5rPTEsdC51aWQ9MCx0LmdpZD0wLHQucmRldj1lLnJkZXYsby5pc0RpcihlLm1vZGUpP3Quc2l6ZT00MDk2Om8uaXNGaWxlKGUubW9kZSk/dC5zaXplPWUudXNlZEJ5dGVzOm8uaXNMaW5rKGUubW9kZSk/dC5zaXplPWUubGluay5sZW5ndGg6dC5zaXplPTAsdC5hdGltZT1uZXcgRGF0ZShlLnRpbWVzdGFtcCksdC5tdGltZT1uZXcgRGF0ZShlLnRpbWVzdGFtcCksdC5jdGltZT1uZXcgRGF0ZShlLnRpbWVzdGFtcCksdC5ibGtzaXplPTQwOTYsdC5ibG9ja3M9TWF0aC5jZWlsKHQuc2l6ZS90LmJsa3NpemUpLHR9LHNldGF0dHIoZSx0KXt0Lm1vZGUhPT12b2lkIDAmJihlLm1vZGU9dC5tb2RlKSx0LnRpbWVzdGFtcCE9PXZvaWQgMCYmKGUudGltZXN0YW1wPXQudGltZXN0YW1wKSx0LnNpemUhPT12b2lkIDAmJmIucmVzaXplRmlsZVN0b3JhZ2UoZSx0LnNpemUpfSxsb29rdXAoZSx0KXt0aHJvdyBvLmdlbmVyaWNFcnJvcnNbNDRdfSxta25vZChlLHQscixpKXtyZXR1cm4gYi5jcmVhdGVOb2RlKGUsdCxyLGkpfSxyZW5hbWUoZSx0LHIpe2lmKG8uaXNEaXIoZS5tb2RlKSl7dmFyIGk7dHJ5e2k9by5sb29rdXBOb2RlKHQscil9Y2F0Y2h7fWlmKGkpZm9yKHZhciBfIGluIGkuY29udGVudHMpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig1NSl9ZGVsZXRlIGUucGFyZW50LmNvbnRlbnRzW2UubmFtZV0sZS5wYXJlbnQudGltZXN0YW1wPURhdGUubm93KCksZS5uYW1lPXIsdC5jb250ZW50c1tyXT1lLHQudGltZXN0YW1wPWUucGFyZW50LnRpbWVzdGFtcH0sdW5saW5rKGUsdCl7ZGVsZXRlIGUuY29udGVudHNbdF0sZS50aW1lc3RhbXA9RGF0ZS5ub3coKX0scm1kaXIoZSx0KXt2YXIgcj1vLmxvb2t1cE5vZGUoZSx0KTtmb3IodmFyIGkgaW4gci5jb250ZW50cyl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDU1KTtkZWxldGUgZS5jb250ZW50c1t0XSxlLnRpbWVzdGFtcD1EYXRlLm5vdygpfSxyZWFkZGlyKGUpe3ZhciB0PVsiLiIsIi4uIl07Zm9yKHZhciByIG9mIE9iamVjdC5rZXlzKGUuY29udGVudHMpKXQucHVzaChyKTtyZXR1cm4gdH0sc3ltbGluayhlLHQscil7dmFyIGk9Yi5jcmVhdGVOb2RlKGUsdCw0MTQ3MSwwKTtyZXR1cm4gaS5saW5rPXIsaX0scmVhZGxpbmsoZSl7aWYoIW8uaXNMaW5rKGUubW9kZSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOCk7cmV0dXJuIGUubGlua319LHN0cmVhbV9vcHM6e3JlYWQoZSx0LHIsaSxfKXt2YXIgcz1lLm5vZGUuY29udGVudHM7aWYoXz49ZS5ub2RlLnVzZWRCeXRlcylyZXR1cm4gMDt2YXIgbD1NYXRoLm1pbihlLm5vZGUudXNlZEJ5dGVzLV8saSk7aWYobD44JiZzLnN1YmFycmF5KXQuc2V0KHMuc3ViYXJyYXkoXyxfK2wpLHIpO2Vsc2UgZm9yKHZhciBmPTA7ZjxsO2YrKyl0W3IrZl09c1tfK2ZdO3JldHVybiBsfSx3cml0ZShlLHQscixpLF8scyl7aWYodC5idWZmZXI9PT1NLmJ1ZmZlciYmKHM9ITEpLCFpKXJldHVybiAwO3ZhciBsPWUubm9kZTtpZihsLnRpbWVzdGFtcD1EYXRlLm5vdygpLHQuc3ViYXJyYXkmJighbC5jb250ZW50c3x8bC5jb250ZW50cy5zdWJhcnJheSkpe2lmKHMpcmV0dXJuIGwuY29udGVudHM9dC5zdWJhcnJheShyLHIraSksbC51c2VkQnl0ZXM9aSxpO2lmKGwudXNlZEJ5dGVzPT09MCYmXz09PTApcmV0dXJuIGwuY29udGVudHM9dC5zbGljZShyLHIraSksbC51c2VkQnl0ZXM9aSxpO2lmKF8raTw9bC51c2VkQnl0ZXMpcmV0dXJuIGwuY29udGVudHMuc2V0KHQuc3ViYXJyYXkocixyK2kpLF8pLGl9aWYoYi5leHBhbmRGaWxlU3RvcmFnZShsLF8raSksbC5jb250ZW50cy5zdWJhcnJheSYmdC5zdWJhcnJheSlsLmNvbnRlbnRzLnNldCh0LnN1YmFycmF5KHIscitpKSxfKTtlbHNlIGZvcih2YXIgZj0wO2Y8aTtmKyspbC5jb250ZW50c1tfK2ZdPXRbcitmXTtyZXR1cm4gbC51c2VkQnl0ZXM9TWF0aC5tYXgobC51c2VkQnl0ZXMsXytpKSxpfSxsbHNlZWsoZSx0LHIpe3ZhciBpPXQ7aWYocj09PTE/aSs9ZS5wb3NpdGlvbjpyPT09MiYmby5pc0ZpbGUoZS5ub2RlLm1vZGUpJiYoaSs9ZS5ub2RlLnVzZWRCeXRlcyksaTwwKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjgpO3JldHVybiBpfSxhbGxvY2F0ZShlLHQscil7Yi5leHBhbmRGaWxlU3RvcmFnZShlLm5vZGUsdCtyKSxlLm5vZGUudXNlZEJ5dGVzPU1hdGgubWF4KGUubm9kZS51c2VkQnl0ZXMsdCtyKX0sbW1hcChlLHQscixpLF8pe2lmKCFvLmlzRmlsZShlLm5vZGUubW9kZSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig0Myk7dmFyIHMsbCxmPWUubm9kZS5jb250ZW50cztpZighKF8mMikmJmYuYnVmZmVyPT09TS5idWZmZXIpbD0hMSxzPWYuYnl0ZU9mZnNldDtlbHNle2lmKChyPjB8fHIrdDxmLmxlbmd0aCkmJihmLnN1YmFycmF5P2Y9Zi5zdWJhcnJheShyLHIrdCk6Zj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmLHIscit0KSksbD0hMCxzPVR0KCksIXMpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig0OCk7TS5zZXQoZixzKX1yZXR1cm57cHRyOnMsYWxsb2NhdGVkOmx9fSxtc3luYyhlLHQscixpLF8pe3JldHVybiBiLnN0cmVhbV9vcHMud3JpdGUoZSx0LDAsaSxyLCExKSwwfX19LEVyPShlLHQscixpKT0+e3ZhciBfPWBhbCAke2V9YDtMZShlLHM9Pnt0KG5ldyBVaW50OEFycmF5KHMpKSxfJiZEZSgpfSxzPT57aWYocilyKCk7ZWxzZSB0aHJvd2BMb2FkaW5nIGRhdGEgZmlsZSAiJHtlfSIgZmFpbGVkLmB9KSxfJiZHZSgpfSxrcj0oZSx0LHIsaSxfLHMpPT57by5jcmVhdGVEYXRhRmlsZShlLHQscixpLF8scyl9LHhyPW4ucHJlbG9hZFBsdWdpbnN8fFtdLCRyPShlLHQscixpKT0+e3R5cGVvZiBCcm93c2VyPCJ1IiYmQnJvd3Nlci5pbml0KCk7dmFyIF89ITE7cmV0dXJuIHhyLmZvckVhY2gocz0+e198fHMuY2FuSGFuZGxlKHQpJiYocy5oYW5kbGUoZSx0LHIsaSksXz0hMCl9KSxffSxQcj0oZSx0LHIsaSxfLHMsbCxmLGgsYyk9Pnt2YXIgdT10P0cucmVzb2x2ZShDLmpvaW4yKGUsdCkpOmU7ZnVuY3Rpb24gdihwKXtmdW5jdGlvbiBnKHkpe2M9PW51bGx8fGMoKSxmfHxrcihlLHQseSxpLF8saCkscz09bnVsbHx8cygpLERlKCl9JHIocCx1LGcsKCk9PntsPT1udWxsfHxsKCksRGUoKX0pfHxnKHApfUdlKCksdHlwZW9mIHI9PSJzdHJpbmciP0VyKHIsdixsKTp2KHIpfSxDcj1lPT57dmFyIHQ9e3I6MCwicisiOjIsdzo1NzcsIncrIjo1NzgsYToxMDg5LCJhKyI6MTA5MH0scj10W2VdO2lmKHR5cGVvZiByPiJ1Iil0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZmlsZSBvcGVuIG1vZGU6ICR7ZX1gKTtyZXR1cm4gcn0sdHQ9KGUsdCk9Pnt2YXIgcj0wO3JldHVybiBlJiYocnw9MzY1KSx0JiYocnw9MTQ2KSxyfSxvPXtyb290Om51bGwsbW91bnRzOltdLGRldmljZXM6e30sc3RyZWFtczpbXSxuZXh0SW5vZGU6MSxuYW1lVGFibGU6bnVsbCxjdXJyZW50UGF0aDoiLyIsaW5pdGlhbGl6ZWQ6ITEsaWdub3JlUGVybWlzc2lvbnM6ITAsRXJybm9FcnJvcjpjbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLm5hbWU9IkVycm5vRXJyb3IiLHRoaXMuZXJybm89ZX19LGdlbmVyaWNFcnJvcnM6e30sZmlsZXN5c3RlbXM6bnVsbCxzeW5jRlNSZXF1ZXN0czowLEZTU3RyZWFtOmNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zaGFyZWQ9e319Z2V0IG9iamVjdCgpe3JldHVybiB0aGlzLm5vZGV9c2V0IG9iamVjdChlKXt0aGlzLm5vZGU9ZX1nZXQgaXNSZWFkKCl7cmV0dXJuKHRoaXMuZmxhZ3MmMjA5NzE1NSkhPT0xfWdldCBpc1dyaXRlKCl7cmV0dXJuKHRoaXMuZmxhZ3MmMjA5NzE1NSkhPT0wfWdldCBpc0FwcGVuZCgpe3JldHVybiB0aGlzLmZsYWdzJjEwMjR9Z2V0IGZsYWdzKCl7cmV0dXJuIHRoaXMuc2hhcmVkLmZsYWdzfXNldCBmbGFncyhlKXt0aGlzLnNoYXJlZC5mbGFncz1lfWdldCBwb3NpdGlvbigpe3JldHVybiB0aGlzLnNoYXJlZC5wb3NpdGlvbn1zZXQgcG9zaXRpb24oZSl7dGhpcy5zaGFyZWQucG9zaXRpb249ZX19LEZTTm9kZTpjbGFzc3tjb25zdHJ1Y3RvcihlLHQscixpKXtlfHwoZT10aGlzKSx0aGlzLnBhcmVudD1lLHRoaXMubW91bnQ9ZS5tb3VudCx0aGlzLm1vdW50ZWQ9bnVsbCx0aGlzLmlkPW8ubmV4dElub2RlKyssdGhpcy5uYW1lPXQsdGhpcy5tb2RlPXIsdGhpcy5ub2RlX29wcz17fSx0aGlzLnN0cmVhbV9vcHM9e30sdGhpcy5yZGV2PWksdGhpcy5yZWFkTW9kZT0zNjUsdGhpcy53cml0ZU1vZGU9MTQ2fWdldCByZWFkKCl7cmV0dXJuKHRoaXMubW9kZSZ0aGlzLnJlYWRNb2RlKT09PXRoaXMucmVhZE1vZGV9c2V0IHJlYWQoZSl7ZT90aGlzLm1vZGV8PXRoaXMucmVhZE1vZGU6dGhpcy5tb2RlJj1+dGhpcy5yZWFkTW9kZX1nZXQgd3JpdGUoKXtyZXR1cm4odGhpcy5tb2RlJnRoaXMud3JpdGVNb2RlKT09PXRoaXMud3JpdGVNb2RlfXNldCB3cml0ZShlKXtlP3RoaXMubW9kZXw9dGhpcy53cml0ZU1vZGU6dGhpcy5tb2RlJj1+dGhpcy53cml0ZU1vZGV9Z2V0IGlzRm9sZGVyKCl7cmV0dXJuIG8uaXNEaXIodGhpcy5tb2RlKX1nZXQgaXNEZXZpY2UoKXtyZXR1cm4gby5pc0NocmRldih0aGlzLm1vZGUpfX0sbG9va3VwUGF0aChlLHQ9e30pe2lmKGU9Ry5yZXNvbHZlKGUpLCFlKXJldHVybntwYXRoOiIiLG5vZGU6bnVsbH07dmFyIHI9e2ZvbGxvd19tb3VudDohMCxyZWN1cnNlX2NvdW50OjB9O2lmKHQ9T2JqZWN0LmFzc2lnbihyLHQpLHQucmVjdXJzZV9jb3VudD44KXRocm93IG5ldyBvLkVycm5vRXJyb3IoMzIpO2Zvcih2YXIgaT1lLnNwbGl0KCIvIikuZmlsdGVyKHY9PiEhdiksXz1vLnJvb3Qscz0iLyIsbD0wO2w8aS5sZW5ndGg7bCsrKXt2YXIgZj1sPT09aS5sZW5ndGgtMTtpZihmJiZ0LnBhcmVudClicmVhaztpZihfPW8ubG9va3VwTm9kZShfLGlbbF0pLHM9Qy5qb2luMihzLGlbbF0pLG8uaXNNb3VudHBvaW50KF8pJiYoIWZ8fGYmJnQuZm9sbG93X21vdW50KSYmKF89Xy5tb3VudGVkLnJvb3QpLCFmfHx0LmZvbGxvdylmb3IodmFyIGg9MDtvLmlzTGluayhfLm1vZGUpOyl7dmFyIGM9by5yZWFkbGluayhzKTtzPUcucmVzb2x2ZShDLmRpcm5hbWUocyksYyk7dmFyIHU9by5sb29rdXBQYXRoKHMse3JlY3Vyc2VfY291bnQ6dC5yZWN1cnNlX2NvdW50KzF9KTtpZihfPXUubm9kZSxoKys+NDApdGhyb3cgbmV3IG8uRXJybm9FcnJvcigzMil9fXJldHVybntwYXRoOnMsbm9kZTpffX0sZ2V0UGF0aChlKXtmb3IodmFyIHQ7Oyl7aWYoby5pc1Jvb3QoZSkpe3ZhciByPWUubW91bnQubW91bnRwb2ludDtyZXR1cm4gdD9yW3IubGVuZ3RoLTFdIT09Ii8iP2Ake3J9LyR7dH1gOnIrdDpyfXQ9dD9gJHtlLm5hbWV9LyR7dH1gOmUubmFtZSxlPWUucGFyZW50fX0saGFzaE5hbWUoZSx0KXtmb3IodmFyIHI9MCxpPTA7aTx0Lmxlbmd0aDtpKyspcj0ocjw8NSktcit0LmNoYXJDb2RlQXQoaSl8MDtyZXR1cm4oZStyPj4+MCklby5uYW1lVGFibGUubGVuZ3RofSxoYXNoQWRkTm9kZShlKXt2YXIgdD1vLmhhc2hOYW1lKGUucGFyZW50LmlkLGUubmFtZSk7ZS5uYW1lX25leHQ9by5uYW1lVGFibGVbdF0sby5uYW1lVGFibGVbdF09ZX0saGFzaFJlbW92ZU5vZGUoZSl7dmFyIHQ9by5oYXNoTmFtZShlLnBhcmVudC5pZCxlLm5hbWUpO2lmKG8ubmFtZVRhYmxlW3RdPT09ZSlvLm5hbWVUYWJsZVt0XT1lLm5hbWVfbmV4dDtlbHNlIGZvcih2YXIgcj1vLm5hbWVUYWJsZVt0XTtyOyl7aWYoci5uYW1lX25leHQ9PT1lKXtyLm5hbWVfbmV4dD1lLm5hbWVfbmV4dDticmVha31yPXIubmFtZV9uZXh0fX0sbG9va3VwTm9kZShlLHQpe3ZhciByPW8ubWF5TG9va3VwKGUpO2lmKHIpdGhyb3cgbmV3IG8uRXJybm9FcnJvcihyKTtmb3IodmFyIGk9by5oYXNoTmFtZShlLmlkLHQpLF89by5uYW1lVGFibGVbaV07XztfPV8ubmFtZV9uZXh0KXt2YXIgcz1fLm5hbWU7aWYoXy5wYXJlbnQuaWQ9PT1lLmlkJiZzPT09dClyZXR1cm4gX31yZXR1cm4gby5sb29rdXAoZSx0KX0sY3JlYXRlTm9kZShlLHQscixpKXt2YXIgXz1uZXcgby5GU05vZGUoZSx0LHIsaSk7cmV0dXJuIG8uaGFzaEFkZE5vZGUoXyksX30sZGVzdHJveU5vZGUoZSl7by5oYXNoUmVtb3ZlTm9kZShlKX0saXNSb290KGUpe3JldHVybiBlPT09ZS5wYXJlbnR9LGlzTW91bnRwb2ludChlKXtyZXR1cm4hIWUubW91bnRlZH0saXNGaWxlKGUpe3JldHVybihlJjYxNDQwKT09PTMyNzY4fSxpc0RpcihlKXtyZXR1cm4oZSY2MTQ0MCk9PT0xNjM4NH0saXNMaW5rKGUpe3JldHVybihlJjYxNDQwKT09PTQwOTYwfSxpc0NocmRldihlKXtyZXR1cm4oZSY2MTQ0MCk9PT04MTkyfSxpc0Jsa2RldihlKXtyZXR1cm4oZSY2MTQ0MCk9PT0yNDU3Nn0saXNGSUZPKGUpe3JldHVybihlJjYxNDQwKT09PTQwOTZ9LGlzU29ja2V0KGUpe3JldHVybihlJjQ5MTUyKT09PTQ5MTUyfSxmbGFnc1RvUGVybWlzc2lvblN0cmluZyhlKXt2YXIgdD1bInIiLCJ3IiwicnciXVtlJjNdO3JldHVybiBlJjUxMiYmKHQrPSJ3IiksdH0sbm9kZVBlcm1pc3Npb25zKGUsdCl7cmV0dXJuIG8uaWdub3JlUGVybWlzc2lvbnM/MDp0LmluY2x1ZGVzKCJyIikmJiEoZS5tb2RlJjI5Mil8fHQuaW5jbHVkZXMoInciKSYmIShlLm1vZGUmMTQ2KXx8dC5pbmNsdWRlcygieCIpJiYhKGUubW9kZSY3Myk/MjowfSxtYXlMb29rdXAoZSl7aWYoIW8uaXNEaXIoZS5tb2RlKSlyZXR1cm4gNTQ7dmFyIHQ9by5ub2RlUGVybWlzc2lvbnMoZSwieCIpO3JldHVybiB0fHwoZS5ub2RlX29wcy5sb29rdXA/MDoyKX0sbWF5Q3JlYXRlKGUsdCl7dHJ5e3ZhciByPW8ubG9va3VwTm9kZShlLHQpO3JldHVybiAyMH1jYXRjaHt9cmV0dXJuIG8ubm9kZVBlcm1pc3Npb25zKGUsInd4Iil9LG1heURlbGV0ZShlLHQscil7dmFyIGk7dHJ5e2k9by5sb29rdXBOb2RlKGUsdCl9Y2F0Y2gocyl7cmV0dXJuIHMuZXJybm99dmFyIF89by5ub2RlUGVybWlzc2lvbnMoZSwid3giKTtpZihfKXJldHVybiBfO2lmKHIpe2lmKCFvLmlzRGlyKGkubW9kZSkpcmV0dXJuIDU0O2lmKG8uaXNSb290KGkpfHxvLmdldFBhdGgoaSk9PT1vLmN3ZCgpKXJldHVybiAxMH1lbHNlIGlmKG8uaXNEaXIoaS5tb2RlKSlyZXR1cm4gMzE7cmV0dXJuIDB9LG1heU9wZW4oZSx0KXtyZXR1cm4gZT9vLmlzTGluayhlLm1vZGUpPzMyOm8uaXNEaXIoZS5tb2RlKSYmKG8uZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcodCkhPT0iciJ8fHQmNTEyKT8zMTpvLm5vZGVQZXJtaXNzaW9ucyhlLG8uZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcodCkpOjQ0fSxNQVhfT1BFTl9GRFM6NDA5NixuZXh0ZmQoKXtmb3IodmFyIGU9MDtlPD1vLk1BWF9PUEVOX0ZEUztlKyspaWYoIW8uc3RyZWFtc1tlXSlyZXR1cm4gZTt0aHJvdyBuZXcgby5FcnJub0Vycm9yKDMzKX0sZ2V0U3RyZWFtQ2hlY2tlZChlKXt2YXIgdD1vLmdldFN0cmVhbShlKTtpZighdCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDgpO3JldHVybiB0fSxnZXRTdHJlYW06ZT0+by5zdHJlYW1zW2VdLGNyZWF0ZVN0cmVhbShlLHQ9LTEpe3JldHVybiBlPU9iamVjdC5hc3NpZ24obmV3IG8uRlNTdHJlYW0sZSksdD09LTEmJih0PW8ubmV4dGZkKCkpLGUuZmQ9dCxvLnN0cmVhbXNbdF09ZSxlfSxjbG9zZVN0cmVhbShlKXtvLnN0cmVhbXNbZV09bnVsbH0sZHVwU3RyZWFtKGUsdD0tMSl7dmFyIHIsaSxfPW8uY3JlYXRlU3RyZWFtKGUsdCk7cmV0dXJuKGk9KHI9Xy5zdHJlYW1fb3BzKT09bnVsbD92b2lkIDA6ci5kdXApPT1udWxsfHxpLmNhbGwocixfKSxffSxjaHJkZXZfc3RyZWFtX29wczp7b3BlbihlKXt2YXIgdCxyLGk9by5nZXREZXZpY2UoZS5ub2RlLnJkZXYpO2Uuc3RyZWFtX29wcz1pLnN0cmVhbV9vcHMsKHI9KHQ9ZS5zdHJlYW1fb3BzKS5vcGVuKT09bnVsbHx8ci5jYWxsKHQsZSl9LGxsc2Vlaygpe3Rocm93IG5ldyBvLkVycm5vRXJyb3IoNzApfX0sbWFqb3I6ZT0+ZT4+OCxtaW5vcjplPT5lJjI1NSxtYWtlZGV2OihlLHQpPT5lPDw4fHQscmVnaXN0ZXJEZXZpY2UoZSx0KXtvLmRldmljZXNbZV09e3N0cmVhbV9vcHM6dH19LGdldERldmljZTplPT5vLmRldmljZXNbZV0sZ2V0TW91bnRzKGUpe2Zvcih2YXIgdD1bXSxyPVtlXTtyLmxlbmd0aDspe3ZhciBpPXIucG9wKCk7dC5wdXNoKGkpLHIucHVzaCguLi5pLm1vdW50cyl9cmV0dXJuIHR9LHN5bmNmcyhlLHQpe3R5cGVvZiBlPT0iZnVuY3Rpb24iJiYodD1lLGU9ITEpLG8uc3luY0ZTUmVxdWVzdHMrKyxvLnN5bmNGU1JlcXVlc3RzPjEmJmNlKGB3YXJuaW5nOiAke28uc3luY0ZTUmVxdWVzdHN9IEZTLnN5bmNmcyBvcGVyYXRpb25zIGluIGZsaWdodCBhdCBvbmNlLCBwcm9iYWJseSBqdXN0IGRvaW5nIGV4dHJhIHdvcmtgKTt2YXIgcj1vLmdldE1vdW50cyhvLnJvb3QubW91bnQpLGk9MDtmdW5jdGlvbiBfKGwpe3JldHVybiBvLnN5bmNGU1JlcXVlc3RzLS0sdChsKX1mdW5jdGlvbiBzKGwpe2lmKGwpcmV0dXJuIHMuZXJyb3JlZD92b2lkIDA6KHMuZXJyb3JlZD0hMCxfKGwpKTsrK2k+PXIubGVuZ3RoJiZfKG51bGwpfXIuZm9yRWFjaChsPT57aWYoIWwudHlwZS5zeW5jZnMpcmV0dXJuIHMobnVsbCk7bC50eXBlLnN5bmNmcyhsLGUscyl9KX0sbW91bnQoZSx0LHIpe3ZhciBpPXI9PT0iLyIsXz0hcixzO2lmKGkmJm8ucm9vdCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDEwKTtpZighaSYmIV8pe3ZhciBsPW8ubG9va3VwUGF0aChyLHtmb2xsb3dfbW91bnQ6ITF9KTtpZihyPWwucGF0aCxzPWwubm9kZSxvLmlzTW91bnRwb2ludChzKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDEwKTtpZighby5pc0RpcihzLm1vZGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNTQpfXZhciBmPXt0eXBlOmUsb3B0czp0LG1vdW50cG9pbnQ6cixtb3VudHM6W119LGg9ZS5tb3VudChmKTtyZXR1cm4gaC5tb3VudD1mLGYucm9vdD1oLGk/by5yb290PWg6cyYmKHMubW91bnRlZD1mLHMubW91bnQmJnMubW91bnQubW91bnRzLnB1c2goZikpLGh9LHVubW91bnQoZSl7dmFyIHQ9by5sb29rdXBQYXRoKGUse2ZvbGxvd19tb3VudDohMX0pO2lmKCFvLmlzTW91bnRwb2ludCh0Lm5vZGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjgpO3ZhciByPXQubm9kZSxpPXIubW91bnRlZCxfPW8uZ2V0TW91bnRzKGkpO09iamVjdC5rZXlzKG8ubmFtZVRhYmxlKS5mb3JFYWNoKGw9Pntmb3IodmFyIGY9by5uYW1lVGFibGVbbF07Zjspe3ZhciBoPWYubmFtZV9uZXh0O18uaW5jbHVkZXMoZi5tb3VudCkmJm8uZGVzdHJveU5vZGUoZiksZj1ofX0pLHIubW91bnRlZD1udWxsO3ZhciBzPXIubW91bnQubW91bnRzLmluZGV4T2YoaSk7ci5tb3VudC5tb3VudHMuc3BsaWNlKHMsMSl9LGxvb2t1cChlLHQpe3JldHVybiBlLm5vZGVfb3BzLmxvb2t1cChlLHQpfSxta25vZChlLHQscil7dmFyIGk9by5sb29rdXBQYXRoKGUse3BhcmVudDohMH0pLF89aS5ub2RlLHM9Qy5iYXNlbmFtZShlKTtpZighc3x8cz09PSIuInx8cz09PSIuLiIpdGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOCk7dmFyIGw9by5tYXlDcmVhdGUoXyxzKTtpZihsKXRocm93IG5ldyBvLkVycm5vRXJyb3IobCk7aWYoIV8ubm9kZV9vcHMubWtub2QpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig2Myk7cmV0dXJuIF8ubm9kZV9vcHMubWtub2QoXyxzLHQscil9LGNyZWF0ZShlLHQpe3JldHVybiB0PXQhPT12b2lkIDA/dDo0MzgsdCY9NDA5NSx0fD0zMjc2OCxvLm1rbm9kKGUsdCwwKX0sbWtkaXIoZSx0KXtyZXR1cm4gdD10IT09dm9pZCAwP3Q6NTExLHQmPTEwMjMsdHw9MTYzODQsby5ta25vZChlLHQsMCl9LG1rZGlyVHJlZShlLHQpe2Zvcih2YXIgcj1lLnNwbGl0KCIvIiksaT0iIixfPTA7XzxyLmxlbmd0aDsrK18paWYocltfXSl7aSs9Ii8iK3JbX107dHJ5e28ubWtkaXIoaSx0KX1jYXRjaChzKXtpZihzLmVycm5vIT0yMCl0aHJvdyBzfX19LG1rZGV2KGUsdCxyKXtyZXR1cm4gdHlwZW9mIHI+InUiJiYocj10LHQ9NDM4KSx0fD04MTkyLG8ubWtub2QoZSx0LHIpfSxzeW1saW5rKGUsdCl7aWYoIUcucmVzb2x2ZShlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ0KTt2YXIgcj1vLmxvb2t1cFBhdGgodCx7cGFyZW50OiEwfSksaT1yLm5vZGU7aWYoIWkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig0NCk7dmFyIF89Qy5iYXNlbmFtZSh0KSxzPW8ubWF5Q3JlYXRlKGksXyk7aWYocyl0aHJvdyBuZXcgby5FcnJub0Vycm9yKHMpO2lmKCFpLm5vZGVfb3BzLnN5bWxpbmspdGhyb3cgbmV3IG8uRXJybm9FcnJvcig2Myk7cmV0dXJuIGkubm9kZV9vcHMuc3ltbGluayhpLF8sZSl9LHJlbmFtZShlLHQpe3ZhciByPUMuZGlybmFtZShlKSxpPUMuZGlybmFtZSh0KSxfPUMuYmFzZW5hbWUoZSkscz1DLmJhc2VuYW1lKHQpLGwsZixoO2lmKGw9by5sb29rdXBQYXRoKGUse3BhcmVudDohMH0pLGY9bC5ub2RlLGw9by5sb29rdXBQYXRoKHQse3BhcmVudDohMH0pLGg9bC5ub2RlLCFmfHwhaCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ0KTtpZihmLm1vdW50IT09aC5tb3VudCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDc1KTt2YXIgYz1vLmxvb2t1cE5vZGUoZixfKSx1PUcucmVsYXRpdmUoZSxpKTtpZih1LmNoYXJBdCgwKSE9PSIuIil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtpZih1PUcucmVsYXRpdmUodCxyKSx1LmNoYXJBdCgwKSE9PSIuIil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDU1KTt2YXIgdjt0cnl7dj1vLmxvb2t1cE5vZGUoaCxzKX1jYXRjaHt9aWYoYyE9PXYpe3ZhciBwPW8uaXNEaXIoYy5tb2RlKSxnPW8ubWF5RGVsZXRlKGYsXyxwKTtpZihnKXRocm93IG5ldyBvLkVycm5vRXJyb3IoZyk7aWYoZz12P28ubWF5RGVsZXRlKGgscyxwKTpvLm1heUNyZWF0ZShoLHMpLGcpdGhyb3cgbmV3IG8uRXJybm9FcnJvcihnKTtpZighZi5ub2RlX29wcy5yZW5hbWUpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig2Myk7aWYoby5pc01vdW50cG9pbnQoYyl8fHYmJm8uaXNNb3VudHBvaW50KHYpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMTApO2lmKGghPT1mJiYoZz1vLm5vZGVQZXJtaXNzaW9ucyhmLCJ3IiksZykpdGhyb3cgbmV3IG8uRXJybm9FcnJvcihnKTtvLmhhc2hSZW1vdmVOb2RlKGMpO3RyeXtmLm5vZGVfb3BzLnJlbmFtZShjLGgscyksYy5wYXJlbnQ9aH1jYXRjaCh5KXt0aHJvdyB5fWZpbmFsbHl7by5oYXNoQWRkTm9kZShjKX19fSxybWRpcihlKXt2YXIgdD1vLmxvb2t1cFBhdGgoZSx7cGFyZW50OiEwfSkscj10Lm5vZGUsaT1DLmJhc2VuYW1lKGUpLF89by5sb29rdXBOb2RlKHIsaSkscz1vLm1heURlbGV0ZShyLGksITApO2lmKHMpdGhyb3cgbmV3IG8uRXJybm9FcnJvcihzKTtpZighci5ub2RlX29wcy5ybWRpcil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKTtpZihvLmlzTW91bnRwb2ludChfKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDEwKTtyLm5vZGVfb3BzLnJtZGlyKHIsaSksby5kZXN0cm95Tm9kZShfKX0scmVhZGRpcihlKXt2YXIgdD1vLmxvb2t1cFBhdGgoZSx7Zm9sbG93OiEwfSkscj10Lm5vZGU7aWYoIXIubm9kZV9vcHMucmVhZGRpcil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDU0KTtyZXR1cm4gci5ub2RlX29wcy5yZWFkZGlyKHIpfSx1bmxpbmsoZSl7dmFyIHQ9by5sb29rdXBQYXRoKGUse3BhcmVudDohMH0pLHI9dC5ub2RlO2lmKCFyKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDQpO3ZhciBpPUMuYmFzZW5hbWUoZSksXz1vLmxvb2t1cE5vZGUocixpKSxzPW8ubWF5RGVsZXRlKHIsaSwhMSk7aWYocyl0aHJvdyBuZXcgby5FcnJub0Vycm9yKHMpO2lmKCFyLm5vZGVfb3BzLnVubGluayl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKTtpZihvLmlzTW91bnRwb2ludChfKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDEwKTtyLm5vZGVfb3BzLnVubGluayhyLGkpLG8uZGVzdHJveU5vZGUoXyl9LHJlYWRsaW5rKGUpe3ZhciB0PW8ubG9va3VwUGF0aChlKSxyPXQubm9kZTtpZighcil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ0KTtpZighci5ub2RlX29wcy5yZWFkbGluayl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtyZXR1cm4gRy5yZXNvbHZlKG8uZ2V0UGF0aChyLnBhcmVudCksci5ub2RlX29wcy5yZWFkbGluayhyKSl9LHN0YXQoZSx0KXt2YXIgcj1vLmxvb2t1cFBhdGgoZSx7Zm9sbG93OiF0fSksaT1yLm5vZGU7aWYoIWkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig0NCk7aWYoIWkubm9kZV9vcHMuZ2V0YXR0cil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKTtyZXR1cm4gaS5ub2RlX29wcy5nZXRhdHRyKGkpfSxsc3RhdChlKXtyZXR1cm4gby5zdGF0KGUsITApfSxjaG1vZChlLHQscil7dmFyIGk7aWYodHlwZW9mIGU9PSJzdHJpbmciKXt2YXIgXz1vLmxvb2t1cFBhdGgoZSx7Zm9sbG93OiFyfSk7aT1fLm5vZGV9ZWxzZSBpPWU7aWYoIWkubm9kZV9vcHMuc2V0YXR0cil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKTtpLm5vZGVfb3BzLnNldGF0dHIoaSx7bW9kZTp0JjQwOTV8aS5tb2RlJi00MDk2LHRpbWVzdGFtcDpEYXRlLm5vdygpfSl9LGxjaG1vZChlLHQpe28uY2htb2QoZSx0LCEwKX0sZmNobW9kKGUsdCl7dmFyIHI9by5nZXRTdHJlYW1DaGVja2VkKGUpO28uY2htb2Qoci5ub2RlLHQpfSxjaG93bihlLHQscixpKXt2YXIgXztpZih0eXBlb2YgZT09InN0cmluZyIpe3ZhciBzPW8ubG9va3VwUGF0aChlLHtmb2xsb3c6IWl9KTtfPXMubm9kZX1lbHNlIF89ZTtpZighXy5ub2RlX29wcy5zZXRhdHRyKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNjMpO18ubm9kZV9vcHMuc2V0YXR0cihfLHt0aW1lc3RhbXA6RGF0ZS5ub3coKX0pfSxsY2hvd24oZSx0LHIpe28uY2hvd24oZSx0LHIsITApfSxmY2hvd24oZSx0LHIpe3ZhciBpPW8uZ2V0U3RyZWFtQ2hlY2tlZChlKTtvLmNob3duKGkubm9kZSx0LHIpfSx0cnVuY2F0ZShlLHQpe2lmKHQ8MCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTt2YXIgcjtpZih0eXBlb2YgZT09InN0cmluZyIpe3ZhciBpPW8ubG9va3VwUGF0aChlLHtmb2xsb3c6ITB9KTtyPWkubm9kZX1lbHNlIHI9ZTtpZighci5ub2RlX29wcy5zZXRhdHRyKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNjMpO2lmKG8uaXNEaXIoci5tb2RlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDMxKTtpZighby5pc0ZpbGUoci5tb2RlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTt2YXIgXz1vLm5vZGVQZXJtaXNzaW9ucyhyLCJ3Iik7aWYoXyl0aHJvdyBuZXcgby5FcnJub0Vycm9yKF8pO3Iubm9kZV9vcHMuc2V0YXR0cihyLHtzaXplOnQsdGltZXN0YW1wOkRhdGUubm93KCl9KX0sZnRydW5jYXRlKGUsdCl7dmFyIHI9by5nZXRTdHJlYW1DaGVja2VkKGUpO2lmKCEoci5mbGFncyYyMDk3MTU1KSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtvLnRydW5jYXRlKHIubm9kZSx0KX0sdXRpbWUoZSx0LHIpe3ZhciBpPW8ubG9va3VwUGF0aChlLHtmb2xsb3c6ITB9KSxfPWkubm9kZTtfLm5vZGVfb3BzLnNldGF0dHIoXyx7dGltZXN0YW1wOk1hdGgubWF4KHQscil9KX0sb3BlbihlLHQscil7aWYoZT09PSIiKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDQpO3Q9dHlwZW9mIHQ9PSJzdHJpbmciP0NyKHQpOnQsdCY2ND8ocj10eXBlb2Ygcj4idSI/NDM4OnIscj1yJjQwOTV8MzI3NjgpOnI9MDt2YXIgaTtpZih0eXBlb2YgZT09Im9iamVjdCIpaT1lO2Vsc2V7ZT1DLm5vcm1hbGl6ZShlKTt0cnl7dmFyIF89by5sb29rdXBQYXRoKGUse2ZvbGxvdzohKHQmMTMxMDcyKX0pO2k9Xy5ub2RlfWNhdGNoe319dmFyIHM9ITE7aWYodCY2NClpZihpKXtpZih0JjEyOCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDIwKX1lbHNlIGk9by5ta25vZChlLHIsMCkscz0hMDtpZighaSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ0KTtpZihvLmlzQ2hyZGV2KGkubW9kZSkmJih0Jj0tNTEzKSx0JjY1NTM2JiYhby5pc0RpcihpLm1vZGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNTQpO2lmKCFzKXt2YXIgbD1vLm1heU9wZW4oaSx0KTtpZihsKXRocm93IG5ldyBvLkVycm5vRXJyb3IobCl9dCY1MTImJiFzJiZvLnRydW5jYXRlKGksMCksdCY9LTEzMTcxMzt2YXIgZj1vLmNyZWF0ZVN0cmVhbSh7bm9kZTppLHBhdGg6by5nZXRQYXRoKGkpLGZsYWdzOnQsc2Vla2FibGU6ITAscG9zaXRpb246MCxzdHJlYW1fb3BzOmkuc3RyZWFtX29wcyx1bmdvdHRlbjpbXSxlcnJvcjohMX0pO3JldHVybiBmLnN0cmVhbV9vcHMub3BlbiYmZi5zdHJlYW1fb3BzLm9wZW4oZiksbi5sb2dSZWFkRmlsZXMmJiEodCYxKSYmKG8ucmVhZEZpbGVzfHwoby5yZWFkRmlsZXM9e30pLGUgaW4gby5yZWFkRmlsZXN8fChvLnJlYWRGaWxlc1tlXT0xKSksZn0sY2xvc2UoZSl7aWYoby5pc0Nsb3NlZChlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDgpO2UuZ2V0ZGVudHMmJihlLmdldGRlbnRzPW51bGwpO3RyeXtlLnN0cmVhbV9vcHMuY2xvc2UmJmUuc3RyZWFtX29wcy5jbG9zZShlKX1jYXRjaCh0KXt0aHJvdyB0fWZpbmFsbHl7by5jbG9zZVN0cmVhbShlLmZkKX1lLmZkPW51bGx9LGlzQ2xvc2VkKGUpe3JldHVybiBlLmZkPT09bnVsbH0sbGxzZWVrKGUsdCxyKXtpZihvLmlzQ2xvc2VkKGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoOCk7aWYoIWUuc2Vla2FibGV8fCFlLnN0cmVhbV9vcHMubGxzZWVrKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNzApO2lmKHIhPTAmJnIhPTEmJnIhPTIpdGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOCk7cmV0dXJuIGUucG9zaXRpb249ZS5zdHJlYW1fb3BzLmxsc2VlayhlLHQsciksZS51bmdvdHRlbj1bXSxlLnBvc2l0aW9ufSxyZWFkKGUsdCxyLGksXyl7aWYoaTwwfHxfPDApdGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOCk7aWYoby5pc0Nsb3NlZChlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDgpO2lmKChlLmZsYWdzJjIwOTcxNTUpPT09MSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDgpO2lmKG8uaXNEaXIoZS5ub2RlLm1vZGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMzEpO2lmKCFlLnN0cmVhbV9vcHMucmVhZCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTt2YXIgcz10eXBlb2YgXzwidSI7aWYoIXMpXz1lLnBvc2l0aW9uO2Vsc2UgaWYoIWUuc2Vla2FibGUpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig3MCk7dmFyIGw9ZS5zdHJlYW1fb3BzLnJlYWQoZSx0LHIsaSxfKTtyZXR1cm4gc3x8KGUucG9zaXRpb24rPWwpLGx9LHdyaXRlKGUsdCxyLGksXyxzKXtpZihpPDB8fF88MCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtpZihvLmlzQ2xvc2VkKGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoOCk7aWYoIShlLmZsYWdzJjIwOTcxNTUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoOCk7aWYoby5pc0RpcihlLm5vZGUubW9kZSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcigzMSk7aWYoIWUuc3RyZWFtX29wcy53cml0ZSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtlLnNlZWthYmxlJiZlLmZsYWdzJjEwMjQmJm8ubGxzZWVrKGUsMCwyKTt2YXIgbD10eXBlb2YgXzwidSI7aWYoIWwpXz1lLnBvc2l0aW9uO2Vsc2UgaWYoIWUuc2Vla2FibGUpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig3MCk7dmFyIGY9ZS5zdHJlYW1fb3BzLndyaXRlKGUsdCxyLGksXyxzKTtyZXR1cm4gbHx8KGUucG9zaXRpb24rPWYpLGZ9LGFsbG9jYXRlKGUsdCxyKXtpZihvLmlzQ2xvc2VkKGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoOCk7aWYodDwwfHxyPD0wKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjgpO2lmKCEoZS5mbGFncyYyMDk3MTU1KSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDgpO2lmKCFvLmlzRmlsZShlLm5vZGUubW9kZSkmJiFvLmlzRGlyKGUubm9kZS5tb2RlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQzKTtpZighZS5zdHJlYW1fb3BzLmFsbG9jYXRlKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMTM4KTtlLnN0cmVhbV9vcHMuYWxsb2NhdGUoZSx0LHIpfSxtbWFwKGUsdCxyLGksXyl7aWYoaSYyJiYhKF8mMikmJihlLmZsYWdzJjIwOTcxNTUpIT09Mil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDIpO2lmKChlLmZsYWdzJjIwOTcxNTUpPT09MSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDIpO2lmKCFlLnN0cmVhbV9vcHMubW1hcCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQzKTtyZXR1cm4gZS5zdHJlYW1fb3BzLm1tYXAoZSx0LHIsaSxfKX0sbXN5bmMoZSx0LHIsaSxfKXtyZXR1cm4gZS5zdHJlYW1fb3BzLm1zeW5jP2Uuc3RyZWFtX29wcy5tc3luYyhlLHQscixpLF8pOjB9LGlvY3RsKGUsdCxyKXtpZighZS5zdHJlYW1fb3BzLmlvY3RsKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNTkpO3JldHVybiBlLnN0cmVhbV9vcHMuaW9jdGwoZSx0LHIpfSxyZWFkRmlsZShlLHQ9e30pe2lmKHQuZmxhZ3M9dC5mbGFnc3x8MCx0LmVuY29kaW5nPXQuZW5jb2Rpbmd8fCJiaW5hcnkiLHQuZW5jb2RpbmchPT0idXRmOCImJnQuZW5jb2RpbmchPT0iYmluYXJ5Iil0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZW5jb2RpbmcgdHlwZSAiJHt0LmVuY29kaW5nfSJgKTt2YXIgcixpPW8ub3BlbihlLHQuZmxhZ3MpLF89by5zdGF0KGUpLHM9Xy5zaXplLGw9bmV3IFVpbnQ4QXJyYXkocyk7cmV0dXJuIG8ucmVhZChpLGwsMCxzLDApLHQuZW5jb2Rpbmc9PT0idXRmOCI/cj1fZShsLDApOnQuZW5jb2Rpbmc9PT0iYmluYXJ5IiYmKHI9bCksby5jbG9zZShpKSxyfSx3cml0ZUZpbGUoZSx0LHI9e30pe3IuZmxhZ3M9ci5mbGFnc3x8NTc3O3ZhciBpPW8ub3BlbihlLHIuZmxhZ3Msci5tb2RlKTtpZih0eXBlb2YgdD09InN0cmluZyIpe3ZhciBfPW5ldyBVaW50OEFycmF5KFFlKHQpKzEpLHM9ZXQodCxfLDAsXy5sZW5ndGgpO28ud3JpdGUoaSxfLDAscyx2b2lkIDAsci5jYW5Pd24pfWVsc2UgaWYoQXJyYXlCdWZmZXIuaXNWaWV3KHQpKW8ud3JpdGUoaSx0LDAsdC5ieXRlTGVuZ3RoLHZvaWQgMCxyLmNhbk93bik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGRhdGEgdHlwZSIpO28uY2xvc2UoaSl9LGN3ZDooKT0+by5jdXJyZW50UGF0aCxjaGRpcihlKXt2YXIgdD1vLmxvb2t1cFBhdGgoZSx7Zm9sbG93OiEwfSk7aWYodC5ub2RlPT09bnVsbCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ0KTtpZighby5pc0Rpcih0Lm5vZGUubW9kZSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig1NCk7dmFyIHI9by5ub2RlUGVybWlzc2lvbnModC5ub2RlLCJ4Iik7aWYocil0aHJvdyBuZXcgby5FcnJub0Vycm9yKHIpO28uY3VycmVudFBhdGg9dC5wYXRofSxjcmVhdGVEZWZhdWx0RGlyZWN0b3JpZXMoKXtvLm1rZGlyKCIvdG1wIiksby5ta2RpcigiL2hvbWUiKSxvLm1rZGlyKCIvaG9tZS93ZWJfdXNlciIpfSxjcmVhdGVEZWZhdWx0RGV2aWNlcygpe28ubWtkaXIoIi9kZXYiKSxvLnJlZ2lzdGVyRGV2aWNlKG8ubWFrZWRldigxLDMpLHtyZWFkOigpPT4wLHdyaXRlOihpLF8scyxsLGYpPT5sfSksby5ta2RldigiL2Rldi9udWxsIixvLm1ha2VkZXYoMSwzKSksYWUucmVnaXN0ZXIoby5tYWtlZGV2KDUsMCksYWUuZGVmYXVsdF90dHlfb3BzKSxhZS5yZWdpc3RlcihvLm1ha2VkZXYoNiwwKSxhZS5kZWZhdWx0X3R0eTFfb3BzKSxvLm1rZGV2KCIvZGV2L3R0eSIsby5tYWtlZGV2KDUsMCkpLG8ubWtkZXYoIi9kZXYvdHR5MSIsby5tYWtlZGV2KDYsMCkpO3ZhciBlPW5ldyBVaW50OEFycmF5KDEwMjQpLHQ9MCxyPSgpPT4odD09PTAmJih0PUN0KGUpLmJ5dGVMZW5ndGgpLGVbLS10XSk7by5jcmVhdGVEZXZpY2UoIi9kZXYiLCJyYW5kb20iLHIpLG8uY3JlYXRlRGV2aWNlKCIvZGV2IiwidXJhbmRvbSIsciksby5ta2RpcigiL2Rldi9zaG0iKSxvLm1rZGlyKCIvZGV2L3NobS90bXAiKX0sY3JlYXRlU3BlY2lhbERpcmVjdG9yaWVzKCl7by5ta2RpcigiL3Byb2MiKTt2YXIgZT1vLm1rZGlyKCIvcHJvYy9zZWxmIik7by5ta2RpcigiL3Byb2Mvc2VsZi9mZCIpLG8ubW91bnQoe21vdW50KCl7dmFyIHQ9by5jcmVhdGVOb2RlKGUsImZkIiwxNjg5NSw3Myk7cmV0dXJuIHQubm9kZV9vcHM9e2xvb2t1cChyLGkpe3ZhciBfPStpLHM9by5nZXRTdHJlYW1DaGVja2VkKF8pLGw9e3BhcmVudDpudWxsLG1vdW50Onttb3VudHBvaW50OiJmYWtlIn0sbm9kZV9vcHM6e3JlYWRsaW5rOigpPT5zLnBhdGh9fTtyZXR1cm4gbC5wYXJlbnQ9bCxsfX0sdH19LHt9LCIvcHJvYy9zZWxmL2ZkIil9LGNyZWF0ZVN0YW5kYXJkU3RyZWFtcygpe24uc3RkaW4/by5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRpbiIsbi5zdGRpbik6by5zeW1saW5rKCIvZGV2L3R0eSIsIi9kZXYvc3RkaW4iKSxuLnN0ZG91dD9vLmNyZWF0ZURldmljZSgiL2RldiIsInN0ZG91dCIsbnVsbCxuLnN0ZG91dCk6by5zeW1saW5rKCIvZGV2L3R0eSIsIi9kZXYvc3Rkb3V0Iiksbi5zdGRlcnI/by5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRlcnIiLG51bGwsbi5zdGRlcnIpOm8uc3ltbGluaygiL2Rldi90dHkxIiwiL2Rldi9zdGRlcnIiKSxvLm9wZW4oIi9kZXYvc3RkaW4iLDApLG8ub3BlbigiL2Rldi9zdGRvdXQiLDEpLG8ub3BlbigiL2Rldi9zdGRlcnIiLDEpfSxzdGF0aWNJbml0KCl7WzQ0XS5mb3JFYWNoKGU9PntvLmdlbmVyaWNFcnJvcnNbZV09bmV3IG8uRXJybm9FcnJvcihlKSxvLmdlbmVyaWNFcnJvcnNbZV0uc3RhY2s9IjxnZW5lcmljIGVycm9yLCBubyBzdGFjaz4ifSksby5uYW1lVGFibGU9bmV3IEFycmF5KDQwOTYpLG8ubW91bnQoYix7fSwiLyIpLG8uY3JlYXRlRGVmYXVsdERpcmVjdG9yaWVzKCksby5jcmVhdGVEZWZhdWx0RGV2aWNlcygpLG8uY3JlYXRlU3BlY2lhbERpcmVjdG9yaWVzKCksby5maWxlc3lzdGVtcz17TUVNRlM6Yn19LGluaXQoZSx0LHIpe28uaW5pdC5pbml0aWFsaXplZD0hMCxuLnN0ZGluPWV8fG4uc3RkaW4sbi5zdGRvdXQ9dHx8bi5zdGRvdXQsbi5zdGRlcnI9cnx8bi5zdGRlcnIsby5jcmVhdGVTdGFuZGFyZFN0cmVhbXMoKX0scXVpdCgpe28uaW5pdC5pbml0aWFsaXplZD0hMTtmb3IodmFyIGU9MDtlPG8uc3RyZWFtcy5sZW5ndGg7ZSsrKXt2YXIgdD1vLnN0cmVhbXNbZV07dCYmby5jbG9zZSh0KX19LGZpbmRPYmplY3QoZSx0KXt2YXIgcj1vLmFuYWx5emVQYXRoKGUsdCk7cmV0dXJuIHIuZXhpc3RzP3Iub2JqZWN0Om51bGx9LGFuYWx5emVQYXRoKGUsdCl7dHJ5e3ZhciByPW8ubG9va3VwUGF0aChlLHtmb2xsb3c6IXR9KTtlPXIucGF0aH1jYXRjaHt9dmFyIGk9e2lzUm9vdDohMSxleGlzdHM6ITEsZXJyb3I6MCxuYW1lOm51bGwscGF0aDpudWxsLG9iamVjdDpudWxsLHBhcmVudEV4aXN0czohMSxwYXJlbnRQYXRoOm51bGwscGFyZW50T2JqZWN0Om51bGx9O3RyeXt2YXIgcj1vLmxvb2t1cFBhdGgoZSx7cGFyZW50OiEwfSk7aS5wYXJlbnRFeGlzdHM9ITAsaS5wYXJlbnRQYXRoPXIucGF0aCxpLnBhcmVudE9iamVjdD1yLm5vZGUsaS5uYW1lPUMuYmFzZW5hbWUoZSkscj1vLmxvb2t1cFBhdGgoZSx7Zm9sbG93OiF0fSksaS5leGlzdHM9ITAsaS5wYXRoPXIucGF0aCxpLm9iamVjdD1yLm5vZGUsaS5uYW1lPXIubm9kZS5uYW1lLGkuaXNSb290PXIucGF0aD09PSIvIn1jYXRjaChfKXtpLmVycm9yPV8uZXJybm99cmV0dXJuIGl9LGNyZWF0ZVBhdGgoZSx0LHIsaSl7ZT10eXBlb2YgZT09InN0cmluZyI/ZTpvLmdldFBhdGgoZSk7Zm9yKHZhciBfPXQuc3BsaXQoIi8iKS5yZXZlcnNlKCk7Xy5sZW5ndGg7KXt2YXIgcz1fLnBvcCgpO2lmKHMpe3ZhciBsPUMuam9pbjIoZSxzKTt0cnl7by5ta2RpcihsKX1jYXRjaHt9ZT1sfX1yZXR1cm4gbH0sY3JlYXRlRmlsZShlLHQscixpLF8pe3ZhciBzPUMuam9pbjIodHlwZW9mIGU9PSJzdHJpbmciP2U6by5nZXRQYXRoKGUpLHQpLGw9dHQoaSxfKTtyZXR1cm4gby5jcmVhdGUocyxsKX0sY3JlYXRlRGF0YUZpbGUoZSx0LHIsaSxfLHMpe3ZhciBsPXQ7ZSYmKGU9dHlwZW9mIGU9PSJzdHJpbmciP2U6by5nZXRQYXRoKGUpLGw9dD9DLmpvaW4yKGUsdCk6ZSk7dmFyIGY9dHQoaSxfKSxoPW8uY3JlYXRlKGwsZik7aWYocil7aWYodHlwZW9mIHI9PSJzdHJpbmciKXtmb3IodmFyIGM9bmV3IEFycmF5KHIubGVuZ3RoKSx1PTAsdj1yLmxlbmd0aDt1PHY7Kyt1KWNbdV09ci5jaGFyQ29kZUF0KHUpO3I9Y31vLmNobW9kKGgsZnwxNDYpO3ZhciBwPW8ub3BlbihoLDU3Nyk7by53cml0ZShwLHIsMCxyLmxlbmd0aCwwLHMpLG8uY2xvc2UocCksby5jaG1vZChoLGYpfX0sY3JlYXRlRGV2aWNlKGUsdCxyLGkpe3ZhciBfPUMuam9pbjIodHlwZW9mIGU9PSJzdHJpbmciP2U6by5nZXRQYXRoKGUpLHQpLHM9dHQoISFyLCEhaSk7by5jcmVhdGVEZXZpY2UubWFqb3J8fChvLmNyZWF0ZURldmljZS5tYWpvcj02NCk7dmFyIGw9by5tYWtlZGV2KG8uY3JlYXRlRGV2aWNlLm1ham9yKyssMCk7cmV0dXJuIG8ucmVnaXN0ZXJEZXZpY2UobCx7b3BlbihmKXtmLnNlZWthYmxlPSExfSxjbG9zZShmKXt2YXIgaDsoaD1pPT1udWxsP3ZvaWQgMDppLmJ1ZmZlcikhPW51bGwmJmgubGVuZ3RoJiZpKDEwKX0scmVhZChmLGgsYyx1LHYpe2Zvcih2YXIgcD0wLGc9MDtnPHU7ZysrKXt2YXIgeTt0cnl7eT1yKCl9Y2F0Y2h7dGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOSl9aWYoeT09PXZvaWQgMCYmcD09PTApdGhyb3cgbmV3IG8uRXJybm9FcnJvcig2KTtpZih5PT1udWxsKWJyZWFrO3ArKyxoW2MrZ109eX1yZXR1cm4gcCYmKGYubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSkscH0sd3JpdGUoZixoLGMsdSx2KXtmb3IodmFyIHA9MDtwPHU7cCsrKXRyeXtpKGhbYytwXSl9Y2F0Y2h7dGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOSl9cmV0dXJuIHUmJihmLm5vZGUudGltZXN0YW1wPURhdGUubm93KCkpLHB9fSksby5ta2RldihfLHMsbCl9LGZvcmNlTG9hZEZpbGUoZSl7aWYoZS5pc0RldmljZXx8ZS5pc0ZvbGRlcnx8ZS5saW5rfHxlLmNvbnRlbnRzKXJldHVybiEwO2lmKHR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIpdGhyb3cgbmV3IEVycm9yKCJMYXp5IGxvYWRpbmcgc2hvdWxkIGhhdmUgYmVlbiBwZXJmb3JtZWQgKGNvbnRlbnRzIHNldCkgaW4gY3JlYXRlTGF6eUZpbGUsIGJ1dCBpdCB3YXMgbm90LiBMYXp5IGxvYWRpbmcgb25seSB3b3JrcyBpbiB3ZWIgd29ya2Vycy4gVXNlIC0tZW1iZWQtZmlsZSBvciAtLXByZWxvYWQtZmlsZSBpbiBlbWNjIG9uIHRoZSBtYWluIHRocmVhZC4iKTtpZihkZSl0cnl7ZS5jb250ZW50cz1TZShkZShlLnVybCksITApLGUudXNlZEJ5dGVzPWUuY29udGVudHMubGVuZ3RofWNhdGNoe3Rocm93IG5ldyBvLkVycm5vRXJyb3IoMjkpfWVsc2UgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgbG9hZCB3aXRob3V0IHJlYWQoKSBvciBYTUxIdHRwUmVxdWVzdC4iKX0sY3JlYXRlTGF6eUZpbGUoZSx0LHIsaSxfKXtjbGFzcyBze2NvbnN0cnVjdG9yKCl7dGhpcy5sZW5ndGhLbm93bj0hMSx0aGlzLmNodW5rcz1bXX1nZXQoZyl7aWYoIShnPnRoaXMubGVuZ3RoLTF8fGc8MCkpe3ZhciB5PWcldGhpcy5jaHVua1NpemUsQT1nL3RoaXMuY2h1bmtTaXplfDA7cmV0dXJuIHRoaXMuZ2V0dGVyKEEpW3ldfX1zZXREYXRhR2V0dGVyKGcpe3RoaXMuZ2V0dGVyPWd9Y2FjaGVMZW5ndGgoKXt2YXIgZz1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoZy5vcGVuKCJIRUFEIixyLCExKSxnLnNlbmQobnVsbCksIShnLnN0YXR1cz49MjAwJiZnLnN0YXR1czwzMDB8fGcuc3RhdHVzPT09MzA0KSl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkbid0IGxvYWQgIityKyIuIFN0YXR1czogIitnLnN0YXR1cyk7dmFyIHk9TnVtYmVyKGcuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIikpLEEsVD0oQT1nLmdldFJlc3BvbnNlSGVhZGVyKCJBY2NlcHQtUmFuZ2VzIikpJiZBPT09ImJ5dGVzIixEPShBPWcuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtRW5jb2RpbmciKSkmJkE9PT0iZ3ppcCIsZD0xMDI0KjEwMjQ7VHx8KGQ9eSk7dmFyIG09KFAsSCk9PntpZihQPkgpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHJhbmdlICgiK1ArIiwgIitIKyIpIG9yIG5vIGJ5dGVzIHJlcXVlc3RlZCEiKTtpZihIPnktMSl0aHJvdyBuZXcgRXJyb3IoIm9ubHkgIit5KyIgYnl0ZXMgYXZhaWxhYmxlISBwcm9ncmFtbWVyIGVycm9yISIpO3ZhciBGPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihGLm9wZW4oIkdFVCIsciwhMSkseSE9PWQmJkYuc2V0UmVxdWVzdEhlYWRlcigiUmFuZ2UiLCJieXRlcz0iK1ArIi0iK0gpLEYucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsRi5vdmVycmlkZU1pbWVUeXBlJiZGLm92ZXJyaWRlTWltZVR5cGUoInRleHQvcGxhaW47IGNoYXJzZXQ9eC11c2VyLWRlZmluZWQiKSxGLnNlbmQobnVsbCksIShGLnN0YXR1cz49MjAwJiZGLnN0YXR1czwzMDB8fEYuc3RhdHVzPT09MzA0KSl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkbid0IGxvYWQgIityKyIuIFN0YXR1czogIitGLnN0YXR1cyk7cmV0dXJuIEYucmVzcG9uc2UhPT12b2lkIDA/bmV3IFVpbnQ4QXJyYXkoRi5yZXNwb25zZXx8W10pOlNlKEYucmVzcG9uc2VUZXh0fHwiIiwhMCl9LGs9dGhpcztrLnNldERhdGFHZXR0ZXIoUD0+e3ZhciBIPVAqZCxGPShQKzEpKmQtMTtpZihGPU1hdGgubWluKEYseS0xKSx0eXBlb2Ygay5jaHVua3NbUF0+InUiJiYoay5jaHVua3NbUF09bShILEYpKSx0eXBlb2Ygay5jaHVua3NbUF0+InUiKXRocm93IG5ldyBFcnJvcigiZG9YSFIgZmFpbGVkISIpO3JldHVybiBrLmNodW5rc1tQXX0pLChEfHwheSkmJihkPXk9MSx5PXRoaXMuZ2V0dGVyKDApLmxlbmd0aCxkPXksWWUoIkxhenlGaWxlcyBvbiBnemlwIGZvcmNlcyBkb3dubG9hZCBvZiB0aGUgd2hvbGUgZmlsZSB3aGVuIGxlbmd0aCBpcyBhY2Nlc3NlZCIpKSx0aGlzLl9sZW5ndGg9eSx0aGlzLl9jaHVua1NpemU9ZCx0aGlzLmxlbmd0aEtub3duPSEwfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5sZW5ndGhLbm93bnx8dGhpcy5jYWNoZUxlbmd0aCgpLHRoaXMuX2xlbmd0aH1nZXQgY2h1bmtTaXplKCl7cmV0dXJuIHRoaXMubGVuZ3RoS25vd258fHRoaXMuY2FjaGVMZW5ndGgoKSx0aGlzLl9jaHVua1NpemV9fWlmKHR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIpe2lmKCFRKXRocm93IkNhbm5vdCBkbyBzeW5jaHJvbm91cyBiaW5hcnkgWEhScyBvdXRzaWRlIHdlYndvcmtlcnMgaW4gbW9kZXJuIGJyb3dzZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2MiO3ZhciBsPW5ldyBzLGY9e2lzRGV2aWNlOiExLGNvbnRlbnRzOmx9fWVsc2UgdmFyIGY9e2lzRGV2aWNlOiExLHVybDpyfTt2YXIgaD1vLmNyZWF0ZUZpbGUoZSx0LGYsaSxfKTtmLmNvbnRlbnRzP2guY29udGVudHM9Zi5jb250ZW50czpmLnVybCYmKGguY29udGVudHM9bnVsbCxoLnVybD1mLnVybCksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoaCx7dXNlZEJ5dGVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250ZW50cy5sZW5ndGh9fX0pO3ZhciBjPXt9LHU9T2JqZWN0LmtleXMoaC5zdHJlYW1fb3BzKTt1LmZvckVhY2gocD0+e3ZhciBnPWguc3RyZWFtX29wc1twXTtjW3BdPSguLi55KT0+KG8uZm9yY2VMb2FkRmlsZShoKSxnKC4uLnkpKX0pO2Z1bmN0aW9uIHYocCxnLHksQSxUKXt2YXIgRD1wLm5vZGUuY29udGVudHM7aWYoVD49RC5sZW5ndGgpcmV0dXJuIDA7dmFyIGQ9TWF0aC5taW4oRC5sZW5ndGgtVCxBKTtpZihELnNsaWNlKWZvcih2YXIgbT0wO208ZDttKyspZ1t5K21dPURbVCttXTtlbHNlIGZvcih2YXIgbT0wO208ZDttKyspZ1t5K21dPUQuZ2V0KFQrbSk7cmV0dXJuIGR9cmV0dXJuIGMucmVhZD0ocCxnLHksQSxUKT0+KG8uZm9yY2VMb2FkRmlsZShoKSx2KHAsZyx5LEEsVCkpLGMubW1hcD0ocCxnLHksQSxUKT0+e28uZm9yY2VMb2FkRmlsZShoKTt2YXIgRD1UdCgpO2lmKCFEKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDgpO3JldHVybiB2KHAsTSxELGcseSkse3B0cjpELGFsbG9jYXRlZDohMH19LGguc3RyZWFtX29wcz1jLGh9fSxSPXtERUZBVUxUX1BPTExNQVNLOjUsY2FsY3VsYXRlQXQoZSx0LHIpe2lmKEMuaXNBYnModCkpcmV0dXJuIHQ7dmFyIGk7aWYoZT09PS0xMDApaT1vLmN3ZCgpO2Vsc2V7dmFyIF89Ui5nZXRTdHJlYW1Gcm9tRkQoZSk7aT1fLnBhdGh9aWYodC5sZW5ndGg9PTApe2lmKCFyKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDQpO3JldHVybiBpfXJldHVybiBDLmpvaW4yKGksdCl9LGRvU3RhdChlLHQscil7dmFyIGk9ZSh0KTt3W3I+PjJdPWkuZGV2LHdbcis0Pj4yXT1pLm1vZGUseFtyKzg+PjJdPWkubmxpbmssd1tyKzEyPj4yXT1pLnVpZCx3W3IrMTY+PjJdPWkuZ2lkLHdbcisyMD4+Ml09aS5yZGV2LGo9W2kuc2l6ZT4+PjAsKEU9aS5zaXplLCtNYXRoLmFicyhFKT49MT9FPjA/K01hdGguZmxvb3IoRS80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChFLSsofn5FPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sd1tyKzI0Pj4yXT1qWzBdLHdbcisyOD4+Ml09alsxXSx3W3IrMzI+PjJdPTQwOTYsd1tyKzM2Pj4yXT1pLmJsb2Nrczt2YXIgXz1pLmF0aW1lLmdldFRpbWUoKSxzPWkubXRpbWUuZ2V0VGltZSgpLGw9aS5jdGltZS5nZXRUaW1lKCk7cmV0dXJuIGo9W01hdGguZmxvb3IoXy8xZTMpPj4+MCwoRT1NYXRoLmZsb29yKF8vMWUzKSwrTWF0aC5hYnMoRSk+PTE/RT4wPytNYXRoLmZsb29yKEUvNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoRS0rKH5+RT4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLHdbcis0MD4+Ml09alswXSx3W3IrNDQ+PjJdPWpbMV0seFtyKzQ4Pj4yXT1fJTFlMyoxZTMsaj1bTWF0aC5mbG9vcihzLzFlMyk+Pj4wLChFPU1hdGguZmxvb3Iocy8xZTMpLCtNYXRoLmFicyhFKT49MT9FPjA/K01hdGguZmxvb3IoRS80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChFLSsofn5FPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sd1tyKzU2Pj4yXT1qWzBdLHdbcis2MD4+Ml09alsxXSx4W3IrNjQ+PjJdPXMlMWUzKjFlMyxqPVtNYXRoLmZsb29yKGwvMWUzKT4+PjAsKEU9TWF0aC5mbG9vcihsLzFlMyksK01hdGguYWJzKEUpPj0xP0U+MD8rTWF0aC5mbG9vcihFLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKEUtKyh+fkU+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSx3W3IrNzI+PjJdPWpbMF0sd1tyKzc2Pj4yXT1qWzFdLHhbcis4MD4+Ml09bCUxZTMqMWUzLGo9W2kuaW5vPj4+MCwoRT1pLmlubywrTWF0aC5hYnMoRSk+PTE/RT4wPytNYXRoLmZsb29yKEUvNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoRS0rKH5+RT4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLHdbcis4OD4+Ml09alswXSx3W3IrOTI+PjJdPWpbMV0sMH0sZG9Nc3luYyhlLHQscixpLF8pe2lmKCFvLmlzRmlsZSh0Lm5vZGUubW9kZSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig0Myk7aWYoaSYyKXJldHVybiAwO3ZhciBzPU8uc2xpY2UoZSxlK3IpO28ubXN5bmModCxzLF8scixpKX0sZ2V0U3RyZWFtRnJvbUZEKGUpe3ZhciB0PW8uZ2V0U3RyZWFtQ2hlY2tlZChlKTtyZXR1cm4gdH0sdmFyYXJnczp2b2lkIDAsZ2V0U3RyKGUpe3ZhciB0PWllKGUpO3JldHVybiB0fX07ZnVuY3Rpb24gVHIoZSx0LHIpe1IudmFyYXJncz1yO3RyeXt2YXIgaT1SLmdldFN0cmVhbUZyb21GRChlKTtzd2l0Y2godCl7Y2FzZSAwOnt2YXIgXz1BZSgpO2lmKF88MClyZXR1cm4tMjg7Zm9yKDtvLnN0cmVhbXNbX107KV8rKzt2YXIgcztyZXR1cm4gcz1vLmR1cFN0cmVhbShpLF8pLHMuZmR9Y2FzZSAxOmNhc2UgMjpyZXR1cm4gMDtjYXNlIDM6cmV0dXJuIGkuZmxhZ3M7Y2FzZSA0Ont2YXIgXz1BZSgpO3JldHVybiBpLmZsYWdzfD1fLDB9Y2FzZSAxMjp7dmFyIF89c2UoKSxsPTA7cmV0dXJuIFhbXytsPj4xXT0yLDB9Y2FzZSAxMzpjYXNlIDE0OnJldHVybiAwfXJldHVybi0yOH1jYXRjaChmKXtpZih0eXBlb2Ygbz4idSJ8fGYubmFtZSE9PSJFcnJub0Vycm9yIil0aHJvdyBmO3JldHVybi1mLmVycm5vfX1mdW5jdGlvbiBEcihlLHQscil7Ui52YXJhcmdzPXI7dHJ5e3ZhciBpPVIuZ2V0U3RyZWFtRnJvbUZEKGUpO3N3aXRjaCh0KXtjYXNlIDIxNTA5OnJldHVybiBpLnR0eT8wOi01OTtjYXNlIDIxNTA1OntpZighaS50dHkpcmV0dXJuLTU5O2lmKGkudHR5Lm9wcy5pb2N0bF90Y2dldHMpe3ZhciBfPWkudHR5Lm9wcy5pb2N0bF90Y2dldHMoaSkscz1zZSgpO3dbcz4+Ml09Xy5jX2lmbGFnfHwwLHdbcys0Pj4yXT1fLmNfb2ZsYWd8fDAsd1tzKzg+PjJdPV8uY19jZmxhZ3x8MCx3W3MrMTI+PjJdPV8uY19sZmxhZ3x8MDtmb3IodmFyIGw9MDtsPDMyO2wrKylNW3MrbCsxN109Xy5jX2NjW2xdfHwwO3JldHVybiAwfXJldHVybiAwfWNhc2UgMjE1MTA6Y2FzZSAyMTUxMTpjYXNlIDIxNTEyOnJldHVybiBpLnR0eT8wOi01OTtjYXNlIDIxNTA2OmNhc2UgMjE1MDc6Y2FzZSAyMTUwODp7aWYoIWkudHR5KXJldHVybi01OTtpZihpLnR0eS5vcHMuaW9jdGxfdGNzZXRzKXtmb3IodmFyIHM9c2UoKSxmPXdbcz4+Ml0saD13W3MrND4+Ml0sYz13W3MrOD4+Ml0sdT13W3MrMTI+PjJdLHY9W10sbD0wO2w8MzI7bCsrKXYucHVzaChNW3MrbCsxN10pO3JldHVybiBpLnR0eS5vcHMuaW9jdGxfdGNzZXRzKGkudHR5LHQse2NfaWZsYWc6ZixjX29mbGFnOmgsY19jZmxhZzpjLGNfbGZsYWc6dSxjX2NjOnZ9KX1yZXR1cm4gMH1jYXNlIDIxNTE5OntpZighaS50dHkpcmV0dXJuLTU5O3ZhciBzPXNlKCk7cmV0dXJuIHdbcz4+Ml09MCwwfWNhc2UgMjE1MjA6cmV0dXJuIGkudHR5Py0yODotNTk7Y2FzZSAyMTUzMTp7dmFyIHM9c2UoKTtyZXR1cm4gby5pb2N0bChpLHQscyl9Y2FzZSAyMTUyMzp7aWYoIWkudHR5KXJldHVybi01OTtpZihpLnR0eS5vcHMuaW9jdGxfdGlvY2d3aW5zeil7dmFyIHA9aS50dHkub3BzLmlvY3RsX3Rpb2Nnd2luc3ooaS50dHkpLHM9c2UoKTtYW3M+PjFdPXBbMF0sWFtzKzI+PjFdPXBbMV19cmV0dXJuIDB9Y2FzZSAyMTUyNDpyZXR1cm4gaS50dHk/MDotNTk7Y2FzZSAyMTUxNTpyZXR1cm4gaS50dHk/MDotNTk7ZGVmYXVsdDpyZXR1cm4tMjh9fWNhdGNoKGcpe2lmKHR5cGVvZiBvPiJ1Inx8Zy5uYW1lIT09IkVycm5vRXJyb3IiKXRocm93IGc7cmV0dXJuLWcuZXJybm99fWZ1bmN0aW9uIEZyKGUsdCxyLGkpe1IudmFyYXJncz1pO3RyeXt0PVIuZ2V0U3RyKHQpLHQ9Ui5jYWxjdWxhdGVBdChlLHQpO3ZhciBfPWk/QWUoKTowO3JldHVybiBvLm9wZW4odCxyLF8pLmZkfWNhdGNoKHMpe2lmKHR5cGVvZiBvPiJ1Inx8cy5uYW1lIT09IkVycm5vRXJyb3IiKXRocm93IHM7cmV0dXJuLXMuZXJybm99fWZ1bmN0aW9uIEFyKGUsdCxyKXt0cnl7cmV0dXJuIHQ9Ui5nZXRTdHIodCksdD1SLmNhbGN1bGF0ZUF0KGUsdCkscj09PTA/by51bmxpbmsodCk6cj09PTUxMj9vLnJtZGlyKHQpOnBlKCJJbnZhbGlkIGZsYWdzIHBhc3NlZCB0byB1bmxpbmthdCIpLDB9Y2F0Y2goaSl7aWYodHlwZW9mIG8+InUifHxpLm5hbWUhPT0iRXJybm9FcnJvciIpdGhyb3cgaTtyZXR1cm4taS5lcnJub319dmFyIFNyPSgpPT57cGUoIiIpfSxNZT17fSxydD1lPT57Zm9yKDtlLmxlbmd0aDspe3ZhciB0PWUucG9wKCkscj1lLnBvcCgpO3IodCl9fTtmdW5jdGlvbiBnZShlKXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoeFtlPj4yXSl9dmFyIGxlPXt9LG9lPXt9LGplPXt9LER0LE9lPWU9Pnt0aHJvdyBuZXcgRHQoZSl9LG50PShlLHQscik9PntlLmZvckVhY2goZnVuY3Rpb24oZil7amVbZl09dH0pO2Z1bmN0aW9uIGkoZil7dmFyIGg9cihmKTtoLmxlbmd0aCE9PWUubGVuZ3RoJiZPZSgiTWlzbWF0Y2hlZCB0eXBlIGNvbnZlcnRlciBjb3VudCIpO2Zvcih2YXIgYz0wO2M8ZS5sZW5ndGg7KytjKUwoZVtjXSxoW2NdKX12YXIgXz1uZXcgQXJyYXkodC5sZW5ndGgpLHM9W10sbD0wO3QuZm9yRWFjaCgoZixoKT0+e29lLmhhc093blByb3BlcnR5KGYpP19baF09b2VbZl06KHMucHVzaChmKSxsZS5oYXNPd25Qcm9wZXJ0eShmKXx8KGxlW2ZdPVtdKSxsZVtmXS5wdXNoKCgpPT57X1toXT1vZVtmXSwrK2wsbD09PXMubGVuZ3RoJiZpKF8pfSkpfSkscy5sZW5ndGg9PT0wJiZpKF8pfSxNcj1lPT57dmFyIHQ9TWVbZV07ZGVsZXRlIE1lW2VdO3ZhciByPXQucmF3Q29uc3RydWN0b3IsaT10LnJhd0Rlc3RydWN0b3IsXz10LmZpZWxkcyxzPV8ubWFwKGw9PmwuZ2V0dGVyUmV0dXJuVHlwZSkuY29uY2F0KF8ubWFwKGw9Pmwuc2V0dGVyQXJndW1lbnRUeXBlKSk7bnQoW2VdLHMsbD0+e3ZhciBmPXt9O3JldHVybiBfLmZvckVhY2goKGgsYyk9Pnt2YXIgdT1oLmZpZWxkTmFtZSx2PWxbY10scD1oLmdldHRlcixnPWguZ2V0dGVyQ29udGV4dCx5PWxbYytfLmxlbmd0aF0sQT1oLnNldHRlcixUPWguc2V0dGVyQ29udGV4dDtmW3VdPXtyZWFkOkQ9PnYuZnJvbVdpcmVUeXBlKHAoZyxEKSksd3JpdGU6KEQsZCk9Pnt2YXIgbT1bXTtBKFQsRCx5LnRvV2lyZVR5cGUobSxkKSkscnQobSl9fX0pLFt7bmFtZTp0Lm5hbWUsZnJvbVdpcmVUeXBlOmg9Pnt2YXIgYz17fTtmb3IodmFyIHUgaW4gZiljW3VdPWZbdV0ucmVhZChoKTtyZXR1cm4gaShoKSxjfSx0b1dpcmVUeXBlOihoLGMpPT57Zm9yKHZhciB1IGluIGYpaWYoISh1IGluIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoYE1pc3NpbmcgZmllbGQ6ICIke3V9ImApO3ZhciB2PXIoKTtmb3IodSBpbiBmKWZbdV0ud3JpdGUodixjW3VdKTtyZXR1cm4gaCE9PW51bGwmJmgucHVzaChpLHYpLHZ9LGFyZ1BhY2tBZHZhbmNlOlYscmVhZFZhbHVlRnJvbVBvaW50ZXI6Z2UsZGVzdHJ1Y3RvckZ1bmN0aW9uOml9XX0pfSxqcj0oZSx0LHIsaSxfKT0+e30sT3I9KCk9Pntmb3IodmFyIGU9bmV3IEFycmF5KDI1NiksdD0wO3Q8MjU2OysrdCllW3RdPVN0cmluZy5mcm9tQ2hhckNvZGUodCk7RnQ9ZX0sRnQsej1lPT57Zm9yKHZhciB0PSIiLHI9ZTtPW3JdOyl0Kz1GdFtPW3IrK11dO3JldHVybiB0fSx2ZSwkPWU9Pnt0aHJvdyBuZXcgdmUoZSl9O2Z1bmN0aW9uIFJyKGUsdCxyPXt9KXt2YXIgaT10Lm5hbWU7aWYoZXx8JChgdHlwZSAiJHtpfSIgbXVzdCBoYXZlIGEgcG9zaXRpdmUgaW50ZWdlciB0eXBlaWQgcG9pbnRlcmApLG9lLmhhc093blByb3BlcnR5KGUpKXtpZihyLmlnbm9yZUR1cGxpY2F0ZVJlZ2lzdHJhdGlvbnMpcmV0dXJuOyQoYENhbm5vdCByZWdpc3RlciB0eXBlICcke2l9JyB0d2ljZWApfWlmKG9lW2VdPXQsZGVsZXRlIGplW2VdLGxlLmhhc093blByb3BlcnR5KGUpKXt2YXIgXz1sZVtlXTtkZWxldGUgbGVbZV0sXy5mb3JFYWNoKHM9PnMoKSl9fWZ1bmN0aW9uIEwoZSx0LHI9e30pe2lmKCEoImFyZ1BhY2tBZHZhbmNlImluIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoInJlZ2lzdGVyVHlwZSByZWdpc3RlcmVkSW5zdGFuY2UgcmVxdWlyZXMgYXJnUGFja0FkdmFuY2UiKTtyZXR1cm4gUnIoZSx0LHIpfXZhciBWPTgsenI9KGUsdCxyLGkpPT57dD16KHQpLEwoZSx7bmFtZTp0LGZyb21XaXJlVHlwZTpmdW5jdGlvbihfKXtyZXR1cm4hIV99LHRvV2lyZVR5cGU6ZnVuY3Rpb24oXyxzKXtyZXR1cm4gcz9yOml9LGFyZ1BhY2tBZHZhbmNlOlYscmVhZFZhbHVlRnJvbVBvaW50ZXI6ZnVuY3Rpb24oXyl7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKE9bX10pfSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pfSxJcj1lPT4oe2NvdW50OmUuY291bnQsZGVsZXRlU2NoZWR1bGVkOmUuZGVsZXRlU2NoZWR1bGVkLHByZXNlcnZlUG9pbnRlck9uRGVsZXRlOmUucHJlc2VydmVQb2ludGVyT25EZWxldGUscHRyOmUucHRyLHB0clR5cGU6ZS5wdHJUeXBlLHNtYXJ0UHRyOmUuc21hcnRQdHIsc21hcnRQdHJUeXBlOmUuc21hcnRQdHJUeXBlfSksaXQ9ZT0+e2Z1bmN0aW9uIHQocil7cmV0dXJuIHIuJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3MubmFtZX0kKHQoZSkrIiBpbnN0YW5jZSBhbHJlYWR5IGRlbGV0ZWQiKX0sYXQ9ITEsQXQ9ZT0+e30sSHI9ZT0+e2Uuc21hcnRQdHI/ZS5zbWFydFB0clR5cGUucmF3RGVzdHJ1Y3RvcihlLnNtYXJ0UHRyKTplLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLnJhd0Rlc3RydWN0b3IoZS5wdHIpfSxTdD1lPT57ZS5jb3VudC52YWx1ZS09MTt2YXIgdD1lLmNvdW50LnZhbHVlPT09MDt0JiZIcihlKX0sTXQ9KGUsdCxyKT0+e2lmKHQ9PT1yKXJldHVybiBlO2lmKHIuYmFzZUNsYXNzPT09dm9pZCAwKXJldHVybiBudWxsO3ZhciBpPU10KGUsdCxyLmJhc2VDbGFzcyk7cmV0dXJuIGk9PT1udWxsP251bGw6ci5kb3duY2FzdChpKX0sanQ9e30sV3I9KCk9Pk9iamVjdC5rZXlzKGJlKS5sZW5ndGgscXI9KCk9Pnt2YXIgZT1bXTtmb3IodmFyIHQgaW4gYmUpYmUuaGFzT3duUHJvcGVydHkodCkmJmUucHVzaChiZVt0XSk7cmV0dXJuIGV9LHllPVtdLG90PSgpPT57Zm9yKDt5ZS5sZW5ndGg7KXt2YXIgZT15ZS5wb3AoKTtlLiQkLmRlbGV0ZVNjaGVkdWxlZD0hMSxlLmRlbGV0ZSgpfX0sd2UsTnI9ZT0+e3dlPWUseWUubGVuZ3RoJiZ3ZSYmd2Uob3QpfSxCcj0oKT0+e24uZ2V0SW5oZXJpdGVkSW5zdGFuY2VDb3VudD1XcixuLmdldExpdmVJbmhlcml0ZWRJbnN0YW5jZXM9cXIsbi5mbHVzaFBlbmRpbmdEZWxldGVzPW90LG4uc2V0RGVsYXlGdW5jdGlvbj1Ocn0sYmU9e30sVXI9KGUsdCk9Pntmb3IodD09PXZvaWQgMCYmJCgicHRyIHNob3VsZCBub3QgYmUgdW5kZWZpbmVkIik7ZS5iYXNlQ2xhc3M7KXQ9ZS51cGNhc3QodCksZT1lLmJhc2VDbGFzcztyZXR1cm4gdH0sTHI9KGUsdCk9Pih0PVVyKGUsdCksYmVbdF0pLFJlPShlLHQpPT57KCF0LnB0clR5cGV8fCF0LnB0cikmJk9lKCJtYWtlQ2xhc3NIYW5kbGUgcmVxdWlyZXMgcHRyIGFuZCBwdHJUeXBlIik7dmFyIHI9ISF0LnNtYXJ0UHRyVHlwZSxpPSEhdC5zbWFydFB0cjtyZXR1cm4gciE9PWkmJk9lKCJCb3RoIHNtYXJ0UHRyVHlwZSBhbmQgc21hcnRQdHIgbXVzdCBiZSBzcGVjaWZpZWQiKSx0LmNvdW50PXt2YWx1ZToxfSxFZShPYmplY3QuY3JlYXRlKGUseyQkOnt2YWx1ZTp0LHdyaXRhYmxlOiEwfX0pKX07ZnVuY3Rpb24gVnIoZSl7dmFyIHQ9dGhpcy5nZXRQb2ludGVlKGUpO2lmKCF0KXJldHVybiB0aGlzLmRlc3RydWN0b3IoZSksbnVsbDt2YXIgcj1Mcih0aGlzLnJlZ2lzdGVyZWRDbGFzcyx0KTtpZihyIT09dm9pZCAwKXtpZihyLiQkLmNvdW50LnZhbHVlPT09MClyZXR1cm4gci4kJC5wdHI9dCxyLiQkLnNtYXJ0UHRyPWUsci5jbG9uZSgpO3ZhciBpPXIuY2xvbmUoKTtyZXR1cm4gdGhpcy5kZXN0cnVjdG9yKGUpLGl9ZnVuY3Rpb24gXygpe3JldHVybiB0aGlzLmlzU21hcnRQb2ludGVyP1JlKHRoaXMucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLHtwdHJUeXBlOnRoaXMucG9pbnRlZVR5cGUscHRyOnQsc21hcnRQdHJUeXBlOnRoaXMsc21hcnRQdHI6ZX0pOlJlKHRoaXMucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLHtwdHJUeXBlOnRoaXMscHRyOmV9KX12YXIgcz10aGlzLnJlZ2lzdGVyZWRDbGFzcy5nZXRBY3R1YWxUeXBlKHQpLGw9anRbc107aWYoIWwpcmV0dXJuIF8uY2FsbCh0aGlzKTt2YXIgZjt0aGlzLmlzQ29uc3Q/Zj1sLmNvbnN0UG9pbnRlclR5cGU6Zj1sLnBvaW50ZXJUeXBlO3ZhciBoPU10KHQsdGhpcy5yZWdpc3RlcmVkQ2xhc3MsZi5yZWdpc3RlcmVkQ2xhc3MpO3JldHVybiBoPT09bnVsbD9fLmNhbGwodGhpcyk6dGhpcy5pc1NtYXJ0UG9pbnRlcj9SZShmLnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSx7cHRyVHlwZTpmLHB0cjpoLHNtYXJ0UHRyVHlwZTp0aGlzLHNtYXJ0UHRyOmV9KTpSZShmLnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSx7cHRyVHlwZTpmLHB0cjpofSl9dmFyIEVlPWU9PnR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT4idSI/KEVlPXQ9PnQsZSk6KGF0PW5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeSh0PT57U3QodC4kJCl9KSxFZT10PT57dmFyIHI9dC4kJCxpPSEhci5zbWFydFB0cjtpZihpKXt2YXIgXz17JCQ6cn07YXQucmVnaXN0ZXIodCxfLHQpfXJldHVybiB0fSxBdD10PT5hdC51bnJlZ2lzdGVyKHQpLEVlKGUpKSxZcj0oKT0+e09iamVjdC5hc3NpZ24oemUucHJvdG90eXBlLHtpc0FsaWFzT2YoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgemUpfHwhKGUgaW5zdGFuY2VvZiB6ZSkpcmV0dXJuITE7dmFyIHQ9dGhpcy4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcyxyPXRoaXMuJCQucHRyO2UuJCQ9ZS4kJDtmb3IodmFyIGk9ZS4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcyxfPWUuJCQucHRyO3QuYmFzZUNsYXNzOylyPXQudXBjYXN0KHIpLHQ9dC5iYXNlQ2xhc3M7Zm9yKDtpLmJhc2VDbGFzczspXz1pLnVwY2FzdChfKSxpPWkuYmFzZUNsYXNzO3JldHVybiB0PT09aSYmcj09PV99LGNsb25lKCl7aWYodGhpcy4kJC5wdHJ8fGl0KHRoaXMpLHRoaXMuJCQucHJlc2VydmVQb2ludGVyT25EZWxldGUpcmV0dXJuIHRoaXMuJCQuY291bnQudmFsdWUrPTEsdGhpczt2YXIgZT1FZShPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSx7JCQ6e3ZhbHVlOklyKHRoaXMuJCQpfX0pKTtyZXR1cm4gZS4kJC5jb3VudC52YWx1ZSs9MSxlLiQkLmRlbGV0ZVNjaGVkdWxlZD0hMSxlfSxkZWxldGUoKXt0aGlzLiQkLnB0cnx8aXQodGhpcyksdGhpcy4kJC5kZWxldGVTY2hlZHVsZWQmJiF0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlJiYkKCJPYmplY3QgYWxyZWFkeSBzY2hlZHVsZWQgZm9yIGRlbGV0aW9uIiksQXQodGhpcyksU3QodGhpcy4kJCksdGhpcy4kJC5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZXx8KHRoaXMuJCQuc21hcnRQdHI9dm9pZCAwLHRoaXMuJCQucHRyPXZvaWQgMCl9LGlzRGVsZXRlZCgpe3JldHVybiF0aGlzLiQkLnB0cn0sZGVsZXRlTGF0ZXIoKXtyZXR1cm4gdGhpcy4kJC5wdHJ8fGl0KHRoaXMpLHRoaXMuJCQuZGVsZXRlU2NoZWR1bGVkJiYhdGhpcy4kJC5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZSYmJCgiT2JqZWN0IGFscmVhZHkgc2NoZWR1bGVkIGZvciBkZWxldGlvbiIpLHllLnB1c2godGhpcykseWUubGVuZ3RoPT09MSYmd2UmJndlKG90KSx0aGlzLiQkLmRlbGV0ZVNjaGVkdWxlZD0hMCx0aGlzfX0pfTtmdW5jdGlvbiB6ZSgpe312YXIga2U9KGUsdCk9Pk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJuYW1lIix7dmFsdWU6ZX0pLFhyPShlLHQscik9PntpZihlW3RdLm92ZXJsb2FkVGFibGU9PT12b2lkIDApe3ZhciBpPWVbdF07ZVt0XT1mdW5jdGlvbiguLi5fKXtyZXR1cm4gZVt0XS5vdmVybG9hZFRhYmxlLmhhc093blByb3BlcnR5KF8ubGVuZ3RoKXx8JChgRnVuY3Rpb24gJyR7cn0nIGNhbGxlZCB3aXRoIGFuIGludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyAoJHtfLmxlbmd0aH0pIC0gZXhwZWN0cyBvbmUgb2YgKCR7ZVt0XS5vdmVybG9hZFRhYmxlfSkhYCksZVt0XS5vdmVybG9hZFRhYmxlW18ubGVuZ3RoXS5hcHBseSh0aGlzLF8pfSxlW3RdLm92ZXJsb2FkVGFibGU9W10sZVt0XS5vdmVybG9hZFRhYmxlW2kuYXJnQ291bnRdPWl9fSxfdD0oZSx0LHIpPT57bi5oYXNPd25Qcm9wZXJ0eShlKT8oKHI9PT12b2lkIDB8fG5bZV0ub3ZlcmxvYWRUYWJsZSE9PXZvaWQgMCYmbltlXS5vdmVybG9hZFRhYmxlW3JdIT09dm9pZCAwKSYmJChgQ2Fubm90IHJlZ2lzdGVyIHB1YmxpYyBuYW1lICcke2V9JyB0d2ljZWApLFhyKG4sZSxlKSxuLmhhc093blByb3BlcnR5KHIpJiYkKGBDYW5ub3QgcmVnaXN0ZXIgbXVsdGlwbGUgb3ZlcmxvYWRzIG9mIGEgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBudW1iZXIgb2YgYXJndW1lbnRzICgke3J9KSFgKSxuW2VdLm92ZXJsb2FkVGFibGVbcl09dCk6KG5bZV09dCxyIT09dm9pZCAwJiYobltlXS5udW1Bcmd1bWVudHM9cikpfSxHcj00OCxKcj01NyxLcj1lPT57aWYoZT09PXZvaWQgMClyZXR1cm4iX3Vua25vd24iO2U9ZS5yZXBsYWNlKC9bXmEtekEtWjAtOV9dL2csIiQiKTt2YXIgdD1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIHQ+PUdyJiZ0PD1Kcj9gXyR7ZX1gOmV9O2Z1bmN0aW9uIFpyKGUsdCxyLGksXyxzLGwsZil7dGhpcy5uYW1lPWUsdGhpcy5jb25zdHJ1Y3Rvcj10LHRoaXMuaW5zdGFuY2VQcm90b3R5cGU9cix0aGlzLnJhd0Rlc3RydWN0b3I9aSx0aGlzLmJhc2VDbGFzcz1fLHRoaXMuZ2V0QWN0dWFsVHlwZT1zLHRoaXMudXBjYXN0PWwsdGhpcy5kb3duY2FzdD1mLHRoaXMucHVyZVZpcnR1YWxGdW5jdGlvbnM9W119dmFyIHN0PShlLHQscik9Pntmb3IoO3QhPT1yOyl0LnVwY2FzdHx8JChgRXhwZWN0ZWQgbnVsbCBvciBpbnN0YW5jZSBvZiAke3IubmFtZX0sIGdvdCBhbiBpbnN0YW5jZSBvZiAke3QubmFtZX1gKSxlPXQudXBjYXN0KGUpLHQ9dC5iYXNlQ2xhc3M7cmV0dXJuIGV9O2Z1bmN0aW9uIFFyKGUsdCl7aWYodD09PW51bGwpcmV0dXJuIHRoaXMuaXNSZWZlcmVuY2UmJiQoYG51bGwgaXMgbm90IGEgdmFsaWQgJHt0aGlzLm5hbWV9YCksMDt0LiQkfHwkKGBDYW5ub3QgcGFzcyAiJHtkdCh0KX0iIGFzIGEgJHt0aGlzLm5hbWV9YCksdC4kJC5wdHJ8fCQoYENhbm5vdCBwYXNzIGRlbGV0ZWQgb2JqZWN0IGFzIGEgcG9pbnRlciBvZiB0eXBlICR7dGhpcy5uYW1lfWApO3ZhciByPXQuJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3MsaT1zdCh0LiQkLnB0cixyLHRoaXMucmVnaXN0ZXJlZENsYXNzKTtyZXR1cm4gaX1mdW5jdGlvbiBlbihlLHQpe3ZhciByO2lmKHQ9PT1udWxsKXJldHVybiB0aGlzLmlzUmVmZXJlbmNlJiYkKGBudWxsIGlzIG5vdCBhIHZhbGlkICR7dGhpcy5uYW1lfWApLHRoaXMuaXNTbWFydFBvaW50ZXI/KHI9dGhpcy5yYXdDb25zdHJ1Y3RvcigpLGUhPT1udWxsJiZlLnB1c2godGhpcy5yYXdEZXN0cnVjdG9yLHIpLHIpOjA7KCF0fHwhdC4kJCkmJiQoYENhbm5vdCBwYXNzICIke2R0KHQpfSIgYXMgYSAke3RoaXMubmFtZX1gKSx0LiQkLnB0cnx8JChgQ2Fubm90IHBhc3MgZGVsZXRlZCBvYmplY3QgYXMgYSBwb2ludGVyIG9mIHR5cGUgJHt0aGlzLm5hbWV9YCksIXRoaXMuaXNDb25zdCYmdC4kJC5wdHJUeXBlLmlzQ29uc3QmJiQoYENhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgJHt0LiQkLnNtYXJ0UHRyVHlwZT90LiQkLnNtYXJ0UHRyVHlwZS5uYW1lOnQuJCQucHRyVHlwZS5uYW1lfSB0byBwYXJhbWV0ZXIgdHlwZSAke3RoaXMubmFtZX1gKTt2YXIgaT10LiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzO2lmKHI9c3QodC4kJC5wdHIsaSx0aGlzLnJlZ2lzdGVyZWRDbGFzcyksdGhpcy5pc1NtYXJ0UG9pbnRlcilzd2l0Y2godC4kJC5zbWFydFB0cj09PXZvaWQgMCYmJCgiUGFzc2luZyByYXcgcG9pbnRlciB0byBzbWFydCBwb2ludGVyIGlzIGlsbGVnYWwiKSx0aGlzLnNoYXJpbmdQb2xpY3kpe2Nhc2UgMDp0LiQkLnNtYXJ0UHRyVHlwZT09PXRoaXM/cj10LiQkLnNtYXJ0UHRyOiQoYENhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgJHt0LiQkLnNtYXJ0UHRyVHlwZT90LiQkLnNtYXJ0UHRyVHlwZS5uYW1lOnQuJCQucHRyVHlwZS5uYW1lfSB0byBwYXJhbWV0ZXIgdHlwZSAke3RoaXMubmFtZX1gKTticmVhaztjYXNlIDE6cj10LiQkLnNtYXJ0UHRyO2JyZWFrO2Nhc2UgMjppZih0LiQkLnNtYXJ0UHRyVHlwZT09PXRoaXMpcj10LiQkLnNtYXJ0UHRyO2Vsc2V7dmFyIF89dC5jbG9uZSgpO3I9dGhpcy5yYXdTaGFyZShyLFcudG9IYW5kbGUoKCk9Pl8uZGVsZXRlKCkpKSxlIT09bnVsbCYmZS5wdXNoKHRoaXMucmF3RGVzdHJ1Y3RvcixyKX1icmVhaztkZWZhdWx0OiQoIlVuc3VwcG9ydGluZyBzaGFyaW5nIHBvbGljeSIpfXJldHVybiByfWZ1bmN0aW9uIHRuKGUsdCl7aWYodD09PW51bGwpcmV0dXJuIHRoaXMuaXNSZWZlcmVuY2UmJiQoYG51bGwgaXMgbm90IGEgdmFsaWQgJHt0aGlzLm5hbWV9YCksMDt0LiQkfHwkKGBDYW5ub3QgcGFzcyAiJHtkdCh0KX0iIGFzIGEgJHt0aGlzLm5hbWV9YCksdC4kJC5wdHJ8fCQoYENhbm5vdCBwYXNzIGRlbGV0ZWQgb2JqZWN0IGFzIGEgcG9pbnRlciBvZiB0eXBlICR7dGhpcy5uYW1lfWApLHQuJCQucHRyVHlwZS5pc0NvbnN0JiYkKGBDYW5ub3QgY29udmVydCBhcmd1bWVudCBvZiB0eXBlICR7dC4kJC5wdHJUeXBlLm5hbWV9IHRvIHBhcmFtZXRlciB0eXBlICR7dGhpcy5uYW1lfWApO3ZhciByPXQuJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3MsaT1zdCh0LiQkLnB0cixyLHRoaXMucmVnaXN0ZXJlZENsYXNzKTtyZXR1cm4gaX12YXIgcm49KCk9PntPYmplY3QuYXNzaWduKEllLnByb3RvdHlwZSx7Z2V0UG9pbnRlZShlKXtyZXR1cm4gdGhpcy5yYXdHZXRQb2ludGVlJiYoZT10aGlzLnJhd0dldFBvaW50ZWUoZSkpLGV9LGRlc3RydWN0b3IoZSl7dmFyIHQ7KHQ9dGhpcy5yYXdEZXN0cnVjdG9yKT09bnVsbHx8dC5jYWxsKHRoaXMsZSl9LGFyZ1BhY2tBZHZhbmNlOlYscmVhZFZhbHVlRnJvbVBvaW50ZXI6Z2UsZnJvbVdpcmVUeXBlOlZyfSl9O2Z1bmN0aW9uIEllKGUsdCxyLGksXyxzLGwsZixoLGMsdSl7dGhpcy5uYW1lPWUsdGhpcy5yZWdpc3RlcmVkQ2xhc3M9dCx0aGlzLmlzUmVmZXJlbmNlPXIsdGhpcy5pc0NvbnN0PWksdGhpcy5pc1NtYXJ0UG9pbnRlcj1fLHRoaXMucG9pbnRlZVR5cGU9cyx0aGlzLnNoYXJpbmdQb2xpY3k9bCx0aGlzLnJhd0dldFBvaW50ZWU9Zix0aGlzLnJhd0NvbnN0cnVjdG9yPWgsdGhpcy5yYXdTaGFyZT1jLHRoaXMucmF3RGVzdHJ1Y3Rvcj11LCFfJiZ0LmJhc2VDbGFzcz09PXZvaWQgMD9pPyh0aGlzLnRvV2lyZVR5cGU9UXIsdGhpcy5kZXN0cnVjdG9yRnVuY3Rpb249bnVsbCk6KHRoaXMudG9XaXJlVHlwZT10bix0aGlzLmRlc3RydWN0b3JGdW5jdGlvbj1udWxsKTp0aGlzLnRvV2lyZVR5cGU9ZW59dmFyIE90PShlLHQscik9PntuLmhhc093blByb3BlcnR5KGUpfHxPZSgiUmVwbGFjaW5nIG5vbmV4aXN0ZW50IHB1YmxpYyBzeW1ib2wiKSxuW2VdLm92ZXJsb2FkVGFibGUhPT12b2lkIDAmJnIhPT12b2lkIDA/bltlXS5vdmVybG9hZFRhYmxlW3JdPXQ6KG5bZV09dCxuW2VdLmFyZ0NvdW50PXIpfSxubj0oZSx0LHIpPT57ZT1lLnJlcGxhY2UoL3AvZywiaSIpO3ZhciBpPW5bImR5bkNhbGxfIitlXTtyZXR1cm4gaSh0LC4uLnIpfSxIZT1bXSxSdCx6dD1lPT57dmFyIHQ9SGVbZV07cmV0dXJuIHR8fChlPj1IZS5sZW5ndGgmJihIZS5sZW5ndGg9ZSsxKSxIZVtlXT10PVJ0LmdldChlKSksdH0sYW49KGUsdCxyPVtdKT0+e2lmKGUuaW5jbHVkZXMoImoiKSlyZXR1cm4gbm4oZSx0LHIpO3ZhciBpPXp0KHQpKC4uLnIpO3JldHVybiBpfSxvbj0oZSx0KT0+KC4uLnIpPT5hbihlLHQsciksSj0oZSx0KT0+e2U9eihlKTtmdW5jdGlvbiByKCl7cmV0dXJuIGUuaW5jbHVkZXMoImoiKT9vbihlLHQpOnp0KHQpfXZhciBpPXIoKTtyZXR1cm4gdHlwZW9mIGkhPSJmdW5jdGlvbiImJiQoYHVua25vd24gZnVuY3Rpb24gcG9pbnRlciB3aXRoIHNpZ25hdHVyZSAke2V9OiAke3R9YCksaX0sX249KGUsdCk9Pnt2YXIgcj1rZSh0LGZ1bmN0aW9uKGkpe3RoaXMubmFtZT10LHRoaXMubWVzc2FnZT1pO3ZhciBfPW5ldyBFcnJvcihpKS5zdGFjaztfIT09dm9pZCAwJiYodGhpcy5zdGFjaz10aGlzLnRvU3RyaW5nKCkrYApgK18ucmVwbGFjZSgvXkVycm9yKDpbXlxuXSopP1xuLywiIikpfSk7cmV0dXJuIHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlPT09dm9pZCAwP3RoaXMubmFtZTpgJHt0aGlzLm5hbWV9OiAke3RoaXMubWVzc2FnZX1gfSxyfSxJdCxIdD1lPT57dmFyIHQ9eWkoZSkscj16KHQpO3JldHVybiBlZSh0KSxyfSxXdD0oZSx0KT0+e3ZhciByPVtdLGk9e307ZnVuY3Rpb24gXyhzKXtpZighaVtzXSYmIW9lW3NdKXtpZihqZVtzXSl7amVbc10uZm9yRWFjaChfKTtyZXR1cm59ci5wdXNoKHMpLGlbc109ITB9fXRocm93IHQuZm9yRWFjaChfKSxuZXcgSXQoYCR7ZX06IGArci5tYXAoSHQpLmpvaW4oWyIsICJdKSl9LHNuPShlLHQscixpLF8scyxsLGYsaCxjLHUsdixwKT0+e3U9eih1KSxzPUooXyxzKSxmJiYoZj1KKGwsZikpLGMmJihjPUooaCxjKSkscD1KKHYscCk7dmFyIGc9S3IodSk7X3QoZyxmdW5jdGlvbigpe1d0KGBDYW5ub3QgY29uc3RydWN0ICR7dX0gZHVlIHRvIHVuYm91bmQgdHlwZXNgLFtpXSl9KSxudChbZSx0LHJdLGk/W2ldOltdLHk9Pnt2YXIgQTt5PXlbMF07dmFyIFQsRDtpPyhUPXkucmVnaXN0ZXJlZENsYXNzLEQ9VC5pbnN0YW5jZVByb3RvdHlwZSk6RD16ZS5wcm90b3R5cGU7dmFyIGQ9a2UodSxmdW5jdGlvbiguLi5tdCl7aWYoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpIT09bSl0aHJvdyBuZXcgdmUoIlVzZSAnbmV3JyB0byBjb25zdHJ1Y3QgIit1KTtpZihrLmNvbnN0cnVjdG9yX2JvZHk9PT12b2lkIDApdGhyb3cgbmV3IHZlKHUrIiBoYXMgbm8gYWNjZXNzaWJsZSBjb25zdHJ1Y3RvciIpO3ZhciBHdD1rLmNvbnN0cnVjdG9yX2JvZHlbbXQubGVuZ3RoXTtpZihHdD09PXZvaWQgMCl0aHJvdyBuZXcgdmUoYFRyaWVkIHRvIGludm9rZSBjdG9yIG9mICR7dX0gd2l0aCBpbnZhbGlkIG51bWJlciBvZiBwYXJhbWV0ZXJzICgke210Lmxlbmd0aH0pIC0gZXhwZWN0ZWQgKCR7T2JqZWN0LmtleXMoay5jb25zdHJ1Y3Rvcl9ib2R5KS50b1N0cmluZygpfSkgcGFyYW1ldGVycyBpbnN0ZWFkIWApO3JldHVybiBHdC5hcHBseSh0aGlzLG10KX0pLG09T2JqZWN0LmNyZWF0ZShELHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZH19KTtkLnByb3RvdHlwZT1tO3ZhciBrPW5ldyBacih1LGQsbSxwLFQscyxmLGMpO2suYmFzZUNsYXNzJiYoKEE9ay5iYXNlQ2xhc3MpLl9fZGVyaXZlZENsYXNzZXMhPW51bGx8fChBLl9fZGVyaXZlZENsYXNzZXM9W10pLGsuYmFzZUNsYXNzLl9fZGVyaXZlZENsYXNzZXMucHVzaChrKSk7dmFyIFA9bmV3IEllKHUsaywhMCwhMSwhMSksSD1uZXcgSWUodSsiKiIsaywhMSwhMSwhMSksRj1uZXcgSWUodSsiIGNvbnN0KiIsaywhMSwhMCwhMSk7cmV0dXJuIGp0W2VdPXtwb2ludGVyVHlwZTpILGNvbnN0UG9pbnRlclR5cGU6Rn0sT3QoZyxkKSxbUCxILEZdfSl9LGx0PVtdLEs9W10sZnQ9ZT0+e2U+OSYmLS1LW2UrMV09PT0wJiYoS1tlXT12b2lkIDAsbHQucHVzaChlKSl9LGxuPSgpPT5LLmxlbmd0aC8yLTUtbHQubGVuZ3RoLGZuPSgpPT57Sy5wdXNoKDAsMSx2b2lkIDAsMSxudWxsLDEsITAsMSwhMSwxKSxuLmNvdW50X2VtdmFsX2hhbmRsZXM9bG59LFc9e3RvVmFsdWU6ZT0+KGV8fCQoIkNhbm5vdCB1c2UgZGVsZXRlZCB2YWwuIGhhbmRsZSA9ICIrZSksS1tlXSksdG9IYW5kbGU6ZT0+e3N3aXRjaChlKXtjYXNlIHZvaWQgMDpyZXR1cm4gMjtjYXNlIG51bGw6cmV0dXJuIDQ7Y2FzZSEwOnJldHVybiA2O2Nhc2UhMTpyZXR1cm4gODtkZWZhdWx0Ontjb25zdCB0PWx0LnBvcCgpfHxLLmxlbmd0aDtyZXR1cm4gS1t0XT1lLEtbdCsxXT0xLHR9fX19LGhuPXtuYW1lOiJlbXNjcmlwdGVuOjp2YWwiLGZyb21XaXJlVHlwZTplPT57dmFyIHQ9Vy50b1ZhbHVlKGUpO3JldHVybiBmdChlKSx0fSx0b1dpcmVUeXBlOihlLHQpPT5XLnRvSGFuZGxlKHQpLGFyZ1BhY2tBZHZhbmNlOlYscmVhZFZhbHVlRnJvbVBvaW50ZXI6Z2UsZGVzdHJ1Y3RvckZ1bmN0aW9uOm51bGx9LGRuPWU9PkwoZSxobiksY249KGUsdCxyKT0+e3N3aXRjaCh0KXtjYXNlIDE6cmV0dXJuIHI/ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKE1baV0pfTpmdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoT1tpXSl9O2Nhc2UgMjpyZXR1cm4gcj9mdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoWFtpPj4xXSl9OmZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZSh1ZVtpPj4xXSl9O2Nhc2UgNDpyZXR1cm4gcj9mdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUod1tpPj4yXSl9OmZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZSh4W2k+PjJdKX07ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKGBpbnZhbGlkIGludGVnZXIgd2lkdGggKCR7dH0pOiAke2V9YCl9fSx1bj0oZSx0LHIsaSk9Pnt0PXoodCk7ZnVuY3Rpb24gXygpe31fLnZhbHVlcz17fSxMKGUse25hbWU6dCxjb25zdHJ1Y3RvcjpfLGZyb21XaXJlVHlwZTpmdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci52YWx1ZXNbc119LHRvV2lyZVR5cGU6KHMsbCk9PmwudmFsdWUsYXJnUGFja0FkdmFuY2U6VixyZWFkVmFsdWVGcm9tUG9pbnRlcjpjbih0LHIsaSksZGVzdHJ1Y3RvckZ1bmN0aW9uOm51bGx9KSxfdCh0LF8pfSxodD0oZSx0KT0+e3ZhciByPW9lW2VdO3JldHVybiByPT09dm9pZCAwJiYkKGAke3R9IGhhcyB1bmtub3duIHR5cGUgJHtIdChlKX1gKSxyfSxtbj0oZSx0LHIpPT57dmFyIGk9aHQoZSwiZW51bSIpO3Q9eih0KTt2YXIgXz1pLmNvbnN0cnVjdG9yLHM9T2JqZWN0LmNyZWF0ZShpLmNvbnN0cnVjdG9yLnByb3RvdHlwZSx7dmFsdWU6e3ZhbHVlOnJ9LGNvbnN0cnVjdG9yOnt2YWx1ZTprZShgJHtpLm5hbWV9XyR7dH1gLGZ1bmN0aW9uKCl7fSl9fSk7Xy52YWx1ZXNbcl09cyxfW3RdPXN9LGR0PWU9PntpZihlPT09bnVsbClyZXR1cm4ibnVsbCI7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIHQ9PT0ib2JqZWN0Inx8dD09PSJhcnJheSJ8fHQ9PT0iZnVuY3Rpb24iP2UudG9TdHJpbmcoKToiIitlfSxwbj0oZSx0KT0+e3N3aXRjaCh0KXtjYXNlIDQ6cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZSh5dFtyPj4yXSl9O2Nhc2UgODpyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKHd0W3I+PjNdKX07ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKGBpbnZhbGlkIGZsb2F0IHdpZHRoICgke3R9KTogJHtlfWApfX0sZ249KGUsdCxyKT0+e3Q9eih0KSxMKGUse25hbWU6dCxmcm9tV2lyZVR5cGU6aT0+aSx0b1dpcmVUeXBlOihpLF8pPT5fLGFyZ1BhY2tBZHZhbmNlOlYscmVhZFZhbHVlRnJvbVBvaW50ZXI6cG4odCxyKSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pfTtmdW5jdGlvbiB2bihlKXtmb3IodmFyIHQ9MTt0PGUubGVuZ3RoOysrdClpZihlW3RdIT09bnVsbCYmZVt0XS5kZXN0cnVjdG9yRnVuY3Rpb249PT12b2lkIDApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24geW4oZSx0LHIsaSxfLHMpe3ZhciBsPXQubGVuZ3RoO2w8MiYmJCgiYXJnVHlwZXMgYXJyYXkgc2l6ZSBtaXNtYXRjaCEgTXVzdCBhdCBsZWFzdCBnZXQgcmV0dXJuIHZhbHVlIGFuZCAndGhpcycgdHlwZXMhIiksdFsxXTt2YXIgZj12bih0KSxoPXRbMF0ubmFtZSE9PSJ2b2lkIixjPWwtMix1PW5ldyBBcnJheShjKSx2PVtdLHA9W10sZz1mdW5jdGlvbiguLi55KXt5Lmxlbmd0aCE9PWMmJiQoYGZ1bmN0aW9uICR7ZX0gY2FsbGVkIHdpdGggJHt5Lmxlbmd0aH0gYXJndW1lbnRzLCBleHBlY3RlZCAke2N9YCkscC5sZW5ndGg9MDt2YXIgQTt2Lmxlbmd0aD0xLHZbMF09Xztmb3IodmFyIFQ9MDtUPGM7KytUKXVbVF09dFtUKzJdLnRvV2lyZVR5cGUocCx5W1RdKSx2LnB1c2godVtUXSk7dmFyIEQ9aSguLi52KTtmdW5jdGlvbiBkKG0pe2lmKGYpcnQocCk7ZWxzZSBmb3IodmFyIGs9MjtrPHQubGVuZ3RoO2srKyl7dmFyIFA9az09PTE/QTp1W2stMl07dFtrXS5kZXN0cnVjdG9yRnVuY3Rpb24hPT1udWxsJiZ0W2tdLmRlc3RydWN0b3JGdW5jdGlvbihQKX1pZihoKXJldHVybiB0WzBdLmZyb21XaXJlVHlwZShtKX1yZXR1cm4gZChEKX07cmV0dXJuIGtlKGUsZyl9dmFyIHduPShlLHQpPT57Zm9yKHZhciByPVtdLGk9MDtpPGU7aSsrKXIucHVzaCh4W3QraSo0Pj4yXSk7cmV0dXJuIHJ9LGJuPWU9PntlPWUudHJpbSgpO2NvbnN0IHQ9ZS5pbmRleE9mKCIoIik7cmV0dXJuIHQhPT0tMT9lLnN1YnN0cigwLHQpOmV9LEVuPShlLHQscixpLF8scyxsKT0+e3ZhciBmPXduKHQscik7ZT16KGUpLGU9Ym4oZSksXz1KKGksXyksX3QoZSxmdW5jdGlvbigpe1d0KGBDYW5ub3QgY2FsbCAke2V9IGR1ZSB0byB1bmJvdW5kIHR5cGVzYCxmKX0sdC0xKSxudChbXSxmLGg9Pnt2YXIgYz1baFswXSxudWxsXS5jb25jYXQoaC5zbGljZSgxKSk7cmV0dXJuIE90KGUseW4oZSxjLG51bGwsXyxzKSx0LTEpLFtdfSl9LGtuPShlLHQscik9Pntzd2l0Y2godCl7Y2FzZSAxOnJldHVybiByP2k9Pk1baV06aT0+T1tpXTtjYXNlIDI6cmV0dXJuIHI/aT0+WFtpPj4xXTppPT51ZVtpPj4xXTtjYXNlIDQ6cmV0dXJuIHI/aT0+d1tpPj4yXTppPT54W2k+PjJdO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcihgaW52YWxpZCBpbnRlZ2VyIHdpZHRoICgke3R9KTogJHtlfWApfX0seG49KGUsdCxyLGksXyk9Pnt0PXoodCk7dmFyIHM9dT0+dTtpZihpPT09MCl7dmFyIGw9MzItOCpyO3M9dT0+dTw8bD4+Pmx9dmFyIGY9dC5pbmNsdWRlcygidW5zaWduZWQiKSxoPSh1LHYpPT57fSxjO2Y/Yz1mdW5jdGlvbih1LHYpe3JldHVybiBoKHYsdGhpcy5uYW1lKSx2Pj4+MH06Yz1mdW5jdGlvbih1LHYpe3JldHVybiBoKHYsdGhpcy5uYW1lKSx2fSxMKGUse25hbWU6dCxmcm9tV2lyZVR5cGU6cyx0b1dpcmVUeXBlOmMsYXJnUGFja0FkdmFuY2U6VixyZWFkVmFsdWVGcm9tUG9pbnRlcjprbih0LHIsaSE9PTApLGRlc3RydWN0b3JGdW5jdGlvbjpudWxsfSl9LCRuPShlLHQscik9Pnt2YXIgaT1bSW50OEFycmF5LFVpbnQ4QXJyYXksSW50MTZBcnJheSxVaW50MTZBcnJheSxJbnQzMkFycmF5LFVpbnQzMkFycmF5LEZsb2F0MzJBcnJheSxGbG9hdDY0QXJyYXldLF89aVt0XTtmdW5jdGlvbiBzKGwpe3ZhciBmPXhbbD4+Ml0saD14W2wrND4+Ml07cmV0dXJuIG5ldyBfKE0uYnVmZmVyLGgsZil9cj16KHIpLEwoZSx7bmFtZTpyLGZyb21XaXJlVHlwZTpzLGFyZ1BhY2tBZHZhbmNlOlYscmVhZFZhbHVlRnJvbVBvaW50ZXI6c30se2lnbm9yZUR1cGxpY2F0ZVJlZ2lzdHJhdGlvbnM6ITB9KX0sUG49KGUsdCxyKT0+ZXQoZSxPLHQsciksQ249KGUsdCk9Pnt0PXoodCk7dmFyIHI9dD09PSJzdGQ6OnN0cmluZyI7TChlLHtuYW1lOnQsZnJvbVdpcmVUeXBlKGkpe3ZhciBfPXhbaT4+Ml0scz1pKzQsbDtpZihyKWZvcih2YXIgZj1zLGg9MDtoPD1fOysraCl7dmFyIGM9cytoO2lmKGg9PV98fE9bY109PTApe3ZhciB1PWMtZix2PWllKGYsdSk7bD09PXZvaWQgMD9sPXY6KGwrPSJcMCIsbCs9diksZj1jKzF9fWVsc2V7Zm9yKHZhciBwPW5ldyBBcnJheShfKSxoPTA7aDxfOysraClwW2hdPVN0cmluZy5mcm9tQ2hhckNvZGUoT1tzK2hdKTtsPXAuam9pbigiIil9cmV0dXJuIGVlKGkpLGx9LHRvV2lyZVR5cGUoaSxfKXtfIGluc3RhbmNlb2YgQXJyYXlCdWZmZXImJihfPW5ldyBVaW50OEFycmF5KF8pKTt2YXIgcyxsPXR5cGVvZiBfPT0ic3RyaW5nIjtsfHxfIGluc3RhbmNlb2YgVWludDhBcnJheXx8XyBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5fHxfIGluc3RhbmNlb2YgSW50OEFycmF5fHwkKCJDYW5ub3QgcGFzcyBub24tc3RyaW5nIHRvIHN0ZDo6c3RyaW5nIiksciYmbD9zPVFlKF8pOnM9Xy5sZW5ndGg7dmFyIGY9THQoNCtzKzEpLGg9Zis0O2lmKHhbZj4+Ml09cyxyJiZsKVBuKF8saCxzKzEpO2Vsc2UgaWYobClmb3IodmFyIGM9MDtjPHM7KytjKXt2YXIgdT1fLmNoYXJDb2RlQXQoYyk7dT4yNTUmJihlZShoKSwkKCJTdHJpbmcgaGFzIFVURi0xNiBjb2RlIHVuaXRzIHRoYXQgZG8gbm90IGZpdCBpbiA4IGJpdHMiKSksT1toK2NdPXV9ZWxzZSBmb3IodmFyIGM9MDtjPHM7KytjKU9baCtjXT1fW2NdO3JldHVybiBpIT09bnVsbCYmaS5wdXNoKGVlLGYpLGZ9LGFyZ1BhY2tBZHZhbmNlOlYscmVhZFZhbHVlRnJvbVBvaW50ZXI6Z2UsZGVzdHJ1Y3RvckZ1bmN0aW9uKGkpe2VlKGkpfX0pfSxxdD10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2RlcigidXRmLTE2bGUiKTp2b2lkIDAsVG49KGUsdCk9Pntmb3IodmFyIHI9ZSxpPXI+PjEsXz1pK3QvMjshKGk+PV8pJiZ1ZVtpXTspKytpO2lmKHI9aTw8MSxyLWU+MzImJnF0KXJldHVybiBxdC5kZWNvZGUoTy5zdWJhcnJheShlLHIpKTtmb3IodmFyIHM9IiIsbD0wOyEobD49dC8yKTsrK2wpe3ZhciBmPVhbZStsKjI+PjFdO2lmKGY9PTApYnJlYWs7cys9U3RyaW5nLmZyb21DaGFyQ29kZShmKX1yZXR1cm4gc30sRG49KGUsdCxyKT0+e2lmKHIhPW51bGx8fChyPTIxNDc0ODM2NDcpLHI8MilyZXR1cm4gMDtyLT0yO2Zvcih2YXIgaT10LF89cjxlLmxlbmd0aCoyP3IvMjplLmxlbmd0aCxzPTA7czxfOysrcyl7dmFyIGw9ZS5jaGFyQ29kZUF0KHMpO1hbdD4+MV09bCx0Kz0yfXJldHVybiBYW3Q+PjFdPTAsdC1pfSxGbj1lPT5lLmxlbmd0aCoyLEFuPShlLHQpPT57Zm9yKHZhciByPTAsaT0iIjshKHI+PXQvNCk7KXt2YXIgXz13W2Urcio0Pj4yXTtpZihfPT0wKWJyZWFrO2lmKCsrcixfPj02NTUzNil7dmFyIHM9Xy02NTUzNjtpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fHM+PjEwLDU2MzIwfHMmMTAyMyl9ZWxzZSBpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKF8pfXJldHVybiBpfSxTbj0oZSx0LHIpPT57aWYociE9bnVsbHx8KHI9MjE0NzQ4MzY0Nykscjw0KXJldHVybiAwO2Zvcih2YXIgaT10LF89aStyLTQscz0wO3M8ZS5sZW5ndGg7KytzKXt2YXIgbD1lLmNoYXJDb2RlQXQocyk7aWYobD49NTUyOTYmJmw8PTU3MzQzKXt2YXIgZj1lLmNoYXJDb2RlQXQoKytzKTtsPTY1NTM2KygobCYxMDIzKTw8MTApfGYmMTAyM31pZih3W3Q+PjJdPWwsdCs9NCx0KzQ+XylicmVha31yZXR1cm4gd1t0Pj4yXT0wLHQtaX0sTW49ZT0+e2Zvcih2YXIgdD0wLHI9MDtyPGUubGVuZ3RoOysrcil7dmFyIGk9ZS5jaGFyQ29kZUF0KHIpO2k+PTU1Mjk2JiZpPD01NzM0MyYmKytyLHQrPTR9cmV0dXJuIHR9LGpuPShlLHQscik9PntyPXoocik7dmFyIGksXyxzLGw7dD09PTI/KGk9VG4sXz1EbixsPUZuLHM9Zj0+dWVbZj4+MV0pOnQ9PT00JiYoaT1BbixfPVNuLGw9TW4scz1mPT54W2Y+PjJdKSxMKGUse25hbWU6cixmcm9tV2lyZVR5cGU6Zj0+e2Zvcih2YXIgaD14W2Y+PjJdLGMsdT1mKzQsdj0wO3Y8PWg7Kyt2KXt2YXIgcD1mKzQrdip0O2lmKHY9PWh8fHMocCk9PTApe3ZhciBnPXAtdSx5PWkodSxnKTtjPT09dm9pZCAwP2M9eTooYys9IlwwIixjKz15KSx1PXArdH19cmV0dXJuIGVlKGYpLGN9LHRvV2lyZVR5cGU6KGYsaCk9Pnt0eXBlb2YgaCE9InN0cmluZyImJiQoYENhbm5vdCBwYXNzIG5vbi1zdHJpbmcgdG8gQysrIHN0cmluZyB0eXBlICR7cn1gKTt2YXIgYz1sKGgpLHU9THQoNCtjK3QpO3JldHVybiB4W3U+PjJdPWMvdCxfKGgsdSs0LGMrdCksZiE9PW51bGwmJmYucHVzaChlZSx1KSx1fSxhcmdQYWNrQWR2YW5jZTpWLHJlYWRWYWx1ZUZyb21Qb2ludGVyOmdlLGRlc3RydWN0b3JGdW5jdGlvbihmKXtlZShmKX19KX0sT249KGUsdCxyLGksXyxzKT0+e01lW2VdPXtuYW1lOnoodCkscmF3Q29uc3RydWN0b3I6SihyLGkpLHJhd0Rlc3RydWN0b3I6SihfLHMpLGZpZWxkczpbXX19LFJuPShlLHQscixpLF8scyxsLGYsaCxjKT0+e01lW2VdLmZpZWxkcy5wdXNoKHtmaWVsZE5hbWU6eih0KSxnZXR0ZXJSZXR1cm5UeXBlOnIsZ2V0dGVyOkooaSxfKSxnZXR0ZXJDb250ZXh0OnMsc2V0dGVyQXJndW1lbnRUeXBlOmwsc2V0dGVyOkooZixoKSxzZXR0ZXJDb250ZXh0OmN9KX0sem49KGUsdCk9Pnt0PXoodCksTChlLHtpc1ZvaWQ6ITAsbmFtZTp0LGFyZ1BhY2tBZHZhbmNlOjAsZnJvbVdpcmVUeXBlOigpPT57fSx0b1dpcmVUeXBlOihyLGkpPT57fX0pfSxJbj0oZSx0LHIpPT5PLmNvcHlXaXRoaW4oZSx0LHQrciksSG49e30sTnQ9ZT0+e3ZhciB0PUhuW2VdO3JldHVybiB0PT09dm9pZCAwP3ooZSk6dH0sY3Q9W10sV249KGUsdCxyLGksXyk9PihlPWN0W2VdLHQ9Vy50b1ZhbHVlKHQpLHI9TnQociksZSh0LHRbcl0saSxfKSkscW49ZT0+e3ZhciB0PWN0Lmxlbmd0aDtyZXR1cm4gY3QucHVzaChlKSx0fSxObj0oZSx0KT0+e2Zvcih2YXIgcj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpcltpXT1odCh4W3QraSo0Pj4yXSwicGFyYW1ldGVyICIraSk7cmV0dXJuIHJ9LEJuPVJlZmxlY3QuY29uc3RydWN0LFVuPShlLHQscik9Pnt2YXIgaT1bXSxfPWUudG9XaXJlVHlwZShpLHIpO3JldHVybiBpLmxlbmd0aCYmKHhbdD4+Ml09Vy50b0hhbmRsZShpKSksX30sTG49KGUsdCxyKT0+e3ZhciBpPU5uKGUsdCksXz1pLnNoaWZ0KCk7ZS0tO3ZhciBzPW5ldyBBcnJheShlKSxsPShoLGMsdSx2KT0+e2Zvcih2YXIgcD0wLGc9MDtnPGU7KytnKXNbZ109aVtnXS5yZWFkVmFsdWVGcm9tUG9pbnRlcih2K3ApLHArPWlbZ10uYXJnUGFja0FkdmFuY2U7dmFyIHk9cj09PTE/Qm4oYyxzKTpjLmFwcGx5KGgscyk7cmV0dXJuIFVuKF8sdSx5KX0sZj1gbWV0aG9kQ2FsbGVyPCgke2kubWFwKGg9PmgubmFtZSkuam9pbigiLCAiKX0pID0+ICR7Xy5uYW1lfT5gO3JldHVybiBxbihrZShmLGwpKX0sVm49ZT0+e2U+OSYmKEtbZSsxXSs9MSl9LFluPSgpPT5XLnRvSGFuZGxlKFtdKSxYbj1lPT5XLnRvSGFuZGxlKE50KGUpKSxHbj0oKT0+Vy50b0hhbmRsZSh7fSksSm49ZT0+e3ZhciB0PVcudG9WYWx1ZShlKTtydCh0KSxmdChlKX0sS249KGUsdCxyKT0+e2U9Vy50b1ZhbHVlKGUpLHQ9Vy50b1ZhbHVlKHQpLHI9Vy50b1ZhbHVlKHIpLGVbdF09cn0sWm49KGUsdCk9PntlPWh0KGUsIl9lbXZhbF90YWtlX3ZhbHVlIik7dmFyIHI9ZS5yZWFkVmFsdWVGcm9tUG9pbnRlcih0KTtyZXR1cm4gVy50b0hhbmRsZShyKX0sUW49KCk9PjIxNDc0ODM2NDgsZWk9ZT0+e3ZhciB0PVRlLmJ1ZmZlcixyPShlLXQuYnl0ZUxlbmd0aCs2NTUzNSkvNjU1MzY7dHJ5e3JldHVybiBUZS5ncm93KHIpLGJ0KCksMX1jYXRjaHt9fSx0aT1lPT57dmFyIHQ9Ty5sZW5ndGg7ZT4+Pj0wO3ZhciByPVFuKCk7aWYoZT5yKXJldHVybiExO2Zvcih2YXIgaT0oaCxjKT0+aCsoYy1oJWMpJWMsXz0xO188PTQ7Xyo9Mil7dmFyIHM9dCooMSsuMi9fKTtzPU1hdGgubWluKHMsZSsxMDA2NjMyOTYpO3ZhciBsPU1hdGgubWluKHIsaShNYXRoLm1heChlLHMpLDY1NTM2KSksZj1laShsKTtpZihmKXJldHVybiEwfXJldHVybiExfSx1dD17fSxyaT0oKT0+VWV8fCIuL3RoaXMucHJvZ3JhbSIseGU9KCk9PntpZigheGUuc3RyaW5ncyl7dmFyIGU9KHR5cGVvZiBuYXZpZ2F0b3I9PSJvYmplY3QiJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdfHwiQyIpLnJlcGxhY2UoIi0iLCJfIikrIi5VVEYtOCIsdD17VVNFUjoid2ViX3VzZXIiLExPR05BTUU6IndlYl91c2VyIixQQVRIOiIvIixQV0Q6Ii8iLEhPTUU6Ii9ob21lL3dlYl91c2VyIixMQU5HOmUsXzpyaSgpfTtmb3IodmFyIHIgaW4gdXQpdXRbcl09PT12b2lkIDA/ZGVsZXRlIHRbcl06dFtyXT11dFtyXTt2YXIgaT1bXTtmb3IodmFyIHIgaW4gdClpLnB1c2goYCR7cn09JHt0W3JdfWApO3hlLnN0cmluZ3M9aX1yZXR1cm4geGUuc3RyaW5nc30sbmk9KGUsdCk9Pntmb3IodmFyIHI9MDtyPGUubGVuZ3RoOysrcilNW3QrK109ZS5jaGFyQ29kZUF0KHIpO01bdF09MH0saWk9KGUsdCk9Pnt2YXIgcj0wO3JldHVybiB4ZSgpLmZvckVhY2goKGksXyk9Pnt2YXIgcz10K3I7eFtlK18qND4+Ml09cyxuaShpLHMpLHIrPWkubGVuZ3RoKzF9KSwwfSxhaT0oZSx0KT0+e3ZhciByPXhlKCk7eFtlPj4yXT1yLmxlbmd0aDt2YXIgaT0wO3JldHVybiByLmZvckVhY2goXz0+aSs9Xy5sZW5ndGgrMSkseFt0Pj4yXT1pLDB9O2Z1bmN0aW9uIG9pKGUpe3RyeXt2YXIgdD1SLmdldFN0cmVhbUZyb21GRChlKTtyZXR1cm4gby5jbG9zZSh0KSwwfWNhdGNoKHIpe2lmKHR5cGVvZiBvPiJ1Inx8ci5uYW1lIT09IkVycm5vRXJyb3IiKXRocm93IHI7cmV0dXJuIHIuZXJybm99fXZhciBfaT0oZSx0LHIsaSk9Pntmb3IodmFyIF89MCxzPTA7czxyO3MrKyl7dmFyIGw9eFt0Pj4yXSxmPXhbdCs0Pj4yXTt0Kz04O3ZhciBoPW8ucmVhZChlLE0sbCxmLGkpO2lmKGg8MClyZXR1cm4tMTtpZihfKz1oLGg8ZilicmVha31yZXR1cm4gX307ZnVuY3Rpb24gc2koZSx0LHIsaSl7dHJ5e3ZhciBfPVIuZ2V0U3RyZWFtRnJvbUZEKGUpLHM9X2koXyx0LHIpO3JldHVybiB4W2k+PjJdPXMsMH1jYXRjaChsKXtpZih0eXBlb2Ygbz4idSJ8fGwubmFtZSE9PSJFcnJub0Vycm9yIil0aHJvdyBsO3JldHVybiBsLmVycm5vfX12YXIgbGk9KGUsdCk9PnQrMjA5NzE1Mj4+PjA8NDE5NDMwNS0hIWU/KGU+Pj4wKSt0KjQyOTQ5NjcyOTY6TmFOO2Z1bmN0aW9uIGZpKGUsdCxyLGksXyl7dmFyIHM9bGkodCxyKTt0cnl7aWYoaXNOYU4ocykpcmV0dXJuIDYxO3ZhciBsPVIuZ2V0U3RyZWFtRnJvbUZEKGUpO3JldHVybiBvLmxsc2VlayhsLHMsaSksaj1bbC5wb3NpdGlvbj4+PjAsKEU9bC5wb3NpdGlvbiwrTWF0aC5hYnMoRSk+PTE/RT4wPytNYXRoLmZsb29yKEUvNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoRS0rKH5+RT4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLHdbXz4+Ml09alswXSx3W18rND4+Ml09alsxXSxsLmdldGRlbnRzJiZzPT09MCYmaT09PTAmJihsLmdldGRlbnRzPW51bGwpLDB9Y2F0Y2goZil7aWYodHlwZW9mIG8+InUifHxmLm5hbWUhPT0iRXJybm9FcnJvciIpdGhyb3cgZjtyZXR1cm4gZi5lcnJub319dmFyIGhpPShlLHQscixpKT0+e2Zvcih2YXIgXz0wLHM9MDtzPHI7cysrKXt2YXIgbD14W3Q+PjJdLGY9eFt0KzQ+PjJdO3QrPTg7dmFyIGg9by53cml0ZShlLE0sbCxmLGkpO2lmKGg8MClyZXR1cm4tMTtfKz1ofXJldHVybiBffTtmdW5jdGlvbiBkaShlLHQscixpKXt0cnl7dmFyIF89Ui5nZXRTdHJlYW1Gcm9tRkQoZSkscz1oaShfLHQscik7cmV0dXJuIHhbaT4+Ml09cywwfWNhdGNoKGwpe2lmKHR5cGVvZiBvPiJ1Inx8bC5uYW1lIT09IkVycm5vRXJyb3IiKXRocm93IGw7cmV0dXJuIGwuZXJybm99fXZhciBXZT1lPT5lJTQ9PT0wJiYoZSUxMDAhPT0wfHxlJTQwMD09PTApLGNpPShlLHQpPT57Zm9yKHZhciByPTAsaT0wO2k8PXQ7cis9ZVtpKytdKTtyZXR1cm4gcn0sQnQ9WzMxLDI5LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxVdD1bMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLHVpPShlLHQpPT57Zm9yKHZhciByPW5ldyBEYXRlKGUuZ2V0VGltZSgpKTt0PjA7KXt2YXIgaT1XZShyLmdldEZ1bGxZZWFyKCkpLF89ci5nZXRNb250aCgpLHM9KGk/QnQ6VXQpW19dO2lmKHQ+cy1yLmdldERhdGUoKSl0LT1zLXIuZ2V0RGF0ZSgpKzEsci5zZXREYXRlKDEpLF88MTE/ci5zZXRNb250aChfKzEpOihyLnNldE1vbnRoKDApLHIuc2V0RnVsbFllYXIoci5nZXRGdWxsWWVhcigpKzEpKTtlbHNlIHJldHVybiByLnNldERhdGUoci5nZXREYXRlKCkrdCkscn1yZXR1cm4gcn0sbWk9KGUsdCk9PntNLnNldChlLHQpfSxwaT0oZSx0LHIsaSk9Pnt2YXIgXz14W2krNDA+PjJdLHM9e3RtX3NlYzp3W2k+PjJdLHRtX21pbjp3W2krND4+Ml0sdG1faG91cjp3W2krOD4+Ml0sdG1fbWRheTp3W2krMTI+PjJdLHRtX21vbjp3W2krMTY+PjJdLHRtX3llYXI6d1tpKzIwPj4yXSx0bV93ZGF5OndbaSsyND4+Ml0sdG1feWRheTp3W2krMjg+PjJdLHRtX2lzZHN0OndbaSszMj4+Ml0sdG1fZ210b2ZmOndbaSszNj4+Ml0sdG1fem9uZTpfP2llKF8pOiIifSxsPWllKHIpLGY9eyIlYyI6IiVhICViICVkICVIOiVNOiVTICVZIiwiJUQiOiIlbS8lZC8leSIsIiVGIjoiJVktJW0tJWQiLCIlaCI6IiViIiwiJXIiOiIlSTolTTolUyAlcCIsIiVSIjoiJUg6JU0iLCIlVCI6IiVIOiVNOiVTIiwiJXgiOiIlbS8lZC8leSIsIiVYIjoiJUg6JU06JVMiLCIlRWMiOiIlYyIsIiVFQyI6IiVDIiwiJUV4IjoiJW0vJWQvJXkiLCIlRVgiOiIlSDolTTolUyIsIiVFeSI6IiV5IiwiJUVZIjoiJVkiLCIlT2QiOiIlZCIsIiVPZSI6IiVlIiwiJU9IIjoiJUgiLCIlT0kiOiIlSSIsIiVPbSI6IiVtIiwiJU9NIjoiJU0iLCIlT1MiOiIlUyIsIiVPdSI6IiV1IiwiJU9VIjoiJVUiLCIlT1YiOiIlViIsIiVPdyI6IiV3IiwiJU9XIjoiJVciLCIlT3kiOiIleSJ9O2Zvcih2YXIgaCBpbiBmKWw9bC5yZXBsYWNlKG5ldyBSZWdFeHAoaCwiZyIpLGZbaF0pO3ZhciBjPVsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSx1PVsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXTtmdW5jdGlvbiB2KGQsbSxrKXtmb3IodmFyIFA9dHlwZW9mIGQ9PSJudW1iZXIiP2QudG9TdHJpbmcoKTpkfHwiIjtQLmxlbmd0aDxtOylQPWtbMF0rUDtyZXR1cm4gUH1mdW5jdGlvbiBwKGQsbSl7cmV0dXJuIHYoZCxtLCIwIil9ZnVuY3Rpb24gZyhkLG0pe2Z1bmN0aW9uIGsoSCl7cmV0dXJuIEg8MD8tMTpIPjA/MTowfXZhciBQO3JldHVybihQPWsoZC5nZXRGdWxsWWVhcigpLW0uZ2V0RnVsbFllYXIoKSkpPT09MCYmKFA9ayhkLmdldE1vbnRoKCktbS5nZXRNb250aCgpKSk9PT0wJiYoUD1rKGQuZ2V0RGF0ZSgpLW0uZ2V0RGF0ZSgpKSksUH1mdW5jdGlvbiB5KGQpe3N3aXRjaChkLmdldERheSgpKXtjYXNlIDA6cmV0dXJuIG5ldyBEYXRlKGQuZ2V0RnVsbFllYXIoKS0xLDExLDI5KTtjYXNlIDE6cmV0dXJuIGQ7Y2FzZSAyOnJldHVybiBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksMCwzKTtjYXNlIDM6cmV0dXJuIG5ldyBEYXRlKGQuZ2V0RnVsbFllYXIoKSwwLDIpO2Nhc2UgNDpyZXR1cm4gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLDAsMSk7Y2FzZSA1OnJldHVybiBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCktMSwxMSwzMSk7Y2FzZSA2OnJldHVybiBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCktMSwxMSwzMCl9fWZ1bmN0aW9uIEEoZCl7dmFyIG09dWkobmV3IERhdGUoZC50bV95ZWFyKzE5MDAsMCwxKSxkLnRtX3lkYXkpLGs9bmV3IERhdGUobS5nZXRGdWxsWWVhcigpLDAsNCksUD1uZXcgRGF0ZShtLmdldEZ1bGxZZWFyKCkrMSwwLDQpLEg9eShrKSxGPXkoUCk7cmV0dXJuIGcoSCxtKTw9MD9nKEYsbSk8PTA/bS5nZXRGdWxsWWVhcigpKzE6bS5nZXRGdWxsWWVhcigpOm0uZ2V0RnVsbFllYXIoKS0xfXZhciBUPXsiJWEiOmQ9PmNbZC50bV93ZGF5XS5zdWJzdHJpbmcoMCwzKSwiJUEiOmQ9PmNbZC50bV93ZGF5XSwiJWIiOmQ9PnVbZC50bV9tb25dLnN1YnN0cmluZygwLDMpLCIlQiI6ZD0+dVtkLnRtX21vbl0sIiVDIjpkPT57dmFyIG09ZC50bV95ZWFyKzE5MDA7cmV0dXJuIHAobS8xMDB8MCwyKX0sIiVkIjpkPT5wKGQudG1fbWRheSwyKSwiJWUiOmQ9PnYoZC50bV9tZGF5LDIsIiAiKSwiJWciOmQ9PkEoZCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMiksIiVHIjpBLCIlSCI6ZD0+cChkLnRtX2hvdXIsMiksIiVJIjpkPT57dmFyIG09ZC50bV9ob3VyO3JldHVybiBtPT0wP209MTI6bT4xMiYmKG0tPTEyKSxwKG0sMil9LCIlaiI6ZD0+cChkLnRtX21kYXkrY2koV2UoZC50bV95ZWFyKzE5MDApP0J0OlV0LGQudG1fbW9uLTEpLDMpLCIlbSI6ZD0+cChkLnRtX21vbisxLDIpLCIlTSI6ZD0+cChkLnRtX21pbiwyKSwiJW4iOigpPT5gCmAsIiVwIjpkPT5kLnRtX2hvdXI+PTAmJmQudG1faG91cjwxMj8iQU0iOiJQTSIsIiVTIjpkPT5wKGQudG1fc2VjLDIpLCIldCI6KCk9PiIJIiwiJXUiOmQ9PmQudG1fd2RheXx8NywiJVUiOmQ9Pnt2YXIgbT1kLnRtX3lkYXkrNy1kLnRtX3dkYXk7cmV0dXJuIHAoTWF0aC5mbG9vcihtLzcpLDIpfSwiJVYiOmQ9Pnt2YXIgbT1NYXRoLmZsb29yKChkLnRtX3lkYXkrNy0oZC50bV93ZGF5KzYpJTcpLzcpO2lmKChkLnRtX3dkYXkrMzcxLWQudG1feWRheS0yKSU3PD0yJiZtKyssbSl7aWYobT09NTMpe3ZhciBrPShkLnRtX3dkYXkrMzcxLWQudG1feWRheSklNztrIT00JiYoayE9M3x8IVdlKGQudG1feWVhcikpJiYobT0xKX19ZWxzZXttPTUyO3ZhciBQPShkLnRtX3dkYXkrNy1kLnRtX3lkYXktMSklNzsoUD09NHx8UD09NSYmV2UoZC50bV95ZWFyJTQwMC0xKSkmJm0rK31yZXR1cm4gcChtLDIpfSwiJXciOmQ9PmQudG1fd2RheSwiJVciOmQ9Pnt2YXIgbT1kLnRtX3lkYXkrNy0oZC50bV93ZGF5KzYpJTc7cmV0dXJuIHAoTWF0aC5mbG9vcihtLzcpLDIpfSwiJXkiOmQ9PihkLnRtX3llYXIrMTkwMCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMiksIiVZIjpkPT5kLnRtX3llYXIrMTkwMCwiJXoiOmQ9Pnt2YXIgbT1kLnRtX2dtdG9mZixrPW0+PTA7cmV0dXJuIG09TWF0aC5hYnMobSkvNjAsbT1tLzYwKjEwMCttJTYwLChrPyIrIjoiLSIpKygiMDAwMCIrbSkuc2xpY2UoLTQpfSwiJVoiOmQ9PmQudG1fem9uZSwiJSUiOigpPT4iJSJ9O2w9bC5yZXBsYWNlKC8lJS9nLCJcMFwwIik7Zm9yKHZhciBoIGluIFQpbC5pbmNsdWRlcyhoKSYmKGw9bC5yZXBsYWNlKG5ldyBSZWdFeHAoaCwiZyIpLFRbaF0ocykpKTtsPWwucmVwbGFjZSgvXDBcMC9nLCIlIik7dmFyIEQ9U2UobCwhMSk7cmV0dXJuIEQubGVuZ3RoPnQ/MDoobWkoRCxlKSxELmxlbmd0aC0xKX0sZ2k9KGUsdCxyLGksXyk9PnBpKGUsdCxyLGkpO28uY3JlYXRlUHJlbG9hZGVkRmlsZT1QcixvLnN0YXRpY0luaXQoKSxEdD1uLkludGVybmFsRXJyb3I9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLm5hbWU9IkludGVybmFsRXJyb3IifX0sT3IoKSx2ZT1uLkJpbmRpbmdFcnJvcj1jbGFzcyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMubmFtZT0iQmluZGluZ0Vycm9yIn19LFlyKCksQnIoKSxybigpLEl0PW4uVW5ib3VuZFR5cGVFcnJvcj1fbihFcnJvciwiVW5ib3VuZFR5cGVFcnJvciIpLGZuKCk7dmFyIHZpPXtiOmdyLGs6eXIscjpUcixCOkRyLEY6RnIsRTpBcixDOlNyLHc6TXIsejpqcixLOnpyLG86c24sSjpkbixqOnVuLGE6bW4sdjpnbixkOkVuLGk6eG4sZjokbix1OkNuLHE6am4seDpPbixuOlJuLEw6em4sSTpJbixOOlduLGM6ZnQsTzpMbixQOlZuLG06WW4saDpYbixsOkduLE06Sm4sZzpLbixlOlpuLEQ6dGksRzppaSxIOmFpLHM6b2ksdDpzaSx5OmZpLHA6ZGksQTpnaX0sYT1wcigpO2EuUixuLl9tZW1jcHk9YS5TLG4uX2hlaWZfbmNseF9jb2xvcl9wcm9maWxlX2FsbG9jPWEuVSxuLl9oZWlmX25jbHhfY29sb3JfcHJvZmlsZV9mcmVlPWEuVixuLl9oZWlmX3RhaV90aW1lc3RhbXBfcGFja2V0X2NvcHk9YS5XO3ZhciBlZT1uLl9mcmVlPWEuWDtuLl9oZWlmX2NvbG9yX2NvbnZlcnNpb25fb3B0aW9uc19zZXRfZGVmYXVsdHM9YS5ZLG4uX2hlaWZfbmNseF9jb2xvcl9wcm9maWxlX3NldF9jb2xvcl9wcmltYXJpZXM9YS5aLG4uX2hlaWZfbmNseF9jb2xvcl9wcm9maWxlX3NldF90cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3M9YS5fLG4uX2hlaWZfbmNseF9jb2xvcl9wcm9maWxlX3NldF9tYXRyaXhfY29lZmZpY2llbnRzPWEuJCxuLl9oZWlmX2luaXQ9YS5hYSxuLl9oZWlmX2RlaW5pdD1hLmJhLG4uX2hlaWZfbG9hZF9wbHVnaW49YS5jYSxuLl9oZWlmX3VubG9hZF9wbHVnaW49YS5kYSxuLl9oZWlmX2xvYWRfcGx1Z2lucz1hLmVhLG4uX2hlaWZfZ2V0X3BsdWdpbl9kaXJlY3Rvcmllcz1hLmZhLG4uX2hlaWZfZnJlZV9wbHVnaW5fZGlyZWN0b3JpZXM9YS5nYSxuLl9oZWlmX2dldF92ZXJzaW9uX251bWJlcj1hLmhhLG4uX2hlaWZfY29udGV4dF9hbGxvYz1hLmlhLG4uX2hlaWZfY29udGV4dF9mcmVlPWEuamEsbi5faGVpZl9jb250ZXh0X2dldF9udW1iZXJfb2ZfdG9wX2xldmVsX2ltYWdlcz1hLmthLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX3JlbGVhc2U9YS5sYSxuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfd2lkdGg9YS5tYSxuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfaGVpZ2h0PWEubmEsbi5faGVpZl9pbWFnZV9oYW5kbGVfaXNfcHJpbWFyeV9pbWFnZT1hLm9hLG4uX2hlaWZfaW1hZ2VfcmVsZWFzZT1hLnBhLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2hhc19hbHBoYV9jaGFubmVsPWEucWEsbi5faGVpZl9pbWFnZV9oYW5kbGVfaXNfcHJlbXVsdGlwbGllZF9hbHBoYT1hLnJhLG4uX2hlaWZfY29udGV4dF9nZXRfbnVtYmVyX29mX2l0ZW1zPWEuc2Esbi5faGVpZl9pdGVtX2lzX2l0ZW1faGlkZGVuPWEudGEsbi5faGVpZl9nZXRfdmVyc2lvbj1hLnVhLG4uX2hlaWZfY29udGV4dF9yZWFkX2Zyb21fbWVtb3J5PWEudmEsbi5faGVpZl9jaGVja19maWxldHlwZT1hLndhLG4uX2hlaWZfY29udGV4dF9nZXRfbGlzdF9vZl90b3BfbGV2ZWxfaW1hZ2VfSURzPWEueGEsbi5faGVpZl9jb250ZXh0X2dldF9pbWFnZV9oYW5kbGU9YS55YSxuLl9oZWlmX2NvbnRleHRfZ2V0X3ByaW1hcnlfaW1hZ2VfaGFuZGxlPWEuemEsbi5faGVpZl9kZWNvZGVfaW1hZ2U9YS5BYSxuLl9oZWlmX2ltYWdlX2dldF9jaHJvbWFfZm9ybWF0PWEuQmEsbi5faGVpZl9pbWFnZV9nZXRfY29sb3JzcGFjZT1hLkNhLG4uX2hlaWZfaW1hZ2VfaGFzX2NoYW5uZWw9YS5EYSxuLl9oZWlmX2ltYWdlX2dldF9wbGFuZV9yZWFkb25seTI9YS5FYSxuLl9oZWlmX2ltYWdlX2dldF93aWR0aD1hLkZhLG4uX2hlaWZfaW1hZ2VfZ2V0X2hlaWdodD1hLkdhLG4uX2hlaWZfaW1hZ2VfZ2V0X2JpdHNfcGVyX3BpeGVsX3JhbmdlPWEuSGEsbi5faGVpZl9jb250ZXh0X2dldF9saXN0X29mX2l0ZW1fSURzPWEuSWEsbi5faGVpZl9pdGVtX2dldF9pdGVtX3R5cGU9YS5KYTt2YXIgTHQ9bi5fbWFsbG9jPWEuS2E7bi5faGVpZl9pdGVtX2dldF9taW1lX2l0ZW1fY29udGVudF90eXBlPWEuTGEsbi5faGVpZl9pdGVtX2dldF9taW1lX2l0ZW1fY29udGVudF9lbmNvZGluZz1hLk1hLG4uX2hlaWZfaXRlbV9nZXRfdXJpX2l0ZW1fdXJpX3R5cGU9YS5OYSxuLl9oZWlmX2l0ZW1fZ2V0X2l0ZW1fbmFtZT1hLk9hLG4uX2hlaWZfZ2V0X3ZlcnNpb25fbnVtYmVyX21ham9yPWEuUGEsbi5faGVpZl9nZXRfdmVyc2lvbl9udW1iZXJfbWlub3I9YS5RYSxuLl9oZWlmX2dldF92ZXJzaW9uX251bWJlcl9tYWludGVuYW5jZT1hLlJhLG4uX2hlaWZfcmVnaXN0ZXJfZGVjb2Rlcl9wbHVnaW49YS5TYSxuLl9oZWlmX3JlZ2lzdGVyX2VuY29kZXJfcGx1Z2luPWEuVGEsbi5faGVpZl9zdHJpbmdfcmVsZWFzZT1hLlVhLG4uX2hlaWZfcmVnaXN0ZXJfZGVjb2Rlcj1hLlZhLG4uX2hlaWZfaW1hZ2VfZ2V0X3ByaW1hcnlfd2lkdGg9YS5XYSxuLl9oZWlmX2ltYWdlX2dldF9wcmltYXJ5X2hlaWdodD1hLlhhLG4uX2hlaWZfaW1hZ2VfY3JvcD1hLllhLG4uX2hlaWZfaW1hZ2VfZXh0cmFjdF9hcmVhPWEuWmEsbi5faGVpZl9pbWFnZV9nZXRfYml0c19wZXJfcGl4ZWw9YS5fYSxuLl9oZWlmX2ltYWdlX2dldF9wbGFuZV9yZWFkb25seT1hLiRhLG4uX2hlaWZfaW1hZ2VfZ2V0X3BsYW5lPWEuYWIsbi5faGVpZl9pbWFnZV9nZXRfcGxhbmUyPWEuYmIsbi5faGVpZl9pbWFnZV9zY2FsZV9pbWFnZT1hLmNiLG4uX2hlaWZfaW1hZ2VfZXh0ZW5kX3RvX3NpemVfZmlsbF93aXRoX3plcm89YS5kYixuLl9oZWlmX2ltYWdlX2dldF9kZWNvZGluZ193YXJuaW5ncz1hLmViLG4uX2hlaWZfaW1hZ2VfYWRkX2RlY29kaW5nX3dhcm5pbmc9YS5mYixuLl9oZWlmX2ltYWdlX2dldF9waXhlbF9hc3BlY3RfcmF0aW89YS5nYixuLl9oZWlmX2ltYWdlX3NldF9waXhlbF9hc3BlY3RfcmF0aW89YS5oYixuLl9oZWlmX2ltYWdlX2hhbmRsZV9zZXRfcGl4ZWxfYXNwZWN0X3JhdGlvPWEuaWIsbi5faGVpZl9pbWFnZV9jcmVhdGU9YS5qYixuLl9oZWlmX2ltYWdlX2FkZF9wbGFuZT1hLmtiLG4uX2hlaWZfaW1hZ2VfYWRkX3BsYW5lX3NhZmU9YS5sYixuLl9oZWlmX2ltYWdlX3NldF9wcmVtdWx0aXBsaWVkX2FscGhhPWEubWIsbi5faGVpZl9pbWFnZV9pc19wcmVtdWx0aXBsaWVkX2FscGhhPWEubmIsbi5faGVpZl9pbWFnZV9leHRlbmRfcGFkZGluZ190b19zaXplPWEub2Isbi5faGVpZl9jb2xvcl9jb252ZXJzaW9uX29wdGlvbnNfZXh0X2FsbG9jPWEucGIsbi5faGVpZl9jb2xvcl9jb252ZXJzaW9uX29wdGlvbnNfZXh0X2NvcHk9YS5xYixuLl9oZWlmX2NvbG9yX2NvbnZlcnNpb25fb3B0aW9uc19leHRfZnJlZT1hLnJiLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9jb2xvcl9wcm9maWxlX3R5cGU9YS5zYixuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfcmF3X2NvbG9yX3Byb2ZpbGVfc2l6ZT1hLnRiLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9yYXdfY29sb3JfcHJvZmlsZT1hLnViLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9uY2x4X2NvbG9yX3Byb2ZpbGU9YS52YixuLl9oZWlmX2ltYWdlX2dldF9jb2xvcl9wcm9maWxlX3R5cGU9YS53YixuLl9oZWlmX2ltYWdlX2dldF9yYXdfY29sb3JfcHJvZmlsZV9zaXplPWEueGIsbi5faGVpZl9pbWFnZV9nZXRfcmF3X2NvbG9yX3Byb2ZpbGU9YS55YixuLl9oZWlmX2ltYWdlX2dldF9uY2x4X2NvbG9yX3Byb2ZpbGU9YS56YixuLl9oZWlmX2ltYWdlX3NldF9yYXdfY29sb3JfcHJvZmlsZT1hLkFiLG4uX2hlaWZfaW1hZ2Vfc2V0X25jbHhfY29sb3JfcHJvZmlsZT1hLkJiLG4uX2hlaWZfaW1hZ2VfaGFzX2NvbnRlbnRfbGlnaHRfbGV2ZWw9YS5DYixuLl9oZWlmX2ltYWdlX2hhbmRsZV9oYXNfY29udGVudF9saWdodF9sZXZlbD1hLkRiLG4uX2hlaWZfaW1hZ2VfZ2V0X2NvbnRlbnRfbGlnaHRfbGV2ZWw9YS5FYixuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfY29udGVudF9saWdodF9sZXZlbD1hLkZiLG4uX2hlaWZfaW1hZ2Vfc2V0X2NvbnRlbnRfbGlnaHRfbGV2ZWw9YS5HYixuLl9oZWlmX2ltYWdlX2hhbmRsZV9zZXRfY29udGVudF9saWdodF9sZXZlbD1hLkhiLG4uX2hlaWZfaW1hZ2VfaGFzX21hc3RlcmluZ19kaXNwbGF5X2NvbG91cl92b2x1bWU9YS5JYixuLl9oZWlmX2ltYWdlX2hhbmRsZV9oYXNfbWFzdGVyaW5nX2Rpc3BsYXlfY29sb3VyX3ZvbHVtZT1hLkpiLG4uX2hlaWZfaW1hZ2VfZ2V0X21hc3RlcmluZ19kaXNwbGF5X2NvbG91cl92b2x1bWU9YS5LYixuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfbWFzdGVyaW5nX2Rpc3BsYXlfY29sb3VyX3ZvbHVtZT1hLkxiLG4uX2hlaWZfaW1hZ2Vfc2V0X21hc3RlcmluZ19kaXNwbGF5X2NvbG91cl92b2x1bWU9YS5NYixuLl9oZWlmX2ltYWdlX2hhbmRsZV9zZXRfbWFzdGVyaW5nX2Rpc3BsYXlfY29sb3VyX3ZvbHVtZT1hLk5iLG4uX2hlaWZfaW1hZ2VfaGFzX2FtYmllbnRfdmlld2luZ19lbnZpcm9ubWVudD1hLk9iLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2hhc19hbWJpZW50X3ZpZXdpbmdfZW52aXJvbm1lbnQ9YS5QYixuLl9oZWlmX2ltYWdlX2dldF9hbWJpZW50X3ZpZXdpbmdfZW52aXJvbm1lbnQ9YS5RYixuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfYW1iaWVudF92aWV3aW5nX2Vudmlyb25tZW50PWEuUmIsbi5faGVpZl9pbWFnZV9zZXRfYW1iaWVudF92aWV3aW5nX2Vudmlyb25tZW50PWEuU2Isbi5faGVpZl9pbWFnZV9oYW5kbGVfc2V0X2FtYmllbnRfdmlld2luZ19lbnZpcm9ubWVudD1hLlRiLG4uX2hlaWZfaW1hZ2VfaGFzX25vbWluYWxfZGlmZnVzZV93aGl0ZV9sdW1pbmFuY2U9YS5VYixuLl9oZWlmX2ltYWdlX2dldF9ub21pbmFsX2RpZmZ1c2Vfd2hpdGVfbHVtaW5hbmNlPWEuVmIsbi5faGVpZl9pbWFnZV9zZXRfbm9taW5hbF9kaWZmdXNlX3doaXRlX2x1bWluYW5jZT1hLldiLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2hhc19ub21pbmFsX2RpZmZ1c2Vfd2hpdGVfbHVtaW5hbmNlPWEuWGIsbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X25vbWluYWxfZGlmZnVzZV93aGl0ZV9sdW1pbmFuY2U9YS5ZYixuLl9oZWlmX2ltYWdlX2hhbmRsZV9zZXRfbm9taW5hbF9kaWZmdXNlX3doaXRlX2x1bWluYW5jZT1hLlpiLG4uX2hlaWZfbWFzdGVyaW5nX2Rpc3BsYXlfY29sb3VyX3ZvbHVtZV9kZWNvZGU9YS5fYixuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfbnVtYmVyX29mX3JlZ2lvbl9pdGVtcz1hLiRiLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9saXN0X29mX3JlZ2lvbl9pdGVtX2lkcz1hLmFjLG4uX2hlaWZfY29udGV4dF9nZXRfcmVnaW9uX2l0ZW09YS5iYyxuLl9oZWlmX3JlZ2lvbl9pdGVtX2dldF9pZD1hLmNjLG4uX2hlaWZfcmVnaW9uX2l0ZW1fcmVsZWFzZT1hLmRjLG4uX2hlaWZfcmVnaW9uX2l0ZW1fZ2V0X3JlZmVyZW5jZV9zaXplPWEuZWMsbi5faGVpZl9yZWdpb25faXRlbV9nZXRfbnVtYmVyX29mX3JlZ2lvbnM9YS5mYyxuLl9oZWlmX3JlZ2lvbl9pdGVtX2dldF9saXN0X29mX3JlZ2lvbnM9YS5nYyxuLl9oZWlmX3JlZ2lvbl9yZWxlYXNlPWEuaGMsbi5faGVpZl9yZWdpb25fcmVsZWFzZV9tYW55PWEuaWMsbi5faGVpZl9yZWdpb25fZ2V0X3R5cGU9YS5qYyxuLl9oZWlmX3JlZ2lvbl9nZXRfcG9pbnQ9YS5rYyxuLl9oZWlmX3JlZ2lvbl9nZXRfcG9pbnRfdHJhbnNmb3JtZWQ9YS5sYyxuLl9oZWlmX3JlZ2lvbl9nZXRfcmVjdGFuZ2xlPWEubWMsbi5faGVpZl9yZWdpb25fZ2V0X3JlY3RhbmdsZV90cmFuc2Zvcm1lZD1hLm5jLG4uX2hlaWZfcmVnaW9uX2dldF9lbGxpcHNlPWEub2Msbi5faGVpZl9yZWdpb25fZ2V0X2VsbGlwc2VfdHJhbnNmb3JtZWQ9YS5wYyxuLl9oZWlmX3JlZ2lvbl9nZXRfcG9seWdvbl9udW1fcG9pbnRzPWEucWMsbi5faGVpZl9yZWdpb25fZ2V0X3BvbHlnb25fcG9pbnRzPWEucmMsbi5faGVpZl9yZWdpb25fZ2V0X3BvbHlnb25fcG9pbnRzX3RyYW5zZm9ybWVkPWEuc2Msbi5faGVpZl9yZWdpb25fZ2V0X3BvbHlsaW5lX251bV9wb2ludHM9YS50YyxuLl9oZWlmX3JlZ2lvbl9nZXRfcG9seWxpbmVfcG9pbnRzPWEudWMsbi5faGVpZl9yZWdpb25fZ2V0X3BvbHlsaW5lX3BvaW50c190cmFuc2Zvcm1lZD1hLnZjLG4uX2hlaWZfcmVnaW9uX2dldF9yZWZlcmVuY2VkX21hc2tfSUQ9YS53YyxuLl9oZWlmX3JlZ2lvbl9nZXRfaW5saW5lX21hc2tfZGF0YV9sZW49YS54YyxuLl9oZWlmX3JlZ2lvbl9pdGVtX2FkZF9yZWdpb25faW5saW5lX21hc2tfZGF0YT1hLnljLG4uX2hlaWZfcmVnaW9uX2dldF9tYXNrX2ltYWdlPWEuemMsbi5faGVpZl9pbWFnZV9oYW5kbGVfYWRkX3JlZ2lvbl9pdGVtPWEuQWMsbi5faGVpZl9yZWdpb25faXRlbV9hZGRfcmVnaW9uX3BvaW50PWEuQmMsbi5faGVpZl9yZWdpb25faXRlbV9hZGRfcmVnaW9uX3JlY3RhbmdsZT1hLkNjLG4uX2hlaWZfcmVnaW9uX2l0ZW1fYWRkX3JlZ2lvbl9lbGxpcHNlPWEuRGMsbi5faGVpZl9yZWdpb25faXRlbV9hZGRfcmVnaW9uX3BvbHlnb249YS5FYyxuLl9oZWlmX3JlZ2lvbl9pdGVtX2FkZF9yZWdpb25fcG9seWxpbmU9YS5GYyxuLl9oZWlmX3JlZ2lvbl9pdGVtX2FkZF9yZWdpb25fcmVmZXJlbmNlZF9tYXNrPWEuR2Msbi5faGVpZl9yZWdpb25fZ2V0X2lubGluZV9tYXNrX2RhdGE9YS5IYyxuLl9oZWlmX3JlZ2lvbl9pdGVtX2FkZF9yZWdpb25faW5saW5lX21hc2s9YS5JYyxuLl9oZWlmX2l0ZW1fZ2V0X3Byb3BlcnRpZXNfb2ZfdHlwZT1hLkpjLG4uX2hlaWZfaXRlbV9nZXRfdHJhbnNmb3JtYXRpb25fcHJvcGVydGllcz1hLktjLG4uX2hlaWZfaXRlbV9nZXRfcHJvcGVydHlfdHlwZT1hLkxjLG4uX2hlaWZfaXRlbV9nZXRfcHJvcGVydHlfdXNlcl9kZXNjcmlwdGlvbj1hLk1jLG4uX2hlaWZfaXRlbV9hZGRfcHJvcGVydHlfdXNlcl9kZXNjcmlwdGlvbj1hLk5jLG4uX2hlaWZfcHJvcGVydHlfdXNlcl9kZXNjcmlwdGlvbl9yZWxlYXNlPWEuT2Msbi5faGVpZl9pdGVtX2dldF9wcm9wZXJ0eV90cmFuc2Zvcm1fbWlycm9yPWEuUGMsbi5faGVpZl9pdGVtX2dldF9wcm9wZXJ0eV90cmFuc2Zvcm1fcm90YXRpb25fY2N3PWEuUWMsbi5faGVpZl9pdGVtX2dldF9wcm9wZXJ0eV90cmFuc2Zvcm1fY3JvcF9ib3JkZXJzPWEuUmMsbi5faGVpZl9pdGVtX2FkZF9yYXdfcHJvcGVydHk9YS5TYyxuLl9oZWlmX2l0ZW1fZ2V0X3Byb3BlcnR5X3Jhd19zaXplPWEuVGMsbi5faGVpZl9pdGVtX2dldF9wcm9wZXJ0eV9yYXdfZGF0YT1hLlVjLG4uX2hlaWZfaXRlbV9nZXRfcHJvcGVydHlfdXVpZF90eXBlPWEuVmMsbi5faGVpZl9pbWFnZV9oYW5kbGVfaGFzX2NhbWVyYV9pbnRyaW5zaWNfbWF0cml4PWEuV2Msbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2NhbWVyYV9pbnRyaW5zaWNfbWF0cml4PWEuWGMsbi5faGVpZl9pbWFnZV9oYW5kbGVfaGFzX2NhbWVyYV9leHRyaW5zaWNfbWF0cml4PWEuWWMsbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2NhbWVyYV9leHRyaW5zaWNfbWF0cml4PWEuWmMsbi5faGVpZl9jYW1lcmFfZXh0cmluc2ljX21hdHJpeF9yZWxlYXNlPWEuX2Msbi5faGVpZl9jYW1lcmFfZXh0cmluc2ljX21hdHJpeF9nZXRfcm90YXRpb25fbWF0cml4PWEuJGMsbi5faGVpZl9pbWFnZV9zZXRfYmF5ZXJfcGF0dGVybj1hLmFkLG4uX2hlaWZfaW1hZ2VfYWRkX2JheWVyX2NvbXBvbmVudD1hLmJkLG4uX2hlaWZfaW1hZ2VfZ2V0X2JheWVyX3BhdHRlcm5fc2l6ZT1hLmNkLG4uX2hlaWZfaW1hZ2VfZ2V0X2JheWVyX3BhdHRlcm49YS5kZCxuLl9oZWlmX3BvbGFyaXphdGlvbl9hbmdsZV9ub19maWx0ZXI9YS5lZCxuLl9oZWlmX3BvbGFyaXphdGlvbl9hbmdsZV9pc19ub19maWx0ZXI9YS5mZCxuLl9oZWlmX2ltYWdlX2FkZF9wb2xhcml6YXRpb25fcGF0dGVybj1hLmdkLG4uX2hlaWZfaW1hZ2VfZ2V0X251bWJlcl9vZl9wb2xhcml6YXRpb25fcGF0dGVybnM9YS5oZCxuLl9oZWlmX2ltYWdlX2dldF9wb2xhcml6YXRpb25fcGF0dGVybl9pbmZvPWEuaWQsbi5faGVpZl9pbWFnZV9nZXRfcG9sYXJpemF0aW9uX3BhdHRlcm5fZGF0YT1hLmpkLG4uX2hlaWZfaW1hZ2VfZ2V0X3BvbGFyaXphdGlvbl9wYXR0ZXJuX2luZGV4X2Zvcl9jb21wb25lbnQ9YS5rZCxuLl9oZWlmX2ltYWdlX2FkZF9zZW5zb3JfYmFkX3BpeGVsc19tYXA9YS5sZCxuLl9oZWlmX2ltYWdlX2dldF9udW1iZXJfb2Zfc2Vuc29yX2JhZF9waXhlbHNfbWFwcz1hLm1kLG4uX2hlaWZfaW1hZ2VfZ2V0X3NlbnNvcl9iYWRfcGl4ZWxzX21hcF9pbmZvPWEubmQsbi5faGVpZl9pbWFnZV9nZXRfc2Vuc29yX2JhZF9waXhlbHNfbWFwX2RhdGE9YS5vZCxuLl9oZWlmX2ltYWdlX2FkZF9zZW5zb3JfbnVjPWEucGQsbi5faGVpZl9pbWFnZV9nZXRfbnVtYmVyX29mX3NlbnNvcl9udWNzPWEucWQsbi5faGVpZl9pbWFnZV9nZXRfc2Vuc29yX251Y19pbmZvPWEucmQsbi5faGVpZl9pbWFnZV9nZXRfc2Vuc29yX251Y19kYXRhPWEuc2Qsbi5faGVpZl9pbWFnZV9zZXRfY2hyb21hX2xvY2F0aW9uPWEudGQsbi5faGVpZl9pbWFnZV9oYXNfY2hyb21hX2xvY2F0aW9uPWEudWQsbi5faGVpZl9pbWFnZV9nZXRfY2hyb21hX2xvY2F0aW9uPWEudmQsbi5faGVpZl9pdGVtX3NldF9pdGVtX25hbWU9YS53ZCxuLl9oZWlmX2l0ZW1fZ2V0X2l0ZW1fZGF0YT1hLnhkLG4uX2hlaWZfcmVsZWFzZV9pdGVtX2RhdGE9YS55ZCxuLl9oZWlmX2l0ZW1fZ2V0X3Byb3BlcnR5X2V4dGVuZGVkX2xhbmd1YWdlPWEuemQsbi5faGVpZl9pdGVtX3NldF9wcm9wZXJ0eV9leHRlbmRlZF9sYW5ndWFnZT1hLkFkLG4uX2hlaWZfY29udGV4dF9nZXRfaXRlbV9yZWZlcmVuY2VzPWEuQmQsbi5faGVpZl9yZWxlYXNlX2l0ZW1fcmVmZXJlbmNlcz1hLkNkLG4uX2hlaWZfY29udGV4dF9hZGRfaXRlbV9yZWZlcmVuY2U9YS5EZCxuLl9oZWlmX2NvbnRleHRfYWRkX2l0ZW1fcmVmZXJlbmNlcz1hLkVkLG4uX2hlaWZfY29udGV4dF9hZGRfaXRlbT1hLkZkLG4uX2hlaWZfY29udGV4dF9hZGRfbWltZV9pdGVtPWEuR2Qsbi5faGVpZl9jb250ZXh0X2FkZF9wcmVjb21wcmVzc2VkX21pbWVfaXRlbT1hLkhkLG4uX2hlaWZfY29udGV4dF9hZGRfdXJpX2l0ZW09YS5JZCxuLl9oZWlmX2NvbnRleHRfaGFzX3NlcXVlbmNlPWEuSmQsbi5faGVpZl9jb250ZXh0X2dldF9zZXF1ZW5jZV90aW1lc2NhbGU9YS5LZCxuLl9oZWlmX2NvbnRleHRfZ2V0X3NlcXVlbmNlX2R1cmF0aW9uPWEuTGQsbi5faGVpZl90cmFja19yZWxlYXNlPWEuTWQsbi5faGVpZl9jb250ZXh0X251bWJlcl9vZl9zZXF1ZW5jZV90cmFja3M9YS5OZCxuLl9oZWlmX2NvbnRleHRfZ2V0X3RyYWNrX2lkcz1hLk9kLG4uX2hlaWZfdHJhY2tfZ2V0X2lkPWEuUGQsbi5faGVpZl9jb250ZXh0X2dldF90cmFjaz1hLlFkLG4uX2hlaWZfdHJhY2tfZ2V0X3RyYWNrX2hhbmRsZXJfdHlwZT1hLlJkLG4uX2hlaWZfdHJhY2tfZ2V0X2F1eGlsaWFyeV9pbmZvX3R5cGU9YS5TZCxuLl9oZWlmX3RyYWNrX2dldF9hdXhpbGlhcnlfaW5mb190eXBlX3Vybj1hLlRkLG4uX2hlaWZfdHJhY2tfaGFzX2FscGhhX2NoYW5uZWw9YS5VZCxuLl9oZWlmX3RyYWNrX2dldF90aW1lc2NhbGU9YS5WZCxuLl9oZWlmX3RyYWNrX2dldF9udW1iZXJfb2ZfcmVwZXRpdGlvbnM9YS5XZCxuLl9oZWlmX3RyYWNrX2dldF9pbWFnZV9yZXNvbHV0aW9uPWEuWGQsbi5faGVpZl90cmFja19kZWNvZGVfbmV4dF9pbWFnZT1hLllkLG4uX2hlaWZfZGVjb2Rpbmdfb3B0aW9uc19hbGxvYz1hLlpkLG4uX2hlaWZfZGVjb2Rpbmdfb3B0aW9uc19jb3B5PWEuX2Qsbi5faGVpZl9kZWNvZGluZ19vcHRpb25zX2ZyZWU9YS4kZCxuLl9oZWlmX2ltYWdlX2dldF9kdXJhdGlvbj1hLmFlLG4uX2hlaWZfdHJhY2tfZ2V0X3NhbXBsZV9lbnRyeV90eXBlX29mX2ZpcnN0X2NsdXN0ZXI9YS5iZSxuLl9oZWlmX3RyYWNrX2dldF91cmltX3NhbXBsZV9lbnRyeV91cmlfb2ZfZmlyc3RfY2x1c3Rlcj1hLmNlLG4uX2hlaWZfdHJhY2tfZ2V0X25leHRfcmF3X3NlcXVlbmNlX3NhbXBsZT1hLmRlLG4uX2hlaWZfcmF3X3NlcXVlbmNlX3NhbXBsZV9yZWxlYXNlPWEuZWUsbi5faGVpZl90YWlfdGltZXN0YW1wX3BhY2tldF9yZWxlYXNlPWEuZmUsbi5faGVpZl9yYXdfc2VxdWVuY2Vfc2FtcGxlX2dldF9kYXRhPWEuZ2Usbi5faGVpZl9yYXdfc2VxdWVuY2Vfc2FtcGxlX2dldF9kYXRhX3NpemU9YS5oZSxuLl9oZWlmX3Jhd19zZXF1ZW5jZV9zYW1wbGVfZ2V0X2R1cmF0aW9uPWEuaWUsbi5faGVpZl9jb250ZXh0X3NldF9zZXF1ZW5jZV90aW1lc2NhbGU9YS5qZSxuLl9oZWlmX2NvbnRleHRfc2V0X251bWJlcl9vZl9zZXF1ZW5jZV9yZXBldGl0aW9ucz1hLmtlLG4uX2hlaWZfdHJhY2tfb3B0aW9uc19hbGxvYz1hLmxlLG4uX2hlaWZfdHJhY2tfb3B0aW9uc19yZWxlYXNlPWEubWUsbi5faGVpZl90YWlfY2xvY2tfaW5mb19yZWxlYXNlPWEubmUsbi5faGVpZl90cmFja19vcHRpb25zX3NldF90aW1lc2NhbGU9YS5vZSxuLl9oZWlmX3RyYWNrX29wdGlvbnNfc2V0X2ludGVybGVhdmVkX3NhbXBsZV9hdXhfaW5mb3M9YS5wZSxuLl9oZWlmX3RyYWNrX29wdGlvbnNfZW5hYmxlX3NhbXBsZV90YWlfdGltZXN0YW1wcz1hLnFlLG4uX2hlaWZfdGFpX2Nsb2NrX2luZm9fYWxsb2M9YS5yZSxuLl9oZWlmX3RhaV9jbG9ja19pbmZvX2NvcHk9YS5zZSxuLl9oZWlmX3RyYWNrX29wdGlvbnNfZW5hYmxlX3NhbXBsZV9naW1pX2NvbnRlbnRfaWRzPWEudGUsbi5faGVpZl90cmFja19vcHRpb25zX3NldF9naW1pX3RyYWNrX2lkPWEudWUsbi5faGVpZl9zZXF1ZW5jZV9lbmNvZGluZ19vcHRpb25zX2FsbG9jPWEudmUsbi5faGVpZl9zZXF1ZW5jZV9lbmNvZGluZ19vcHRpb25zX2NvcHk9YS53ZSxuLl9oZWlmX3NlcXVlbmNlX2VuY29kaW5nX29wdGlvbnNfcmVsZWFzZT1hLnhlLG4uX2hlaWZfY29udGV4dF9hZGRfdmlzdWFsX3NlcXVlbmNlX3RyYWNrPWEueWUsbi5faGVpZl9pbWFnZV9zZXRfZHVyYXRpb249YS56ZSxuLl9oZWlmX3RyYWNrX2VuY29kZV9lbmRfb2Zfc2VxdWVuY2U9YS5BZSxuLl9oZWlmX3RyYWNrX2VuY29kZV9zZXF1ZW5jZV9pbWFnZT1hLkJlLG4uX2hlaWZfY29udGV4dF9hZGRfdXJpX21ldGFkYXRhX3NlcXVlbmNlX3RyYWNrPWEuQ2Usbi5faGVpZl9yYXdfc2VxdWVuY2Vfc2FtcGxlX2FsbG9jPWEuRGUsbi5faGVpZl9yYXdfc2VxdWVuY2Vfc2FtcGxlX3NldF9kYXRhPWEuRWUsbi5faGVpZl9yYXdfc2VxdWVuY2Vfc2FtcGxlX3NldF9kdXJhdGlvbj1hLkZlLG4uX2hlaWZfdHJhY2tfYWRkX3Jhd19zZXF1ZW5jZV9zYW1wbGU9YS5HZSxuLl9oZWlmX3RyYWNrX2dldF9udW1iZXJfb2Zfc2FtcGxlX2F1eF9pbmZvcz1hLkhlLG4uX2hlaWZfdHJhY2tfZ2V0X3NhbXBsZV9hdXhfaW5mb190eXBlcz1hLkllLG4uX2hlaWZfdHJhY2tfZ2V0X2dpbWlfdHJhY2tfY29udGVudF9pZD1hLkplLG4uX2hlaWZfaW1hZ2VfZ2V0X2dpbWlfc2FtcGxlX2NvbnRlbnRfaWQ9YS5LZSxuLl9oZWlmX3Jhd19zZXF1ZW5jZV9zYW1wbGVfZ2V0X2dpbWlfc2FtcGxlX2NvbnRlbnRfaWQ9YS5MZSxuLl9oZWlmX2ltYWdlX3NldF9naW1pX3NhbXBsZV9jb250ZW50X2lkPWEuTWUsbi5faGVpZl9yYXdfc2VxdWVuY2Vfc2FtcGxlX3NldF9naW1pX3NhbXBsZV9jb250ZW50X2lkPWEuTmUsbi5faGVpZl9yYXdfc2VxdWVuY2Vfc2FtcGxlX2hhc190YWlfdGltZXN0YW1wPWEuT2Usbi5faGVpZl9yYXdfc2VxdWVuY2Vfc2FtcGxlX2dldF90YWlfdGltZXN0YW1wPWEuUGUsbi5faGVpZl9yYXdfc2VxdWVuY2Vfc2FtcGxlX3NldF90YWlfdGltZXN0YW1wPWEuUWUsbi5faGVpZl90YWlfdGltZXN0YW1wX3BhY2tldF9hbGxvYz1hLlJlLG4uX2hlaWZfdHJhY2tfZ2V0X3RhaV9jbG9ja19pbmZvX29mX2ZpcnN0X2NsdXN0ZXI9YS5TZSxuLl9oZWlmX3RyYWNrX2FkZF9yZWZlcmVuY2VfdG9fdHJhY2s9YS5UZSxuLl9oZWlmX3RyYWNrX2dldF9udW1iZXJfb2ZfdHJhY2tfcmVmZXJlbmNlX3R5cGVzPWEuVWUsbi5faGVpZl90cmFja19nZXRfdHJhY2tfcmVmZXJlbmNlX3R5cGVzPWEuVmUsbi5faGVpZl90cmFja19nZXRfbnVtYmVyX29mX3RyYWNrX3JlZmVyZW5jZV9vZl90eXBlPWEuV2Usbi5faGVpZl90cmFja19nZXRfcmVmZXJlbmNlc19mcm9tX3RyYWNrPWEuWGUsbi5faGVpZl90cmFja19maW5kX3JlZmVycmluZ190cmFja3M9YS5ZZSxuLl9oZWlmX2l0ZW1fc2V0X3Byb3BlcnR5X3RhaV9jbG9ja19pbmZvPWEuWmUsbi5faGVpZl9pdGVtX2dldF9wcm9wZXJ0eV90YWlfY2xvY2tfaW5mbz1hLl9lLG4uX2hlaWZfaXRlbV9zZXRfcHJvcGVydHlfdGFpX3RpbWVzdGFtcD1hLiRlLG4uX2hlaWZfaXRlbV9nZXRfcHJvcGVydHlfdGFpX3RpbWVzdGFtcD1hLmFmLG4uX2hlaWZfaW1hZ2Vfc2V0X3RhaV90aW1lc3RhbXA9YS5iZixuLl9oZWlmX2ltYWdlX2dldF90YWlfdGltZXN0YW1wPWEuY2Ysbi5faGVpZl9yZWFkX21haW5fYnJhbmQ9YS5kZixuLl9oZWlmX2ZvdXJjY190b19icmFuZD1hLmVmLG4uX2hlaWZfcmVhZF9taW5vcl92ZXJzaW9uX2JyYW5kPWEuZmYsbi5faGVpZl9icmFuZF90b19mb3VyY2M9YS5nZixuLl9oZWlmX2hhc19jb21wYXRpYmxlX2JyYW5kPWEuaGYsbi5faGVpZl9nZXRfZ2xvYmFsX3NlY3VyaXR5X2xpbWl0cz1hLmpmLG4uX2hlaWZfbGlzdF9jb21wYXRpYmxlX2JyYW5kcz1hLmtmLG4uX2hlaWZfZnJlZV9saXN0X29mX2NvbXBhdGlibGVfYnJhbmRzPWEubGYsbi5faGVpZl9nZXRfZmlsZV9taW1lX3R5cGU9YS5tZixuLl9oZWlmX2hhc19jb21wYXRpYmxlX2ZpbGV0eXBlPWEubmYsbi5faGVpZl9jaGVja19qcGVnX2ZpbGV0eXBlPWEub2Ysbi5faGVpZl9tYWluX2JyYW5kPWEucGYsbi5faGVpZl9tZXRhZGF0YV9jb21wcmVzc2lvbl9tZXRob2Rfc3VwcG9ydGVkPWEucWYsbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X251bWJlcl9vZl9tZXRhZGF0YV9ibG9ja3M9YS5yZixuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfbGlzdF9vZl9tZXRhZGF0YV9ibG9ja19JRHM9YS5zZixuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfbWV0YWRhdGFfdHlwZT1hLnRmLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9tZXRhZGF0YV9jb250ZW50X3R5cGU9YS51ZixuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfbWV0YWRhdGFfc2l6ZT1hLnZmLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9tZXRhZGF0YT1hLndmLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9tZXRhZGF0YV9pdGVtX3VyaV90eXBlPWEueGYsbi5faGVpZl9jb250ZXh0X2FkZF9leGlmX21ldGFkYXRhPWEueWYsbi5faGVpZl9jb250ZXh0X2FkZF9YTVBfbWV0YWRhdGE9YS56ZixuLl9oZWlmX2NvbnRleHRfYWRkX1hNUF9tZXRhZGF0YTI9YS5BZixuLl9oZWlmX2NvbnRleHRfYWRkX2dlbmVyaWNfbWV0YWRhdGE9YS5CZixuLl9oZWlmX2NvbnRleHRfYWRkX2dlbmVyaWNfdXJpX21ldGFkYXRhPWEuQ2Ysbi5faGVpZl9pbWFnZV9oYW5kbGVfaGFzX2RlcHRoX2ltYWdlPWEuRGYsbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X251bWJlcl9vZl9kZXB0aF9pbWFnZXM9YS5FZixuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfbGlzdF9vZl9kZXB0aF9pbWFnZV9JRHM9YS5GZixuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfZGVwdGhfaW1hZ2VfaGFuZGxlPWEuR2Ysbi5faGVpZl9kZXB0aF9yZXByZXNlbnRhdGlvbl9pbmZvX2ZyZWU9YS5IZixuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfZGVwdGhfaW1hZ2VfcmVwcmVzZW50YXRpb25faW5mbz1hLklmLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9udW1iZXJfb2ZfdGh1bWJuYWlscz1hLkpmLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9saXN0X29mX3RodW1ibmFpbF9JRHM9YS5LZixuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfdGh1bWJuYWlsPWEuTGYsbi5faGVpZl9jb250ZXh0X2VuY29kZV90aHVtYm5haWw9YS5NZixuLl9oZWlmX2VuY29kaW5nX29wdGlvbnNfYWxsb2M9YS5OZixuLl9oZWlmX2VuY29kaW5nX29wdGlvbnNfY29weT1hLk9mLG4uX2hlaWZfZW5jb2Rpbmdfb3B0aW9uc19mcmVlPWEuUGYsbi5faGVpZl9jb250ZXh0X2Fzc2lnbl90aHVtYm5haWw9YS5RZixuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfbnVtYmVyX29mX2F1eGlsaWFyeV9pbWFnZXM9YS5SZixuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfbGlzdF9vZl9hdXhpbGlhcnlfaW1hZ2VfSURzPWEuU2Ysbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2F1eGlsaWFyeV90eXBlPWEuVGYsbi5faGVpZl9pbWFnZV9oYW5kbGVfcmVsZWFzZV9hdXhpbGlhcnlfdHlwZT1hLlVmLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9hdXhpbGlhcnlfaW1hZ2VfaGFuZGxlPWEuVmYsbi5faGVpZl9pbWFnZV9oYW5kbGVfZnJlZV9hdXhpbGlhcnlfdHlwZXM9YS5XZixuLl9oZWlmX2NvbnRleHRfZ2V0X2VudGl0eV9ncm91cHM9YS5YZixuLl9oZWlmX2VudGl0eV9ncm91cHNfcmVsZWFzZT1hLllmLG4uX2hlaWZfZ2V0X2Rpc2FibGVkX3NlY3VyaXR5X2xpbWl0cz1hLlpmLG4uX2hlaWZfY29udGV4dF9nZXRfc2VjdXJpdHlfbGltaXRzPWEuX2Ysbi5faGVpZl9jb250ZXh0X3NldF9zZWN1cml0eV9saW1pdHM9YS4kZixuLl9oZWlmX2NvbnRleHRfc2V0X21heGltdW1faW1hZ2Vfc2l6ZV9saW1pdD1hLmFnLG4uX2hlaWZfaGF2ZV9lbmNvZGVyX2Zvcl9mb3JtYXQ9YS5iZyxuLl9oZWlmX2dldF9lbmNvZGVyX2Rlc2NyaXB0b3JzPWEuY2csbi5faGVpZl9lbmNvZGVyX2Rlc2NyaXB0b3JfZ2V0X25hbWU9YS5kZyxuLl9oZWlmX2VuY29kZXJfZGVzY3JpcHRvcl9nZXRfaWRfbmFtZT1hLmVnLG4uX2hlaWZfZW5jb2Rlcl9kZXNjcmlwdG9yX2dldF9jb21wcmVzc2lvbl9mb3JtYXQ9YS5mZyxuLl9oZWlmX2VuY29kZXJfZGVzY3JpcHRvcl9zdXBwb3J0c19sb3NzeV9jb21wcmVzc2lvbj1hLmdnLG4uX2hlaWZfZW5jb2Rlcl9kZXNjcmlwdG9yX3N1cHBvcnRzX2xvc3NsZXNzX2NvbXByZXNzaW9uPWEuaGcsbi5faGVpZl9jb250ZXh0X2dldF9lbmNvZGVyPWEuaWcsbi5faGVpZl9jb250ZXh0X2dldF9lbmNvZGVyX2Zvcl9mb3JtYXQ9YS5qZyxuLl9oZWlmX2VuY29kZXJfcmVsZWFzZT1hLmtnLG4uX2hlaWZfZW5jb2Rlcl9nZXRfbmFtZT1hLmxnLG4uX2hlaWZfZW5jb2Rlcl9zZXRfbG9zc3lfcXVhbGl0eT1hLm1nLG4uX2hlaWZfZW5jb2Rlcl9zZXRfbG9zc2xlc3M9YS5uZyxuLl9oZWlmX2VuY29kZXJfc2V0X2xvZ2dpbmdfbGV2ZWw9YS5vZyxuLl9oZWlmX2VuY29kZXJfbGlzdF9wYXJhbWV0ZXJzPWEucGcsbi5faGVpZl9lbmNvZGVyX3BhcmFtZXRlcl9nZXRfbmFtZT1hLnFnLG4uX2hlaWZfZW5jb2Rlcl9wYXJhbWV0ZXJfZ2V0X3R5cGU9YS5yZyxuLl9oZWlmX2VuY29kZXJfcGFyYW1ldGVyX2dldF92YWxpZF9pbnRlZ2VyX3JhbmdlPWEuc2csbi5faGVpZl9lbmNvZGVyX3BhcmFtZXRlcl9nZXRfdmFsaWRfaW50ZWdlcl92YWx1ZXM9YS50ZyxuLl9oZWlmX2VuY29kZXJfcGFyYW1ldGVyX2dldF92YWxpZF9zdHJpbmdfdmFsdWVzPWEudWcsbi5faGVpZl9lbmNvZGVyX3NldF9wYXJhbWV0ZXJfaW50ZWdlcj1hLnZnLG4uX2hlaWZfZW5jb2Rlcl9nZXRfcGFyYW1ldGVyX2ludGVnZXI9YS53ZyxuLl9oZWlmX2VuY29kZXJfcGFyYW1ldGVyX2ludGVnZXJfdmFsaWRfcmFuZ2U9YS54ZyxuLl9oZWlmX2VuY29kZXJfc2V0X3BhcmFtZXRlcl9ib29sZWFuPWEueWcsbi5faGVpZl9lbmNvZGVyX2dldF9wYXJhbWV0ZXJfYm9vbGVhbj1hLnpnLG4uX2hlaWZfZW5jb2Rlcl9zZXRfcGFyYW1ldGVyX3N0cmluZz1hLkFnLG4uX2hlaWZfZW5jb2Rlcl9nZXRfcGFyYW1ldGVyX3N0cmluZz1hLkJnLG4uX2hlaWZfZW5jb2Rlcl9wYXJhbWV0ZXJfc3RyaW5nX3ZhbGlkX3ZhbHVlcz1hLkNnLG4uX2hlaWZfZW5jb2Rlcl9wYXJhbWV0ZXJfaW50ZWdlcl92YWxpZF92YWx1ZXM9YS5EZyxuLl9oZWlmX2VuY29kZXJfc2V0X3BhcmFtZXRlcj1hLkVnLG4uX2hlaWZfZW5jb2Rlcl9nZXRfcGFyYW1ldGVyPWEuRmcsbi5faGVpZl9lbmNvZGVyX2hhc19kZWZhdWx0PWEuR2csbi5faGVpZl9vcmllbnRhdGlvbl9jb25jYXQ9YS5IZyxuLl9oZWlmX2NvbnRleHRfZW5jb2RlX2ltYWdlPWEuSWcsbi5faGVpZl9jb250ZXh0X2FkZF9vdmVybGF5X2ltYWdlPWEuSmcsbi5faGVpZl9jb250ZXh0X3NldF9wcmltYXJ5X2ltYWdlPWEuS2csbi5faGVpZl9jb250ZXh0X3NldF9tYWpvcl9icmFuZD1hLkxnLG4uX2hlaWZfY29udGV4dF9hZGRfY29tcGF0aWJsZV9icmFuZD1hLk1nLG4uX2hlaWZfY29udGV4dF9zZXRfdW5pZj1hLk5nLG4uX2hlaWZfZW5jb2Rlcl9kZXNjcmlwdG9yX3N1cHBvcnRlc19sb3NzeV9jb21wcmVzc2lvbj1hLk9nLG4uX2hlaWZfZW5jb2Rlcl9kZXNjcmlwdG9yX3N1cHBvcnRlc19sb3NzbGVzc19jb21wcmVzc2lvbj1hLlBnLG4uX2hlaWZfY29udGV4dF9nZXRfZW5jb2Rlcl9kZXNjcmlwdG9ycz1hLlFnLG4uX2hlaWZfY29udGV4dF9zZXRfbWF4X2RlY29kaW5nX3RocmVhZHM9YS5SZyxuLl9oZWlmX2NvbnRleHRfZ2V0X21heF9kZWNvZGluZ190aHJlYWRzPWEuU2csbi5faGVpZl9oYXZlX2RlY29kZXJfZm9yX2Zvcm1hdD1hLlRnLG4uX2hlaWZfZ2V0X2RlY29kZXJfZGVzY3JpcHRvcnM9YS5VZyxuLl9oZWlmX2RlY29kZXJfZGVzY3JpcHRvcl9nZXRfbmFtZT1hLlZnLG4uX2hlaWZfZGVjb2Rlcl9kZXNjcmlwdG9yX2dldF9pZF9uYW1lPWEuV2csbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2l0ZW1faWQ9YS5YZyxuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfbHVtYV9iaXRzX3Blcl9waXhlbD1hLllnLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9jaHJvbWFfYml0c19wZXJfcGl4ZWw9YS5aZyxuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfcHJlZmVycmVkX2RlY29kaW5nX2NvbG9yc3BhY2U9YS5fZyxuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfaXNwZV93aWR0aD1hLiRnLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9pc3BlX2hlaWdodD1hLmFoLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9waXhlbF9hc3BlY3RfcmF0aW89YS5iaCxuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfY29udGV4dD1hLmNoLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9naW1pX2NvbnRlbnRfaWQ9YS5kaCxuLl9oZWlmX2ltYWdlX2hhbmRsZV9zZXRfZ2ltaV9jb250ZW50X2lkPWEuZWgsbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X251bWJlcl9vZl9jbXBkX2NvbXBvbmVudHM9YS5maCxuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfY21wZF9jb21wb25lbnRfdHlwZT1hLmdoLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9jbXBkX2NvbXBvbmVudF90eXBlX3VyaT1hLmhoLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2hhc19naW1pX2NvbXBvbmVudF9jb250ZW50X2lkcz1hLmloLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9naW1pX2NvbXBvbmVudF9jb250ZW50X2lkPWEuamgsbi5faGVpZl9pbWFnZV9oYW5kbGVfc2V0X2dpbWlfY29tcG9uZW50X2NvbnRlbnRfaWQ9YS5raCxuLl9oZWlmX2NvbnRleHRfcmVhZF9mcm9tX2ZpbGU9YS5saCxuLl9oZWlmX2NvbnRleHRfcmVhZF9mcm9tX21lbW9yeV93aXRob3V0X2NvcHk9YS5taCxuLl9oZWlmX2NvbnRleHRfcmVhZF9mcm9tX3JlYWRlcj1hLm5oLG4uX2hlaWZfY29udGV4dF9pc190b3BfbGV2ZWxfaW1hZ2VfSUQ9YS5vaCxuLl9oZWlmX2NvbnRleHRfZ2V0X3ByaW1hcnlfaW1hZ2VfSUQ9YS5waCxuLl9oZWlmX2NvbnRleHRfZGVidWdfZHVtcF9ib3hlc190b19maWxlPWEucWgsbi5faGVpZl9jb250ZXh0X3NldF93cml0ZV9taW5pX2Zvcm1hdD1hLnJoLG4uX2hlaWZfY29udGV4dF93cml0ZV90b19maWxlPWEuc2gsbi5faGVpZl9jb250ZXh0X3dyaXRlPWEudGgsbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2ltYWdlX3RpbGluZz1hLnVoLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9ncmlkX2ltYWdlX3RpbGVfaWQ9YS52aCxuLl9oZWlmX2ltYWdlX2hhbmRsZV9kZWNvZGVfaW1hZ2VfdGlsZT1hLndoLG4uX2hlaWZfY29udGV4dF9lbmNvZGVfZ3JpZD1hLnhoLG4uX2hlaWZfY29udGV4dF9hZGRfZ3JpZF9pbWFnZT1hLnloLG4uX2hlaWZfY29udGV4dF9hZGRfaW1hZ2VfdGlsZT1hLnpoLG4uX2hlaWZfaW1hZ2VfZ2V0X251bWJlcl9vZl91c2VkX2NvbXBvbmVudHM9YS5BaCxuLl9oZWlmX2ltYWdlX2dldF91c2VkX2NvbXBvbmVudF9pZHM9YS5CaCxuLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnRfY2hhbm5lbD1hLkNoLG4uX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudF93aWR0aD1hLkRoLG4uX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudF9oZWlnaHQ9YS5FaCxuLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnRfYml0c19wZXJfcGl4ZWw9YS5GaCxuLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnRfdHlwZT1hLkdoLG4uX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudF9kYXRhdHlwZT1hLkhoLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9udW1iZXJfb2ZfY29tcG9uZW50cz1hLkloLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF91c2VkX2NvbXBvbmVudF9pZHM9YS5KaCxuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfY29tcG9uZW50X3R5cGU9YS5LaCxuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfY29tcG9uZW50X2JpdHNfcGVyX3BpeGVsPWEuTGgsbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2NvbXBvbmVudF9kYXRhdHlwZT1hLk1oLG4uX2hlaWZfaW1hZ2VfYWRkX2NvbXBvbmVudD1hLk5oLG4uX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudF9yZWFkb25seT1hLk9oLG4uX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudD1hLlBoLG4uX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudF91aW50MTZfcmVhZG9ubHk9YS5RaCxuLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnRfdWludDE2PWEuUmgsbi5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50X3VpbnQzMl9yZWFkb25seT1hLlNoLG4uX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudF91aW50MzI9YS5UaCxuLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnRfdWludDY0X3JlYWRvbmx5PWEuVWgsbi5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50X3VpbnQ2ND1hLlZoLG4uX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudF9pbnQ4X3JlYWRvbmx5PWEuV2gsbi5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50X2ludDg9YS5YaCxuLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnRfaW50MTZfcmVhZG9ubHk9YS5ZaCxuLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnRfaW50MTY9YS5aaCxuLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnRfaW50MzJfcmVhZG9ubHk9YS5faCxuLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnRfaW50MzI9YS4kaCxuLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnRfaW50NjRfcmVhZG9ubHk9YS5haSxuLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnRfaW50NjQ9YS5iaSxuLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnRfZmxvYXQzMl9yZWFkb25seT1hLmNpLG4uX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudF9mbG9hdDMyPWEuZGksbi5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50X2Zsb2F0NjRfcmVhZG9ubHk9YS5laSxuLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnRfZmxvYXQ2ND1hLmZpLG4uX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudF9jb21wbGV4MzJfcmVhZG9ubHk9YS5naSxuLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnRfY29tcGxleDMyPWEuaGksbi5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50X2NvbXBsZXg2NF9yZWFkb25seT1hLmlpLG4uX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudF9jb21wbGV4NjQ9YS5qaSxuLl9oZWlmX2ltYWdlX3NldF9naW1pX2NvbXBvbmVudF9jb250ZW50X2lkPWEua2ksbi5faGVpZl91bmNpX2ltYWdlX3BhcmFtZXRlcnNfYWxsb2M9YS5saSxuLl9oZWlmX3VuY2lfaW1hZ2VfcGFyYW1ldGVyc19jb3B5PWEubWksbi5faGVpZl91bmNpX2ltYWdlX3BhcmFtZXRlcnNfcmVsZWFzZT1hLm5pLG4uX2hlaWZfY29udGV4dF9hZGRfZW1wdHlfdW5jaV9pbWFnZT1hLm9pLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2FkZF90ZXh0X2l0ZW09YS5waSxuLl9oZWlmX3RleHRfaXRlbV9yZWxlYXNlPWEucWksbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X251bWJlcl9vZl90ZXh0X2l0ZW1zPWEucmksbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2xpc3Rfb2ZfdGV4dF9pdGVtX2lkcz1hLnNpLG4uX2hlaWZfY29udGV4dF9nZXRfdGV4dF9pdGVtPWEudGksbi5faGVpZl90ZXh0X2l0ZW1fZ2V0X2lkPWEudWksbi5faGVpZl90ZXh0X2l0ZW1fZ2V0X2NvbnRlbnQ9YS52aSxuLl9oZWlmX3RleHRfaXRlbV9nZXRfcHJvcGVydHlfZXh0ZW5kZWRfbGFuZ3VhZ2U9YS53aSxuLl9oZWlmX3RleHRfaXRlbV9zZXRfZXh0ZW5kZWRfbGFuZ3VhZ2U9YS54aSxuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfb21hZl9pbWFnZV9wcm9qZWN0aW9uPWEueWksbi5faGVpZl9pbWFnZV9oYW5kbGVfc2V0X29tYWZfaW1hZ2VfcHJvamVjdGlvbj1hLnppLG4uX2hlaWZfaW1hZ2VfZ2V0X29tYWZfaW1hZ2VfcHJvamVjdGlvbj1hLkFpLG4uX2hlaWZfaW1hZ2Vfc2V0X29tYWZfaW1hZ2VfcHJvamVjdGlvbj1hLkJpLG4uX2RlMjY1X25ld19kZWNvZGVyPWEuQ2ksbi5fZGUyNjVfc2V0X3BhcmFtZXRlcl9ib29sPWEuRGksbi5fZGUyNjVfZ2V0X3ZlcnNpb249YS5FaSxuLl9kZTI2NV9pbml0PWEuRmksbi5fZGUyNjVfZnJlZT1hLkdpLG4uX2RlMjY1X2ZyZWVfZGVjb2Rlcj1hLkhpLG4uX2RlMjY1X3B1c2hfTkFMPWEuSWksbi5fZGUyNjVfZmx1c2hfZGF0YT1hLkppLG4uX2RlMjY1X2RlY29kZT1hLktpLG4uX2RlMjY1X2dldF9uZXh0X3BpY3R1cmU9YS5MaSxuLl9kZTI2NV9nZXRfaW1hZ2VfdXNlcl9kYXRhPWEuTWksbi5fZGUyNjVfZ2V0X2Nocm9tYV9mb3JtYXQ9YS5OaSxuLl9kZTI2NV9nZXRfaW1hZ2Vfd2lkdGg9YS5PaSxuLl9kZTI2NV9nZXRfaW1hZ2VfaGVpZ2h0PWEuUGksbi5fZGUyNjVfZ2V0X2JpdHNfcGVyX3BpeGVsPWEuUWksbi5fZGUyNjVfZ2V0X2ltYWdlX3BsYW5lPWEuUmksbi5fZGUyNjVfZ2V0X2ltYWdlX2NvbG91cl9wcmltYXJpZXM9YS5TaSxuLl9kZTI2NV9nZXRfaW1hZ2VfdHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNzPWEuVGksbi5fZGUyNjVfZ2V0X2ltYWdlX21hdHJpeF9jb2VmZmljaWVudHM9YS5VaSxuLl9kZTI2NV9nZXRfaW1hZ2VfZnVsbF9yYW5nZV9mbGFnPWEuVmksbi5fZGUyNjVfcmVsZWFzZV9uZXh0X3BpY3R1cmU9YS5XaTt2YXIgeWk9YS5YaSx3aT1hLllpO24uZHluQ2FsbF9qaT1hLlppLG4uZHluQ2FsbF9paWo9YS5faSxuLmR5bkNhbGxfamlqaj1hLiRpLG4uZHluQ2FsbF92aWpqPWEuYWosbi5keW5DYWxsX2ppamk9YS5iaixuLmR5bkNhbGxfdmlpamlpPWEuY2osbi5keW5DYWxsX2lpaWlpaj1hLmRqLG4uZHluQ2FsbF9paWlpaWpqPWEuZWosbi5keW5DYWxsX2lpaWlpaWpqPWEuZmosbi5faGVpZl9lcnJvcl9udWxsX3BvaW50ZXJfYXJndW1lbnQ9MTA1OTkyLG4uX2hlaWZfZXJyb3Jfb3V0X29mX21lbW9yeT0xMDYwMDQsbi5faGVpZl9lcnJvcl9pbnRlcm5hbF9leGNlcHRpb249MTA2MDE2LG4uX2hlaWZfZXJyb3Jfc3VjY2Vzcz0xMDgyODAsbi5faGVpZl9lcnJvcl9vaz0xMDg3MjAsbi5faGVpZl9lcnJvcl9pbnZhbGlkX3BhcmFtZXRlcl92YWx1ZT0xMDg3NDQsbi5faGVpZl9lcnJvcl91bnN1cHBvcnRlZF9wYXJhbWV0ZXI9MTA4NzMyO3ZhciBxZTttZT1mdW5jdGlvbiBlKCl7cWV8fFZ0KCkscWV8fChtZT1lKX07ZnVuY3Rpb24gVnQoKXtpZihuZT4wfHwoaXIoKSxuZT4wKSlyZXR1cm47ZnVuY3Rpb24gZSgpe3FlfHwocWU9ITAsbi5jYWxsZWRSdW49ITAsIXZ0JiYoYXIoKSxmZShuKSxuLm9uUnVudGltZUluaXRpYWxpemVkJiZuLm9uUnVudGltZUluaXRpYWxpemVkKCksb3IoKSkpfW4uc2V0U3RhdHVzPyhuLnNldFN0YXR1cygiUnVubmluZy4uLiIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5zZXRTdGF0dXMoIiIpfSwxKSxlKCl9LDEpKTplKCl9aWYobi5wcmVJbml0KWZvcih0eXBlb2Ygbi5wcmVJbml0PT0iZnVuY3Rpb24iJiYobi5wcmVJbml0PVtuLnByZUluaXRdKTtuLnByZUluaXQubGVuZ3RoPjA7KW4ucHJlSW5pdC5wb3AoKSgpO1Z0KCk7ZnVuY3Rpb24gWXQoZSl7Zm9yKHZhciB0PW5ldyBBcnJheUJ1ZmZlcihlLmxlbmd0aCkscj1uZXcgVWludDhBcnJheSh0KSxpPTAsXz1lLmxlbmd0aDtpPF87aSsrKXJbaV09ZS5jaGFyQ29kZUF0KGkpO3JldHVybiB0fXZhciBZPWZ1bmN0aW9uKGUpe3RoaXMuaGFuZGxlPWUsdGhpcy5pbWc9bnVsbH07WS5wcm90b3R5cGUuZnJlZT1mdW5jdGlvbigpe3RoaXMuaGFuZGxlJiYobi5oZWlmX2ltYWdlX2hhbmRsZV9yZWxlYXNlKHRoaXMuaGFuZGxlKSx0aGlzLmhhbmRsZT1udWxsKX0sWS5wcm90b3R5cGUuX2Vuc3VyZUltYWdlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuaW1nKXt2YXIgZT1uLmhlaWZfanNfZGVjb2RlX2ltYWdlKHRoaXMuaGFuZGxlLG4uaGVpZl9jb2xvcnNwYWNlLmhlaWZfY29sb3JzcGFjZV9ZQ2JDcixuLmhlaWZfY2hyb21hLmhlaWZfY2hyb21hXzQyMCk7aWYoIWV8fGUuY29kZSl7Y29uc29sZS5sb2coIkRlY29kaW5nIGltYWdlIGZhaWxlZCIsdGhpcy5oYW5kbGUsZSk7cmV0dXJufXRoaXMuZGF0YT1uZXcgVWludDhBcnJheShZdChlLmRhdGEpKSxkZWxldGUgZS5kYXRhLHRoaXMuaW1nPWUsZS5hbHBoYSE9PXZvaWQgMCYmKHRoaXMuYWxwaGE9bmV3IFVpbnQ4QXJyYXkoWXQoZS5hbHBoYSkpLGRlbGV0ZSBlLmFscGhhKX19LFkucHJvdG90eXBlLmdldF93aWR0aD1mdW5jdGlvbigpe3JldHVybiBuLmhlaWZfaW1hZ2VfaGFuZGxlX2dldF93aWR0aCh0aGlzLmhhbmRsZSl9LFkucHJvdG90eXBlLmdldF9oZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbi5oZWlmX2ltYWdlX2hhbmRsZV9nZXRfaGVpZ2h0KHRoaXMuaGFuZGxlKX0sWS5wcm90b3R5cGUuaXNfcHJpbWFyeT1mdW5jdGlvbigpe3JldHVybiEhbi5oZWlmX2ltYWdlX2hhbmRsZV9pc19wcmltYXJ5X2ltYWdlKHRoaXMuaGFuZGxlKX0sWS5wcm90b3R5cGUuaGFzX2FscGhhX2NoYW5uZWw9ZnVuY3Rpb24oKXtyZXR1cm4hIW4uaGVpZl9pbWFnZV9oYW5kbGVfaGFzX2FscGhhX2NoYW5uZWwodGhpcy5oYW5kbGUpfSxZLnByb3RvdHlwZS5pc19wcmVtdWx0aXBsaWVkX2FscGhhPWZ1bmN0aW9uKCl7cmV0dXJuISFuLmhlaWZfaW1hZ2VfaGFuZGxlX2lzX3ByZW11bHRpcGxpZWRfYWxwaGEodGhpcy5oYW5kbGUpfSxZLnByb3RvdHlwZS5kaXNwbGF5PWZ1bmN0aW9uKGUsdCl7dGhpcy5nZXRfd2lkdGgoKSx0aGlzLmdldF9oZWlnaHQoKSxzZXRUaW1lb3V0KChhc3luYyBmdW5jdGlvbigpe2lmKCF0aGlzLmltZyl7dmFyIHI9YXdhaXQgbi5oZWlmX2pzX2RlY29kZV9pbWFnZTIodGhpcy5oYW5kbGUsbi5oZWlmX2NvbG9yc3BhY2UuaGVpZl9jb2xvcnNwYWNlX1JHQixuLmhlaWZfY2hyb21hLmhlaWZfY2hyb21hX2ludGVybGVhdmVkX1JHQkEpO2lmKCFyfHxyLmNvZGUpe2NvbnNvbGUubG9nKCJEZWNvZGluZyBpbWFnZSBmYWlsZWQiLHRoaXMuaGFuZGxlLHIpLHQobnVsbCk7cmV0dXJufWZvcihsZXQgaSBvZiByLmNoYW5uZWxzKWlmKGkuaWQ9PW4uaGVpZl9jaGFubmVsLmhlaWZfY2hhbm5lbF9pbnRlcmxlYXZlZClpZihpLnN0cmlkZT09aS53aWR0aCo0KWUuZGF0YS5zZXQoaS5kYXRhKTtlbHNlIGZvcihsZXQgXz0wO188aS5oZWlnaHQ7XysrKXtsZXQgcz1pLmRhdGEuc2xpY2UoXyppLnN0cmlkZSxfKmkuc3RyaWRlK2kud2lkdGgqNCksbD1fKmkud2lkdGgqNDtlLmRhdGEuc2V0KHMsbCl9bi5oZWlmX2ltYWdlX3JlbGVhc2Uoci5pbWFnZSl9dChlKX0pLmJpbmQodGhpcyksMCl9O3ZhciBYdD1mdW5jdGlvbigpe3RoaXMuZGVjb2Rlcj1udWxsfTtYdC5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuZGVjb2RlciYmbi5oZWlmX2NvbnRleHRfZnJlZSh0aGlzLmRlY29kZXIpLHRoaXMuZGVjb2Rlcj1uLmhlaWZfY29udGV4dF9hbGxvYygpLCF0aGlzLmRlY29kZXIpcmV0dXJuIGNvbnNvbGUubG9nKCJDb3VsZCBub3QgY3JlYXRlIEhFSUYgY29udGV4dCIpLFtdO3ZhciB0PW4uaGVpZl9jb250ZXh0X3JlYWRfZnJvbV9tZW1vcnkodGhpcy5kZWNvZGVyLGUpO2lmKHQuY29kZSE9PW4uaGVpZl9lcnJvcl9jb2RlLmhlaWZfZXJyb3JfT2spcmV0dXJuIGNvbnNvbGUubG9nKCJDb3VsZCBub3QgcGFyc2UgSEVJRiBmaWxlIix0Lm1lc3NhZ2UpLFtdO3ZhciByPW4uaGVpZl9qc19jb250ZXh0X2dldF9saXN0X29mX3RvcF9sZXZlbF9pbWFnZV9JRHModGhpcy5kZWNvZGVyKTtpZighcnx8ci5jb2RlKXJldHVybiBjb25zb2xlLmxvZygiRXJyb3IgbG9hZGluZyBpbWFnZSBpZHMiLHIpLFtdO2lmKCFyLmxlbmd0aClyZXR1cm4gY29uc29sZS5sb2coIk5vIGltYWdlcyBmb3VuZCIpLFtdO2Zvcih2YXIgaT1bXSxfPTA7XzxyLmxlbmd0aDtfKyspe3ZhciBzPW4uaGVpZl9qc19jb250ZXh0X2dldF9pbWFnZV9oYW5kbGUodGhpcy5kZWNvZGVyLHJbX10pO2lmKCFzfHxzLmNvZGUpe2NvbnNvbGUubG9nKCJDb3VsZCBub3QgZ2V0IGltYWdlIGRhdGEgZm9yIGlkIixyW19dLHMpO2NvbnRpbnVlfWkucHVzaChuZXcgWShzKSl9cmV0dXJuIGl9O3ZhciBiaT1mdW5jdGlvbihlKXtyZXR1cm4gZS5jaGFyQ29kZUF0KDApPDwyNHxlLmNoYXJDb2RlQXQoMSk8PDE2fGUuY2hhckNvZGVBdCgyKTw8OHxlLmNoYXJDb2RlQXQoMyl9O24uSGVpZkltYWdlPVksbi5IZWlmRGVjb2Rlcj1YdCxuLmZvdXJjYz1iaTtjb25zdCBFaT1bImhlaWZfZXJyb3JfY29kZSIsImhlaWZfc3ViZXJyb3JfY29kZSIsImhlaWZfY29tcHJlc3Npb25fZm9ybWF0IiwiaGVpZl9jaHJvbWEiLCJoZWlmX2NvbG9yc3BhY2UiLCJoZWlmX2NoYW5uZWwiXTtmb3IoY29uc3QgZSBvZiBFaSlmb3IoY29uc3QgdCBpbiBuW2VdKSFuW2VdLmhhc093blByb3BlcnR5KHQpfHx0PT09InZhbHVlcyJ8fChuW3RdPW5bZV1bdF0pO2Zvcihjb25zdCBlIGluIG4pZS5pbmRleE9mKCJfaGVpZl8iKSE9PTB8fG5bZS5zbGljZSgxKV0hPT12b2lkIDB8fChuW2Uuc2xpY2UoMSldPW5bZV0pO3JldHVybiB0ZT1uLHRlfX0pKCk7Uy5leHBvcnRzPXF9KShwdCk7dmFyIGVyPXB0LmV4cG9ydHMsdHI9SnQoZXIpO2NvbnN0IEJlPXNlbGY7QmUub25tZXNzYWdlPWFzeW5jKHtkYXRhOlN9KT0+e3RyeXtpZighWyJoZWljIiwiaGVpZiJdLmluY2x1ZGVzKFMuZm9ybWF0KSl0aHJvdyBuZXcgRXJyb3IoIk9ubHkgSEVJQy9IRUlGIGltYWdlIGRlY29kaW5nIGlzIGJ1bmRsZWQuIik7Y29uc3QgST1hd2FpdCBycihTLmlucHV0LFMud2FzbVVybCk7QmUucG9zdE1lc3NhZ2Uoe3NvdXJjZTpJLGZvcm1hdDoicG5nIixjb250ZW50VHlwZToiaW1hZ2UvcG5nIn0sW0kuYnVmZmVyXSl9Y2F0Y2goSSl7QmUucG9zdE1lc3NhZ2Uoe2Vycm9yOkkgaW5zdGFuY2VvZiBFcnJvcj9JLm1lc3NhZ2U6U3RyaW5nKEkpfSl9fTthc3luYyBmdW5jdGlvbiBycihTLEkpe2NvbnN0IHE9YXdhaXQgZmV0Y2goSSk7aWYoIXEub2spdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCB0aGUgSEVJRiBkZWNvZGVyOiAke3Euc3RhdHVzfS5gKTtjb25zdCBVPWF3YWl0IHRyKHt3YXNtQmluYXJ5Om5ldyBVaW50OEFycmF5KGF3YWl0IHEuYXJyYXlCdWZmZXIoKSl9KSxOPW5ldyBVLkhlaWZEZWNvZGVyKCkuZGVjb2RlKFMpO3RyeXtjb25zdCBaPU4uZmluZChRPT5RLmlzX3ByaW1hcnkoKSk/P05bMF07aWYoIVopdGhyb3cgbmV3IEVycm9yKCJIRUlGIGZpbGUgY29udGFpbnMgbm8gZGVjb2RhYmxlIGltYWdlLiIpO2NvbnN0IHRlPVouZ2V0X3dpZHRoKCksbj1aLmdldF9oZWlnaHQoKTtpZih0ZTw9MHx8bjw9MHx8dGUqbj42NGU2KXRocm93IG5ldyBFcnJvcigiSEVJRiBpbWFnZSBkaW1lbnNpb25zIGV4Y2VlZCB0aGUgcHJldmlldyBsaW1pdC4iKTtjb25zdCBmZT1uZXcgT2Zmc2NyZWVuQ2FudmFzKHRlLG4pLHJlPWZlLmdldENvbnRleHQoIjJkIik7aWYoIXJlKXRocm93IG5ldyBFcnJvcigiSEVJRiBwcmV2aWV3IHJlcXVpcmVzIGEgMkQgY2FudmFzLiIpO2NvbnN0ICRlPXJlLmNyZWF0ZUltYWdlRGF0YSh0ZSxuKTtyZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKFEsaGUpPT5aLmRpc3BsYXkoJGUsUGU9PntQZT9RKCk6aGUobmV3IEVycm9yKCJGYWlsZWQgdG8gZGVjb2RlIEhFSUYgaW1hZ2UuIikpfSkpLHJlLnB1dEltYWdlRGF0YSgkZSwwLDApLG5ldyBVaW50OEFycmF5KGF3YWl0KGF3YWl0IGZlLmNvbnZlcnRUb0Jsb2Ioe3R5cGU6ImltYWdlL3BuZyJ9KSkuYXJyYXlCdWZmZXIoKSl9ZmluYWxseXtOLmZvckVhY2goWj0+Wi5mcmVlKCkpfX19KSgpOwo=", Y = (Z) => Uint8Array.from(atob(Z), (X) => X.charCodeAt(0)), W = typeof self < "u" && self.Blob && new Blob([Y(V)], { type: "text/javascript;charset=utf-8" });
|
|
4
4
|
function p(Z) {
|
|
5
5
|
let X;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
var U = Object.defineProperty;
|
|
2
2
|
var j = (e, t, n) => t in e ? U(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n;
|
|
3
3
|
var d = (e, t, n) => j(e, typeof t != "symbol" ? t + "" : t, n);
|
|
4
|
-
import { c as G } from "./core-
|
|
5
|
-
import { J as O } from "./vendor-
|
|
4
|
+
import { c as G } from "./core-gp02JQ3r.js";
|
|
5
|
+
import { J as O } from "./vendor-DvWhw-zP.js";
|
|
6
6
|
const R = [
|
|
7
7
|
{
|
|
8
8
|
extensions: ["mm", "opml", "xmind", "mmap"],
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
var Gn = Object.defineProperty;
|
|
2
2
|
var Un = (n, e, t) => e in n ? Gn(n, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : n[e] = t;
|
|
3
3
|
var M = (n, e, t) => Un(n, typeof e != "symbol" ? e + "" : e, t);
|
|
4
|
-
import { c as _n, o as Vn } from "./core-
|
|
5
|
-
import { L as Ne, M as V, b as ne, F as et, S as $n, C as de, V as E, G as ee, c as en, R as tn, B as Y, d as ie, e as Q, h as $, j as Wn, k as at, P as we, l as vt, E as yt, A as xt, D as Oe, m as te, n as Mt, O as Kn, o as Z, p as _e, q as Pe, r as me, t as Yn, v as Ve, w as Te, x as Ee, y as St, z as fe, H as Xn, I as Zn, K as nn, N as qn, T as Jn, Q as Qn, W as er, X as tr, Y as nr, Z as rr, _ as sr, $ as ir, a0 as ar, a1 as or, a2 as lr, a3 as cr, a4 as ur, a5 as dr, a6 as hr, a7 as mr, J as fr, a8 as pr, a9 as gr, aa as wr } from "./vendor-
|
|
6
|
-
import { c as br } from "./panorama-
|
|
4
|
+
import { c as _n, o as Vn } from "./core-gp02JQ3r.js";
|
|
5
|
+
import { L as Ne, M as V, b as ne, F as et, S as $n, C as de, V as E, G as ee, c as en, R as tn, B as Y, d as ie, e as Q, h as $, j as Wn, k as at, P as we, l as vt, E as yt, A as xt, D as Oe, m as te, n as Mt, O as Kn, o as Z, p as _e, q as Pe, r as me, t as Yn, v as Ve, w as Te, x as Ee, y as St, z as fe, H as Xn, I as Zn, K as nn, N as qn, T as Jn, Q as Qn, W as er, X as tr, Y as nr, Z as rr, _ as sr, $ as ir, a0 as ar, a1 as or, a2 as lr, a3 as cr, a4 as ur, a5 as dr, a6 as hr, a7 as mr, J as fr, a8 as pr, a9 as gr, aa as wr } from "./vendor-DvWhw-zP.js";
|
|
6
|
+
import { c as br } from "./panorama-Ci6DK6sa.js";
|
|
7
7
|
/*!
|
|
8
8
|
* @license
|
|
9
9
|
* The MIT License
|