Zum Inhalt springen

Geometrie Master: Unterschied zwischen den Versionen

Aus MOOCsWiki Staging
Spiele-ZIP kontrolliert geprüft und als neue Version hochgeladen
Spiele-ZIP kontrolliert geprüft und als neue Version hochgeladen
Markierung: Manuelle Zurücksetzung
 
Zeile 3: Zeile 3:
Interaktives Geometrie-Lernspiel für Klasse 5/6 mit Formel-Labor, Umfang-, Flächen- und Volumenaufgaben.
Interaktives Geometrie-Lernspiel für Klasse 5/6 mit Formel-Labor, Umfang-, Flächen- und Volumenaufgaben.


<aimoocgame title="Geometrie Master" cover="data:image/png;base64,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" manifest="eyJmb3JtYXQiOiJTcGllbGUiLCJ0aXRsZSI6Ikdlb01laXN0ZXI6IEZsw6RjaGVuIHVuZCBLw7ZycGVyIiwic2hvcnREZXNjcmlwdGlvbiI6IkludGVyYWt0aXZlcyBHZW9tZXRyaWUtTGVybnNwaWVsIGbDvHIgS2xhc3NlIDUvNiBtaXQgRm9ybWVsLUxhYm9yLCBVbWZhbmctLCBGbMOkY2hlbi0gdW5kIFZvbHVtZW5hdWZnYWJlbi4iLCJzdWJqZWN0IjoiTWF0aGVtYXRpayIsImNsYXNzUmFuZ2UiOiJLbGFzc2UgNS02IiwiY2F0ZWdvcmllcyI6WyJNYXRoZW1hdGlrIiwiR2VvbWV0cmllIiwiU3BpZWxlIl0sInRhZ3MiOlsiTGVybnNwaWVsIiwiSW50ZXJha3RpdiIsIkdlb21ldHJpZSIsIkZsw6RjaGVuaW5oYWx0IiwiVW1mYW5nIiwiVm9sdW1lbiJdLCJjb250cm9scyI6WyJNYXVzIiwiVG91Y2giLCJUYXN0YXR1ciJdLCJmdWxsc2NyZWVuIjp0cnVlLCJlbnRyeUZpbGUiOiJpbmRleC5odG1sIiwic3R5bGVGaWxlIjoic3R5bGUuY3NzIiwic2NyaXB0RmlsZSI6InNjcmlwdC5qcyIsImNvdmVyRmlsZSI6ImFzc2V0cy9jb3Zlci5wbmciLCJ2ZXJzaW9uIjoiMS4wLjAiLCJsYW5ndWFnZSI6ImRlIiwiYWNjZXNzaWJpbGl0eSI6ImtleWJvYXJkLXRvdWNoLW1vdXNlIiwiY29tbW9uc1NvdXJjZXMiOltdfQ==" ziphash="ffba5530b38adf1a0ed5a886002323b1ea15b8b2fbe41e742144bea8d8a8f5bd">
<aimoocgame title="Geometrie Master" cover="data:image/png;base64,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" manifest="eyJmb3JtYXQiOiJTcGllbGUiLCJ0aXRsZSI6Ikdlb01laXN0ZXI6IEZsw6RjaGVuIHVuZCBLw7ZycGVyIiwic2hvcnREZXNjcmlwdGlvbiI6IkludGVyYWt0aXZlcyBHZW9tZXRyaWUtTGVybnNwaWVsIGbDvHIgS2xhc3NlIDUvNiBtaXQgRm9ybWVsLUxhYm9yLCBVbWZhbmctLCBGbMOkY2hlbi0gdW5kIFZvbHVtZW5hdWZnYWJlbi4iLCJzdWJqZWN0IjoiTWF0aGVtYXRpayIsImNsYXNzUmFuZ2UiOiJLbGFzc2UgNS02IiwiY2F0ZWdvcmllcyI6WyJNYXRoZW1hdGlrIiwiR2VvbWV0cmllIiwiU3BpZWxlIl0sInRhZ3MiOlsiTGVybnNwaWVsIiwiSW50ZXJha3RpdiIsIkdlb21ldHJpZSIsIkZsw6RjaGVuaW5oYWx0IiwiVW1mYW5nIiwiVm9sdW1lbiJdLCJjb250cm9scyI6WyJNYXVzIiwiVG91Y2giLCJUYXN0YXR1ciJdLCJmdWxsc2NyZWVuIjp0cnVlLCJlbnRyeUZpbGUiOiJpbmRleC5odG1sIiwic3R5bGVGaWxlIjoic3R5bGUuY3NzIiwic2NyaXB0RmlsZSI6InNjcmlwdC5qcyIsImNvdmVyRmlsZSI6ImFzc2V0cy9jb3Zlci5wbmciLCJ2ZXJzaW9uIjoiMS4wLjAiLCJsYW5ndWFnZSI6ImRlIiwiYWNjZXNzaWJpbGl0eSI6ImtleWJvYXJkLXRvdWNoLW1vdXNlIiwiY29tbW9uc1NvdXJjZXMiOltdfQ==" ziphash="41f2ac4f95db7058e8ae8b2b34af16a54345a2d1bac6bd3c96e7db27fa316743">
PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImRlIj4KPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj4KICA8dGl0bGU+R2VvTWVpc3RlcjogRmzDpGNoZW4gdW5kIEvDtnJwZXI8L3RpdGxlPgogIAo8c3R5bGU+Cjpyb290IHsKICBjb2xvci1zY2hlbWU6IGxpZ2h0OwogIC0taW5rOiAjMTcyMDMzOwogIC0tbXV0ZWQ6ICM1YTY1Nzg7CiAgLS1zb2Z0OiAjZWVmNGZmOwogIC0tc29mdC0yOiAjZjZmOGZkOwogIC0tbGluZTogI2Q3ZTBlZjsKICAtLWJsdWU6ICMyNDU3ZDY7CiAgLS1ibHVlLWRhcms6ICMxNzNhOTQ7CiAgLS1ncmVlbjogIzBkN2I1ZjsKICAtLW9yYW5nZTogI2E3NWEwMDsKICAtLXJlZDogI2I0MjMxODsKICAtLWNhcmQ6ICNmZmZmZmY7CiAgLS1zaGFkb3c6IDAgMThweCA0NXB4IHJnYmEoMjMsIDMyLCA1MSwgMC4xNCk7CiAgLS1yYWRpdXMteGw6IDI4cHg7CiAgLS1yYWRpdXMtbGc6IDIwcHg7CiAgLS1yYWRpdXMtbWQ6IDE0cHg7CiAgLS1zcGFjZTogY2xhbXAoMTRweCwgMnZ3LCAyNHB4KTsKICAtLWZvY3VzOiAwIDAgMCA0cHggcmdiYSgzNiwgODcsIDIxNCwgMC4yNCk7CiAgZm9udC1mYW1pbHk6IHN5c3RlbS11aSwgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAiU2Vnb2UgVUkiLCBzYW5zLXNlcmlmOwp9CgoqIHsKICBib3gtc2l6aW5nOiBib3JkZXItYm94Owp9CgpodG1sLApib2R5IHsKICBtaW4taGVpZ2h0OiAxMDAlOwp9Cgpib2R5IHsKICBtYXJnaW46IDA7CiAgYmFja2dyb3VuZDoKICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgMTYlIDE4JSwgcmdiYSgzNiwgODcsIDIxNCwgMC4xNCksIHRyYW5zcGFyZW50IDM0JSksCiAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDg2JSA4JSwgcmdiYSgxMywgMTIzLCA5NSwgMC4xMiksIHRyYW5zcGFyZW50IDMwJSksCiAgICBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjZjdmOWZmIDAlLCAjZWVmM2ZiIDQ4JSwgI2Y4ZmJmZiAxMDAlKTsKICBjb2xvcjogdmFyKC0taW5rKTsKfQoKYnV0dG9uLAppbnB1dCB7CiAgZm9udDogaW5oZXJpdDsKfQoKYnV0dG9uIHsKICBib3JkZXI6IDA7CiAgY3Vyc29yOiBwb2ludGVyOwp9CgpidXR0b246Zm9jdXMtdmlzaWJsZSwKaW5wdXQ6Zm9jdXMtdmlzaWJsZSwKW3RhYmluZGV4XTpmb2N1cy12aXNpYmxlIHsKICBvdXRsaW5lOiBub25lOwogIGJveC1zaGFkb3c6IHZhcigtLWZvY3VzKTsKfQoKLmFwcC1zaGVsbCB7CiAgbWluLWhlaWdodDogMTAwdmg7CiAgZGlzcGxheTogZmxleDsKICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogIHBhZGRpbmc6IHZhcigtLXNwYWNlKTsKICBnYXA6IHZhcigtLXNwYWNlKTsKfQoKLmFwcC1zaGVsbC5pcy1mYWxsYmFjay1mdWxsIHsKICBtaW4taGVpZ2h0OiAxMDB2aDsKICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjZjlmYmZmLCAjZWFmMWZmKTsKfQoKLmFwcC1oZWFkZXIgewogIGRpc3BsYXk6IGdyaWQ7CiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMjEwcHgsIDFmcikgYXV0byBhdXRvOwogIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgZ2FwOiAxNnB4OwogIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45Mik7CiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbGluZSk7CiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXhsKTsKICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3cpOwogIHBhZGRpbmc6IGNsYW1wKDE0cHgsIDJ2dywgMjJweCk7Cn0KCi5icmFuZC1ibG9jayB7CiAgZGlzcGxheTogZ3JpZDsKICBnYXA6IDNweDsKfQoKLmV5ZWJyb3cgewogIG1hcmdpbjogMDsKICBjb2xvcjogdmFyKC0tYmx1ZSk7CiAgZm9udC13ZWlnaHQ6IDgwMDsKICBsZXR0ZXItc3BhY2luZzogMC4wNWVtOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgZm9udC1zaXplOiAwLjc4cmVtOwp9CgpoMSwKaDIsCmgzLApwIHsKICBtYXJnaW4tYmxvY2s6IDA7Cn0KCmgxIHsKICBmb250LXNpemU6IGNsYW1wKDEuNzVyZW0sIDR2dywgMy4ycmVtKTsKICBsaW5lLWhlaWdodDogMC45NTsKICBsZXR0ZXItc3BhY2luZzogLTAuMDRlbTsKfQoKaDIgewogIGZvbnQtc2l6ZTogY2xhbXAoMS42cmVtLCAzLjJ2dywgMi42cmVtKTsKICBsaW5lLWhlaWdodDogMS4wNTsKICBsZXR0ZXItc3BhY2luZzogLTAuMDM1ZW07Cn0KCmgzIHsKICBmb250LXNpemU6IGNsYW1wKDEuMTVyZW0sIDJ2dywgMS41NXJlbSk7CiAgbGluZS1oZWlnaHQ6IDEuMTU7Cn0KCi5zdWJ0aXRsZSB7CiAgY29sb3I6IHZhcigtLW11dGVkKTsKICBmb250LXdlaWdodDogNzAwOwp9Cgouc2NvcmUtc3RyaXAgewogIGRpc3BsYXk6IGZsZXg7CiAgZmxleC13cmFwOiB3cmFwOwogIGdhcDogOHB4OwogIGp1c3RpZnktY29udGVudDogY2VudGVyOwp9Cgouc2NvcmUtcGlsbCwKLnNraWxsLXBpbGwsCi5zdGF0LXBpbGwgewogIGRpc3BsYXk6IGlubGluZS1mbGV4OwogIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgZ2FwOiA4cHg7CiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbGluZSk7CiAgYmFja2dyb3VuZDogI2ZmZjsKICBib3JkZXItcmFkaXVzOiA5OTlweDsKICBwYWRkaW5nOiA4cHggMTJweDsKICBtaW4taGVpZ2h0OiA0MHB4OwogIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5zY29yZS1waWxsIHNwYW4sCi5za2lsbC1waWxsIHNwYW4sCi5zdGF0LXBpbGwgc3BhbiB7CiAgY29sb3I6IHZhcigtLW11dGVkKTsKICBmb250LXdlaWdodDogNzAwOwogIGZvbnQtc2l6ZTogMC44NnJlbTsKfQoKLnNjb3JlLXBpbGwgc3Ryb25nLAouc2tpbGwtcGlsbCBzdHJvbmcsCi5zdGF0LXBpbGwgc3Ryb25nIHsKICBjb2xvcjogdmFyKC0tYmx1ZS1kYXJrKTsKfQoKLnRvb2xiYXIgewogIGRpc3BsYXk6IGZsZXg7CiAgZmxleC13cmFwOiB3cmFwOwogIGdhcDogOHB4OwogIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7Cn0KCi50b29sLWJ1dHRvbiwKLnByaW1hcnktYnV0dG9uLAouc2Vjb25kYXJ5LWJ1dHRvbiwKLmNob2ljZS1idXR0b24sCi5tb2RlLWNhcmQsCi5zaGFwZS1idXR0b24sCi5zbWFsbC1idXR0b24sCi5sZXZlbC1idXR0b24gewogIG1pbi1oZWlnaHQ6IDQ0cHg7CiAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgcGFkZGluZzogMTFweCAxNnB4OwogIGJhY2tncm91bmQ6IHZhcigtLXNvZnQpOwogIGNvbG9yOiB2YXIoLS1ibHVlLWRhcmspOwogIGZvbnQtd2VpZ2h0OiA4MDA7CiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDE2MG1zIGVhc2UsIGJhY2tncm91bmQgMTYwbXMgZWFzZSwgYm9yZGVyLWNvbG9yIDE2MG1zIGVhc2U7Cn0KCi50b29sLWJ1dHRvbjpob3ZlciwKLnByaW1hcnktYnV0dG9uOmhvdmVyLAouc2Vjb25kYXJ5LWJ1dHRvbjpob3ZlciwKLmNob2ljZS1idXR0b246aG92ZXIsCi5tb2RlLWNhcmQ6aG92ZXIsCi5zaGFwZS1idXR0b246aG92ZXIsCi5zbWFsbC1idXR0b246aG92ZXIsCi5sZXZlbC1idXR0b246aG92ZXIgewogIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKfQoKLmRhbmdlci1zb2Z0IHsKICBjb2xvcjogdmFyKC0tcmVkKTsKICBiYWNrZ3JvdW5kOiAjZmZmMmYwOwp9CgoucHJpbWFyeS1idXR0b24gewogIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLWJsdWUpLCB2YXIoLS1ibHVlLWRhcmspKTsKICBjb2xvcjogI2ZmZjsKICBib3gtc2hhZG93OiAwIDEycHggMjhweCByZ2JhKDM2LCA4NywgMjE0LCAwLjI4KTsKfQoKLnNlY29uZGFyeS1idXR0b24gewogIGJhY2tncm91bmQ6ICNmZmY7CiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbGluZSk7Cn0KCi5tYWluLXN0YWdlIHsKICBmbGV4OiAxOwogIGRpc3BsYXk6IGdyaWQ7CiAgbWluLWhlaWdodDogMDsKfQoKLnN0YXJ0LXNjcmVlbiwKLnNjcmVlbi1ncmlkLAoudHJhaW5pbmctbGF5b3V0LAoubGFiLWxheW91dCwKLnJlcG9ydC1sYXlvdXQgewogIGRpc3BsYXk6IGdyaWQ7CiAgZ2FwOiB2YXIoLS1zcGFjZSk7Cn0KCi5zdGFydC1zY3JlZW4gewogIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDAuOTVmcikgbWlubWF4KDMwMHB4LCAxLjA1ZnIpOwogIGFsaWduLWl0ZW1zOiBzdHJldGNoOwp9CgouaGVyby1jYXJkLAoucGFuZWwsCi50YXNrLWNhcmQsCi5jYW52YXMtY2FyZCwKLnNjb3JlLWNhcmQsCi5mZWVkYmFjay1wYW5lbCB7CiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk0KTsKICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1saW5lKTsKICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMteGwpOwogIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdyk7Cn0KCi5oZXJvLWNhcmQgewogIHBhZGRpbmc6IGNsYW1wKDIycHgsIDV2dywgNTBweCk7CiAgZGlzcGxheTogZ3JpZDsKICBhbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgZ2FwOiAxOHB4Owp9CgouaGVyby1jYXJkIHAgewogIGNvbG9yOiB2YXIoLS1tdXRlZCk7CiAgZm9udC1zaXplOiBjbGFtcCgxcmVtLCAxLjZ2dywgMS4xOHJlbSk7CiAgbGluZS1oZWlnaHQ6IDEuNTU7Cn0KCi5xdWljay1ncmlkIHsKICBkaXNwbGF5OiBncmlkOwogIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIG1pbm1heCgwLCAxZnIpKTsKICBnYXA6IDE0cHg7Cn0KCi5tb2RlLWNhcmQgewogIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy14bCk7CiAgYmFja2dyb3VuZDogI2ZmZjsKICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1saW5lKTsKICBtaW4taGVpZ2h0OiAxNjBweDsKICBkaXNwbGF5OiBncmlkOwogIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKICBnYXA6IDEwcHg7CiAgdGV4dC1hbGlnbjogc3RhcnQ7CiAgcGFkZGluZzogMjJweDsKfQoKLm1vZGUtY2FyZCBzdHJvbmcgewogIGNvbG9yOiB2YXIoLS1pbmspOwogIGZvbnQtc2l6ZTogMS4ycmVtOwp9CgoubW9kZS1jYXJkIHNwYW4gewogIGNvbG9yOiB2YXIoLS1tdXRlZCk7CiAgbGluZS1oZWlnaHQ6IDEuMzU7Cn0KCi5mZWVkYmFjay1wYW5lbCB7CiAgcGFkZGluZzogMTRweCAxOHB4OwogIG1pbi1oZWlnaHQ6IDU0cHg7CiAgY29sb3I6IHZhcigtLWluayk7CiAgZm9udC13ZWlnaHQ6IDc1MDsKfQoKLmZlZWRiYWNrLXBhbmVsLmdvb2QgewogIGJvcmRlci1jb2xvcjogcmdiYSgxMywgMTIzLCA5NSwgMC4yOCk7CiAgYmFja2dyb3VuZDogI2VmZmNmNzsKICBjb2xvcjogIzA3NWY0OTsKfQoKLmZlZWRiYWNrLXBhbmVsLndhcm4gewogIGJvcmRlci1jb2xvcjogcmdiYSgxNjcsIDkwLCAwLCAwLjI4KTsKICBiYWNrZ3JvdW5kOiAjZmZmN2U4OwogIGNvbG9yOiAjN2E0MzAwOwp9CgouZmVlZGJhY2stcGFuZWwuaW5mbyB7CiAgYm9yZGVyLWNvbG9yOiByZ2JhKDM2LCA4NywgMjE0LCAwLjI2KTsKICBiYWNrZ3JvdW5kOiAjZjBmNWZmOwogIGNvbG9yOiB2YXIoLS1ibHVlLWRhcmspOwp9CgoucGFuZWwgewogIHBhZGRpbmc6IGNsYW1wKDE4cHgsIDIuOHZ3LCAzMHB4KTsKICBkaXNwbGF5OiBncmlkOwogIGdhcDogMTZweDsKfQoKLnBhbmVsLWhlYWRlciB7CiAgZGlzcGxheTogZ3JpZDsKICBnYXA6IDhweDsKfQoKLnBhbmVsLWhlYWRlciBwLAoudGFzay10ZXh0LAouZXhwbGFpbi10ZXh0LAouaGVscGVyLXRleHQgewogIGNvbG9yOiB2YXIoLS1tdXRlZCk7CiAgbGluZS1oZWlnaHQ6IDEuNDg7Cn0KCi5tZW51LWdyaWQgewogIGRpc3BsYXk6IGdyaWQ7CiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMywgbWlubWF4KDIzMHB4LCAxZnIpKTsKICBnYXA6IDE0cHg7Cn0KCi5zaGFwZS1waWNrZXIgewogIGRpc3BsYXk6IGZsZXg7CiAgZmxleC13cmFwOiB3cmFwOwogIGdhcDogOHB4Owp9Cgouc2hhcGUtYnV0dG9uIHsKICBiYWNrZ3JvdW5kOiAjZmZmOwogIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWxpbmUpOwogIGNvbG9yOiB2YXIoLS1pbmspOwp9Cgouc2hhcGUtYnV0dG9uLmFjdGl2ZSwKLmxldmVsLWJ1dHRvbi5hY3RpdmUgewogIGJhY2tncm91bmQ6IHZhcigtLWJsdWUpOwogIGNvbG9yOiAjZmZmOwogIGJvcmRlci1jb2xvcjogdmFyKC0tYmx1ZSk7Cn0KCi5sYWItbGF5b3V0IHsKICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgzMTBweCwgMC44ZnIpIG1pbm1heCg0MjBweCwgMS4yZnIpOwp9CgouY2FudmFzLWNhcmQgewogIHBhZGRpbmc6IDE2cHg7CiAgZGlzcGxheTogZ3JpZDsKICBnYXA6IDEycHg7CiAgbWluLWhlaWdodDogNDMwcHg7Cn0KCi5nZW8tY2FudmFzIHsKICB3aWR0aDogMTAwJTsKICBtaW4taGVpZ2h0OiAzNjBweDsKICBoZWlnaHQ6IGNsYW1wKDM2MHB4LCA0OHZoLCA1MjBweCk7CiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTsKICBiYWNrZ3JvdW5kOgogICAgbGluZWFyLWdyYWRpZW50KDkwZGVnLCByZ2JhKDM2LCA4NywgMjE0LCAwLjA2KSAxcHgsIHRyYW5zcGFyZW50IDFweCksCiAgICBsaW5lYXItZ3JhZGllbnQoMGRlZywgcmdiYSgzNiwgODcsIDIxNCwgMC4wNikgMXB4LCB0cmFuc3BhcmVudCAxcHgpLAogICAgI2ZiZmRmZjsKICBiYWNrZ3JvdW5kLXNpemU6IDI0cHggMjRweDsKICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1saW5lKTsKfQoKLmNvbnRyb2wtbGlzdCB7CiAgZGlzcGxheTogZ3JpZDsKICBnYXA6IDE0cHg7Cn0KCi5wYXJhbS1jb250cm9sIHsKICBkaXNwbGF5OiBncmlkOwogIGdhcDogOHB4OwogIHBhZGRpbmc6IDE0cHg7CiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbGluZSk7CiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTsKICBiYWNrZ3JvdW5kOiB2YXIoLS1zb2Z0LTIpOwp9CgoucGFyYW0tcm93IHsKICBkaXNwbGF5OiBmbGV4OwogIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogIGdhcDogMTRweDsKfQoKLnBhcmFtLXJvdyBsYWJlbCB7CiAgZm9udC13ZWlnaHQ6IDgwMDsKfQoKLnZhbHVlLWJhZGdlIHsKICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICBtaW4td2lkdGg6IDc4cHg7CiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgcGFkZGluZzogNnB4IDEwcHg7CiAgYmFja2dyb3VuZDogI2ZmZjsKICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1saW5lKTsKICBmb250LXdlaWdodDogODUwOwogIGNvbG9yOiB2YXIoLS1ibHVlLWRhcmspOwp9Cgouc2xpZGVyLXJvdyB7CiAgZGlzcGxheTogZ3JpZDsKICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDQ2cHggbWlubWF4KDEyMHB4LCAxZnIpIDQ2cHg7CiAgZ2FwOiA4cHg7CiAgYWxpZ24taXRlbXM6IGNlbnRlcjsKfQoKLnNtYWxsLWJ1dHRvbiB7CiAgcGFkZGluZzogOHB4IDEwcHg7CiAgbWluLWhlaWdodDogNDJweDsKICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpOwp9CgppbnB1dFt0eXBlPSJyYW5nZSJdIHsKICB3aWR0aDogMTAwJTsKICBhY2NlbnQtY29sb3I6IHZhcigtLWJsdWUpOwogIG1pbi1oZWlnaHQ6IDQwcHg7Cn0KCi5mb3JtdWxhLXN0YWNrLAouc2NvcmUtZ3JpZCwKLmluc2lnaHQtZ3JpZCB7CiAgZGlzcGxheTogZ3JpZDsKICBnYXA6IDEwcHg7Cn0KCi5mb3JtdWxhLWxpbmUsCi5pbnNpZ2h0LWNhcmQsCi5zY29yZS1jYXJkIHsKICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1saW5lKTsKICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpOwogIGJhY2tncm91bmQ6ICNmZmY7CiAgcGFkZGluZzogMTRweDsKICBkaXNwbGF5OiBncmlkOwogIGdhcDogNnB4Owp9CgouZm9ybXVsYS1saW5lIHN0cm9uZyB7CiAgY29sb3I6IHZhcigtLWJsdWUtZGFyayk7Cn0KCi5mb3JtdWxhLWxpbmUgY29kZSB7CiAgZm9udC1mYW1pbHk6IHVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlOwogIGZvbnQtc2l6ZTogMS4wMnJlbTsKICBiYWNrZ3JvdW5kOiB2YXIoLS1zb2Z0KTsKICBib3JkZXItcmFkaXVzOiAxMHB4OwogIHBhZGRpbmc6IDZweCA4cHg7CiAgY29sb3I6IHZhcigtLWluayk7CiAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKfQoKLnRyYWluaW5nLWxheW91dCB7CiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMzIwcHgsIDAuOWZyKSBtaW5tYXgoNDIwcHgsIDEuMWZyKTsKICBhbGlnbi1pdGVtczogc3RhcnQ7Cn0KCi50YXNrLWNhcmQgewogIHBhZGRpbmc6IGNsYW1wKDE4cHgsIDN2dywgMzBweCk7CiAgZGlzcGxheTogZ3JpZDsKICBnYXA6IDE2cHg7Cn0KCi50YXNrLW1ldGEgewogIGRpc3BsYXk6IGZsZXg7CiAgZmxleC13cmFwOiB3cmFwOwogIGdhcDogOHB4Owp9CgouY2hvaWNlLWdyaWQgewogIGRpc3BsYXk6IGdyaWQ7CiAgZ2FwOiAxMHB4Owp9CgouY2hvaWNlLWJ1dHRvbiB7CiAgd2lkdGg6IDEwMCU7CiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTsKICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1saW5lKTsKICBiYWNrZ3JvdW5kOiAjZmZmOwogIGNvbG9yOiB2YXIoLS1pbmspOwogIHRleHQtYWxpZ246IHN0YXJ0OwogIGRpc3BsYXk6IGZsZXg7CiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogIGdhcDogMTJweDsKfQoKLmNob2ljZS1idXR0b24ucmVqZWN0ZWQgewogIG9wYWNpdHk6IDAuNTU7CiAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Cn0KCi5jaG9pY2UtYnV0dG9uLmNvcnJlY3QgewogIGJhY2tncm91bmQ6ICNlYWZhZjQ7CiAgYm9yZGVyLWNvbG9yOiByZ2JhKDEzLCAxMjMsIDk1LCAwLjM1KTsKICBjb2xvcjogIzA3NWY0OTsKfQoKLmNob2ljZS1idXR0b24ud3JvbmctZmluYWwgewogIGJhY2tncm91bmQ6ICNmZmYyZjA7CiAgYm9yZGVyLWNvbG9yOiByZ2JhKDE4MCwgMzUsIDI0LCAwLjMyKTsKICBjb2xvcjogdmFyKC0tcmVkKTsKfQoKLmNob2ljZS1sZXR0ZXIgewogIGRpc3BsYXk6IGlubGluZS1ncmlkOwogIHBsYWNlLWl0ZW1zOiBjZW50ZXI7CiAgZmxleDogMCAwIDMycHg7CiAgd2lkdGg6IDMycHg7CiAgaGVpZ2h0OiAzMnB4OwogIGJvcmRlci1yYWRpdXM6IDUwJTsKICBiYWNrZ3JvdW5kOiB2YXIoLS1zb2Z0KTsKICBjb2xvcjogdmFyKC0tYmx1ZS1kYXJrKTsKICBmb250LXdlaWdodDogOTAwOwp9CgoubmV4dC1yb3csCi5sZXZlbC1yb3cgewogIGRpc3BsYXk6IGZsZXg7CiAgZmxleC13cmFwOiB3cmFwOwogIGdhcDogOHB4Owp9CgoubGV2ZWwtYnV0dG9uIHsKICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1saW5lKTsKICBiYWNrZ3JvdW5kOiAjZmZmOwogIGNvbG9yOiB2YXIoLS1pbmspOwp9CgoubGV2ZWwtYnV0dG9uLmFjdGl2ZSB7CiAgY29sb3I6ICNmZmY7Cn0KCi5wcm9ncmVzcy10cmFjayB7CiAgaGVpZ2h0OiAxMnB4OwogIGJhY2tncm91bmQ6ICNlN2VjZjY7CiAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLnByb2dyZXNzLWZpbGwgewogIGhlaWdodDogMTAwJTsKICB3aWR0aDogMCU7CiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCB2YXIoLS1ibHVlKSwgdmFyKC0tZ3JlZW4pKTsKICBib3JkZXItcmFkaXVzOiBpbmhlcml0Owp9Cgouc2NvcmUtZ3JpZCB7CiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgbWlubWF4KDIyMHB4LCAxZnIpKTsKfQoKLnNraWxsLWNhcmQgewogIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWxpbmUpOwogIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7CiAgcGFkZGluZzogMTZweDsKICBiYWNrZ3JvdW5kOiAjZmZmOwogIGRpc3BsYXk6IGdyaWQ7CiAgZ2FwOiAxMHB4Owp9Cgouc2tpbGwtY2FyZCBzdHJvbmcgewogIGZvbnQtc2l6ZTogMS4xcmVtOwp9CgouYmFkZ2UgewogIGRpc3BsYXk6IGlubGluZS1mbGV4OwogIHdpZHRoOiBmaXQtY29udGVudDsKICBib3JkZXItcmFkaXVzOiA5OTlweDsKICBwYWRkaW5nOiA1cHggOXB4OwogIGJhY2tncm91bmQ6IHZhcigtLXNvZnQpOwogIGNvbG9yOiB2YXIoLS1ibHVlLWRhcmspOwogIGZvbnQtd2VpZ2h0OiA4MDA7CiAgZm9udC1zaXplOiAwLjgycmVtOwp9CgouY2FudmFzLW5vdGUgewogIGNvbG9yOiB2YXIoLS1tdXRlZCk7CiAgZm9udC1zaXplOiAwLjkycmVtOwogIGxpbmUtaGVpZ2h0OiAxLjM1Owp9CgouaGlkZGVuIHsKICBkaXNwbGF5OiBub25lOwp9CgpAbWVkaWEgKG1heC13aWR0aDogMTEwMHB4KSB7CiAgLmFwcC1oZWFkZXIsCiAgLnN0YXJ0LXNjcmVlbiwKICAubGFiLWxheW91dCwKICAudHJhaW5pbmctbGF5b3V0IHsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogIH0KCiAgLnRvb2xiYXIsCiAgLnNjb3JlLXN0cmlwIHsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICB9CgogIC5tZW51LWdyaWQgewogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgbWlubWF4KDIyMHB4LCAxZnIpKTsKICB9Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiA3MjBweCkgewogIC5hcHAtc2hlbGwgewogICAgcGFkZGluZzogMTBweDsKICAgIGdhcDogMTBweDsKICB9CgogIC5hcHAtaGVhZGVyIHsKICAgIGJvcmRlci1yYWRpdXM6IDIycHg7CiAgfQoKICAucXVpY2stZ3JpZCwKICAubWVudS1ncmlkLAogIC5zY29yZS1ncmlkIHsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogIH0KCiAgLm1vZGUtY2FyZCB7CiAgICBtaW4taGVpZ2h0OiAxMThweDsKICB9CgogIC5nZW8tY2FudmFzIHsKICAgIG1pbi1oZWlnaHQ6IDMwMHB4OwogICAgaGVpZ2h0OiA0MnZoOwogIH0KCiAgLmNhbnZhcy1jYXJkIHsKICAgIG1pbi1oZWlnaHQ6IGF1dG87CiAgfQoKICAuc2xpZGVyLXJvdyB7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDQycHggbWlubWF4KDEwMHB4LCAxZnIpIDQycHg7CiAgfQoKICAudG9vbC1idXR0b24sCiAgLnByaW1hcnktYnV0dG9uLAogIC5zZWNvbmRhcnktYnV0dG9uLAogIC5jaG9pY2UtYnV0dG9uLAogIC5tb2RlLWNhcmQsCiAgLnNoYXBlLWJ1dHRvbiwKICAuc21hbGwtYnV0dG9uLAogIC5sZXZlbC1idXR0b24gewogICAgbWluLWhlaWdodDogNDhweDsKICB9Cn0KCkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7CiAgLnRvb2wtYnV0dG9uLAogIC5wcmltYXJ5LWJ1dHRvbiwKICAuc2Vjb25kYXJ5LWJ1dHRvbiwKICAuY2hvaWNlLWJ1dHRvbiwKICAubW9kZS1jYXJkLAogIC5zaGFwZS1idXR0b24sCiAgLnNtYWxsLWJ1dHRvbiwKICAubGV2ZWwtYnV0dG9uIHsKICAgIHRyYW5zaXRpb246IG5vbmU7CiAgfQoKICAudG9vbC1idXR0b246aG92ZXIsCiAgLnByaW1hcnktYnV0dG9uOmhvdmVyLAogIC5zZWNvbmRhcnktYnV0dG9uOmhvdmVyLAogIC5jaG9pY2UtYnV0dG9uOmhvdmVyLAogIC5tb2RlLWNhcmQ6aG92ZXIsCiAgLnNoYXBlLWJ1dHRvbjpob3ZlciwKICAuc21hbGwtYnV0dG9uOmhvdmVyLAogIC5sZXZlbC1idXR0b246aG92ZXIgewogICAgdHJhbnNmb3JtOiBub25lOwogIH0KfQoKPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KICA8ZGl2IGlkPSJnYW1lLXJvb3QiIGNsYXNzPSJhcHAtc2hlbGwiPgogICAgPGhlYWRlciBjbGFzcz0iYXBwLWhlYWRlciIgYXJpYS1sYWJlbD0iU3BpZWxzdGV1ZXJ1bmciPgogICAgICA8ZGl2IGNsYXNzPSJicmFuZC1ibG9jayI+CiAgICAgICAgPHAgY2xhc3M9ImV5ZWJyb3ciPk1hdGhlbWF0aWsgwrcgS2xhc3NlIDUvNjwvcD4KICAgICAgICA8aDE+R2VvTWVpc3RlcjwvaDE+CiAgICAgICAgPHAgY2xhc3M9InN1YnRpdGxlIj5GbMOkY2hlbiDCtyBVbWZhbmcgwrcgVm9sdW1lbjwvcD4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNjb3JlLXN0cmlwIiBhcmlhLWxhYmVsPSJQdW5rdGXDvGJlcnNpY2h0Ij4KICAgICAgICA8c3BhbiBjbGFzcz0ic2NvcmUtcGlsbCI+PHNwYW4+VW1mYW5nPC9zcGFuPjxzdHJvbmcgaWQ9InNjb3JlLXVtZmFuZyI+MDwvc3Ryb25nPjwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0ic2NvcmUtcGlsbCI+PHNwYW4+RmzDpGNoZTwvc3Bhbj48c3Ryb25nIGlkPSJzY29yZS1mbGFlY2hlIj4wPC9zdHJvbmc+PC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJzY29yZS1waWxsIj48c3Bhbj5Wb2x1bWVuPC9zcGFuPjxzdHJvbmcgaWQ9InNjb3JlLXZvbHVtZW4iPjA8L3N0cm9uZz48L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8bmF2IGNsYXNzPSJ0b29sYmFyIiBhcmlhLWxhYmVsPSJNZW7DvCI+CiAgICAgICAgPGJ1dHRvbiBpZD0iZnVsbHNjcmVlbi1idXR0b24iIGNsYXNzPSJ0b29sLWJ1dHRvbiIgdHlwZT0iYnV0dG9uIj5Wb2xsYmlsZDwvYnV0dG9uPgogICAgICAgIDxidXR0b24gaWQ9Im1lbnUtYnV0dG9uIiBjbGFzcz0idG9vbC1idXR0b24iIHR5cGU9ImJ1dHRvbiI+TWVuw7w8L2J1dHRvbj4KICAgICAgICA8YnV0dG9uIGlkPSJyZXNldC1idXR0b24iIGNsYXNzPSJ0b29sLWJ1dHRvbiBkYW5nZXItc29mdCIgdHlwZT0iYnV0dG9uIj5OZXUgc3RhcnRlbjwvYnV0dG9uPgogICAgICA8L25hdj4KICAgIDwvaGVhZGVyPgoKICAgIDxtYWluIGlkPSJtYWluLXN0YWdlIiBjbGFzcz0ibWFpbi1zdGFnZSIgdGFiaW5kZXg9Ii0xIj4KICAgICAgPHNlY3Rpb24gaWQ9InN0YXJ0LXNjcmVlbiIgY2xhc3M9InN0YXJ0LXNjcmVlbiIgYXJpYS1sYWJlbGxlZGJ5PSJzdGFydC10aXRsZSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVyby1jYXJkIj4KICAgICAgICAgIDxwIGNsYXNzPSJleWVicm93Ij5JbnRlcmFrdGl2ZXMgR2VvbWV0cmllLUxlcm5zcGllbDwvcD4KICAgICAgICAgIDxoMiBpZD0ic3RhcnQtdGl0bGUiPkVudGRlY2tlLCB3aWUgRm9ybWVsbiBsZWJlbmRpZyB3ZXJkZW4uPC9oMj4KICAgICAgICAgIDxwPgogICAgICAgICAgICBWZXLDpG5kZXJlIFNlaXRlbmzDpG5nZW4sIEjDtmhlbiB1bmQgUmFkaWVuLiBEaWUgWmVpY2hudW5nLCBkaWUgRm9ybWVsLAogICAgICAgICAgICBkZXIgUmVjaGVud2VnIHVuZCBkYXMgRXJnZWJuaXMgcGFzc2VuIHNpY2ggc29mb3J0IGFuLgogICAgICAgICAgPC9wPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0icHJpbWFyeS1idXR0b24iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Rpb249InNjcmVlbiIgZGF0YS1zY3JlZW49ImxhYiI+Rm9ybWVsLUxhYm9yIHN0YXJ0ZW48L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJxdWljay1ncmlkIiBhcmlhLWxhYmVsPSJMZXJud2VnZSI+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJtb2RlLWNhcmQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Rpb249InNjcmVlbiIgZGF0YS1zY3JlZW49ImV4cGxvcmVyIj4KICAgICAgICAgICAgPHN0cm9uZz5Gb3JtZW4gZW50ZGVja2VuPC9zdHJvbmc+CiAgICAgICAgICAgIDxzcGFuPlplaWNobnVuZ2VuLCBNYcOfbGluaWVuIHVuZCBHaXR0ZXIgdmVyc3RlaGVuLjwvc3Bhbj4KICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibW9kZS1jYXJkIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0aW9uPSJ0cmFpbmluZyIgZGF0YS10cmFpbmluZz0iVW1mYW5nIj4KICAgICAgICAgICAgPHN0cm9uZz5VbWZhbmcgdHJhaW5pZXJlbjwvc3Ryb25nPgogICAgICAgICAgICA8c3Bhbj5SYW5kbMOkbmdlbiBiZXJlY2huZW4gdW5kIEVpbmhlaXRlbiBwcsO8ZmVuLjwvc3Bhbj4KICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibW9kZS1jYXJkIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0aW9uPSJ0cmFpbmluZyIgZGF0YS10cmFpbmluZz0iRmzDpGNoZSI+CiAgICAgICAgICAgIDxzdHJvbmc+RmzDpGNoZW4gdHJhaW5pZXJlbjwvc3Ryb25nPgogICAgICAgICAgICA8c3Bhbj5RdWFkcmF0LCBSZWNodGVjaywgRHJlaWVjaywgVHJhcGV6IHVuZCBtZWhyLjwvc3Bhbj4KICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibW9kZS1jYXJkIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0aW9uPSJ0cmFpbmluZyIgZGF0YS10cmFpbmluZz0iVm9sdW1lbiI+CiAgICAgICAgICAgIDxzdHJvbmc+Vm9sdW1lbiB0cmFpbmllcmVuPC9zdHJvbmc+CiAgICAgICAgICAgIDxzcGFuPlfDvHJmZWwsIFF1YWRlciwgUHJpc21hIHVuZCBFcndlaXRlcnVuZ2VuLjwvc3Bhbj4KICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L3NlY3Rpb24+CiAgICA8L21haW4+CgogICAgPGFzaWRlIGlkPSJmZWVkYmFjay1wYW5lbCIgY2xhc3M9ImZlZWRiYWNrLXBhbmVsIiBhcmlhLWxpdmU9InBvbGl0ZSI+CiAgICAgIFdpbGxrb21tZW4gaW0gR2VvTWVpc3Rlci4gV8OkaGxlIGVpbmVuIExlcm53ZWcuCiAgICA8L2FzaWRlPgogIDwvZGl2PgogIAo8c2NyaXB0PgondXNlIHN0cmljdCc7CgooZnVuY3Rpb24gKCkgewogIGNvbnN0IHNraWxsTmFtZXMgPSBbJ1VtZmFuZycsICdGbMOkY2hlJywgJ1ZvbHVtZW4nLCAnRm9ybWVsbicsICdFaW5oZWl0ZW4nLCAnU3RyYXRlZ2llJ107CgogIGNvbnN0IHN0YXRlID0gewogICAgY3VycmVudFNjcmVlbjogJ21lbnUnLAogICAgdHJhaW5pbmdLaW5kOiAnVW1mYW5nJywKICAgIHNlbGVjdGVkU2hhcGVJZDogJ3JlY3RhbmdsZScsCiAgICBkaWZmaWN1bHR5OiAyLAogICAgY3VycmVudFRhc2s6IG51bGwsCiAgICB0YXNrU29sdmVkOiBmYWxzZSwKICAgIGF0dGVtcHRzOiAwLAogICAgZXhhbVJlbWFpbmluZzogMCwKICAgIGV4YW1Hb2FsOiAxMCwKICAgIHRvdGFsQW5zd2VyZWQ6IDAsCiAgICBjb3JyZWN0QW5zd2VyZWQ6IDAsCiAgICBzdHJlYWs6IDAsCiAgICB3aWRlVmlldzogZmFsc2UsCiAgICByZWplY3RlZENob2ljZXM6IFtdLAogICAgc2NvcmVzOiB7CiAgICAgICdVbWZhbmcnOiAwLAogICAgICAnRmzDpGNoZSc6IDAsCiAgICAgICdWb2x1bWVuJzogMCwKICAgICAgJ0Zvcm1lbG4nOiAwLAogICAgICAnRWluaGVpdGVuJzogMCwKICAgICAgJ1N0cmF0ZWdpZSc6IDAKICAgIH0sCiAgICBzaGFwZVBhcmFtczoge30KICB9OwoKICBjb25zdCBlbGVtZW50cyA9IHsKICAgIHJvb3Q6IGJ5SWQoJ2dhbWUtcm9vdCcpLAogICAgbWFpbjogYnlJZCgnbWFpbi1zdGFnZScpLAogICAgZmVlZGJhY2s6IGJ5SWQoJ2ZlZWRiYWNrLXBhbmVsJyksCiAgICBmdWxsOiBieUlkKCdmdWxsc2NyZWVuLWJ1dHRvbicpLAogICAgbWVudTogYnlJZCgnbWVudS1idXR0b24nKSwKICAgIHJlc2V0OiBieUlkKCdyZXNldC1idXR0b24nKSwKICAgIHNjb3JlVW1mYW5nOiBieUlkKCdzY29yZS11bWZhbmcnKSwKICAgIHNjb3JlRmxhZWNoZTogYnlJZCgnc2NvcmUtZmxhZWNoZScpLAogICAgc2NvcmVWb2x1bWVuOiBieUlkKCdzY29yZS12b2x1bWVuJykKICB9OwoKICBjb25zdCBzaGFwZUNhdGFsb2cgPSBbCiAgICB7CiAgICAgIGlkOiAnc3F1YXJlJywKICAgICAgbmFtZTogJ1F1YWRyYXQnLAogICAgICBraW5kOiAnRmzDpGNoZScsCiAgICAgIG1hcms6ICdLZXJuJywKICAgICAgcGFyYW1zOiBbCiAgICAgICAgeyBrZXk6ICdhJywgbGFiZWw6ICdTZWl0ZW5sw6RuZ2UgYScsIG1pbjogMSwgbWF4OiAxMiwgc3RlcDogMSwgdW5pdDogJ2NtJywgaW5pdGlhbDogNSB9CiAgICAgIF0sCiAgICAgIGhpbnQ6ICdBbGxlIHZpZXIgU2VpdGVuIHNpbmQgZ2xlaWNoIGxhbmcuIEJlaW0gUXVhZHJhdCByZWljaHQgZWluZSBMw6RuZ2UgYXVzLicsCiAgICAgIGZvcm11bGFzOiBzcXVhcmVGb3JtdWxhcwogICAgfSwKICAgIHsKICAgICAgaWQ6ICdyZWN0YW5nbGUnLAogICAgICBuYW1lOiAnUmVjaHRlY2snLAogICAgICBraW5kOiAnRmzDpGNoZScsCiAgICAgIG1hcms6ICdLZXJuJywKICAgICAgcGFyYW1zOiBbCiAgICAgICAgeyBrZXk6ICdhJywgbGFiZWw6ICdMw6RuZ2UgYScsIG1pbjogMiwgbWF4OiAxNiwgc3RlcDogMSwgdW5pdDogJ2NtJywgaW5pdGlhbDogOCB9LAogICAgICAgIHsga2V5OiAnYicsIGxhYmVsOiAnQnJlaXRlIGInLCBtaW46IDEsIG1heDogMTAsIHN0ZXA6IDEsIHVuaXQ6ICdjbScsIGluaXRpYWw6IDUgfQogICAgICBdLAogICAgICBoaW50OiAnRGVyIFVtZmFuZyBpc3QgZGVyIFJhbmQuIERlciBGbMOkY2hlbmluaGFsdCB6w6RobHQgZGllIEvDpHN0Y2hlbiBpbSBJbm5lcmVuLicsCiAgICAgIGZvcm11bGFzOiByZWN0YW5nbGVGb3JtdWxhcwogICAgfSwKICAgIHsKICAgICAgaWQ6ICd0cmlhbmdsZScsCiAgICAgIG5hbWU6ICdEcmVpZWNrJywKICAgICAga2luZDogJ0Zsw6RjaGUnLAogICAgICBtYXJrOiAnS2VybicsCiAgICAgIHBhcmFtczogWwogICAgICAgIHsga2V5OiAnZycsIGxhYmVsOiAnR3J1bmRzZWl0ZSBnJywgbWluOiAzLCBtYXg6IDE2LCBzdGVwOiAxLCB1bml0OiAnY20nLCBpbml0aWFsOiA5IH0sCiAgICAgICAgeyBrZXk6ICdoJywgbGFiZWw6ICdIw7ZoZSBoJywgbWluOiAyLCBtYXg6IDEyLCBzdGVwOiAxLCB1bml0OiAnY20nLCBpbml0aWFsOiA2IH0sCiAgICAgICAgeyBrZXk6ICdzMScsIGxhYmVsOiAnU2VpdGUgYScsIG1pbjogMywgbWF4OiAxNSwgc3RlcDogMSwgdW5pdDogJ2NtJywgaW5pdGlhbDogNyB9LAogICAgICAgIHsga2V5OiAnczInLCBsYWJlbDogJ1NlaXRlIGInLCBtaW46IDMsIG1heDogMTUsIHN0ZXA6IDEsIHVuaXQ6ICdjbScsIGluaXRpYWw6IDggfQogICAgICBdLAogICAgICBoaW50OiAnRWluIERyZWllY2sgaXN0IGJlaSBnbGVpY2hlciBHcnVuZHNlaXRlIHVuZCBIw7ZoZSBoYWxiIHNvIGdyb8OfIHdpZSBlaW4gUmVjaHRlY2suJywKICAgICAgZm9ybXVsYXM6IHRyaWFuZ2xlRm9ybXVsYXMKICAgIH0sCiAgICB7CiAgICAgIGlkOiAncGFyYWxsZWxvZ3JhbScsCiAgICAgIG5hbWU6ICdQYXJhbGxlbG9ncmFtbScsCiAgICAgIGtpbmQ6ICdGbMOkY2hlJywKICAgICAgbWFyazogJ0tlcm4nLAogICAgICBwYXJhbXM6IFsKICAgICAgICB7IGtleTogJ2cnLCBsYWJlbDogJ0dydW5kc2VpdGUgZycsIG1pbjogMywgbWF4OiAxNiwgc3RlcDogMSwgdW5pdDogJ2NtJywgaW5pdGlhbDogOSB9LAogICAgICAgIHsga2V5OiAnaCcsIGxhYmVsOiAnSMO2aGUgaCcsIG1pbjogMiwgbWF4OiAxMCwgc3RlcDogMSwgdW5pdDogJ2NtJywgaW5pdGlhbDogNSB9LAogICAgICAgIHsga2V5OiAncycsIGxhYmVsOiAnU2NocsOkZ3NlaXRlIHMnLCBtaW46IDMsIG1heDogMTQsIHN0ZXA6IDEsIHVuaXQ6ICdjbScsIGluaXRpYWw6IDYgfQogICAgICBdLAogICAgICBoaW50OiAnRsO8ciBkaWUgRmzDpGNoZSB6w6RobHQgZGllIHNlbmtyZWNodGUgSMO2aGUsIG5pY2h0IGRpZSBzY2hyw6RnZSBTZWl0ZS4nLAogICAgICBmb3JtdWxhczogcGFyYWxsZWxvZ3JhbUZvcm11bGFzCiAgICB9LAogICAgewogICAgICBpZDogJ3Job21idXMnLAogICAgICBuYW1lOiAnUmF1dGUnLAogICAgICBraW5kOiAnRmzDpGNoZScsCiAgICAgIG1hcms6ICdLZXJuJywKICAgICAgcGFyYW1zOiBbCiAgICAgICAgeyBrZXk6ICdhJywgbGFiZWw6ICdTZWl0ZW5sw6RuZ2UgYScsIG1pbjogMywgbWF4OiAxNCwgc3RlcDogMSwgdW5pdDogJ2NtJywgaW5pdGlhbDogNiB9LAogICAgICAgIHsga2V5OiAnaCcsIGxhYmVsOiAnSMO2aGUgaCcsIG1pbjogMiwgbWF4OiAxMCwgc3RlcDogMSwgdW5pdDogJ2NtJywgaW5pdGlhbDogNCB9CiAgICAgIF0sCiAgICAgIGhpbnQ6ICdEaWUgUmF1dGUgaGF0IHZpZXIgZ2xlaWNoIGxhbmdlIFNlaXRlbi4gRGllIEZsw6RjaGUgbnV0enQgU2VpdGVubMOkbmdlIG1hbCBIw7ZoZS4nLAogICAgICBmb3JtdWxhczogcmhvbWJ1c0Zvcm11bGFzCiAgICB9LAogICAgewogICAgICBpZDogJ3RyYXBlem9pZCcsCiAgICAgIG5hbWU6ICdUcmFwZXonLAogICAgICBraW5kOiAnRmzDpGNoZScsCiAgICAgIG1hcms6ICdLZXJuJywKICAgICAgcGFyYW1zOiBbCiAgICAgICAgeyBrZXk6ICdhJywgbGFiZWw6ICd1bnRlcmUgU2VpdGUgYScsIG1pbjogNSwgbWF4OiAxOCwgc3RlcDogMSwgdW5pdDogJ2NtJywgaW5pdGlhbDogMTIgfSwKICAgICAgICB7IGtleTogJ2MnLCBsYWJlbDogJ29iZXJlIFNlaXRlIGMnLCBtaW46IDIsIG1heDogMTQsIHN0ZXA6IDEsIHVuaXQ6ICdjbScsIGluaXRpYWw6IDcgfSwKICAgICAgICB7IGtleTogJ2gnLCBsYWJlbDogJ0jDtmhlIGgnLCBtaW46IDIsIG1heDogMTAsIHN0ZXA6IDEsIHVuaXQ6ICdjbScsIGluaXRpYWw6IDUgfSwKICAgICAgICB7IGtleTogJ2InLCBsYWJlbDogJ1NlaXRlIGInLCBtaW46IDMsIG1heDogMTQsIHN0ZXA6IDEsIHVuaXQ6ICdjbScsIGluaXRpYWw6IDYgfSwKICAgICAgICB7IGtleTogJ2QnLCBsYWJlbDogJ1NlaXRlIGQnLCBtaW46IDMsIG1heDogMTQsIHN0ZXA6IDEsIHVuaXQ6ICdjbScsIGluaXRpYWw6IDYgfQogICAgICBdLAogICAgICBoaW50OiAnQmVpbSBUcmFwZXogd2VyZGVuIGRpZSBiZWlkZW4gcGFyYWxsZWxlbiBTZWl0ZW4gZ2VtaXR0ZWx0IHVuZCBtaXQgZGVyIEjDtmhlIG11bHRpcGxpemllcnQuJywKICAgICAgZm9ybXVsYXM6IHRyYXBlem9pZEZvcm11bGFzCiAgICB9LAogICAgewogICAgICBpZDogJ2NpcmNsZScsCiAgICAgIG5hbWU6ICdLcmVpcycsCiAgICAgIGtpbmQ6ICdGbMOkY2hlJywKICAgICAgbWFyazogJ0Vyd2VpdGVydW5nJywKICAgICAgcGFyYW1zOiBbCiAgICAgICAgeyBrZXk6ICdyJywgbGFiZWw6ICdSYWRpdXMgcicsIG1pbjogMSwgbWF4OiAxMCwgc3RlcDogMSwgdW5pdDogJ2NtJywgaW5pdGlhbDogNCB9CiAgICAgIF0sCiAgICAgIGhpbnQ6ICdEZXIgUmFkaXVzIGdlaHQgdm9tIE1pdHRlbHB1bmt0IGJpcyB6dW0gUmFuZC4gRsO8ciBLbGFzc2UgNS82IGlzdCBkaWVzIGVpbiBBdXNibGljay4nLAogICAgICBmb3JtdWxhczogY2lyY2xlRm9ybXVsYXMKICAgIH0sCiAgICB7CiAgICAgIGlkOiAnY29tcG9zaXRlJywKICAgICAgbmFtZTogJ1p1c2FtbWVuZ2VzZXR6dGUgRmzDpGNoZScsCiAgICAgIGtpbmQ6ICdGbMOkY2hlJywKICAgICAgbWFyazogJ1N0cmF0ZWdpZScsCiAgICAgIHBhcmFtczogWwogICAgICAgIHsga2V5OiAnYScsIGxhYmVsOiAnR2VzYW10bMOkbmdlIGEnLCBtaW46IDYsIG1heDogMTgsIHN0ZXA6IDEsIHVuaXQ6ICdjbScsIGluaXRpYWw6IDEyIH0sCiAgICAgICAgeyBrZXk6ICdiJywgbGFiZWw6ICdHZXNhbXRow7ZoZSBiJywgbWluOiA1LCBtYXg6IDE0LCBzdGVwOiAxLCB1bml0OiAnY20nLCBpbml0aWFsOiA5IH0sCiAgICAgICAgeyBrZXk6ICdjJywgbGFiZWw6ICdBdXNzY2huaXR0IGMnLCBtaW46IDIsIG1heDogOCwgc3RlcDogMSwgdW5pdDogJ2NtJywgaW5pdGlhbDogNCB9LAogICAgICAgIHsga2V5OiAnZCcsIGxhYmVsOiAnQXVzc2Nobml0dCBkJywgbWluOiAyLCBtYXg6IDcsIHN0ZXA6IDEsIHVuaXQ6ICdjbScsIGluaXRpYWw6IDMgfQogICAgICBdLAogICAgICBoaW50OiAnWmVybGVnZSBkaWUgRmzDpGNoZSBpbiBlaW5mYWNoZSBSZWNodGVja2Ugb2RlciB6aWVoZSBlaW5lbiBBdXNzY2huaXR0IGFiLicsCiAgICAgIGZvcm11bGFzOiBjb21wb3NpdGVGb3JtdWxhcwogICAgfSwKICAgIHsKICAgICAgaWQ6ICdjdWJlJywKICAgICAgbmFtZTogJ1fDvHJmZWwnLAogICAgICBraW5kOiAnS8O2cnBlcicsCiAgICAgIG1hcms6ICdLZXJuJywKICAgICAgcGFyYW1zOiBbCiAgICAgICAgeyBrZXk6ICdhJywgbGFiZWw6ICdLYW50ZW5sw6RuZ2UgYScsIG1pbjogMSwgbWF4OiA5LCBzdGVwOiAxLCB1bml0OiAnY20nLCBpbml0aWFsOiA0IH0KICAgICAgXSwKICAgICAgaGludDogJ0VpbiBXw7xyZmVsIGhhdCBkcmVpIGdsZWljaGUgS2FudGVucmljaHR1bmdlbjogTMOkbmdlLCBCcmVpdGUgdW5kIEjDtmhlIHNpbmQgZ2xlaWNoLicsCiAgICAgIGZvcm11bGFzOiBjdWJlRm9ybXVsYXMKICAgIH0sCiAgICB7CiAgICAgIGlkOiAnY3Vib2lkJywKICAgICAgbmFtZTogJ1F1YWRlcicsCiAgICAgIGtpbmQ6ICdLw7ZycGVyJywKICAgICAgbWFyazogJ0tlcm4nLAogICAgICBwYXJhbXM6IFsKICAgICAgICB7IGtleTogJ2wnLCBsYWJlbDogJ0zDpG5nZSBsJywgbWluOiAyLCBtYXg6IDEyLCBzdGVwOiAxLCB1bml0OiAnY20nLCBpbml0aWFsOiA3IH0sCiAgICAgICAgeyBrZXk6ICdiJywgbGFiZWw6ICdCcmVpdGUgYicsIG1pbjogMiwgbWF4OiAxMCwgc3RlcDogMSwgdW5pdDogJ2NtJywgaW5pdGlhbDogNCB9LAogICAgICAgIHsga2V5OiAnaCcsIGxhYmVsOiAnSMO2aGUgaCcsIG1pbjogMSwgbWF4OiA5LCBzdGVwOiAxLCB1bml0OiAnY20nLCBpbml0aWFsOiA1IH0KICAgICAgXSwKICAgICAgaGludDogJ0JlaW0gUXVhZGVyIHdlcmRlbiBHcnVuZGZsw6RjaGUgdW5kIEjDtmhlIHp1IFfDvHJmZWxzY2hpY2h0ZW4gZ2VzdGFwZWx0LicsCiAgICAgIGZvcm11bGFzOiBjdWJvaWRGb3JtdWxhcwogICAgfSwKICAgIHsKICAgICAgaWQ6ICdwcmlzbScsCiAgICAgIG5hbWU6ICdEcmVpZWNrc3ByaXNtYScsCiAgICAgIGtpbmQ6ICdLw7ZycGVyJywKICAgICAgbWFyazogJ0tlcm4nLAogICAgICBwYXJhbXM6IFsKICAgICAgICB7IGtleTogJ2cnLCBsYWJlbDogJ0RyZWllY2tzZ3J1bmRzZWl0ZSBnJywgbWluOiAzLCBtYXg6IDEyLCBzdGVwOiAxLCB1bml0OiAnY20nLCBpbml0aWFsOiA4IH0sCiAgICAgICAgeyBrZXk6ICdoJywgbGFiZWw6ICdEcmVpZWNrc2jDtmhlIGgnLCBtaW46IDIsIG1heDogOSwgc3RlcDogMSwgdW5pdDogJ2NtJywgaW5pdGlhbDogNSB9LAogICAgICAgIHsga2V5OiAndCcsIGxhYmVsOiAnS8O2cnBlcmjDtmhlIGsnLCBtaW46IDIsIG1heDogMTIsIHN0ZXA6IDEsIHVuaXQ6ICdjbScsIGluaXRpYWw6IDYgfQogICAgICBdLAogICAgICBoaW50OiAnQmVpbSBQcmlzbWEgd2lyZCBlaW5lIEdydW5kZmzDpGNoZSBnbGVpY2htw6TDn2lnIGluIGRpZSBUaWVmZSBnZXNjaG9iZW4uJywKICAgICAgZm9ybXVsYXM6IHByaXNtRm9ybXVsYXMKICAgIH0sCiAgICB7CiAgICAgIGlkOiAnY3lsaW5kZXInLAogICAgICBuYW1lOiAnWnlsaW5kZXInLAogICAgICBraW5kOiAnS8O2cnBlcicsCiAgICAgIG1hcms6ICdFcndlaXRlcnVuZycsCiAgICAgIHBhcmFtczogWwogICAgICAgIHsga2V5OiAncicsIGxhYmVsOiAnUmFkaXVzIHInLCBtaW46IDEsIG1heDogOCwgc3RlcDogMSwgdW5pdDogJ2NtJywgaW5pdGlhbDogMyB9LAogICAgICAgIHsga2V5OiAnaCcsIGxhYmVsOiAnSMO2aGUgaCcsIG1pbjogMiwgbWF4OiAxMiwgc3RlcDogMSwgdW5pdDogJ2NtJywgaW5pdGlhbDogNyB9CiAgICAgIF0sCiAgICAgIGhpbnQ6ICdEZXIgWnlsaW5kZXIgaXN0IGVpbiBBdXNibGljazogS3JlaXNmbMOkY2hlIG1hbCBIw7ZoZS4nLAogICAgICBmb3JtdWxhczogY3lsaW5kZXJGb3JtdWxhcwogICAgfSwKICAgIHsKICAgICAgaWQ6ICdweXJhbWlkJywKICAgICAgbmFtZTogJ1B5cmFtaWRlJywKICAgICAga2luZDogJ0vDtnJwZXInLAogICAgICBtYXJrOiAnRXJ3ZWl0ZXJ1bmcnLAogICAgICBwYXJhbXM6IFsKICAgICAgICB7IGtleTogJ2EnLCBsYWJlbDogJ0dydW5ka2FudGUgYScsIG1pbjogMiwgbWF4OiAxMCwgc3RlcDogMSwgdW5pdDogJ2NtJywgaW5pdGlhbDogNiB9LAogICAgICAgIHsga2V5OiAnaCcsIGxhYmVsOiAnS8O2cnBlcmjDtmhlIGgnLCBtaW46IDIsIG1heDogMTIsIHN0ZXA6IDEsIHVuaXQ6ICdjbScsIGluaXRpYWw6IDcgfQogICAgICBdLAogICAgICBoaW50OiAnQXVzYmxpY2s6IEVpbmUgUHlyYW1pZGUgaGF0IGVpbiBEcml0dGVsIGRlcyBwYXNzZW5kZW4gUHJpc21lbnZvbHVtZW5zLicsCiAgICAgIGZvcm11bGFzOiBweXJhbWlkRm9ybXVsYXMKICAgIH0sCiAgICB7CiAgICAgIGlkOiAnY29uZScsCiAgICAgIG5hbWU6ICdLZWdlbCcsCiAgICAgIGtpbmQ6ICdLw7ZycGVyJywKICAgICAgbWFyazogJ0Vyd2VpdGVydW5nJywKICAgICAgcGFyYW1zOiBbCiAgICAgICAgeyBrZXk6ICdyJywgbGFiZWw6ICdSYWRpdXMgcicsIG1pbjogMSwgbWF4OiA4LCBzdGVwOiAxLCB1bml0OiAnY20nLCBpbml0aWFsOiAzIH0sCiAgICAgICAgeyBrZXk6ICdoJywgbGFiZWw6ICdLw7ZycGVyaMO2aGUgaCcsIG1pbjogMiwgbWF4OiAxMiwgc3RlcDogMSwgdW5pdDogJ2NtJywgaW5pdGlhbDogOCB9CiAgICAgIF0sCiAgICAgIGhpbnQ6ICdBdXNibGljazogRWluIEtlZ2VsIGhhdCBlaW4gRHJpdHRlbCBkZXMgcGFzc2VuZGVuIFp5bGluZGVydm9sdW1lbnMuJywKICAgICAgZm9ybXVsYXM6IGNvbmVGb3JtdWxhcwogICAgfSwKICAgIHsKICAgICAgaWQ6ICdzcGhlcmUnLAogICAgICBuYW1lOiAnS3VnZWwnLAogICAgICBraW5kOiAnS8O2cnBlcicsCiAgICAgIG1hcms6ICdFcndlaXRlcnVuZycsCiAgICAgIHBhcmFtczogWwogICAgICAgIHsga2V5OiAncicsIGxhYmVsOiAnUmFkaXVzIHInLCBtaW46IDEsIG1heDogOCwgc3RlcDogMSwgdW5pdDogJ2NtJywgaW5pdGlhbDogNCB9CiAgICAgIF0sCiAgICAgIGhpbnQ6ICdBdXNibGljazogRGllIEt1Z2VsIGlzdCBmw7xyIEtsYXNzZSA1LzYgdm9yIGFsbGVtIGVpbmUgYW5zY2hhdWxpY2hlIEVyd2VpdGVydW5nLicsCiAgICAgIGZvcm11bGFzOiBzcGhlcmVGb3JtdWxhcwogICAgfQogIF07CgogIGNvbnN0IG1lbnVJdGVtcyA9IFsKICAgIHsgc2NyZWVuOiAnZXhwbG9yZXInLCB0aXRsZTogJ0Zvcm1lbiBlbnRkZWNrZW4nLCB0ZXh0OiAnWmllaGUgTWHDn2UgZ3LDtsOfZXIgb2RlciBrbGVpbmVyIHVuZCBiZW9iYWNodGUgZGllIFplaWNobnVuZy4nIH0sCiAgICB7IHNjcmVlbjogJ2xhYicsIHRpdGxlOiAnRm9ybWVsLUxhYm9yJywgdGV4dDogJ0FsbGdlbWVpbmUgRm9ybWVsLCBlaW5nZXNldHp0ZSBXZXJ0ZSB1bmQgRXJnZWJuaXMgaW4gZWluZW0gQmxpY2suJyB9LAogICAgeyB0cmFpbmluZzogJ1VtZmFuZycsIHRpdGxlOiAnVW1mYW5nIHRyYWluaWVyZW4nLCB0ZXh0OiAnQmVyZWNobmUgUmFuZGzDpG5nZW4gdm9uIEZsw6RjaGVuIHVuZCBlcmtlbm5lIHBhc3NlbmRlIEZvcm1lbG4uJyB9LAogICAgeyB0cmFpbmluZzogJ0Zsw6RjaGUnLCB0aXRsZTogJ0Zsw6RjaGVuIHRyYWluaWVyZW4nLCB0ZXh0OiAnWsOkaGxlIEvDpHN0Y2hlbiwgbnV0emUgSMO2aGVuIHVuZCB6ZXJsZWdlIEZpZ3VyZW4uJyB9LAogICAgeyB0cmFpbmluZzogJ1ZvbHVtZW4nLCB0aXRsZTogJ1ZvbHVtZW4gdHJhaW5pZXJlbicsIHRleHQ6ICdTdGFwZWxlIEdydW5kZmzDpGNoZW4genUgS8O2cnBlcm4gdW5kIGJlcmVjaG5lIGNtwrMuJyB9LAogICAgeyB0cmFpbmluZzogJ0Zvcm1lbG4nLCB0aXRsZTogJ0Zvcm1lbC1DaGVjaycsIHRleHQ6ICdPcmRuZSBGaWd1cmVuIHVuZCBGb3JtZWxuIHNpY2hlciB6dS4nIH0sCiAgICB7IHRyYWluaW5nOiAnRWluaGVpdGVuJywgdGl0bGU6ICdFaW5oZWl0ZW4tV2Vya3N0YXR0JywgdGV4dDogJ1VudGVyc2NoZWlkZSBjbSwgY23CsiB1bmQgY23Csy4nIH0sCiAgICB7IHNjcmVlbjogJ2V4YW0nLCB0aXRsZTogJ0dlby1NZWlzdGVycHLDvGZ1bmcnLCB0ZXh0OiAnR2VtaXNjaHRlIEF1ZmdhYmVuIG1pdCBzdGVpZ2VuZGVyIFNjaHdpZXJpZ2tlaXQuJyB9LAogICAgeyBzY3JlZW46ICdzY29yZXMnLCB0aXRsZTogJ01laW5lIExlcm5iZXJlaWNoZScsIHRleHQ6ICdTaWVoLCB3byBkdSBzY2hvbiBzaWNoZXIgYmlzdCB1bmQgd2FzIGR1IHdlaXRlciDDvGJlbiBrYW5uc3QuJyB9CiAgXTsKCiAgZnVuY3Rpb24gYnlJZChpZCkgewogICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKICB9CgogIGZ1bmN0aW9uIG1ha2VOb2RlKHRhZywgY2xhc3NOYW1lLCB0ZXh0KSB7CiAgICBjb25zdCBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpOwogICAgaWYgKGNsYXNzTmFtZSkgewogICAgICBub2RlLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKICAgIH0KICAgIGlmICh0ZXh0ICE9PSB1bmRlZmluZWQgJiYgdGV4dCAhPT0gbnVsbCkgewogICAgICBub2RlLnRleHRDb250ZW50ID0gdGV4dDsKICAgIH0KICAgIHJldHVybiBub2RlOwogIH0KCiAgZnVuY3Rpb24gbWFrZUJ1dHRvbih0ZXh0LCBjbGFzc05hbWUsIHBhaXJzKSB7CiAgICBjb25zdCBidXR0b24gPSBtYWtlTm9kZSgnYnV0dG9uJywgY2xhc3NOYW1lLCB0ZXh0KTsKICAgIGJ1dHRvbi50eXBlID0gJ2J1dHRvbic7CiAgICBpZiAocGFpcnMpIHsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYWlycy5sZW5ndGg7IGkgKz0gMSkgewogICAgICAgIGJ1dHRvbi5kYXRhc2V0W3BhaXJzW2ldWzBdXSA9IFN0cmluZyhwYWlyc1tpXVsxXSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBidXR0b247CiAgfQoKICBmdW5jdGlvbiBtYWtlUGFuZWwodGl0bGUsIGxlYWQpIHsKICAgIGNvbnN0IHBhbmVsID0gbWFrZU5vZGUoJ3NlY3Rpb24nLCAncGFuZWwnKTsKICAgIGNvbnN0IGhlYWRlciA9IG1ha2VOb2RlKCdkaXYnLCAncGFuZWwtaGVhZGVyJyk7CiAgICBoZWFkZXIuYXBwZW5kQ2hpbGQobWFrZU5vZGUoJ2gyJywgJycsIHRpdGxlKSk7CiAgICBpZiAobGVhZCkgewogICAgICBoZWFkZXIuYXBwZW5kQ2hpbGQobWFrZU5vZGUoJ3AnLCAnJywgbGVhZCkpOwogICAgfQogICAgcGFuZWwuYXBwZW5kQ2hpbGQoaGVhZGVyKTsKICAgIHJldHVybiBwYW5lbDsKICB9CgogIGZ1bmN0aW9uIHNldEZlZWRiYWNrKHRleHQsIHR5cGUpIHsKICAgIGVsZW1lbnRzLmZlZWRiYWNrLmNsYXNzTmFtZSA9ICdmZWVkYmFjay1wYW5lbCc7CiAgICBpZiAodHlwZSkgewogICAgICBlbGVtZW50cy5mZWVkYmFjay5jbGFzc0xpc3QuYWRkKHR5cGUpOwogICAgfQogICAgZWxlbWVudHMuZmVlZGJhY2sudGV4dENvbnRlbnQgPSB0ZXh0OwogIH0KCiAgZnVuY3Rpb24gdXBkYXRlSGVhZGVyU2NvcmVzKCkgewogICAgZWxlbWVudHMuc2NvcmVVbWZhbmcudGV4dENvbnRlbnQgPSBTdHJpbmcoc3RhdGUuc2NvcmVzWydVbWZhbmcnXSk7CiAgICBlbGVtZW50cy5zY29yZUZsYWVjaGUudGV4dENvbnRlbnQgPSBTdHJpbmcoc3RhdGUuc2NvcmVzWydGbMOkY2hlJ10pOwogICAgZWxlbWVudHMuc2NvcmVWb2x1bWVuLnRleHRDb250ZW50ID0gU3RyaW5nKHN0YXRlLnNjb3Jlc1snVm9sdW1lbiddKTsKICB9CgogIGZ1bmN0aW9uIHJlbmRlckFwcCgpIHsKICAgIHVwZGF0ZUhlYWRlclNjb3JlcygpOwogICAgaWYgKHN0YXRlLmN1cnJlbnRTY3JlZW4gPT09ICdtZW51JykgewogICAgICByZW5kZXJNZW51KCk7CiAgICB9IGVsc2UgaWYgKHN0YXRlLmN1cnJlbnRTY3JlZW4gPT09ICdleHBsb3JlcicpIHsKICAgICAgcmVuZGVySW50ZXJhY3RpdmUoJ2V4cGxvcmVyJyk7CiAgICB9IGVsc2UgaWYgKHN0YXRlLmN1cnJlbnRTY3JlZW4gPT09ICdsYWInKSB7CiAgICAgIHJlbmRlckludGVyYWN0aXZlKCdsYWInKTsKICAgIH0gZWxzZSBpZiAoc3RhdGUuY3VycmVudFNjcmVlbiA9PT0gJ3RyYWluaW5nJykgewogICAgICByZW5kZXJUcmFpbmluZyhzdGF0ZS50cmFpbmluZ0tpbmQpOwogICAgfSBlbHNlIGlmIChzdGF0ZS5jdXJyZW50U2NyZWVuID09PSAnZXhhbScpIHsKICAgICAgcmVuZGVyRXhhbSgpOwogICAgfSBlbHNlIGlmIChzdGF0ZS5jdXJyZW50U2NyZWVuID09PSAnc2NvcmVzJykgewogICAgICByZW5kZXJTY29yZXMoKTsKICAgIH0gZWxzZSB7CiAgICAgIHJlbmRlck1lbnUoKTsKICAgIH0KICAgIGVsZW1lbnRzLm1haW4uZm9jdXMoKTsKICB9CgogIGZ1bmN0aW9uIHJlbmRlck1lbnUoKSB7CiAgICBzdGF0ZS5jdXJyZW50VGFzayA9IG51bGw7CiAgICBzdGF0ZS50YXNrU29sdmVkID0gZmFsc2U7CiAgICBjb25zdCB3cmFwID0gbWFrZU5vZGUoJ3NlY3Rpb24nLCAnc2NyZWVuLWdyaWQnKTsKICAgIGNvbnN0IGludHJvID0gbWFrZVBhbmVsKCdXw6RobGUgZGVpbmVuIExlcm53ZWcnLCAnU3RhcnRlIGZyZWkgaW0gTGFib3Igb2RlciB0cmFpbmllcmUgZ2V6aWVsdCBlaW5lbiBMZXJuYmVyZWljaC4gRGVpbmUgUHVua3RlIGdlbHRlbiBmw7xyIGRpZXNlIFNwaWVscnVuZGUuJyk7CiAgICBjb25zdCBncmlkID0gbWFrZU5vZGUoJ2RpdicsICdtZW51LWdyaWQnKTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVudUl0ZW1zLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgIGNvbnN0IGl0ZW0gPSBtZW51SXRlbXNbaV07CiAgICAgIGNvbnN0IGNhcmQgPSBtYWtlQnV0dG9uKCcnLCAnbW9kZS1jYXJkJywgaXRlbS50cmFpbmluZyA/IFtbJ2FjdGlvbicsICd0cmFpbmluZyddLCBbJ3RyYWluaW5nJywgaXRlbS50cmFpbmluZ11dIDogW1snYWN0aW9uJywgJ3NjcmVlbiddLCBbJ3NjcmVlbicsIGl0ZW0uc2NyZWVuXV0pOwogICAgICBjYXJkLmFwcGVuZENoaWxkKG1ha2VOb2RlKCdzdHJvbmcnLCAnJywgaXRlbS50aXRsZSkpOwogICAgICBjYXJkLmFwcGVuZENoaWxkKG1ha2VOb2RlKCdzcGFuJywgJycsIGl0ZW0udGV4dCkpOwogICAgICBncmlkLmFwcGVuZENoaWxkKGNhcmQpOwogICAgfQogICAgaW50cm8uYXBwZW5kQ2hpbGQoZ3JpZCk7CiAgICBjb25zdCBzdGF0Um93ID0gbWFrZU5vZGUoJ2RpdicsICd0YXNrLW1ldGEnKTsKICAgIHN0YXRSb3cuYXBwZW5kQ2hpbGQobWFrZVN0YXRQaWxsKCdiZWFyYmVpdGV0Jywgc3RhdGUudG90YWxBbnN3ZXJlZCkpOwogICAgc3RhdFJvdy5hcHBlbmRDaGlsZChtYWtlU3RhdFBpbGwoJ3JpY2h0aWcnLCBzdGF0ZS5jb3JyZWN0QW5zd2VyZWQpKTsKICAgIHN0YXRSb3cuYXBwZW5kQ2hpbGQobWFrZVN0YXRQaWxsKCdTZXJpZScsIHN0YXRlLnN0cmVhaykpOwogICAgaW50cm8uYXBwZW5kQ2hpbGQoc3RhdFJvdyk7CiAgICB3cmFwLmFwcGVuZENoaWxkKGludHJvKTsKICAgIGVsZW1lbnRzLm1haW4ucmVwbGFjZUNoaWxkcmVuKHdyYXApOwogICAgc2V0RmVlZGJhY2soJ1RpcHA6IEltIEZvcm1lbC1MYWJvciBzaWVoc3QgZHUgc29mb3J0LCB3ZWxjaGUgWmFobCBzaWNoIGluIGRlciBGb3JtZWwgw6RuZGVydC4nLCAnaW5mbycpOwogIH0KCiAgZnVuY3Rpb24gcmVuZGVySW50ZXJhY3RpdmUoa2luZCkgewogICAgY29uc3Qgc2hhcGUgPSBnZXRTaGFwZShzdGF0ZS5zZWxlY3RlZFNoYXBlSWQpOwogICAgY29uc3QgcGFyYW1zID0gZ2V0UGFyYW1zKHNoYXBlKTsKICAgIGNvbnN0IGxheW91dCA9IG1ha2VOb2RlKCdzZWN0aW9uJywgJ2xhYi1sYXlvdXQnKTsKCiAgICBjb25zdCBsZWZ0ID0gbWFrZVBhbmVsKGtpbmQgPT09ICdsYWInID8gJ0Zvcm1lbC1MYWJvcicgOiAnRm9ybWVuIGVudGRlY2tlbicsIGtpbmQgPT09ICdsYWInID8gJ1ZlcsOkbmRlcmUgTWHDn2UuIEZvcm1lbCwgUmVjaGVud2VnIHVuZCBFcmdlYm5pcyBwYXNzZW4gc2ljaCBhbi4nIDogJ1VudGVyc3VjaGUgRm9ybWVuIG1pdCBNYcOfbGluaWVuLCBHaXR0ZXJuIHVuZCBrdXJ6ZW4gRXJrbMOkcnVuZ2VuLicpOwogICAgbGVmdC5hcHBlbmRDaGlsZChtYWtlU2hhcGVQaWNrZXIoKSk7CgogICAgY29uc3QgY29udHJvbHNUaXRsZSA9IG1ha2VOb2RlKCdoMycsICcnLCAnTWHDn2UgdmVyw6RuZGVybicpOwogICAgbGVmdC5hcHBlbmRDaGlsZChjb250cm9sc1RpdGxlKTsKICAgIGxlZnQuYXBwZW5kQ2hpbGQobWFrZVBhcmFtZXRlckNvbnRyb2xzKHNoYXBlLCBwYXJhbXMpKTsKCiAgICBjb25zdCBpbnNpZ2h0ID0gbWFrZU5vZGUoJ2RpdicsICdpbnNpZ2h0LWNhcmQnKTsKICAgIGluc2lnaHQuYXBwZW5kQ2hpbGQobWFrZU5vZGUoJ3N0cm9uZycsICcnLCBzaGFwZS5uYW1lICsgJyDCtyAnICsgc2hhcGUua2luZCkpOwogICAgaW5zaWdodC5hcHBlbmRDaGlsZChtYWtlTm9kZSgncCcsICdoZWxwZXItdGV4dCcsIHNoYXBlLmhpbnQpKTsKICAgIGxlZnQuYXBwZW5kQ2hpbGQoaW5zaWdodCk7CgogICAgY29uc3QgcmlnaHQgPSBtYWtlTm9kZSgnc2VjdGlvbicsICdjYW52YXMtY2FyZCcpOwogICAgY29uc3QgY2FudmFzVGl0bGUgPSBtYWtlTm9kZSgnZGl2JywgJ3BhbmVsLWhlYWRlcicpOwogICAgY2FudmFzVGl0bGUuYXBwZW5kQ2hpbGQobWFrZU5vZGUoJ2gyJywgJycsIHNoYXBlLm5hbWUpKTsKICAgIGNhbnZhc1RpdGxlLmFwcGVuZENoaWxkKG1ha2VOb2RlKCdwJywgJycsICdEaWUgZmFyYmlnZW4gTWHDn2xpbmllbiB6ZWlnZW4sIHdlbGNoZSBXZXJ0ZSBpbiBkZXIgRm9ybWVsIGJlbnV0enQgd2VyZGVuLicpKTsKICAgIHJpZ2h0LmFwcGVuZENoaWxkKGNhbnZhc1RpdGxlKTsKCiAgICBjb25zdCBjYW52YXMgPSBtYWtlTm9kZSgnY2FudmFzJywgJ2dlby1jYW52YXMnKTsKICAgIGNhbnZhcy5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnR2VvbWV0cmlzY2hlIERhcnN0ZWxsdW5nIHZvbiAnICsgc2hhcGUubmFtZSk7CiAgICByaWdodC5hcHBlbmRDaGlsZChjYW52YXMpOwogICAgcmlnaHQuYXBwZW5kQ2hpbGQobWFrZUZvcm11bGFTdGFjayhzaGFwZSwgcGFyYW1zLCBraW5kKSk7CiAgICBsYXlvdXQuYXBwZW5kQ2hpbGQobGVmdCk7CiAgICBsYXlvdXQuYXBwZW5kQ2hpbGQocmlnaHQpOwoKICAgIGVsZW1lbnRzLm1haW4ucmVwbGFjZUNoaWxkcmVuKGxheW91dCk7CiAgICBkcmF3U2hhcGUoY2FudmFzLCBzaGFwZS5pZCwgcGFyYW1zKTsKICAgIHNldEZlZWRiYWNrKGtpbmQgPT09ICdsYWInID8gJ8OEbmRlcmUgZWluZW4gUmVnbGVyIHVuZCBsaWVzIGRlbiBlaW5nZXNldHp0ZW4gUmVjaGVud2VnIGFiLicgOiAnQWNodGUgZGFyYXVmOiBVbWZhbmcgbGllZ3QgYW0gUmFuZCwgRmzDpGNoZSBpbSBJbm5lcmVuLCBWb2x1bWVuIGltIFJhdW0uJywgJ2luZm8nKTsKICB9CgogIGZ1bmN0aW9uIG1ha2VTaGFwZVBpY2tlcigpIHsKICAgIGNvbnN0IGJveCA9IG1ha2VOb2RlKCdkaXYnLCAnc2hhcGUtcGlja2VyJyk7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoYXBlQ2F0YWxvZy5sZW5ndGg7IGkgKz0gMSkgewogICAgICBjb25zdCBzaGFwZSA9IHNoYXBlQ2F0YWxvZ1tpXTsKICAgICAgY29uc3QgYnV0dG9uID0gbWFrZUJ1dHRvbihzaGFwZS5uYW1lLCAnc2hhcGUtYnV0dG9uJywgW1snYWN0aW9uJywgJ3NoYXBlJ10sIFsnc2hhcGUnLCBzaGFwZS5pZF1dKTsKICAgICAgaWYgKHNoYXBlLmlkID09PSBzdGF0ZS5zZWxlY3RlZFNoYXBlSWQpIHsKICAgICAgICBidXR0b24uY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7CiAgICAgIH0KICAgICAgYnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgc2hhcGUuaWQgPT09IHN0YXRlLnNlbGVjdGVkU2hhcGVJZCA/ICd0cnVlJyA6ICdmYWxzZScpOwogICAgICBib3guYXBwZW5kQ2hpbGQoYnV0dG9uKTsKICAgIH0KICAgIHJldHVybiBib3g7CiAgfQoKICBmdW5jdGlvbiBtYWtlUGFyYW1ldGVyQ29udHJvbHMoc2hhcGUsIHBhcmFtcykgewogICAgY29uc3QgbGlzdCA9IG1ha2VOb2RlKCdkaXYnLCAnY29udHJvbC1saXN0Jyk7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoYXBlLnBhcmFtcy5sZW5ndGg7IGkgKz0gMSkgewogICAgICBjb25zdCBkZWYgPSBzaGFwZS5wYXJhbXNbaV07CiAgICAgIGNvbnN0IHdyYXAgPSBtYWtlTm9kZSgnZGl2JywgJ3BhcmFtLWNvbnRyb2wnKTsKICAgICAgY29uc3Qgcm93ID0gbWFrZU5vZGUoJ2RpdicsICdwYXJhbS1yb3cnKTsKICAgICAgY29uc3QgbGFiZWwgPSBtYWtlTm9kZSgnbGFiZWwnLCAnJywgZGVmLmxhYmVsKTsKICAgICAgY29uc3QgaW5wdXRJZCA9ICdwYXJhbS0nICsgc2hhcGUuaWQgKyAnLScgKyBkZWYua2V5OwogICAgICBsYWJlbC5zZXRBdHRyaWJ1dGUoJ2ZvcicsIGlucHV0SWQpOwogICAgICBjb25zdCBiYWRnZSA9IG1ha2VOb2RlKCdzcGFuJywgJ3ZhbHVlLWJhZGdlJywgZm9ybWF0TnVtYmVyKHBhcmFtc1tkZWYua2V5XSkgKyAnICcgKyBkZWYudW5pdCk7CiAgICAgIHJvdy5hcHBlbmRDaGlsZChsYWJlbCk7CiAgICAgIHJvdy5hcHBlbmRDaGlsZChiYWRnZSk7CgogICAgICBjb25zdCBzbGlkZXJSb3cgPSBtYWtlTm9kZSgnZGl2JywgJ3NsaWRlci1yb3cnKTsKICAgICAgY29uc3QgbWludXMgPSBtYWtlQnV0dG9uKCfiiJInLCAnc21hbGwtYnV0dG9uJywgW1snYWN0aW9uJywgJ3BhcmFtJ10sIFsncGFyYW0nLCBkZWYua2V5XSwgWydkZWx0YScsIC1kZWYuc3RlcF1dKTsKICAgICAgbWludXMuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgZGVmLmxhYmVsICsgJyB2ZXJrbGVpbmVybicpOwogICAgICBjb25zdCBpbnB1dCA9IG1ha2VOb2RlKCdpbnB1dCcsICcnKTsKICAgICAgaW5wdXQuaWQgPSBpbnB1dElkOwogICAgICBpbnB1dC50eXBlID0gJ3JhbmdlJzsKICAgICAgaW5wdXQubWluID0gU3RyaW5nKGRlZi5taW4pOwogICAgICBpbnB1dC5tYXggPSBTdHJpbmcoZGVmLm1heCk7CiAgICAgIGlucHV0LnN0ZXAgPSBTdHJpbmcoZGVmLnN0ZXApOwogICAgICBpbnB1dC52YWx1ZSA9IFN0cmluZyhwYXJhbXNbZGVmLmtleV0pOwogICAgICBpbnB1dC5kYXRhc2V0LmFjdGlvbiA9ICdyYW5nZSc7CiAgICAgIGlucHV0LmRhdGFzZXQucGFyYW0gPSBkZWYua2V5OwogICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCBkZWYubGFiZWwpOwogICAgICBjb25zdCBwbHVzID0gbWFrZUJ1dHRvbignKycsICdzbWFsbC1idXR0b24nLCBbWydhY3Rpb24nLCAncGFyYW0nXSwgWydwYXJhbScsIGRlZi5rZXldLCBbJ2RlbHRhJywgZGVmLnN0ZXBdXSk7CiAgICAgIHBsdXMuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgZGVmLmxhYmVsICsgJyB2ZXJncsO2w59lcm4nKTsKICAgICAgc2xpZGVyUm93LmFwcGVuZENoaWxkKG1pbnVzKTsKICAgICAgc2xpZGVyUm93LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgc2xpZGVyUm93LmFwcGVuZENoaWxkKHBsdXMpOwoKICAgICAgd3JhcC5hcHBlbmRDaGlsZChyb3cpOwogICAgICB3cmFwLmFwcGVuZENoaWxkKHNsaWRlclJvdyk7CiAgICAgIGxpc3QuYXBwZW5kQ2hpbGQod3JhcCk7CiAgICB9CiAgICByZXR1cm4gbGlzdDsKICB9CgogIGZ1bmN0aW9uIG1ha2VGb3JtdWxhU3RhY2soc2hhcGUsIHBhcmFtcywga2luZCkgewogICAgY29uc3Qgc3RhY2sgPSBtYWtlTm9kZSgnZGl2JywgJ2Zvcm11bGEtc3RhY2snKTsKICAgIGNvbnN0IGxpbmVzID0gc2hhcGUuZm9ybXVsYXMocGFyYW1zKTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgY29uc3QgaXRlbSA9IG1ha2VOb2RlKCdkaXYnLCAnZm9ybXVsYS1saW5lJyk7CiAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQobWFrZU5vZGUoJ3N0cm9uZycsICcnLCBsaW5lc1tpXS5sYWJlbCkpOwogICAgICBpdGVtLmFwcGVuZENoaWxkKG1ha2VOb2RlKCdjb2RlJywgJycsIGxpbmVzW2ldLmdlbmVyYWwpKTsKICAgICAgaXRlbS5hcHBlbmRDaGlsZChtYWtlTm9kZSgnY29kZScsICcnLCBsaW5lc1tpXS5pbnNlcnRlZCkpOwogICAgICBpdGVtLmFwcGVuZENoaWxkKG1ha2VOb2RlKCdjb2RlJywgJycsIGxpbmVzW2ldLnJlc3VsdCkpOwogICAgICBpZiAoa2luZCA9PT0gJ2V4cGxvcmVyJyAmJiBsaW5lc1tpXS53aHkpIHsKICAgICAgICBpdGVtLmFwcGVuZENoaWxkKG1ha2VOb2RlKCdwJywgJ2hlbHBlci10ZXh0JywgbGluZXNbaV0ud2h5KSk7CiAgICAgIH0KICAgICAgc3RhY2suYXBwZW5kQ2hpbGQoaXRlbSk7CiAgICB9CiAgICByZXR1cm4gc3RhY2s7CiAgfQoKICBmdW5jdGlvbiByZW5kZXJUcmFpbmluZyhraW5kKSB7CiAgICBpZiAoIXN0YXRlLmN1cnJlbnRUYXNrIHx8IHN0YXRlLmN1cnJlbnRUYXNrLnRyYWluaW5nS2luZCAhPT0ga2luZCB8fCBzdGF0ZS5jdXJyZW50VGFzay5leGFtVGFzaykgewogICAgICBzdGF0ZS5jdXJyZW50VGFzayA9IGdlbmVyYXRlVGFzayhraW5kLCBzdGF0ZS5kaWZmaWN1bHR5LCBmYWxzZSk7CiAgICAgIHN0YXRlLnRhc2tTb2x2ZWQgPSBmYWxzZTsKICAgICAgc3RhdGUuYXR0ZW1wdHMgPSAwOwogICAgICBzdGF0ZS5yZWplY3RlZENob2ljZXMgPSBbXTsKICAgIH0KCiAgICBjb25zdCBsYXlvdXQgPSBtYWtlTm9kZSgnc2VjdGlvbicsICd0cmFpbmluZy1sYXlvdXQnKTsKICAgIGNvbnN0IHNpZGUgPSBtYWtlUGFuZWwoa2luZCArICcgdHJhaW5pZXJlbicsICdXw6RobGUgZWluZSBTY2h3aWVyaWdrZWl0IHVuZCBsw7ZzZSBkaWUgQXVmZ2FiZS4gQmVpIEZlaGxlcm4gYmVrb21tc3QgZHUgSGlud2Vpc2UuJyk7CiAgICBzaWRlLmFwcGVuZENoaWxkKG1ha2VEaWZmaWN1bHR5Um93KCkpOwogICAgc2lkZS5hcHBlbmRDaGlsZChtYWtlU2NvcmVTbWFsbCgpKTsKICAgIGNvbnN0IG5leHQgPSBtYWtlQnV0dG9uKCdOZXVlIEF1ZmdhYmUnLCAnc2Vjb25kYXJ5LWJ1dHRvbicsIFtbJ2FjdGlvbicsICduZXh0VGFzayddXSk7CiAgICBzaWRlLmFwcGVuZENoaWxkKG5leHQpOwoKICAgIGNvbnN0IHRhc2tWaWV3ID0gbWFrZVRhc2tWaWV3KHN0YXRlLmN1cnJlbnRUYXNrLCBmYWxzZSk7CiAgICBsYXlvdXQuYXBwZW5kQ2hpbGQoc2lkZSk7CiAgICBsYXlvdXQuYXBwZW5kQ2hpbGQodGFza1ZpZXcpOwogICAgZWxlbWVudHMubWFpbi5yZXBsYWNlQ2hpbGRyZW4obGF5b3V0KTsKCiAgICBjb25zdCBjYW52YXMgPSBieUlkKCd0YXNrLWNhbnZhcycpOwogICAgaWYgKGNhbnZhcyAmJiBzdGF0ZS5jdXJyZW50VGFzay5zaGFwZUlkKSB7CiAgICAgIGRyYXdTaGFwZShjYW52YXMsIHN0YXRlLmN1cnJlbnRUYXNrLnNoYXBlSWQsIHN0YXRlLmN1cnJlbnRUYXNrLnBhcmFtcyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiByZW5kZXJFeGFtKCkgewogICAgaWYgKHN0YXRlLmV4YW1SZW1haW5pbmcgPD0gMCAmJiAhc3RhdGUuY3VycmVudFRhc2spIHsKICAgICAgc3RhdGUuZXhhbVJlbWFpbmluZyA9IHN0YXRlLmV4YW1Hb2FsOwogICAgICBzdGF0ZS5jdXJyZW50VGFzayA9IGdlbmVyYXRlRXhhbVRhc2soKTsKICAgICAgc3RhdGUudGFza1NvbHZlZCA9IGZhbHNlOwogICAgICBzdGF0ZS5hdHRlbXB0cyA9IDA7CiAgICAgIHN0YXRlLnJlamVjdGVkQ2hvaWNlcyA9IFtdOwogICAgfQogICAgaWYgKHN0YXRlLmV4YW1SZW1haW5pbmcgPD0gMCAmJiBzdGF0ZS5jdXJyZW50VGFzayAmJiBzdGF0ZS50YXNrU29sdmVkKSB7CiAgICAgIHJlbmRlclNjb3JlcygpOwogICAgICByZXR1cm47CiAgICB9CgogICAgY29uc3QgbGF5b3V0ID0gbWFrZU5vZGUoJ3NlY3Rpb24nLCAndHJhaW5pbmctbGF5b3V0Jyk7CiAgICBjb25zdCBzaWRlID0gbWFrZVBhbmVsKCdHZW8tTWVpc3RlcnByw7xmdW5nJywgJ0dlbWlzY2h0ZSBBdWZnYWJlbjogVW1mYW5nLCBGbMOkY2hlLCBWb2x1bWVuLCBGb3JtZWxuLCBFaW5oZWl0ZW4gdW5kIFN0cmF0ZWdpZW4uJyk7CiAgICBjb25zdCBwcm9ncmVzcyA9IG1ha2VOb2RlKCdkaXYnLCAnZm9ybXVsYS1saW5lJyk7CiAgICBwcm9ncmVzcy5hcHBlbmRDaGlsZChtYWtlTm9kZSgnc3Ryb25nJywgJycsICdQcsO8ZnVuZ3Nmb3J0c2Nocml0dCcpKTsKICAgIGNvbnN0IGRvbmUgPSBzdGF0ZS5leGFtR29hbCAtIHN0YXRlLmV4YW1SZW1haW5pbmc7CiAgICBjb25zdCB0cmFjayA9IG1ha2VOb2RlKCdkaXYnLCAncHJvZ3Jlc3MtdHJhY2snKTsKICAgIGNvbnN0IGZpbGwgPSBtYWtlTm9kZSgnZGl2JywgJ3Byb2dyZXNzLWZpbGwnKTsKICAgIGZpbGwuc3R5bGUud2lkdGggPSBTdHJpbmcoTWF0aC5yb3VuZChkb25lIC8gc3RhdGUuZXhhbUdvYWwgKiAxMDApKSArICclJzsKICAgIHRyYWNrLmFwcGVuZENoaWxkKGZpbGwpOwogICAgcHJvZ3Jlc3MuYXBwZW5kQ2hpbGQodHJhY2spOwogICAgcHJvZ3Jlc3MuYXBwZW5kQ2hpbGQobWFrZU5vZGUoJ3AnLCAnaGVscGVyLXRleHQnLCBTdHJpbmcoZG9uZSkgKyAnIHZvbiAnICsgU3RyaW5nKHN0YXRlLmV4YW1Hb2FsKSArICcgQXVmZ2FiZW4gYWJnZXNjaGxvc3Nlbi4nKSk7CiAgICBzaWRlLmFwcGVuZENoaWxkKHByb2dyZXNzKTsKICAgIHNpZGUuYXBwZW5kQ2hpbGQobWFrZVNjb3JlU21hbGwoKSk7CiAgICBzaWRlLmFwcGVuZENoaWxkKG1ha2VCdXR0b24oJ1Byw7xmdW5nIG5ldSBtaXNjaGVuJywgJ3NlY29uZGFyeS1idXR0b24nLCBbWydhY3Rpb24nLCAncmVzdGFydEV4YW0nXV0pKTsKCiAgICBpZiAoIXN0YXRlLmN1cnJlbnRUYXNrIHx8ICFzdGF0ZS5jdXJyZW50VGFzay5leGFtVGFzaykgewogICAgICBzdGF0ZS5jdXJyZW50VGFzayA9IGdlbmVyYXRlRXhhbVRhc2soKTsKICAgICAgc3RhdGUudGFza1NvbHZlZCA9IGZhbHNlOwogICAgICBzdGF0ZS5hdHRlbXB0cyA9IDA7CiAgICAgIHN0YXRlLnJlamVjdGVkQ2hvaWNlcyA9IFtdOwogICAgfQoKICAgIGxheW91dC5hcHBlbmRDaGlsZChzaWRlKTsKICAgIGxheW91dC5hcHBlbmRDaGlsZChtYWtlVGFza1ZpZXcoc3RhdGUuY3VycmVudFRhc2ssIHRydWUpKTsKICAgIGVsZW1lbnRzLm1haW4ucmVwbGFjZUNoaWxkcmVuKGxheW91dCk7CiAgICBjb25zdCBjYW52YXMgPSBieUlkKCd0YXNrLWNhbnZhcycpOwogICAgaWYgKGNhbnZhcyAmJiBzdGF0ZS5jdXJyZW50VGFzay5zaGFwZUlkKSB7CiAgICAgIGRyYXdTaGFwZShjYW52YXMsIHN0YXRlLmN1cnJlbnRUYXNrLnNoYXBlSWQsIHN0YXRlLmN1cnJlbnRUYXNrLnBhcmFtcyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBtYWtlRGlmZmljdWx0eVJvdygpIHsKICAgIGNvbnN0IGJveCA9IG1ha2VOb2RlKCdkaXYnLCAnbGV2ZWwtcm93Jyk7CiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSA1OyBpICs9IDEpIHsKICAgICAgY29uc3QgYnV0dG9uID0gbWFrZUJ1dHRvbignU3R1ZmUgJyArIFN0cmluZyhpKSwgJ2xldmVsLWJ1dHRvbicsIFtbJ2FjdGlvbicsICdkaWZmaWN1bHR5J10sIFsnZGlmZmljdWx0eScsIGldXSk7CiAgICAgIGlmIChpID09PSBzdGF0ZS5kaWZmaWN1bHR5KSB7CiAgICAgICAgYnV0dG9uLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwogICAgICB9CiAgICAgIGJveC5hcHBlbmRDaGlsZChidXR0b24pOwogICAgfQogICAgcmV0dXJuIGJveDsKICB9CgogIGZ1bmN0aW9uIG1ha2VTY29yZVNtYWxsKCkgewogICAgY29uc3QgYm94ID0gbWFrZU5vZGUoJ2RpdicsICdmb3JtdWxhLXN0YWNrJyk7CiAgICBjb25zdCBzdGF0cyA9IFsKICAgICAgWydVbWZhbmcnLCBzdGF0ZS5zY29yZXNbJ1VtZmFuZyddXSwKICAgICAgWydGbMOkY2hlJywgc3RhdGUuc2NvcmVzWydGbMOkY2hlJ11dLAogICAgICBbJ1ZvbHVtZW4nLCBzdGF0ZS5zY29yZXNbJ1ZvbHVtZW4nXV0sCiAgICAgIFsnRm9ybWVsbicsIHN0YXRlLnNjb3Jlc1snRm9ybWVsbiddXSwKICAgICAgWydFaW5oZWl0ZW4nLCBzdGF0ZS5zY29yZXNbJ0VpbmhlaXRlbiddXSwKICAgICAgWydTdHJhdGVnaWUnLCBzdGF0ZS5zY29yZXNbJ1N0cmF0ZWdpZSddXQogICAgXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RhdHMubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgYm94LmFwcGVuZENoaWxkKG1ha2VTdGF0UGlsbChzdGF0c1tpXVswXSwgc3RhdHNbaV1bMV0pKTsKICAgIH0KICAgIHJldHVybiBib3g7CiAgfQoKICBmdW5jdGlvbiBtYWtlU3RhdFBpbGwobGFiZWwsIHZhbHVlKSB7CiAgICBjb25zdCBwaWxsID0gbWFrZU5vZGUoJ3NwYW4nLCAnc3RhdC1waWxsJyk7CiAgICBwaWxsLmFwcGVuZENoaWxkKG1ha2VOb2RlKCdzcGFuJywgJycsIGxhYmVsKSk7CiAgICBwaWxsLmFwcGVuZENoaWxkKG1ha2VOb2RlKCdzdHJvbmcnLCAnJywgU3RyaW5nKHZhbHVlKSkpOwogICAgcmV0dXJuIHBpbGw7CiAgfQoKICBmdW5jdGlvbiBtYWtlVGFza1ZpZXcodGFzaywgaXNFeGFtKSB7CiAgICBjb25zdCBjYXJkID0gbWFrZU5vZGUoJ2FydGljbGUnLCAndGFzay1jYXJkJyk7CiAgICBjb25zdCBtZXRhID0gbWFrZU5vZGUoJ2RpdicsICd0YXNrLW1ldGEnKTsKICAgIG1ldGEuYXBwZW5kQ2hpbGQobWFrZU5vZGUoJ3NwYW4nLCAnYmFkZ2UnLCB0YXNrLnRyYWluaW5nS2luZCkpOwogICAgbWV0YS5hcHBlbmRDaGlsZChtYWtlTm9kZSgnc3BhbicsICdiYWRnZScsICdTdHVmZSAnICsgU3RyaW5nKHRhc2suZGlmZmljdWx0eSkpKTsKICAgIG1ldGEuYXBwZW5kQ2hpbGQobWFrZU5vZGUoJ3NwYW4nLCAnYmFkZ2UnLCB0YXNrLnNraWxsKSk7CiAgICBjYXJkLmFwcGVuZENoaWxkKG1ldGEpOwoKICAgIGNhcmQuYXBwZW5kQ2hpbGQobWFrZU5vZGUoJ2gyJywgJycsIHRhc2sudGl0bGUpKTsKICAgIGNhcmQuYXBwZW5kQ2hpbGQobWFrZU5vZGUoJ3AnLCAndGFzay10ZXh0JywgdGFzay5xdWVzdGlvbikpOwoKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFzay5kZXRhaWxzLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgIGNhcmQuYXBwZW5kQ2hpbGQobWFrZU5vZGUoJ3AnLCAnaGVscGVyLXRleHQnLCB0YXNrLmRldGFpbHNbaV0pKTsKICAgIH0KCiAgICBpZiAodGFzay5zaGFwZUlkKSB7CiAgICAgIGNvbnN0IGNhbnZhcyA9IG1ha2VOb2RlKCdjYW52YXMnLCAnZ2VvLWNhbnZhcycpOwogICAgICBjYW52YXMuaWQgPSAndGFzay1jYW52YXMnOwogICAgICBjYW52YXMuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ1NraXp6ZSB6dXIgQXVmZ2FiZScpOwogICAgICBjYXJkLmFwcGVuZENoaWxkKGNhbnZhcyk7CiAgICB9CgogICAgY29uc3QgY2hvaWNlcyA9IG1ha2VOb2RlKCdkaXYnLCAnY2hvaWNlLWdyaWQnKTsKICAgIGNvbnN0IGxldHRlcnMgPSBbJ0EnLCAnQicsICdDJywgJ0QnXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFzay5jaG9pY2VzLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgIGNvbnN0IGNob2ljZSA9IG1ha2VCdXR0b24oJycsICdjaG9pY2UtYnV0dG9uJywgW1snYWN0aW9uJywgJ2Fuc3dlciddLCBbJ2Nob2ljZScsIGldXSk7CiAgICAgIGNvbnN0IGxldHRlciA9IG1ha2VOb2RlKCdzcGFuJywgJ2Nob2ljZS1sZXR0ZXInLCBsZXR0ZXJzW2ldKTsKICAgICAgY29uc3QgbGFiZWwgPSBtYWtlTm9kZSgnc3BhbicsICcnLCB0YXNrLmNob2ljZXNbaV0pOwogICAgICBjaG9pY2UuYXBwZW5kQ2hpbGQobGV0dGVyKTsKICAgICAgY2hvaWNlLmFwcGVuZENoaWxkKGxhYmVsKTsKICAgICAgaWYgKHN0YXRlLnJlamVjdGVkQ2hvaWNlcy5pbmRleE9mKGkpID49IDApIHsKICAgICAgICBjaG9pY2UuY2xhc3NMaXN0LmFkZCgncmVqZWN0ZWQnKTsKICAgICAgfQogICAgICBpZiAoc3RhdGUudGFza1NvbHZlZCAmJiBpID09PSB0YXNrLmNvcnJlY3RJbmRleCkgewogICAgICAgIGNob2ljZS5jbGFzc0xpc3QuYWRkKCdjb3JyZWN0Jyk7CiAgICAgIH0KICAgICAgaWYgKHN0YXRlLnRhc2tTb2x2ZWQgJiYgc3RhdGUucmVqZWN0ZWRDaG9pY2VzLmluZGV4T2YoaSkgPj0gMCAmJiBpICE9PSB0YXNrLmNvcnJlY3RJbmRleCkgewogICAgICAgIGNob2ljZS5jbGFzc0xpc3QuYWRkKCd3cm9uZy1maW5hbCcpOwogICAgICB9CiAgICAgIGlmIChzdGF0ZS50YXNrU29sdmVkIHx8IHN0YXRlLnJlamVjdGVkQ2hvaWNlcy5pbmRleE9mKGkpID49IDApIHsKICAgICAgICBjaG9pY2UuZGlzYWJsZWQgPSB0cnVlOwogICAgICB9CiAgICAgIGNob2ljZXMuYXBwZW5kQ2hpbGQoY2hvaWNlKTsKICAgIH0KICAgIGNhcmQuYXBwZW5kQ2hpbGQoY2hvaWNlcyk7CgogICAgaWYgKHN0YXRlLnRhc2tTb2x2ZWQpIHsKICAgICAgY29uc3QgZXhwbGFpbiA9IG1ha2VOb2RlKCdkaXYnLCAnZm9ybXVsYS1saW5lJyk7CiAgICAgIGV4cGxhaW4uYXBwZW5kQ2hpbGQobWFrZU5vZGUoJ3N0cm9uZycsICcnLCAnRXJrbMOkcnVuZycpKTsKICAgICAgZXhwbGFpbi5hcHBlbmRDaGlsZChtYWtlTm9kZSgncCcsICdleHBsYWluLXRleHQnLCB0YXNrLmV4cGxhbmF0aW9uKSk7CiAgICAgIGNhcmQuYXBwZW5kQ2hpbGQoZXhwbGFpbik7CiAgICAgIGNvbnN0IHJvdyA9IG1ha2VOb2RlKCdkaXYnLCAnbmV4dC1yb3cnKTsKICAgICAgcm93LmFwcGVuZENoaWxkKG1ha2VCdXR0b24oaXNFeGFtID8gJ07DpGNoc3RlIFByw7xmdW5nc2F1ZmdhYmUnIDogJ07DpGNoc3RlIEF1ZmdhYmUnLCAncHJpbWFyeS1idXR0b24nLCBbWydhY3Rpb24nLCBpc0V4YW0gPyAnbmV4dEV4YW0nIDogJ25leHRUYXNrJ11dKSk7CiAgICAgIHJvdy5hcHBlbmRDaGlsZChtYWtlQnV0dG9uKCdadW0gTWVuw7wnLCAnc2Vjb25kYXJ5LWJ1dHRvbicsIFtbJ2FjdGlvbicsICdzY3JlZW4nXSwgWydzY3JlZW4nLCAnbWVudSddXSkpOwogICAgICBjYXJkLmFwcGVuZENoaWxkKHJvdyk7CiAgICB9CgogICAgcmV0dXJuIGNhcmQ7CiAgfQoKICBmdW5jdGlvbiByZW5kZXJTY29yZXMoKSB7CiAgICBzdGF0ZS5jdXJyZW50U2NyZWVuID0gJ3Njb3Jlcyc7CiAgICBzdGF0ZS5jdXJyZW50VGFzayA9IG51bGw7CiAgICBjb25zdCByZXBvcnQgPSBtYWtlTm9kZSgnc2VjdGlvbicsICdyZXBvcnQtbGF5b3V0Jyk7CiAgICBjb25zdCBwYW5lbCA9IG1ha2VQYW5lbCgnTWVpbmUgTGVybmJlcmVpY2hlJywgJ0RpZSBQdW5rdGUgemVpZ2VuIGRlaW5lIGFrdHVlbGxlIFNwaWVscnVuZGUuIMOcYmUgZ2V6aWVsdCBkb3J0IHdlaXRlciwgd28gZHUgd2VuaWdlciBQdW5rdGUgaGFzdC4nKTsKICAgIGNvbnN0IHN0YXRSb3cgPSBtYWtlTm9kZSgnZGl2JywgJ3Rhc2stbWV0YScpOwogICAgc3RhdFJvdy5hcHBlbmRDaGlsZChtYWtlU3RhdFBpbGwoJ2JlYXJiZWl0ZXQnLCBzdGF0ZS50b3RhbEFuc3dlcmVkKSk7CiAgICBzdGF0Um93LmFwcGVuZENoaWxkKG1ha2VTdGF0UGlsbCgncmljaHRpZycsIHN0YXRlLmNvcnJlY3RBbnN3ZXJlZCkpOwogICAgc3RhdFJvdy5hcHBlbmRDaGlsZChtYWtlU3RhdFBpbGwoJ2Jlc3RlIFNlcmllJywgc3RhdGUuc3RyZWFrKSk7CiAgICBwYW5lbC5hcHBlbmRDaGlsZChzdGF0Um93KTsKCiAgICBjb25zdCBncmlkID0gbWFrZU5vZGUoJ2RpdicsICdzY29yZS1ncmlkJyk7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNraWxsTmFtZXMubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgY29uc3Qgc2tpbGwgPSBza2lsbE5hbWVzW2ldOwogICAgICBjb25zdCB2YWx1ZSA9IHN0YXRlLnNjb3Jlc1tza2lsbF07CiAgICAgIGNvbnN0IGNhcmQgPSBtYWtlTm9kZSgnZGl2JywgJ3NraWxsLWNhcmQnKTsKICAgICAgY2FyZC5hcHBlbmRDaGlsZChtYWtlTm9kZSgnc3Ryb25nJywgJycsIHNraWxsKSk7CiAgICAgIGNhcmQuYXBwZW5kQ2hpbGQobWFrZU5vZGUoJ3NwYW4nLCAnYmFkZ2UnLCBTdHJpbmcodmFsdWUpICsgJyBQdW5rdGUnKSk7CiAgICAgIGNhcmQuYXBwZW5kQ2hpbGQobWFrZU5vZGUoJ3AnLCAnaGVscGVyLXRleHQnLCBhZHZpY2VGb3JTa2lsbChza2lsbCwgdmFsdWUpKSk7CiAgICAgIGNhcmQuYXBwZW5kQ2hpbGQobWFrZUJ1dHRvbihza2lsbCArICcgw7xiZW4nLCAnc2Vjb25kYXJ5LWJ1dHRvbicsIFtbJ2FjdGlvbicsICd0cmFpbmluZyddLCBbJ3RyYWluaW5nJywgc2tpbGxdXSkpOwogICAgICBncmlkLmFwcGVuZENoaWxkKGNhcmQpOwogICAgfQogICAgcGFuZWwuYXBwZW5kQ2hpbGQoZ3JpZCk7CiAgICBjb25zdCByb3cgPSBtYWtlTm9kZSgnZGl2JywgJ25leHQtcm93Jyk7CiAgICByb3cuYXBwZW5kQ2hpbGQobWFrZUJ1dHRvbignR2VvLU1laXN0ZXJwcsO8ZnVuZyBzdGFydGVuJywgJ3ByaW1hcnktYnV0dG9uJywgW1snYWN0aW9uJywgJ3NjcmVlbiddLCBbJ3NjcmVlbicsICdleGFtJ11dKSk7CiAgICByb3cuYXBwZW5kQ2hpbGQobWFrZUJ1dHRvbignWnVtIE1lbsO8JywgJ3NlY29uZGFyeS1idXR0b24nLCBbWydhY3Rpb24nLCAnc2NyZWVuJ10sIFsnc2NyZWVuJywgJ21lbnUnXV0pKTsKICAgIHBhbmVsLmFwcGVuZENoaWxkKHJvdyk7CiAgICByZXBvcnQuYXBwZW5kQ2hpbGQocGFuZWwpOwogICAgZWxlbWVudHMubWFpbi5yZXBsYWNlQ2hpbGRyZW4ocmVwb3J0KTsKICAgIHNldEZlZWRiYWNrKCdBdXN3ZXJ0dW5nOiBXw6RobGUgZWluZW4gTGVybmJlcmVpY2gsIHVtIGdlemllbHQgd2VpdGVyenXDvGJlbi4nLCAnaW5mbycpOwogIH0KCiAgZnVuY3Rpb24gYWR2aWNlRm9yU2tpbGwoc2tpbGwsIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPj0gNjApIHsKICAgICAgcmV0dXJuICdTZWhyIHNpY2hlci4gUHJvYmllcmUgc2Nod2VyZXJlIEF1ZmdhYmVuIG9kZXIgZGllIE1laXN0ZXJwcsO8ZnVuZy4nOwogICAgfQogICAgaWYgKHZhbHVlID49IDI1KSB7CiAgICAgIHJldHVybiAnR3V0ZSBHcnVuZGxhZ2UuIE1laHIgw5xidW5nIG1hY2h0IGRpY2ggc2NobmVsbGVyIHVuZCBzaWNoZXJlci4nOwogICAgfQogICAgaWYgKHNraWxsID09PSAnRWluaGVpdGVuJykgewogICAgICByZXR1cm4gJ0FjaHRlIGJlc29uZGVycyBhdWYgY20sIGNtwrIgdW5kIGNtwrMuIERpZSBFaW5oZWl0IHZlcnLDpHQgZGllIEFydCBkZXIgR3LDtsOfZS4nOwogICAgfQogICAgaWYgKHNraWxsID09PSAnU3RyYXRlZ2llJykgewogICAgICByZXR1cm4gJ8OcYmUgWmVybGVnZW4sIFLDvGNrd8OkcnRzcmVjaG5lbiB1bmQgVmVyw6RuZGVydW5nc2F1ZmdhYmVuLic7CiAgICB9CiAgICByZXR1cm4gJ1N0YXJ0ZSBtaXQgU3R1ZmUgMSBvZGVyIDIgdW5kIGxpZXMgZGllIEVya2zDpHJ1bmcgbmFjaCBqZWRlciBBdWZnYWJlLic7CiAgfQoKICBmdW5jdGlvbiBnZXRTaGFwZShpZCkgewogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaGFwZUNhdGFsb2cubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgaWYgKHNoYXBlQ2F0YWxvZ1tpXS5pZCA9PT0gaWQpIHsKICAgICAgICByZXR1cm4gc2hhcGVDYXRhbG9nW2ldOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc2hhcGVDYXRhbG9nWzFdOwogIH0KCiAgZnVuY3Rpb24gZ2V0UGFyYW1zKHNoYXBlKSB7CiAgICBpZiAoIXN0YXRlLnNoYXBlUGFyYW1zW3NoYXBlLmlkXSkgewogICAgICBjb25zdCB2YWx1ZXMgPSB7fTsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaGFwZS5wYXJhbXMubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgICB2YWx1ZXNbc2hhcGUucGFyYW1zW2ldLmtleV0gPSBzaGFwZS5wYXJhbXNbaV0uaW5pdGlhbDsKICAgICAgfQogICAgICBzdGF0ZS5zaGFwZVBhcmFtc1tzaGFwZS5pZF0gPSB2YWx1ZXM7CiAgICB9CiAgICByZXR1cm4gc3RhdGUuc2hhcGVQYXJhbXNbc2hhcGUuaWRdOwogIH0KCiAgZnVuY3Rpb24gY2xhbXBWYWx1ZSh2YWx1ZSwgZGVmKSB7CiAgICByZXR1cm4gTWF0aC5taW4oZGVmLm1heCwgTWF0aC5tYXgoZGVmLm1pbiwgdmFsdWUpKTsKICB9CgogIGZ1bmN0aW9uIGZpbmRQYXJhbShzaGFwZSwga2V5KSB7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoYXBlLnBhcmFtcy5sZW5ndGg7IGkgKz0gMSkgewogICAgICBpZiAoc2hhcGUucGFyYW1zW2ldLmtleSA9PT0ga2V5KSB7CiAgICAgICAgcmV0dXJuIHNoYXBlLnBhcmFtc1tpXTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBmdW5jdGlvbiBoYW5kbGVNYWluQ2xpY2soZXZ0KSB7CiAgICBjb25zdCBub2RlID0gZXZ0LnRhcmdldC5jbG9zZXN0ID8gZXZ0LnRhcmdldC5jbG9zZXN0KCdbZGF0YS1hY3Rpb25dJykgOiBudWxsOwogICAgaWYgKCFub2RlKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGFjdGlvbiA9IG5vZGUuZGF0YXNldC5hY3Rpb247CiAgICBpZiAoYWN0aW9uID09PSAnc2NyZWVuJykgewogICAgICBnb1NjcmVlbihub2RlLmRhdGFzZXQuc2NyZWVuKTsKICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAndHJhaW5pbmcnKSB7CiAgICAgIHN0YXJ0VHJhaW5pbmcobm9kZS5kYXRhc2V0LnRyYWluaW5nKTsKICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAnc2hhcGUnKSB7CiAgICAgIHN0YXRlLnNlbGVjdGVkU2hhcGVJZCA9IG5vZGUuZGF0YXNldC5zaGFwZTsKICAgICAgcmVuZGVyQXBwKCk7CiAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ3BhcmFtJykgewogICAgICBhZGp1c3RQYXJhbShub2RlLmRhdGFzZXQucGFyYW0sIE51bWJlcihub2RlLmRhdGFzZXQuZGVsdGEpKTsKICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAnZGlmZmljdWx0eScpIHsKICAgICAgc3RhdGUuZGlmZmljdWx0eSA9IE51bWJlcihub2RlLmRhdGFzZXQuZGlmZmljdWx0eSk7CiAgICAgIHN0YXRlLmN1cnJlbnRUYXNrID0gbnVsbDsKICAgICAgcmVuZGVyQXBwKCk7CiAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ2Fuc3dlcicpIHsKICAgICAgY2hlY2tBbnN3ZXIoTnVtYmVyKG5vZGUuZGF0YXNldC5jaG9pY2UpKTsKICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAnbmV4dFRhc2snKSB7CiAgICAgIHN0YXRlLmN1cnJlbnRUYXNrID0gZ2VuZXJhdGVUYXNrKHN0YXRlLnRyYWluaW5nS2luZCwgc3RhdGUuZGlmZmljdWx0eSwgZmFsc2UpOwogICAgICBzdGF0ZS50YXNrU29sdmVkID0gZmFsc2U7CiAgICAgIHN0YXRlLmF0dGVtcHRzID0gMDsKICAgICAgc3RhdGUucmVqZWN0ZWRDaG9pY2VzID0gW107CiAgICAgIHJlbmRlckFwcCgpOwogICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICduZXh0RXhhbScpIHsKICAgICAgc3RhdGUuY3VycmVudFRhc2sgPSBnZW5lcmF0ZUV4YW1UYXNrKCk7CiAgICAgIHN0YXRlLnRhc2tTb2x2ZWQgPSBmYWxzZTsKICAgICAgc3RhdGUuYXR0ZW1wdHMgPSAwOwogICAgICBzdGF0ZS5yZWplY3RlZENob2ljZXMgPSBbXTsKICAgICAgcmVuZGVyQXBwKCk7CiAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ3Jlc3RhcnRFeGFtJykgewogICAgICBzdGF0ZS5leGFtUmVtYWluaW5nID0gc3RhdGUuZXhhbUdvYWw7CiAgICAgIHN0YXRlLmN1cnJlbnRUYXNrID0gZ2VuZXJhdGVFeGFtVGFzaygpOwogICAgICBzdGF0ZS50YXNrU29sdmVkID0gZmFsc2U7CiAgICAgIHN0YXRlLmF0dGVtcHRzID0gMDsKICAgICAgc3RhdGUucmVqZWN0ZWRDaG9pY2VzID0gW107CiAgICAgIHJlbmRlckFwcCgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gaGFuZGxlTWFpbklucHV0KGV2dCkgewogICAgY29uc3Qgbm9kZSA9IGV2dC50YXJnZXQ7CiAgICBpZiAoIW5vZGUuZGF0YXNldCB8fCBub2RlLmRhdGFzZXQuYWN0aW9uICE9PSAncmFuZ2UnKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHNoYXBlID0gZ2V0U2hhcGUoc3RhdGUuc2VsZWN0ZWRTaGFwZUlkKTsKICAgIGNvbnN0IGRlZiA9IGZpbmRQYXJhbShzaGFwZSwgbm9kZS5kYXRhc2V0LnBhcmFtKTsKICAgIGlmICghZGVmKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHBhcmFtcyA9IGdldFBhcmFtcyhzaGFwZSk7CiAgICBwYXJhbXNbZGVmLmtleV0gPSBjbGFtcFZhbHVlKE51bWJlcihub2RlLnZhbHVlKSwgZGVmKTsKICAgIHJlbmRlckFwcCgpOwogIH0KCiAgZnVuY3Rpb24gYWRqdXN0UGFyYW0oa2V5LCBkZWx0YSkgewogICAgY29uc3Qgc2hhcGUgPSBnZXRTaGFwZShzdGF0ZS5zZWxlY3RlZFNoYXBlSWQpOwogICAgY29uc3QgZGVmID0gZmluZFBhcmFtKHNoYXBlLCBrZXkpOwogICAgaWYgKCFkZWYpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgcGFyYW1zID0gZ2V0UGFyYW1zKHNoYXBlKTsKICAgIHBhcmFtc1trZXldID0gY2xhbXBWYWx1ZShwYXJhbXNba2V5XSArIGRlbHRhLCBkZWYpOwogICAgcmVuZGVyQXBwKCk7CiAgfQoKICBmdW5jdGlvbiBnb1NjcmVlbihzY3JlZW4pIHsKICAgIGlmIChzY3JlZW4gPT09ICdtZW51JykgewogICAgICBzdGF0ZS5jdXJyZW50U2NyZWVuID0gJ21lbnUnOwogICAgfSBlbHNlIGlmIChzY3JlZW4gPT09ICdleHBsb3JlcicgfHwgc2NyZWVuID09PSAnbGFiJyB8fCBzY3JlZW4gPT09ICdzY29yZXMnKSB7CiAgICAgIHN0YXRlLmN1cnJlbnRTY3JlZW4gPSBzY3JlZW47CiAgICB9IGVsc2UgaWYgKHNjcmVlbiA9PT0gJ2V4YW0nKSB7CiAgICAgIHN0YXRlLmN1cnJlbnRTY3JlZW4gPSAnZXhhbSc7CiAgICAgIHN0YXRlLmV4YW1SZW1haW5pbmcgPSBzdGF0ZS5leGFtR29hbDsKICAgICAgc3RhdGUuY3VycmVudFRhc2sgPSBnZW5lcmF0ZUV4YW1UYXNrKCk7CiAgICAgIHN0YXRlLnRhc2tTb2x2ZWQgPSBmYWxzZTsKICAgICAgc3RhdGUuYXR0ZW1wdHMgPSAwOwogICAgICBzdGF0ZS5yZWplY3RlZENob2ljZXMgPSBbXTsKICAgIH0gZWxzZSB7CiAgICAgIHN0YXRlLmN1cnJlbnRTY3JlZW4gPSAnbWVudSc7CiAgICB9CiAgICByZW5kZXJBcHAoKTsKICB9CgogIGZ1bmN0aW9uIHN0YXJ0VHJhaW5pbmcoa2luZCkgewogICAgc3RhdGUuY3VycmVudFNjcmVlbiA9ICd0cmFpbmluZyc7CiAgICBzdGF0ZS50cmFpbmluZ0tpbmQgPSBub3JtYWxpemVUcmFpbmluZyhraW5kKTsKICAgIHN0YXRlLmN1cnJlbnRUYXNrID0gZ2VuZXJhdGVUYXNrKHN0YXRlLnRyYWluaW5nS2luZCwgc3RhdGUuZGlmZmljdWx0eSwgZmFsc2UpOwogICAgc3RhdGUudGFza1NvbHZlZCA9IGZhbHNlOwogICAgc3RhdGUuYXR0ZW1wdHMgPSAwOwogICAgc3RhdGUucmVqZWN0ZWRDaG9pY2VzID0gW107CiAgICByZW5kZXJBcHAoKTsKICB9CgogIGZ1bmN0aW9uIG5vcm1hbGl6ZVRyYWluaW5nKGtpbmQpIHsKICAgIGlmIChraW5kID09PSAnRmzDpGNoZScgfHwga2luZCA9PT0gJ1ZvbHVtZW4nIHx8IGtpbmQgPT09ICdGb3JtZWxuJyB8fCBraW5kID09PSAnRWluaGVpdGVuJyB8fCBraW5kID09PSAnU3RyYXRlZ2llJykgewogICAgICByZXR1cm4ga2luZDsKICAgIH0KICAgIHJldHVybiAnVW1mYW5nJzsKICB9CgogIGZ1bmN0aW9uIGNoZWNrQW5zd2VyKGNob2ljZUluZGV4KSB7CiAgICBpZiAoIXN0YXRlLmN1cnJlbnRUYXNrIHx8IHN0YXRlLnRhc2tTb2x2ZWQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgdGFzayA9IHN0YXRlLmN1cnJlbnRUYXNrOwogICAgaWYgKGNob2ljZUluZGV4ID09PSB0YXNrLmNvcnJlY3RJbmRleCkgewogICAgICBzdGF0ZS50YXNrU29sdmVkID0gdHJ1ZTsKICAgICAgY29uc3QgYmFzZSA9IDQgKyB0YXNrLmRpZmZpY3VsdHkgKiAzOwogICAgICBjb25zdCBnYWluID0gc3RhdGUuYXR0ZW1wdHMgPT09IDAgPyBiYXNlIDogTWF0aC5tYXgoMiwgTWF0aC5yb3VuZChiYXNlIC8gMikpOwogICAgICBhZGRTY29yZSh0YXNrLnNraWxsLCBnYWluKTsKICAgICAgaWYgKHRhc2suYm9udXNTa2lsbCkgewogICAgICAgIGFkZFNjb3JlKHRhc2suYm9udXNTa2lsbCwgTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChnYWluIC8gMykpKTsKICAgICAgfQogICAgICBzdGF0ZS5jb3JyZWN0QW5zd2VyZWQgKz0gMTsKICAgICAgc3RhdGUudG90YWxBbnN3ZXJlZCArPSAxOwogICAgICBzdGF0ZS5zdHJlYWsgKz0gMTsKICAgICAgaWYgKHRhc2suZXhhbVRhc2spIHsKICAgICAgICBzdGF0ZS5leGFtUmVtYWluaW5nID0gTWF0aC5tYXgoMCwgc3RhdGUuZXhhbVJlbWFpbmluZyAtIDEpOwogICAgICB9CiAgICAgIHNldEZlZWRiYWNrKCdSaWNodGlnISArJyArIFN0cmluZyhnYWluKSArICcgUHVua3RlIGbDvHIgJyArIHRhc2suc2tpbGwgKyAnLicsICdnb29kJyk7CiAgICAgIHJlbmRlckFwcCgpOwogICAgfSBlbHNlIHsKICAgICAgc3RhdGUuYXR0ZW1wdHMgKz0gMTsKICAgICAgaWYgKHN0YXRlLnJlamVjdGVkQ2hvaWNlcy5pbmRleE9mKGNob2ljZUluZGV4KSA8IDApIHsKICAgICAgICBzdGF0ZS5yZWplY3RlZENob2ljZXMucHVzaChjaG9pY2VJbmRleCk7CiAgICAgIH0KICAgICAgaWYgKHN0YXRlLmF0dGVtcHRzIDwgMikgewogICAgICAgIHN0YXRlLnN0cmVhayA9IDA7CiAgICAgICAgc2V0RmVlZGJhY2soJ05vY2ggbmljaHQuIE51dHplIGRlbiBIaW53ZWlzIHVuZCB2ZXJzdWNoZSBlaW5lIHp3ZWl0ZSBBbnR3b3J0LicsICd3YXJuJyk7CiAgICAgICAgcmVuZGVyQXBwKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3RhdGUudGFza1NvbHZlZCA9IHRydWU7CiAgICAgICAgc3RhdGUudG90YWxBbnN3ZXJlZCArPSAxOwogICAgICAgIHN0YXRlLnN0cmVhayA9IDA7CiAgICAgICAgaWYgKHRhc2suZXhhbVRhc2spIHsKICAgICAgICAgIHN0YXRlLmV4YW1SZW1haW5pbmcgPSBNYXRoLm1heCgwLCBzdGF0ZS5leGFtUmVtYWluaW5nIC0gMSk7CiAgICAgICAgfQogICAgICAgIHNldEZlZWRiYWNrKCdEaWUgTMO2c3VuZyB3aXJkIGVya2zDpHJ0LiBEYW5hY2ggZ2VodCBlcyBtaXQgZWluZXIgbmV1ZW4gQXVmZ2FiZSB3ZWl0ZXIuJywgJ3dhcm4nKTsKICAgICAgICByZW5kZXJBcHAoKTsKICAgICAgfQogICAgfQogIH0KCiAgZnVuY3Rpb24gYWRkU2NvcmUoc2tpbGwsIHZhbHVlKSB7CiAgICBpZiAoIXN0YXRlLnNjb3Jlc1tza2lsbF0pIHsKICAgICAgc3RhdGUuc2NvcmVzW3NraWxsXSA9IDA7CiAgICB9CiAgICBzdGF0ZS5zY29yZXNbc2tpbGxdICs9IHZhbHVlOwogIH0KCiAgZnVuY3Rpb24gcmVzZXRHYW1lKCkgewogICAgc3RhdGUuY3VycmVudFNjcmVlbiA9ICdtZW51JzsKICAgIHN0YXRlLnRyYWluaW5nS2luZCA9ICdVbWZhbmcnOwogICAgc3RhdGUuc2VsZWN0ZWRTaGFwZUlkID0gJ3JlY3RhbmdsZSc7CiAgICBzdGF0ZS5kaWZmaWN1bHR5ID0gMjsKICAgIHN0YXRlLmN1cnJlbnRUYXNrID0gbnVsbDsKICAgIHN0YXRlLnRhc2tTb2x2ZWQgPSBmYWxzZTsKICAgIHN0YXRlLmF0dGVtcHRzID0gMDsKICAgIHN0YXRlLmV4YW1SZW1haW5pbmcgPSAwOwogICAgc3RhdGUudG90YWxBbnN3ZXJlZCA9IDA7CiAgICBzdGF0ZS5jb3JyZWN0QW5zd2VyZWQgPSAwOwogICAgc3RhdGUuc3RyZWFrID0gMDsKICAgIHN0YXRlLnJlamVjdGVkQ2hvaWNlcyA9IFtdOwogICAgc3RhdGUuc2hhcGVQYXJhbXMgPSB7fTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2tpbGxOYW1lcy5sZW5ndGg7IGkgKz0gMSkgewogICAgICBzdGF0ZS5zY29yZXNbc2tpbGxOYW1lc1tpXV0gPSAwOwogICAgfQogICAgc2V0RmVlZGJhY2soJ05ldWUgU3BpZWxydW5kZSBnZXN0YXJ0ZXQuIFfDpGhsZSBlaW5lbiBMZXJud2VnLicsICdpbmZvJyk7CiAgICByZW5kZXJBcHAoKTsKICB9CgogIGZ1bmN0aW9uIHRyeUZ1bGxWaWV3KCkgewogICAgY29uc3Qgcm9vdCA9IGVsZW1lbnRzLnJvb3Q7CiAgICBpZiAoZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnQpIHsKICAgICAgZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKS5jYXRjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgc3dpdGNoRmFsbGJhY2tWaWV3KCk7CiAgICAgIH0pOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAocm9vdC5yZXF1ZXN0RnVsbHNjcmVlbikgewogICAgICByb290LnJlcXVlc3RGdWxsc2NyZWVuKCkuY2F0Y2goZnVuY3Rpb24gKCkgewogICAgICAgIHN3aXRjaEZhbGxiYWNrVmlldygpOwogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIHN3aXRjaEZhbGxiYWNrVmlldygpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gc3dpdGNoRmFsbGJhY2tWaWV3KCkgewogICAgc3RhdGUud2lkZVZpZXcgPSAhc3RhdGUud2lkZVZpZXc7CiAgICBlbGVtZW50cy5yb290LmNsYXNzTGlzdC50b2dnbGUoJ2lzLWZhbGxiYWNrLWZ1bGwnLCBzdGF0ZS53aWRlVmlldyk7CiAgICBzZXRGZWVkYmFjayhzdGF0ZS53aWRlVmlldyA/ICdHcm/Dn2Fuc2ljaHQgaW0gU3BpZWwgYWt0aXZpZXJ0LicgOiAnR3Jvw59hbnNpY2h0IGJlZW5kZXQuJywgJ2luZm8nKTsKICB9CgogIGZ1bmN0aW9uIGhhbmRsZUtleXMoZXZ0KSB7CiAgICBjb25zdCBrZXkgPSBldnQua2V5OwogICAgaWYgKGtleSA9PT0gJ20nIHx8IGtleSA9PT0gJ00nKSB7CiAgICAgIGdvU2NyZWVuKCdtZW51Jyk7CiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3InIHx8IGtleSA9PT0gJ1InKSB7CiAgICAgIHJlc2V0R2FtZSgpOwogICAgfSBlbHNlIGlmIChrZXkgPT09ICduJyB8fCBrZXkgPT09ICdOJykgewogICAgICBpZiAoc3RhdGUuY3VycmVudFNjcmVlbiA9PT0gJ3RyYWluaW5nJykgewogICAgICAgIHN0YXRlLmN1cnJlbnRUYXNrID0gZ2VuZXJhdGVUYXNrKHN0YXRlLnRyYWluaW5nS2luZCwgc3RhdGUuZGlmZmljdWx0eSwgZmFsc2UpOwogICAgICAgIHN0YXRlLnRhc2tTb2x2ZWQgPSBmYWxzZTsKICAgICAgICBzdGF0ZS5hdHRlbXB0cyA9IDA7CiAgICAgICAgc3RhdGUucmVqZWN0ZWRDaG9pY2VzID0gW107CiAgICAgICAgcmVuZGVyQXBwKCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoa2V5ID49ICcxJyAmJiBrZXkgPD0gJzQnKSB7CiAgICAgIGNoZWNrQW5zd2VyKE51bWJlcihrZXkpIC0gMSk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBzcXVhcmVGb3JtdWxhcyhwKSB7CiAgICBjb25zdCB1ID0gNCAqIHAuYTsKICAgIGNvbnN0IGEgPSBwLmEgKiBwLmE7CiAgICByZXR1cm4gWwogICAgICBsaW5lKCdVbWZhbmcnLCAnVSA9IDQgwrcgYScsICdVID0gNCDCtyAnICsgbihwLmEpLCAnVSA9ICcgKyBuKHUpICsgJyBjbScsICdWaWVyIGdsZWljaCBsYW5nZSBTZWl0ZW4gYmlsZGVuIGRlbiBSYW5kLicpLAogICAgICBsaW5lKCdGbMOkY2hlbmluaGFsdCcsICdBID0gYSDCtyBhJywgJ0EgPSAnICsgbihwLmEpICsgJyDCtyAnICsgbihwLmEpLCAnQSA9ICcgKyBuKGEpICsgJyBjbcKyJywgJ1plaWxlbiBtYWwgU3BhbHRlbiBlcmdlYmVuIGRpZSBLw6RzdGNoZW56YWhsLicpCiAgICBdOwogIH0KCiAgZnVuY3Rpb24gcmVjdGFuZ2xlRm9ybXVsYXMocCkgewogICAgY29uc3QgdSA9IDIgKiBwLmEgKyAyICogcC5iOwogICAgY29uc3QgYSA9IHAuYSAqIHAuYjsKICAgIHJldHVybiBbCiAgICAgIGxpbmUoJ1VtZmFuZycsICdVID0gMiDCtyBhICsgMiDCtyBiJywgJ1UgPSAyIMK3ICcgKyBuKHAuYSkgKyAnICsgMiDCtyAnICsgbihwLmIpLCAnVSA9ICcgKyBuKHUpICsgJyBjbScsICdad2VpIEzDpG5nZW4gdW5kIHp3ZWkgQnJlaXRlbiBsaWVnZW4gYW0gUmFuZC4nKSwKICAgICAgbGluZSgnRmzDpGNoZW5pbmhhbHQnLCAnQSA9IGEgwrcgYicsICdBID0gJyArIG4ocC5hKSArICcgwrcgJyArIG4ocC5iKSwgJ0EgPSAnICsgbihhKSArICcgY23CsicsICdKZWRlIFJlaWhlIGhhdCBhIEvDpHN0Y2hlbiwgZXMgZ2lidCBiIFJlaWhlbi4nKQogICAgXTsKICB9CgogIGZ1bmN0aW9uIHRyaWFuZ2xlRm9ybXVsYXMocCkgewogICAgY29uc3QgYXJlYSA9IHAuZyAqIHAuaCAvIDI7CiAgICBjb25zdCB1ID0gcC5nICsgcC5zMSArIHAuczI7CiAgICByZXR1cm4gWwogICAgICBsaW5lKCdVbWZhbmcnLCAnVSA9IGEgKyBiICsgYycsICdVID0gJyArIG4ocC5nKSArICcgKyAnICsgbihwLnMxKSArICcgKyAnICsgbihwLnMyKSwgJ1UgPSAnICsgbih1KSArICcgY20nLCAnRGVyIFVtZmFuZyBhZGRpZXJ0IGFsbGUgZHJlaSBTZWl0ZW4uJyksCiAgICAgIGxpbmUoJ0Zsw6RjaGVuaW5oYWx0JywgJ0EgPSBnIMK3IGggOiAyJywgJ0EgPSAnICsgbihwLmcpICsgJyDCtyAnICsgbihwLmgpICsgJyA6IDInLCAnQSA9ICcgKyBuKGFyZWEpICsgJyBjbcKyJywgJ0RhcyBEcmVpZWNrIGlzdCBoYWxiIHNvIGdyb8OfIHdpZSBlaW4gcGFzc2VuZGVzIFJlY2h0ZWNrLicpCiAgICBdOwogIH0KCiAgZnVuY3Rpb24gcGFyYWxsZWxvZ3JhbUZvcm11bGFzKHApIHsKICAgIGNvbnN0IHUgPSAyICogcC5nICsgMiAqIHAuczsKICAgIGNvbnN0IGEgPSBwLmcgKiBwLmg7CiAgICByZXR1cm4gWwogICAgICBsaW5lKCdVbWZhbmcnLCAnVSA9IDIgwrcgZyArIDIgwrcgcycsICdVID0gMiDCtyAnICsgbihwLmcpICsgJyArIDIgwrcgJyArIG4ocC5zKSwgJ1UgPSAnICsgbih1KSArICcgY20nLCAnR2VnZW7DvGJlcmxpZWdlbmRlIFNlaXRlbiBzaW5kIGdsZWljaCBsYW5nLicpLAogICAgICBsaW5lKCdGbMOkY2hlbmluaGFsdCcsICdBID0gZyDCtyBoJywgJ0EgPSAnICsgbihwLmcpICsgJyDCtyAnICsgbihwLmgpLCAnQSA9ICcgKyBuKGEpICsgJyBjbcKyJywgJ0bDvHIgZGllIEZsw6RjaGUgesOkaGx0IGRpZSBzZW5rcmVjaHRlIEjDtmhlLicpCiAgICBdOwogIH0KCiAgZnVuY3Rpb24gcmhvbWJ1c0Zvcm11bGFzKHApIHsKICAgIGNvbnN0IHUgPSA0ICogcC5hOwogICAgY29uc3QgYSA9IHAuYSAqIHAuaDsKICAgIHJldHVybiBbCiAgICAgIGxpbmUoJ1VtZmFuZycsICdVID0gNCDCtyBhJywgJ1UgPSA0IMK3ICcgKyBuKHAuYSksICdVID0gJyArIG4odSkgKyAnIGNtJywgJ1ZpZXIgZ2xlaWNoIGxhbmdlIFNlaXRlbiBiaWxkZW4gZGVuIFJhbmQuJyksCiAgICAgIGxpbmUoJ0Zsw6RjaGVuaW5oYWx0JywgJ0EgPSBhIMK3IGgnLCAnQSA9ICcgKyBuKHAuYSkgKyAnIMK3ICcgKyBuKHAuaCksICdBID0gJyArIG4oYSkgKyAnIGNtwrInLCAnRGllIFJhdXRlIGthbm4gd2llIGVpbiBQYXJhbGxlbG9ncmFtbSBiZXJlY2huZXQgd2VyZGVuLicpCiAgICBdOwogIH0KCiAgZnVuY3Rpb24gdHJhcGV6b2lkRm9ybXVsYXMocCkgewogICAgY29uc3QgdSA9IHAuYSArIHAuYiArIHAuYyArIHAuZDsKICAgIGNvbnN0IGEgPSAocC5hICsgcC5jKSAqIHAuaCAvIDI7CiAgICByZXR1cm4gWwogICAgICBsaW5lKCdVbWZhbmcnLCAnVSA9IGEgKyBiICsgYyArIGQnLCAnVSA9ICcgKyBuKHAuYSkgKyAnICsgJyArIG4ocC5iKSArICcgKyAnICsgbihwLmMpICsgJyArICcgKyBuKHAuZCksICdVID0gJyArIG4odSkgKyAnIGNtJywgJ0FsbGUgU2VpdGVuIGRlcyBSYW5kZXMgd2VyZGVuIGFkZGllcnQuJyksCiAgICAgIGxpbmUoJ0Zsw6RjaGVuaW5oYWx0JywgJ0EgPSAoYSArIGMpIMK3IGggOiAyJywgJ0EgPSAoJyArIG4ocC5hKSArICcgKyAnICsgbihwLmMpICsgJykgwrcgJyArIG4ocC5oKSArICcgOiAyJywgJ0EgPSAnICsgbihhKSArICcgY23CsicsICdEaWUgcGFyYWxsZWxlbiBTZWl0ZW4gd2VyZGVuIHp1c2FtbWVuIGJldHJhY2h0ZXQuJykKICAgIF07CiAgfQoKICBmdW5jdGlvbiBjaXJjbGVGb3JtdWxhcyhwKSB7CiAgICBjb25zdCB1ID0gMiAqIE1hdGguUEkgKiBwLnI7CiAgICBjb25zdCBhID0gTWF0aC5QSSAqIHAuciAqIHAucjsKICAgIHJldHVybiBbCiAgICAgIGxpbmUoJ1VtZmFuZycsICdVID0gMiDCtyDPgCDCtyByJywgJ1Ug4omIIDIgwrcgMywxNCDCtyAnICsgbihwLnIpLCAnVSDiiYggJyArIG4odSwgMikgKyAnIGNtJywgJ0RlciBLcmVpc3JhbmQgaMOkbmd0IGRpcmVrdCB2b20gUmFkaXVzIGFiLicpLAogICAgICBsaW5lKCdGbMOkY2hlbmluaGFsdCcsICdBID0gz4AgwrcgcsKyJywgJ0Eg4omIIDMsMTQgwrcgJyArIG4ocC5yKSArICfCsicsICdBIOKJiCAnICsgbihhLCAyKSArICcgY23CsicsICdEaWUgS3JlaXNmbMOkY2hlIHfDpGNoc3Qgc3TDpHJrZXIgYWxzIGRlciBSYWRpdXMuJykKICAgIF07CiAgfQoKICBmdW5jdGlvbiBjb21wb3NpdGVGb3JtdWxhcyhwKSB7CiAgICBjb25zdCB0b3RhbCA9IHAuYSAqIHAuYjsKICAgIGNvbnN0IGN1dCA9IHAuYyAqIHAuZDsKICAgIGNvbnN0IGFyZWEgPSB0b3RhbCAtIGN1dDsKICAgIGNvbnN0IHUgPSAyICogcC5hICsgMiAqIHAuYjsKICAgIHJldHVybiBbCiAgICAgIGxpbmUoJ1VtZmFuZycsICdVID0gUmFuZCBhdcOfZW4gdW5kIGlubmVuIGFkZGllcmVuJywgJ1UgPSAyIMK3ICcgKyBuKHAuYSkgKyAnICsgMiDCtyAnICsgbihwLmIpLCAnVSA9ICcgKyBuKHUpICsgJyBjbScsICdCZWkgZGllc2VtIEVjay1BdXNzY2huaXR0IGVyc2V0enQgZGVyIGlubmVyZSBSYW5kIGRpZSBmZWhsZW5kZW4gQXXDn2Vuc3TDvGNrZS4nKSwKICAgICAgbGluZSgnRmzDpGNoZW5pbmhhbHQnLCAnQSA9IGdyb8OfZXMgUmVjaHRlY2sg4oiSIEF1c3NjaG5pdHQnLCAnQSA9ICcgKyBuKHRvdGFsKSArICcg4oiSICcgKyBuKGN1dCksICdBID0gJyArIG4oYXJlYSkgKyAnIGNtwrInLCAnWmVybGVnZW4gb2RlciBFcmfDpG56ZW4gaGlsZnQgYmVpIHp1c2FtbWVuZ2VzZXR6dGVuIEZsw6RjaGVuLicpCiAgICBdOwogIH0KCiAgZnVuY3Rpb24gY3ViZUZvcm11bGFzKHApIHsKICAgIGNvbnN0IHYgPSBwLmEgKiBwLmEgKiBwLmE7CiAgICBjb25zdCBhID0gNiAqIHAuYSAqIHAuYTsKICAgIHJldHVybiBbCiAgICAgIGxpbmUoJ1ZvbHVtZW4nLCAnViA9IGEgwrcgYSDCtyBhJywgJ1YgPSAnICsgbihwLmEpICsgJyDCtyAnICsgbihwLmEpICsgJyDCtyAnICsgbihwLmEpLCAnViA9ICcgKyBuKHYpICsgJyBjbcKzJywgJ0RyZWkgUmljaHR1bmdlbiB3ZXJkZW4gbWl0ZWluYW5kZXIgbXVsdGlwbGl6aWVydC4nKSwKICAgICAgbGluZSgnT2JlcmZsw6RjaGUnLCAnTyA9IDYgwrcgYSDCtyBhJywgJ08gPSA2IMK3ICcgKyBuKHAuYSkgKyAnIMK3ICcgKyBuKHAuYSksICdPID0gJyArIG4oYSkgKyAnIGNtwrInLCAnRWluIFfDvHJmZWwgaGF0IHNlY2hzIGdsZWljaGUgUXVhZHJhdGZsw6RjaGVuLicpCiAgICBdOwogIH0KCiAgZnVuY3Rpb24gY3Vib2lkRm9ybXVsYXMocCkgewogICAgY29uc3QgZyA9IHAubCAqIHAuYjsKICAgIGNvbnN0IHYgPSBnICogcC5oOwogICAgY29uc3QgbyA9IDIgKiBwLmwgKiBwLmIgKyAyICogcC5sICogcC5oICsgMiAqIHAuYiAqIHAuaDsKICAgIHJldHVybiBbCiAgICAgIGxpbmUoJ0dydW5kZmzDpGNoZScsICdHID0gbCDCtyBiJywgJ0cgPSAnICsgbihwLmwpICsgJyDCtyAnICsgbihwLmIpLCAnRyA9ICcgKyBuKGcpICsgJyBjbcKyJywgJ0RpZSBHcnVuZGZsw6RjaGUgaXN0IGVpbiBSZWNodGVjay4nKSwKICAgICAgbGluZSgnVm9sdW1lbicsICdWID0gbCDCtyBiIMK3IGgnLCAnViA9ICcgKyBuKHAubCkgKyAnIMK3ICcgKyBuKHAuYikgKyAnIMK3ICcgKyBuKHAuaCksICdWID0gJyArIG4odikgKyAnIGNtwrMnLCAnRGllIEdydW5kZmzDpGNoZSB3aXJkIGgtbWFsIGdlc3RhcGVsdC4nKSwKICAgICAgbGluZSgnT2JlcmZsw6RjaGUnLCAnTyA9IDJsYiArIDJsaCArIDJiaCcsICdPID0gMiDCtyAnICsgbihwLmwpICsgJyDCtyAnICsgbihwLmIpICsgJyArIDIgwrcgJyArIG4ocC5sKSArICcgwrcgJyArIG4ocC5oKSArICcgKyAyIMK3ICcgKyBuKHAuYikgKyAnIMK3ICcgKyBuKHAuaCksICdPID0gJyArIG4obykgKyAnIGNtwrInLCAnSmUgendlaSBnZWdlbsO8YmVybGllZ2VuZGUgUmVjaHRlY2tlIHNpbmQgZ2xlaWNoIGdyb8OfLicpCiAgICBdOwogIH0KCiAgZnVuY3Rpb24gcHJpc21Gb3JtdWxhcyhwKSB7CiAgICBjb25zdCBnQXJlYSA9IHAuZyAqIHAuaCAvIDI7CiAgICBjb25zdCB2ID0gZ0FyZWEgKiBwLnQ7CiAgICByZXR1cm4gWwogICAgICBsaW5lKCdHcnVuZGZsw6RjaGUnLCAnRyA9IGcgwrcgaCA6IDInLCAnRyA9ICcgKyBuKHAuZykgKyAnIMK3ICcgKyBuKHAuaCkgKyAnIDogMicsICdHID0gJyArIG4oZ0FyZWEpICsgJyBjbcKyJywgJ0RpZSBHcnVuZGZsw6RjaGUgaXN0IGVpbiBEcmVpZWNrLicpLAogICAgICBsaW5lKCdWb2x1bWVuJywgJ1YgPSBHIMK3IGsnLCAnViA9ICcgKyBuKGdBcmVhKSArICcgwrcgJyArIG4ocC50KSwgJ1YgPSAnICsgbih2KSArICcgY23CsycsICdEaWUgRHJlaWVja3NmbMOkY2hlIHdpcmQgaW4gZGllIEvDtnJwZXJow7ZoZSBnZXNjaG9iZW4uJykKICAgIF07CiAgfQoKICBmdW5jdGlvbiBjeWxpbmRlckZvcm11bGFzKHApIHsKICAgIGNvbnN0IGdBcmVhID0gTWF0aC5QSSAqIHAuciAqIHAucjsKICAgIGNvbnN0IHYgPSBnQXJlYSAqIHAuaDsKICAgIHJldHVybiBbCiAgICAgIGxpbmUoJ0dydW5kZmzDpGNoZScsICdHID0gz4AgwrcgcsKyJywgJ0cg4omIIDMsMTQgwrcgJyArIG4ocC5yKSArICfCsicsICdHIOKJiCAnICsgbihnQXJlYSwgMikgKyAnIGNtwrInLCAnRGllIEdydW5kZmzDpGNoZSBpc3QgZWluIEtyZWlzLicpLAogICAgICBsaW5lKCdWb2x1bWVuJywgJ1YgPSBHIMK3IGgnLCAnViDiiYggJyArIG4oZ0FyZWEsIDIpICsgJyDCtyAnICsgbihwLmgpLCAnViDiiYggJyArIG4odiwgMikgKyAnIGNtwrMnLCAnQXVjaCBoaWVyIHdpcmQgZWluZSBHcnVuZGZsw6RjaGUgZ2VzdGFwZWx0LicpCiAgICBdOwogIH0KCiAgZnVuY3Rpb24gcHlyYW1pZEZvcm11bGFzKHApIHsKICAgIGNvbnN0IGdBcmVhID0gcC5hICogcC5hOwogICAgY29uc3QgdiA9IGdBcmVhICogcC5oIC8gMzsKICAgIHJldHVybiBbCiAgICAgIGxpbmUoJ0dydW5kZmzDpGNoZScsICdHID0gYSDCtyBhJywgJ0cgPSAnICsgbihwLmEpICsgJyDCtyAnICsgbihwLmEpLCAnRyA9ICcgKyBuKGdBcmVhKSArICcgY23CsicsICdEaWUgR3J1bmRmbMOkY2hlIGlzdCBlaW4gUXVhZHJhdC4nKSwKICAgICAgbGluZSgnVm9sdW1lbicsICdWID0gRyDCtyBoIDogMycsICdWID0gJyArIG4oZ0FyZWEpICsgJyDCtyAnICsgbihwLmgpICsgJyA6IDMnLCAnViA9ICcgKyBuKHYsIDIpICsgJyBjbcKzJywgJ0VpbmUgUHlyYW1pZGUgaGF0IGVpbiBEcml0dGVsIGRlcyBwYXNzZW5kZW4gUHJpc21hcy4nKQogICAgXTsKICB9CgogIGZ1bmN0aW9uIGNvbmVGb3JtdWxhcyhwKSB7CiAgICBjb25zdCBnQXJlYSA9IE1hdGguUEkgKiBwLnIgKiBwLnI7CiAgICBjb25zdCB2ID0gZ0FyZWEgKiBwLmggLyAzOwogICAgcmV0dXJuIFsKICAgICAgbGluZSgnR3J1bmRmbMOkY2hlJywgJ0cgPSDPgCDCtyBywrInLCAnRyDiiYggMywxNCDCtyAnICsgbihwLnIpICsgJ8KyJywgJ0cg4omIICcgKyBuKGdBcmVhLCAyKSArICcgY23CsicsICdEaWUgR3J1bmRmbMOkY2hlIGlzdCBlaW4gS3JlaXMuJyksCiAgICAgIGxpbmUoJ1ZvbHVtZW4nLCAnViA9IEcgwrcgaCA6IDMnLCAnViDiiYggJyArIG4oZ0FyZWEsIDIpICsgJyDCtyAnICsgbihwLmgpICsgJyA6IDMnLCAnViDiiYggJyArIG4odiwgMikgKyAnIGNtwrMnLCAnRWluIEtlZ2VsIGhhdCBlaW4gRHJpdHRlbCBkZXMgcGFzc2VuZGVuIFp5bGluZGVycy4nKQogICAgXTsKICB9CgogIGZ1bmN0aW9uIHNwaGVyZUZvcm11bGFzKHApIHsKICAgIGNvbnN0IHYgPSA0ICogTWF0aC5QSSAqIHAuciAqIHAuciAqIHAuciAvIDM7CiAgICBjb25zdCBvID0gNCAqIE1hdGguUEkgKiBwLnIgKiBwLnI7CiAgICByZXR1cm4gWwogICAgICBsaW5lKCdWb2x1bWVuJywgJ1YgPSA0IDogMyDCtyDPgCDCtyBywrMnLCAnViDiiYggNCA6IDMgwrcgMywxNCDCtyAnICsgbihwLnIpICsgJ8KzJywgJ1Yg4omIICcgKyBuKHYsIDIpICsgJyBjbcKzJywgJ0RpZSBLdWdlbCBpc3QgZWluIHLDpHVtbGljaGVyIEF1c2JsaWNrLicpLAogICAgICBsaW5lKCdPYmVyZmzDpGNoZScsICdPID0gNCDCtyDPgCDCtyBywrInLCAnTyDiiYggNCDCtyAzLDE0IMK3ICcgKyBuKHAucikgKyAnwrInLCAnTyDiiYggJyArIG4obywgMikgKyAnIGNtwrInLCAnRGllIE9iZXJmbMOkY2hlIGlzdCBlaW5lIEZsw6RjaGUsIGRhaGVyIGNtwrIuJykKICAgIF07CiAgfQoKICBmdW5jdGlvbiBsaW5lKGxhYmVsLCBnZW5lcmFsLCBpbnNlcnRlZCwgcmVzdWx0LCB3aHkpIHsKICAgIHJldHVybiB7IGxhYmVsOiBsYWJlbCwgZ2VuZXJhbDogZ2VuZXJhbCwgaW5zZXJ0ZWQ6IGluc2VydGVkLCByZXN1bHQ6IHJlc3VsdCwgd2h5OiB3aHkgfTsKICB9CgogIGZ1bmN0aW9uIG4odmFsdWUsIGRpZ2l0cykgewogICAgY29uc3QgZCA9IGRpZ2l0cyA9PT0gdW5kZWZpbmVkID8gMiA6IGRpZ2l0czsKICAgIGNvbnN0IHJvdW5kZWQgPSBNYXRoLnJvdW5kKHZhbHVlICogTWF0aC5wb3coMTAsIGQpKSAvIE1hdGgucG93KDEwLCBkKTsKICAgIGlmIChNYXRoLmFicyhyb3VuZGVkIC0gTWF0aC5yb3VuZChyb3VuZGVkKSkgPCAwLjAwMDEpIHsKICAgICAgcmV0dXJuIFN0cmluZyhNYXRoLnJvdW5kKHJvdW5kZWQpKTsKICAgIH0KICAgIHJldHVybiBTdHJpbmcocm91bmRlZCkucmVwbGFjZSgnLicsICcsJyk7CiAgfQoKICBmdW5jdGlvbiBkcmF3U2hhcGUoY2FudmFzLCBzaGFwZUlkLCBwYXJhbXMpIHsKICAgIGNvbnN0IHNldHVwID0gcHJlcGFyZUNhbnZhcyhjYW52YXMpOwogICAgY29uc3QgY3R4ID0gc2V0dXAuY3R4OwogICAgY29uc3QgdyA9IHNldHVwLnc7CiAgICBjb25zdCBoID0gc2V0dXAuaDsKICAgIGRyYXdHcmlkKGN0eCwgdywgaCk7CiAgICBpZiAoc2hhcGVJZCA9PT0gJ3NxdWFyZScpIHsKICAgICAgZHJhd1NxdWFyZShjdHgsIHcsIGgsIHBhcmFtcyk7CiAgICB9IGVsc2UgaWYgKHNoYXBlSWQgPT09ICdyZWN0YW5nbGUnKSB7CiAgICAgIGRyYXdSZWN0YW5nbGUoY3R4LCB3LCBoLCBwYXJhbXMpOwogICAgfSBlbHNlIGlmIChzaGFwZUlkID09PSAndHJpYW5nbGUnKSB7CiAgICAgIGRyYXdUcmlhbmdsZShjdHgsIHcsIGgsIHBhcmFtcyk7CiAgICB9IGVsc2UgaWYgKHNoYXBlSWQgPT09ICdwYXJhbGxlbG9ncmFtJykgewogICAgICBkcmF3UGFyYWxsZWxvZ3JhbShjdHgsIHcsIGgsIHBhcmFtcyk7CiAgICB9IGVsc2UgaWYgKHNoYXBlSWQgPT09ICdyaG9tYnVzJykgewogICAgICBkcmF3UmhvbWJ1cyhjdHgsIHcsIGgsIHBhcmFtcyk7CiAgICB9IGVsc2UgaWYgKHNoYXBlSWQgPT09ICd0cmFwZXpvaWQnKSB7CiAgICAgIGRyYXdUcmFwZXpvaWQoY3R4LCB3LCBoLCBwYXJhbXMpOwogICAgfSBlbHNlIGlmIChzaGFwZUlkID09PSAnY2lyY2xlJykgewogICAgICBkcmF3Q2lyY2xlKGN0eCwgdywgaCwgcGFyYW1zKTsKICAgIH0gZWxzZSBpZiAoc2hhcGVJZCA9PT0gJ2NvbXBvc2l0ZScpIHsKICAgICAgZHJhd0NvbXBvc2l0ZShjdHgsIHcsIGgsIHBhcmFtcyk7CiAgICB9IGVsc2UgaWYgKHNoYXBlSWQgPT09ICdjdWJlJykgewogICAgICBkcmF3Q3ViZShjdHgsIHcsIGgsIHBhcmFtcyk7CiAgICB9IGVsc2UgaWYgKHNoYXBlSWQgPT09ICdjdWJvaWQnKSB7CiAgICAgIGRyYXdDdWJvaWQoY3R4LCB3LCBoLCBwYXJhbXMpOwogICAgfSBlbHNlIGlmIChzaGFwZUlkID09PSAncHJpc20nKSB7CiAgICAgIGRyYXdQcmlzbShjdHgsIHcsIGgsIHBhcmFtcyk7CiAgICB9IGVsc2UgaWYgKHNoYXBlSWQgPT09ICdjeWxpbmRlcicpIHsKICAgICAgZHJhd0N5bGluZGVyKGN0eCwgdywgaCwgcGFyYW1zKTsKICAgIH0gZWxzZSBpZiAoc2hhcGVJZCA9PT0gJ3B5cmFtaWQnKSB7CiAgICAgIGRyYXdQeXJhbWlkKGN0eCwgdywgaCwgcGFyYW1zKTsKICAgIH0gZWxzZSBpZiAoc2hhcGVJZCA9PT0gJ2NvbmUnKSB7CiAgICAgIGRyYXdDb25lKGN0eCwgdywgaCwgcGFyYW1zKTsKICAgIH0gZWxzZSBpZiAoc2hhcGVJZCA9PT0gJ3NwaGVyZScpIHsKICAgICAgZHJhd1NwaGVyZShjdHgsIHcsIGgsIHBhcmFtcyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwcmVwYXJlQ2FudmFzKGNhbnZhcykgewogICAgY29uc3QgcmVjdCA9IGNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgIGNvbnN0IHJhdGlvID0gdHlwZW9mIGRldmljZVBpeGVsUmF0aW8gPT09ICdudW1iZXInID8gTWF0aC5taW4oMiwgZGV2aWNlUGl4ZWxSYXRpbykgOiAxOwogICAgY29uc3Qgd2lkdGggPSBNYXRoLm1heCgzMjAsIHJlY3Qud2lkdGggfHwgNjQwKTsKICAgIGNvbnN0IGhlaWdodCA9IE1hdGgubWF4KDI2MCwgcmVjdC5oZWlnaHQgfHwgNDIwKTsKICAgIGNhbnZhcy53aWR0aCA9IE1hdGgucm91bmQod2lkdGggKiByYXRpbyk7CiAgICBjYW52YXMuaGVpZ2h0ID0gTWF0aC5yb3VuZChoZWlnaHQgKiByYXRpbyk7CiAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKICAgIGN0eC5zZXRUcmFuc2Zvcm0ocmF0aW8sIDAsIDAsIHJhdGlvLCAwLCAwKTsKICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7CiAgICBjdHgubGluZUpvaW4gPSAncm91bmQnOwogICAgY3R4LmxpbmVDYXAgPSAncm91bmQnOwogICAgY3R4LmZvbnQgPSAnNzAwIDE1cHggc3lzdGVtLXVpLCBzYW5zLXNlcmlmJzsKICAgIHJldHVybiB7IGN0eDogY3R4LCB3OiB3aWR0aCwgaDogaGVpZ2h0IH07CiAgfQoKICBmdW5jdGlvbiBkcmF3R3JpZChjdHgsIHcsIGgpIHsKICAgIGN0eC5maWxsU3R5bGUgPSAnI2ZiZmRmZic7CiAgICBjdHguZmlsbFJlY3QoMCwgMCwgdywgaCk7CiAgICBjdHguc3Ryb2tlU3R5bGUgPSAncmdiYSgzNiwgODcsIDIxNCwgMC4wOCknOwogICAgY3R4LmxpbmVXaWR0aCA9IDE7CiAgICBmb3IgKGxldCB4ID0gMDsgeCA8PSB3OyB4ICs9IDI0KSB7CiAgICAgIHBhdGhMaW5lKGN0eCwgeCwgMCwgeCwgaCk7CiAgICB9CiAgICBmb3IgKGxldCB5ID0gMDsgeSA8PSBoOyB5ICs9IDI0KSB7CiAgICAgIHBhdGhMaW5lKGN0eCwgMCwgeSwgdywgeSk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXRoTGluZShjdHgsIHgxLCB5MSwgeDIsIHkyKSB7CiAgICBjdHguYmVnaW5QYXRoKCk7CiAgICBjdHgubW92ZVRvKHgxLCB5MSk7CiAgICBjdHgubGluZVRvKHgyLCB5Mik7CiAgICBjdHguc3Ryb2tlKCk7CiAgfQoKICBmdW5jdGlvbiBsYWJlbChjdHgsIHRleHQsIHgsIHksIGNvbG9yKSB7CiAgICBjdHguc2F2ZSgpOwogICAgY3R4LmZpbGxTdHlsZSA9IGNvbG9yIHx8ICcjMTcyMDMzJzsKICAgIGN0eC5zdHJva2VTdHlsZSA9ICdyZ2JhKDI1NSwyNTUsMjU1LDAuODYpJzsKICAgIGN0eC5saW5lV2lkdGggPSA1OwogICAgY3R4LnN0cm9rZVRleHQodGV4dCwgeCwgeSk7CiAgICBjdHguZmlsbFRleHQodGV4dCwgeCwgeSk7CiAgICBjdHgucmVzdG9yZSgpOwogIH0KCiAgZnVuY3Rpb24gcG9seShjdHgsIHBvaW50cywgZmlsbCwgc3Ryb2tlKSB7CiAgICBjdHguYmVnaW5QYXRoKCk7CiAgICBjdHgubW92ZVRvKHBvaW50c1swXVswXSwgcG9pbnRzWzBdWzFdKTsKICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgIGN0eC5saW5lVG8ocG9pbnRzW2ldWzBdLCBwb2ludHNbaV1bMV0pOwogICAgfQogICAgY3R4LmNsb3NlUGF0aCgpOwogICAgY3R4LmZpbGxTdHlsZSA9IGZpbGw7CiAgICBjdHguZmlsbCgpOwogICAgY3R4LnN0cm9rZVN0eWxlID0gc3Ryb2tlOwogICAgY3R4LmxpbmVXaWR0aCA9IDQ7CiAgICBjdHguc3Ryb2tlKCk7CiAgfQoKICBmdW5jdGlvbiBkcmF3TWVhc3VyZShjdHgsIHgxLCB5MSwgeDIsIHkyLCB0ZXh0KSB7CiAgICBjdHguc2F2ZSgpOwogICAgY3R4LnN0cm9rZVN0eWxlID0gJyMyNDU3ZDYnOwogICAgY3R4LmxpbmVXaWR0aCA9IDM7CiAgICBwYXRoTGluZShjdHgsIHgxLCB5MSwgeDIsIHkyKTsKICAgIGNvbnN0IG14ID0gKHgxICsgeDIpIC8gMjsKICAgIGNvbnN0IG15ID0gKHkxICsgeTIpIC8gMjsKICAgIGxhYmVsKGN0eCwgdGV4dCwgbXggKyA2LCBteSAtIDgsICcjMTczYTk0Jyk7CiAgICBjdHgucmVzdG9yZSgpOwogIH0KCiAgZnVuY3Rpb24gZHJhd0Rhc2hlZChjdHgsIHgxLCB5MSwgeDIsIHkyLCB0ZXh0KSB7CiAgICBjdHguc2F2ZSgpOwogICAgY3R4LnNldExpbmVEYXNoKFs4LCA4XSk7CiAgICBjdHguc3Ryb2tlU3R5bGUgPSAnIzBkN2I1Zic7CiAgICBjdHgubGluZVdpZHRoID0gMzsKICAgIHBhdGhMaW5lKGN0eCwgeDEsIHkxLCB4MiwgeTIpOwogICAgY3R4LnNldExpbmVEYXNoKFtdKTsKICAgIGxhYmVsKGN0eCwgdGV4dCwgKHgxICsgeDIpIC8gMiArIDgsICh5MSArIHkyKSAvIDIsICcjMDc1ZjQ5Jyk7CiAgICBjdHgucmVzdG9yZSgpOwogIH0KCiAgZnVuY3Rpb24gZHJhd1NxdWFyZShjdHgsIHcsIGgsIHApIHsKICAgIGNvbnN0IHNpZGUgPSBNYXRoLm1pbih3LCBoKSAqIDAuNDg7CiAgICBjb25zdCB4ID0gKHcgLSBzaWRlKSAvIDI7CiAgICBjb25zdCB5ID0gKGggLSBzaWRlKSAvIDIgKyAxMjsKICAgIHBvbHkoY3R4LCBbW3gsIHldLCBbeCArIHNpZGUsIHldLCBbeCArIHNpZGUsIHkgKyBzaWRlXSwgW3gsIHkgKyBzaWRlXV0sICdyZ2JhKDM2LDg3LDIxNCwwLjE0KScsICcjMjQ1N2Q2Jyk7CiAgICBkcmF3TWVhc3VyZShjdHgsIHgsIHkgKyBzaWRlICsgMjQsIHggKyBzaWRlLCB5ICsgc2lkZSArIDI0LCAnYSA9ICcgKyBuKHAuYSkgKyAnIGNtJyk7CiAgICBkcmF3TWVhc3VyZShjdHgsIHggLSAyNCwgeSwgeCAtIDI0LCB5ICsgc2lkZSwgJ2EnKTsKICAgIGxhYmVsKGN0eCwgJ0EgPSAnICsgbihwLmEgKiBwLmEpICsgJyBjbcKyJywgeCArIHNpZGUgKiAwLjI1LCB5ICsgc2lkZSAqIDAuNTIsICcjMTcyMDMzJyk7CiAgfQoKICBmdW5jdGlvbiBkcmF3UmVjdGFuZ2xlKGN0eCwgdywgaCwgcCkgewogICAgY29uc3QgbWF4VyA9IHcgKiAwLjY4OwogICAgY29uc3QgbWF4SCA9IGggKiAwLjU7CiAgICBjb25zdCBzY2FsZSA9IE1hdGgubWluKG1heFcgLyBwLmEsIG1heEggLyBwLmIpOwogICAgY29uc3QgcncgPSBwLmEgKiBzY2FsZTsKICAgIGNvbnN0IHJoID0gcC5iICogc2NhbGU7CiAgICBjb25zdCB4ID0gKHcgLSBydykgLyAyOwogICAgY29uc3QgeSA9IChoIC0gcmgpIC8gMiArIDEwOwogICAgcG9seShjdHgsIFtbeCwgeV0sIFt4ICsgcncsIHldLCBbeCArIHJ3LCB5ICsgcmhdLCBbeCwgeSArIHJoXV0sICdyZ2JhKDM2LDg3LDIxNCwwLjE0KScsICcjMjQ1N2Q2Jyk7CiAgICBkcmF3TWVhc3VyZShjdHgsIHgsIHkgKyByaCArIDI0LCB4ICsgcncsIHkgKyByaCArIDI0LCAnYSA9ICcgKyBuKHAuYSkgKyAnIGNtJyk7CiAgICBkcmF3TWVhc3VyZShjdHgsIHggLSAyNCwgeSwgeCAtIDI0LCB5ICsgcmgsICdiID0gJyArIG4ocC5iKSArICcgY20nKTsKICAgIGxhYmVsKGN0eCwgJ0EgPSAnICsgbihwLmEgKiBwLmIpICsgJyBjbcKyJywgeCArIHJ3ICogMC4zNCwgeSArIHJoICogMC41NSwgJyMxNzIwMzMnKTsKICB9CgogIGZ1bmN0aW9uIGRyYXdUcmlhbmdsZShjdHgsIHcsIGgsIHApIHsKICAgIGNvbnN0IG1heFcgPSB3ICogMC42ODsKICAgIGNvbnN0IG1heEggPSBoICogMC41MjsKICAgIGNvbnN0IHNjYWxlID0gTWF0aC5taW4obWF4VyAvIHAuZywgbWF4SCAvIHAuaCk7CiAgICBjb25zdCBidyA9IHAuZyAqIHNjYWxlOwogICAgY29uc3QgdGggPSBwLmggKiBzY2FsZTsKICAgIGNvbnN0IHggPSAodyAtIGJ3KSAvIDI7CiAgICBjb25zdCB5ID0gKGggKyB0aCkgLyAyICsgMjg7CiAgICBjb25zdCBhcGV4WCA9IHggKyBidyAqIDAuNTg7CiAgICBjb25zdCBhcGV4WSA9IHkgLSB0aDsKICAgIHBvbHkoY3R4LCBbW3gsIHldLCBbeCArIGJ3LCB5XSwgW2FwZXhYLCBhcGV4WV1dLCAncmdiYSgxMywxMjMsOTUsMC4xNCknLCAnIzBkN2I1ZicpOwogICAgY3R4LnNhdmUoKTsKICAgIGN0eC5zdHJva2VTdHlsZSA9ICdyZ2JhKDM2LDg3LDIxNCwwLjI4KSc7CiAgICBjdHgubGluZVdpZHRoID0gMjsKICAgIGN0eC5zdHJva2VSZWN0KHgsIGFwZXhZLCBidywgdGgpOwogICAgY3R4LnJlc3RvcmUoKTsKICAgIGRyYXdNZWFzdXJlKGN0eCwgeCwgeSArIDIyLCB4ICsgYncsIHkgKyAyMiwgJ2cgPSAnICsgbihwLmcpICsgJyBjbScpOwogICAgZHJhd0Rhc2hlZChjdHgsIGFwZXhYLCBhcGV4WSwgYXBleFgsIHksICdoID0gJyArIG4ocC5oKSArICcgY20nKTsKICAgIGxhYmVsKGN0eCwgJ0EgPSBnIMK3IGggOiAyJywgeCArIGJ3ICogMC4zMiwgeSAtIHRoICogMC4zOCwgJyMxNzIwMzMnKTsKICB9CgogIGZ1bmN0aW9uIGRyYXdQYXJhbGxlbG9ncmFtKGN0eCwgdywgaCwgcCkgewogICAgY29uc3QgbWF4VyA9IHcgKiAwLjY0OwogICAgY29uc3QgbWF4SCA9IGggKiAwLjQ1OwogICAgY29uc3Qgc2NhbGUgPSBNYXRoLm1pbihtYXhXIC8gcC5nLCBtYXhIIC8gcC5oKTsKICAgIGNvbnN0IGJ3ID0gcC5nICogc2NhbGU7CiAgICBjb25zdCBwaCA9IHAuaCAqIHNjYWxlOwogICAgY29uc3Qgc2tldyA9IE1hdGgubWluKDgwLCBidyAqIDAuMjUpOwogICAgY29uc3QgeCA9ICh3IC0gYncgLSBza2V3KSAvIDI7CiAgICBjb25zdCB5ID0gKGggLSBwaCkgLyAyICsgMjg7CiAgICBjb25zdCBwb2ludHMgPSBbW3ggKyBza2V3LCB5XSwgW3ggKyBza2V3ICsgYncsIHldLCBbeCArIGJ3LCB5ICsgcGhdLCBbeCwgeSArIHBoXV07CiAgICBwb2x5KGN0eCwgcG9pbnRzLCAncmdiYSgzNiw4NywyMTQsMC4xMyknLCAnIzI0NTdkNicpOwogICAgZHJhd01lYXN1cmUoY3R4LCB4LCB5ICsgcGggKyAyNCwgeCArIGJ3LCB5ICsgcGggKyAyNCwgJ2cgPSAnICsgbihwLmcpICsgJyBjbScpOwogICAgZHJhd0Rhc2hlZChjdHgsIHggKyBza2V3LCB5LCB4ICsgc2tldywgeSArIHBoLCAnaCA9ICcgKyBuKHAuaCkgKyAnIGNtJyk7CiAgICBsYWJlbChjdHgsICdBID0gZyDCtyBoJywgeCArIGJ3ICogMC4zNCwgeSArIHBoICogMC41NSwgJyMxNzIwMzMnKTsKICB9CgogIGZ1bmN0aW9uIGRyYXdSaG9tYnVzKGN0eCwgdywgaCwgcCkgewogICAgY29uc3Qgc2lkZSA9IE1hdGgubWluKHcsIGgpICogMC40MjsKICAgIGNvbnN0IHggPSB3IC8gMjsKICAgIGNvbnN0IHkgPSBoIC8gMiArIDE4OwogICAgY29uc3QgcG9pbnRzID0gW1t4LCB5IC0gc2lkZSAqIDAuNjVdLCBbeCArIHNpZGUsIHldLCBbeCwgeSArIHNpZGUgKiAwLjY1XSwgW3ggLSBzaWRlLCB5XV07CiAgICBwb2x5KGN0eCwgcG9pbnRzLCAncmdiYSgxNjcsOTAsMCwwLjE0KScsICcjYTc1YTAwJyk7CiAgICBkcmF3TWVhc3VyZShjdHgsIHggLSBzaWRlLCB5ICsgc2lkZSAqIDAuNjUgKyAyNCwgeCwgeSArIHNpZGUgKiAwLjY1ICsgMjQsICdhID0gJyArIG4ocC5hKSArICcgY20nKTsKICAgIGRyYXdEYXNoZWQoY3R4LCB4IC0gc2lkZSAqIDAuNDUsIHkgLSBzaWRlICogMC4zNSwgeCAtIHNpZGUgKiAwLjQ1LCB5ICsgc2lkZSAqIDAuMzUsICdoID0gJyArIG4ocC5oKSArICcgY20nKTsKICAgIGxhYmVsKGN0eCwgJ0EgPSBhIMK3IGgnLCB4IC0gc2lkZSAqIDAuMjgsIHkgKyA2LCAnIzE3MjAzMycpOwogIH0KCiAgZnVuY3Rpb24gZHJhd1RyYXBlem9pZChjdHgsIHcsIGgsIHApIHsKICAgIGNvbnN0IG1heFcgPSB3ICogMC43MjsKICAgIGNvbnN0IG1heEggPSBoICogMC41OwogICAgY29uc3Qgc2NhbGUgPSBNYXRoLm1pbihtYXhXIC8gcC5hLCBtYXhIIC8gcC5oKTsKICAgIGNvbnN0IGJhc2UgPSBwLmEgKiBzY2FsZTsKICAgIGNvbnN0IHVwcGVyID0gcC5jICogc2NhbGU7CiAgICBjb25zdCB0aCA9IHAuaCAqIHNjYWxlOwogICAgY29uc3QgeCA9ICh3IC0gYmFzZSkgLyAyOwogICAgY29uc3QgeSA9IChoICsgdGgpIC8gMiArIDI0OwogICAgY29uc3Qgb2Zmc2V0ID0gKGJhc2UgLSB1cHBlcikgLyAyOwogICAgY29uc3QgcG9pbnRzID0gW1t4LCB5XSwgW3ggKyBiYXNlLCB5XSwgW3ggKyBvZmZzZXQgKyB1cHBlciwgeSAtIHRoXSwgW3ggKyBvZmZzZXQsIHkgLSB0aF1dOwogICAgcG9seShjdHgsIHBvaW50cywgJ3JnYmEoMzYsODcsMjE0LDAuMTMpJywgJyMyNDU3ZDYnKTsKICAgIGRyYXdNZWFzdXJlKGN0eCwgeCwgeSArIDIyLCB4ICsgYmFzZSwgeSArIDIyLCAnYSA9ICcgKyBuKHAuYSkpOwogICAgZHJhd01lYXN1cmUoY3R4LCB4ICsgb2Zmc2V0LCB5IC0gdGggLSAxOCwgeCArIG9mZnNldCArIHVwcGVyLCB5IC0gdGggLSAxOCwgJ2MgPSAnICsgbihwLmMpKTsKICAgIGRyYXdEYXNoZWQoY3R4LCB4ICsgb2Zmc2V0ICsgdXBwZXIgKyAxOCwgeSAtIHRoLCB4ICsgb2Zmc2V0ICsgdXBwZXIgKyAxOCwgeSwgJ2ggPSAnICsgbihwLmgpKTsKICAgIGxhYmVsKGN0eCwgJ0EgPSAoYSArIGMpIMK3IGggOiAyJywgeCArIGJhc2UgKiAwLjIyLCB5IC0gdGggKiAwLjQ1LCAnIzE3MjAzMycpOwogIH0KCiAgZnVuY3Rpb24gZHJhd0NpcmNsZShjdHgsIHcsIGgsIHApIHsKICAgIGNvbnN0IHIgPSBNYXRoLm1pbih3LCBoKSAqIDAuMjY7CiAgICBjb25zdCB4ID0gdyAvIDI7CiAgICBjb25zdCB5ID0gaCAvIDIgKyA4OwogICAgY3R4LnNhdmUoKTsKICAgIGN0eC5iZWdpblBhdGgoKTsKICAgIGN0eC5hcmMoeCwgeSwgciwgMCwgTWF0aC5QSSAqIDIpOwogICAgY3R4LmZpbGxTdHlsZSA9ICdyZ2JhKDEzLDEyMyw5NSwwLjEzKSc7CiAgICBjdHguZmlsbCgpOwogICAgY3R4LnN0cm9rZVN0eWxlID0gJyMwZDdiNWYnOwogICAgY3R4LmxpbmVXaWR0aCA9IDQ7CiAgICBjdHguc3Ryb2tlKCk7CiAgICBjdHgucmVzdG9yZSgpOwogICAgZHJhd01lYXN1cmUoY3R4LCB4LCB5LCB4ICsgciwgeSwgJ3IgPSAnICsgbihwLnIpICsgJyBjbScpOwogICAgbGFiZWwoY3R4LCAnz4Ag4omIIDMsMTQnLCB4IC0gciAqIDAuMzgsIHkgLSByIC0gMTgsICcjMTcyMDMzJyk7CiAgfQoKICBmdW5jdGlvbiBkcmF3Q29tcG9zaXRlKGN0eCwgdywgaCwgcCkgewogICAgY29uc3QgbWF4VyA9IHcgKiAwLjc7CiAgICBjb25zdCBtYXhIID0gaCAqIDAuNTI7CiAgICBjb25zdCBzY2FsZSA9IE1hdGgubWluKG1heFcgLyBwLmEsIG1heEggLyBwLmIpOwogICAgY29uc3QgYXcgPSBwLmEgKiBzY2FsZTsKICAgIGNvbnN0IGJoID0gcC5iICogc2NhbGU7CiAgICBjb25zdCBjdyA9IE1hdGgubWluKHAuYyAqIHNjYWxlLCBhdyAqIDAuNTUpOwogICAgY29uc3QgZGggPSBNYXRoLm1pbihwLmQgKiBzY2FsZSwgYmggKiAwLjU1KTsKICAgIGNvbnN0IHggPSAodyAtIGF3KSAvIDI7CiAgICBjb25zdCB5ID0gKGggLSBiaCkgLyAyICsgMjQ7CiAgICBjb25zdCBwb2ludHMgPSBbW3gsIHldLCBbeCArIGF3IC0gY3csIHldLCBbeCArIGF3IC0gY3csIHkgKyBkaF0sIFt4ICsgYXcsIHkgKyBkaF0sIFt4ICsgYXcsIHkgKyBiaF0sIFt4LCB5ICsgYmhdXTsKICAgIHBvbHkoY3R4LCBwb2ludHMsICdyZ2JhKDM2LDg3LDIxNCwwLjE0KScsICcjMjQ1N2Q2Jyk7CiAgICBjdHguc2F2ZSgpOwogICAgY3R4LnN0cm9rZVN0eWxlID0gJyNhNzVhMDAnOwogICAgY3R4LmxpbmVXaWR0aCA9IDM7CiAgICBjdHguc2V0TGluZURhc2goWzcsIDZdKTsKICAgIGN0eC5zdHJva2VSZWN0KHggKyBhdyAtIGN3LCB5LCBjdywgZGgpOwogICAgY3R4LnNldExpbmVEYXNoKFtdKTsKICAgIGN0eC5yZXN0b3JlKCk7CiAgICBkcmF3TWVhc3VyZShjdHgsIHgsIHkgKyBiaCArIDIyLCB4ICsgYXcsIHkgKyBiaCArIDIyLCAnYSA9ICcgKyBuKHAuYSkpOwogICAgZHJhd01lYXN1cmUoY3R4LCB4IC0gMjQsIHksIHggLSAyNCwgeSArIGJoLCAnYiA9ICcgKyBuKHAuYikpOwogICAgbGFiZWwoY3R4LCAnQSA9IGdyb8OfIOKIkiBBdXNzY2huaXR0JywgeCArIGF3ICogMC4xOCwgeSArIGJoICogMC41NSwgJyMxNzIwMzMnKTsKICB9CgogIGZ1bmN0aW9uIGRyYXdDdWJlKGN0eCwgdywgaCwgcCkgewogICAgY29uc3QgcyA9IE1hdGgubWluKHcsIGgpICogMC4zNDsKICAgIGNvbnN0IHggPSB3IC8gMiAtIHMgKiAwLjU4OwogICAgY29uc3QgeSA9IGggLyAyIC0gcyAqIDAuMjg7CiAgICBjb25zdCBkID0gcyAqIDAuMzI7CiAgICBkcmF3Qm94KGN0eCwgeCwgeSwgcywgcywgZCwgJyMyNDU3ZDYnLCAncmdiYSgzNiw4NywyMTQsMC4xMyknKTsKICAgIGRyYXdNZWFzdXJlKGN0eCwgeCwgeSArIHMgKyAyOCwgeCArIHMsIHkgKyBzICsgMjgsICdhID0gJyArIG4ocC5hKSArICcgY20nKTsKICAgIGxhYmVsKGN0eCwgJ1YgPSBhIMK3IGEgwrcgYScsIHggKyBzICogMC4xNiwgeSArIHMgKiAwLjUyLCAnIzE3MjAzMycpOwogIH0KCiAgZnVuY3Rpb24gZHJhd0N1Ym9pZChjdHgsIHcsIGgsIHApIHsKICAgIGNvbnN0IG1heFcgPSB3ICogMC41ODsKICAgIGNvbnN0IG1heEggPSBoICogMC4zNjsKICAgIGNvbnN0IHNjYWxlID0gTWF0aC5taW4obWF4VyAvIHAubCwgbWF4SCAvIHAuaCk7CiAgICBjb25zdCBidyA9IHAubCAqIHNjYWxlOwogICAgY29uc3QgYmggPSBwLmggKiBzY2FsZTsKICAgIGNvbnN0IGQgPSBNYXRoLm1heCgzNiwgcC5iICogc2NhbGUgKiAwLjYyKTsKICAgIGNvbnN0IHggPSB3IC8gMiAtIGJ3ICogMC41NjsKICAgIGNvbnN0IHkgPSBoIC8gMiAtIGJoICogMC4xNTsKICAgIGRyYXdCb3goY3R4LCB4LCB5LCBidywgYmgsIGQsICcjMjQ1N2Q2JywgJ3JnYmEoMzYsODcsMjE0LDAuMTMpJyk7CiAgICBkcmF3TWVhc3VyZShjdHgsIHgsIHkgKyBiaCArIDI4LCB4ICsgYncsIHkgKyBiaCArIDI4LCAnbCA9ICcgKyBuKHAubCkpOwogICAgZHJhd01lYXN1cmUoY3R4LCB4ICsgYncgKyBkICsgMTYsIHkgLSBkLCB4ICsgYncgKyBkICsgMTYsIHkgKyBiaCAtIGQsICdoID0gJyArIG4ocC5oKSk7CiAgICBsYWJlbChjdHgsICdWID0gbCDCtyBiIMK3IGgnLCB4ICsgYncgKiAwLjE4LCB5ICsgYmggKiAwLjUyLCAnIzE3MjAzMycpOwogIH0KCiAgZnVuY3Rpb24gZHJhd0JveChjdHgsIHgsIHksIGJ3LCBiaCwgZCwgc3Ryb2tlLCBmaWxsKSB7CiAgICBjb25zdCBmcm9udCA9IFtbeCwgeV0sIFt4ICsgYncsIHldLCBbeCArIGJ3LCB5ICsgYmhdLCBbeCwgeSArIGJoXV07CiAgICBjb25zdCBzaWRlID0gW1t4ICsgYncsIHldLCBbeCArIGJ3ICsgZCwgeSAtIGRdLCBbeCArIGJ3ICsgZCwgeSArIGJoIC0gZF0sIFt4ICsgYncsIHkgKyBiaF1dOwogICAgY29uc3Qgcm9vZiA9IFtbeCwgeV0sIFt4ICsgZCwgeSAtIGRdLCBbeCArIGJ3ICsgZCwgeSAtIGRdLCBbeCArIGJ3LCB5XV07CiAgICBwb2x5KGN0eCwgc2lkZSwgJ3JnYmEoMTMsMTIzLDk1LDAuMTIpJywgJyMwZDdiNWYnKTsKICAgIHBvbHkoY3R4LCByb29mLCAncmdiYSgxNjcsOTAsMCwwLjEyKScsICcjYTc1YTAwJyk7CiAgICBwb2x5KGN0eCwgZnJvbnQsIGZpbGwsIHN0cm9rZSk7CiAgfQoKICBmdW5jdGlvbiBkcmF3UHJpc20oY3R4LCB3LCBoLCBwKSB7CiAgICBjb25zdCBidyA9IHcgKiAwLjM1OwogICAgY29uc3QgdGggPSBoICogMC4zOwogICAgY29uc3QgZCA9IHcgKiAwLjE4OwogICAgY29uc3QgeCA9IHcgKiAwLjI2OwogICAgY29uc3QgeSA9IGggKiAwLjYyOwogICAgY29uc3QgYTEgPSBbeCwgeV07CiAgICBjb25zdCBhMiA9IFt4ICsgYncsIHldOwogICAgY29uc3QgYTMgPSBbeCArIGJ3ICogMC41NSwgeSAtIHRoXTsKICAgIGNvbnN0IGIxID0gW2ExWzBdICsgZCwgYTFbMV0gLSBkICogMC40NV07CiAgICBjb25zdCBiMiA9IFthMlswXSArIGQsIGEyWzFdIC0gZCAqIDAuNDVdOwogICAgY29uc3QgYjMgPSBbYTNbMF0gKyBkLCBhM1sxXSAtIGQgKiAwLjQ1XTsKICAgIHBvbHkoY3R4LCBbYTEsIGEyLCBhM10sICdyZ2JhKDM2LDg3LDIxNCwwLjE1KScsICcjMjQ1N2Q2Jyk7CiAgICBwb2x5KGN0eCwgW2EyLCBiMiwgYjMsIGEzXSwgJ3JnYmEoMTMsMTIzLDk1LDAuMTIpJywgJyMwZDdiNWYnKTsKICAgIHBvbHkoY3R4LCBbYTEsIGIxLCBiMiwgYTJdLCAncmdiYSgxNjcsOTAsMCwwLjEyKScsICcjYTc1YTAwJyk7CiAgICBjdHguc2F2ZSgpOwogICAgY3R4LnN0cm9rZVN0eWxlID0gJyMyNDU3ZDYnOwogICAgY3R4LmxpbmVXaWR0aCA9IDQ7CiAgICBwYXRoTGluZShjdHgsIGExWzBdLCBhMVsxXSwgYjFbMF0sIGIxWzFdKTsKICAgIHBhdGhMaW5lKGN0eCwgYTNbMF0sIGEzWzFdLCBiM1swXSwgYjNbMV0pOwogICAgY3R4LnJlc3RvcmUoKTsKICAgIGRyYXdNZWFzdXJlKGN0eCwgYTFbMF0sIGExWzFdICsgMjIsIGEyWzBdLCBhMlsxXSArIDIyLCAnZyA9ICcgKyBuKHAuZykpOwogICAgZHJhd0Rhc2hlZChjdHgsIGEzWzBdLCBhM1sxXSwgYTNbMF0sIGExWzFdLCAnaCA9ICcgKyBuKHAuaCkpOwogICAgbGFiZWwoY3R4LCAnViA9IEcgwrcgaycsIHggKyBidyAqIDAuNDIsIHkgLSB0aCAqIDAuMjgsICcjMTcyMDMzJyk7CiAgfQoKICBmdW5jdGlvbiBkcmF3Q3lsaW5kZXIoY3R4LCB3LCBoLCBwKSB7CiAgICBjb25zdCBjeCA9IHcgLyAyOwogICAgY29uc3QgY3kgPSBoIC8gMiArIDEwOwogICAgY29uc3QgcnggPSBNYXRoLm1pbih3LCBoKSAqIDAuMjI7CiAgICBjb25zdCByeSA9IHJ4ICogMC4zMjsKICAgIGNvbnN0IGhlaWdodCA9IE1hdGgubWluKGggKiAwLjQ4LCBwLmggKiAyOCk7CiAgICBjdHguc2F2ZSgpOwogICAgY3R4LmZpbGxTdHlsZSA9ICdyZ2JhKDM2LDg3LDIxNCwwLjEyKSc7CiAgICBjdHguc3Ryb2tlU3R5bGUgPSAnIzI0NTdkNic7CiAgICBjdHgubGluZVdpZHRoID0gNDsKICAgIGN0eC5iZWdpblBhdGgoKTsKICAgIGN0eC5lbGxpcHNlKGN4LCBjeSAtIGhlaWdodCAvIDIsIHJ4LCByeSwgMCwgMCwgTWF0aC5QSSAqIDIpOwogICAgY3R4LmZpbGwoKTsKICAgIGN0eC5zdHJva2UoKTsKICAgIHBhdGhMaW5lKGN0eCwgY3ggLSByeCwgY3kgLSBoZWlnaHQgLyAyLCBjeCAtIHJ4LCBjeSArIGhlaWdodCAvIDIpOwogICAgcGF0aExpbmUoY3R4LCBjeCArIHJ4LCBjeSAtIGhlaWdodCAvIDIsIGN4ICsgcngsIGN5ICsgaGVpZ2h0IC8gMik7CiAgICBjdHguYmVnaW5QYXRoKCk7CiAgICBjdHguZWxsaXBzZShjeCwgY3kgKyBoZWlnaHQgLyAyLCByeCwgcnksIDAsIDAsIE1hdGguUEkgKiAyKTsKICAgIGN0eC5maWxsKCk7CiAgICBjdHguc3Ryb2tlKCk7CiAgICBjdHgucmVzdG9yZSgpOwogICAgZHJhd01lYXN1cmUoY3R4LCBjeCwgY3kgKyBoZWlnaHQgLyAyLCBjeCArIHJ4LCBjeSArIGhlaWdodCAvIDIsICdyID0gJyArIG4ocC5yKSk7CiAgICBkcmF3TWVhc3VyZShjdHgsIGN4ICsgcnggKyAyNiwgY3kgLSBoZWlnaHQgLyAyLCBjeCArIHJ4ICsgMjYsIGN5ICsgaGVpZ2h0IC8gMiwgJ2ggPSAnICsgbihwLmgpKTsKICAgIGxhYmVsKGN0eCwgJ1YgPSDPgCDCtyBywrIgwrcgaCcsIGN4IC0gcnggKiAwLjcyLCBjeSwgJyMxNzIwMzMnKTsKICB9CgogIGZ1bmN0aW9uIGRyYXdQeXJhbWlkKGN0eCwgdywgaCwgcCkgewogICAgY29uc3QgY3ggPSB3IC8gMjsKICAgIGNvbnN0IGN5ID0gaCAqIDAuNjY7CiAgICBjb25zdCBzaXplID0gTWF0aC5taW4odywgaCkgKiAwLjM0OwogICAgY29uc3QgaGFsZiA9IHNpemUgLyAyOwogICAgY29uc3QgbGlmdCA9IHNpemUgKiAwLjI4OwogICAgY29uc3QgYXBleCA9IFtjeCwgY3kgLSBzaXplICogMS4wOF07CiAgICBjb25zdCBwMSA9IFtjeCAtIGhhbGYsIGN5XTsKICAgIGNvbnN0IHAyID0gW2N4ICsgaGFsZiwgY3ldOwogICAgY29uc3QgcDMgPSBbY3ggKyBoYWxmICsgbGlmdCwgY3kgLSBsaWZ0XTsKICAgIGNvbnN0IHA0ID0gW2N4IC0gaGFsZiArIGxpZnQsIGN5IC0gbGlmdF07CiAgICBwb2x5KGN0eCwgW3AxLCBwMiwgcDMsIHA0XSwgJ3JnYmEoMzYsODcsMjE0LDAuMTMpJywgJyMyNDU3ZDYnKTsKICAgIGN0eC5zYXZlKCk7CiAgICBjdHguZmlsbFN0eWxlID0gJ3JnYmEoMTMsMTIzLDk1LDAuMTApJzsKICAgIGN0eC5zdHJva2VTdHlsZSA9ICcjMGQ3YjVmJzsKICAgIGN0eC5saW5lV2lkdGggPSA0OwogICAgY3R4LmJlZ2luUGF0aCgpOwogICAgY3R4Lm1vdmVUbyhhcGV4WzBdLCBhcGV4WzFdKTsKICAgIGN0eC5saW5lVG8ocDFbMF0sIHAxWzFdKTsKICAgIGN0eC5saW5lVG8ocDJbMF0sIHAyWzFdKTsKICAgIGN0eC5jbG9zZVBhdGgoKTsKICAgIGN0eC5maWxsKCk7CiAgICBjdHguc3Ryb2tlKCk7CiAgICBjdHguYmVnaW5QYXRoKCk7CiAgICBjdHgubW92ZVRvKGFwZXhbMF0sIGFwZXhbMV0pOwogICAgY3R4LmxpbmVUbyhwM1swXSwgcDNbMV0pOwogICAgY3R4LmxpbmVUbyhwNFswXSwgcDRbMV0pOwogICAgY3R4LmNsb3NlUGF0aCgpOwogICAgY3R4LnN0cm9rZSgpOwogICAgY3R4LnJlc3RvcmUoKTsKICAgIGRyYXdNZWFzdXJlKGN0eCwgcDFbMF0sIHAxWzFdICsgMjQsIHAyWzBdLCBwMlsxXSArIDI0LCAnYSA9ICcgKyBuKHAuYSkpOwogICAgZHJhd0Rhc2hlZChjdHgsIGFwZXhbMF0sIGFwZXhbMV0sIGN4LCBjeSAtIGxpZnQgLyAyLCAnaCA9ICcgKyBuKHAuaCkpOwogICAgbGFiZWwoY3R4LCAnViA9IEcgwrcgaCA6IDMnLCBjeCAtIHNpemUgKiAwLjM2LCBjeSAtIHNpemUgKiAwLjM0LCAnIzE3MjAzMycpOwogIH0KCiAgZnVuY3Rpb24gZHJhd0NvbmUoY3R4LCB3LCBoLCBwKSB7CiAgICBjb25zdCBjeCA9IHcgLyAyOwogICAgY29uc3QgYmFzZVkgPSBoICogMC42ODsKICAgIGNvbnN0IHJ4ID0gTWF0aC5taW4odywgaCkgKiAwLjI0OwogICAgY29uc3QgcnkgPSByeCAqIDAuMzI7CiAgICBjb25zdCBhcGV4WSA9IGggKiAwLjI7CiAgICBjdHguc2F2ZSgpOwogICAgY3R4LmZpbGxTdHlsZSA9ICdyZ2JhKDEzLDEyMyw5NSwwLjEyKSc7CiAgICBjdHguc3Ryb2tlU3R5bGUgPSAnIzBkN2I1Zic7CiAgICBjdHgubGluZVdpZHRoID0gNDsKICAgIGN0eC5iZWdpblBhdGgoKTsKICAgIGN0eC5tb3ZlVG8oY3gsIGFwZXhZKTsKICAgIGN0eC5saW5lVG8oY3ggLSByeCwgYmFzZVkpOwogICAgY3R4LmVsbGlwc2UoY3gsIGJhc2VZLCByeCwgcnksIDAsIE1hdGguUEksIDApOwogICAgY3R4LmxpbmVUbyhjeCwgYXBleFkpOwogICAgY3R4LmZpbGwoKTsKICAgIGN0eC5zdHJva2UoKTsKICAgIGN0eC5iZWdpblBhdGgoKTsKICAgIGN0eC5lbGxpcHNlKGN4LCBiYXNlWSwgcngsIHJ5LCAwLCAwLCBNYXRoLlBJICogMik7CiAgICBjdHguc3Ryb2tlKCk7CiAgICBjdHgucmVzdG9yZSgpOwogICAgZHJhd01lYXN1cmUoY3R4LCBjeCwgYmFzZVksIGN4ICsgcngsIGJhc2VZLCAnciA9ICcgKyBuKHAucikpOwogICAgZHJhd0Rhc2hlZChjdHgsIGN4LCBhcGV4WSwgY3gsIGJhc2VZLCAnaCA9ICcgKyBuKHAuaCkpOwogICAgbGFiZWwoY3R4LCAnViA9IM+AIMK3IHLCsiDCtyBoIDogMycsIGN4IC0gcnggKiAwLjgyLCAoYXBleFkgKyBiYXNlWSkgLyAyLCAnIzE3MjAzMycpOwogIH0KCiAgZnVuY3Rpb24gZHJhd1NwaGVyZShjdHgsIHcsIGgsIHApIHsKICAgIGNvbnN0IHIgPSBNYXRoLm1pbih3LCBoKSAqIDAuMjg7CiAgICBjb25zdCBjeCA9IHcgLyAyOwogICAgY29uc3QgY3kgPSBoIC8gMiArIDEyOwogICAgY3R4LnNhdmUoKTsKICAgIGN0eC5iZWdpblBhdGgoKTsKICAgIGN0eC5hcmMoY3gsIGN5LCByLCAwLCBNYXRoLlBJICogMik7CiAgICBjdHguZmlsbFN0eWxlID0gJ3JnYmEoMzYsODcsMjE0LDAuMTMpJzsKICAgIGN0eC5maWxsKCk7CiAgICBjdHguc3Ryb2tlU3R5bGUgPSAnIzI0NTdkNic7CiAgICBjdHgubGluZVdpZHRoID0gNDsKICAgIGN0eC5zdHJva2UoKTsKICAgIGN0eC5zZXRMaW5lRGFzaChbOCwgN10pOwogICAgY3R4LmJlZ2luUGF0aCgpOwogICAgY3R4LmVsbGlwc2UoY3gsIGN5LCByLCByICogMC4yOCwgMCwgMCwgTWF0aC5QSSAqIDIpOwogICAgY3R4LnN0cm9rZVN0eWxlID0gJyMwZDdiNWYnOwogICAgY3R4LnN0cm9rZSgpOwogICAgY3R4LnNldExpbmVEYXNoKFtdKTsKICAgIGN0eC5yZXN0b3JlKCk7CiAgICBkcmF3TWVhc3VyZShjdHgsIGN4LCBjeSwgY3ggKyByLCBjeSwgJ3IgPSAnICsgbihwLnIpKTsKICAgIGxhYmVsKGN0eCwgJ1Yg4omIIDQgOiAzIMK3IM+AIMK3IHLCsycsIGN4IC0gciAqIDAuNjUsIGN5IC0gciAtIDIwLCAnIzE3MjAzMycpOwogIH0KCiAgZnVuY3Rpb24gZ2VuZXJhdGVUYXNrKGtpbmQsIGRpZmZpY3VsdHksIGV4YW1UYXNrKSB7CiAgICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplVHJhaW5pbmcoa2luZCk7CiAgICBpZiAobm9ybWFsaXplZCA9PT0gJ1VtZmFuZycpIHsKICAgICAgcmV0dXJuIGNob29zZVRhc2sodW1mYW5nVGFza3MsIGRpZmZpY3VsdHksIGV4YW1UYXNrKTsKICAgIH0KICAgIGlmIChub3JtYWxpemVkID09PSAnRmzDpGNoZScpIHsKICAgICAgcmV0dXJuIGNob29zZVRhc2soYXJlYVRhc2tzLCBkaWZmaWN1bHR5LCBleGFtVGFzayk7CiAgICB9CiAgICBpZiAobm9ybWFsaXplZCA9PT0gJ1ZvbHVtZW4nKSB7CiAgICAgIHJldHVybiBjaG9vc2VUYXNrKHZvbHVtZVRhc2tzLCBkaWZmaWN1bHR5LCBleGFtVGFzayk7CiAgICB9CiAgICBpZiAobm9ybWFsaXplZCA9PT0gJ0Zvcm1lbG4nKSB7CiAgICAgIHJldHVybiBjaG9vc2VUYXNrKGZvcm11bGFUYXNrcywgZGlmZmljdWx0eSwgZXhhbVRhc2spOwogICAgfQogICAgaWYgKG5vcm1hbGl6ZWQgPT09ICdFaW5oZWl0ZW4nKSB7CiAgICAgIHJldHVybiBjaG9vc2VUYXNrKHVuaXRUYXNrcywgZGlmZmljdWx0eSwgZXhhbVRhc2spOwogICAgfQogICAgcmV0dXJuIGNob29zZVRhc2soc3RyYXRlZ3lUYXNrcywgZGlmZmljdWx0eSwgZXhhbVRhc2spOwogIH0KCiAgZnVuY3Rpb24gZ2VuZXJhdGVFeGFtVGFzaygpIHsKICAgIGNvbnN0IGtpbmRzID0gWydVbWZhbmcnLCAnRmzDpGNoZScsICdWb2x1bWVuJywgJ0Zvcm1lbG4nLCAnRWluaGVpdGVuJywgJ1N0cmF0ZWdpZSddOwogICAgY29uc3Qga2luZCA9IGtpbmRzW3JhbmRvbUludCgwLCBraW5kcy5sZW5ndGggLSAxKV07CiAgICBjb25zdCBsZXZlbCA9IHJhbmRvbUludCgxLCA1KTsKICAgIHJldHVybiBnZW5lcmF0ZVRhc2soa2luZCwgbGV2ZWwsIHRydWUpOwogIH0KCiAgZnVuY3Rpb24gY2hvb3NlVGFzayhsaXN0LCBkaWZmaWN1bHR5LCBleGFtVGFzaykgewogICAgY29uc3QgcG9zc2libGUgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSkgewogICAgICBpZiAobGlzdFtpXS5taW4gPD0gZGlmZmljdWx0eSkgewogICAgICAgIHBvc3NpYmxlLnB1c2gobGlzdFtpXSk7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IGNyZWF0b3IgPSBwb3NzaWJsZVtyYW5kb21JbnQoMCwgcG9zc2libGUubGVuZ3RoIC0gMSldLm1ha2U7CiAgICBjb25zdCB0YXNrID0gY3JlYXRvcihkaWZmaWN1bHR5KTsKICAgIHRhc2suZXhhbVRhc2sgPSBleGFtVGFzazsKICAgIHJldHVybiB0YXNrOwogIH0KCiAgY29uc3QgdW1mYW5nVGFza3MgPSBbCiAgICB7IG1pbjogMSwgbWFrZTogdGFza1NxdWFyZVBlcmltZXRlciB9LAogICAgeyBtaW46IDEsIG1ha2U6IHRhc2tSZWN0YW5nbGVQZXJpbWV0ZXIgfSwKICAgIHsgbWluOiAyLCBtYWtlOiB0YXNrVHJpYW5nbGVQZXJpbWV0ZXIgfSwKICAgIHsgbWluOiAyLCBtYWtlOiB0YXNrUGFyYWxsZWxvZ3JhbVBlcmltZXRlciB9LAogICAgeyBtaW46IDMsIG1ha2U6IHRhc2tUcmFwZXpvaWRQZXJpbWV0ZXIgfSwKICAgIHsgbWluOiAzLCBtYWtlOiB0YXNrQ29tcG9zaXRlUGVyaW1ldGVyIH0sCiAgICB7IG1pbjogNCwgbWFrZTogdGFza0NpcmNsZVBlcmltZXRlciB9LAogICAgeyBtaW46IDQsIG1ha2U6IHRhc2tQZXJpbWV0ZXJDaGFuZ2UgfQogIF07CgogIGNvbnN0IGFyZWFUYXNrcyA9IFsKICAgIHsgbWluOiAxLCBtYWtlOiB0YXNrU3F1YXJlQXJlYSB9LAogICAgeyBtaW46IDEsIG1ha2U6IHRhc2tSZWN0YW5nbGVBcmVhIH0sCiAgICB7IG1pbjogMiwgbWFrZTogdGFza1RyaWFuZ2xlQXJlYSB9LAogICAgeyBtaW46IDIsIG1ha2U6IHRhc2tQYXJhbGxlbG9ncmFtQXJlYSB9LAogICAgeyBtaW46IDMsIG1ha2U6IHRhc2tSaG9tYnVzQXJlYSB9LAogICAgeyBtaW46IDMsIG1ha2U6IHRhc2tUcmFwZXpvaWRBcmVhIH0sCiAgICB7IG1pbjogNCwgbWFrZTogdGFza0NvbXBvc2l0ZUFyZWEgfSwKICAgIHsgbWluOiA0LCBtYWtlOiB0YXNrQ2lyY2xlQXJlYSB9LAogICAgeyBtaW46IDUsIG1ha2U6IHRhc2tBcmVhUmV2ZXJzZSB9CiAgXTsKCiAgY29uc3Qgdm9sdW1lVGFza3MgPSBbCiAgICB7IG1pbjogMSwgbWFrZTogdGFza0N1YmVWb2x1bWUgfSwKICAgIHsgbWluOiAxLCBtYWtlOiB0YXNrQ3Vib2lkVm9sdW1lIH0sCiAgICB7IG1pbjogMiwgbWFrZTogdGFza0FxdWFyaXVtVm9sdW1lIH0sCiAgICB7IG1pbjogMywgbWFrZTogdGFza1ByaXNtVm9sdW1lIH0sCiAgICB7IG1pbjogNCwgbWFrZTogdGFza0N5bGluZGVyVm9sdW1lIH0sCiAgICB7IG1pbjogNSwgbWFrZTogdGFza1B5cmFtaWRWb2x1bWUgfSwKICAgIHsgbWluOiA1LCBtYWtlOiB0YXNrQ29uZVZvbHVtZSB9LAogICAgeyBtaW46IDUsIG1ha2U6IHRhc2tTcGhlcmVWb2x1bWUgfSwKICAgIHsgbWluOiA1LCBtYWtlOiB0YXNrVm9sdW1lUmV2ZXJzZSB9CiAgXTsKCiAgY29uc3QgZm9ybXVsYVRhc2tzID0gWwogICAgeyBtaW46IDEsIG1ha2U6IHRhc2tGb3JtdWxhUmVjdGFuZ2xlIH0sCiAgICB7IG1pbjogMSwgbWFrZTogdGFza0Zvcm11bGFTcXVhcmUgfSwKICAgIHsgbWluOiAyLCBtYWtlOiB0YXNrRm9ybXVsYVRyaWFuZ2xlIH0sCiAgICB7IG1pbjogMiwgbWFrZTogdGFza0Zvcm11bGFDdWJvaWQgfSwKICAgIHsgbWluOiAzLCBtYWtlOiB0YXNrRm9ybXVsYVRyYXBlem9pZCB9LAogICAgeyBtaW46IDMsIG1ha2U6IHRhc2tGb3JtdWxhUHJpc20gfSwKICAgIHsgbWluOiA0LCBtYWtlOiB0YXNrRm9ybXVsYUNpcmNsZSB9LAogICAgeyBtaW46IDUsIG1ha2U6IHRhc2tGb3JtdWxhUHlyYW1pZCB9LAogICAgeyBtaW46IDQsIG1ha2U6IHRhc2tGb3JtdWxhRXJyb3IgfQogIF07CgogIGNvbnN0IHVuaXRUYXNrcyA9IFsKICAgIHsgbWluOiAxLCBtYWtlOiB0YXNrVW5pdFBlcmltZXRlciB9LAogICAgeyBtaW46IDEsIG1ha2U6IHRhc2tVbml0QXJlYSB9LAogICAgeyBtaW46IDIsIG1ha2U6IHRhc2tVbml0Vm9sdW1lIH0sCiAgICB7IG1pbjogMywgbWFrZTogdGFza1VuaXRNaXhlZCB9LAogICAgeyBtaW46IDQsIG1ha2U6IHRhc2tVbml0UGkgfSwKICAgIHsgbWluOiA1LCBtYWtlOiB0YXNrVW5pdFN0b3J5IH0KICBdOwoKICBjb25zdCBzdHJhdGVneVRhc2tzID0gWwogICAgeyBtaW46IDIsIG1ha2U6IHRhc2tSZWN0YW5nbGVSZXZlcnNlIH0sCiAgICB7IG1pbjogMywgbWFrZTogdGFza0FyZWFDaGFuZ2UgfSwKICAgIHsgbWluOiAzLCBtYWtlOiB0YXNrRGVjb21wb3NlIH0sCiAgICB7IG1pbjogNCwgbWFrZTogdGFza0NvbXBhcmVTaGFwZXMgfSwKICAgIHsgbWluOiA1LCBtYWtlOiB0YXNrTWlzc2luZ0hlaWdodCB9CiAgXTsKCiAgZnVuY3Rpb24gYmFzZVRhc2soa2luZCwgc2tpbGwsIGRpZmYsIHRpdGxlLCBxdWVzdGlvbiwgZGV0YWlscywgc2hhcGVJZCwgcGFyYW1zLCBhbnN3ZXIsIHVuaXQsIHdyb25ncywgZXhwbGFuYXRpb24sIGJvbnVzU2tpbGwpIHsKICAgIGNvbnN0IGNob2ljZXMgPSBtYWtlTnVtYmVyQ2hvaWNlcyhhbnN3ZXIsIHVuaXQsIHdyb25ncyk7CiAgICByZXR1cm4gZmluaXNoVGFzayhraW5kLCBza2lsbCwgZGlmZiwgdGl0bGUsIHF1ZXN0aW9uLCBkZXRhaWxzLCBzaGFwZUlkLCBwYXJhbXMsIGNob2ljZXMsIGV4cGxhbmF0aW9uLCBib251c1NraWxsKTsKICB9CgogIGZ1bmN0aW9uIGZpbmlzaFRhc2soa2luZCwgc2tpbGwsIGRpZmYsIHRpdGxlLCBxdWVzdGlvbiwgZGV0YWlscywgc2hhcGVJZCwgcGFyYW1zLCBjaG9pY2VQYWNrLCBleHBsYW5hdGlvbiwgYm9udXNTa2lsbCkgewogICAgcmV0dXJuIHsKICAgICAgdHJhaW5pbmdLaW5kOiBraW5kLAogICAgICBza2lsbDogc2tpbGwsCiAgICAgIGJvbnVzU2tpbGw6IGJvbnVzU2tpbGwgfHwgJycsCiAgICAgIGRpZmZpY3VsdHk6IGRpZmYsCiAgICAgIHRpdGxlOiB0aXRsZSwKICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLAogICAgICBkZXRhaWxzOiBkZXRhaWxzIHx8IFtdLAogICAgICBzaGFwZUlkOiBzaGFwZUlkLAogICAgICBwYXJhbXM6IHBhcmFtcyB8fCB7fSwKICAgICAgY2hvaWNlczogY2hvaWNlUGFjay5jaG9pY2VzLAogICAgICBjb3JyZWN0SW5kZXg6IGNob2ljZVBhY2suY29ycmVjdEluZGV4LAogICAgICBleHBsYW5hdGlvbjogZXhwbGFuYXRpb24sCiAgICAgIGV4YW1UYXNrOiBmYWxzZQogICAgfTsKICB9CgogIGZ1bmN0aW9uIG1ha2VOdW1iZXJDaG9pY2VzKGFuc3dlciwgdW5pdCwgd3JvbmdzKSB7CiAgICBjb25zdCBjb3JyZWN0ID0gZm9ybWF0QW5zd2VyKGFuc3dlciwgdW5pdCk7CiAgICBjb25zdCBsaXN0ID0gW2NvcnJlY3RdOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCB3cm9uZ3MubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgY29uc3QgdGV4dCA9IGZvcm1hdEFuc3dlcih3cm9uZ3NbaV0sIHVuaXQpOwogICAgICBpZiAobGlzdC5pbmRleE9mKHRleHQpIDwgMCkgewogICAgICAgIGxpc3QucHVzaCh0ZXh0KTsKICAgICAgfQogICAgfQogICAgbGV0IGJ1bXAgPSAxOwogICAgd2hpbGUgKGxpc3QubGVuZ3RoIDwgNCkgewogICAgICBjb25zdCBhZGQgPSBmb3JtYXRBbnN3ZXIoYW5zd2VyICsgYnVtcCAqIDIsIHVuaXQpOwogICAgICBpZiAobGlzdC5pbmRleE9mKGFkZCkgPCAwKSB7CiAgICAgICAgbGlzdC5wdXNoKGFkZCk7CiAgICAgIH0KICAgICAgYnVtcCArPSAxOwogICAgfQogICAgcmV0dXJuIHNodWZmbGVDaG9pY2VzKGxpc3QsIGNvcnJlY3QpOwogIH0KCiAgZnVuY3Rpb24gbWFrZVRleHRDaG9pY2VzKGNvcnJlY3QsIHdyb25ncykgewogICAgY29uc3QgbGlzdCA9IFtjb3JyZWN0XTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd3JvbmdzLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgIGlmIChsaXN0LmluZGV4T2Yod3JvbmdzW2ldKSA8IDApIHsKICAgICAgICBsaXN0LnB1c2god3JvbmdzW2ldKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHNodWZmbGVDaG9pY2VzKGxpc3QsIGNvcnJlY3QpOwogIH0KCiAgZnVuY3Rpb24gc2h1ZmZsZUNob2ljZXMobGlzdCwgY29ycmVjdCkgewogICAgY29uc3QgY29weSA9IGxpc3Quc2xpY2UoMCwgNCk7CiAgICBmb3IgKGxldCBpID0gY29weS5sZW5ndGggLSAxOyBpID4gMDsgaSAtPSAxKSB7CiAgICAgIGNvbnN0IGogPSByYW5kb21JbnQoMCwgaSk7CiAgICAgIGNvbnN0IHRlbXAgPSBjb3B5W2ldOwogICAgICBjb3B5W2ldID0gY29weVtqXTsKICAgICAgY29weVtqXSA9IHRlbXA7CiAgICB9CiAgICByZXR1cm4geyBjaG9pY2VzOiBjb3B5LCBjb3JyZWN0SW5kZXg6IGNvcHkuaW5kZXhPZihjb3JyZWN0KSB9OwogIH0KCiAgZnVuY3Rpb24gZm9ybWF0QW5zd2VyKHZhbHVlLCB1bml0KSB7CiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgewogICAgICByZXR1cm4gbih2YWx1ZSwgMikgKyAodW5pdCA/ICcgJyArIHVuaXQgOiAnJyk7CiAgICB9CiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTsKICB9CgogIGZ1bmN0aW9uIHJhbmRvbUludChtaW4sIG1heCkgewogICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSkgKyBtaW47CiAgfQoKICBmdW5jdGlvbiB0YXNrU3F1YXJlUGVyaW1ldGVyKGRpZmYpIHsKICAgIGNvbnN0IGEgPSByYW5kb21JbnQoMiwgMTIpOwogICAgY29uc3QgYW5zID0gNCAqIGE7CiAgICByZXR1cm4gYmFzZVRhc2soJ1VtZmFuZycsICdVbWZhbmcnLCBkaWZmLCAnVW1mYW5nIGVpbmVzIFF1YWRyYXRzJywgJ0VpbiBRdWFkcmF0IGhhdCBkaWUgU2VpdGVubMOkbmdlIGEgPSAnICsgbihhKSArICcgY20uIFdpZSBncm/DnyBpc3QgZGVyIFVtZmFuZz8nLCBbJ051dHplOiBVID0gNCDCtyBhLiddLCAnc3F1YXJlJywgeyBhOiBhIH0sIGFucywgJ2NtJywgW2EgKiBhLCAyICogYSwgYW5zICsgYSwgYW5zIC0gYV0sICdWaWVyIGdsZWljaCBsYW5nZSBTZWl0ZW46IDQgwrcgJyArIG4oYSkgKyAnID0gJyArIG4oYW5zKSArICcgY20uJywgJ0Zvcm1lbG4nKTsKICB9CgogIGZ1bmN0aW9uIHRhc2tSZWN0YW5nbGVQZXJpbWV0ZXIoZGlmZikgewogICAgY29uc3QgYSA9IHJhbmRvbUludCg0LCAxNik7CiAgICBjb25zdCBiID0gcmFuZG9tSW50KDIsIDEwKTsKICAgIGNvbnN0IGFucyA9IDIgKiBhICsgMiAqIGI7CiAgICByZXR1cm4gYmFzZVRhc2soJ1VtZmFuZycsICdVbWZhbmcnLCBkaWZmLCAnUmFuZCBlaW5lcyBSZWNodGVja3MnLCAnRWluIFJlY2h0ZWNrIGlzdCAnICsgbihhKSArICcgY20gbGFuZyB1bmQgJyArIG4oYikgKyAnIGNtIGJyZWl0LiBCZXJlY2huZSBkZW4gVW1mYW5nLicsIFsnRGVyIFJhbmQgYmVzdGVodCBhdXMgendlaSBMw6RuZ2VuIHVuZCB6d2VpIEJyZWl0ZW4uJ10sICdyZWN0YW5nbGUnLCB7IGE6IGEsIGI6IGIgfSwgYW5zLCAnY20nLCBbYSAqIGIsIGEgKyBiLCAyICogYSArIGIsIGFucyArIDJdLCAnVSA9IDIgwrcgJyArIG4oYSkgKyAnICsgMiDCtyAnICsgbihiKSArICcgPSAnICsgbihhbnMpICsgJyBjbS4nLCAnRm9ybWVsbicpOwogIH0KCiAgZnVuY3Rpb24gdGFza1RyaWFuZ2xlUGVyaW1ldGVyKGRpZmYpIHsKICAgIGNvbnN0IGEgPSByYW5kb21JbnQoNCwgMTIpOwogICAgY29uc3QgYiA9IHJhbmRvbUludCg0LCAxMik7CiAgICBjb25zdCBjID0gcmFuZG9tSW50KDQsIDEyKTsKICAgIGNvbnN0IGFucyA9IGEgKyBiICsgYzsKICAgIHJldHVybiBiYXNlVGFzaygnVW1mYW5nJywgJ1VtZmFuZycsIGRpZmYsICdEcmVpZWNrc3JhbmQnLCAnRWluIERyZWllY2sgaGF0IGRpZSBTZWl0ZW4gJyArIG4oYSkgKyAnIGNtLCAnICsgbihiKSArICcgY20gdW5kICcgKyBuKGMpICsgJyBjbS4gV2llIGdyb8OfIGlzdCBkZXIgVW1mYW5nPycsIFsnQmVpbSBVbWZhbmcgd2VyZGVuIGFsbGUgU2VpdGVuIGFkZGllcnQuJ10sICd0cmlhbmdsZScsIHsgZzogYSwgaDogTWF0aC5tYXgoMiwgTWF0aC5yb3VuZCgoYSArIGIgKyBjKSAvIDYpKSwgczE6IGIsIHMyOiBjIH0sIGFucywgJ2NtJywgW2EgKiBiLCBhICsgYiwgYW5zIC0gYywgYW5zICsgM10sICdVID0gJyArIG4oYSkgKyAnICsgJyArIG4oYikgKyAnICsgJyArIG4oYykgKyAnID0gJyArIG4oYW5zKSArICcgY20uJywgJ0VpbmhlaXRlbicpOwogIH0KCiAgZnVuY3Rpb24gdGFza1BhcmFsbGVsb2dyYW1QZXJpbWV0ZXIoZGlmZikgewogICAgY29uc3QgZyA9IHJhbmRvbUludCg1LCAxNCk7CiAgICBjb25zdCBzID0gcmFuZG9tSW50KDMsIDExKTsKICAgIGNvbnN0IGggPSByYW5kb21JbnQoMiwgOCk7CiAgICBjb25zdCBhbnMgPSAyICogZyArIDIgKiBzOwogICAgcmV0dXJuIGJhc2VUYXNrKCdVbWZhbmcnLCAnVW1mYW5nJywgZGlmZiwgJ1BhcmFsbGVsb2dyYW1tLVVtZmFuZycsICdFaW4gUGFyYWxsZWxvZ3JhbW0gaGF0IGcgPSAnICsgbihnKSArICcgY20gdW5kIHMgPSAnICsgbihzKSArICcgY20uIFdpZSBncm/DnyBpc3QgZGVyIFVtZmFuZz8nLCBbJ0RpZSBIw7ZoZSBpc3QgZsO8ciBkZW4gVW1mYW5nIG5pY2h0IG7DtnRpZy4nXSwgJ3BhcmFsbGVsb2dyYW0nLCB7IGc6IGcsIHM6IHMsIGg6IGggfSwgYW5zLCAnY20nLCBbZyAqIGgsIGcgKyBzLCBnICogcywgYW5zICsgaF0sICdHZWdlbsO8YmVybGllZ2VuZGUgU2VpdGVuIHNpbmQgZ2xlaWNoIGxhbmc6IFUgPSAyIMK3ICcgKyBuKGcpICsgJyArIDIgwrcgJyArIG4ocykgKyAnID0gJyArIG4oYW5zKSArICcgY20uJywgJ0Zvcm1lbG4nKTsKICB9CgogIGZ1bmN0aW9uIHRhc2tUcmFwZXpvaWRQZXJpbWV0ZXIoZGlmZikgewogICAgY29uc3QgYSA9IHJhbmRvbUludCg3LCAxNik7CiAgICBjb25zdCBiID0gcmFuZG9tSW50KDQsIDEyKTsKICAgIGNvbnN0IGMgPSByYW5kb21JbnQoMywgMTIpOwogICAgY29uc3QgZCA9IHJhbmRvbUludCg0LCAxMik7CiAgICBjb25zdCBoID0gcmFuZG9tSW50KDIsIDgpOwogICAgY29uc3QgYW5zID0gYSArIGIgKyBjICsgZDsKICAgIHJldHVybiBiYXNlVGFzaygnVW1mYW5nJywgJ1VtZmFuZycsIGRpZmYsICdUcmFwZXpyYW5kJywgJ0VpbiBUcmFwZXogaGF0IGRpZSBTZWl0ZW4gYSA9ICcgKyBuKGEpICsgJyBjbSwgYiA9ICcgKyBuKGIpICsgJyBjbSwgYyA9ICcgKyBuKGMpICsgJyBjbSB1bmQgZCA9ICcgKyBuKGQpICsgJyBjbS4gQmVyZWNobmUgZGVuIFVtZmFuZy4nLCBbJ0bDvHIgZGVuIFVtZmFuZyB6w6RobHQgamVkZSBTZWl0ZSBkZXMgUmFuZGVzLiddLCAndHJhcGV6b2lkJywgeyBhOiBhLCBiOiBiLCBjOiBjLCBkOiBkLCBoOiBoIH0sIGFucywgJ2NtJywgWyhhICsgYykgKiBoIC8gMiwgYSArIGMgKyBoLCBhbnMgLSBiLCBhbnMgKyBoXSwgJ1UgPSBhICsgYiArIGMgKyBkID0gJyArIG4oYW5zKSArICcgY20uJywgJ0VpbmhlaXRlbicpOwogIH0KCiAgZnVuY3Rpb24gdGFza0NvbXBvc2l0ZVBlcmltZXRlcihkaWZmKSB7CiAgICBjb25zdCBhID0gcmFuZG9tSW50KDgsIDE2KTsKICAgIGNvbnN0IGIgPSByYW5kb21JbnQoNiwgMTIpOwogICAgY29uc3QgYyA9IHJhbmRvbUludCgyLCA2KTsKICAgIGNvbnN0IGQgPSByYW5kb21JbnQoMiwgNSk7CiAgICBjb25zdCBhbnMgPSAyICogYSArIDIgKiBiOwogICAgcmV0dXJuIGJhc2VUYXNrKCdVbWZhbmcnLCAnU3RyYXRlZ2llJywgZGlmZiwgJ1VtZmFuZyBlaW5lciBMLUZvcm0nLCAnQXVzIGVpbmVtIFJlY2h0ZWNrIHdpcmQgYW4gZGVyIEVja2UgZWluIGtsZWluZXMgUmVjaHRlY2sgYXVzZ2VzY2huaXR0ZW4uIEF1w59lbm1hw59lOiAnICsgbihhKSArICcgY20gdW5kICcgKyBuKGIpICsgJyBjbS4gV2llIGdyb8OfIGlzdCBoaWVyIGRlciBVbWZhbmcgZGVyIEwtRm9ybT8nLCBbJ0JlaSBkaWVzZW0gRWNrLUF1c3NjaG5pdHQgZXJzZXR6ZW4gendlaSBpbm5lcmUgUmFuZHN0w7xja2UgZGllIGZlaGxlbmRlbiBBdcOfZW5zdMO8Y2tlLiddLCAnY29tcG9zaXRlJywgeyBhOiBhLCBiOiBiLCBjOiBjLCBkOiBkIH0sIGFucywgJ2NtJywgW2EgKiBiIC0gYyAqIGQsIDIgKiAoYSArIGIpIC0gYyAtIGQsIGEgKyBiICsgYyArIGQsIGFucyArIGNdLCAnRGVyIFVtZmFuZyBibGVpYnQgYmVpIGRpZXNlbSBFY2stQXVzc2Nobml0dCAyIMK3ICcgKyBuKGEpICsgJyArIDIgwrcgJyArIG4oYikgKyAnID0gJyArIG4oYW5zKSArICcgY20uJywgJ1VtZmFuZycpOwogIH0KCiAgZnVuY3Rpb24gdGFza0NpcmNsZVBlcmltZXRlcihkaWZmKSB7CiAgICBjb25zdCByID0gcmFuZG9tSW50KDIsIDgpOwogICAgY29uc3QgYW5zID0gTWF0aC5yb3VuZCgyICogMy4xNCAqIHIgKiAxMDApIC8gMTAwOwogICAgcmV0dXJuIGJhc2VUYXNrKCdVbWZhbmcnLCAnVW1mYW5nJywgZGlmZiwgJ0tyZWlzdW1mYW5nIGFscyBBdXNibGljaycsICdFaW4gS3JlaXMgaGF0IHIgPSAnICsgbihyKSArICcgY20uIEJlcmVjaG5lIG1pdCDPgCDiiYggMywxNCBkZW4gVW1mYW5nLicsIFsnQXVzYmxpY2s6IFUgPSAyIMK3IM+AIMK3IHIuJ10sICdjaXJjbGUnLCB7IHI6IHIgfSwgYW5zLCAnY20nLCBbMy4xNCAqIHIgKiByLCAyICogciwgYW5zICsgMy4xNCwgYW5zIC8gMl0sICdVIOKJiCAyIMK3IDMsMTQgwrcgJyArIG4ocikgKyAnID0gJyArIG4oYW5zLCAyKSArICcgY20uJywgJ0Zvcm1lbG4nKTsKICB9CgogIGZ1bmN0aW9uIHRhc2tQZXJpbWV0ZXJDaGFuZ2UoZGlmZikgewogICAgY29uc3QgYSA9IHJhbmRvbUludCg1LCAxMik7CiAgICBjb25zdCBiID0gcmFuZG9tSW50KDMsIDkpOwogICAgY29uc3QgY29ycmVjdCA9ICdEZXIgVW1mYW5nIHdpcmQgdW0gMiBjbSBncsO2w59lci4nOwogICAgcmV0dXJuIGZpbmlzaFRhc2soJ1VtZmFuZycsICdTdHJhdGVnaWUnLCBkaWZmLCAnV2FzIHZlcsOkbmRlcnQgc2ljaD8nLCAnRWluIFJlY2h0ZWNrIGhhdCBhID0gJyArIG4oYSkgKyAnIGNtIHVuZCBiID0gJyArIG4oYikgKyAnIGNtLiBOdXIgYSB3aXJkIHVtIDEgY20gdmVybMOkbmdlcnQuIFdpZSDDpG5kZXJ0IHNpY2ggZGVyIFVtZmFuZz8nLCBbJ0RlbmtlIGFuIGJlaWRlIGxhbmdlbiBTZWl0ZW4uJ10sICdyZWN0YW5nbGUnLCB7IGE6IGEsIGI6IGIgfSwgbWFrZVRleHRDaG9pY2VzKGNvcnJlY3QsIFsnRGVyIFVtZmFuZyB3aXJkIHVtIDEgY20gZ3LDtsOfZXIuJywgJ0RlciBVbWZhbmcgd2lyZCB1bSAnICsgbihiKSArICcgY20gZ3LDtsOfZXIuJywgJ0RlciBVbWZhbmcgYmxlaWJ0IGdsZWljaC4nXSksICdad2VpIGdlZ2Vuw7xiZXJsaWVnZW5kZSBTZWl0ZW4gd2VyZGVuIHVtIGplIDEgY20gbMOkbmdlci4gRGFoZXIgc3RlaWd0IGRlciBVbWZhbmcgdW0gMiBjbS4nLCAnVW1mYW5nJyk7CiAgfQoKICBmdW5jdGlvbiB0YXNrU3F1YXJlQXJlYShkaWZmKSB7CiAgICBjb25zdCBhID0gcmFuZG9tSW50KDIsIDEyKTsKICAgIGNvbnN0IGFucyA9IGEgKiBhOwogICAgcmV0dXJuIGJhc2VUYXNrKCdGbMOkY2hlJywgJ0Zsw6RjaGUnLCBkaWZmLCAnUXVhZHJhdGZsw6RjaGUnLCAnRWluIFF1YWRyYXQgaGF0IGEgPSAnICsgbihhKSArICcgY20uIFdpZSBncm/DnyBpc3QgZGVyIEZsw6RjaGVuaW5oYWx0PycsIFsnTnV0emUgQSA9IGEgwrcgYS4nXSwgJ3NxdWFyZScsIHsgYTogYSB9LCBhbnMsICdjbcKyJywgWzQgKiBhLCAyICogYSwgYW5zICsgYSwgYW5zIC0gMV0sICdBID0gJyArIG4oYSkgKyAnIMK3ICcgKyBuKGEpICsgJyA9ICcgKyBuKGFucykgKyAnIGNtwrIuJywgJ0Zvcm1lbG4nKTsKICB9CgogIGZ1bmN0aW9uIHRhc2tSZWN0YW5nbGVBcmVhKGRpZmYpIHsKICAgIGNvbnN0IGEgPSByYW5kb21JbnQoNCwgMTYpOwogICAgY29uc3QgYiA9IHJhbmRvbUludCgyLCAxMCk7CiAgICBjb25zdCBhbnMgPSBhICogYjsKICAgIHJldHVybiBiYXNlVGFzaygnRmzDpGNoZScsICdGbMOkY2hlJywgZGlmZiwgJ1JlY2h0ZWNrZmzDpGNoZScsICdFaW4gUmVjaHRlY2sgaXN0ICcgKyBuKGEpICsgJyBjbSBsYW5nIHVuZCAnICsgbihiKSArICcgY20gYnJlaXQuIEJlcmVjaG5lIGRlbiBGbMOkY2hlbmluaGFsdC4nLCBbJ1N0ZWxsZSBkaXIgZWluIEvDpHN0Y2hlbmdpdHRlciB2b3IuJ10sICdyZWN0YW5nbGUnLCB7IGE6IGEsIGI6IGIgfSwgYW5zLCAnY23CsicsIFsyICogYSArIDIgKiBiLCBhICsgYiwgYW5zICsgYSwgYW5zIC0gYl0sICdBID0gYSDCtyBiID0gJyArIG4oYSkgKyAnIMK3ICcgKyBuKGIpICsgJyA9ICcgKyBuKGFucykgKyAnIGNtwrIuJywgJ0VpbmhlaXRlbicpOwogIH0KCiAgZnVuY3Rpb24gdGFza1RyaWFuZ2xlQXJlYShkaWZmKSB7CiAgICBjb25zdCBnID0gcmFuZG9tSW50KDQsIDE0KTsKICAgIGNvbnN0IGggPSByYW5kb21JbnQoMiwgMTApOwogICAgY29uc3QgYW5zID0gZyAqIGggLyAyOwogICAgcmV0dXJuIGJhc2VUYXNrKCdGbMOkY2hlJywgJ0Zsw6RjaGUnLCBkaWZmLCAnRHJlaWVja3NmbMOkY2hlJywgJ0VpbiBEcmVpZWNrIGhhdCBnID0gJyArIG4oZykgKyAnIGNtIHVuZCBoID0gJyArIG4oaCkgKyAnIGNtLiBXaWUgZ3Jvw58gaXN0IGRlciBGbMOkY2hlbmluaGFsdD8nLCBbJ0VpbiBEcmVpZWNrIGlzdCBoYWxiIHNvIGdyb8OfIHdpZSBkYXMgcGFzc2VuZGUgUmVjaHRlY2suJ10sICd0cmlhbmdsZScsIHsgZzogZywgaDogaCwgczE6IHJhbmRvbUludCg0LCAxMiksIHMyOiByYW5kb21JbnQoNCwgMTIpIH0sIGFucywgJ2NtwrInLCBbZyAqIGgsIGcgKyBoLCBnICogaCAvIDQsIGFucyArIGhdLCAnQSA9IGcgwrcgaCA6IDIgPSAnICsgbihnKSArICcgwrcgJyArIG4oaCkgKyAnIDogMiA9ICcgKyBuKGFucykgKyAnIGNtwrIuJywgJ0Zvcm1lbG4nKTsKICB9CgogIGZ1bmN0aW9uIHRhc2tQYXJhbGxlbG9ncmFtQXJlYShkaWZmKSB7CiAgICBjb25zdCBnID0gcmFuZG9tSW50KDUsIDE0KTsKICAgIGNvbnN0IGggPSByYW5kb21JbnQoMiwgOSk7CiAgICBjb25zdCBzID0gcmFuZG9tSW50KDQsIDExKTsKICAgIGNvbnN0IGFucyA9IGcgKiBoOwogICAgcmV0dXJuIGJhc2VUYXNrKCdGbMOkY2hlJywgJ0Zsw6RjaGUnLCBkaWZmLCAnUGFyYWxsZWxvZ3JhbW1mbMOkY2hlJywgJ0VpbiBQYXJhbGxlbG9ncmFtbSBoYXQgZyA9ICcgKyBuKGcpICsgJyBjbSB1bmQgaCA9ICcgKyBuKGgpICsgJyBjbS4gQmVyZWNobmUgQS4nLCBbJ0RpZSBzY2hyw6RnZSBTZWl0ZSBpc3QgZsO8ciBkaWUgRmzDpGNoZSBuaWNodCBlbnRzY2hlaWRlbmQuJ10sICdwYXJhbGxlbG9ncmFtJywgeyBnOiBnLCBoOiBoLCBzOiBzIH0sIGFucywgJ2NtwrInLCBbMiAqIGcgKyAyICogcywgZyAqIHMsIGcgKyBoLCBhbnMgLyAyXSwgJ0EgPSBnIMK3IGggPSAnICsgbihnKSArICcgwrcgJyArIG4oaCkgKyAnID0gJyArIG4oYW5zKSArICcgY23Csi4nLCAnRm9ybWVsbicpOwogIH0KCiAgZnVuY3Rpb24gdGFza1Job21idXNBcmVhKGRpZmYpIHsKICAgIGNvbnN0IGEgPSByYW5kb21JbnQoNCwgMTIpOwogICAgY29uc3QgaCA9IHJhbmRvbUludCgyLCA5KTsKICAgIGNvbnN0IGFucyA9IGEgKiBoOwogICAgcmV0dXJuIGJhc2VUYXNrKCdGbMOkY2hlJywgJ0Zsw6RjaGUnLCBkaWZmLCAnUmF1dGUgbWl0IEjDtmhlJywgJ0VpbmUgUmF1dGUgaGF0IGEgPSAnICsgbihhKSArICcgY20gdW5kIGggPSAnICsgbihoKSArICcgY20uIFdpZSBncm/DnyBpc3QgQT8nLCBbJ0RpZSBSYXV0ZSB3aXJkIHdpZSBlaW4gUGFyYWxsZWxvZ3JhbW0gYmVyZWNobmV0LiddLCAncmhvbWJ1cycsIHsgYTogYSwgaDogaCB9LCBhbnMsICdjbcKyJywgWzQgKiBhLCBhICsgaCwgMiAqIGEgKyAyICogaCwgYW5zIC8gMl0sICdBID0gYSDCtyBoID0gJyArIG4oYW5zKSArICcgY23Csi4nLCAnRm9ybWVsbicpOwogIH0KCiAgZnVuY3Rpb24gdGFza1RyYXBlem9pZEFyZWEoZGlmZikgewogICAgY29uc3QgYSA9IHJhbmRvbUludCg4LCAxNik7CiAgICBjb25zdCBjID0gcmFuZG9tSW50KDMsIDEwKTsKICAgIGNvbnN0IGggPSByYW5kb21JbnQoMiwgOCk7CiAgICBjb25zdCBiID0gcmFuZG9tSW50KDQsIDEwKTsKICAgIGNvbnN0IGQgPSByYW5kb21JbnQoNCwgMTApOwogICAgY29uc3QgYW5zID0gKGEgKyBjKSAqIGggLyAyOwogICAgcmV0dXJuIGJhc2VUYXNrKCdGbMOkY2hlJywgJ0Zsw6RjaGUnLCBkaWZmLCAnVHJhcGV6ZmzDpGNoZScsICdFaW4gVHJhcGV6IGhhdCBhID0gJyArIG4oYSkgKyAnIGNtLCBjID0gJyArIG4oYykgKyAnIGNtIHVuZCBoID0gJyArIG4oaCkgKyAnIGNtLiBCZXJlY2huZSBBLicsIFsnTnV0emUgZGllIGJlaWRlbiBwYXJhbGxlbGVuIFNlaXRlbi4nXSwgJ3RyYXBlem9pZCcsIHsgYTogYSwgYjogYiwgYzogYywgZDogZCwgaDogaCB9LCBhbnMsICdjbcKyJywgWyhhICsgYykgKiBoLCBhICsgYiArIGMgKyBkLCBhICogaCwgYW5zICsgY10sICdBID0gKGEgKyBjKSDCtyBoIDogMiA9ICgnICsgbihhKSArICcgKyAnICsgbihjKSArICcpIMK3ICcgKyBuKGgpICsgJyA6IDIgPSAnICsgbihhbnMpICsgJyBjbcKyLicsICdGb3JtZWxuJyk7CiAgfQoKICBmdW5jdGlvbiB0YXNrQ29tcG9zaXRlQXJlYShkaWZmKSB7CiAgICBjb25zdCBhID0gcmFuZG9tSW50KDgsIDE2KTsKICAgIGNvbnN0IGIgPSByYW5kb21JbnQoNiwgMTIpOwogICAgY29uc3QgYyA9IHJhbmRvbUludCgyLCA2KTsKICAgIGNvbnN0IGQgPSByYW5kb21JbnQoMiwgNSk7CiAgICBjb25zdCBhbnMgPSBhICogYiAtIGMgKiBkOwogICAgcmV0dXJuIGJhc2VUYXNrKCdGbMOkY2hlJywgJ1N0cmF0ZWdpZScsIGRpZmYsICdadXNhbW1lbmdlc2V0enRlIEZsw6RjaGUnLCAnRWluIFJlY2h0ZWNrICcgKyBuKGEpICsgJyBjbSBtYWwgJyArIG4oYikgKyAnIGNtIGhhdCBlaW5lbiBFY2stQXVzc2Nobml0dCAnICsgbihjKSArICcgY20gbWFsICcgKyBuKGQpICsgJyBjbS4gV2llIGdyb8OfIGlzdCBkaWUgUmVzdGZsw6RjaGU/JywgWydSZWNobmUgZ3Jvw59lcyBSZWNodGVjayBtaW51cyBBdXNzY2huaXR0LiddLCAnY29tcG9zaXRlJywgeyBhOiBhLCBiOiBiLCBjOiBjLCBkOiBkIH0sIGFucywgJ2NtwrInLCBbYSAqIGIsIGMgKiBkLCAyICogYSArIDIgKiBiLCBhbnMgKyBjICogZF0sICdBID0gJyArIG4oYSAqIGIpICsgJyDiiJIgJyArIG4oYyAqIGQpICsgJyA9ICcgKyBuKGFucykgKyAnIGNtwrIuJywgJ0Zsw6RjaGUnKTsKICB9CgogIGZ1bmN0aW9uIHRhc2tDaXJjbGVBcmVhKGRpZmYpIHsKICAgIGNvbnN0IHIgPSByYW5kb21JbnQoMiwgNyk7CiAgICBjb25zdCBhbnMgPSBNYXRoLnJvdW5kKDMuMTQgKiByICogciAqIDEwMCkgLyAxMDA7CiAgICByZXR1cm4gYmFzZVRhc2soJ0Zsw6RjaGUnLCAnRmzDpGNoZScsIGRpZmYsICdLcmVpc2Zsw6RjaGUgYWxzIEF1c2JsaWNrJywgJ0VpbiBLcmVpcyBoYXQgciA9ICcgKyBuKHIpICsgJyBjbS4gQmVyZWNobmUgQSBtaXQgz4Ag4omIIDMsMTQuJywgWydBdXNibGljazogQSA9IM+AIMK3IHLCsi4nXSwgJ2NpcmNsZScsIHsgcjogciB9LCBhbnMsICdjbcKyJywgWzIgKiAzLjE0ICogciwgciAqIHIsIDMuMTQgKiByLCBhbnMgKyByXSwgJ0Eg4omIIDMsMTQgwrcgJyArIG4ocikgKyAnwrIgPSAnICsgbihhbnMsIDIpICsgJyBjbcKyLicsICdGb3JtZWxuJyk7CiAgfQoKICBmdW5jdGlvbiB0YXNrQXJlYVJldmVyc2UoZGlmZikgewogICAgY29uc3QgYiA9IHJhbmRvbUludCgzLCA5KTsKICAgIGNvbnN0IGEgPSByYW5kb21JbnQoNSwgMTQpOwogICAgY29uc3QgYXJlYSA9IGEgKiBiOwogICAgcmV0dXJuIGJhc2VUYXNrKCdGbMOkY2hlJywgJ1N0cmF0ZWdpZScsIGRpZmYsICdGZWhsZW5kZSBSZWNodGVja3NlaXRlJywgJ0VpbiBSZWNodGVjayBoYXQgQSA9ICcgKyBuKGFyZWEpICsgJyBjbcKyIHVuZCBiID0gJyArIG4oYikgKyAnIGNtLiBXaWUgbGFuZyBpc3QgYT8nLCBbJ1JlY2huZSByw7xja3fDpHJ0czogYSA9IEEgOiBiLiddLCAncmVjdGFuZ2xlJywgeyBhOiBhLCBiOiBiIH0sIGEsICdjbScsIFthcmVhICsgYiwgYXJlYSAtIGIsIGIsIGEgKyBiXSwgJ2EgPSBBIDogYiA9ICcgKyBuKGFyZWEpICsgJyA6ICcgKyBuKGIpICsgJyA9ICcgKyBuKGEpICsgJyBjbS4nLCAnRmzDpGNoZScpOwogIH0KCiAgZnVuY3Rpb24gdGFza0N1YmVWb2x1bWUoZGlmZikgewogICAgY29uc3QgYSA9IHJhbmRvbUludCgyLCA4KTsKICAgIGNvbnN0IGFucyA9IGEgKiBhICogYTsKICAgIHJldHVybiBiYXNlVGFzaygnVm9sdW1lbicsICdWb2x1bWVuJywgZGlmZiwgJ1fDvHJmZWx2b2x1bWVuJywgJ0VpbiBXw7xyZmVsIGhhdCBhID0gJyArIG4oYSkgKyAnIGNtLiBXaWUgZ3Jvw58gaXN0IGRhcyBWb2x1bWVuPycsIFsnVm9sdW1lbiBudXR6dCBkcmVpIFJpY2h0dW5nZW4uJ10sICdjdWJlJywgeyBhOiBhIH0sIGFucywgJ2NtwrMnLCBbNiAqIGEgKiBhLCBhICogYSwgNCAqIGEsIGFucyArIGFdLCAnViA9IGEgwrcgYSDCtyBhID0gJyArIG4oYW5zKSArICcgY23Csy4nLCAnRWluaGVpdGVuJyk7CiAgfQoKICBmdW5jdGlvbiB0YXNrQ3Vib2lkVm9sdW1lKGRpZmYpIHsKICAgIGNvbnN0IGwgPSByYW5kb21JbnQoMywgMTIpOwogICAgY29uc3QgYiA9IHJhbmRvbUludCgyLCA4KTsKICAgIGNvbnN0IGggPSByYW5kb21JbnQoMiwgNyk7CiAgICBjb25zdCBhbnMgPSBsICogYiAqIGg7CiAgICByZXR1cm4gYmFzZVRhc2soJ1ZvbHVtZW4nLCAnVm9sdW1lbicsIGRpZmYsICdRdWFkZXIgYmVyZWNobmVuJywgJ0VpbiBRdWFkZXIgaGF0IGwgPSAnICsgbihsKSArICcgY20sIGIgPSAnICsgbihiKSArICcgY20gdW5kIGggPSAnICsgbihoKSArICcgY20uIEJlcmVjaG5lIFYuJywgWydFcnN0IEdydW5kZmzDpGNoZSwgZGFubiBIw7ZoZS4nXSwgJ2N1Ym9pZCcsIHsgbDogbCwgYjogYiwgaDogaCB9LCBhbnMsICdjbcKzJywgWzIgKiBsICsgMiAqIGIgKyAyICogaCwgbCAqIGIsIGwgKiBoLCBhbnMgKyBsXSwgJ1YgPSBsIMK3IGIgwrcgaCA9ICcgKyBuKGwpICsgJyDCtyAnICsgbihiKSArICcgwrcgJyArIG4oaCkgKyAnID0gJyArIG4oYW5zKSArICcgY23Csy4nLCAnRm9ybWVsbicpOwogIH0KCiAgZnVuY3Rpb24gdGFza0FxdWFyaXVtVm9sdW1lKGRpZmYpIHsKICAgIGNvbnN0IGwgPSByYW5kb21JbnQoNSwgMTIpOwogICAgY29uc3QgYiA9IHJhbmRvbUludCgzLCA4KTsKICAgIGNvbnN0IGggPSByYW5kb21JbnQoMywgOCk7CiAgICBjb25zdCBhbnMgPSBsICogYiAqIGg7CiAgICByZXR1cm4gYmFzZVRhc2soJ1ZvbHVtZW4nLCAnVm9sdW1lbicsIGRpZmYsICdBcXVhcml1bSBhbHMgUXVhZGVyJywgJ0VpbiBrbGVpbmVzIE1vZGVsbC1BcXVhcml1bSBpc3QgJyArIG4obCkgKyAnIGNtIGxhbmcsICcgKyBuKGIpICsgJyBjbSBicmVpdCB1bmQgJyArIG4oaCkgKyAnIGNtIGhvY2guIFdpZSB2aWVsZSBLdWJpa3plbnRpbWV0ZXIgcGFzc2VuIGhpbmVpbj8nLCBbJ0RpZSBBdWZnYWJlIGlzdCBlaW4gUXVhZGVyLiddLCAnY3Vib2lkJywgeyBsOiBsLCBiOiBiLCBoOiBoIH0sIGFucywgJ2NtwrMnLCBbbCAqIGIsIDIgKiAobCArIGIgKyBoKSwgbCArIGIgKyBoLCBhbnMgLSBoXSwgJ0lubmVucmF1bTogViA9ICcgKyBuKGwpICsgJyDCtyAnICsgbihiKSArICcgwrcgJyArIG4oaCkgKyAnID0gJyArIG4oYW5zKSArICcgY23Csy4nLCAnU3RyYXRlZ2llJyk7CiAgfQoKICBmdW5jdGlvbiB0YXNrUHJpc21Wb2x1bWUoZGlmZikgewogICAgY29uc3QgZyA9IHJhbmRvbUludCg0LCAxMik7CiAgICBjb25zdCBoID0gcmFuZG9tSW50KDIsIDgpOwogICAgY29uc3QgdCA9IHJhbmRvbUludCgzLCAxMCk7CiAgICBjb25zdCBhcmVhID0gZyAqIGggLyAyOwogICAgY29uc3QgYW5zID0gYXJlYSAqIHQ7CiAgICByZXR1cm4gYmFzZVRhc2soJ1ZvbHVtZW4nLCAnVm9sdW1lbicsIGRpZmYsICdEcmVpZWNrc3ByaXNtYScsICdFaW4gRHJlaWVja3NwcmlzbWEgaGF0IGcgPSAnICsgbihnKSArICcgY20sIERyZWllY2tzaMO2aGUgaCA9ICcgKyBuKGgpICsgJyBjbSB1bmQgS8O2cnBlcmjDtmhlIGsgPSAnICsgbih0KSArICcgY20uIEJlcmVjaG5lIFYuJywgWydadWVyc3QgZGllIERyZWllY2tzZmzDpGNoZSBiZXJlY2huZW4uJ10sICdwcmlzbScsIHsgZzogZywgaDogaCwgdDogdCB9LCBhbnMsICdjbcKzJywgW2cgKiBoICogdCwgYXJlYSwgZyArIGggKyB0LCBhbnMgLyAyXSwgJ0cgPSAnICsgbihnKSArICcgwrcgJyArIG4oaCkgKyAnIDogMiA9ICcgKyBuKGFyZWEpICsgJyBjbcKyLiBWID0gRyDCtyBrID0gJyArIG4oYW5zKSArICcgY23Csy4nLCAnRmzDpGNoZScpOwogIH0KCiAgZnVuY3Rpb24gdGFza0N5bGluZGVyVm9sdW1lKGRpZmYpIHsKICAgIGNvbnN0IHIgPSByYW5kb21JbnQoMiwgNik7CiAgICBjb25zdCBoID0gcmFuZG9tSW50KDMsIDEwKTsKICAgIGNvbnN0IGFucyA9IE1hdGgucm91bmQoMy4xNCAqIHIgKiByICogaCAqIDEwMCkgLyAxMDA7CiAgICByZXR1cm4gYmFzZVRhc2soJ1ZvbHVtZW4nLCAnVm9sdW1lbicsIGRpZmYsICdaeWxpbmRlciBhbHMgQXVzYmxpY2snLCAnRWluIFp5bGluZGVyIGhhdCByID0gJyArIG4ocikgKyAnIGNtIHVuZCBoID0gJyArIG4oaCkgKyAnIGNtLiBCZXJlY2huZSBWIG1pdCDPgCDiiYggMywxNC4nLCBbJ0F1c2JsaWNrOiBWID0gz4AgwrcgcsKyIMK3IGguJ10sICdjeWxpbmRlcicsIHsgcjogciwgaDogaCB9LCBhbnMsICdjbcKzJywgWzIgKiAzLjE0ICogciAqIGgsIDMuMTQgKiByICogciwgciAqIHIgKiBoLCBhbnMgKyBoXSwgJ1Yg4omIIDMsMTQgwrcgJyArIG4ocikgKyAnwrIgwrcgJyArIG4oaCkgKyAnID0gJyArIG4oYW5zLCAyKSArICcgY23Csy4nLCAnRm9ybWVsbicpOwogIH0KCiAgZnVuY3Rpb24gdGFza1B5cmFtaWRWb2x1bWUoZGlmZikgewogICAgY29uc3QgYSA9IHJhbmRvbUludCgzLCA4KTsKICAgIGNvbnN0IGggPSByYW5kb21JbnQoMywgOSk7CiAgICBjb25zdCBhbnMgPSBhICogYSAqIGggLyAzOwogICAgcmV0dXJuIGJhc2VUYXNrKCdWb2x1bWVuJywgJ1ZvbHVtZW4nLCBkaWZmLCAnUHlyYW1pZGUgYWxzIEF1c2JsaWNrJywgJ0VpbmUgcXVhZHJhdGlzY2hlIFB5cmFtaWRlIGhhdCBhID0gJyArIG4oYSkgKyAnIGNtIHVuZCBoID0gJyArIG4oaCkgKyAnIGNtLiBCZXJlY2huZSBWLicsIFsnQXVzYmxpY2s6IFYgPSBHIMK3IGggOiAzLiddLCAncHlyYW1pZCcsIHsgYTogYSwgaDogaCB9LCBhbnMsICdjbcKzJywgW2EgKiBhICogaCwgYSAqIGggLyAzLCBhICogYSwgYW5zICsgYV0sICdHID0gJyArIG4oYSAqIGEpICsgJyBjbcKyLiBWID0gJyArIG4oYSAqIGEpICsgJyDCtyAnICsgbihoKSArICcgOiAzID0gJyArIG4oYW5zLCAyKSArICcgY23Csy4nLCAnRm9ybWVsbicpOwogIH0KCiAgZnVuY3Rpb24gdGFza0NvbmVWb2x1bWUoZGlmZikgewogICAgY29uc3QgciA9IHJhbmRvbUludCgyLCA2KTsKICAgIGNvbnN0IGggPSByYW5kb21JbnQoMywgOSk7CiAgICBjb25zdCBhbnMgPSBNYXRoLnJvdW5kKDMuMTQgKiByICogciAqIGggLyAzICogMTAwKSAvIDEwMDsKICAgIHJldHVybiBiYXNlVGFzaygnVm9sdW1lbicsICdWb2x1bWVuJywgZGlmZiwgJ0tlZ2VsIGFscyBBdXNibGljaycsICdFaW4gS2VnZWwgaGF0IHIgPSAnICsgbihyKSArICcgY20gdW5kIGggPSAnICsgbihoKSArICcgY20uIEJlcmVjaG5lIFYgbWl0IM+AIOKJiCAzLDE0LicsIFsnQXVzYmxpY2s6IFYgPSDPgCDCtyBywrIgwrcgaCA6IDMuJ10sICdjb25lJywgeyByOiByLCBoOiBoIH0sIGFucywgJ2NtwrMnLCBbMy4xNCAqIHIgKiByICogaCwgMy4xNCAqIHIgKiByLCAyICogMy4xNCAqIHIsIGFucyArIGhdLCAnViDiiYggMywxNCDCtyAnICsgbihyKSArICfCsiDCtyAnICsgbihoKSArICcgOiAzID0gJyArIG4oYW5zLCAyKSArICcgY23Csy4nLCAnRm9ybWVsbicpOwogIH0KCiAgZnVuY3Rpb24gdGFza1NwaGVyZVZvbHVtZShkaWZmKSB7CiAgICBjb25zdCByID0gcmFuZG9tSW50KDIsIDUpOwogICAgY29uc3QgYW5zID0gTWF0aC5yb3VuZCg0ICogMy4xNCAqIHIgKiByICogciAvIDMgKiAxMDApIC8gMTAwOwogICAgcmV0dXJuIGJhc2VUYXNrKCdWb2x1bWVuJywgJ1ZvbHVtZW4nLCBkaWZmLCAnS3VnZWwgYWxzIEF1c2JsaWNrJywgJ0VpbmUgS3VnZWwgaGF0IHIgPSAnICsgbihyKSArICcgY20uIEJlcmVjaG5lIGRhcyBWb2x1bWVuIG1pdCDPgCDiiYggMywxNC4nLCBbJ0F1c2JsaWNrOiBWID0gNCA6IDMgwrcgz4AgwrcgcsKzLiddLCAnc3BoZXJlJywgeyByOiByIH0sIGFucywgJ2NtwrMnLCBbMy4xNCAqIHIgKiByLCA0ICogMy4xNCAqIHIgKiByLCByICogciAqIHIsIGFucyArIHJdLCAnViDiiYggNCA6IDMgwrcgMywxNCDCtyAnICsgbihyKSArICfCsyA9ICcgKyBuKGFucywgMikgKyAnIGNtwrMuJywgJ0Zvcm1lbG4nKTsKICB9CgogIGZ1bmN0aW9uIHRhc2tWb2x1bWVSZXZlcnNlKGRpZmYpIHsKICAgIGNvbnN0IGwgPSByYW5kb21JbnQoNCwgMTApOwogICAgY29uc3QgYiA9IHJhbmRvbUludCgzLCA4KTsKICAgIGNvbnN0IGggPSByYW5kb21JbnQoMiwgOCk7CiAgICBjb25zdCB2b2x1bWUgPSBsICogYiAqIGg7CiAgICByZXR1cm4gYmFzZVRhc2soJ1ZvbHVtZW4nLCAnU3RyYXRlZ2llJywgZGlmZiwgJ0ZlaGxlbmRlIFF1YWRlcmjDtmhlJywgJ0VpbiBRdWFkZXIgaGF0IFYgPSAnICsgbih2b2x1bWUpICsgJyBjbcKzLCBsID0gJyArIG4obCkgKyAnIGNtIHVuZCBiID0gJyArIG4oYikgKyAnIGNtLiBXaWUgaG9jaCBpc3QgZXI/JywgWydSZWNobmUgaCA9IFYgOiAobCDCtyBiKS4nXSwgJ2N1Ym9pZCcsIHsgbDogbCwgYjogYiwgaDogaCB9LCBoLCAnY20nLCBbdm9sdW1lIC8gbCwgdm9sdW1lIC8gYiwgbCAqIGIsIGggKyBiXSwgJ2ggPSAnICsgbih2b2x1bWUpICsgJyA6ICgnICsgbihsKSArICcgwrcgJyArIG4oYikgKyAnKSA9ICcgKyBuKGgpICsgJyBjbS4nLCAnVm9sdW1lbicpOwogIH0KCiAgZnVuY3Rpb24gdGFza0Zvcm11bGFSZWN0YW5nbGUoZGlmZikgewogICAgcmV0dXJuIGZvcm11bGFDaG9pY2UoJ0Zvcm1lbG4nLCBkaWZmLCAnRm9ybWVsIGbDvHJzIFJlY2h0ZWNrJywgJ1dlbGNoZSBGb3JtZWwgYmVyZWNobmV0IGRlbiBGbMOkY2hlbmluaGFsdCBlaW5lcyBSZWNodGVja3M/JywgJ0EgPSBhIMK3IGInLCBbJ1UgPSAyIMK3IGEgKyAyIMK3IGInLCAnQSA9IDQgwrcgYScsICdWID0gYSDCtyBiIMK3IGgnXSwgJ3JlY3RhbmdsZScsIHsgYTogOCwgYjogNSB9LCAnRsO8ciBkaWUgUmVjaHRlY2tmbMOkY2hlIHdlcmRlbiBMw6RuZ2UgdW5kIEJyZWl0ZSBtdWx0aXBsaXppZXJ0LicsICdGbMOkY2hlJyk7CiAgfQoKICBmdW5jdGlvbiB0YXNrRm9ybXVsYVNxdWFyZShkaWZmKSB7CiAgICByZXR1cm4gZm9ybXVsYUNob2ljZSgnRm9ybWVsbicsIGRpZmYsICdRdWFkcmF0Zm9ybWVsJywgJ1dlbGNoZSBGb3JtZWwgYmVyZWNobmV0IGRlbiBVbWZhbmcgZWluZXMgUXVhZHJhdHM/JywgJ1UgPSA0IMK3IGEnLCBbJ0EgPSBhIMK3IGEnLCAnVSA9IDIgwrcgYSArIDIgwrcgYicsICdWID0gYSDCtyBhIMK3IGEnXSwgJ3NxdWFyZScsIHsgYTogNSB9LCAnRGVyIFJhbmQgZWluZXMgUXVhZHJhdHMgYmVzdGVodCBhdXMgdmllciBnbGVpY2ggbGFuZ2VuIFNlaXRlbi4nLCAnVW1mYW5nJyk7CiAgfQoKICBmdW5jdGlvbiB0YXNrRm9ybXVsYVRyaWFuZ2xlKGRpZmYpIHsKICAgIHJldHVybiBmb3JtdWxhQ2hvaWNlKCdGb3JtZWxuJywgZGlmZiwgJ0RyZWllY2tzZm9ybWVsJywgJ1dlbGNoZSBGb3JtZWwgYmVyZWNobmV0IGRlbiBGbMOkY2hlbmluaGFsdCBlaW5lcyBEcmVpZWNrcz8nLCAnQSA9IGcgwrcgaCA6IDInLCBbJ0EgPSBnIMK3IGgnLCAnVSA9IGcgKyBoJywgJ1YgPSBHIMK3IGgnXSwgJ3RyaWFuZ2xlJywgeyBnOiA5LCBoOiA2LCBzMTogNywgczI6IDggfSwgJ0VpbiBEcmVpZWNrIGlzdCBoYWxiIHNvIGdyb8OfIHdpZSBkYXMgcGFzc2VuZGUgUmVjaHRlY2suJywgJ0Zsw6RjaGUnKTsKICB9CgogIGZ1bmN0aW9uIHRhc2tGb3JtdWxhQ3Vib2lkKGRpZmYpIHsKICAgIHJldHVybiBmb3JtdWxhQ2hvaWNlKCdGb3JtZWxuJywgZGlmZiwgJ1F1YWRlcmZvcm1lbCcsICdXZWxjaGUgRm9ybWVsIHBhc3N0IHp1bSBWb2x1bWVuIGVpbmVzIFF1YWRlcnM/JywgJ1YgPSBsIMK3IGIgwrcgaCcsIFsnQSA9IGwgwrcgYicsICdVID0gMiDCtyBsICsgMiDCtyBiJywgJ08gPSA2IMK3IGEgwrcgYSddLCAnY3Vib2lkJywgeyBsOiA3LCBiOiA0LCBoOiA1IH0sICdWb2x1bWVuIGVudHN0ZWh0IGF1cyBkcmVpIFJpY2h0dW5nZW46IEzDpG5nZSwgQnJlaXRlIHVuZCBIw7ZoZS4nLCAnVm9sdW1lbicpOwogIH0KCiAgZnVuY3Rpb24gdGFza0Zvcm11bGFUcmFwZXpvaWQoZGlmZikgewogICAgcmV0dXJuIGZvcm11bGFDaG9pY2UoJ0Zvcm1lbG4nLCBkaWZmLCAnVHJhcGV6ZmzDpGNoZScsICdXZWxjaGUgRm9ybWVsIGJlcmVjaG5ldCBkZW4gRmzDpGNoZW5pbmhhbHQgZWluZXMgVHJhcGV6ZXM/JywgJ0EgPSAoYSArIGMpIMK3IGggOiAyJywgWydBID0gYSDCtyBoJywgJ1UgPSBhICsgYiArIGMgKyBkJywgJ1YgPSBHIMK3IGgnXSwgJ3RyYXBlem9pZCcsIHsgYTogMTIsIGI6IDYsIGM6IDcsIGQ6IDYsIGg6IDUgfSwgJ0JlaW0gVHJhcGV6IHdlcmRlbiBkaWUgcGFyYWxsZWxlbiBTZWl0ZW4gYSB1bmQgYyB6dXNhbW1lbiBnZW51dHp0LicsICdGbMOkY2hlJyk7CiAgfQoKICBmdW5jdGlvbiB0YXNrRm9ybXVsYVByaXNtKGRpZmYpIHsKICAgIHJldHVybiBmb3JtdWxhQ2hvaWNlKCdGb3JtZWxuJywgZGlmZiwgJ1ByaXNtZW5pZGVlJywgJ1dlbGNoZSBGb3JtZWwgYmVzY2hyZWlidCBkYXMgVm9sdW1lbiBlaW5lcyBQcmlzbWFzIGFsbGdlbWVpbj8nLCAnViA9IEcgwrcgaycsIFsnQSA9IGcgwrcgaCA6IDInLCAnVSA9IGEgKyBiICsgYycsICdBID0gz4AgwrcgcsKyJ10sICdwcmlzbScsIHsgZzogOCwgaDogNSwgdDogNiB9LCAnRWluIFByaXNtYSBlbnRzdGVodCwgd2VubiBlaW5lIEdydW5kZmzDpGNoZSBpbiBkaWUgS8O2cnBlcmjDtmhlIGdlc2Nob2JlbiB3aXJkLicsICdWb2x1bWVuJyk7CiAgfQoKICBmdW5jdGlvbiB0YXNrRm9ybXVsYUNpcmNsZShkaWZmKSB7CiAgICByZXR1cm4gZm9ybXVsYUNob2ljZSgnRm9ybWVsbicsIGRpZmYsICdLcmVpcyBhbHMgQXVzYmxpY2snLCAnV2VsY2hlIEZvcm1lbCBiZXJlY2huZXQgZGllIEtyZWlzZmzDpGNoZT8nLCAnQSA9IM+AIMK3IHLCsicsIFsnVSA9IDIgwrcgz4AgwrcgcicsICdBID0gMiDCtyByJywgJ1YgPSDPgCDCtyBywrIgwrcgaCddLCAnY2lyY2xlJywgeyByOiA0IH0sICdEaWUgS3JlaXNmbMOkY2hlIG51dHp0IGRlbiBSYWRpdXMgaW0gUXVhZHJhdC4nLCAnRmzDpGNoZScpOwogIH0KCiAgZnVuY3Rpb24gdGFza0Zvcm11bGFQeXJhbWlkKGRpZmYpIHsKICAgIHJldHVybiBmb3JtdWxhQ2hvaWNlKCdGb3JtZWxuJywgZGlmZiwgJ1B5cmFtaWRlIGFscyBBdXNibGljaycsICdXZWxjaGUgRm9ybWVsIHBhc3N0IHp1bSBWb2x1bWVuIGVpbmVyIFB5cmFtaWRlPycsICdWID0gRyDCtyBoIDogMycsIFsnViA9IEcgwrcgaCcsICdBID0gYSDCtyBhJywgJ1UgPSA0IMK3IGEnXSwgJ3B5cmFtaWQnLCB7IGE6IDYsIGg6IDcgfSwgJ0VpbmUgUHlyYW1pZGUgaGF0IGVpbiBEcml0dGVsIGRlcyBwYXNzZW5kZW4gUHJpc21lbnZvbHVtZW5zLicsICdWb2x1bWVuJyk7CiAgfQoKICBmdW5jdGlvbiB0YXNrRm9ybXVsYUVycm9yKGRpZmYpIHsKICAgIGNvbnN0IGNvcnJlY3QgPSAnRGllIEVpbmhlaXQgY23CsiBmZWhsdCBiZWltIEZsw6RjaGVuaW5oYWx0Lic7CiAgICByZXR1cm4gZmluaXNoVGFzaygnRm9ybWVsbicsICdGb3JtZWxuJywgZGlmZiwgJ0ZlaGxlciBmaW5kZW4nLCAnRWluZSBMw7ZzdW5nIGxhdXRldDogQSA9IDYgwrcgNCA9IDI0IGNtLiBXYXMgaXN0IGRhcmFuIGZhbHNjaD8nLCBbJ0VzIGdlaHQgdW0gZWluZW4gRmzDpGNoZW5pbmhhbHQuJ10sICdyZWN0YW5nbGUnLCB7IGE6IDYsIGI6IDQgfSwgbWFrZVRleHRDaG9pY2VzKGNvcnJlY3QsIFsnRGllIFJlY2hudW5nIDYgwrcgNCBpc3QgZmFsc2NoLicsICdFcyBtw7xzc3RlIFVtZmFuZyBoZWnDn2VuLicsICdEaWUgWmFobCAyNCBpc3QgZmFsc2NoLiddKSwgJzYgwrcgNCA9IDI0IGlzdCByaWNodGlnLCBhYmVyIEZsw6RjaGVuaW5oYWx0IGJyYXVjaHQgUXVhZHJhdHplbnRpbWV0ZXI6IDI0IGNtwrIuJywgJ0VpbmhlaXRlbicpOwogIH0KCiAgZnVuY3Rpb24gZm9ybXVsYUNob2ljZShraW5kLCBkaWZmLCB0aXRsZSwgcXVlc3Rpb24sIGNvcnJlY3QsIHdyb25ncywgc2hhcGVJZCwgcGFyYW1zLCBleHBsYW5hdGlvbiwgYm9udXMpIHsKICAgIHJldHVybiBmaW5pc2hUYXNrKGtpbmQsICdGb3JtZWxuJywgZGlmZiwgdGl0bGUsIHF1ZXN0aW9uLCBbJ1fDpGhsZSBkaWUgcGFzc2VuZGUgRm9ybWVsLiddLCBzaGFwZUlkLCBwYXJhbXMsIG1ha2VUZXh0Q2hvaWNlcyhjb3JyZWN0LCB3cm9uZ3MpLCBleHBsYW5hdGlvbiwgYm9udXMpOwogIH0KCiAgZnVuY3Rpb24gdGFza1VuaXRQZXJpbWV0ZXIoZGlmZikgewogICAgcmV0dXJuIHVuaXRDaG9pY2UoZGlmZiwgJ1VtZmFuZ3NlaW5oZWl0JywgJ1dlbGNoZSBFaW5oZWl0IHBhc3N0IHp1IGVpbmVtIFVtZmFuZz8nLCAnY20nLCBbJ2NtwrInLCAnY23CsycsICdrZyddLCAnVW1mYW5nIG1pc3N0IGVpbmUgTMOkbmdlIGFtIFJhbmQuJywgJ1VtZmFuZycpOwogIH0KCiAgZnVuY3Rpb24gdGFza1VuaXRBcmVhKGRpZmYpIHsKICAgIHJldHVybiB1bml0Q2hvaWNlKGRpZmYsICdGbMOkY2hlbmVpbmhlaXQnLCAnV2VsY2hlIEVpbmhlaXQgcGFzc3QgenUgZWluZW0gRmzDpGNoZW5pbmhhbHQ/JywgJ2NtwrInLCBbJ2NtJywgJ2NtwrMnLCAnR3JhZCddLCAnRmzDpGNoZW5pbmhhbHQgesOkaGx0IFF1YWRyYXRlLCBkYWhlciBjbcKyLicsICdGbMOkY2hlJyk7CiAgfQoKICBmdW5jdGlvbiB0YXNrVW5pdFZvbHVtZShkaWZmKSB7CiAgICByZXR1cm4gdW5pdENob2ljZShkaWZmLCAnVm9sdW1lbmVpbmhlaXQnLCAnV2VsY2hlIEVpbmhlaXQgcGFzc3QgenUgZWluZW0gVm9sdW1lbj8nLCAnY23CsycsIFsnY20nLCAnY23CsicsICdtaW4nXSwgJ1ZvbHVtZW4gesOkaGx0IFfDvHJmZWwsIGRhaGVyIGNtwrMuJywgJ1ZvbHVtZW4nKTsKICB9CgogIGZ1bmN0aW9uIHRhc2tVbml0TWl4ZWQoZGlmZikgewogICAgY29uc3QgY29ycmVjdCA9ICdBID0gNDggY23Csic7CiAgICByZXR1cm4gZmluaXNoVGFzaygnRWluaGVpdGVuJywgJ0VpbmhlaXRlbicsIGRpZmYsICdFaW5oZWl0IHByw7xmZW4nLCAnRWluIFJlY2h0ZWNrIGhhdCBhID0gOCBjbSB1bmQgYiA9IDYgY20uIFdlbGNoZSBFcmdlYm5pc3plaWxlIGlzdCB2b2xsc3TDpG5kaWcgcmljaHRpZz8nLCBbJ0FjaHRlIGF1ZiBaYWhsIHVuZCBFaW5oZWl0LiddLCAncmVjdGFuZ2xlJywgeyBhOiA4LCBiOiA2IH0sIG1ha2VUZXh0Q2hvaWNlcyhjb3JyZWN0LCBbJ0EgPSA0OCBjbScsICdVID0gNDggY23CsicsICdBID0gMTQgY23CsiddKSwgJzggwrcgNiA9IDQ4IHVuZCBlaW5lIEZsw6RjaGUgYnJhdWNodCBjbcKyLicsICdGbMOkY2hlJyk7CiAgfQoKICBmdW5jdGlvbiB0YXNrVW5pdFBpKGRpZmYpIHsKICAgIGNvbnN0IGNvcnJlY3QgPSAnRGVyIEtyZWlzdW1mYW5nIHdpcmQgaW4gY20gYW5nZWdlYmVuLic7CiAgICByZXR1cm4gZmluaXNoVGFzaygnRWluaGVpdGVuJywgJ0VpbmhlaXRlbicsIGRpZmYsICdLcmVpcy1FaW5oZWl0JywgJ0JlaSBlaW5lbSBLcmVpcyB3aXJkIGRlciBVbWZhbmcgYmVyZWNobmV0LiBXZWxjaGUgQXVzc2FnZSBzdGltbXQ/JywgWydVbWZhbmcgaXN0IGltbWVyIGVpbmUgTMOkbmdlLiddLCAnY2lyY2xlJywgeyByOiA1IH0sIG1ha2VUZXh0Q2hvaWNlcyhjb3JyZWN0LCBbJ0RlciBLcmVpc3VtZmFuZyB3aXJkIGluIGNtwrIgYW5nZWdlYmVuLicsICdEZXIgS3JlaXN1bWZhbmcgd2lyZCBpbiBjbcKzIGFuZ2VnZWJlbi4nLCAnRGVyIEtyZWlzdW1mYW5nIGhhdCBrZWluZSBFaW5oZWl0LiddKSwgJ0RlciBVbWZhbmcgaXN0IGRpZSBMw6RuZ2UgZGVzIFJhbmRlcy4gRGFoZXIgcGFzc3QgY20uJywgJ1VtZmFuZycpOwogIH0KCiAgZnVuY3Rpb24gdGFza1VuaXRTdG9yeShkaWZmKSB7CiAgICBjb25zdCBjb3JyZWN0ID0gJ1ZvbHVtZW4sIGFsc28gY23Csyc7CiAgICByZXR1cm4gZmluaXNoVGFzaygnRWluaGVpdGVuJywgJ0VpbmhlaXRlbicsIGRpZmYsICdTYWNoYXVmZ2FiZSBlcmtlbm5lbicsICdFaW5lIFNjaGFjaHRlbCBzb2xsIGdlZsO8bGx0IHdlcmRlbi4gV2VsY2hlIEdyw7bDn2UgYnJhdWNoc3QgZHU/JywgWydGw7xsbGVuIGJlc2NocmVpYnQgUmF1bSBpbSBJbm5lcmVuLiddLCAnY3Vib2lkJywgeyBsOiA2LCBiOiA0LCBoOiA1IH0sIG1ha2VUZXh0Q2hvaWNlcyhjb3JyZWN0LCBbJ1VtZmFuZywgYWxzbyBjbScsICdGbMOkY2hlLCBhbHNvIGNtwrInLCAnTWFzc2UsIGFsc28gZyddKSwgJ0RlciBJbm5lbnJhdW0gZWluZXIgU2NoYWNodGVsIGlzdCBlaW4gVm9sdW1lbi4gRGllIEVpbmhlaXQgaXN0IGNtwrMuJywgJ1ZvbHVtZW4nKTsKICB9CgogIGZ1bmN0aW9uIHVuaXRDaG9pY2UoZGlmZiwgdGl0bGUsIHF1ZXN0aW9uLCBjb3JyZWN0LCB3cm9uZ3MsIGV4cGxhbmF0aW9uLCBib251cykgewogICAgcmV0dXJuIGZpbmlzaFRhc2soJ0VpbmhlaXRlbicsICdFaW5oZWl0ZW4nLCBkaWZmLCB0aXRsZSwgcXVlc3Rpb24sIFsnV8OkaGxlIGRpZSBwYXNzZW5kZSBFaW5oZWl0LiddLCAnJywge30sIG1ha2VUZXh0Q2hvaWNlcyhjb3JyZWN0LCB3cm9uZ3MpLCBleHBsYW5hdGlvbiwgYm9udXMpOwogIH0KCiAgZnVuY3Rpb24gdGFza1JlY3RhbmdsZVJldmVyc2UoZGlmZikgewogICAgY29uc3QgYiA9IHJhbmRvbUludCgzLCA5KTsKICAgIGNvbnN0IHUgPSAyICogcmFuZG9tSW50KDUsIDE0KSArIDIgKiBiOwogICAgY29uc3QgYSA9ICh1IC0gMiAqIGIpIC8gMjsKICAgIHJldHVybiBiYXNlVGFzaygnU3RyYXRlZ2llJywgJ1N0cmF0ZWdpZScsIGRpZmYsICdVbWZhbmcgcsO8Y2t3w6RydHMnLCAnRWluIFJlY2h0ZWNrIGhhdCBVID0gJyArIG4odSkgKyAnIGNtIHVuZCBiID0gJyArIG4oYikgKyAnIGNtLiBXaWUgbGFuZyBpc3QgYT8nLCBbJ1UgPSAyYSArIDJiLiddLCAncmVjdGFuZ2xlJywgeyBhOiBhLCBiOiBiIH0sIGEsICdjbScsIFt1IC0gYiwgdSAvIDIsIGEgKyBiLCAyICogYV0sICcyYSA9IFUg4oiSIDJiID0gJyArIG4odSkgKyAnIOKIkiAnICsgbigyICogYikgKyAnID0gJyArIG4oMiAqIGEpICsgJy4gQWxzbyBhID0gJyArIG4oYSkgKyAnIGNtLicsICdVbWZhbmcnKTsKICB9CgogIGZ1bmN0aW9uIHRhc2tBcmVhQ2hhbmdlKGRpZmYpIHsKICAgIGNvbnN0IGEgPSByYW5kb21JbnQoNCwgMTApOwogICAgY29uc3QgYiA9IHJhbmRvbUludCgzLCA4KTsKICAgIGNvbnN0IGNvcnJlY3QgPSAnRGllIEZsw6RjaGUgdmVyZG9wcGVsdCBzaWNoLic7CiAgICByZXR1cm4gZmluaXNoVGFzaygnU3RyYXRlZ2llJywgJ1N0cmF0ZWdpZScsIGRpZmYsICdWZXLDpG5kZXJ1bmcgdmVyc3RlaGVuJywgJ0JlaSBlaW5lbSBSZWNodGVjayBibGVpYnQgYiBnbGVpY2guIE51ciBhIHdpcmQgdmVyZG9wcGVsdC4gV2FzIHBhc3NpZXJ0IG1pdCBkZW0gRmzDpGNoZW5pbmhhbHQ/JywgWydBID0gYSDCtyBiLiddLCAncmVjdGFuZ2xlJywgeyBhOiBhLCBiOiBiIH0sIG1ha2VUZXh0Q2hvaWNlcyhjb3JyZWN0LCBbJ0RpZSBGbMOkY2hlIHZlcnZpZXJmYWNodCBzaWNoLicsICdEaWUgRmzDpGNoZSBibGVpYnQgZ2xlaWNoLicsICdEaWUgRmzDpGNoZSB3aXJkIG51ciB1bSAyIGNtwrIgZ3LDtsOfZXIuJ10pLCAnV2VubiBlaW4gRmFrdG9yIHZlcmRvcHBlbHQgd2lyZCB1bmQgZGVyIGFuZGVyZSBnbGVpY2ggYmxlaWJ0LCB2ZXJkb3BwZWx0IHNpY2ggZGFzIFByb2R1a3QuJywgJ0Zsw6RjaGUnKTsKICB9CgogIGZ1bmN0aW9uIHRhc2tEZWNvbXBvc2UoZGlmZikgewogICAgY29uc3QgYSA9IHJhbmRvbUludCg5LCAxNSk7CiAgICBjb25zdCBiID0gcmFuZG9tSW50KDcsIDEyKTsKICAgIGNvbnN0IGMgPSByYW5kb21JbnQoMiwgNSk7CiAgICBjb25zdCBkID0gcmFuZG9tSW50KDIsIDUpOwogICAgY29uc3QgYW5zID0gYSAqIGIgLSBjICogZDsKICAgIHJldHVybiBiYXNlVGFzaygnU3RyYXRlZ2llJywgJ1N0cmF0ZWdpZScsIGRpZmYsICdaZXJsZWdlbiBvZGVyIGVyZ8OkbnplbicsICdXZWxjaGUgRmzDpGNoZSBibGVpYnQgw7xicmlnLCB3ZW5uIGF1cyAnICsgbihhKSArICcgY20gwrcgJyArIG4oYikgKyAnIGNtIGVpbiBBdXNzY2huaXR0ICcgKyBuKGMpICsgJyBjbSDCtyAnICsgbihkKSArICcgY20gZW50ZmVybnQgd2lyZD8nLCBbJ0dyb8OfZXMgUmVjaHRlY2sgbWludXMga2xlaW5lcyBSZWNodGVjay4nXSwgJ2NvbXBvc2l0ZScsIHsgYTogYSwgYjogYiwgYzogYywgZDogZCB9LCBhbnMsICdjbcKyJywgW2EgKiBiLCBjICogZCwgMiAqIChhICsgYiksIGFucyArIGNdLCAnQSA9ICcgKyBuKGEgKiBiKSArICcg4oiSICcgKyBuKGMgKiBkKSArICcgPSAnICsgbihhbnMpICsgJyBjbcKyLicsICdGbMOkY2hlJyk7CiAgfQoKICBmdW5jdGlvbiB0YXNrQ29tcGFyZVNoYXBlcyhkaWZmKSB7CiAgICBjb25zdCBnID0gcmFuZG9tSW50KDQsIDEwKTsKICAgIGNvbnN0IGggPSByYW5kb21JbnQoMywgOSk7CiAgICBjb25zdCBjb3JyZWN0ID0gJ0RhcyBSZWNodGVjayBpc3QgZG9wcGVsdCBzbyBncm/DnyB3aWUgZGFzIERyZWllY2suJzsKICAgIHJldHVybiBmaW5pc2hUYXNrKCdTdHJhdGVnaWUnLCAnU3RyYXRlZ2llJywgZGlmZiwgJ1JlY2h0ZWNrIHVuZCBEcmVpZWNrIHZlcmdsZWljaGVuJywgJ0VpbiBSZWNodGVjayB1bmQgZWluIERyZWllY2sgaGFiZW4gZGllIGdsZWljaGUgR3J1bmRzZWl0ZSBnID0gJyArIG4oZykgKyAnIGNtIHVuZCBkaWUgZ2xlaWNoZSBIw7ZoZSBoID0gJyArIG4oaCkgKyAnIGNtLiBXZWxjaGUgQXVzc2FnZSBzdGltbXQ/JywgWydWZXJnbGVpY2hlIEEgPSBnIMK3IGggbWl0IEEgPSBnIMK3IGggOiAyLiddLCAndHJpYW5nbGUnLCB7IGc6IGcsIGg6IGgsIHMxOiBnLCBzMjogaCB9LCBtYWtlVGV4dENob2ljZXMoY29ycmVjdCwgWydEYXMgRHJlaWVjayBpc3QgZG9wcGVsdCBzbyBncm/Dny4nLCAnQmVpZGUgRmzDpGNoZW4gc2luZCBnbGVpY2ggZ3Jvw58uJywgJ01hbiBrYW5uIGRhcyBvaG5lIFVtZmFuZyBuaWNodCB3aXNzZW4uJ10pLCAnRGFzIERyZWllY2sgaXN0IGhhbGIgc28gZ3Jvw58gd2llIGRhcyBwYXNzZW5kZSBSZWNodGVjay4gQWxzbyBpc3QgZGFzIFJlY2h0ZWNrIGRvcHBlbHQgc28gZ3Jvw58uJywgJ0Zsw6RjaGUnKTsKICB9CgogIGZ1bmN0aW9uIHRhc2tNaXNzaW5nSGVpZ2h0KGRpZmYpIHsKICAgIGNvbnN0IGcgPSByYW5kb21JbnQoNCwgMTIpOwogICAgY29uc3QgaCA9IHJhbmRvbUludCgyLCA4KTsKICAgIGNvbnN0IGFyZWEgPSBnICogaCAvIDI7CiAgICByZXR1cm4gYmFzZVRhc2soJ1N0cmF0ZWdpZScsICdTdHJhdGVnaWUnLCBkaWZmLCAnRHJlaWVja3Now7ZoZSByw7xja3fDpHJ0cycsICdFaW4gRHJlaWVjayBoYXQgQSA9ICcgKyBuKGFyZWEpICsgJyBjbcKyIHVuZCBnID0gJyArIG4oZykgKyAnIGNtLiBXaWUgZ3Jvw58gaXN0IGg/JywgWydBdXMgQSA9IGcgwrcgaCA6IDIgZm9sZ3QgaCA9IDJBIDogZy4nXSwgJ3RyaWFuZ2xlJywgeyBnOiBnLCBoOiBoLCBzMTogZywgczI6IGggKyAzIH0sIGgsICdjbScsIFthcmVhIC8gZywgYXJlYSAqIDIsIGcgKiBoLCBoICsgZ10sICdoID0gMiDCtyBBIDogZyA9IDIgwrcgJyArIG4oYXJlYSkgKyAnIDogJyArIG4oZykgKyAnID0gJyArIG4oaCkgKyAnIGNtLicsICdGbMOkY2hlJyk7CiAgfQoKICBlbGVtZW50cy5tYWluLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlTWFpbkNsaWNrKTsKICBlbGVtZW50cy5tYWluLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgaGFuZGxlTWFpbklucHV0KTsKICBlbGVtZW50cy5mdWxsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdHJ5RnVsbFZpZXcpOwogIGVsZW1lbnRzLm1lbnUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICBnb1NjcmVlbignbWVudScpOwogIH0pOwogIGVsZW1lbnRzLnJlc2V0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVzZXRHYW1lKTsKICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlS2V5cyk7CgogIHJlbmRlckFwcCgpOwp9KCkpOwoKPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPg==
PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImRlIj4KPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+CiAgPHRpdGxlPkdlb01laXN0ZXI6IEZsw6RjaGVuIHVuZCBLw7ZycGVyPC90aXRsZT4KICAKPHN0eWxlPgo6cm9vdCB7CiAgLS1wYXBlcjogI2Y3ZmJmZjsKICAtLXBhcGVyLXN0cm9uZzogI2ZmZmZmZjsKICAtLWluazogIzExMjAzMzsKICAtLW11dGVkOiAjNTM2NzdkOwogIC0tbGluZTogI2M5ZDhlNzsKICAtLWxpbmUtc3Ryb25nOiAjOTBhOGJmOwogIC0tYWNjZW50OiAjMGY3NjZlOwogIC0tYWNjZW50LXNvZnQ6ICNkOWY1ZjE7CiAgLS1ibHVlOiAjMjQ1NGE2OwogIC0tYmx1ZS1zb2Z0OiAjZTdlZWZjOwogIC0tZ29sZDogIzlhNmEwNTsKICAtLWdvbGQtc29mdDogI2ZmZjRkMjsKICAtLWdyZWVuOiAjMTk2YjM3OwogIC0tZ3JlZW4tc29mdDogI2UyZjdlOTsKICAtLXJlZDogIzlmMjQzMzsKICAtLXJlZC1zb2Z0OiAjZmRlNWU4OwogIC0tc2hhZG93OiAwIDE4cHggNTBweCByZ2JhKDI0LCA0NCwgNjgsIDAuMTYpOwogIC0tcmFkaXVzOiAyNHB4OwogIGNvbG9yLXNjaGVtZTogbGlnaHQ7Cn0KCiogewogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cn0KCmh0bWwsCmJvZHkgewogIG1pbi1oZWlnaHQ6IDEwMCU7CiAgbWFyZ2luOiAwOwp9Cgpib2R5IHsKICBmb250LWZhbWlseTogc3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICJTZWdvZSBVSSIsIHNhbnMtc2VyaWY7CiAgY29sb3I6IHZhcigtLWluayk7CiAgYmFja2dyb3VuZDoKICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgMTAlIDAlLCByZ2JhKDE1LCAxMTgsIDExMCwgMC4xNiksIHRyYW5zcGFyZW50IDI2cmVtKSwKICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgODglIDQlLCByZ2JhKDM2LCA4NCwgMTY2LCAwLjE0KSwgdHJhbnNwYXJlbnQgMjhyZW0pLAogICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgI2YyZjhmZiAwJSwgI2VkZjVmYiA0NiUsICNmOGZiZmYgMTAwJSk7CiAgb3ZlcmZsb3cteDogaGlkZGVuOwp9CgpidXR0b24sCmlucHV0IHsKICBmb250OiBpbmhlcml0Owp9CgpidXR0b24gewogIGJvcmRlcjogMDsKICBjdXJzb3I6IHBvaW50ZXI7CiAgdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247Cn0KCmJ1dHRvbjpmb2N1cy12aXNpYmxlLAppbnB1dDpmb2N1cy12aXNpYmxlIHsKICBvdXRsaW5lOiA0cHggc29saWQgcmdiYSgxNSwgMTE4LCAxMTAsIDAuNDUpOwogIG91dGxpbmUtb2Zmc2V0OiA0cHg7Cn0KCmJ1dHRvbjpkaXNhYmxlZCwKaW5wdXQ6ZGlzYWJsZWQgewogIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgb3BhY2l0eTogMC42NDsKfQoKW2hpZGRlbl0gewogIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQoKLmdhbWUtcm9vdCB7CiAgbWluLWhlaWdodDogMTAwc3ZoOwogIHdpZHRoOiAxMDAlOwogIHBhZGRpbmc6IGNsYW1wKDEycHgsIDJ2dywgMjhweCk7Cn0KCi5nYW1lLXJvb3Quc29mdC1mdWxsIHsKICBwb3NpdGlvbjogZml4ZWQ7CiAgaW5zZXQ6IDA7CiAgei1pbmRleDogMjA7CiAgb3ZlcmZsb3c6IGF1dG87CiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgI2VlZjhmZiwgI2Y4ZmJmZik7Cn0KCi5zY3JlZW4gewogIHdpZHRoOiBtaW4oMTQ4MHB4LCAxMDAlKTsKICBtYXJnaW46IDAgYXV0bzsKfQoKLm1lbnUtc2NyZWVuIHsKICBkaXNwbGF5OiBncmlkOwogIGdhcDogY2xhbXAoMThweCwgM3Z3LCAzMnB4KTsKfQoKLmhlcm8tcGFuZWwsCi5wYXRoLXNlY3Rpb24sCi5wYW5lbC1jYXJkLAouZW5kLXBhbmVsIHsKICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE0NCwgMTY4LCAxOTEsIDAuMzgpOwogIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44OCk7CiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93KTsKICBib3JkZXItcmFkaXVzOiBjbGFtcCgyMnB4LCAzdncsIDM0cHgpOwp9CgouaGVyby1wYW5lbCB7CiAgbWluLWhlaWdodDogY2xhbXAoMjYwcHgsIDQydmgsIDQzMHB4KTsKICBwYWRkaW5nOiBjbGFtcCgyMnB4LCA0dncsIDU2cHgpOwogIGRpc3BsYXk6IGdyaWQ7CiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMjYwcHgsIDAuOTJmcikgbWlubWF4KDI2MHB4LCAwLjcyZnIpOwogIGdhcDogY2xhbXAoMjJweCwgNXZ3LCA3MHB4KTsKICBhbGlnbi1pdGVtczogY2VudGVyOwogIG92ZXJmbG93OiBoaWRkZW47CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgouaGVyby1wYW5lbDo6YmVmb3JlIHsKICBjb250ZW50OiAiIjsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgaW5zZXQ6IDA7CiAgYmFja2dyb3VuZDoKICAgIGxpbmVhci1ncmFkaWVudCgxMjBkZWcsIHJnYmEoMTUsIDExOCwgMTEwLCAwLjA4KSwgdHJhbnNwYXJlbnQgNDIlKSwKICAgIGxpbmVhci1ncmFkaWVudCgzMDBkZWcsIHJnYmEoMzYsIDg0LCAxNjYsIDAuMDgpLCB0cmFuc3BhcmVudCA1MCUpOwogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgouaGVyby1jb3B5LAouaGVyby12aXN1YWwgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLmV5ZWJyb3cgewogIG1hcmdpbjogMCAwIDdweDsKICBjb2xvcjogdmFyKC0tYWNjZW50KTsKICBmb250LXNpemU6IDAuODJyZW07CiAgZm9udC13ZWlnaHQ6IDgwMDsKICBsZXR0ZXItc3BhY2luZzogMC4xMmVtOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KCmgxLApoMiwKaDMsCnAgewogIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlOwp9CgpoMSB7CiAgbWFyZ2luOiAwOwogIGZvbnQtc2l6ZTogY2xhbXAoMy4ycmVtLCAxMHZ3LCA4LjhyZW0pOwogIGxpbmUtaGVpZ2h0OiAwLjg4OwogIGxldHRlci1zcGFjaW5nOiAtMC4wODVlbTsKfQoKaDIgewogIG1hcmdpbjogMDsKICBmb250LXNpemU6IGNsYW1wKDEuN3JlbSwgMy4ydncsIDMuMXJlbSk7CiAgbGluZS1oZWlnaHQ6IDE7CiAgbGV0dGVyLXNwYWNpbmc6IC0wLjA0NWVtOwp9CgpoMyB7CiAgbWFyZ2luOiAwOwogIGZvbnQtc2l6ZTogY2xhbXAoMS4xcmVtLCAxLjd2dywgMS40NXJlbSk7Cn0KCi5oZXJvLXN1YnRpdGxlIHsKICBtYXJnaW46IDhweCAwIDA7CiAgZm9udC13ZWlnaHQ6IDgwMDsKICBjb2xvcjogdmFyKC0tYmx1ZSk7CiAgZm9udC1zaXplOiBjbGFtcCgxLjE1cmVtLCAyLjJ2dywgMS43NXJlbSk7Cn0KCi5oZXJvLXRleHQsCi5lbmQtc3VtbWFyeSwKLmNhbnZhcy1kZXNjcmlwdGlvbiwKLmxlYXJuaW5nLXRpcCwKLmZvcm11bGEtbm90ZSwKLnRhc2stcHJvbXB0LAouY2FyZC10ZXh0IHsKICBjb2xvcjogdmFyKC0tbXV0ZWQpOwogIGxpbmUtaGVpZ2h0OiAxLjU1Owp9CgouaGVyby10ZXh0IHsKICBtYXgtd2lkdGg6IDY0Y2g7CiAgZm9udC1zaXplOiBjbGFtcCgxLjAycmVtLCAxLjd2dywgMS4zMnJlbSk7Cn0KCi5oZXJvLWJhZGdlcywKLmdsb2JhbC10b29sYmFyLAouYXBwLWFjdGlvbnMsCi50YXNrLWFjdGlvbnMsCi5lbmQtYWN0aW9ucyB7CiAgZGlzcGxheTogZmxleDsKICBnYXA6IDEwcHg7CiAgZmxleC13cmFwOiB3cmFwOwogIGFsaWduLWl0ZW1zOiBjZW50ZXI7Cn0KCi5oZXJvLWJhZGdlcyBzcGFuLAoucGlsbCwKLnZhbHVlLWNoaXAgewogIGRpc3BsYXk6IGlubGluZS1mbGV4OwogIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgbWluLWhlaWdodDogMzRweDsKICBib3JkZXItcmFkaXVzOiA5OTlweDsKICBiYWNrZ3JvdW5kOiB2YXIoLS1hY2NlbnQtc29mdCk7CiAgY29sb3I6ICMwYjVjNTY7CiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxNSwgMTE4LCAxMTAsIDAuMjIpOwogIHBhZGRpbmc6IDZweCAxMnB4OwogIGZvbnQtc2l6ZTogMC44OHJlbTsKICBmb250LXdlaWdodDogNzUwOwp9CgouaGVyby12aXN1YWwgewogIG1pbi1oZWlnaHQ6IDMyMHB4OwogIGRpc3BsYXk6IGdyaWQ7CiAgcGxhY2UtaXRlbXM6IGNlbnRlcjsKfQoKLm1pbmktZ3JpZCB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHdpZHRoOiBtaW4oNDAwcHgsIDg2JSk7CiAgYXNwZWN0LXJhdGlvOiAxLjQ1OwogIGJvcmRlci1yYWRpdXM6IDI2cHg7CiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzNiwgODQsIDE2NiwgMC4xOCk7CiAgYmFja2dyb3VuZDoKICAgIGxpbmVhci1ncmFkaWVudChyZ2JhKDM2LCA4NCwgMTY2LCAwLjEyKSAxcHgsIHRyYW5zcGFyZW50IDFweCksCiAgICBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHJnYmEoMzYsIDg0LCAxNjYsIDAuMTIpIDFweCwgdHJhbnNwYXJlbnQgMXB4KSwKICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KTsKICBiYWNrZ3JvdW5kLXNpemU6IDI4cHggMjhweDsKfQoKLm1pbmktc2hhcGUgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBib3JkZXI6IDNweCBzb2xpZCB2YXIoLS1ibHVlKTsKICBiYWNrZ3JvdW5kOiByZ2JhKDM2LCA4NCwgMTY2LCAwLjEyKTsKICBib3gtc2hhZG93OiAwIDE4cHggNDBweCByZ2JhKDM2LCA4NCwgMTY2LCAwLjE2KTsKfQoKLm1pbmktc3F1YXJlIHsKICB3aWR0aDogMTI4cHg7CiAgaGVpZ2h0OiAxMjhweDsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtODhweCwgMThweCk7CiAgYm9yZGVyLXJhZGl1czogMThweDsKfQoKLm1pbmktdHJpYW5nbGUgewogIHdpZHRoOiAxNTBweDsKICBoZWlnaHQ6IDEzMHB4OwogIGJvcmRlcjogMDsKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg5NnB4LCAtNTRweCk7Cn0KCi5taW5pLXRyaWFuZ2xlOjpiZWZvcmUgewogIGNvbnRlbnQ6ICIiOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBpbnNldDogMDsKICBiYWNrZ3JvdW5kOiByZ2JhKDE1LCAxMTgsIDExMCwgMC4xOCk7CiAgY2xpcC1wYXRoOiBwb2x5Z29uKDUwJSAwLCAxMDAlIDEwMCUsIDAgMTAwJSk7CiAgYm9yZGVyOiAzcHggc29saWQgdmFyKC0tYWNjZW50KTsKfQoKLm1pbmktY3ViZSB7CiAgd2lkdGg6IDEzMnB4OwogIGhlaWdodDogOTRweDsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg5MHB4LCA5NHB4KSBza2V3WSgtMTBkZWcpOwogIGJvcmRlci1jb2xvcjogdmFyKC0tZ29sZCk7CiAgYmFja2dyb3VuZDogcmdiYSgxNTQsIDEwNiwgNSwgMC4xMyk7Cn0KCi5wYXRoLXNlY3Rpb24gewogIHBhZGRpbmc6IGNsYW1wKDE4cHgsIDN2dywgMzRweCk7Cn0KCi5zZWN0aW9uLWhlYWRpbmcgewogIG1hcmdpbi1ib3R0b206IDE4cHg7Cn0KCi5wYXRoLWdyaWQgewogIGRpc3BsYXk6IGdyaWQ7CiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoNywgbWlubWF4KDAsIDFmcikpOwogIGdhcDogMTRweDsKfQoKLnBhdGgtY2FyZCB7CiAgbWluLWhlaWdodDogMTc4cHg7CiAgYm9yZGVyLXJhZGl1czogMjJweDsKICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci1zdHJvbmcpOwogIGNvbG9yOiB2YXIoLS1pbmspOwogIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTQ0LCAxNjgsIDE5MSwgMC41Mik7CiAgcGFkZGluZzogMThweDsKICB0ZXh0LWFsaWduOiBsZWZ0OwogIGRpc3BsYXk6IGZsZXg7CiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDE2MG1zIGVhc2UsIGJvcmRlci1jb2xvciAxNjBtcyBlYXNlLCBib3gtc2hhZG93IDE2MG1zIGVhc2U7Cn0KCi5wYXRoLWNhcmQ6aG92ZXIgewogIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtM3B4KTsKICBib3JkZXItY29sb3I6IHJnYmEoMTUsIDExOCwgMTEwLCAwLjU1KTsKICBib3gtc2hhZG93OiAwIDE2cHggMzhweCByZ2JhKDI0LCA0NCwgNjgsIDAuMTMpOwp9CgoubWFpbi1jYXJkIHsKICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjZTVmYmY3LCAjZmZmZmZmIDYyJSk7CiAgYm9yZGVyLWNvbG9yOiByZ2JhKDE1LCAxMTgsIDExMCwgMC4zOCk7Cn0KCi5jYXJkLWtpY2tlciB7CiAgY29sb3I6IHZhcigtLWFjY2VudCk7CiAgZm9udC13ZWlnaHQ6IDg1MDsKICBmb250LXNpemU6IDAuOHJlbTsKICBsZXR0ZXItc3BhY2luZzogMC4wOGVtOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KCi5jYXJkLXRpdGxlIHsKICBkaXNwbGF5OiBibG9jazsKICBtYXJnaW46IDEwcHggMCA4cHg7CiAgZm9udC1zaXplOiBjbGFtcCgxLjEycmVtLCAxLjR2dywgMS40MnJlbSk7CiAgZm9udC13ZWlnaHQ6IDg1MDsKICBsaW5lLWhlaWdodDogMS4xMjsKfQoKLmNhcmQtdGV4dCB7CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC1zaXplOiAwLjk3cmVtOwp9CgouZ2xvYmFsLXRvb2xiYXIgewogIGp1c3RpZnktY29udGVudDogY2VudGVyOwp9CgoudG9vbC1idXR0b24sCi5tb2RlLXRhYnMgYnV0dG9uLAouYW5zd2VyLWJ1dHRvbiwKLnN0ZXAtYnV0dG9uLAouc3VibWl0LWJ1dHRvbiwKLnNoYXBlLWJ1dHRvbiwKLmRpZmYtYnV0dG9uIHsKICBtaW4taGVpZ2h0OiA0NnB4OwogIGJvcmRlci1yYWRpdXM6IDE2cHg7CiAgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50KTsKICBjb2xvcjogI2ZmZmZmZjsKICBwYWRkaW5nOiAxMHB4IDE2cHg7CiAgZm9udC13ZWlnaHQ6IDgwMDsKICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMDQpOwp9CgoudG9vbC1idXR0b24uc2Vjb25kYXJ5LAoubW9kZS10YWJzIGJ1dHRvbiwKLnNoYXBlLWJ1dHRvbiwKLmRpZmYtYnV0dG9uLAouc3RlcC1idXR0b24gewogIGJhY2tncm91bmQ6ICNmZmZmZmY7CiAgY29sb3I6IHZhcigtLWluayk7CiAgYm9yZGVyLWNvbG9yOiByZ2JhKDE0NCwgMTY4LCAxOTEsIDAuNik7Cn0KCi50b29sLWJ1dHRvbjpob3ZlciwKLnN1Ym1pdC1idXR0b246aG92ZXIsCi5hbnN3ZXItYnV0dG9uOmhvdmVyIHsKICBmaWx0ZXI6IGJyaWdodG5lc3MoMS4wNCk7Cn0KCi5wbGF5LXNjcmVlbiB7CiAgZGlzcGxheTogZ3JpZDsKICBnYXA6IDE2cHg7Cn0KCi5hcHAtYmFyIHsKICBkaXNwbGF5OiBmbGV4OwogIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogIGdhcDogMTRweDsKICBwYWRkaW5nOiAxNnB4IDE4cHg7CiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxNDQsIDE2OCwgMTkxLCAwLjM4KTsKICBib3JkZXItcmFkaXVzOiAyNnB4OwogIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3cpOwp9CgoubW9kZS10YWJzIHsKICBkaXNwbGF5OiBmbGV4OwogIGdhcDogOHB4OwogIG92ZXJmbG93LXg6IGF1dG87CiAgcGFkZGluZzogNHB4IDJweCA4cHg7CiAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluOwp9CgoubW9kZS10YWJzIGJ1dHRvbiB7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICBtaW4taGVpZ2h0OiA0NHB4Owp9CgoubW9kZS10YWJzIGJ1dHRvbi5pcy1hY3RpdmUsCi5zaGFwZS1idXR0b24uaXMtYWN0aXZlLAouZGlmZi1idXR0b24uaXMtYWN0aXZlIHsKICBiYWNrZ3JvdW5kOiB2YXIoLS1ibHVlKTsKICBjb2xvcjogI2ZmZmZmZjsKICBib3JkZXItY29sb3I6IHZhcigtLWJsdWUpOwp9CgouZGFzaGJvYXJkIHsKICBkaXNwbGF5OiBncmlkOwogIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMC44ZnIgMC43ZnIgMC44ZnIgMmZyOwogIGdhcDogMTJweDsKfQoKLnNjb3JlLXRpbGUgewogIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTQ0LCAxNjgsIDE5MSwgMC40Mik7CiAgYm9yZGVyLXJhZGl1czogMjBweDsKICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CiAgcGFkZGluZzogMTRweCAxNnB4OwogIG1pbi1oZWlnaHQ6IDc4cHg7Cn0KCi5zY29yZS1sYWJlbCB7CiAgZGlzcGxheTogYmxvY2s7CiAgY29sb3I6IHZhcigtLW11dGVkKTsKICBmb250LXdlaWdodDogNzgwOwogIGZvbnQtc2l6ZTogMC45cmVtOwogIG1hcmdpbi1ib3R0b206IDVweDsKfQoKLnNjb3JlLXRpbGUgc3Ryb25nIHsKICBmb250LXNpemU6IGNsYW1wKDEuMzhyZW0sIDIuNHZ3LCAyLjFyZW0pOwp9CgoucHJvZ3Jlc3Mtc2hlbGwsCi5za2lsbC1iYXIgewogIGhlaWdodDogMTFweDsKICBiYWNrZ3JvdW5kOiAjZTRlZGY2OwogIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogIG92ZXJmbG93OiBoaWRkZW47CiAgbWFyZ2luOiA4cHggMCA2cHg7Cn0KCi5wcm9ncmVzcy1zaGVsbCBzcGFuLAouc2tpbGwtYmFyIHNwYW4gewogIGRpc3BsYXk6IGJsb2NrOwogIGhlaWdodDogMTAwJTsKICB3aWR0aDogMCU7CiAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDsKICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHZhcigtLWFjY2VudCksIHZhcigtLWJsdWUpKTsKICB0cmFuc2l0aW9uOiB3aWR0aCAxODBtcyBlYXNlOwp9CgouY29udGVudC1ncmlkIHsKICBkaXNwbGF5OiBncmlkOwogIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDEuMzVmcikgbWlubWF4KDMyMHB4LCAwLjlmcik7CiAgZ3JpZC10ZW1wbGF0ZS1hcmVhczoKICAgICJ2aXN1YWwgZm9ybXVsYSIKICAgICJ0YXNrIHNjb3JlIjsKICBnYXA6IDE2cHg7CiAgYWxpZ24taXRlbXM6IHN0YXJ0Owp9CgoudmlzdWFsLWNhcmQgeyBncmlkLWFyZWE6IHZpc3VhbDsgfQouZm9ybXVsYS1jYXJkIHsgZ3JpZC1hcmVhOiBmb3JtdWxhOyB9Ci50YXNrLWNhcmQgeyBncmlkLWFyZWE6IHRhc2s7IH0KLnNjb3JlLWNhcmQgeyBncmlkLWFyZWE6IHNjb3JlOyB9CgoucGFuZWwtY2FyZCB7CiAgcGFkZGluZzogY2xhbXAoMTZweCwgMnZ3LCAyNHB4KTsKfQoKLnBhbmVsLWhlYWRpbmcgewogIGRpc3BsYXk6IGZsZXg7CiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogIGdhcDogMTJweDsKICBtYXJnaW4tYm90dG9tOiAxNHB4Owp9CgpjYW52YXMgewogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogbWluKDU0dmgsIDUyMHB4KTsKICBtaW4taGVpZ2h0OiAzMTBweDsKICBkaXNwbGF5OiBibG9jazsKICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCAjZmZmZmZmLCAjZjdmYmZmKTsKICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE0NCwgMTY4LCAxOTEsIDAuNTUpOwogIGJvcmRlci1yYWRpdXM6IDIycHg7CiAgdG91Y2gtYWN0aW9uOiBub25lOwp9CgouY2FudmFzLWRlc2NyaXB0aW9uIHsKICBtYXJnaW46IDEwcHggMnB4IDA7CiAgZm9udC1zaXplOiAwLjk2cmVtOwp9CgouZGltZW5zaW9uLWNvbnRyb2xzIHsKICBkaXNwbGF5OiBncmlkOwogIGdhcDogMTJweDsKICBtYXJnaW4tdG9wOiAxNHB4Owp9CgouZGltZW5zaW9uLXJvdyB7CiAgZGlzcGxheTogZ3JpZDsKICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgwLCAxZnIpIGF1dG8gYXV0bzsKICBnYXA6IDEwcHg7CiAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICBwYWRkaW5nOiAxMnB4OwogIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTQ0LCAxNjgsIDE5MSwgMC40Mik7CiAgYm9yZGVyLXJhZGl1czogMThweDsKICBiYWNrZ3JvdW5kOiAjZmJmZGZmOwp9CgouZGltZW5zaW9uLWxhYmVsIHsKICBkaXNwbGF5OiBncmlkOwogIGdhcDogNnB4OwogIG1pbi13aWR0aDogMDsKICBmb250LXdlaWdodDogODAwOwp9CgouZGltZW5zaW9uLXZhbHVlIHsKICBjb2xvcjogdmFyKC0tYmx1ZSk7CiAgZm9udC13ZWlnaHQ6IDg1MDsKfQoKaW5wdXRbdHlwZT0icmFuZ2UiXSB7CiAgd2lkdGg6IDEwMCU7CiAgYWNjZW50LWNvbG9yOiB2YXIoLS1hY2NlbnQpOwp9Cgouc3RlcC1idXR0b24gewogIHdpZHRoOiA0NnB4OwogIHBhZGRpbmc6IDA7CiAgZm9udC1zaXplOiAxLjI1cmVtOwp9Cgouc2hhcGUtcGlja2VyIHsKICBkaXNwbGF5OiBmbGV4OwogIGZsZXgtd3JhcDogd3JhcDsKICBnYXA6IDhweDsKICBtYXJnaW4tYm90dG9tOiAxNHB4Owp9Cgouc2hhcGUtYnV0dG9uIHsKICBtaW4taGVpZ2h0OiA0MnB4OwogIHBhZGRpbmc6IDlweCAxMnB4OwogIGZvbnQtc2l6ZTogMC45MnJlbTsKfQoKLnNoYXBlLWJ1dHRvbi5leHRlbnNpb246OmFmdGVyIHsKICBjb250ZW50OiAiIFp1c2F0eiI7CiAgbWFyZ2luLWxlZnQ6IDVweDsKICBjb2xvcjogdmFyKC0tZ29sZCk7CiAgZm9udC1zaXplOiAwLjc4cmVtOwp9CgouZm9ybXVsYS1jb250ZW50IHsKICBkaXNwbGF5OiBncmlkOwogIGdhcDogMTJweDsKfQoKLmZvcm11bGEtYm94IHsKICBwYWRkaW5nOiAxNHB4OwogIGJvcmRlci1yYWRpdXM6IDE4cHg7CiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxNDQsIDE2OCwgMTkxLCAwLjQ1KTsKICBiYWNrZ3JvdW5kOiAjZmJmZGZmOwp9CgouZm9ybXVsYS1uYW1lIHsKICBtYXJnaW46IDAgMCA3cHg7CiAgZm9udC13ZWlnaHQ6IDg1MDsKICBjb2xvcjogdmFyKC0tYmx1ZSk7Cn0KCi5mb3JtdWxhLWdlbmVyYWwsCi5mb3JtdWxhLWxpbmUgewogIG1hcmdpbjogMCAwIDZweDsKICBmb250LXdlaWdodDogODIwOwogIGZvbnQtc2l6ZTogY2xhbXAoMXJlbSwgMS42dncsIDEuMThyZW0pOwp9CgouZm9ybXVsYS1ub3RlIHsKICBtYXJnaW46IDhweCAwIDEwcHg7CiAgZm9udC1zaXplOiAwLjk2cmVtOwp9CgoudGFzay1wcm9tcHQgewogIG1hcmdpbjogMCAwIDE0cHg7CiAgZm9udC1zaXplOiBjbGFtcCgxLjA1cmVtLCAxLjV2dywgMS4yOHJlbSk7CiAgY29sb3I6IHZhcigtLWluayk7CiAgZm9udC13ZWlnaHQ6IDcyMDsKfQoKLmFuc3dlci1hcmVhIHsKICBkaXNwbGF5OiBncmlkOwogIGdhcDogMTBweDsKfQoKLmFuc3dlci1ncmlkIHsKICBkaXNwbGF5OiBncmlkOwogIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIG1pbm1heCgwLCAxZnIpKTsKICBnYXA6IDEwcHg7Cn0KCi5hbnN3ZXItYnV0dG9uIHsKICBtaW4taGVpZ2h0OiA1OHB4OwogIHRleHQtYWxpZ246IGxlZnQ7CiAgYmFja2dyb3VuZDogI2ZmZmZmZjsKICBjb2xvcjogdmFyKC0taW5rKTsKICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE0NCwgMTY4LCAxOTEsIDAuNTgpOwogIHBhZGRpbmc6IDE0cHg7Cn0KCi5hbnN3ZXItYnV0dG9uLmlzLWNvcnJlY3QgewogIGJhY2tncm91bmQ6IHZhcigtLWdyZWVuLXNvZnQpOwogIGJvcmRlci1jb2xvcjogcmdiYSgyNSwgMTA3LCA1NSwgMC40OCk7CiAgY29sb3I6ICMwZjRhMjU7Cn0KCi5hbnN3ZXItYnV0dG9uLmlzLXdyb25nIHsKICBiYWNrZ3JvdW5kOiB2YXIoLS1yZWQtc29mdCk7CiAgYm9yZGVyLWNvbG9yOiByZ2JhKDE1OSwgMzYsIDUxLCAwLjQ4KTsKICBjb2xvcjogIzdiMWIyODsKfQoKLm51bWJlci1hbnN3ZXItcm93IHsKICBkaXNwbGF5OiBncmlkOwogIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDFmcikgYXV0byBhdXRvOwogIGdhcDogMTBweDsKICBhbGlnbi1pdGVtczogY2VudGVyOwp9CgoubnVtYmVyLWlucHV0IHsKICBtaW4taGVpZ2h0OiA1MnB4OwogIGJvcmRlci1yYWRpdXM6IDE2cHg7CiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxNDQsIDE2OCwgMTkxLCAwLjcpOwogIHBhZGRpbmc6IDEwcHggMTRweDsKICBmb250LXdlaWdodDogODAwOwogIGNvbG9yOiB2YXIoLS1pbmspOwogIGJhY2tncm91bmQ6ICNmZmZmZmY7Cn0KCi51bml0LWxhYmVsIHsKICBjb2xvcjogdmFyKC0tYmx1ZSk7CiAgZm9udC13ZWlnaHQ6IDg1MDsKICBtaW4td2lkdGg6IDUycHg7Cn0KCi5mZWVkYmFjay1ib3ggewogIG1pbi1oZWlnaHQ6IDY0cHg7CiAgbWFyZ2luLXRvcDogMTJweDsKICBwYWRkaW5nOiAxMnB4IDE0cHg7CiAgYm9yZGVyLXJhZGl1czogMThweDsKICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE0NCwgMTY4LCAxOTEsIDAuNDUpOwogIGJhY2tncm91bmQ6ICNmOGZiZmY7CiAgY29sb3I6IHZhcigtLW11dGVkKTsKICBsaW5lLWhlaWdodDogMS40ODsKfQoKLmZlZWRiYWNrLWJveC5nb29kIHsKICBiYWNrZ3JvdW5kOiB2YXIoLS1ncmVlbi1zb2Z0KTsKICBjb2xvcjogIzBmNGEyNTsKICBib3JkZXItY29sb3I6IHJnYmEoMjUsIDEwNywgNTUsIDAuMzgpOwp9CgouZmVlZGJhY2stYm94LmJhZCB7CiAgYmFja2dyb3VuZDogdmFyKC0tcmVkLXNvZnQpOwogIGNvbG9yOiAjN2IxYjI4OwogIGJvcmRlci1jb2xvcjogcmdiYSgxNTksIDM2LCA1MSwgMC4zOCk7Cn0KCi5mZWVkYmFjay1ib3gud2FybiB7CiAgYmFja2dyb3VuZDogdmFyKC0tZ29sZC1zb2Z0KTsKICBjb2xvcjogIzZmNGIwMDsKICBib3JkZXItY29sb3I6IHJnYmEoMTU0LCAxMDYsIDUsIDAuMzIpOwp9CgoudGFzay1hY3Rpb25zIHsKICBtYXJnaW4tdG9wOiAxMnB4Owp9Cgouc2tpbGwtc2NvcmVzIHsKICBkaXNwbGF5OiBncmlkOwogIGdhcDogMTBweDsKfQoKLnNraWxsLXJvdyB7CiAgcGFkZGluZzogMTJweDsKICBib3JkZXItcmFkaXVzOiAxNnB4OwogIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTQ0LCAxNjgsIDE5MSwgMC40Mik7CiAgYmFja2dyb3VuZDogI2ZiZmRmZjsKfQoKLnNraWxsLXJvdy1oZWFkIHsKICBkaXNwbGF5OiBmbGV4OwogIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICBnYXA6IDEwcHg7CiAgZm9udC13ZWlnaHQ6IDgyMDsKfQoKLmxlYXJuaW5nLXRpcCB7CiAgbWFyZ2luLXRvcDogMTJweDsKICBwYWRkaW5nOiAxM3B4OwogIGJvcmRlci1yYWRpdXM6IDE2cHg7CiAgYmFja2dyb3VuZDogdmFyKC0tYmx1ZS1zb2Z0KTsKICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM2LCA4NCwgMTY2LCAwLjIpOwp9CgouZW5kLXNjcmVlbiB7CiAgbWluLWhlaWdodDogY2FsYygxMDBzdmggLSA1NnB4KTsKICBkaXNwbGF5OiBncmlkOwogIHBsYWNlLWl0ZW1zOiBjZW50ZXI7Cn0KCi5lbmQtcGFuZWwgewogIHdpZHRoOiBtaW4oOTIwcHgsIDEwMCUpOwogIHBhZGRpbmc6IGNsYW1wKDIycHgsIDR2dywgNDhweCk7Cn0KCi5lbmQtc2NvcmVzIHsKICBkaXNwbGF5OiBncmlkOwogIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDMsIG1pbm1heCgwLCAxZnIpKTsKICBnYXA6IDEycHg7CiAgbWFyZ2luOiAyMHB4IDA7Cn0KCi5lbmQtc2NvcmUgewogIHBhZGRpbmc6IDE2cHg7CiAgYm9yZGVyLXJhZGl1czogMThweDsKICBiYWNrZ3JvdW5kOiAjZmJmZGZmOwogIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTQ0LCAxNjgsIDE5MSwgMC40NCk7Cn0KCi5lbmQtc2NvcmUgc3BhbiwKLmVuZC1zY29yZSBzdHJvbmcgewogIGRpc3BsYXk6IGJsb2NrOwp9CgouZW5kLXNjb3JlIHN0cm9uZyB7CiAgbWFyZ2luLXRvcDogNnB4OwogIGZvbnQtc2l6ZTogMS4zOHJlbTsKfQoKLmVuZC1hZHZpY2UgewogIHBhZGRpbmc6IDE0cHg7CiAgYm9yZGVyLXJhZGl1czogMThweDsKICBiYWNrZ3JvdW5kOiB2YXIoLS1hY2NlbnQtc29mdCk7CiAgY29sb3I6ICMwYjVjNTY7CiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxNSwgMTE4LCAxMTAsIDAuMjIpOwogIGxpbmUtaGVpZ2h0OiAxLjU7Cn0KCi5lbmQtYWN0aW9ucyB7CiAgbWFyZ2luLXRvcDogMThweDsKfQoKLnRvYXN0IHsKICBwb3NpdGlvbjogZml4ZWQ7CiAgbGVmdDogNTAlOwogIGJvdHRvbTogMThweDsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgyNHB4KTsKICBtYXgtd2lkdGg6IG1pbig2NDBweCwgY2FsYygxMDAlIC0gMjhweCkpOwogIHBhZGRpbmc6IDEycHggMTZweDsKICBiYWNrZ3JvdW5kOiAjMTEyMDMzOwogIGNvbG9yOiAjZmZmZmZmOwogIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogIGJveC1zaGFkb3c6IDAgMThweCA0NHB4IHJnYmEoMTcsIDMyLCA1MSwgMC4yOCk7CiAgb3BhY2l0eTogMDsKICBwb2ludGVyLWV2ZW50czogbm9uZTsKICB0cmFuc2l0aW9uOiBvcGFjaXR5IDE2MG1zIGVhc2UsIHRyYW5zZm9ybSAxNjBtcyBlYXNlOwogIGZvbnQtd2VpZ2h0OiA3ODA7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIHotaW5kZXg6IDYwOwp9CgoudG9hc3Quc2hvdyB7CiAgb3BhY2l0eTogMTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgwKTsKfQoKQG1lZGlhIChtYXgtd2lkdGg6IDEyODBweCkgewogIC5wYXRoLWdyaWQgewogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMywgbWlubWF4KDAsIDFmcikpOwogIH0KfQoKQG1lZGlhIChtYXgtd2lkdGg6IDk4MHB4KSB7CiAgLmhlcm8tcGFuZWwgewogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgfQoKICAuaGVyby12aXN1YWwgewogICAgbWluLWhlaWdodDogMjMwcHg7CiAgfQoKICAuZGFzaGJvYXJkIHsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIG1pbm1heCgwLCAxZnIpKTsKICB9CgogIC5kYXNoYm9hcmQgLndpZGUgewogICAgZ3JpZC1jb2x1bW46IDEgLyAtMTsKICB9CgogIC5jb250ZW50LWdyaWQgewogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICBncmlkLXRlbXBsYXRlLWFyZWFzOgogICAgICAidmlzdWFsIgogICAgICAiZm9ybXVsYSIKICAgICAgInRhc2siCiAgICAgICJzY29yZSI7CiAgfQoKICAuYXBwLWJhciB7CiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgfQp9CgpAbWVkaWEgKG1heC13aWR0aDogNzIwcHgpIHsKICAuZ2FtZS1yb290IHsKICAgIHBhZGRpbmc6IDEwcHg7CiAgfQoKICAuaGVyby1wYW5lbCwKICAucGF0aC1zZWN0aW9uLAogIC5wYW5lbC1jYXJkLAogIC5lbmQtcGFuZWwgewogICAgYm9yZGVyLXJhZGl1czogMjJweDsKICB9CgogIC5wYXRoLWdyaWQsCiAgLmFuc3dlci1ncmlkLAogIC5lbmQtc2NvcmVzIHsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogIH0KCiAgLnBhdGgtY2FyZCB7CiAgICBtaW4taGVpZ2h0OiAxMzhweDsKICB9CgogIC5kYXNoYm9hcmQgewogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgfQoKICAuZGltZW5zaW9uLXJvdywKICAubnVtYmVyLWFuc3dlci1yb3cgewogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgYXV0byBhdXRvOwogIH0KCiAgY2FudmFzIHsKICAgIG1pbi1oZWlnaHQ6IDI4MHB4OwogICAgaGVpZ2h0OiA0NHZoOwogIH0KCiAgLnRvb2wtYnV0dG9uLAogIC5tb2RlLXRhYnMgYnV0dG9uLAogIC5hbnN3ZXItYnV0dG9uLAogIC5zdWJtaXQtYnV0dG9uLAogIC5zaGFwZS1idXR0b24sCiAgLmRpZmYtYnV0dG9uIHsKICAgIG1pbi1oZWlnaHQ6IDQ4cHg7CiAgfQp9CgpAbWVkaWEgKG1heC13aWR0aDogNDQwcHgpIHsKICBoMSB7CiAgICBmb250LXNpemU6IGNsYW1wKDIuODVyZW0sIDE5dncsIDVyZW0pOwogIH0KCiAgLmhlcm8tYmFkZ2VzIHNwYW4gewogICAgd2lkdGg6IDEwMCU7CiAgfQoKICAuYXBwLWFjdGlvbnMsCiAgLmdsb2JhbC10b29sYmFyLAogIC50YXNrLWFjdGlvbnMsCiAgLmVuZC1hY3Rpb25zIHsKICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoOwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICB9CgogIC50b29sLWJ1dHRvbiwKICAuYXBwLWFjdGlvbnMgLnRvb2wtYnV0dG9uLAogIC5nbG9iYWwtdG9vbGJhciAudG9vbC1idXR0b24sCiAgLnRhc2stYWN0aW9ucyAudG9vbC1idXR0b24sCiAgLmVuZC1hY3Rpb25zIC50b29sLWJ1dHRvbiB7CiAgICB3aWR0aDogMTAwJTsKICB9CgogIC5wYW5lbC1oZWFkaW5nIHsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgfQp9CgpAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkgewogICosCiAgKjo6YmVmb3JlLAogICo6OmFmdGVyIHsKICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMDFtcyAhaW1wb3J0YW50OwogICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjAxbXMgIWltcG9ydGFudDsKICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDEgIWltcG9ydGFudDsKICB9Cn0KCjwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CiAgPGRpdiBpZD0iZ2FtZVJvb3QiIGNsYXNzPSJnYW1lLXJvb3QiPgogICAgPHNlY3Rpb24gaWQ9Im1lbnVTY3JlZW4iIGNsYXNzPSJzY3JlZW4gbWVudS1zY3JlZW4iIGFyaWEtbGFiZWxsZWRieT0ibWVudVRpdGxlIj4KICAgICAgPGRpdiBjbGFzcz0iaGVyby1wYW5lbCI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVyby1jb3B5Ij4KICAgICAgICAgIDxwIGNsYXNzPSJleWVicm93Ij5NYXRoZW1hdGlrIMK3IEtsYXNzZSA1IHVuZCA2PC9wPgogICAgICAgICAgPGgxIGlkPSJtZW51VGl0bGUiPkdlb01laXN0ZXI8L2gxPgogICAgICAgICAgPHAgY2xhc3M9Imhlcm8tc3VidGl0bGUiPkZsw6RjaGVuIMK3IFVtZmFuZyDCtyBWb2x1bWVuPC9wPgogICAgICAgICAgPHAgY2xhc3M9Imhlcm8tdGV4dCI+VmVyw6RuZGVyZSBNYcOfZSwgYmVvYmFjaHRlIGRpZSBaZWljaG51bmcgdW5kIHNpZWggbGl2ZSwgd2llIEZvcm1lbCwgZWluZ2VzZXR6dGUgV2VydGUsIFJlY2hlbndlZyB1bmQgRWluaGVpdCB6dXNhbW1lbnBhc3Nlbi48L3A+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZXJvLWJhZGdlcyIgYXJpYS1sYWJlbD0iRWlnZW5zY2hhZnRlbiBkZXMgU3BpZWxzIj4KICAgICAgICAgICAgPHNwYW4+Q2FudmFzLVZpc3VhbGlzaWVydW5nZW48L3NwYW4+CiAgICAgICAgICAgIDxzcGFuPkZvcm1lbC1MYWJvcjwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4+UHVua3RlIGplIExlcm5iZXJlaWNoPC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVyby12aXN1YWwiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1pbmktZ3JpZCI+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtaW5pLXNoYXBlIG1pbmktc3F1YXJlIj48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1pbmktc2hhcGUgbWluaS10cmlhbmdsZSI+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtaW5pLXNoYXBlIG1pbmktY3ViZSI+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPHNlY3Rpb24gY2xhc3M9InBhdGgtc2VjdGlvbiIgYXJpYS1sYWJlbGxlZGJ5PSJwYXRoc1RpdGxlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWhlYWRpbmciPgogICAgICAgICAgPHAgY2xhc3M9ImV5ZWJyb3ciPlfDpGhsZSBkZWluZW4gTGVybndlZzwvcD4KICAgICAgICAgIDxoMiBpZD0icGF0aHNUaXRsZSI+TWVocmVyZSBXZWdlIHp1bSBHZW8tVmVyc3TDpG5kbmlzPC9oMj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYXRoLWdyaWQiPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0icGF0aC1jYXJkIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0aW9uPSJzdGFydC1tb2RlIiBkYXRhLW1vZGU9ImV4cGxvcmUiPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2FyZC1raWNrZXIiPkVudGRlY2tlbjwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNhcmQtdGl0bGUiPkZvcm1lbiBlbnRkZWNrZW48L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXJkLXRleHQiPkZyZWllcyBFcmt1bmRlbiB2b24gRmzDpGNoZW4gdW5kIEvDtnJwZXJuIG1pdCBNYcOfcmVnbGVybi48L3NwYW4+CiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9InBhdGgtY2FyZCBtYWluLWNhcmQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Rpb249InN0YXJ0LW1vZGUiIGRhdGEtbW9kZT0ibGFiIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNhcmQta2lja2VyIj5MaXZlIHZlcnN0ZWhlbjwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNhcmQtdGl0bGUiPkZvcm1lbC1MYWJvcjwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNhcmQtdGV4dCI+Rm9ybWVsIGFsbGdlbWVpbiwgV2VydGUsIFJlY2hlbndlZyB1bmQgRXJnZWJuaXMgc2ljaHRiYXIgdmVyYmluZGVuLjwvc3Bhbj4KICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0icGF0aC1jYXJkIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0aW9uPSJzdGFydC1tb2RlIiBkYXRhLW1vZGU9InBlcmltZXRlciI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXJkLWtpY2tlciI+VHJhaW5pbmc8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXJkLXRpdGxlIj5VbWZhbmcgdHJhaW5pZXJlbjwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNhcmQtdGV4dCI+UsOkbmRlciBhZGRpZXJlbjogUXVhZHJhdCwgUmVjaHRlY2ssIERyZWllY2ssIFZpZWxlY2tlIHVuZCBLcmVpcy1BdXNibGljay48L3NwYW4+CiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9InBhdGgtY2FyZCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdGlvbj0ic3RhcnQtbW9kZSIgZGF0YS1tb2RlPSJhcmVhIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNhcmQta2lja2VyIj5UcmFpbmluZzwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNhcmQtdGl0bGUiPkZsw6RjaGVuIHRyYWluaWVyZW48L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXJkLXRleHQiPlplcmxlZ2VuLCBlcmfDpG56ZW4sIEdydW5kc2VpdGUgbWFsIEjDtmhlLCBEcmVpZWNrIGFscyBoYWxiZXMgUmVjaHRlY2suPC9zcGFuPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJwYXRoLWNhcmQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Rpb249InN0YXJ0LW1vZGUiIGRhdGEtbW9kZT0idm9sdW1lIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNhcmQta2lja2VyIj5UcmFpbmluZzwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNhcmQtdGl0bGUiPlZvbHVtZW4gdHJhaW5pZXJlbjwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNhcmQtdGV4dCI+V8O8cmZlbCwgUXVhZGVyIHVuZCBQcmlzbWEgbWl0IFNjaGljaHRlbiB1bmQgR3J1bmRmbMOkY2hlIHZlcnN0ZWhlbi48L3NwYW4+CiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9InBhdGgtY2FyZCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdGlvbj0ic3RhcnQtbW9kZSIgZGF0YS1tb2RlPSJleGFtIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNhcmQta2lja2VyIj5DaGFsbGVuZ2U8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXJkLXRpdGxlIj5HZW8tTWVpc3RlcnByw7xmdW5nPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2FyZC10ZXh0Ij5HZW1pc2NodGUgQXVmZ2FiZW4gbWl0IE11bHRpcGxlIENob2ljZSB1bmQgRWluZ2FiZWF1ZmdhYmVuLjwvc3Bhbj4KICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0icGF0aC1jYXJkIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0aW9uPSJzdGFydC1tb2RlIiBkYXRhLW1vZGU9InNjb3JlIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNhcmQta2lja2VyIj5Qcm9maWw8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXJkLXRpdGxlIj5NZWluZSBMZXJuYmVyZWljaGU8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXJkLXRleHQiPlNpdHp1bmdzZm9ydHNjaHJpdHQgZsO8ciBVbWZhbmcsIEZsw6RjaGUsIFZvbHVtZW4sIEZvcm1lbG4sIEVpbmhlaXRlbiB1bmQgU3RyYXRlZ2llLjwvc3Bhbj4KICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L3NlY3Rpb24+CgogICAgICA8ZGl2IGNsYXNzPSJnbG9iYWwtdG9vbGJhciIgYXJpYS1sYWJlbD0iR2xvYmFsZSBBa3Rpb25lbiI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0idG9vbC1idXR0b24iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Rpb249ImZ1bGxzY3JlZW4iPlZvbGxiaWxkPC9idXR0b24+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0idG9vbC1idXR0b24gc2Vjb25kYXJ5IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0aW9uPSJyZXNldC1nYW1lIj5OZXVzdGFydDwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvc2VjdGlvbj4KCiAgICA8bWFpbiBpZD0icGxheVNjcmVlbiIgY2xhc3M9InNjcmVlbiBwbGF5LXNjcmVlbiIgaGlkZGVuPgogICAgICA8aGVhZGVyIGNsYXNzPSJhcHAtYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZS1ibG9jayI+CiAgICAgICAgICA8cCBpZD0ibW9kZUxhYmVsIiBjbGFzcz0iZXllYnJvdyI+Rm9ybWVsLUxhYm9yPC9wPgogICAgICAgICAgPGgyIGlkPSJzY3JlZW5UaXRsZSI+R2VvTWVpc3RlcjwvaDI+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYXBwLWFjdGlvbnMiPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idG9vbC1idXR0b24iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Rpb249ImZ1bGxzY3JlZW4iPlZvbGxiaWxkPC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0b29sLWJ1dHRvbiBzZWNvbmRhcnkiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Rpb249InNob3ctbWVudSI+U3RhcnRzZWl0ZTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idG9vbC1idXR0b24gc2Vjb25kYXJ5IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0aW9uPSJyZXNldC1nYW1lIj5OZXVzdGFydDwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2hlYWRlcj4KCiAgICAgIDxuYXYgY2xhc3M9Im1vZGUtdGFicyIgYXJpYS1sYWJlbD0iTGVybndlZ2UiPgogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLWFjdGlvbj0ic3dpdGNoLW1vZGUiIGRhdGEtbW9kZT0iZXhwbG9yZSI+RW50ZGVja2VuPC9idXR0b24+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtYWN0aW9uPSJzd2l0Y2gtbW9kZSIgZGF0YS1tb2RlPSJsYWIiPkxhYm9yPC9idXR0b24+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtYWN0aW9uPSJzd2l0Y2gtbW9kZSIgZGF0YS1tb2RlPSJwZXJpbWV0ZXIiPlVtZmFuZzwvYnV0dG9uPgogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLWFjdGlvbj0ic3dpdGNoLW1vZGUiIGRhdGEtbW9kZT0iYXJlYSI+RmzDpGNoZTwvYnV0dG9uPgogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLWFjdGlvbj0ic3dpdGNoLW1vZGUiIGRhdGEtbW9kZT0idm9sdW1lIj5Wb2x1bWVuPC9idXR0b24+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtYWN0aW9uPSJzd2l0Y2gtbW9kZSIgZGF0YS1tb2RlPSJleGFtIj5QcsO8ZnVuZzwvYnV0dG9uPgogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLWFjdGlvbj0ic3dpdGNoLW1vZGUiIGRhdGEtbW9kZT0ic2NvcmUiPkxlcm5iZXJlaWNoZTwvYnV0dG9uPgogICAgICA8L25hdj4KCiAgICAgIDxzZWN0aW9uIGNsYXNzPSJkYXNoYm9hcmQiIGFyaWEtbGFiZWw9IlNwaWVsc3RhbmQiPgogICAgICAgIDxkaXYgY2xhc3M9InNjb3JlLXRpbGUiPgogICAgICAgICAgPHNwYW4gY2xhc3M9InNjb3JlLWxhYmVsIj5HZXNhbXRwdW5rdGU8L3NwYW4+CiAgICAgICAgICA8c3Ryb25nIGlkPSJ0b3RhbFNjb3JlIj4wPC9zdHJvbmc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2NvcmUtdGlsZSI+CiAgICAgICAgICA8c3BhbiBjbGFzcz0ic2NvcmUtbGFiZWwiPlNlcmllPC9zcGFuPgogICAgICAgICAgPHN0cm9uZyBpZD0ic3RyZWFrU2NvcmUiPjA8L3N0cm9uZz4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzY29yZS10aWxlIj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJzY29yZS1sYWJlbCI+U2Nod2llcmlna2VpdDwvc3Bhbj4KICAgICAgICAgIDxzdHJvbmcgaWQ9ImRpZmZpY3VsdHlUZXh0Ij5TdHVmZSAxPC9zdHJvbmc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2NvcmUtdGlsZSB3aWRlIj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJzY29yZS1sYWJlbCI+Rm9ydHNjaHJpdHQ8L3NwYW4+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9ncmVzcy1zaGVsbCIgYXJpYS1oaWRkZW49InRydWUiPjxzcGFuIGlkPSJwcm9ncmVzc0JhciI+PC9zcGFuPjwvZGl2PgogICAgICAgICAgPHNwYW4gaWQ9InByb2dyZXNzVGV4dCI+RnJlaWVzIEVya3VuZGVuPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICA8L3NlY3Rpb24+CgogICAgICA8c2VjdGlvbiBjbGFzcz0iY29udGVudC1ncmlkIj4KICAgICAgICA8c2VjdGlvbiBjbGFzcz0idmlzdWFsLWNhcmQgcGFuZWwtY2FyZCIgYXJpYS1sYWJlbGxlZGJ5PSJ2aXN1YWxUaXRsZSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC1oZWFkaW5nIj4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8cCBjbGFzcz0iZXllYnJvdyI+SW50ZXJha3RpdmUgRGFyc3RlbGx1bmc8L3A+CiAgICAgICAgICAgICAgPGgzIGlkPSJ2aXN1YWxUaXRsZSI+Rm9ybSB2ZXLDpG5kZXJuPC9oMz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxzcGFuIGlkPSJzaGFwZUtpbmQiIGNsYXNzPSJwaWxsIj5GbMOkY2hlPC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8Y2FudmFzIGlkPSJzaGFwZUNhbnZhcyIgd2lkdGg9IjkyMCIgaGVpZ2h0PSI1NjAiIGFyaWEtbGFiZWw9IkludGVyYWt0aXZlIFplaWNobnVuZyBkZXIgZ2V3w6RobHRlbiBnZW9tZXRyaXNjaGVuIEZvcm0iPkludGVyYWt0aXZlIEdlb21ldHJpZS1aZWljaG51bmc8L2NhbnZhcz4KICAgICAgICAgIDxwIGlkPSJjYW52YXNEZXNjcmlwdGlvbiIgY2xhc3M9ImNhbnZhcy1kZXNjcmlwdGlvbiI+RGllIFplaWNobnVuZyB3aXJkIGR1cmNoIFRleHQsIEZvcm1lbCB1bmQgUmVnbGVyIGVya2zDpHJ0LjwvcD4KICAgICAgICAgIDxkaXYgaWQ9ImRpbWVuc2lvbkNvbnRyb2xzIiBjbGFzcz0iZGltZW5zaW9uLWNvbnRyb2xzIiBhcmlhLWxhYmVsPSJNYcOfZSB2ZXLDpG5kZXJuIj48L2Rpdj4KICAgICAgICA8L3NlY3Rpb24+CgogICAgICAgIDxhc2lkZSBjbGFzcz0iZm9ybXVsYS1jYXJkIHBhbmVsLWNhcmQiIGFyaWEtbGFiZWxsZWRieT0iZm9ybXVsYVRpdGxlIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsLWhlYWRpbmciPgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgIDxwIGNsYXNzPSJleWVicm93Ij5Gb3JtZWwtV2Vya3N0YXR0PC9wPgogICAgICAgICAgICAgIDxoMyBpZD0iZm9ybXVsYVRpdGxlIj5XZXJ0ZSBpbiBkZXIgRm9ybWVsPC9oMz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgaWQ9InNoYXBlUGlja2VyIiBjbGFzcz0ic2hhcGUtcGlja2VyIiBhcmlhLWxhYmVsPSJGb3JtIGF1c3fDpGhsZW4iPjwvZGl2PgogICAgICAgICAgPGRpdiBpZD0iZm9ybXVsYUNvbnRlbnQiIGNsYXNzPSJmb3JtdWxhLWNvbnRlbnQiPjwvZGl2PgogICAgICAgIDwvYXNpZGU+CgogICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0YXNrLWNhcmQgcGFuZWwtY2FyZCIgYXJpYS1sYWJlbGxlZGJ5PSJ0YXNrVGl0bGUiPgogICAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwtaGVhZGluZyI+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgPHAgaWQ9InRhc2tTa2lsbCIgY2xhc3M9ImV5ZWJyb3ciPkF1ZmdhYmU8L3A+CiAgICAgICAgICAgICAgPGgzIGlkPSJ0YXNrVGl0bGUiPkxlcm5hdWZ0cmFnPC9oMz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxzcGFuIGlkPSJ0YXNrUmV3YXJkIiBjbGFzcz0icGlsbCI+KzAgUHVua3RlPC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8cCBpZD0idGFza1Byb21wdCIgY2xhc3M9InRhc2stcHJvbXB0Ij5Xw6RobGUgZWluZW4gTGVybndlZy48L3A+CiAgICAgICAgICA8ZGl2IGlkPSJhbnN3ZXJBcmVhIiBjbGFzcz0iYW5zd2VyLWFyZWEiIGFyaWEtbGFiZWw9IkFudHdvcnRiZXJlaWNoIj48L2Rpdj4KICAgICAgICAgIDxkaXYgaWQ9ImZlZWRiYWNrQm94IiBjbGFzcz0iZmVlZGJhY2stYm94IiByb2xlPSJzdGF0dXMiIGFyaWEtbGl2ZT0icG9saXRlIj48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRhc2stYWN0aW9ucyI+CiAgICAgICAgICAgIDxidXR0b24gaWQ9ImhpbnRCdXR0b24iIGNsYXNzPSJ0b29sLWJ1dHRvbiBzZWNvbmRhcnkiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Rpb249InNob3ctaGludCI+VGlwcDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIGlkPSJuZXh0QnV0dG9uIiBjbGFzcz0idG9vbC1idXR0b24iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Rpb249Im5leHQtdGFzayI+TsOkY2hzdGUgQXVmZ2FiZTwvYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9zZWN0aW9uPgoKICAgICAgICA8YXNpZGUgY2xhc3M9InNjb3JlLWNhcmQgcGFuZWwtY2FyZCIgYXJpYS1sYWJlbGxlZGJ5PSJzY29yZVRpdGxlIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsLWhlYWRpbmciPgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgIDxwIGNsYXNzPSJleWVicm93Ij5NZWluZSBMZXJuYmVyZWljaGU8L3A+CiAgICAgICAgICAgICAgPGgzIGlkPSJzY29yZVRpdGxlIj5HZW8tUHJvZmlsIGRlciBTaXR6dW5nPC9oMz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgaWQ9InNraWxsU2NvcmVzIiBjbGFzcz0ic2tpbGwtc2NvcmVzIj48L2Rpdj4KICAgICAgICAgIDxkaXYgaWQ9ImxlYXJuaW5nVGlwIiBjbGFzcz0ibGVhcm5pbmctdGlwIj48L2Rpdj4KICAgICAgICA8L2FzaWRlPgogICAgICA8L3NlY3Rpb24+CiAgICA8L21haW4+CgogICAgPHNlY3Rpb24gaWQ9ImVuZFNjcmVlbiIgY2xhc3M9InNjcmVlbiBlbmQtc2NyZWVuIiBoaWRkZW4gYXJpYS1sYWJlbGxlZGJ5PSJlbmRUaXRsZSI+CiAgICAgIDxkaXYgY2xhc3M9ImVuZC1wYW5lbCI+CiAgICAgICAgPHAgY2xhc3M9ImV5ZWJyb3ciPkF1c3dlcnR1bmc8L3A+CiAgICAgICAgPGgyIGlkPSJlbmRUaXRsZSI+R2VvLU1pc3Npb24gYWJnZXNjaGxvc3NlbjwvaDI+CiAgICAgICAgPHAgaWQ9ImVuZFN1bW1hcnkiIGNsYXNzPSJlbmQtc3VtbWFyeSI+RHUgaGFzdCBlaW5lIFJ1bmRlIGJlZW5kZXQuPC9wPgogICAgICAgIDxkaXYgaWQ9ImVuZFNjb3JlcyIgY2xhc3M9ImVuZC1zY29yZXMiPjwvZGl2PgogICAgICAgIDxkaXYgaWQ9ImVuZEFkdmljZSIgY2xhc3M9ImVuZC1hZHZpY2UiPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImVuZC1hY3Rpb25zIj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9InRvb2wtYnV0dG9uIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0aW9uPSJzd2l0Y2gtbW9kZSIgZGF0YS1tb2RlPSJleGFtIj5OZXVlIE1laXN0ZXJwcsO8ZnVuZzwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idG9vbC1idXR0b24gc2Vjb25kYXJ5IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0aW9uPSJzd2l0Y2gtbW9kZSIgZGF0YS1tb2RlPSJsYWIiPlp1csO8Y2sgaW5zIExhYm9yPC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0b29sLWJ1dHRvbiBzZWNvbmRhcnkiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Rpb249InNob3ctbWVudSI+U3RhcnRzZWl0ZTwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvc2VjdGlvbj4KCiAgICA8ZGl2IGlkPSJ0b2FzdCIgY2xhc3M9InRvYXN0IiByb2xlPSJzdGF0dXMiIGFyaWEtbGl2ZT0icG9saXRlIj48L2Rpdj4KICA8L2Rpdj4KICAKPHNjcmlwdD4KKGZ1bmN0aW9uICgpIHsKICAidXNlIHN0cmljdCI7CgogIHZhciBQSSA9IDMuMTQ7CiAgdmFyIGNhdGVnb3JpZXMgPSBbIlVtZmFuZyIsICJGbMOkY2hlIiwgIlZvbHVtZW4iLCAiRm9ybWVsbiIsICJFaW5oZWl0ZW4iLCAiU3RyYXRlZ2llIiwgIktub2JlbGF1ZmdhYmVuIl07CiAgdmFyIG1vZGVTZXR0aW5ncyA9IHsKICAgIGV4cGxvcmU6IHsKICAgICAgbGFiZWw6ICJFbnRkZWNrZW4iLAogICAgICB0aXRsZTogIkZvcm1lbiBlbnRkZWNrZW4iLAogICAgICBnb2FsOiAwLAogICAgICBmaWx0ZXJzOiBbXSwKICAgICAgcHJlZmVycmVkU2hhcGVzOiBbInNxdWFyZSIsICJyZWN0YW5nbGUiLCAidHJpYW5nbGUiLCAicmlnaHRUcmlhbmdsZSIsICJwYXJhbGxlbG9ncmFtIiwgInJob21idXMiLCAidHJhcGV6b2lkIiwgImNvbXBvc2l0ZSIsICJjdWJlIiwgImN1Ym9pZCIsICJwcmlzbSJdLAogICAgICB0aXA6ICJFbnRkZWNrZW4gaGVpw590OiBNYcOfZSB2ZXLDpG5kZXJuLCBaZWljaG51bmcgYmVvYmFjaHRlbiB1bmQgaW4gZWlnZW5lbiBXb3J0ZW4gYmVzY2hyZWliZW4sIHdhcyBnbGVpY2ggYmxlaWJ0IHVuZCB3YXMgc2ljaCDDpG5kZXJ0LiIKICAgIH0sCiAgICBsYWI6IHsKICAgICAgbGFiZWw6ICJGb3JtZWwtTGFib3IiLAogICAgICB0aXRsZTogIkZvcm1lbC1MYWJvciIsCiAgICAgIGdvYWw6IDAsCiAgICAgIGZpbHRlcnM6IFsiRm9ybWVsbiIsICJFaW5oZWl0ZW4iLCAiU3RyYXRlZ2llIl0sCiAgICAgIHByZWZlcnJlZFNoYXBlczogW10sCiAgICAgIHRpcDogIkltIExhYm9yIHNpZWhzdCBkdSBkaWUgYWxsZ2VtZWluZSBGb3JtZWwsIGRhbm4gZGllIGVpbmdlc2V0enRlbiBXZXJ0ZSB1bmQgYW0gRW5kZSBkaWUgcGFzc2VuZGUgRWluaGVpdC4iCiAgICB9LAogICAgcGVyaW1ldGVyOiB7CiAgICAgIGxhYmVsOiAiVHJhaW5pbmciLAogICAgICB0aXRsZTogIlVtZmFuZyB0cmFpbmllcmVuIiwKICAgICAgZ29hbDogMTAsCiAgICAgIGZpbHRlcnM6IFsiVW1mYW5nIiwgIkVpbmhlaXRlbiIsICJGb3JtZWxuIiwgIlN0cmF0ZWdpZSJdLAogICAgICBwcmVmZXJyZWRTaGFwZXM6IFsic3F1YXJlIiwgInJlY3RhbmdsZSIsICJ0cmlhbmdsZSIsICJyaWdodFRyaWFuZ2xlIiwgImNvbXBvc2l0ZSIsICJjaXJjbGUiXSwKICAgICAgdGlwOiAiQmVpbSBVbWZhbmcgZ2Voc3QgZHUgZGVuIFJhbmQgZW50bGFuZy4gRHUgYWRkaWVyc3QgTMOkbmdlbiB1bmQgc2NocmVpYnN0IGNtIG9kZXIgbSwgbmljaHQgY23Csi4iCiAgICB9LAogICAgYXJlYTogewogICAgICBsYWJlbDogIlRyYWluaW5nIiwKICAgICAgdGl0bGU6ICJGbMOkY2hlbiB0cmFpbmllcmVuIiwKICAgICAgZ29hbDogMTIsCiAgICAgIGZpbHRlcnM6IFsiRmzDpGNoZSIsICJFaW5oZWl0ZW4iLCAiRm9ybWVsbiIsICJTdHJhdGVnaWUiLCAiS25vYmVsYXVmZ2FiZW4iXSwKICAgICAgcHJlZmVycmVkU2hhcGVzOiBbInNxdWFyZSIsICJyZWN0YW5nbGUiLCAidHJpYW5nbGUiLCAicmlnaHRUcmlhbmdsZSIsICJwYXJhbGxlbG9ncmFtIiwgInJob21idXMiLCAidHJhcGV6b2lkIiwgImNvbXBvc2l0ZSIsICJjaXJjbGUiXSwKICAgICAgdGlwOiAiRmzDpGNoZW4gbGFzc2VuIHNpY2ggb2Z0IGluIFJlY2h0ZWNrZSBvZGVyIERyZWllY2tlIHplcmxlZ2VuLiBEaWUgRWluaGVpdCBpc3QgaW1tZXIgcXVhZHJhdGlzY2gsIHp1bSBCZWlzcGllbCBjbcKyLiIKICAgIH0sCiAgICB2b2x1bWU6IHsKICAgICAgbGFiZWw6ICJUcmFpbmluZyIsCiAgICAgIHRpdGxlOiAiVm9sdW1lbiB0cmFpbmllcmVuIiwKICAgICAgZ29hbDogMTAsCiAgICAgIGZpbHRlcnM6IFsiVm9sdW1lbiIsICJFaW5oZWl0ZW4iLCAiRm9ybWVsbiIsICJTdHJhdGVnaWUiLCAiS25vYmVsYXVmZ2FiZW4iXSwKICAgICAgcHJlZmVycmVkU2hhcGVzOiBbImN1YmUiLCAiY3Vib2lkIiwgInByaXNtIiwgImN5bGluZGVyIiwgInB5cmFtaWQiLCAiY29uZSIsICJzcGhlcmUiXSwKICAgICAgdGlwOiAiVm9sdW1lbiBiZXNjaHJlaWJ0IFJhdW1mw7xsbHVuZy4gRXJzdCB3aXJkIGVpbmUgR3J1bmRmbMOkY2hlIGdlYmlsZGV0LCBkYW5uIHdpcmQgc2llIGluIGRpZSBIw7ZoZSBvZGVyIFRpZWZlIGdlc3RhcGVsdC4iCiAgICB9LAogICAgZXhhbTogewogICAgICBsYWJlbDogIkNoYWxsZW5nZSIsCiAgICAgIHRpdGxlOiAiR2VvLU1laXN0ZXJwcsO8ZnVuZyIsCiAgICAgIGdvYWw6IDE0LAogICAgICBmaWx0ZXJzOiBbIlVtZmFuZyIsICJGbMOkY2hlIiwgIlZvbHVtZW4iLCAiRm9ybWVsbiIsICJFaW5oZWl0ZW4iLCAiU3RyYXRlZ2llIiwgIktub2JlbGF1ZmdhYmVuIl0sCiAgICAgIHByZWZlcnJlZFNoYXBlczogW10sCiAgICAgIHRpcDogIkluIGRlciBNZWlzdGVycHLDvGZ1bmcgZW50c2NoZWlkZXQgenVlcnN0IGRpZSBGcmFnZTogUmFuZCwgRmzDpGNoZSBvZGVyIFJhdW0/IERhbmFjaCB3w6RobHN0IGR1IEZvcm1lbCB1bmQgRWluaGVpdC4iCiAgICB9LAogICAgc2NvcmU6IHsKICAgICAgbGFiZWw6ICJQcm9maWwiLAogICAgICB0aXRsZTogIk1laW5lIExlcm5iZXJlaWNoZSIsCiAgICAgIGdvYWw6IDAsCiAgICAgIGZpbHRlcnM6IFtdLAogICAgICBwcmVmZXJyZWRTaGFwZXM6IFtdLAogICAgICB0aXA6ICJEaWUgUHVua3RlIGdlbHRlbiBudXIgaW4gZGllc2VyIFNpdHp1bmcuIFNpZSB6ZWlnZW4sIHdlbGNoZSBMZXJuYmVyZWljaGUgZHUgZ2VyYWRlIHNpY2hlcmVyIGJlaGVycnNjaHN0LiIKICAgIH0KICB9OwoKICB2YXIgc2hhcGVzID0gWwogICAgewogICAgICBpZDogInNxdWFyZSIsCiAgICAgIG5hbWU6ICJRdWFkcmF0IiwKICAgICAgdHlwZTogIkZsw6RjaGUiLAogICAgICBjbGFzc0xldmVsOiAiS2VybiBLbGFzc2UgNS82IiwKICAgICAgcGFyYW1ldGVyczogWwogICAgICAgIHsga2V5OiAiYSIsIGxhYmVsOiAiU2VpdGVubMOkbmdlIGEiLCBtaW46IDEsIG1heDogMTgsIHN0ZXA6IDEsIHZhbHVlOiA2LCB1bml0OiAiY20iIH0KICAgICAgXSwKICAgICAgZm9ybXVsYUxhYmVsczogWyJVID0gNCDCtyBhIiwgIkEgPSBhIMK3IGEiXSwKICAgICAgY2FsY3VsYXRpb25GdW5jdGlvbjogY2FsY1NxdWFyZSwKICAgICAgcmVuZGVyRnVuY3Rpb246IGRyYXdTcXVhcmUsCiAgICAgIHRhc2tHZW5lcmF0b3JzOiBbIlVtZmFuZyIsICJGbMOkY2hlIiwgIkZvcm1lbG4iLCAiRWluaGVpdGVuIl0sCiAgICAgIGV4cGxhbmF0aW9uOiAiQmVpbSBRdWFkcmF0IHNpbmQgYWxsZSB2aWVyIFNlaXRlbiBnbGVpY2ggbGFuZy4gRsO8ciBkaWUgRmzDpGNoZSB6w6RobHN0IGR1IEvDpHN0Y2hlbiBpbiBSZWloZW4gdW5kIFNwYWx0ZW4uIgogICAgfSwKICAgIHsKICAgICAgaWQ6ICJyZWN0YW5nbGUiLAogICAgICBuYW1lOiAiUmVjaHRlY2siLAogICAgICB0eXBlOiAiRmzDpGNoZSIsCiAgICAgIGNsYXNzTGV2ZWw6ICJLZXJuIEtsYXNzZSA1LzYiLAogICAgICBwYXJhbWV0ZXJzOiBbCiAgICAgICAgeyBrZXk6ICJhIiwgbGFiZWw6ICJMw6RuZ2UgYSIsIG1pbjogMiwgbWF4OiAyNCwgc3RlcDogMSwgdmFsdWU6IDksIHVuaXQ6ICJjbSIgfSwKICAgICAgICB7IGtleTogImIiLCBsYWJlbDogIkJyZWl0ZSBiIiwgbWluOiAyLCBtYXg6IDE4LCBzdGVwOiAxLCB2YWx1ZTogNSwgdW5pdDogImNtIiB9CiAgICAgIF0sCiAgICAgIGZvcm11bGFMYWJlbHM6IFsiVSA9IDIgwrcgYSArIDIgwrcgYiIsICJBID0gYSDCtyBiIl0sCiAgICAgIGNhbGN1bGF0aW9uRnVuY3Rpb246IGNhbGNSZWN0YW5nbGUsCiAgICAgIHJlbmRlckZ1bmN0aW9uOiBkcmF3UmVjdGFuZ2xlLAogICAgICB0YXNrR2VuZXJhdG9yczogWyJVbWZhbmciLCAiRmzDpGNoZSIsICJGb3JtZWxuIiwgIkVpbmhlaXRlbiIsICJTdHJhdGVnaWUiXSwKICAgICAgZXhwbGFuYXRpb246ICJFaW4gUmVjaHRlY2sgaGF0IHp3ZWkgZ2xlaWNoZSBMw6RuZ2VuIHVuZCB6d2VpIGdsZWljaGUgQnJlaXRlbi4gRGllIEZsw6RjaGUgZW50c3RlaHQgYXVzIFJlaWhlbiBtYWwgU3BhbHRlbi4iCiAgICB9LAogICAgewogICAgICBpZDogInRyaWFuZ2xlIiwKICAgICAgbmFtZTogIkRyZWllY2siLAogICAgICB0eXBlOiAiRmzDpGNoZSIsCiAgICAgIGNsYXNzTGV2ZWw6ICJLZXJuIEtsYXNzZSA1LzYiLAogICAgICBwYXJhbWV0ZXJzOiBbCiAgICAgICAgeyBrZXk6ICJnIiwgbGFiZWw6ICJHcnVuZHNlaXRlIGciLCBtaW46IDMsIG1heDogMjIsIHN0ZXA6IDEsIHZhbHVlOiAxMCwgdW5pdDogImNtIiB9LAogICAgICAgIHsga2V5OiAiaCIsIGxhYmVsOiAiSMO2aGUgaCIsIG1pbjogMiwgbWF4OiAxNiwgc3RlcDogMSwgdmFsdWU6IDcsIHVuaXQ6ICJjbSIgfSwKICAgICAgICB7IGtleTogInMiLCBsYWJlbDogIlNjaHLDpGdzZWl0ZSBzIiwgbWluOiAzLCBtYXg6IDIwLCBzdGVwOiAxLCB2YWx1ZTogOSwgdW5pdDogImNtIiB9CiAgICAgIF0sCiAgICAgIGZvcm11bGFMYWJlbHM6IFsiQSA9IGcgwrcgaCA6IDIiLCAiVSA9IGEgKyBiICsgYyJdLAogICAgICBjYWxjdWxhdGlvbkZ1bmN0aW9uOiBjYWxjVHJpYW5nbGUsCiAgICAgIHJlbmRlckZ1bmN0aW9uOiBkcmF3VHJpYW5nbGUsCiAgICAgIHRhc2tHZW5lcmF0b3JzOiBbIlVtZmFuZyIsICJGbMOkY2hlIiwgIkZvcm1lbG4iLCAiU3RyYXRlZ2llIl0sCiAgICAgIGV4cGxhbmF0aW9uOiAiRWluIERyZWllY2sgbWl0IEdydW5kc2VpdGUgdW5kIEjDtmhlIGlzdCBoYWxiIHNvIGdyb8OfIHdpZSBlaW4gcGFzc2VuZGVzIFJlY2h0ZWNrLiIKICAgIH0sCiAgICB7CiAgICAgIGlkOiAicmlnaHRUcmlhbmdsZSIsCiAgICAgIG5hbWU6ICJSZWNodHdpbmtsaWdlcyBEcmVpZWNrIiwKICAgICAgdHlwZTogIkZsw6RjaGUiLAogICAgICBjbGFzc0xldmVsOiAiS2VybiBLbGFzc2UgNS82IiwKICAgICAgcGFyYW1ldGVyczogWwogICAgICAgIHsga2V5OiAiYSIsIGxhYmVsOiAiS2F0aGV0ZSBhIiwgbWluOiAzLCBtYXg6IDIwLCBzdGVwOiAxLCB2YWx1ZTogOCwgdW5pdDogImNtIiB9LAogICAgICAgIHsga2V5OiAiYiIsIGxhYmVsOiAiS2F0aGV0ZSBiIiwgbWluOiAzLCBtYXg6IDE4LCBzdGVwOiAxLCB2YWx1ZTogNiwgdW5pdDogImNtIiB9LAogICAgICAgIHsga2V5OiAiYyIsIGxhYmVsOiAiU2VpdGUgYyIsIG1pbjogNCwgbWF4OiAyNCwgc3RlcDogMSwgdmFsdWU6IDEwLCB1bml0OiAiY20iIH0KICAgICAgXSwKICAgICAgZm9ybXVsYUxhYmVsczogWyJBID0gYSDCtyBiIDogMiIsICJVID0gYSArIGIgKyBjIl0sCiAgICAgIGNhbGN1bGF0aW9uRnVuY3Rpb246IGNhbGNSaWdodFRyaWFuZ2xlLAogICAgICByZW5kZXJGdW5jdGlvbjogZHJhd1JpZ2h0VHJpYW5nbGUsCiAgICAgIHRhc2tHZW5lcmF0b3JzOiBbIlVtZmFuZyIsICJGbMOkY2hlIiwgIkZvcm1lbG4iLCAiU3RyYXRlZ2llIl0sCiAgICAgIGV4cGxhbmF0aW9uOiAiRGllIGJlaWRlbiBLYXRoZXRlbiBzdGVoZW4gc2Vua3JlY2h0IGF1ZmVpbmFuZGVyLiBEYWR1cmNoIHNpZWh0IG1hbiBkYXMgaGFsYmUgUmVjaHRlY2sgYmVzb25kZXJzIGd1dC4iCiAgICB9LAogICAgewogICAgICBpZDogInBhcmFsbGVsb2dyYW0iLAogICAgICBuYW1lOiAiUGFyYWxsZWxvZ3JhbW0iLAogICAgICB0eXBlOiAiRmzDpGNoZSIsCiAgICAgIGNsYXNzTGV2ZWw6ICJLZXJuIEtsYXNzZSA1LzYiLAogICAgICBwYXJhbWV0ZXJzOiBbCiAgICAgICAgeyBrZXk6ICJnIiwgbGFiZWw6ICJHcnVuZHNlaXRlIGciLCBtaW46IDMsIG1heDogMjIsIHN0ZXA6IDEsIHZhbHVlOiAxMCwgdW5pdDogImNtIiB9LAogICAgICAgIHsga2V5OiAiaCIsIGxhYmVsOiAiSMO2aGUgaCIsIG1pbjogMiwgbWF4OiAxNiwgc3RlcDogMSwgdmFsdWU6IDYsIHVuaXQ6ICJjbSIgfSwKICAgICAgICB7IGtleTogInMiLCBsYWJlbDogIlNlaXRlIHMiLCBtaW46IDMsIG1heDogMTgsIHN0ZXA6IDEsIHZhbHVlOiA3LCB1bml0OiAiY20iIH0KICAgICAgXSwKICAgICAgZm9ybXVsYUxhYmVsczogWyJBID0gZyDCtyBoIiwgIlUgPSAyIMK3IGcgKyAyIMK3IHMiXSwKICAgICAgY2FsY3VsYXRpb25GdW5jdGlvbjogY2FsY1BhcmFsbGVsb2dyYW0sCiAgICAgIHJlbmRlckZ1bmN0aW9uOiBkcmF3UGFyYWxsZWxvZ3JhbSwKICAgICAgdGFza0dlbmVyYXRvcnM6IFsiVW1mYW5nIiwgIkZsw6RjaGUiLCAiRm9ybWVsbiIsICJTdHJhdGVnaWUiXSwKICAgICAgZXhwbGFuYXRpb246ICJFaW4gUGFyYWxsZWxvZ3JhbW0ga2FubiBtYW4gZ2VkYW5rbGljaCB6dSBlaW5lbSBSZWNodGVjayB1bWxlZ2VuLiBFbnRzY2hlaWRlbmQgZsO8ciBkaWUgRmzDpGNoZSBzaW5kIEdydW5kc2VpdGUgdW5kIHNlbmtyZWNodGUgSMO2aGUuIgogICAgfSwKICAgIHsKICAgICAgaWQ6ICJyaG9tYnVzIiwKICAgICAgbmFtZTogIlJhdXRlIiwKICAgICAgdHlwZTogIkZsw6RjaGUiLAogICAgICBjbGFzc0xldmVsOiAiS2VybiBLbGFzc2UgNS82IiwKICAgICAgcGFyYW1ldGVyczogWwogICAgICAgIHsga2V5OiAiYSIsIGxhYmVsOiAiU2VpdGVubMOkbmdlIGEiLCBtaW46IDMsIG1heDogMTgsIHN0ZXA6IDEsIHZhbHVlOiA3LCB1bml0OiAiY20iIH0sCiAgICAgICAgeyBrZXk6ICJlIiwgbGFiZWw6ICJEaWFnb25hbGUgZSIsIG1pbjogNCwgbWF4OiAyMiwgc3RlcDogMSwgdmFsdWU6IDEyLCB1bml0OiAiY20iIH0sCiAgICAgICAgeyBrZXk6ICJmIiwgbGFiZWw6ICJEaWFnb25hbGUgZiIsIG1pbjogNCwgbWF4OiAxOCwgc3RlcDogMSwgdmFsdWU6IDgsIHVuaXQ6ICJjbSIgfQogICAgICBdLAogICAgICBmb3JtdWxhTGFiZWxzOiBbIlUgPSA0IMK3IGEiLCAiQSA9IGUgwrcgZiA6IDIiXSwKICAgICAgY2FsY3VsYXRpb25GdW5jdGlvbjogY2FsY1Job21idXMsCiAgICAgIHJlbmRlckZ1bmN0aW9uOiBkcmF3UmhvbWJ1cywKICAgICAgdGFza0dlbmVyYXRvcnM6IFsiVW1mYW5nIiwgIkZsw6RjaGUiLCAiRm9ybWVsbiJdLAogICAgICBleHBsYW5hdGlvbjogIkJlaSBkZXIgUmF1dGUgc2luZCBhbGxlIFNlaXRlbiBnbGVpY2ggbGFuZy4gRGllIERpYWdvbmFsZW4gemVybGVnZW4gZGllIFJhdXRlIGluIHZpZXIgcmVjaHR3aW5rbGlnZSBEcmVpZWNrZS4iCiAgICB9LAogICAgewogICAgICBpZDogInRyYXBlem9pZCIsCiAgICAgIG5hbWU6ICJUcmFwZXoiLAogICAgICB0eXBlOiAiRmzDpGNoZSIsCiAgICAgIGNsYXNzTGV2ZWw6ICJLZXJuIEtsYXNzZSA1LzYiLAogICAgICBwYXJhbWV0ZXJzOiBbCiAgICAgICAgeyBrZXk6ICJhIiwgbGFiZWw6ICJwYXJhbGxlbGUgU2VpdGUgYSIsIG1pbjogNSwgbWF4OiAyNCwgc3RlcDogMSwgdmFsdWU6IDE0LCB1bml0OiAiY20iIH0sCiAgICAgICAgeyBrZXk6ICJjIiwgbGFiZWw6ICJwYXJhbGxlbGUgU2VpdGUgYyIsIG1pbjogMywgbWF4OiAyMCwgc3RlcDogMSwgdmFsdWU6IDgsIHVuaXQ6ICJjbSIgfSwKICAgICAgICB7IGtleTogImgiLCBsYWJlbDogIkjDtmhlIGgiLCBtaW46IDIsIG1heDogMTYsIHN0ZXA6IDEsIHZhbHVlOiA2LCB1bml0OiAiY20iIH0sCiAgICAgICAgeyBrZXk6ICJzIiwgbGFiZWw6ICJTY2hlbmtlbCBzIiwgbWluOiAzLCBtYXg6IDE4LCBzdGVwOiAxLCB2YWx1ZTogNywgdW5pdDogImNtIiB9CiAgICAgIF0sCiAgICAgIGZvcm11bGFMYWJlbHM6IFsiQSA9IChhICsgYykgwrcgaCA6IDIiLCAiVSA9IGEgKyBiICsgYyArIGQiXSwKICAgICAgY2FsY3VsYXRpb25GdW5jdGlvbjogY2FsY1RyYXBlem9pZCwKICAgICAgcmVuZGVyRnVuY3Rpb246IGRyYXdUcmFwZXpvaWQsCiAgICAgIHRhc2tHZW5lcmF0b3JzOiBbIlVtZmFuZyIsICJGbMOkY2hlIiwgIkZvcm1lbG4iLCAiU3RyYXRlZ2llIl0sCiAgICAgIGV4cGxhbmF0aW9uOiAiQmVpbSBUcmFwZXogd2VyZGVuIGRpZSBiZWlkZW4gcGFyYWxsZWxlbiBTZWl0ZW4gZ2VtaXR0ZWx0IHVuZCBtaXQgZGVyIEjDtmhlIG11bHRpcGxpemllcnQuIgogICAgfSwKICAgIHsKICAgICAgaWQ6ICJjb21wb3NpdGUiLAogICAgICBuYW1lOiAiWnVzYW1tZW5nZXNldHp0ZSBGbMOkY2hlIiwKICAgICAgdHlwZTogIkZsw6RjaGUiLAogICAgICBjbGFzc0xldmVsOiAiS2VybiBLbGFzc2UgNS82IiwKICAgICAgcGFyYW1ldGVyczogWwogICAgICAgIHsga2V5OiAiYSIsIGxhYmVsOiAiQXXDn2VubMOkbmdlIGEiLCBtaW46IDYsIG1heDogMjQsIHN0ZXA6IDEsIHZhbHVlOiAxNCwgdW5pdDogImNtIiB9LAogICAgICAgIHsga2V5OiAiYiIsIGxhYmVsOiAiQXXDn2VuYnJlaXRlIGIiLCBtaW46IDYsIG1heDogMTgsIHN0ZXA6IDEsIHZhbHVlOiAxMCwgdW5pdDogImNtIiB9LAogICAgICAgIHsga2V5OiAiYyIsIGxhYmVsOiAiQXVzc2Nobml0dCBjIiwgbWluOiAyLCBtYXg6IDEwLCBzdGVwOiAxLCB2YWx1ZTogNSwgdW5pdDogImNtIiB9LAogICAgICAgIHsga2V5OiAiZCIsIGxhYmVsOiAiQXVzc2Nobml0dCBkIiwgbWluOiAyLCBtYXg6IDksIHN0ZXA6IDEsIHZhbHVlOiA0LCB1bml0OiAiY20iIH0KICAgICAgXSwKICAgICAgZm9ybXVsYUxhYmVsczogWyJBID0gYSDCtyBiIC0gYyDCtyBkIiwgIlplcmxlZ2VuIG9kZXIgZXJnw6RuemVuIl0sCiAgICAgIGNhbGN1bGF0aW9uRnVuY3Rpb246IGNhbGNDb21wb3NpdGUsCiAgICAgIHJlbmRlckZ1bmN0aW9uOiBkcmF3Q29tcG9zaXRlLAogICAgICB0YXNrR2VuZXJhdG9yczogWyJGbMOkY2hlIiwgIlN0cmF0ZWdpZSIsICJLbm9iZWxhdWZnYWJlbiJdLAogICAgICBleHBsYW5hdGlvbjogIlp1c2FtbWVuZ2VzZXR6dGUgRmzDpGNoZW4gYmVyZWNobmVzdCBkdSBzaWNoZXIsIHdlbm4gZHUgc2llIGluIGVpbmZhY2hlIFJlY2h0ZWNrZSB6ZXJsZWdzdCBvZGVyIGVpbmVuIEF1c3NjaG5pdHQgYWJ6aWVoc3QuIgogICAgfSwKICAgIHsKICAgICAgaWQ6ICJjaXJjbGUiLAogICAgICBuYW1lOiAiS3JlaXMiLAogICAgICB0eXBlOiAiRmzDpGNoZSIsCiAgICAgIGNsYXNzTGV2ZWw6ICJBdXNibGljayIsCiAgICAgIHBhcmFtZXRlcnM6IFsKICAgICAgICB7IGtleTogInIiLCBsYWJlbDogIlJhZGl1cyByIiwgbWluOiAxLCBtYXg6IDEyLCBzdGVwOiAxLCB2YWx1ZTogNSwgdW5pdDogImNtIiB9CiAgICAgIF0sCiAgICAgIGZvcm11bGFMYWJlbHM6IFsiVSA9IDIgwrcgz4AgwrcgciIsICJBID0gz4AgwrcgcsKyIl0sCiAgICAgIGNhbGN1bGF0aW9uRnVuY3Rpb246IGNhbGNDaXJjbGUsCiAgICAgIHJlbmRlckZ1bmN0aW9uOiBkcmF3Q2lyY2xlLAogICAgICB0YXNrR2VuZXJhdG9yczogWyJVbWZhbmciLCAiRmzDpGNoZSIsICJGb3JtZWxuIiwgIkVpbmhlaXRlbiJdLAogICAgICBleHBsYW5hdGlvbjogIkRlciBLcmVpcyBpc3QgZWluIEF1c2JsaWNrLiBXaXIgcmVjaG5lbiBtaXQgz4Ag4omIIDMsMTQgdW5kIHIgYmVkZXV0ZXQgUmFkaXVzIHZvbSBNaXR0ZWxwdW5rdCB6dW0gUmFuZC4iCiAgICB9LAogICAgewogICAgICBpZDogImN1YmUiLAogICAgICBuYW1lOiAiV8O8cmZlbCIsCiAgICAgIHR5cGU6ICJLw7ZycGVyIiwKICAgICAgY2xhc3NMZXZlbDogIktlcm4gS2xhc3NlIDUvNiIsCiAgICAgIHBhcmFtZXRlcnM6IFsKICAgICAgICB7IGtleTogImEiLCBsYWJlbDogIkthbnRlbmzDpG5nZSBhIiwgbWluOiAxLCBtYXg6IDEyLCBzdGVwOiAxLCB2YWx1ZTogNSwgdW5pdDogImNtIiB9CiAgICAgIF0sCiAgICAgIGZvcm11bGFMYWJlbHM6IFsiViA9IGEgwrcgYSDCtyBhIiwgIk8gPSA2IMK3IGEgwrcgYSJdLAogICAgICBjYWxjdWxhdGlvbkZ1bmN0aW9uOiBjYWxjQ3ViZSwKICAgICAgcmVuZGVyRnVuY3Rpb246IGRyYXdDdWJlLAogICAgICB0YXNrR2VuZXJhdG9yczogWyJWb2x1bWVuIiwgIkZsw6RjaGUiLCAiRm9ybWVsbiIsICJFaW5oZWl0ZW4iXSwKICAgICAgZXhwbGFuYXRpb246ICJFaW4gV8O8cmZlbCBiZXN0ZWh0IGF1cyBnbGVpY2ggZ3Jvw59lbiBXw7xyZmVsLVNjaGljaHRlbi4gVm9sdW1lbiB6w6RobHQga2xlaW5lIEVpbmhlaXRzd8O8cmZlbCwgYWxzbyBjbcKzLiIKICAgIH0sCiAgICB7CiAgICAgIGlkOiAiY3Vib2lkIiwKICAgICAgbmFtZTogIlF1YWRlciIsCiAgICAgIHR5cGU6ICJLw7ZycGVyIiwKICAgICAgY2xhc3NMZXZlbDogIktlcm4gS2xhc3NlIDUvNiIsCiAgICAgIHBhcmFtZXRlcnM6IFsKICAgICAgICB7IGtleTogImwiLCBsYWJlbDogIkzDpG5nZSBsIiwgbWluOiAyLCBtYXg6IDE4LCBzdGVwOiAxLCB2YWx1ZTogOSwgdW5pdDogImNtIiB9LAogICAgICAgIHsga2V5OiAiYiIsIGxhYmVsOiAiQnJlaXRlIGIiLCBtaW46IDIsIG1heDogMTQsIHN0ZXA6IDEsIHZhbHVlOiA1LCB1bml0OiAiY20iIH0sCiAgICAgICAgeyBrZXk6ICJoIiwgbGFiZWw6ICJIw7ZoZSBoIiwgbWluOiAyLCBtYXg6IDEyLCBzdGVwOiAxLCB2YWx1ZTogNCwgdW5pdDogImNtIiB9CiAgICAgIF0sCiAgICAgIGZvcm11bGFMYWJlbHM6IFsiViA9IGwgwrcgYiDCtyBoIiwgIk8gPSAyIMK3IChswrdiICsgbMK3aCArIGLCt2gpIl0sCiAgICAgIGNhbGN1bGF0aW9uRnVuY3Rpb246IGNhbGNDdWJvaWQsCiAgICAgIHJlbmRlckZ1bmN0aW9uOiBkcmF3Q3Vib2lkLAogICAgICB0YXNrR2VuZXJhdG9yczogWyJWb2x1bWVuIiwgIkZsw6RjaGUiLCAiRm9ybWVsbiIsICJFaW5oZWl0ZW4iLCAiU3RyYXRlZ2llIl0sCiAgICAgIGV4cGxhbmF0aW9uOiAiQmVpbSBRdWFkZXIgYmVyZWNobmVzdCBkdSBkaWUgR3J1bmRmbMOkY2hlIGwgwrcgYiB1bmQgc3RhcGVsc3Qgc2llIGgtbWFsIGluIGRpZSBIw7ZoZS4iCiAgICB9LAogICAgewogICAgICBpZDogInByaXNtIiwKICAgICAgbmFtZTogIkRyZWllY2tzcHJpc21hIiwKICAgICAgdHlwZTogIkvDtnJwZXIiLAogICAgICBjbGFzc0xldmVsOiAiS2VybiBLbGFzc2UgNS82IiwKICAgICAgcGFyYW1ldGVyczogWwogICAgICAgIHsga2V5OiAiZyIsIGxhYmVsOiAiR3J1bmRzZWl0ZSBnIiwgbWluOiAzLCBtYXg6IDE2LCBzdGVwOiAxLCB2YWx1ZTogOCwgdW5pdDogImNtIiB9LAogICAgICAgIHsga2V5OiAiaCIsIGxhYmVsOiAiRHJlaWVja3Now7ZoZSBoIiwgbWluOiAyLCBtYXg6IDEyLCBzdGVwOiAxLCB2YWx1ZTogNiwgdW5pdDogImNtIiB9LAogICAgICAgIHsga2V5OiAiayIsIGxhYmVsOiAiS8O2cnBlcmjDtmhlIGsiLCBtaW46IDIsIG1heDogMTgsIHN0ZXA6IDEsIHZhbHVlOiA5LCB1bml0OiAiY20iIH0KICAgICAgXSwKICAgICAgZm9ybXVsYUxhYmVsczogWyJHID0gZyDCtyBoIDogMiIsICJWID0gRyDCtyBrIl0sCiAgICAgIGNhbGN1bGF0aW9uRnVuY3Rpb246IGNhbGNQcmlzbSwKICAgICAgcmVuZGVyRnVuY3Rpb246IGRyYXdQcmlzbSwKICAgICAgdGFza0dlbmVyYXRvcnM6IFsiVm9sdW1lbiIsICJGbMOkY2hlIiwgIkZvcm1lbG4iLCAiU3RyYXRlZ2llIiwgIktub2JlbGF1ZmdhYmVuIl0sCiAgICAgIGV4cGxhbmF0aW9uOiAiRWluIFByaXNtYSBoYXQgdm9ybmUgdW5kIGhpbnRlbiBkaWVzZWxiZSBHcnVuZGZsw6RjaGUuIERpZXNlIEdydW5kZmzDpGNoZSB3aXJkIGluIGRpZSBUaWVmZSBnZXN0YXBlbHQuIgogICAgfSwKICAgIHsKICAgICAgaWQ6ICJjeWxpbmRlciIsCiAgICAgIG5hbWU6ICJaeWxpbmRlciIsCiAgICAgIHR5cGU6ICJLw7ZycGVyIiwKICAgICAgY2xhc3NMZXZlbDogIkF1c2JsaWNrIiwKICAgICAgcGFyYW1ldGVyczogWwogICAgICAgIHsga2V5OiAiciIsIGxhYmVsOiAiUmFkaXVzIHIiLCBtaW46IDEsIG1heDogMTAsIHN0ZXA6IDEsIHZhbHVlOiA0LCB1bml0OiAiY20iIH0sCiAgICAgICAgeyBrZXk6ICJoIiwgbGFiZWw6ICJLw7ZycGVyaMO2aGUgaCIsIG1pbjogMiwgbWF4OiAxNiwgc3RlcDogMSwgdmFsdWU6IDgsIHVuaXQ6ICJjbSIgfQogICAgICBdLAogICAgICBmb3JtdWxhTGFiZWxzOiBbIkcgPSDPgCDCtyBywrIiLCAiViA9IM+AIMK3IHLCsiDCtyBoIl0sCiAgICAgIGNhbGN1bGF0aW9uRnVuY3Rpb246IGNhbGNDeWxpbmRlciwKICAgICAgcmVuZGVyRnVuY3Rpb246IGRyYXdDeWxpbmRlciwKICAgICAgdGFza0dlbmVyYXRvcnM6IFsiVm9sdW1lbiIsICJGb3JtZWxuIiwgIkVpbmhlaXRlbiJdLAogICAgICBleHBsYW5hdGlvbjogIkRlciBaeWxpbmRlciBpc3QgZWluIEF1c2JsaWNrLiBEaWUgS3JlaXMtR3J1bmRmbMOkY2hlIHdpcmQgaW4gZGllIEjDtmhlIGdlc3RhcGVsdC4gV2lyIG51dHplbiDPgCDiiYggMywxNC4iCiAgICB9LAogICAgewogICAgICBpZDogInB5cmFtaWQiLAogICAgICBuYW1lOiAiUHlyYW1pZGUiLAogICAgICB0eXBlOiAiS8O2cnBlciIsCiAgICAgIGNsYXNzTGV2ZWw6ICJBdXNibGljayIsCiAgICAgIHBhcmFtZXRlcnM6IFsKICAgICAgICB7IGtleTogImEiLCBsYWJlbDogIkdydW5ka2FudGUgYSIsIG1pbjogMiwgbWF4OiAxMiwgc3RlcDogMSwgdmFsdWU6IDYsIHVuaXQ6ICJjbSIgfSwKICAgICAgICB7IGtleTogImgiLCBsYWJlbDogIkvDtnJwZXJow7ZoZSBoIiwgbWluOiAyLCBtYXg6IDE0LCBzdGVwOiAxLCB2YWx1ZTogOCwgdW5pdDogImNtIiB9CiAgICAgIF0sCiAgICAgIGZvcm11bGFMYWJlbHM6IFsiRyA9IGEgwrcgYSIsICJWID0gRyDCtyBoIDogMyJdLAogICAgICBjYWxjdWxhdGlvbkZ1bmN0aW9uOiBjYWxjUHlyYW1pZCwKICAgICAgcmVuZGVyRnVuY3Rpb246IGRyYXdQeXJhbWlkLAogICAgICB0YXNrR2VuZXJhdG9yczogWyJWb2x1bWVuIiwgIkZvcm1lbG4iLCAiRWluaGVpdGVuIl0sCiAgICAgIGV4cGxhbmF0aW9uOiAiRGllIFB5cmFtaWRlIGlzdCBlaW4gQXVzYmxpY2suIEdlZ2Vuw7xiZXIgZWluZW0gUHJpc21hIG1pdCBnbGVpY2hlciBHcnVuZGZsw6RjaGUgdW5kIEjDtmhlIHdpcmQgZHVyY2ggMyBnZXRlaWx0LiIKICAgIH0sCiAgICB7CiAgICAgIGlkOiAiY29uZSIsCiAgICAgIG5hbWU6ICJLZWdlbCIsCiAgICAgIHR5cGU6ICJLw7ZycGVyIiwKICAgICAgY2xhc3NMZXZlbDogIkF1c2JsaWNrIiwKICAgICAgcGFyYW1ldGVyczogWwogICAgICAgIHsga2V5OiAiciIsIGxhYmVsOiAiUmFkaXVzIHIiLCBtaW46IDEsIG1heDogMTAsIHN0ZXA6IDEsIHZhbHVlOiA0LCB1bml0OiAiY20iIH0sCiAgICAgICAgeyBrZXk6ICJoIiwgbGFiZWw6ICJLw7ZycGVyaMO2aGUgaCIsIG1pbjogMiwgbWF4OiAxNSwgc3RlcDogMSwgdmFsdWU6IDksIHVuaXQ6ICJjbSIgfQogICAgICBdLAogICAgICBmb3JtdWxhTGFiZWxzOiBbIkcgPSDPgCDCtyBywrIiLCAiViA9IM+AIMK3IHLCsiDCtyBoIDogMyJdLAogICAgICBjYWxjdWxhdGlvbkZ1bmN0aW9uOiBjYWxjQ29uZSwKICAgICAgcmVuZGVyRnVuY3Rpb246IGRyYXdDb25lLAogICAgICB0YXNrR2VuZXJhdG9yczogWyJWb2x1bWVuIiwgIkZvcm1lbG4iLCAiRWluaGVpdGVuIl0sCiAgICAgIGV4cGxhbmF0aW9uOiAiRGVyIEtlZ2VsIGlzdCBlaW4gQXVzYmxpY2suIEVyIHBhc3N0IHp1IGVpbmVtIFp5bGluZGVyIG1pdCBnbGVpY2hlciBHcnVuZGZsw6RjaGUgdW5kIEjDtmhlLCBhYmVyIGRhcyBWb2x1bWVuIHdpcmQgZHVyY2ggMyBnZXRlaWx0LiIKICAgIH0sCiAgICB7CiAgICAgIGlkOiAic3BoZXJlIiwKICAgICAgbmFtZTogIkt1Z2VsIiwKICAgICAgdHlwZTogIkvDtnJwZXIiLAogICAgICBjbGFzc0xldmVsOiAiQXVzYmxpY2siLAogICAgICBwYXJhbWV0ZXJzOiBbCiAgICAgICAgeyBrZXk6ICJyIiwgbGFiZWw6ICJSYWRpdXMgciIsIG1pbjogMSwgbWF4OiA5LCBzdGVwOiAxLCB2YWx1ZTogNCwgdW5pdDogImNtIiB9CiAgICAgIF0sCiAgICAgIGZvcm11bGFMYWJlbHM6IFsiViA9IDQgOiAzIMK3IM+AIMK3IHLCsyIsICJPID0gNCDCtyDPgCDCtyBywrIiXSwKICAgICAgY2FsY3VsYXRpb25GdW5jdGlvbjogY2FsY1NwaGVyZSwKICAgICAgcmVuZGVyRnVuY3Rpb246IGRyYXdTcGhlcmUsCiAgICAgIHRhc2tHZW5lcmF0b3JzOiBbIlZvbHVtZW4iLCAiRm9ybWVsbiIsICJFaW5oZWl0ZW4iXSwKICAgICAgZXhwbGFuYXRpb246ICJEaWUgS3VnZWwgaXN0IGVpbiBBdXNibGljay4gV2ljaHRpZyBpc3QgaGllciB2b3IgYWxsZW06IERlciBSYWRpdXMga29tbXQgbWVocmZhY2ggdm9yLCBkZXNoYWxiIHfDpGNoc3QgZGFzIFZvbHVtZW4gc2VociBzdGFyay4iCiAgICB9CiAgXTsKCiAgdmFyIHN0YXRlID0gewogICAgY3VycmVudFNjcmVlbjogIm1lbnUiLAogICAgY3VycmVudE1vZGU6ICJsYWIiLAogICAgc2VsZWN0ZWRTaGFwZTogInJlY3RhbmdsZSIsCiAgICBjdXJyZW50VGFzazogbnVsbCwKICAgIHNjb3JlOiAwLAogICAgY2F0ZWdvcnlTY29yZXM6IHt9LAogICAgc3RyZWFrOiAwLAogICAgYXR0ZW1wdHM6IDAsCiAgICBzaGFwZVBhcmFtZXRlcnM6IHt9LAogICAgZGlmZmljdWx0eTogMSwKICAgIGNvbXBsZXRlZFRhc2tzOiAwLAogICAgbW9kZVRhc2tOdW1iZXI6IDAsCiAgICBjb3JyZWN0SW5Nb2RlOiAwLAogICAgYW5zd2VyTG9ja2VkOiBmYWxzZSwKICAgIGNob3NlbkFuc3dlcjogLTEsCiAgICBkcmFnZ2luZ0NhbnZhczogZmFsc2UKICB9OwoKICB2YXIgZWxlbWVudHMgPSB7fTsKICB2YXIgdGFza0ZhY3RvcmllcyA9IFtdOwoKICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgaW5pdCk7CgogIGZ1bmN0aW9uIGluaXQoKSB7CiAgICBjb2xsZWN0RWxlbWVudHMoKTsKICAgIHByZXBhcmVTdGF0ZSgpOwogICAgcHJlcGFyZVRhc2tzKCk7CiAgICBiaW5kRXZlbnRzKCk7CiAgICByZW5kZXJBcHAoKTsKICB9CgogIGZ1bmN0aW9uIGNvbGxlY3RFbGVtZW50cygpIHsKICAgIGVsZW1lbnRzLnJvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2FtZVJvb3QiKTsKICAgIGVsZW1lbnRzLm1lbnVTY3JlZW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWVudVNjcmVlbiIpOwogICAgZWxlbWVudHMucGxheVNjcmVlbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwbGF5U2NyZWVuIik7CiAgICBlbGVtZW50cy5lbmRTY3JlZW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZW5kU2NyZWVuIik7CiAgICBlbGVtZW50cy5tb2RlTGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW9kZUxhYmVsIik7CiAgICBlbGVtZW50cy5zY3JlZW5UaXRsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzY3JlZW5UaXRsZSIpOwogICAgZWxlbWVudHMudG90YWxTY29yZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0b3RhbFNjb3JlIik7CiAgICBlbGVtZW50cy5zdHJlYWtTY29yZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdHJlYWtTY29yZSIpOwogICAgZWxlbWVudHMuZGlmZmljdWx0eVRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGlmZmljdWx0eVRleHQiKTsKICAgIGVsZW1lbnRzLnByb2dyZXNzQmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByb2dyZXNzQmFyIik7CiAgICBlbGVtZW50cy5wcm9ncmVzc1RleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvZ3Jlc3NUZXh0Iik7CiAgICBlbGVtZW50cy5jYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2hhcGVDYW52YXMiKTsKICAgIGVsZW1lbnRzLmNhbnZhc0Rlc2NyaXB0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhc0Rlc2NyaXB0aW9uIik7CiAgICBlbGVtZW50cy5kaW1lbnNpb25Db250cm9scyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkaW1lbnNpb25Db250cm9scyIpOwogICAgZWxlbWVudHMuc2hhcGVLaW5kID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNoYXBlS2luZCIpOwogICAgZWxlbWVudHMuc2hhcGVQaWNrZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2hhcGVQaWNrZXIiKTsKICAgIGVsZW1lbnRzLmZvcm11bGFDb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZvcm11bGFDb250ZW50Iik7CiAgICBlbGVtZW50cy50YXNrU2tpbGwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGFza1NraWxsIik7CiAgICBlbGVtZW50cy50YXNrVGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGFza1RpdGxlIik7CiAgICBlbGVtZW50cy50YXNrUmV3YXJkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRhc2tSZXdhcmQiKTsKICAgIGVsZW1lbnRzLnRhc2tQcm9tcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGFza1Byb21wdCIpOwogICAgZWxlbWVudHMuYW5zd2VyQXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhbnN3ZXJBcmVhIik7CiAgICBlbGVtZW50cy5mZWVkYmFja0JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmZWVkYmFja0JveCIpOwogICAgZWxlbWVudHMubmV4dEJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuZXh0QnV0dG9uIik7CiAgICBlbGVtZW50cy5oaW50QnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhpbnRCdXR0b24iKTsKICAgIGVsZW1lbnRzLnNraWxsU2NvcmVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNraWxsU2NvcmVzIik7CiAgICBlbGVtZW50cy5sZWFybmluZ1RpcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsZWFybmluZ1RpcCIpOwogICAgZWxlbWVudHMudG9hc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidG9hc3QiKTsKICAgIGVsZW1lbnRzLmVuZFN1bW1hcnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZW5kU3VtbWFyeSIpOwogICAgZWxlbWVudHMuZW5kU2NvcmVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVuZFNjb3JlcyIpOwogICAgZWxlbWVudHMuZW5kQWR2aWNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVuZEFkdmljZSIpOwogIH0KCiAgZnVuY3Rpb24gcHJlcGFyZVN0YXRlKCkgewogICAgY2F0ZWdvcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChjYXRlZ29yeSkgewogICAgICBzdGF0ZS5jYXRlZ29yeVNjb3Jlc1tjYXRlZ29yeV0gPSAwOwogICAgfSk7CiAgICBzaGFwZXMuZm9yRWFjaChmdW5jdGlvbiAoc2hhcGUpIHsKICAgICAgdmFyIHZhbHVlcyA9IHt9OwogICAgICBzaGFwZS5wYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICB2YWx1ZXNbaXRlbS5rZXldID0gaXRlbS52YWx1ZTsKICAgICAgfSk7CiAgICAgIHN0YXRlLnNoYXBlUGFyYW1ldGVyc1tzaGFwZS5pZF0gPSB2YWx1ZXM7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIGJpbmRFdmVudHMoKSB7CiAgICBlbGVtZW50cy5yb290LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgaGFuZGxlQ2xpY2spOwogICAgZWxlbWVudHMucm9vdC5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsIGhhbmRsZUlucHV0KTsKICAgIGVsZW1lbnRzLmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsIGhhbmRsZVBvaW50ZXJEb3duKTsKICAgIGVsZW1lbnRzLmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsIGhhbmRsZVBvaW50ZXJNb3ZlKTsKICAgIGVsZW1lbnRzLmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLCBoYW5kbGVQb2ludGVyVXApOwogICAgZWxlbWVudHMuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLCBoYW5kbGVQb2ludGVyVXApOwogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGhhbmRsZUtleURvd24pOwogIH0KCiAgZnVuY3Rpb24gaGFuZGxlQ2xpY2soZXZlbnQpIHsKICAgIHZhciBidXR0b24gPSBmaW5kQnV0dG9uKGV2ZW50LnRhcmdldCk7CiAgICBpZiAoIWJ1dHRvbikgewogICAgICByZXR1cm47CiAgICB9CiAgICB2YXIgYWN0aW9uID0gYnV0dG9uLmdldEF0dHJpYnV0ZSgiZGF0YS1hY3Rpb24iKTsKICAgIGlmICghYWN0aW9uKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChhY3Rpb24gPT09ICJzdGFydC1tb2RlIikgewogICAgICBzdGFydE1vZGUoYnV0dG9uLmdldEF0dHJpYnV0ZSgiZGF0YS1tb2RlIikgfHwgImxhYiIpOwogICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICJzd2l0Y2gtbW9kZSIpIHsKICAgICAgc3RhcnRNb2RlKGJ1dHRvbi5nZXRBdHRyaWJ1dGUoImRhdGEtbW9kZSIpIHx8ICJsYWIiKTsKICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAic2hvdy1tZW51IikgewogICAgICBzdGF0ZS5jdXJyZW50U2NyZWVuID0gIm1lbnUiOwogICAgICByZW5kZXJBcHAoKTsKICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAiZnVsbHNjcmVlbiIpIHsKICAgICAgdG9nZ2xlRnVsbFNjcmVlbigpOwogICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICJyZXNldC1nYW1lIikgewogICAgICByZXNldEdhbWUoKTsKICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAic2VsZWN0LXNoYXBlIikgewogICAgICBzZWxlY3RTaGFwZShidXR0b24uZ2V0QXR0cmlidXRlKCJkYXRhLXNoYXBlIikgfHwgInJlY3RhbmdsZSIpOwogICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICJzdGVwLWRpbWVuc2lvbiIpIHsKICAgICAgc3RlcERpbWVuc2lvbihidXR0b24uZ2V0QXR0cmlidXRlKCJkYXRhLWRpbWVuc2lvbiIpLCBOdW1iZXIoYnV0dG9uLmdldEF0dHJpYnV0ZSgiZGF0YS1zdGVwIikpKTsKICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAiYW5zd2VyLWNob2ljZSIpIHsKICAgICAgY2hlY2tBbnN3ZXIoTnVtYmVyKGJ1dHRvbi5nZXRBdHRyaWJ1dGUoImRhdGEtaW5kZXgiKSkpOwogICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICJzdWJtaXQtbnVtYmVyIikgewogICAgICBjaGVja051bWJlckFuc3dlcigpOwogICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICJzaG93LWhpbnQiKSB7CiAgICAgIHNob3dIaW50KCk7CiAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gIm5leHQtdGFzayIpIHsKICAgICAgbmV4dFRhc2soKTsKICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAic2V0LWRpZmZpY3VsdHkiKSB7CiAgICAgIHNldERpZmZpY3VsdHkoTnVtYmVyKGJ1dHRvbi5nZXRBdHRyaWJ1dGUoImRhdGEtZGlmZmljdWx0eSIpKSk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBoYW5kbGVJbnB1dChldmVudCkgewogICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDsKICAgIGlmICghdGFyZ2V0IHx8IHR5cGVvZiB0YXJnZXQuZ2V0QXR0cmlidXRlICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHZhciBrZXkgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCJkYXRhLWRpbWVuc2lvbiIpOwogICAgaWYgKCFrZXkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgc2V0RGltZW5zaW9uKGtleSwgTnVtYmVyKHRhcmdldC52YWx1ZSkpOwogIH0KCiAgZnVuY3Rpb24gaGFuZGxlS2V5RG93bihldmVudCkgewogICAgaWYgKHN0YXRlLmN1cnJlbnRTY3JlZW4gIT09ICJwbGF5IikgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoZXZlbnQua2V5ID49ICIxIiAmJiBldmVudC5rZXkgPD0gIjQiICYmIHN0YXRlLmN1cnJlbnRUYXNrICYmIHN0YXRlLmN1cnJlbnRUYXNrLmtpbmQgPT09ICJjaG9pY2UiICYmICFzdGF0ZS5hbnN3ZXJMb2NrZWQpIHsKICAgICAgY2hlY2tBbnN3ZXIoTnVtYmVyKGV2ZW50LmtleSkgLSAxKTsKICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGV2ZW50LmtleSA9PT0gIkVudGVyIiAmJiBzdGF0ZS5jdXJyZW50VGFzayAmJiBzdGF0ZS5jdXJyZW50VGFzay5raW5kID09PSAibnVtYmVyIiAmJiAhc3RhdGUuYW5zd2VyTG9ja2VkKSB7CiAgICAgIGNoZWNrTnVtYmVyQW5zd2VyKCk7CiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChldmVudC5rZXkgPT09ICJFbnRlciIgJiYgc3RhdGUuY3VycmVudFRhc2sgJiYgc3RhdGUuYW5zd2VyTG9ja2VkKSB7CiAgICAgIG5leHRUYXNrKCk7CiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBoYW5kbGVQb2ludGVyRG93bihldmVudCkgewogICAgaWYgKHN0YXRlLmN1cnJlbnRTY3JlZW4gIT09ICJwbGF5IikgewogICAgICByZXR1cm47CiAgICB9CiAgICBzdGF0ZS5kcmFnZ2luZ0NhbnZhcyA9IHRydWU7CiAgICBpZiAoZWxlbWVudHMuY2FudmFzLnNldFBvaW50ZXJDYXB0dXJlKSB7CiAgICAgIGVsZW1lbnRzLmNhbnZhcy5zZXRQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpOwogICAgfQogICAgYXBwbHlDYW52YXNNZWFzdXJlKGV2ZW50KTsKICB9CgogIGZ1bmN0aW9uIGhhbmRsZVBvaW50ZXJNb3ZlKGV2ZW50KSB7CiAgICBpZiAoIXN0YXRlLmRyYWdnaW5nQ2FudmFzIHx8IHN0YXRlLmN1cnJlbnRTY3JlZW4gIT09ICJwbGF5IikgewogICAgICByZXR1cm47CiAgICB9CiAgICBhcHBseUNhbnZhc01lYXN1cmUoZXZlbnQpOwogIH0KCiAgZnVuY3Rpb24gaGFuZGxlUG9pbnRlclVwKGV2ZW50KSB7CiAgICBzdGF0ZS5kcmFnZ2luZ0NhbnZhcyA9IGZhbHNlOwogICAgaWYgKGVsZW1lbnRzLmNhbnZhcy5yZWxlYXNlUG9pbnRlckNhcHR1cmUpIHsKICAgICAgdHJ5IHsKICAgICAgICBlbGVtZW50cy5jYW52YXMucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7CiAgICAgIH0gY2F0Y2ggKGlnbm9yZSkgewogICAgICAgIHN0YXRlLmRyYWdnaW5nQ2FudmFzID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICB9CgogIGZ1bmN0aW9uIGZpbmRCdXR0b24obm9kZSkgewogICAgaWYgKCFub2RlIHx8IHR5cGVvZiBub2RlLmNsb3Nlc3QgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICB2YXIgYnV0dG9uID0gbm9kZS5jbG9zZXN0KCJidXR0b24iKTsKICAgIGlmIChidXR0b24gJiYgZWxlbWVudHMucm9vdC5jb250YWlucyhidXR0b24pKSB7CiAgICAgIHJldHVybiBidXR0b247CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIGZ1bmN0aW9uIHN0YXJ0TW9kZShtb2RlKSB7CiAgICBpZiAoIW1vZGVTZXR0aW5nc1ttb2RlXSkgewogICAgICBtb2RlID0gImxhYiI7CiAgICB9CiAgICBzdGF0ZS5jdXJyZW50U2NyZWVuID0gInBsYXkiOwogICAgc3RhdGUuY3VycmVudE1vZGUgPSBtb2RlOwogICAgc3RhdGUubW9kZVRhc2tOdW1iZXIgPSAwOwogICAgc3RhdGUuY29ycmVjdEluTW9kZSA9IDA7CiAgICBzdGF0ZS5hbnN3ZXJMb2NrZWQgPSBmYWxzZTsKICAgIHN0YXRlLmNob3NlbkFuc3dlciA9IC0xOwogICAgc3RhdGUuYXR0ZW1wdHMgPSAwOwogICAgc2VsZWN0RGVmYXVsdFNoYXBlRm9yTW9kZShtb2RlKTsKICAgIGlmIChtb2RlID09PSAiZXhwbG9yZSIgfHwgbW9kZSA9PT0gInNjb3JlIikgewogICAgICBzdGF0ZS5jdXJyZW50VGFzayA9IG51bGw7CiAgICB9IGVsc2UgewogICAgICBjcmVhdGVOZXh0VGFzaygpOwogICAgfQogICAgcmVuZGVyQXBwKCk7CiAgICBzaG93VG9hc3QobW9kZVNldHRpbmdzW21vZGVdLnRpdGxlICsgIiBnZcO2ZmZuZXQuIik7CiAgfQoKICBmdW5jdGlvbiByZXNldEdhbWUoKSB7CiAgICBzdGF0ZS5jdXJyZW50U2NyZWVuID0gIm1lbnUiOwogICAgc3RhdGUuY3VycmVudE1vZGUgPSAibGFiIjsKICAgIHN0YXRlLnNlbGVjdGVkU2hhcGUgPSAicmVjdGFuZ2xlIjsKICAgIHN0YXRlLmN1cnJlbnRUYXNrID0gbnVsbDsKICAgIHN0YXRlLnNjb3JlID0gMDsKICAgIGNhdGVnb3JpZXMuZm9yRWFjaChmdW5jdGlvbiAoY2F0ZWdvcnkpIHsKICAgICAgc3RhdGUuY2F0ZWdvcnlTY29yZXNbY2F0ZWdvcnldID0gMDsKICAgIH0pOwogICAgc3RhdGUuc3RyZWFrID0gMDsKICAgIHN0YXRlLmF0dGVtcHRzID0gMDsKICAgIHN0YXRlLmRpZmZpY3VsdHkgPSAxOwogICAgc3RhdGUuY29tcGxldGVkVGFza3MgPSAwOwogICAgc3RhdGUubW9kZVRhc2tOdW1iZXIgPSAwOwogICAgc3RhdGUuY29ycmVjdEluTW9kZSA9IDA7CiAgICBzdGF0ZS5hbnN3ZXJMb2NrZWQgPSBmYWxzZTsKICAgIHN0YXRlLmNob3NlbkFuc3dlciA9IC0xOwogICAgc3RhdGUuc2hhcGVQYXJhbWV0ZXJzID0ge307CiAgICBzaGFwZXMuZm9yRWFjaChmdW5jdGlvbiAoc2hhcGUpIHsKICAgICAgdmFyIHZhbHVlcyA9IHt9OwogICAgICBzaGFwZS5wYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICB2YWx1ZXNbaXRlbS5rZXldID0gaXRlbS52YWx1ZTsKICAgICAgfSk7CiAgICAgIHN0YXRlLnNoYXBlUGFyYW1ldGVyc1tzaGFwZS5pZF0gPSB2YWx1ZXM7CiAgICB9KTsKICAgIHJlbmRlckFwcCgpOwogICAgc2hvd1RvYXN0KCJOZXVzdGFydCBhdXNnZWbDvGhydC4gQWxsZXMgd3VyZGUgaW50ZXJuIHp1csO8Y2tnZXNldHp0LiIpOwogIH0KCiAgZnVuY3Rpb24gcmVuZGVyQXBwKCkgewogICAgZWxlbWVudHMubWVudVNjcmVlbi5oaWRkZW4gPSBzdGF0ZS5jdXJyZW50U2NyZWVuICE9PSAibWVudSI7CiAgICBlbGVtZW50cy5wbGF5U2NyZWVuLmhpZGRlbiA9IHN0YXRlLmN1cnJlbnRTY3JlZW4gIT09ICJwbGF5IjsKICAgIGVsZW1lbnRzLmVuZFNjcmVlbi5oaWRkZW4gPSBzdGF0ZS5jdXJyZW50U2NyZWVuICE9PSAiZW5kIjsKICAgIGlmIChzdGF0ZS5jdXJyZW50U2NyZWVuID09PSAicGxheSIpIHsKICAgICAgcmVuZGVyTW9kZVRhYnMoKTsKICAgICAgcmVuZGVyRGFzaGJvYXJkKCk7CiAgICAgIHJlbmRlclNoYXBlUGlja2VyKCk7CiAgICAgIGlmIChzdGF0ZS5jdXJyZW50TW9kZSA9PT0gImV4cGxvcmUiKSB7CiAgICAgICAgcmVuZGVyRXhwbG9yZXIoKTsKICAgICAgfSBlbHNlIGlmIChzdGF0ZS5jdXJyZW50TW9kZSA9PT0gImxhYiIpIHsKICAgICAgICByZW5kZXJGb3JtdWxhTGFiKCk7CiAgICAgIH0gZWxzZSBpZiAoc3RhdGUuY3VycmVudE1vZGUgPT09ICJzY29yZSIpIHsKICAgICAgICByZW5kZXJTY29yZU1vZGUoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZW5kZXJUcmFpbmluZygpOwogICAgICB9CiAgICAgIHJlbmRlclNjb3JlKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiByZW5kZXJNZW51KCkgewogICAgc3RhdGUuY3VycmVudFNjcmVlbiA9ICJtZW51IjsKICAgIHJlbmRlckFwcCgpOwogIH0KCiAgZnVuY3Rpb24gcmVuZGVyRXhwbG9yZXIoKSB7CiAgICB2YXIgc2V0dGluZyA9IG1vZGVTZXR0aW5nc1tzdGF0ZS5jdXJyZW50TW9kZV07CiAgICBlbGVtZW50cy5tb2RlTGFiZWwudGV4dENvbnRlbnQgPSBzZXR0aW5nLmxhYmVsOwogICAgZWxlbWVudHMuc2NyZWVuVGl0bGUudGV4dENvbnRlbnQgPSBzZXR0aW5nLnRpdGxlOwogICAgcmVuZGVyTGFiUGFydHMoKTsKICAgIHJlbmRlckV4cGxvcmVUYXNrKCk7CiAgfQoKICBmdW5jdGlvbiByZW5kZXJGb3JtdWxhTGFiKCkgewogICAgdmFyIHNldHRpbmcgPSBtb2RlU2V0dGluZ3Nbc3RhdGUuY3VycmVudE1vZGVdOwogICAgZWxlbWVudHMubW9kZUxhYmVsLnRleHRDb250ZW50ID0gc2V0dGluZy5sYWJlbDsKICAgIGVsZW1lbnRzLnNjcmVlblRpdGxlLnRleHRDb250ZW50ID0gc2V0dGluZy50aXRsZTsKICAgIHJlbmRlckxhYlBhcnRzKCk7CiAgICByZW5kZXJUYXNrKCk7CiAgfQoKICBmdW5jdGlvbiByZW5kZXJUcmFpbmluZygpIHsKICAgIHZhciBzZXR0aW5nID0gbW9kZVNldHRpbmdzW3N0YXRlLmN1cnJlbnRNb2RlXTsKICAgIGVsZW1lbnRzLm1vZGVMYWJlbC50ZXh0Q29udGVudCA9IHNldHRpbmcubGFiZWw7CiAgICBlbGVtZW50cy5zY3JlZW5UaXRsZS50ZXh0Q29udGVudCA9IHNldHRpbmcudGl0bGU7CiAgICByZW5kZXJMYWJQYXJ0cygpOwogICAgcmVuZGVyVGFzaygpOwogIH0KCiAgZnVuY3Rpb24gcmVuZGVyU2NvcmVNb2RlKCkgewogICAgdmFyIHNldHRpbmcgPSBtb2RlU2V0dGluZ3Nbc3RhdGUuY3VycmVudE1vZGVdOwogICAgZWxlbWVudHMubW9kZUxhYmVsLnRleHRDb250ZW50ID0gc2V0dGluZy5sYWJlbDsKICAgIGVsZW1lbnRzLnNjcmVlblRpdGxlLnRleHRDb250ZW50ID0gc2V0dGluZy50aXRsZTsKICAgIHJlbmRlckxhYlBhcnRzKCk7CiAgICByZW5kZXJTY29yZVRhc2soKTsKICB9CgogIGZ1bmN0aW9uIHJlbmRlck1vZGVUYWJzKCkgewogICAgdmFyIGJ1dHRvbnMgPSBlbGVtZW50cy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5tb2RlLXRhYnMgYnV0dG9uIik7CiAgICBidXR0b25zLmZvckVhY2goZnVuY3Rpb24gKGJ1dHRvbikgewogICAgICB2YXIgYWN0aXZlID0gYnV0dG9uLmdldEF0dHJpYnV0ZSgiZGF0YS1tb2RlIikgPT09IHN0YXRlLmN1cnJlbnRNb2RlOwogICAgICBidXR0b24uY2xhc3NMaXN0LnRvZ2dsZSgiaXMtYWN0aXZlIiwgYWN0aXZlKTsKICAgICAgaWYgKGFjdGl2ZSkgewogICAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoImFyaWEtY3VycmVudCIsICJwYWdlIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYnV0dG9uLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1jdXJyZW50Iik7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gcmVuZGVyRGFzaGJvYXJkKCkgewogICAgdmFyIHNldHRpbmcgPSBtb2RlU2V0dGluZ3Nbc3RhdGUuY3VycmVudE1vZGVdOwogICAgZWxlbWVudHMudG90YWxTY29yZS50ZXh0Q29udGVudCA9IFN0cmluZyhzdGF0ZS5zY29yZSk7CiAgICBlbGVtZW50cy5zdHJlYWtTY29yZS50ZXh0Q29udGVudCA9IFN0cmluZyhzdGF0ZS5zdHJlYWspOwogICAgZWxlbWVudHMuZGlmZmljdWx0eVRleHQudGV4dENvbnRlbnQgPSAiU3R1ZmUgIiArIFN0cmluZyhzdGF0ZS5kaWZmaWN1bHR5KTsKICAgIGlmIChzZXR0aW5nLmdvYWwgPiAwKSB7CiAgICAgIHZhciBwZXJjZW50ID0gTWF0aC5taW4oMTAwLCBNYXRoLnJvdW5kKHN0YXRlLm1vZGVUYXNrTnVtYmVyIC8gc2V0dGluZy5nb2FsICogMTAwKSk7CiAgICAgIGVsZW1lbnRzLnByb2dyZXNzQmFyLnN0eWxlLndpZHRoID0gU3RyaW5nKHBlcmNlbnQpICsgIiUiOwogICAgICBlbGVtZW50cy5wcm9ncmVzc1RleHQudGV4dENvbnRlbnQgPSAiQXVmZ2FiZSAiICsgU3RyaW5nKE1hdGgubWluKHNldHRpbmcuZ29hbCwgc3RhdGUubW9kZVRhc2tOdW1iZXIpKSArICIgdm9uICIgKyBTdHJpbmcoc2V0dGluZy5nb2FsKSArICIgwrcgcmljaHRpZzogIiArIFN0cmluZyhzdGF0ZS5jb3JyZWN0SW5Nb2RlKTsKICAgIH0gZWxzZSB7CiAgICAgIGVsZW1lbnRzLnByb2dyZXNzQmFyLnN0eWxlLndpZHRoID0gIjAlIjsKICAgICAgZWxlbWVudHMucHJvZ3Jlc3NUZXh0LnRleHRDb250ZW50ID0gc3RhdGUuY3VycmVudE1vZGUgPT09ICJzY29yZSIgPyAiU2l0enVuZ3NhdXN3ZXJ0dW5nIiA6ICJGcmVpZXMgQXJiZWl0ZW4gb2huZSBTcGVpY2hlcm4iOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcmVuZGVyTGFiUGFydHMoKSB7CiAgICB2YXIgc2hhcGUgPSBnZXRTaGFwZShzdGF0ZS5zZWxlY3RlZFNoYXBlKTsKICAgIHZhciB2YWx1ZXMgPSBnZXRWYWx1ZXMoc2hhcGUuaWQpOwogICAgZWxlbWVudHMuc2hhcGVLaW5kLnRleHRDb250ZW50ID0gc2hhcGUudHlwZSArICIgwrcgIiArIHNoYXBlLmNsYXNzTGV2ZWw7CiAgICBlbGVtZW50cy5jYW52YXNEZXNjcmlwdGlvbi50ZXh0Q29udGVudCA9IHNoYXBlLmV4cGxhbmF0aW9uICsgIiBQYXNzZSBkaWUgTWHDn2UgbWl0IFJlZ2xlcm4sIFBsdXMvTWludXMgb2RlciBkdXJjaCBaaWVoZW4gaW4gZGVyIFplaWNobnVuZyBhbi4iOwogICAgcmVuZGVyRGltZW5zaW9uQ29udHJvbHMoc2hhcGUsIHZhbHVlcyk7CiAgICByZW5kZXJGb3JtdWxhQ29udGVudChzaGFwZSwgdmFsdWVzKTsKICAgIGRyYXdTaGFwZUNhbnZhcygpOwogIH0KCiAgZnVuY3Rpb24gcmVuZGVyU2hhcGVQaWNrZXIoKSB7CiAgICB2YXIgY3VycmVudCA9IHN0YXRlLnNlbGVjdGVkU2hhcGU7CiAgICBlbGVtZW50cy5zaGFwZVBpY2tlci5yZXBsYWNlQ2hpbGRyZW4oKTsKICAgIHNoYXBlcy5mb3JFYWNoKGZ1bmN0aW9uIChzaGFwZSkgewogICAgICB2YXIgYnV0dG9uID0gbWFrZU5vZGUoImJ1dHRvbiIsICJzaGFwZS1idXR0b24iLCBzaGFwZS5uYW1lKTsKICAgICAgYnV0dG9uLnR5cGUgPSAiYnV0dG9uIjsKICAgICAgYnV0dG9uLnNldEF0dHJpYnV0ZSgiZGF0YS1hY3Rpb24iLCAic2VsZWN0LXNoYXBlIik7CiAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoImRhdGEtc2hhcGUiLCBzaGFwZS5pZCk7CiAgICAgIGlmIChzaGFwZS5jbGFzc0xldmVsID09PSAiQXVzYmxpY2siKSB7CiAgICAgICAgYnV0dG9uLmNsYXNzTGlzdC5hZGQoImV4dGVuc2lvbiIpOwogICAgICB9CiAgICAgIGlmIChzaGFwZS5pZCA9PT0gY3VycmVudCkgewogICAgICAgIGJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJpcy1hY3RpdmUiKTsKICAgICAgICBidXR0b24uc2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiLCAidHJ1ZSIpOwogICAgICB9IGVsc2UgewogICAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsICJmYWxzZSIpOwogICAgICB9CiAgICAgIGVsZW1lbnRzLnNoYXBlUGlja2VyLmFwcGVuZENoaWxkKGJ1dHRvbik7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIHJlbmRlckRpbWVuc2lvbkNvbnRyb2xzKHNoYXBlLCB2YWx1ZXMpIHsKICAgIGVsZW1lbnRzLmRpbWVuc2lvbkNvbnRyb2xzLnJlcGxhY2VDaGlsZHJlbigpOwogICAgc2hhcGUucGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgIHZhciByb3cgPSBtYWtlTm9kZSgiZGl2IiwgImRpbWVuc2lvbi1yb3ciKTsKICAgICAgdmFyIGxhYmVsID0gbWFrZU5vZGUoImxhYmVsIiwgImRpbWVuc2lvbi1sYWJlbCIpOwogICAgICB2YXIgbGFiZWxUZXh0ID0gbWFrZU5vZGUoInNwYW4iLCAiIiwgaXRlbS5sYWJlbCk7CiAgICAgIHZhciB2YWx1ZVRleHQgPSBtYWtlTm9kZSgic3BhbiIsICJkaW1lbnNpb24tdmFsdWUiLCBmb3JtYXROdW1iZXIodmFsdWVzW2l0ZW0ua2V5XSkgKyAiICIgKyBpdGVtLnVuaXQpOwogICAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwogICAgICB2YXIgbWludXMgPSBtYWtlTm9kZSgiYnV0dG9uIiwgInN0ZXAtYnV0dG9uIiwgIuKIkiIpOwogICAgICB2YXIgcGx1cyA9IG1ha2VOb2RlKCJidXR0b24iLCAic3RlcC1idXR0b24iLCAiKyIpOwogICAgICBpbnB1dC50eXBlID0gInJhbmdlIjsKICAgICAgaW5wdXQubWluID0gU3RyaW5nKGl0ZW0ubWluKTsKICAgICAgaW5wdXQubWF4ID0gU3RyaW5nKGl0ZW0ubWF4KTsKICAgICAgaW5wdXQuc3RlcCA9IFN0cmluZyhpdGVtLnN0ZXApOwogICAgICBpbnB1dC52YWx1ZSA9IFN0cmluZyh2YWx1ZXNbaXRlbS5rZXldKTsKICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJkYXRhLWRpbWVuc2lvbiIsIGl0ZW0ua2V5KTsKICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwgaXRlbS5sYWJlbCArICIgdmVyw6RuZGVybiIpOwogICAgICBtaW51cy50eXBlID0gImJ1dHRvbiI7CiAgICAgIG1pbnVzLnNldEF0dHJpYnV0ZSgiZGF0YS1hY3Rpb24iLCAic3RlcC1kaW1lbnNpb24iKTsKICAgICAgbWludXMuc2V0QXR0cmlidXRlKCJkYXRhLWRpbWVuc2lvbiIsIGl0ZW0ua2V5KTsKICAgICAgbWludXMuc2V0QXR0cmlidXRlKCJkYXRhLXN0ZXAiLCBTdHJpbmcoLWl0ZW0uc3RlcCkpOwogICAgICBtaW51cy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCBpdGVtLmxhYmVsICsgIiB2ZXJrbGVpbmVybiIpOwogICAgICBwbHVzLnR5cGUgPSAiYnV0dG9uIjsKICAgICAgcGx1cy5zZXRBdHRyaWJ1dGUoImRhdGEtYWN0aW9uIiwgInN0ZXAtZGltZW5zaW9uIik7CiAgICAgIHBsdXMuc2V0QXR0cmlidXRlKCJkYXRhLWRpbWVuc2lvbiIsIGl0ZW0ua2V5KTsKICAgICAgcGx1cy5zZXRBdHRyaWJ1dGUoImRhdGEtc3RlcCIsIFN0cmluZyhpdGVtLnN0ZXApKTsKICAgICAgcGx1cy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCBpdGVtLmxhYmVsICsgIiB2ZXJncsO2w59lcm4iKTsKICAgICAgbGFiZWwuYXBwZW5kQ2hpbGQobGFiZWxUZXh0KTsKICAgICAgbGFiZWwuYXBwZW5kQ2hpbGQodmFsdWVUZXh0KTsKICAgICAgbGFiZWwuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICByb3cuYXBwZW5kQ2hpbGQobGFiZWwpOwogICAgICByb3cuYXBwZW5kQ2hpbGQobWludXMpOwogICAgICByb3cuYXBwZW5kQ2hpbGQocGx1cyk7CiAgICAgIGVsZW1lbnRzLmRpbWVuc2lvbkNvbnRyb2xzLmFwcGVuZENoaWxkKHJvdyk7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIHJlbmRlckZvcm11bGFDb250ZW50KHNoYXBlLCB2YWx1ZXMpIHsKICAgIHZhciByZXN1bHRzID0gc2hhcGUuY2FsY3VsYXRpb25GdW5jdGlvbih2YWx1ZXMpOwogICAgZWxlbWVudHMuZm9ybXVsYUNvbnRlbnQucmVwbGFjZUNoaWxkcmVuKCk7CiAgICByZXN1bHRzLmZvcm11bGFzLmZvckVhY2goZnVuY3Rpb24gKGZvcm11bGEpIHsKICAgICAgdmFyIGJveCA9IG1ha2VOb2RlKCJhcnRpY2xlIiwgImZvcm11bGEtYm94Iik7CiAgICAgIHZhciBuYW1lID0gbWFrZU5vZGUoInAiLCAiZm9ybXVsYS1uYW1lIiwgZm9ybXVsYS5uYW1lKTsKICAgICAgdmFyIGdlbmVyYWwgPSBtYWtlTm9kZSgicCIsICJmb3JtdWxhLWdlbmVyYWwiLCBmb3JtdWxhLmdlbmVyYWwpOwogICAgICB2YXIgbGluZSA9IG1ha2VOb2RlKCJwIiwgImZvcm11bGEtbGluZSIsIGZvcm11bGEubGluZSk7CiAgICAgIHZhciBub3RlID0gbWFrZU5vZGUoInAiLCAiZm9ybXVsYS1ub3RlIiwgZm9ybXVsYS5ub3RlKTsKICAgICAgdmFyIHVuaXQgPSBtYWtlTm9kZSgic3BhbiIsICJ2YWx1ZS1jaGlwIiwgIkVpbmhlaXQ6ICIgKyBmb3JtdWxhLnVuaXQpOwogICAgICBib3guYXBwZW5kQ2hpbGQobmFtZSk7CiAgICAgIGJveC5hcHBlbmRDaGlsZChnZW5lcmFsKTsKICAgICAgYm94LmFwcGVuZENoaWxkKGxpbmUpOwogICAgICBib3guYXBwZW5kQ2hpbGQobm90ZSk7CiAgICAgIGJveC5hcHBlbmRDaGlsZCh1bml0KTsKICAgICAgZWxlbWVudHMuZm9ybXVsYUNvbnRlbnQuYXBwZW5kQ2hpbGQoYm94KTsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gcmVuZGVyRXhwbG9yZVRhc2soKSB7CiAgICBlbGVtZW50cy50YXNrU2tpbGwudGV4dENvbnRlbnQgPSAiRW50ZGVja2VyYXVmdHJhZyI7CiAgICBlbGVtZW50cy50YXNrVGl0bGUudGV4dENvbnRlbnQgPSAiQmVvYmFjaHRlbiBzdGF0dCByYXRlbiI7CiAgICBlbGVtZW50cy50YXNrUmV3YXJkLnRleHRDb250ZW50ID0gIiswIFB1bmt0ZSI7CiAgICBlbGVtZW50cy50YXNrUHJvbXB0LnRleHRDb250ZW50ID0gbWFrZUV4cGxvcmVQcm9tcHQoKTsKICAgIGVsZW1lbnRzLmFuc3dlckFyZWEucmVwbGFjZUNoaWxkcmVuKCk7CiAgICBlbGVtZW50cy5mZWVkYmFja0JveC5jbGFzc05hbWUgPSAiZmVlZGJhY2stYm94IjsKICAgIGVsZW1lbnRzLmZlZWRiYWNrQm94LnRleHRDb250ZW50ID0gIkJlc2NocmVpYmUgbWl0IFdvcnRlbjogV2VsY2hlIEdyw7bDn2UgdmVyw6RuZGVydCBzaWNoPyBXZWxjaGUgRWluaGVpdCBibGVpYnQgcGFzc2VuZD8iOwogICAgZWxlbWVudHMuaGludEJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlOwogICAgZWxlbWVudHMubmV4dEJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlOwogIH0KCiAgZnVuY3Rpb24gcmVuZGVyU2NvcmVUYXNrKCkgewogICAgZWxlbWVudHMudGFza1NraWxsLnRleHRDb250ZW50ID0gIkxlcm5wcm9maWwiOwogICAgZWxlbWVudHMudGFza1RpdGxlLnRleHRDb250ZW50ID0gIlN0w6Rya2VuIHVuZCBuw6RjaHN0ZSBTY2hyaXR0ZSI7CiAgICBlbGVtZW50cy50YXNrUmV3YXJkLnRleHRDb250ZW50ID0gIlNpdHp1bmciOwogICAgZWxlbWVudHMudGFza1Byb21wdC50ZXh0Q29udGVudCA9ICJEaWVzZSDDnGJlcnNpY2h0IGdpbHQgbnVyIGbDvHIgZGllIGFrdHVlbGxlIFNpdHp1bmcuIEVzIHdpcmQgbmljaHRzIGltIEJyb3dzZXIgZ2VzcGVpY2hlcnQuIjsKICAgIGVsZW1lbnRzLmFuc3dlckFyZWEucmVwbGFjZUNoaWxkcmVuKCk7CiAgICB2YXIgYm94ID0gbWFrZU5vZGUoImRpdiIsICJmb3JtdWxhLWJveCIpOwogICAgdmFyIHRpdGxlID0gbWFrZU5vZGUoInAiLCAiZm9ybXVsYS1uYW1lIiwgIkVtcGZlaGx1bmciKTsKICAgIHZhciB0ZXh0ID0gbWFrZU5vZGUoInAiLCAiZm9ybXVsYS1ub3RlIiwgYnVpbGRBZHZpY2UoKSk7CiAgICBib3guYXBwZW5kQ2hpbGQodGl0bGUpOwogICAgYm94LmFwcGVuZENoaWxkKHRleHQpOwogICAgZWxlbWVudHMuYW5zd2VyQXJlYS5hcHBlbmRDaGlsZChib3gpOwogICAgZWxlbWVudHMuZmVlZGJhY2tCb3guY2xhc3NOYW1lID0gImZlZWRiYWNrLWJveCI7CiAgICBlbGVtZW50cy5mZWVkYmFja0JveC50ZXh0Q29udGVudCA9ICJOdXR6ZSBkaWUgVHJhaW5pbmdzcGZhZGUsIHVtIGdlemllbHQgUHVua3RlIGluIGVpbnplbG5lbiBMZXJuYmVyZWljaGVuIHp1IHNhbW1lbG4uIjsKICAgIGVsZW1lbnRzLmhpbnRCdXR0b24uZGlzYWJsZWQgPSB0cnVlOwogICAgZWxlbWVudHMubmV4dEJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7CiAgfQoKICBmdW5jdGlvbiByZW5kZXJUYXNrKCkgewogICAgaWYgKCFzdGF0ZS5jdXJyZW50VGFzaykgewogICAgICBjcmVhdGVOZXh0VGFzaygpOwogICAgfQogICAgdmFyIHRhc2sgPSBzdGF0ZS5jdXJyZW50VGFzazsKICAgIGVsZW1lbnRzLnRhc2tTa2lsbC50ZXh0Q29udGVudCA9IHRhc2suc2tpbGwgKyAiIMK3IFN0dWZlICIgKyBTdHJpbmcodGFzay5kaWZmaWN1bHR5KTsKICAgIGVsZW1lbnRzLnRhc2tUaXRsZS50ZXh0Q29udGVudCA9IHRhc2sudGl0bGU7CiAgICBlbGVtZW50cy50YXNrUmV3YXJkLnRleHRDb250ZW50ID0gc3RhdGUuYW5zd2VyTG9ja2VkID8gImF1c2dld2VydGV0IiA6ICIrIiArIFN0cmluZyh0YXNrLnBvaW50cykgKyAiIFB1bmt0ZSI7CiAgICBlbGVtZW50cy50YXNrUHJvbXB0LnRleHRDb250ZW50ID0gdGFzay5wcm9tcHQ7CiAgICBlbGVtZW50cy5hbnN3ZXJBcmVhLnJlcGxhY2VDaGlsZHJlbigpOwogICAgaWYgKHRhc2sua2luZCA9PT0gImNob2ljZSIpIHsKICAgICAgcmVuZGVyQ2hvaWNlVGFzayh0YXNrKTsKICAgIH0gZWxzZSB7CiAgICAgIHJlbmRlck51bWJlclRhc2sodGFzayk7CiAgICB9CiAgICByZW5kZXJGZWVkYmFjaygpOwogICAgZWxlbWVudHMuaGludEJ1dHRvbi5kaXNhYmxlZCA9IHN0YXRlLmFuc3dlckxvY2tlZDsKICAgIGVsZW1lbnRzLm5leHRCdXR0b24uZGlzYWJsZWQgPSAhc3RhdGUuYW5zd2VyTG9ja2VkOwogIH0KCiAgZnVuY3Rpb24gcmVuZGVyQ2hvaWNlVGFzayh0YXNrKSB7CiAgICB2YXIgZ3JpZCA9IG1ha2VOb2RlKCJkaXYiLCAiYW5zd2VyLWdyaWQiKTsKICAgIHRhc2sub3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb24sIGluZGV4KSB7CiAgICAgIHZhciBidXR0b24gPSBtYWtlTm9kZSgiYnV0dG9uIiwgImFuc3dlci1idXR0b24iLCBTdHJpbmcoaW5kZXggKyAxKSArICIuICIgKyBvcHRpb24pOwogICAgICBidXR0b24udHlwZSA9ICJidXR0b24iOwogICAgICBidXR0b24uc2V0QXR0cmlidXRlKCJkYXRhLWFjdGlvbiIsICJhbnN3ZXItY2hvaWNlIik7CiAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoImRhdGEtaW5kZXgiLCBTdHJpbmcoaW5kZXgpKTsKICAgICAgaWYgKHN0YXRlLmFuc3dlckxvY2tlZCkgewogICAgICAgIGJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgaWYgKGluZGV4ID09PSB0YXNrLmNvcnJlY3RJbmRleCkgewogICAgICAgICAgYnV0dG9uLmNsYXNzTGlzdC5hZGQoImlzLWNvcnJlY3QiKTsKICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID09PSBzdGF0ZS5jaG9zZW5BbnN3ZXIpIHsKICAgICAgICAgIGJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJpcy13cm9uZyIpOwogICAgICAgIH0KICAgICAgfQogICAgICBncmlkLmFwcGVuZENoaWxkKGJ1dHRvbik7CiAgICB9KTsKICAgIGVsZW1lbnRzLmFuc3dlckFyZWEuYXBwZW5kQ2hpbGQoZ3JpZCk7CiAgfQoKICBmdW5jdGlvbiByZW5kZXJOdW1iZXJUYXNrKHRhc2spIHsKICAgIHZhciByb3cgPSBtYWtlTm9kZSgiZGl2IiwgIm51bWJlci1hbnN3ZXItcm93Iik7CiAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwogICAgdmFyIHVuaXQgPSBtYWtlTm9kZSgic3BhbiIsICJ1bml0LWxhYmVsIiwgdGFzay51bml0KTsKICAgIHZhciBzdWJtaXQgPSBtYWtlTm9kZSgiYnV0dG9uIiwgInN1Ym1pdC1idXR0b24iLCAiUHLDvGZlbiIpOwogICAgaW5wdXQudHlwZSA9ICJudW1iZXIiOwogICAgaW5wdXQuaW5wdXRNb2RlID0gImRlY2ltYWwiOwogICAgaW5wdXQuY2xhc3NOYW1lID0gIm51bWJlci1pbnB1dCI7CiAgICBpbnB1dC5pZCA9ICJudW1iZXJBbnN3ZXIiOwogICAgaW5wdXQuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwgIlphaGwgYWxzIEFudHdvcnQgZWluZ2ViZW4iKTsKICAgIGlucHV0LnZhbHVlID0gdGFzay5sYXN0SW5wdXQgfHwgIiI7CiAgICBpbnB1dC5kaXNhYmxlZCA9IHN0YXRlLmFuc3dlckxvY2tlZDsKICAgIHN1Ym1pdC50eXBlID0gImJ1dHRvbiI7CiAgICBzdWJtaXQuc2V0QXR0cmlidXRlKCJkYXRhLWFjdGlvbiIsICJzdWJtaXQtbnVtYmVyIik7CiAgICBzdWJtaXQuZGlzYWJsZWQgPSBzdGF0ZS5hbnN3ZXJMb2NrZWQ7CiAgICByb3cuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgcm93LmFwcGVuZENoaWxkKHVuaXQpOwogICAgcm93LmFwcGVuZENoaWxkKHN1Ym1pdCk7CiAgICBlbGVtZW50cy5hbnN3ZXJBcmVhLmFwcGVuZENoaWxkKHJvdyk7CiAgfQoKICBmdW5jdGlvbiByZW5kZXJGZWVkYmFjaygpIHsKICAgIHZhciB0YXNrID0gc3RhdGUuY3VycmVudFRhc2s7CiAgICBlbGVtZW50cy5mZWVkYmFja0JveC5jbGFzc05hbWUgPSAiZmVlZGJhY2stYm94IjsKICAgIGlmICghdGFzaykgewogICAgICBlbGVtZW50cy5mZWVkYmFja0JveC50ZXh0Q29udGVudCA9ICIiOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoc3RhdGUuYW5zd2VyTG9ja2VkICYmIHRhc2suc29sdmVkKSB7CiAgICAgIGVsZW1lbnRzLmZlZWRiYWNrQm94LmNsYXNzTGlzdC5hZGQoImdvb2QiKTsKICAgICAgZWxlbWVudHMuZmVlZGJhY2tCb3gudGV4dENvbnRlbnQgPSAiUmljaHRpZy4gIiArIHRhc2suZXhwbGFuYXRpb247CiAgICB9IGVsc2UgaWYgKHN0YXRlLmFuc3dlckxvY2tlZCkgewogICAgICBlbGVtZW50cy5mZWVkYmFja0JveC5jbGFzc0xpc3QuYWRkKCJiYWQiKTsKICAgICAgZWxlbWVudHMuZmVlZGJhY2tCb3gudGV4dENvbnRlbnQgPSAiRGllIEVya2zDpHJ1bmc6ICIgKyBjb3JyZWN0VGV4dCh0YXNrKSArICIuICIgKyB0YXNrLmV4cGxhbmF0aW9uOwogICAgfSBlbHNlIGlmIChzdGF0ZS5hdHRlbXB0cyA+IDApIHsKICAgICAgZWxlbWVudHMuZmVlZGJhY2tCb3guY2xhc3NMaXN0LmFkZCgid2FybiIpOwogICAgICBlbGVtZW50cy5mZWVkYmFja0JveC50ZXh0Q29udGVudCA9ICJOb2NoIGVpbm1hbCB2ZXJzdWNoZW4uIFRpcHA6ICIgKyB0YXNrLmhpbnQ7CiAgICB9IGVsc2UgewogICAgICBlbGVtZW50cy5mZWVkYmFja0JveC50ZXh0Q29udGVudCA9ICJXw6RobGUgZWluZSBBbnR3b3J0IG9kZXIgZ2liIGVpbmUgWmFobCBlaW4uIER1IGhhc3QgYmVpIEZlaGxlcm4gZWluZSB6d2VpdGUgQ2hhbmNlLiI7CiAgICB9CiAgfQoKICBmdW5jdGlvbiByZW5kZXJTY29yZSgpIHsKICAgIGVsZW1lbnRzLnNraWxsU2NvcmVzLnJlcGxhY2VDaGlsZHJlbigpOwogICAgY2F0ZWdvcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChjYXRlZ29yeSkgewogICAgICB2YXIgcG9pbnRzID0gc3RhdGUuY2F0ZWdvcnlTY29yZXNbY2F0ZWdvcnldIHx8IDA7CiAgICAgIHZhciByb3cgPSBtYWtlTm9kZSgiZGl2IiwgInNraWxsLXJvdyIpOwogICAgICB2YXIgaGVhZCA9IG1ha2VOb2RlKCJkaXYiLCAic2tpbGwtcm93LWhlYWQiKTsKICAgICAgdmFyIG5hbWUgPSBtYWtlTm9kZSgic3BhbiIsICIiLCBjYXRlZ29yeSk7CiAgICAgIHZhciB2YWx1ZSA9IG1ha2VOb2RlKCJzcGFuIiwgIiIsIFN0cmluZyhwb2ludHMpICsgIiBQIik7CiAgICAgIHZhciBiYXIgPSBtYWtlTm9kZSgiZGl2IiwgInNraWxsLWJhciIpOwogICAgICB2YXIgZmlsbCA9IG1ha2VOb2RlKCJzcGFuIik7CiAgICAgIGZpbGwuc3R5bGUud2lkdGggPSBTdHJpbmcoTWF0aC5taW4oMTAwLCBNYXRoLnJvdW5kKHBvaW50cyAvIDEuMikpKSArICIlIjsKICAgICAgaGVhZC5hcHBlbmRDaGlsZChuYW1lKTsKICAgICAgaGVhZC5hcHBlbmRDaGlsZCh2YWx1ZSk7CiAgICAgIGJhci5hcHBlbmRDaGlsZChmaWxsKTsKICAgICAgcm93LmFwcGVuZENoaWxkKGhlYWQpOwogICAgICByb3cuYXBwZW5kQ2hpbGQoYmFyKTsKICAgICAgZWxlbWVudHMuc2tpbGxTY29yZXMuYXBwZW5kQ2hpbGQocm93KTsKICAgIH0pOwogICAgZWxlbWVudHMubGVhcm5pbmdUaXAudGV4dENvbnRlbnQgPSBtb2RlU2V0dGluZ3Nbc3RhdGUuY3VycmVudE1vZGVdLnRpcDsKICB9CgogIGZ1bmN0aW9uIHNlbGVjdFNoYXBlKHNoYXBlSWQpIHsKICAgIGlmICghZ2V0U2hhcGUoc2hhcGVJZCkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgc3RhdGUuc2VsZWN0ZWRTaGFwZSA9IHNoYXBlSWQ7CiAgICByZW5kZXJBcHAoKTsKICB9CgogIGZ1bmN0aW9uIHNlbGVjdERlZmF1bHRTaGFwZUZvck1vZGUobW9kZSkgewogICAgdmFyIHNldHRpbmcgPSBtb2RlU2V0dGluZ3NbbW9kZV07CiAgICBpZiAoIXNldHRpbmcgfHwgIXNldHRpbmcucHJlZmVycmVkU2hhcGVzIHx8IHNldHRpbmcucHJlZmVycmVkU2hhcGVzLmxlbmd0aCA9PT0gMCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoc2V0dGluZy5wcmVmZXJyZWRTaGFwZXMuaW5kZXhPZihzdGF0ZS5zZWxlY3RlZFNoYXBlKSA8IDApIHsKICAgICAgc3RhdGUuc2VsZWN0ZWRTaGFwZSA9IHNldHRpbmcucHJlZmVycmVkU2hhcGVzWzBdOwogICAgfQogIH0KCiAgZnVuY3Rpb24gc3RlcERpbWVuc2lvbihrZXksIGRlbHRhKSB7CiAgICBpZiAoIWtleSB8fCAhZGVsdGEpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIHNoYXBlID0gZ2V0U2hhcGUoc3RhdGUuc2VsZWN0ZWRTaGFwZSk7CiAgICB2YXIgcGFyYW0gPSBnZXRQYXJhbWV0ZXIoc2hhcGUsIGtleSk7CiAgICBpZiAoIXBhcmFtKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHZhciB2YWx1ZXMgPSBnZXRWYWx1ZXMoc2hhcGUuaWQpOwogICAgc2V0RGltZW5zaW9uKGtleSwgY2xhbXBUb1N0ZXAodmFsdWVzW2tleV0gKyBkZWx0YSwgcGFyYW0pKTsKICB9CgogIGZ1bmN0aW9uIHNldERpbWVuc2lvbihrZXksIHZhbHVlKSB7CiAgICB2YXIgc2hhcGUgPSBnZXRTaGFwZShzdGF0ZS5zZWxlY3RlZFNoYXBlKTsKICAgIHZhciBwYXJhbSA9IGdldFBhcmFtZXRlcihzaGFwZSwga2V5KTsKICAgIGlmICghcGFyYW0pIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIHZhbHVlcyA9IGdldFZhbHVlcyhzaGFwZS5pZCk7CiAgICB2YWx1ZXNba2V5XSA9IGNsYW1wVG9TdGVwKHZhbHVlLCBwYXJhbSk7CiAgICByZW5kZXJMYWJQYXJ0cygpOwogIH0KCiAgZnVuY3Rpb24gYXBwbHlDYW52YXNNZWFzdXJlKGV2ZW50KSB7CiAgICB2YXIgc2hhcGUgPSBnZXRTaGFwZShzdGF0ZS5zZWxlY3RlZFNoYXBlKTsKICAgIGlmICghc2hhcGUgfHwgc2hhcGUucGFyYW1ldGVycy5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIHBhcmFtID0gc2hhcGUucGFyYW1ldGVyc1swXTsKICAgIHZhciBib3ggPSBlbGVtZW50cy5jYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICB2YXIgcmF0aW8gPSAoZXZlbnQuY2xpZW50WCAtIGJveC5sZWZ0KSAvIE1hdGgubWF4KDEsIGJveC53aWR0aCk7CiAgICByYXRpbyA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHJhdGlvKSk7CiAgICB2YXIgcmF3ID0gcGFyYW0ubWluICsgcmF0aW8gKiAocGFyYW0ubWF4IC0gcGFyYW0ubWluKTsKICAgIHNldERpbWVuc2lvbihwYXJhbS5rZXksIHJhdyk7CiAgfQoKICBmdW5jdGlvbiBzZXREaWZmaWN1bHR5KHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPj0gMSAmJiB2YWx1ZSA8PSA1KSB7CiAgICAgIHN0YXRlLmRpZmZpY3VsdHkgPSB2YWx1ZTsKICAgICAgaWYgKHN0YXRlLmN1cnJlbnRNb2RlICE9PSAiZXhwbG9yZSIgJiYgc3RhdGUuY3VycmVudE1vZGUgIT09ICJzY29yZSIpIHsKICAgICAgICBjcmVhdGVOZXh0VGFzaygpOwogICAgICB9CiAgICAgIHJlbmRlckFwcCgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gY3JlYXRlTmV4dFRhc2soKSB7CiAgICBzdGF0ZS5tb2RlVGFza051bWJlciArPSAxOwogICAgc3RhdGUuYXR0ZW1wdHMgPSAwOwogICAgc3RhdGUuYW5zd2VyTG9ja2VkID0gZmFsc2U7CiAgICBzdGF0ZS5jaG9zZW5BbnN3ZXIgPSAtMTsKICAgIHN0YXRlLmN1cnJlbnRUYXNrID0gZ2VuZXJhdGVUYXNrKHN0YXRlLmN1cnJlbnRNb2RlLCBzdGF0ZS5kaWZmaWN1bHR5KTsKICAgIGlmIChzdGF0ZS5jdXJyZW50VGFzayAmJiBzdGF0ZS5jdXJyZW50VGFzay5zaGFwZUlkKSB7CiAgICAgIHN0YXRlLnNlbGVjdGVkU2hhcGUgPSBzdGF0ZS5jdXJyZW50VGFzay5zaGFwZUlkOwogICAgfQogIH0KCiAgZnVuY3Rpb24gZ2VuZXJhdGVUYXNrKGNhdGVnb3J5LCBkaWZmaWN1bHR5KSB7CiAgICB2YXIgc2V0dGluZyA9IG1vZGVTZXR0aW5nc1tjYXRlZ29yeV0gfHwgbW9kZVNldHRpbmdzLmV4YW07CiAgICB2YXIgYWxsb3dlZCA9IHRhc2tGYWN0b3JpZXMuZmlsdGVyKGZ1bmN0aW9uIChmYWN0b3J5KSB7CiAgICAgIHJldHVybiBzZXR0aW5nLmZpbHRlcnMuaW5kZXhPZihmYWN0b3J5LnNraWxsKSA+PSAwOwogICAgfSk7CiAgICBpZiAoc2V0dGluZy5wcmVmZXJyZWRTaGFwZXMubGVuZ3RoID4gMCkgewogICAgICB2YXIgc2hhcGVGaWx0ZXJlZCA9IGFsbG93ZWQuZmlsdGVyKGZ1bmN0aW9uIChmYWN0b3J5KSB7CiAgICAgICAgcmV0dXJuIHNldHRpbmcucHJlZmVycmVkU2hhcGVzLmluZGV4T2YoZmFjdG9yeS5zaGFwZUlkKSA+PSAwOwogICAgICB9KTsKICAgICAgaWYgKHNoYXBlRmlsdGVyZWQubGVuZ3RoID4gMCkgewogICAgICAgIGFsbG93ZWQgPSBzaGFwZUZpbHRlcmVkOwogICAgICB9CiAgICB9CiAgICB2YXIgbmVhciA9IGFsbG93ZWQuZmlsdGVyKGZ1bmN0aW9uIChmYWN0b3J5KSB7CiAgICAgIHJldHVybiBmYWN0b3J5Lm1pbkRpZmZpY3VsdHkgPD0gZGlmZmljdWx0eSAmJiBmYWN0b3J5Lm1heERpZmZpY3VsdHkgPj0gZGlmZmljdWx0eTsKICAgIH0pOwogICAgaWYgKG5lYXIubGVuZ3RoID4gMCkgewogICAgICBhbGxvd2VkID0gbmVhcjsKICAgIH0KICAgIHZhciBmYWN0b3J5ID0gcGljayhhbGxvd2VkLmxlbmd0aCA+IDAgPyBhbGxvd2VkIDogdGFza0ZhY3Rvcmllcyk7CiAgICB2YXIgdGFzayA9IGZhY3RvcnkubWFrZShkaWZmaWN1bHR5KTsKICAgIHRhc2suc2tpbGwgPSBmYWN0b3J5LnNraWxsOwogICAgdGFzay5zaGFwZUlkID0gZmFjdG9yeS5zaGFwZUlkOwogICAgdGFzay5kaWZmaWN1bHR5ID0gTWF0aC5tYXgoMSwgTWF0aC5taW4oNSwgdGFzay5kaWZmaWN1bHR5IHx8IGRpZmZpY3VsdHkpKTsKICAgIHRhc2sucG9pbnRzID0gdGFzay5wb2ludHMgfHwgcG9pbnRzRm9yRGlmZmljdWx0eSh0YXNrLmRpZmZpY3VsdHkpOwogICAgcmV0dXJuIHRhc2s7CiAgfQoKICBmdW5jdGlvbiBjcmVhdGVNdWx0aXBsZUNob2ljZVRhc2soKSB7CiAgICByZXR1cm4gZ2VuZXJhdGVUYXNrKHN0YXRlLmN1cnJlbnRNb2RlLCBzdGF0ZS5kaWZmaWN1bHR5KTsKICB9CgogIGZ1bmN0aW9uIGNyZWF0ZUZvcm11bGFUYXNrKCkgewogICAgcmV0dXJuIHBpY2sodGFza0ZhY3Rvcmllcy5maWx0ZXIoZnVuY3Rpb24gKGZhY3RvcnkpIHsgcmV0dXJuIGZhY3Rvcnkuc2tpbGwgPT09ICJGb3JtZWxuIjsgfSkpLm1ha2Uoc3RhdGUuZGlmZmljdWx0eSk7CiAgfQoKICBmdW5jdGlvbiBjcmVhdGVVbml0VGFzaygpIHsKICAgIHJldHVybiBwaWNrKHRhc2tGYWN0b3JpZXMuZmlsdGVyKGZ1bmN0aW9uIChmYWN0b3J5KSB7IHJldHVybiBmYWN0b3J5LnNraWxsID09PSAiRWluaGVpdGVuIjsgfSkpLm1ha2Uoc3RhdGUuZGlmZmljdWx0eSk7CiAgfQoKICBmdW5jdGlvbiBjcmVhdGVDaGFuZ2VUYXNrKCkgewogICAgdmFyIGxpc3QgPSB0YXNrRmFjdG9yaWVzLmZpbHRlcihmdW5jdGlvbiAoZmFjdG9yeSkgeyByZXR1cm4gZmFjdG9yeS50aXRsZSA9PT0gIlZlcsOkbmRlcnVuZyIgfHwgZmFjdG9yeS5za2lsbCA9PT0gIlN0cmF0ZWdpZSI7IH0pOwogICAgcmV0dXJuIHBpY2sobGlzdCkubWFrZShzdGF0ZS5kaWZmaWN1bHR5KTsKICB9CgogIGZ1bmN0aW9uIGNoZWNrQW5zd2VyKGluZGV4KSB7CiAgICB2YXIgdGFzayA9IHN0YXRlLmN1cnJlbnRUYXNrOwogICAgaWYgKCF0YXNrIHx8IHRhc2sua2luZCAhPT0gImNob2ljZSIgfHwgc3RhdGUuYW5zd2VyTG9ja2VkKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHN0YXRlLmNob3NlbkFuc3dlciA9IGluZGV4OwogICAgaWYgKGluZGV4ID09PSB0YXNrLmNvcnJlY3RJbmRleCkgewogICAgICBmaW5pc2hUYXNrKHRydWUpOwogICAgfSBlbHNlIHsKICAgICAgaGFuZGxlV3JvbmdBbnN3ZXIoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGNoZWNrTnVtYmVyQW5zd2VyKCkgewogICAgdmFyIHRhc2sgPSBzdGF0ZS5jdXJyZW50VGFzazsKICAgIGlmICghdGFzayB8fCB0YXNrLmtpbmQgIT09ICJudW1iZXIiIHx8IHN0YXRlLmFuc3dlckxvY2tlZCkgewogICAgICByZXR1cm47CiAgICB9CiAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibnVtYmVyQW5zd2VyIik7CiAgICB2YXIgcmF3ID0gaW5wdXQgPyBpbnB1dC52YWx1ZSA6ICIiOwogICAgdGFzay5sYXN0SW5wdXQgPSByYXc7CiAgICB2YXIgcGFyc2VkID0gcGFyc2VHZXJtYW5OdW1iZXIocmF3KTsKICAgIHZhciB0b2xlcmFuY2UgPSB0YXNrLnRvbGVyYW5jZSA9PT0gdW5kZWZpbmVkID8gMC4wNSA6IHRhc2sudG9sZXJhbmNlOwogICAgaWYgKE51bWJlci5pc0Zpbml0ZShwYXJzZWQpICYmIE1hdGguYWJzKHBhcnNlZCAtIHRhc2suY29ycmVjdE51bWJlcikgPD0gdG9sZXJhbmNlKSB7CiAgICAgIGZpbmlzaFRhc2sodHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICBoYW5kbGVXcm9uZ0Fuc3dlcigpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gaGFuZGxlV3JvbmdBbnN3ZXIoKSB7CiAgICBzdGF0ZS5hdHRlbXB0cyArPSAxOwogICAgc3RhdGUuc3RyZWFrID0gMDsKICAgIGlmIChzdGF0ZS5hdHRlbXB0cyA+PSAyKSB7CiAgICAgIGZpbmlzaFRhc2soZmFsc2UpOwogICAgfSBlbHNlIHsKICAgICAgcmVuZGVyVGFzaygpOwogICAgICByZW5kZXJEYXNoYm9hcmQoKTsKICAgICAgcmVuZGVyU2NvcmUoKTsKICAgICAgc2hvd1RvYXN0KCJEYXMgd2FyIG5vY2ggbmljaHQgcmljaHRpZy4gRHUgYmVrb21tc3QgZWluZSB6d2VpdGUgQ2hhbmNlLiIpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gZmluaXNoVGFzayhzdWNjZXNzKSB7CiAgICB2YXIgdGFzayA9IHN0YXRlLmN1cnJlbnRUYXNrOwogICAgdGFzay5zb2x2ZWQgPSBzdWNjZXNzOwogICAgc3RhdGUuYW5zd2VyTG9ja2VkID0gdHJ1ZTsKICAgIHN0YXRlLmNvbXBsZXRlZFRhc2tzICs9IDE7CiAgICBpZiAoc3VjY2VzcykgewogICAgICBzdGF0ZS5jb3JyZWN0SW5Nb2RlICs9IDE7CiAgICAgIHN0YXRlLnN0cmVhayArPSAxOwogICAgICB2YXIgZ2FpbmVkID0gc3RhdGUuYXR0ZW1wdHMgPT09IDAgPyB0YXNrLnBvaW50cyA6IE1hdGgubWF4KDEsIE1hdGgucm91bmQodGFzay5wb2ludHMgKiAwLjU1KSk7CiAgICAgIGlmIChzdGF0ZS5zdHJlYWsgPiAwICYmIHN0YXRlLnN0cmVhayAlIDQgPT09IDApIHsKICAgICAgICBnYWluZWQgKz0gMzsKICAgICAgfQogICAgICBzdGF0ZS5zY29yZSArPSBnYWluZWQ7CiAgICAgIHN0YXRlLmNhdGVnb3J5U2NvcmVzW3Rhc2suc2tpbGxdID0gKHN0YXRlLmNhdGVnb3J5U2NvcmVzW3Rhc2suc2tpbGxdIHx8IDApICsgZ2FpbmVkOwogICAgICBzaG93VG9hc3QoIlJpY2h0aWc6ICsiICsgU3RyaW5nKGdhaW5lZCkgKyAiIFB1bmt0ZSBmw7xyICIgKyB0YXNrLnNraWxsICsgIi4iKTsKICAgIH0gZWxzZSB7CiAgICAgIHNob3dUb2FzdCgiS2VpbmUgUHVua3RlLCBhYmVyIGVpbmUgRXJrbMOkcnVuZy4gV2VpdGVyIGdlaHQgZXMgbWl0IGRlciBuw6RjaHN0ZW4gQXVmZ2FiZS4iKTsKICAgIH0KICAgIGlmIChzdGF0ZS5jb21wbGV0ZWRUYXNrcyA+IDAgJiYgc3RhdGUuY29tcGxldGVkVGFza3MgJSA1ID09PSAwKSB7CiAgICAgIHN0YXRlLmRpZmZpY3VsdHkgPSBNYXRoLm1pbig1LCBzdGF0ZS5kaWZmaWN1bHR5ICsgMSk7CiAgICB9CiAgICByZW5kZXJEYXNoYm9hcmQoKTsKICAgIHJlbmRlclRhc2soKTsKICAgIHJlbmRlclNjb3JlKCk7CiAgfQoKICBmdW5jdGlvbiBuZXh0VGFzaygpIHsKICAgIGlmIChzdGF0ZS5jdXJyZW50TW9kZSA9PT0gImV4cGxvcmUiKSB7CiAgICAgIHJlbmRlckV4cGxvcmVUYXNrKCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChzdGF0ZS5jdXJyZW50TW9kZSA9PT0gInNjb3JlIikgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoIXN0YXRlLmFuc3dlckxvY2tlZCkgewogICAgICBzaG93VG9hc3QoIkJpdHRlIGzDtnNlIGRpZSBha3R1ZWxsZSBBdWZnYWJlIHp1ZXJzdC4iKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIHNldHRpbmcgPSBtb2RlU2V0dGluZ3Nbc3RhdGUuY3VycmVudE1vZGVdOwogICAgaWYgKHNldHRpbmcuZ29hbCA+IDAgJiYgc3RhdGUubW9kZVRhc2tOdW1iZXIgPj0gc2V0dGluZy5nb2FsKSB7CiAgICAgIHNob3dFbmRTY3JlZW4oKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY3JlYXRlTmV4dFRhc2soKTsKICAgIHJlbmRlckFwcCgpOwogIH0KCiAgZnVuY3Rpb24gc2hvd0hpbnQoKSB7CiAgICBpZiAoc3RhdGUuY3VycmVudE1vZGUgPT09ICJleHBsb3JlIikgewogICAgICBlbGVtZW50cy5mZWVkYmFja0JveC5jbGFzc05hbWUgPSAiZmVlZGJhY2stYm94IHdhcm4iOwogICAgICBlbGVtZW50cy5mZWVkYmFja0JveC50ZXh0Q29udGVudCA9ICJUaXBwOiBWZXLDpG5kZXJlIG51ciBlaW4gTWHDny4gRGFubiBlcmtlbm5zdCBkdSBsZWljaHRlciwgb2Igc2ljaCBVbWZhbmcsIEZsw6RjaGUgb2RlciBWb2x1bWVuIGdsZWljaG3DpMOfaWcgb2RlciBzdMOkcmtlciB2ZXLDpG5kZXJ0LiI7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghc3RhdGUuY3VycmVudFRhc2sgfHwgc3RhdGUuYW5zd2VyTG9ja2VkKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGVsZW1lbnRzLmZlZWRiYWNrQm94LmNsYXNzTmFtZSA9ICJmZWVkYmFjay1ib3ggd2FybiI7CiAgICBlbGVtZW50cy5mZWVkYmFja0JveC50ZXh0Q29udGVudCA9ICJUaXBwOiAiICsgc3RhdGUuY3VycmVudFRhc2suaGludDsKICB9CgogIGZ1bmN0aW9uIGV4cGxhaW5Tb2x1dGlvbigpIHsKICAgIGlmICghc3RhdGUuY3VycmVudFRhc2spIHsKICAgICAgcmV0dXJuICIiOwogICAgfQogICAgcmV0dXJuIHN0YXRlLmN1cnJlbnRUYXNrLmV4cGxhbmF0aW9uOwogIH0KCiAgZnVuY3Rpb24gc2hvd0VuZFNjcmVlbigpIHsKICAgIHN0YXRlLmN1cnJlbnRTY3JlZW4gPSAiZW5kIjsKICAgIGVsZW1lbnRzLm1lbnVTY3JlZW4uaGlkZGVuID0gdHJ1ZTsKICAgIGVsZW1lbnRzLnBsYXlTY3JlZW4uaGlkZGVuID0gdHJ1ZTsKICAgIGVsZW1lbnRzLmVuZFNjcmVlbi5oaWRkZW4gPSBmYWxzZTsKICAgIHZhciBzZXR0aW5nID0gbW9kZVNldHRpbmdzW3N0YXRlLmN1cnJlbnRNb2RlXTsKICAgIHZhciBnb2FsID0gc2V0dGluZy5nb2FsIHx8IHN0YXRlLm1vZGVUYXNrTnVtYmVyOwogICAgdmFyIHBlcmNlbnQgPSBnb2FsID4gMCA/IE1hdGgucm91bmQoc3RhdGUuY29ycmVjdEluTW9kZSAvIGdvYWwgKiAxMDApIDogMDsKICAgIGVsZW1lbnRzLmVuZFN1bW1hcnkudGV4dENvbnRlbnQgPSAiRHUgaGFzdCAiICsgU3RyaW5nKHN0YXRlLmNvcnJlY3RJbk1vZGUpICsgIiB2b24gIiArIFN0cmluZyhnb2FsKSArICIgQXVmZ2FiZW4gcmljaHRpZyBnZWzDtnN0LiBUcmVmZmVycXVvdGU6ICIgKyBTdHJpbmcocGVyY2VudCkgKyAiICUuIEdlc2FtdHB1bmt0ZTogIiArIFN0cmluZyhzdGF0ZS5zY29yZSkgKyAiLiI7CiAgICBlbGVtZW50cy5lbmRTY29yZXMucmVwbGFjZUNoaWxkcmVuKCk7CiAgICBjYXRlZ29yaWVzLmZvckVhY2goZnVuY3Rpb24gKGNhdGVnb3J5KSB7CiAgICAgIHZhciB0aWxlID0gbWFrZU5vZGUoImRpdiIsICJlbmQtc2NvcmUiKTsKICAgICAgdmFyIGxhYmVsID0gbWFrZU5vZGUoInNwYW4iLCAiIiwgY2F0ZWdvcnkpOwogICAgICB2YXIgdmFsdWUgPSBtYWtlTm9kZSgic3Ryb25nIiwgIiIsIFN0cmluZyhzdGF0ZS5jYXRlZ29yeVNjb3Jlc1tjYXRlZ29yeV0gfHwgMCkgKyAiIFAiKTsKICAgICAgdGlsZS5hcHBlbmRDaGlsZChsYWJlbCk7CiAgICAgIHRpbGUuYXBwZW5kQ2hpbGQodmFsdWUpOwogICAgICBlbGVtZW50cy5lbmRTY29yZXMuYXBwZW5kQ2hpbGQodGlsZSk7CiAgICB9KTsKICAgIGVsZW1lbnRzLmVuZEFkdmljZS50ZXh0Q29udGVudCA9IGJ1aWxkQWR2aWNlKCk7CiAgfQoKICBmdW5jdGlvbiB0b2dnbGVGdWxsU2NyZWVuKCkgewogICAgdmFyIHJvb3QgPSBlbGVtZW50cy5yb290OwogICAgaWYgKGRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50ICYmIGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKSB7CiAgICAgIGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKCkudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgcm9vdC5jbGFzc0xpc3QucmVtb3ZlKCJzb2Z0LWZ1bGwiKTsKICAgICAgICBzaG93VG9hc3QoIlZvbGxiaWxkIGJlZW5kZXQuIik7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHsKICAgICAgICByb290LmNsYXNzTGlzdC5yZW1vdmUoInNvZnQtZnVsbCIpOwogICAgICAgIHNob3dUb2FzdCgiQXBwLVZvbGxiaWxkIGJlZW5kZXQuIik7CiAgICAgIH0pOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAocm9vdC5yZXF1ZXN0RnVsbHNjcmVlbikgewogICAgICByb290LnJlcXVlc3RGdWxsc2NyZWVuKCkudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgc2hvd1RvYXN0KCJWb2xsYmlsZCBha3Rpdi4iKTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkgewogICAgICAgIHJvb3QuY2xhc3NMaXN0LnRvZ2dsZSgic29mdC1mdWxsIik7CiAgICAgICAgc2hvd1RvYXN0KHJvb3QuY2xhc3NMaXN0LmNvbnRhaW5zKCJzb2Z0LWZ1bGwiKSA/ICJBcHAtVm9sbGJpbGQgYWt0aXYuIiA6ICJBcHAtVm9sbGJpbGQgYmVlbmRldC4iKTsKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICByb290LmNsYXNzTGlzdC50b2dnbGUoInNvZnQtZnVsbCIpOwogICAgICBzaG93VG9hc3Qocm9vdC5jbGFzc0xpc3QuY29udGFpbnMoInNvZnQtZnVsbCIpID8gIkFwcC1Wb2xsYmlsZCBha3Rpdi4iIDogIkFwcC1Wb2xsYmlsZCBiZWVuZGV0LiIpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gc2hvd1RvYXN0KG1lc3NhZ2UpIHsKICAgIGVsZW1lbnRzLnRvYXN0LnRleHRDb250ZW50ID0gbWVzc2FnZTsKICAgIGVsZW1lbnRzLnRvYXN0LmNsYXNzTGlzdC5hZGQoInNob3ciKTsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICBlbGVtZW50cy50b2FzdC5jbGFzc0xpc3QucmVtb3ZlKCJzaG93Iik7CiAgICB9LCAyMjAwKTsKICB9CgogIGZ1bmN0aW9uIGNhbGNTcXVhcmUoZCkgewogICAgdmFyIHUgPSA0ICogZC5hOwogICAgdmFyIGEgPSBkLmEgKiBkLmE7CiAgICByZXR1cm4gewogICAgICBwZXJpbWV0ZXI6IHUsCiAgICAgIGFyZWE6IGEsCiAgICAgIGZvcm11bGFzOiBbCiAgICAgICAgeyBuYW1lOiAiVW1mYW5nIiwgZ2VuZXJhbDogIlUgPSA0IMK3IGEiLCBsaW5lOiAiVSA9IDQgwrcgIiArIG4oZC5hKSArICIgPSAiICsgbih1KSArICIgY20iLCB1bml0OiAiY20iLCBub3RlOiAiQWxsZSB2aWVyIFNlaXRlbiBzaW5kIGdsZWljaCBsYW5nLiBEZXNoYWxiIHdpcmQgYSB2aWVybWFsIGdlesOkaGx0LiIgfSwKICAgICAgICB7IG5hbWU6ICJGbMOkY2hlbmluaGFsdCIsIGdlbmVyYWw6ICJBID0gYSDCtyBhIiwgbGluZTogIkEgPSAiICsgbihkLmEpICsgIiDCtyAiICsgbihkLmEpICsgIiA9ICIgKyBuKGEpICsgIiBjbcKyIiwgdW5pdDogImNtwrIiLCBub3RlOiAiRGFzIFF1YWRyYXQgaGF0IGEgUmVpaGVuIHVuZCBhIFNwYWx0ZW4uIERhcnVtIGVudHN0ZWhlbiBRdWFkcmF0emVudGltZXRlci4iIH0KICAgICAgXQogICAgfTsKICB9CgogIGZ1bmN0aW9uIGNhbGNSZWN0YW5nbGUoZCkgewogICAgdmFyIHUgPSAyICogZC5hICsgMiAqIGQuYjsKICAgIHZhciBhID0gZC5hICogZC5iOwogICAgcmV0dXJuIHsKICAgICAgcGVyaW1ldGVyOiB1LAogICAgICBhcmVhOiBhLAogICAgICBmb3JtdWxhczogWwogICAgICAgIHsgbmFtZTogIlVtZmFuZyIsIGdlbmVyYWw6ICJVID0gMiDCtyBhICsgMiDCtyBiIiwgbGluZTogIlUgPSAyIMK3ICIgKyBuKGQuYSkgKyAiICsgMiDCtyAiICsgbihkLmIpICsgIiA9ICIgKyBuKHUpICsgIiBjbSIsIHVuaXQ6ICJjbSIsIG5vdGU6ICJMw6RuZ2UgdW5kIEJyZWl0ZSBrb21tZW4gYW0gUmFuZCBqZXdlaWxzIHp3ZWltYWwgdm9yLiIgfSwKICAgICAgICB7IG5hbWU6ICJGbMOkY2hlbmluaGFsdCIsIGdlbmVyYWw6ICJBID0gYSDCtyBiIiwgbGluZTogIkEgPSAiICsgbihkLmEpICsgIiDCtyAiICsgbihkLmIpICsgIiA9ICIgKyBuKGEpICsgIiBjbcKyIiwgdW5pdDogImNtwrIiLCBub3RlOiAiRGllIEZsw6RjaGUgesOkaGx0IEvDpHN0Y2hlbjogUmVpaGVuIG1hbCBTcGFsdGVuLiIgfQogICAgICBdCiAgICB9OwogIH0KCiAgZnVuY3Rpb24gY2FsY1RyaWFuZ2xlKGQpIHsKICAgIHZhciBhcmVhID0gZC5nICogZC5oIC8gMjsKICAgIHZhciBwZXJpbWV0ZXIgPSBkLmcgKyAyICogZC5zOwogICAgcmV0dXJuIHsKICAgICAgcGVyaW1ldGVyOiBwZXJpbWV0ZXIsCiAgICAgIGFyZWE6IGFyZWEsCiAgICAgIGZvcm11bGFzOiBbCiAgICAgICAgeyBuYW1lOiAiRmzDpGNoZW5pbmhhbHQiLCBnZW5lcmFsOiAiQSA9IGcgwrcgaCA6IDIiLCBsaW5lOiAiQSA9ICIgKyBuKGQuZykgKyAiIMK3ICIgKyBuKGQuaCkgKyAiIDogMiA9ICIgKyBuKGFyZWEpICsgIiBjbcKyIiwgdW5pdDogImNtwrIiLCBub3RlOiAiRGFzIERyZWllY2sgaXN0IGhhbGIgc28gZ3Jvw58gd2llIGRhcyBSZWNodGVjayBtaXQgZGVyc2VsYmVuIEdydW5kc2VpdGUgdW5kIEjDtmhlLiIgfSwKICAgICAgICB7IG5hbWU6ICJVbWZhbmciLCBnZW5lcmFsOiAiVSA9IGEgKyBiICsgYyIsIGxpbmU6ICJVID0gIiArIG4oZC5nKSArICIgKyAiICsgbihkLnMpICsgIiArICIgKyBuKGQucykgKyAiID0gIiArIG4ocGVyaW1ldGVyKSArICIgY20iLCB1bml0OiAiY20iLCBub3RlOiAiRsO8ciBkZW4gVW1mYW5nIHdlcmRlbiBkaWUgZHJlaSBSYW5kc2VpdGVuIGFkZGllcnQuIiB9CiAgICAgIF0KICAgIH07CiAgfQoKICBmdW5jdGlvbiBjYWxjUmlnaHRUcmlhbmdsZShkKSB7CiAgICB2YXIgYXJlYSA9IGQuYSAqIGQuYiAvIDI7CiAgICB2YXIgcGVyaW1ldGVyID0gZC5hICsgZC5iICsgZC5jOwogICAgcmV0dXJuIHsKICAgICAgcGVyaW1ldGVyOiBwZXJpbWV0ZXIsCiAgICAgIGFyZWE6IGFyZWEsCiAgICAgIGZvcm11bGFzOiBbCiAgICAgICAgeyBuYW1lOiAiRmzDpGNoZW5pbmhhbHQiLCBnZW5lcmFsOiAiQSA9IGEgwrcgYiA6IDIiLCBsaW5lOiAiQSA9ICIgKyBuKGQuYSkgKyAiIMK3ICIgKyBuKGQuYikgKyAiIDogMiA9ICIgKyBuKGFyZWEpICsgIiBjbcKyIiwgdW5pdDogImNtwrIiLCBub3RlOiAiRGllIHJlY2h0d2lua2xpZ2VuIFNlaXRlbiBiaWxkZW4gZWluIFJlY2h0ZWNrLiBEYXMgRHJlaWVjayBpc3QgZGF2b24gZGllIEjDpGxmdGUuIiB9LAogICAgICAgIHsgbmFtZTogIlVtZmFuZyIsIGdlbmVyYWw6ICJVID0gYSArIGIgKyBjIiwgbGluZTogIlUgPSAiICsgbihkLmEpICsgIiArICIgKyBuKGQuYikgKyAiICsgIiArIG4oZC5jKSArICIgPSAiICsgbihwZXJpbWV0ZXIpICsgIiBjbSIsIHVuaXQ6ICJjbSIsIG5vdGU6ICJBbGxlIGRyZWkgU2VpdGVuIGxpZWdlbiBhbSBSYW5kLiIgfQogICAgICBdCiAgICB9OwogIH0KCiAgZnVuY3Rpb24gY2FsY1BhcmFsbGVsb2dyYW0oZCkgewogICAgdmFyIGFyZWEgPSBkLmcgKiBkLmg7CiAgICB2YXIgcGVyaW1ldGVyID0gMiAqIGQuZyArIDIgKiBkLnM7CiAgICByZXR1cm4gewogICAgICBwZXJpbWV0ZXI6IHBlcmltZXRlciwKICAgICAgYXJlYTogYXJlYSwKICAgICAgZm9ybXVsYXM6IFsKICAgICAgICB7IG5hbWU6ICJGbMOkY2hlbmluaGFsdCIsIGdlbmVyYWw6ICJBID0gZyDCtyBoIiwgbGluZTogIkEgPSAiICsgbihkLmcpICsgIiDCtyAiICsgbihkLmgpICsgIiA9ICIgKyBuKGFyZWEpICsgIiBjbcKyIiwgdW5pdDogImNtwrIiLCBub3RlOiAiTmljaHQgZGllIHNjaHLDpGdlIFNlaXRlLCBzb25kZXJuIGRpZSBzZW5rcmVjaHRlIEjDtmhlIHrDpGhsdCBmw7xyIGRpZSBGbMOkY2hlLiIgfSwKICAgICAgICB7IG5hbWU6ICJVbWZhbmciLCBnZW5lcmFsOiAiVSA9IDIgwrcgZyArIDIgwrcgcyIsIGxpbmU6ICJVID0gMiDCtyAiICsgbihkLmcpICsgIiArIDIgwrcgIiArIG4oZC5zKSArICIgPSAiICsgbihwZXJpbWV0ZXIpICsgIiBjbSIsIHVuaXQ6ICJjbSIsIG5vdGU6ICJKZSB6d2VpIGdlZ2Vuw7xiZXJsaWVnZW5kZSBTZWl0ZW4gc2luZCBnbGVpY2ggbGFuZy4iIH0KICAgICAgXQogICAgfTsKICB9CgogIGZ1bmN0aW9uIGNhbGNSaG9tYnVzKGQpIHsKICAgIHZhciBhcmVhID0gZC5lICogZC5mIC8gMjsKICAgIHZhciBwZXJpbWV0ZXIgPSA0ICogZC5hOwogICAgcmV0dXJuIHsKICAgICAgcGVyaW1ldGVyOiBwZXJpbWV0ZXIsCiAgICAgIGFyZWE6IGFyZWEsCiAgICAgIGZvcm11bGFzOiBbCiAgICAgICAgeyBuYW1lOiAiVW1mYW5nIiwgZ2VuZXJhbDogIlUgPSA0IMK3IGEiLCBsaW5lOiAiVSA9IDQgwrcgIiArIG4oZC5hKSArICIgPSAiICsgbihwZXJpbWV0ZXIpICsgIiBjbSIsIHVuaXQ6ICJjbSIsIG5vdGU6ICJBbGxlIHZpZXIgU2VpdGVuIGVpbmVyIFJhdXRlIHNpbmQgZ2xlaWNoIGxhbmcuIiB9LAogICAgICAgIHsgbmFtZTogIkZsw6RjaGVuaW5oYWx0IiwgZ2VuZXJhbDogIkEgPSBlIMK3IGYgOiAyIiwgbGluZTogIkEgPSAiICsgbihkLmUpICsgIiDCtyAiICsgbihkLmYpICsgIiA6IDIgPSAiICsgbihhcmVhKSArICIgY23CsiIsIHVuaXQ6ICJjbcKyIiwgbm90ZTogIkRpZSBEaWFnb25hbGVuIHplcmxlZ2VuIGRpZSBSYXV0ZSBpbiBwYXNzZW5kZSBEcmVpZWNrZS4iIH0KICAgICAgXQogICAgfTsKICB9CgogIGZ1bmN0aW9uIGNhbGNUcmFwZXpvaWQoZCkgewogICAgdmFyIGFyZWEgPSAoZC5hICsgZC5jKSAqIGQuaCAvIDI7CiAgICB2YXIgcGVyaW1ldGVyID0gZC5hICsgZC5jICsgMiAqIGQuczsKICAgIHJldHVybiB7CiAgICAgIHBlcmltZXRlcjogcGVyaW1ldGVyLAogICAgICBhcmVhOiBhcmVhLAogICAgICBmb3JtdWxhczogWwogICAgICAgIHsgbmFtZTogIkZsw6RjaGVuaW5oYWx0IiwgZ2VuZXJhbDogIkEgPSAoYSArIGMpIMK3IGggOiAyIiwgbGluZTogIkEgPSAoIiArIG4oZC5hKSArICIgKyAiICsgbihkLmMpICsgIikgwrcgIiArIG4oZC5oKSArICIgOiAyID0gIiArIG4oYXJlYSkgKyAiIGNtwrIiLCB1bml0OiAiY23CsiIsIG5vdGU6ICJEaWUgcGFyYWxsZWxlbiBTZWl0ZW4gYSB1bmQgYyB3ZXJkZW4genVlcnN0IHp1c2FtbWVuIGJldHJhY2h0ZXQuIiB9LAogICAgICAgIHsgbmFtZTogIlVtZmFuZyIsIGdlbmVyYWw6ICJVID0gYSArIGIgKyBjICsgZCIsIGxpbmU6ICJVID0gIiArIG4oZC5hKSArICIgKyAiICsgbihkLnMpICsgIiArICIgKyBuKGQuYykgKyAiICsgIiArIG4oZC5zKSArICIgPSAiICsgbihwZXJpbWV0ZXIpICsgIiBjbSIsIHVuaXQ6ICJjbSIsIG5vdGU6ICJCZWltIFVtZmFuZyB6w6RobHQgZGVyIGdhbnplIFJhbmQuIiB9CiAgICAgIF0KICAgIH07CiAgfQoKICBmdW5jdGlvbiBjYWxjQ29tcG9zaXRlKGQpIHsKICAgIHZhciBjdXRDID0gTWF0aC5taW4oZC5jLCBkLmEgLSAxKTsKICAgIHZhciBjdXREID0gTWF0aC5taW4oZC5kLCBkLmIgLSAxKTsKICAgIHZhciBhcmVhID0gZC5hICogZC5iIC0gY3V0QyAqIGN1dEQ7CiAgICB2YXIgcGVyaW1ldGVyID0gMiAqIGQuYSArIDIgKiBkLmI7CiAgICByZXR1cm4gewogICAgICBwZXJpbWV0ZXI6IHBlcmltZXRlciwKICAgICAgYXJlYTogYXJlYSwKICAgICAgZm9ybXVsYXM6IFsKICAgICAgICB7IG5hbWU6ICJGbMOkY2hlbmluaGFsdCIsIGdlbmVyYWw6ICJBID0gYSDCtyBiIC0gYyDCtyBkIiwgbGluZTogIkEgPSAiICsgbihkLmEpICsgIiDCtyAiICsgbihkLmIpICsgIiAtICIgKyBuKGN1dEMpICsgIiDCtyAiICsgbihjdXREKSArICIgPSAiICsgbihhcmVhKSArICIgY23CsiIsIHVuaXQ6ICJjbcKyIiwgbm90ZTogIkVyZ8OkbnplIHp1bSBncm/Dn2VuIFJlY2h0ZWNrIHVuZCB6aWVoZSBkZW4gZmVobGVuZGVuIEF1c3NjaG5pdHQgYWIuIiB9LAogICAgICAgIHsgbmFtZTogIlN0cmF0ZWdpZSIsIGdlbmVyYWw6ICJaZXJsZWdlbiBvZGVyIGVyZ8OkbnplbiIsIGxpbmU6ICJHcm/Dn2VzIFJlY2h0ZWNrOiAiICsgbihkLmEgKiBkLmIpICsgIiBjbcKyLCBBdXNzY2huaXR0OiAiICsgbihjdXRDICogY3V0RCkgKyAiIGNtwrIiLCB1bml0OiAiY23CsiIsIG5vdGU6ICJCZWlkZSBXZWdlIHNpbmQgZXJsYXVidCwgd2ljaHRpZyBpc3QgZWluIMO8YmVyc2ljaHRsaWNoZXIgUGxhbi4iIH0KICAgICAgXQogICAgfTsKICB9CgogIGZ1bmN0aW9uIGNhbGNDaXJjbGUoZCkgewogICAgdmFyIHBlcmltZXRlciA9IDIgKiBQSSAqIGQucjsKICAgIHZhciBhcmVhID0gUEkgKiBkLnIgKiBkLnI7CiAgICByZXR1cm4gewogICAgICBwZXJpbWV0ZXI6IHBlcmltZXRlciwKICAgICAgYXJlYTogYXJlYSwKICAgICAgZm9ybXVsYXM6IFsKICAgICAgICB7IG5hbWU6ICJVbWZhbmciLCBnZW5lcmFsOiAiVSA9IDIgwrcgz4AgwrcgciIsIGxpbmU6ICJVID0gMiDCtyAzLDE0IMK3ICIgKyBuKGQucikgKyAiID0gIiArIG4ocGVyaW1ldGVyKSArICIgY20iLCB1bml0OiAiY20iLCBub3RlOiAiQXVzYmxpY2s6IERlciBVbWZhbmcgbGllZ3QgYW0gS3JlaXNyYW5kLiDPgCBpc3QgdW5nZWbDpGhyIDMsMTQuIiB9LAogICAgICAgIHsgbmFtZTogIkZsw6RjaGVuaW5oYWx0IiwgZ2VuZXJhbDogIkEgPSDPgCDCtyBywrIiLCBsaW5lOiAiQSA9IDMsMTQgwrcgIiArIG4oZC5yKSArICLCsiA9ICIgKyBuKGFyZWEpICsgIiBjbcKyIiwgdW5pdDogImNtwrIiLCBub3RlOiAiRGVyIFJhZGl1cyBzdGVja3QgendlaW1hbCBpbiBywrIuIiB9CiAgICAgIF0KICAgIH07CiAgfQoKICBmdW5jdGlvbiBjYWxjQ3ViZShkKSB7CiAgICB2YXIgdm9sdW1lID0gZC5hICogZC5hICogZC5hOwogICAgdmFyIHN1cmZhY2UgPSA2ICogZC5hICogZC5hOwogICAgcmV0dXJuIHsKICAgICAgdm9sdW1lOiB2b2x1bWUsCiAgICAgIHN1cmZhY2U6IHN1cmZhY2UsCiAgICAgIGZvcm11bGFzOiBbCiAgICAgICAgeyBuYW1lOiAiVm9sdW1lbiIsIGdlbmVyYWw6ICJWID0gYSDCtyBhIMK3IGEiLCBsaW5lOiAiViA9ICIgKyBuKGQuYSkgKyAiIMK3ICIgKyBuKGQuYSkgKyAiIMK3ICIgKyBuKGQuYSkgKyAiID0gIiArIG4odm9sdW1lKSArICIgY23CsyIsIHVuaXQ6ICJjbcKzIiwgbm90ZTogIkR1IHrDpGhsc3QgRWluaGVpdHN3w7xyZmVsOiBMw6RuZ2UgbWFsIEJyZWl0ZSBtYWwgSMO2aGUuIiB9LAogICAgICAgIHsgbmFtZTogIk9iZXJmbMOkY2hlIGFscyBadXNhdHoiLCBnZW5lcmFsOiAiTyA9IDYgwrcgYSDCtyBhIiwgbGluZTogIk8gPSA2IMK3ICIgKyBuKGQuYSkgKyAiIMK3ICIgKyBuKGQuYSkgKyAiID0gIiArIG4oc3VyZmFjZSkgKyAiIGNtwrIiLCB1bml0OiAiY23CsiIsIG5vdGU6ICJEaWUgT2JlcmZsw6RjaGUgYmVzdGVodCBhdXMgc2VjaHMgUXVhZHJhdGZsw6RjaGVuLiIgfQogICAgICBdCiAgICB9OwogIH0KCiAgZnVuY3Rpb24gY2FsY0N1Ym9pZChkKSB7CiAgICB2YXIgdm9sdW1lID0gZC5sICogZC5iICogZC5oOwogICAgdmFyIHN1cmZhY2UgPSAyICogKGQubCAqIGQuYiArIGQubCAqIGQuaCArIGQuYiAqIGQuaCk7CiAgICByZXR1cm4gewogICAgICB2b2x1bWU6IHZvbHVtZSwKICAgICAgc3VyZmFjZTogc3VyZmFjZSwKICAgICAgZm9ybXVsYXM6IFsKICAgICAgICB7IG5hbWU6ICJWb2x1bWVuIiwgZ2VuZXJhbDogIlYgPSBsIMK3IGIgwrcgaCIsIGxpbmU6ICJWID0gIiArIG4oZC5sKSArICIgwrcgIiArIG4oZC5iKSArICIgwrcgIiArIG4oZC5oKSArICIgPSAiICsgbih2b2x1bWUpICsgIiBjbcKzIiwgdW5pdDogImNtwrMiLCBub3RlOiAiRGllIEdydW5kZmzDpGNoZSBsIMK3IGIgd2lyZCBoLW1hbCBnZXN0YXBlbHQuIiB9LAogICAgICAgIHsgbmFtZTogIk9iZXJmbMOkY2hlIGFscyBadXNhdHoiLCBnZW5lcmFsOiAiTyA9IDIgwrcgKGzCt2IgKyBswrdoICsgYsK3aCkiLCBsaW5lOiAiTyA9IDIgwrcgKCIgKyBuKGQubCAqIGQuYikgKyAiICsgIiArIG4oZC5sICogZC5oKSArICIgKyAiICsgbihkLmIgKiBkLmgpICsgIikgPSAiICsgbihzdXJmYWNlKSArICIgY23CsiIsIHVuaXQ6ICJjbcKyIiwgbm90ZTogIkplIHp3ZWkgZ2VnZW7DvGJlcmxpZWdlbmRlIFJlY2h0ZWNrc2Zsw6RjaGVuIHNpbmQgZ2xlaWNoIGdyb8OfLiIgfQogICAgICBdCiAgICB9OwogIH0KCiAgZnVuY3Rpb24gY2FsY1ByaXNtKGQpIHsKICAgIHZhciBiYXNlID0gZC5nICogZC5oIC8gMjsKICAgIHZhciB2b2x1bWUgPSBiYXNlICogZC5rOwogICAgcmV0dXJuIHsKICAgICAgYmFzZUFyZWE6IGJhc2UsCiAgICAgIHZvbHVtZTogdm9sdW1lLAogICAgICBmb3JtdWxhczogWwogICAgICAgIHsgbmFtZTogIkdydW5kZmzDpGNoZSIsIGdlbmVyYWw6ICJHID0gZyDCtyBoIDogMiIsIGxpbmU6ICJHID0gIiArIG4oZC5nKSArICIgwrcgIiArIG4oZC5oKSArICIgOiAyID0gIiArIG4oYmFzZSkgKyAiIGNtwrIiLCB1bml0OiAiY23CsiIsIG5vdGU6ICJEaWUgR3J1bmRmbMOkY2hlIGlzdCBoaWVyIGVpbiBEcmVpZWNrLiIgfSwKICAgICAgICB7IG5hbWU6ICJWb2x1bWVuIiwgZ2VuZXJhbDogIlYgPSBHIMK3IGsiLCBsaW5lOiAiViA9ICIgKyBuKGJhc2UpICsgIiDCtyAiICsgbihkLmspICsgIiA9ICIgKyBuKHZvbHVtZSkgKyAiIGNtwrMiLCB1bml0OiAiY23CsyIsIG5vdGU6ICJEaWUgR3J1bmRmbMOkY2hlIHdpcmQgayBjbSBpbiBkaWUgVGllZmUgZ2VzdGFwZWx0LiIgfQogICAgICBdCiAgICB9OwogIH0KCiAgZnVuY3Rpb24gY2FsY0N5bGluZGVyKGQpIHsKICAgIHZhciBiYXNlID0gUEkgKiBkLnIgKiBkLnI7CiAgICB2YXIgdm9sdW1lID0gYmFzZSAqIGQuaDsKICAgIHJldHVybiB7CiAgICAgIGJhc2VBcmVhOiBiYXNlLAogICAgICB2b2x1bWU6IHZvbHVtZSwKICAgICAgZm9ybXVsYXM6IFsKICAgICAgICB7IG5hbWU6ICJHcnVuZGZsw6RjaGUiLCBnZW5lcmFsOiAiRyA9IM+AIMK3IHLCsiIsIGxpbmU6ICJHID0gMywxNCDCtyAiICsgbihkLnIpICsgIsKyID0gIiArIG4oYmFzZSkgKyAiIGNtwrIiLCB1bml0OiAiY23CsiIsIG5vdGU6ICJBdXNibGljazogRGllIEdydW5kZmzDpGNoZSBpc3QgZWluIEtyZWlzLiIgfSwKICAgICAgICB7IG5hbWU6ICJWb2x1bWVuIiwgZ2VuZXJhbDogIlYgPSDPgCDCtyBywrIgwrcgaCIsIGxpbmU6ICJWID0gIiArIG4oYmFzZSkgKyAiIMK3ICIgKyBuKGQuaCkgKyAiID0gIiArIG4odm9sdW1lKSArICIgY23CsyIsIHVuaXQ6ICJjbcKzIiwgbm90ZTogIkRlciBLcmVpcyB3aXJkIHdpZSBlaW5lIFJvbGxlIGluIGRpZSBIw7ZoZSBnZXN0YXBlbHQuIiB9CiAgICAgIF0KICAgIH07CiAgfQoKICBmdW5jdGlvbiBjYWxjUHlyYW1pZChkKSB7CiAgICB2YXIgYmFzZSA9IGQuYSAqIGQuYTsKICAgIHZhciB2b2x1bWUgPSBiYXNlICogZC5oIC8gMzsKICAgIHJldHVybiB7CiAgICAgIGJhc2VBcmVhOiBiYXNlLAogICAgICB2b2x1bWU6IHZvbHVtZSwKICAgICAgZm9ybXVsYXM6IFsKICAgICAgICB7IG5hbWU6ICJHcnVuZGZsw6RjaGUiLCBnZW5lcmFsOiAiRyA9IGEgwrcgYSIsIGxpbmU6ICJHID0gIiArIG4oZC5hKSArICIgwrcgIiArIG4oZC5hKSArICIgPSAiICsgbihiYXNlKSArICIgY23CsiIsIHVuaXQ6ICJjbcKyIiwgbm90ZTogIkF1c2JsaWNrOiBEaWUgR3J1bmRmbMOkY2hlIGlzdCBlaW4gUXVhZHJhdC4iIH0sCiAgICAgICAgeyBuYW1lOiAiVm9sdW1lbiIsIGdlbmVyYWw6ICJWID0gRyDCtyBoIDogMyIsIGxpbmU6ICJWID0gIiArIG4oYmFzZSkgKyAiIMK3ICIgKyBuKGQuaCkgKyAiIDogMyA9ICIgKyBuKHZvbHVtZSkgKyAiIGNtwrMiLCB1bml0OiAiY23CsyIsIG5vdGU6ICJJbSBWZXJnbGVpY2ggenVtIFByaXNtYSBtaXQgZ2xlaWNoZXIgR3J1bmRmbMOkY2hlIHVuZCBIw7ZoZSB3aXJkIGR1cmNoIDMgZ2V0ZWlsdC4iIH0KICAgICAgXQogICAgfTsKICB9CgogIGZ1bmN0aW9uIGNhbGNDb25lKGQpIHsKICAgIHZhciBiYXNlID0gUEkgKiBkLnIgKiBkLnI7CiAgICB2YXIgdm9sdW1lID0gYmFzZSAqIGQuaCAvIDM7CiAgICByZXR1cm4gewogICAgICBiYXNlQXJlYTogYmFzZSwKICAgICAgdm9sdW1lOiB2b2x1bWUsCiAgICAgIGZvcm11bGFzOiBbCiAgICAgICAgeyBuYW1lOiAiR3J1bmRmbMOkY2hlIiwgZ2VuZXJhbDogIkcgPSDPgCDCtyBywrIiLCBsaW5lOiAiRyA9IDMsMTQgwrcgIiArIG4oZC5yKSArICLCsiA9ICIgKyBuKGJhc2UpICsgIiBjbcKyIiwgdW5pdDogImNtwrIiLCBub3RlOiAiQXVzYmxpY2s6IERpZSBHcnVuZGZsw6RjaGUgaXN0IGVpbiBLcmVpcy4iIH0sCiAgICAgICAgeyBuYW1lOiAiVm9sdW1lbiIsIGdlbmVyYWw6ICJWID0gz4AgwrcgcsKyIMK3IGggOiAzIiwgbGluZTogIlYgPSAiICsgbihiYXNlKSArICIgwrcgIiArIG4oZC5oKSArICIgOiAzID0gIiArIG4odm9sdW1lKSArICIgY23CsyIsIHVuaXQ6ICJjbcKzIiwgbm90ZTogIkRlciBLZWdlbCBwYXNzdCBnZWRhbmtsaWNoIGluIGVpbmVuIFp5bGluZGVyIHVuZCB3aXJkIGR1cmNoIDMgZ2VyZWNobmV0LiIgfQogICAgICBdCiAgICB9OwogIH0KCiAgZnVuY3Rpb24gY2FsY1NwaGVyZShkKSB7CiAgICB2YXIgc3VyZmFjZSA9IDQgKiBQSSAqIGQuciAqIGQucjsKICAgIHZhciB2b2x1bWUgPSA0ICogUEkgKiBkLnIgKiBkLnIgKiBkLnIgLyAzOwogICAgcmV0dXJuIHsKICAgICAgdm9sdW1lOiB2b2x1bWUsCiAgICAgIHN1cmZhY2U6IHN1cmZhY2UsCiAgICAgIGZvcm11bGFzOiBbCiAgICAgICAgeyBuYW1lOiAiVm9sdW1lbiIsIGdlbmVyYWw6ICJWID0gNCA6IDMgwrcgz4AgwrcgcsKzIiwgbGluZTogIlYgPSA0IDogMyDCtyAzLDE0IMK3ICIgKyBuKGQucikgKyAiwrMgPSAiICsgbih2b2x1bWUpICsgIiBjbcKzIiwgdW5pdDogImNtwrMiLCBub3RlOiAiQXVzYmxpY2s6IFdlaWwgciBkcmVpbWFsIHZvcmtvbW10LCB3w6RjaHN0IGRhcyBWb2x1bWVuIHNlaHIgc3RhcmsuIiB9LAogICAgICAgIHsgbmFtZTogIk9iZXJmbMOkY2hlIGFscyBadXNhdHoiLCBnZW5lcmFsOiAiTyA9IDQgwrcgz4AgwrcgcsKyIiwgbGluZTogIk8gPSA0IMK3IDMsMTQgwrcgIiArIG4oZC5yKSArICLCsiA9ICIgKyBuKHN1cmZhY2UpICsgIiBjbcKyIiwgdW5pdDogImNtwrIiLCBub3RlOiAiRGllIEt1Z2Vsb2JlcmZsw6RjaGUgaXN0IGtlaW5lIGViZW5lIEZsw6RjaGUsIGFiZXIgZGllIEVpbmhlaXQgYmxlaWJ0IGNtwrIuIiB9CiAgICAgIF0KICAgIH07CiAgfQoKICBmdW5jdGlvbiBkcmF3U2hhcGVDYW52YXMoKSB7CiAgICB2YXIgc2hhcGUgPSBnZXRTaGFwZShzdGF0ZS5zZWxlY3RlZFNoYXBlKTsKICAgIGlmICghc2hhcGUgfHwgIWVsZW1lbnRzLmNhbnZhcykgewogICAgICByZXR1cm47CiAgICB9CiAgICB2YXIgY2FudmFzID0gZWxlbWVudHMuY2FudmFzOwogICAgdmFyIGJveCA9IGNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgIHZhciB3aWR0aCA9IE1hdGgubWF4KDMyMCwgTWF0aC5yb3VuZChib3gud2lkdGggfHwgOTIwKSk7CiAgICB2YXIgaGVpZ2h0ID0gTWF0aC5tYXgoMjgwLCBNYXRoLnJvdW5kKGJveC5oZWlnaHQgfHwgNTYwKSk7CiAgICB2YXIgcmF0aW8gPSAxOwogICAgaWYgKHR5cGVvZiBkZXZpY2VQaXhlbFJhdGlvID09PSAibnVtYmVyIikgewogICAgICByYXRpbyA9IE1hdGgubWF4KDEsIE1hdGgubWluKDIuNSwgZGV2aWNlUGl4ZWxSYXRpbykpOwogICAgfQogICAgdmFyIHBpeGVsV2lkdGggPSBNYXRoLnJvdW5kKHdpZHRoICogcmF0aW8pOwogICAgdmFyIHBpeGVsSGVpZ2h0ID0gTWF0aC5yb3VuZChoZWlnaHQgKiByYXRpbyk7CiAgICBpZiAoY2FudmFzLndpZHRoICE9PSBwaXhlbFdpZHRoIHx8IGNhbnZhcy5oZWlnaHQgIT09IHBpeGVsSGVpZ2h0KSB7CiAgICAgIGNhbnZhcy53aWR0aCA9IHBpeGVsV2lkdGg7CiAgICAgIGNhbnZhcy5oZWlnaHQgPSBwaXhlbEhlaWdodDsKICAgIH0KICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgIGN0eC5zZXRUcmFuc2Zvcm0ocmF0aW8sIDAsIDAsIHJhdGlvLCAwLCAwKTsKICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7CiAgICBkcmF3UGFwZXJHcmlkKGN0eCwgd2lkdGgsIGhlaWdodCk7CiAgICBzaGFwZS5yZW5kZXJGdW5jdGlvbihjdHgsIHdpZHRoLCBoZWlnaHQsIGdldFZhbHVlcyhzaGFwZS5pZCksIHNoYXBlLmNhbGN1bGF0aW9uRnVuY3Rpb24oZ2V0VmFsdWVzKHNoYXBlLmlkKSkpOwogIH0KCiAgZnVuY3Rpb24gZHJhd1BhcGVyR3JpZChjdHgsIHcsIGgpIHsKICAgIGN0eC5maWxsU3R5bGUgPSAiI2ZmZmZmZiI7CiAgICBjdHguZmlsbFJlY3QoMCwgMCwgdywgaCk7CiAgICBjdHguc3Ryb2tlU3R5bGUgPSAiI2UzZWRmNiI7CiAgICBjdHgubGluZVdpZHRoID0gMTsKICAgIGZvciAodmFyIHggPSAyNDsgeCA8IHc7IHggKz0gMjQpIHsKICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICBjdHgubW92ZVRvKHgsIDApOwogICAgICBjdHgubGluZVRvKHgsIGgpOwogICAgICBjdHguc3Ryb2tlKCk7CiAgICB9CiAgICBmb3IgKHZhciB5ID0gMjQ7IHkgPCBoOyB5ICs9IDI0KSB7CiAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgY3R4Lm1vdmVUbygwLCB5KTsKICAgICAgY3R4LmxpbmVUbyh3LCB5KTsKICAgICAgY3R4LnN0cm9rZSgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gZHJhd1NxdWFyZShjdHgsIHcsIGgsIGQpIHsKICAgIHZhciBzaXplID0gTWF0aC5taW4odyAtIDE3MCwgaCAtIDE1MCwgZC5hICogMzgpOwogICAgdmFyIHggPSAodyAtIHNpemUpIC8gMjsKICAgIHZhciB5ID0gKGggLSBzaXplKSAvIDI7CiAgICBkcmF3R3JpZEluc2lkZShjdHgsIHgsIHksIHNpemUsIHNpemUsIGQuYSwgZC5hKTsKICAgIGZpbGxBbmRTdHJva2UoY3R4LCBmdW5jdGlvbiAoKSB7CiAgICAgIGN0eC5yZWN0KHgsIHksIHNpemUsIHNpemUpOwogICAgfSwgIiNkOWY1ZjEiLCAiIzBmNzY2ZSIsIDQpOwogICAgZHJhd0RpbWVuc2lvbihjdHgsIHgsIHkgKyBzaXplICsgMzQsIHggKyBzaXplLCB5ICsgc2l6ZSArIDM0LCAiYSA9ICIgKyBuKGQuYSkgKyAiIGNtIik7CiAgICBkcmF3RGltZW5zaW9uKGN0eCwgeCAtIDMyLCB5LCB4IC0gMzIsIHkgKyBzaXplLCAiYSIpOwogICAgZHJhd0xhYmVsKGN0eCwgeCArIHNpemUgLyAyLCB5ICsgc2l6ZSAvIDIsICJBID0gIiArIG4oZC5hICogZC5hKSArICIgY23CsiIpOwogIH0KCiAgZnVuY3Rpb24gZHJhd1JlY3RhbmdsZShjdHgsIHcsIGgsIGQpIHsKICAgIHZhciBzY2FsZSA9IE1hdGgubWluKCh3IC0gMTkwKSAvIGQuYSwgKGggLSAxNjApIC8gZC5iLCAzNCk7CiAgICB2YXIgcncgPSBkLmEgKiBzY2FsZTsKICAgIHZhciByaCA9IGQuYiAqIHNjYWxlOwogICAgdmFyIHggPSAodyAtIHJ3KSAvIDI7CiAgICB2YXIgeSA9IChoIC0gcmgpIC8gMjsKICAgIGRyYXdHcmlkSW5zaWRlKGN0eCwgeCwgeSwgcncsIHJoLCBkLmEsIGQuYik7CiAgICBmaWxsQW5kU3Ryb2tlKGN0eCwgZnVuY3Rpb24gKCkgewogICAgICBjdHgucmVjdCh4LCB5LCBydywgcmgpOwogICAgfSwgIiNlN2VlZmMiLCAiIzI0NTRhNiIsIDQpOwogICAgZHJhd0RpbWVuc2lvbihjdHgsIHgsIHkgKyByaCArIDM0LCB4ICsgcncsIHkgKyByaCArIDM0LCAiYSA9ICIgKyBuKGQuYSkgKyAiIGNtIik7CiAgICBkcmF3RGltZW5zaW9uKGN0eCwgeCAtIDMyLCB5LCB4IC0gMzIsIHkgKyByaCwgImIgPSAiICsgbihkLmIpICsgIiBjbSIpOwogICAgZHJhd0xhYmVsKGN0eCwgeCArIHJ3IC8gMiwgeSArIHJoIC8gMiwgIkEgPSAiICsgbihkLmEgKiBkLmIpICsgIiBjbcKyIik7CiAgfQoKICBmdW5jdGlvbiBkcmF3VHJpYW5nbGUoY3R4LCB3LCBoLCBkKSB7CiAgICB2YXIgc2NhbGUgPSBNYXRoLm1pbigodyAtIDE5MCkgLyBkLmcsIChoIC0gMTcwKSAvIGQuaCwgMzQpOwogICAgdmFyIGJhc2UgPSBkLmcgKiBzY2FsZTsKICAgIHZhciB0YWxsID0gZC5oICogc2NhbGU7CiAgICB2YXIgeCA9ICh3IC0gYmFzZSkgLyAyOwogICAgdmFyIHkgPSAoaCArIHRhbGwpIC8gMiAtIDMyOwogICAgdmFyIGFwZXhYID0geCArIGJhc2UgKiAwLjU4OwogICAgdmFyIGFwZXhZID0geSAtIHRhbGw7CiAgICBmaWxsQW5kU3Ryb2tlKGN0eCwgZnVuY3Rpb24gKCkgewogICAgICBjdHgucmVjdCh4LCBhcGV4WSwgYmFzZSwgdGFsbCk7CiAgICB9LCAicmdiYSgzNiw4NCwxNjYsMC4wNCkiLCAiIzkwYThiZiIsIDEpOwogICAgZHJhd0Rhc2hlZChjdHgsIGFwZXhYLCBhcGV4WSwgYXBleFgsIHksICIjOWE2YTA1Iik7CiAgICBmaWxsQW5kU3Ryb2tlKGN0eCwgZnVuY3Rpb24gKCkgewogICAgICBjdHgubW92ZVRvKHgsIHkpOwogICAgICBjdHgubGluZVRvKHggKyBiYXNlLCB5KTsKICAgICAgY3R4LmxpbmVUbyhhcGV4WCwgYXBleFkpOwogICAgICBjdHguY2xvc2VQYXRoKCk7CiAgICB9LCAiI2Q5ZjVmMSIsICIjMGY3NjZlIiwgNCk7CiAgICBkcmF3RGltZW5zaW9uKGN0eCwgeCwgeSArIDM0LCB4ICsgYmFzZSwgeSArIDM0LCAiZyA9ICIgKyBuKGQuZykgKyAiIGNtIik7CiAgICBkcmF3RGltZW5zaW9uKGN0eCwgYXBleFggKyAyOCwgYXBleFksIGFwZXhYICsgMjgsIHksICJoID0gIiArIG4oZC5oKSArICIgY20iKTsKICAgIGRyYXdMYWJlbChjdHgsIHggKyBiYXNlICogMC41LCB5IC0gdGFsbCAqIDAuMzcsICJBID0gZyDCtyBoIDogMiIpOwogIH0KCiAgZnVuY3Rpb24gZHJhd1JpZ2h0VHJpYW5nbGUoY3R4LCB3LCBoLCBkKSB7CiAgICB2YXIgc2NhbGUgPSBNYXRoLm1pbigodyAtIDE5MCkgLyBkLmEsIChoIC0gMTYwKSAvIGQuYiwgMzQpOwogICAgdmFyIHJ3ID0gZC5hICogc2NhbGU7CiAgICB2YXIgcmggPSBkLmIgKiBzY2FsZTsKICAgIHZhciB4ID0gKHcgLSBydykgLyAyOwogICAgdmFyIHkgPSAoaCArIHJoKSAvIDIgLSAyNDsKICAgIGZpbGxBbmRTdHJva2UoY3R4LCBmdW5jdGlvbiAoKSB7CiAgICAgIGN0eC5yZWN0KHgsIHkgLSByaCwgcncsIHJoKTsKICAgIH0sICJyZ2JhKDM2LDg0LDE2NiwwLjA0KSIsICIjOTBhOGJmIiwgMSk7CiAgICBmaWxsQW5kU3Ryb2tlKGN0eCwgZnVuY3Rpb24gKCkgewogICAgICBjdHgubW92ZVRvKHgsIHkpOwogICAgICBjdHgubGluZVRvKHggKyBydywgeSk7CiAgICAgIGN0eC5saW5lVG8oeCwgeSAtIHJoKTsKICAgICAgY3R4LmNsb3NlUGF0aCgpOwogICAgfSwgIiNlN2VlZmMiLCAiIzI0NTRhNiIsIDQpOwogICAgZHJhd1JpZ2h0QW5nbGUoY3R4LCB4LCB5LCAyOCk7CiAgICBkcmF3RGltZW5zaW9uKGN0eCwgeCwgeSArIDM0LCB4ICsgcncsIHkgKyAzNCwgImEgPSAiICsgbihkLmEpICsgIiBjbSIpOwogICAgZHJhd0RpbWVuc2lvbihjdHgsIHggLSAzMiwgeSAtIHJoLCB4IC0gMzIsIHksICJiID0gIiArIG4oZC5iKSArICIgY20iKTsKICAgIGRyYXdMYWJlbChjdHgsIHggKyBydyAqIDAuMzgsIHkgLSByaCAqIDAuMzIsICJoYWxiZXMgUmVjaHRlY2siKTsKICB9CgogIGZ1bmN0aW9uIGRyYXdQYXJhbGxlbG9ncmFtKGN0eCwgdywgaCwgZCkgewogICAgdmFyIHNjYWxlID0gTWF0aC5taW4oKHcgLSAyMjApIC8gZC5nLCAoaCAtIDE3MCkgLyBkLmgsIDM0KTsKICAgIHZhciBiYXNlID0gZC5nICogc2NhbGU7CiAgICB2YXIgdGFsbCA9IGQuaCAqIHNjYWxlOwogICAgdmFyIHNrZXcgPSBNYXRoLm1pbig5MCwgTWF0aC5tYXgoMzYsIGJhc2UgKiAwLjI0KSk7CiAgICB2YXIgeCA9ICh3IC0gYmFzZSAtIHNrZXcpIC8gMjsKICAgIHZhciB5ID0gKGggKyB0YWxsKSAvIDIgLSAyNjsKICAgIGZpbGxBbmRTdHJva2UoY3R4LCBmdW5jdGlvbiAoKSB7CiAgICAgIGN0eC5tb3ZlVG8oeCwgeSk7CiAgICAgIGN0eC5saW5lVG8oeCArIGJhc2UsIHkpOwogICAgICBjdHgubGluZVRvKHggKyBiYXNlICsgc2tldywgeSAtIHRhbGwpOwogICAgICBjdHgubGluZVRvKHggKyBza2V3LCB5IC0gdGFsbCk7CiAgICAgIGN0eC5jbG9zZVBhdGgoKTsKICAgIH0sICIjZmZmNGQyIiwgIiM5YTZhMDUiLCA0KTsKICAgIGRyYXdEYXNoZWQoY3R4LCB4ICsgc2tldywgeSAtIHRhbGwsIHggKyBza2V3LCB5LCAiIzlhNmEwNSIpOwogICAgZHJhd0RpbWVuc2lvbihjdHgsIHgsIHkgKyAzNCwgeCArIGJhc2UsIHkgKyAzNCwgImcgPSAiICsgbihkLmcpICsgIiBjbSIpOwogICAgZHJhd0RpbWVuc2lvbihjdHgsIHggKyBza2V3ICsgMjgsIHkgLSB0YWxsLCB4ICsgc2tldyArIDI4LCB5LCAiaCA9ICIgKyBuKGQuaCkgKyAiIGNtIik7CiAgICBkcmF3TGFiZWwoY3R4LCB4ICsgYmFzZSAqIDAuNTQsIHkgLSB0YWxsICogMC41MiwgIkEgPSBnIMK3IGgiKTsKICB9CgogIGZ1bmN0aW9uIGRyYXdSaG9tYnVzKGN0eCwgdywgaCwgZCkgewogICAgdmFyIHNjYWxlID0gTWF0aC5taW4oKHcgLSAxOTApIC8gZC5lLCAoaCAtIDE2MCkgLyBkLmYsIDMyKTsKICAgIHZhciBydyA9IGQuZSAqIHNjYWxlOwogICAgdmFyIHJoID0gZC5mICogc2NhbGU7CiAgICB2YXIgY3ggPSB3IC8gMjsKICAgIHZhciBjeSA9IGggLyAyOwogICAgZmlsbEFuZFN0cm9rZShjdHgsIGZ1bmN0aW9uICgpIHsKICAgICAgY3R4Lm1vdmVUbyhjeCwgY3kgLSByaCAvIDIpOwogICAgICBjdHgubGluZVRvKGN4ICsgcncgLyAyLCBjeSk7CiAgICAgIGN0eC5saW5lVG8oY3gsIGN5ICsgcmggLyAyKTsKICAgICAgY3R4LmxpbmVUbyhjeCAtIHJ3IC8gMiwgY3kpOwogICAgICBjdHguY2xvc2VQYXRoKCk7CiAgICB9LCAiI2Q5ZjVmMSIsICIjMGY3NjZlIiwgNCk7CiAgICBkcmF3RGFzaGVkKGN0eCwgY3ggLSBydyAvIDIsIGN5LCBjeCArIHJ3IC8gMiwgY3ksICIjMjQ1NGE2Iik7CiAgICBkcmF3RGFzaGVkKGN0eCwgY3gsIGN5IC0gcmggLyAyLCBjeCwgY3kgKyByaCAvIDIsICIjMjQ1NGE2Iik7CiAgICBkcmF3RGltZW5zaW9uKGN0eCwgY3ggLSBydyAvIDIsIGN5ICsgcmggLyAyICsgMzQsIGN4ICsgcncgLyAyLCBjeSArIHJoIC8gMiArIDM0LCAiZSA9ICIgKyBuKGQuZSkgKyAiIGNtIik7CiAgICBkcmF3RGltZW5zaW9uKGN0eCwgY3ggKyBydyAvIDIgKyAzMiwgY3kgLSByaCAvIDIsIGN4ICsgcncgLyAyICsgMzIsIGN5ICsgcmggLyAyLCAiZiA9ICIgKyBuKGQuZikgKyAiIGNtIik7CiAgICBkcmF3TGFiZWwoY3R4LCBjeCwgY3ksICJBID0gZSDCtyBmIDogMiIpOwogIH0KCiAgZnVuY3Rpb24gZHJhd1RyYXBlem9pZChjdHgsIHcsIGgsIGQpIHsKICAgIHZhciBzY2FsZSA9IE1hdGgubWluKCh3IC0gMjEwKSAvIE1hdGgubWF4KGQuYSwgZC5jKSwgKGggLSAxNzApIC8gZC5oLCAzMik7CiAgICB2YXIgYm90dG9tID0gZC5hICogc2NhbGU7CiAgICB2YXIgdXBwZXIgPSBkLmMgKiBzY2FsZTsKICAgIHZhciB0YWxsID0gZC5oICogc2NhbGU7CiAgICB2YXIgeCA9ICh3IC0gYm90dG9tKSAvIDI7CiAgICB2YXIgeSA9IChoICsgdGFsbCkgLyAyIC0gMjg7CiAgICB2YXIgdXBwZXJYID0geCArIChib3R0b20gLSB1cHBlcikgLyAyOwogICAgZmlsbEFuZFN0cm9rZShjdHgsIGZ1bmN0aW9uICgpIHsKICAgICAgY3R4Lm1vdmVUbyh4LCB5KTsKICAgICAgY3R4LmxpbmVUbyh4ICsgYm90dG9tLCB5KTsKICAgICAgY3R4LmxpbmVUbyh1cHBlclggKyB1cHBlciwgeSAtIHRhbGwpOwogICAgICBjdHgubGluZVRvKHVwcGVyWCwgeSAtIHRhbGwpOwogICAgICBjdHguY2xvc2VQYXRoKCk7CiAgICB9LCAiI2U3ZWVmYyIsICIjMjQ1NGE2IiwgNCk7CiAgICBkcmF3RGFzaGVkKGN0eCwgdXBwZXJYLCB5IC0gdGFsbCwgdXBwZXJYLCB5LCAiIzlhNmEwNSIpOwogICAgZHJhd0RpbWVuc2lvbihjdHgsIHgsIHkgKyAzNCwgeCArIGJvdHRvbSwgeSArIDM0LCAiYSA9ICIgKyBuKGQuYSkgKyAiIGNtIik7CiAgICBkcmF3RGltZW5zaW9uKGN0eCwgdXBwZXJYLCB5IC0gdGFsbCAtIDMwLCB1cHBlclggKyB1cHBlciwgeSAtIHRhbGwgLSAzMCwgImMgPSAiICsgbihkLmMpICsgIiBjbSIpOwogICAgZHJhd0RpbWVuc2lvbihjdHgsIHVwcGVyWCArIDMwLCB5IC0gdGFsbCwgdXBwZXJYICsgMzAsIHksICJoID0gIiArIG4oZC5oKSArICIgY20iKTsKICAgIGRyYXdMYWJlbChjdHgsIHcgLyAyLCB5IC0gdGFsbCAqIDAuNSwgIkEgPSAoYSArIGMpIMK3IGggOiAyIik7CiAgfQoKICBmdW5jdGlvbiBkcmF3Q29tcG9zaXRlKGN0eCwgdywgaCwgZCkgewogICAgdmFyIGMgPSBNYXRoLm1pbihkLmMsIGQuYSAtIDEpOwogICAgdmFyIGN1dEggPSBNYXRoLm1pbihkLmQsIGQuYiAtIDEpOwogICAgdmFyIHNjYWxlID0gTWF0aC5taW4oKHcgLSAxOTApIC8gZC5hLCAoaCAtIDE2MCkgLyBkLmIsIDMyKTsKICAgIHZhciBydyA9IGQuYSAqIHNjYWxlOwogICAgdmFyIHJoID0gZC5iICogc2NhbGU7CiAgICB2YXIgY3V0VyA9IGMgKiBzY2FsZTsKICAgIHZhciBjdXRZID0gY3V0SCAqIHNjYWxlOwogICAgdmFyIHggPSAodyAtIHJ3KSAvIDI7CiAgICB2YXIgeSA9IChoIC0gcmgpIC8gMjsKICAgIGRyYXdHcmlkSW5zaWRlKGN0eCwgeCwgeSwgcncsIHJoLCBkLmEsIGQuYik7CiAgICBmaWxsQW5kU3Ryb2tlKGN0eCwgZnVuY3Rpb24gKCkgewogICAgICBjdHgubW92ZVRvKHgsIHkgKyByaCk7CiAgICAgIGN0eC5saW5lVG8oeCArIHJ3LCB5ICsgcmgpOwogICAgICBjdHgubGluZVRvKHggKyBydywgeSArIGN1dFkpOwogICAgICBjdHgubGluZVRvKHggKyBydyAtIGN1dFcsIHkgKyBjdXRZKTsKICAgICAgY3R4LmxpbmVUbyh4ICsgcncgLSBjdXRXLCB5KTsKICAgICAgY3R4LmxpbmVUbyh4LCB5KTsKICAgICAgY3R4LmNsb3NlUGF0aCgpOwogICAgfSwgIiNmZmY0ZDIiLCAiIzlhNmEwNSIsIDQpOwogICAgZmlsbEFuZFN0cm9rZShjdHgsIGZ1bmN0aW9uICgpIHsKICAgICAgY3R4LnJlY3QoeCArIHJ3IC0gY3V0VywgeSwgY3V0VywgY3V0WSk7CiAgICB9LCAicmdiYSgxNTksMzYsNTEsMC4xMikiLCAiIzlmMjQzMyIsIDIpOwogICAgZHJhd0RpbWVuc2lvbihjdHgsIHgsIHkgKyByaCArIDM0LCB4ICsgcncsIHkgKyByaCArIDM0LCAiYSA9ICIgKyBuKGQuYSkpOwogICAgZHJhd0RpbWVuc2lvbihjdHgsIHggLSAzMiwgeSwgeCAtIDMyLCB5ICsgcmgsICJiID0gIiArIG4oZC5iKSk7CiAgICBkcmF3TGFiZWwoY3R4LCB4ICsgcncgKiAwLjQ1LCB5ICsgcmggKiAwLjU1LCAiZ3Jvw58g4oiSIEF1c3NjaG5pdHQiKTsKICB9CgogIGZ1bmN0aW9uIGRyYXdDaXJjbGUoY3R4LCB3LCBoLCBkKSB7CiAgICB2YXIgciA9IE1hdGgubWluKCh3IC0gMTcwKSAvIDIsIChoIC0gMTUwKSAvIDIsIGQuciAqIDMwKTsKICAgIHZhciBjeCA9IHcgLyAyOwogICAgdmFyIGN5ID0gaCAvIDI7CiAgICBmaWxsQW5kU3Ryb2tlKGN0eCwgZnVuY3Rpb24gKCkgewogICAgICBjdHguYXJjKGN4LCBjeSwgciwgMCwgTWF0aC5QSSAqIDIpOwogICAgfSwgIiNkOWY1ZjEiLCAiIzBmNzY2ZSIsIDQpOwogICAgZHJhd0Rhc2hlZChjdHgsIGN4LCBjeSwgY3ggKyByLCBjeSwgIiMyNDU0YTYiKTsKICAgIGRyYXdMYWJlbChjdHgsIGN4ICsgciAvIDIsIGN5IC0gMTgsICJyID0gIiArIG4oZC5yKSArICIgY20iKTsKICAgIGRyYXdMYWJlbChjdHgsIGN4LCBjeSArIHIgKyAzNSwgIs+AIOKJiCAzLDE0IMK3IEF1c2JsaWNrIik7CiAgfQoKICBmdW5jdGlvbiBkcmF3Q3ViZShjdHgsIHcsIGgsIGQpIHsKICAgIHZhciBzaXplID0gTWF0aC5taW4odyAtIDIyMCwgaCAtIDE5MCwgZC5hICogMzQpOwogICAgdmFyIHggPSB3IC8gMiAtIHNpemUgKiAwLjU4OwogICAgdmFyIHkgPSBoIC8gMiAtIHNpemUgKiAwLjM1OwogICAgZHJhd0JveDNkKGN0eCwgeCwgeSwgc2l6ZSwgc2l6ZSwgc2l6ZSAqIDAuNDQsICIjZDlmNWYxIiwgIiMwZjc2NmUiKTsKICAgIGRyYXdMYXllckxpbmVzKGN0eCwgeCwgeSwgc2l6ZSwgc2l6ZSwgc2l6ZSAqIDAuNDQsIE1hdGgubWluKDcsIGQuYSkpOwogICAgZHJhd0RpbWVuc2lvbihjdHgsIHgsIHkgKyBzaXplICsgMzQsIHggKyBzaXplLCB5ICsgc2l6ZSArIDM0LCAiYSA9ICIgKyBuKGQuYSkgKyAiIGNtIik7CiAgICBkcmF3TGFiZWwoY3R4LCB4ICsgc2l6ZSAqIDAuNSwgeSArIHNpemUgKiAwLjQ4LCAiViA9IGEgwrcgYSDCtyBhIik7CiAgfQoKICBmdW5jdGlvbiBkcmF3Q3Vib2lkKGN0eCwgdywgaCwgZCkgewogICAgdmFyIHNjYWxlID0gTWF0aC5taW4oKHcgLSAyNDApIC8gZC5sLCAoaCAtIDE5MCkgLyAoZC5oICsgZC5iICogMC4zNCksIDMwKTsKICAgIHZhciBidyA9IGQubCAqIHNjYWxlOwogICAgdmFyIGJoID0gZC5oICogc2NhbGU7CiAgICB2YXIgZGVwdGggPSBkLmIgKiBzY2FsZSAqIDAuNDY7CiAgICB2YXIgeCA9ICh3IC0gYncgLSBkZXB0aCkgLyAyOwogICAgdmFyIHkgPSAoaCAtIGJoKSAvIDI7CiAgICBkcmF3Qm94M2QoY3R4LCB4LCB5LCBidywgYmgsIGRlcHRoLCAiI2U3ZWVmYyIsICIjMjQ1NGE2Iik7CiAgICBkcmF3TGF5ZXJMaW5lcyhjdHgsIHgsIHksIGJ3LCBiaCwgZGVwdGgsIE1hdGgubWluKDcsIGQuaCkpOwogICAgZHJhd0RpbWVuc2lvbihjdHgsIHgsIHkgKyBiaCArIDM0LCB4ICsgYncsIHkgKyBiaCArIDM0LCAibCA9ICIgKyBuKGQubCkpOwogICAgZHJhd0RpbWVuc2lvbihjdHgsIHggKyBidyArIDE2LCB5ICsgYmgsIHggKyBidyArIGRlcHRoICsgMTYsIHkgKyBiaCAtIGRlcHRoLCAiYiA9ICIgKyBuKGQuYikpOwogICAgZHJhd0RpbWVuc2lvbihjdHgsIHggLSAzMiwgeSwgeCAtIDMyLCB5ICsgYmgsICJoID0gIiArIG4oZC5oKSk7CiAgICBkcmF3TGFiZWwoY3R4LCB4ICsgYncgKiAwLjUsIHkgKyBiaCAqIDAuNDgsICJHcnVuZGZsw6RjaGUgwrcgSMO2aGUiKTsKICB9CgogIGZ1bmN0aW9uIGRyYXdQcmlzbShjdHgsIHcsIGgsIGQpIHsKICAgIHZhciBzY2FsZSA9IE1hdGgubWluKCh3IC0gMjQwKSAvIGQuZywgKGggLSAxOTApIC8gZC5oLCAyOCk7CiAgICB2YXIgYmFzZSA9IGQuZyAqIHNjYWxlOwogICAgdmFyIHRhbGwgPSBkLmggKiBzY2FsZTsKICAgIHZhciBkZXB0aCA9IGQuayAqIHNjYWxlICogMC4zNjsKICAgIHZhciB4ID0gKHcgLSBiYXNlIC0gZGVwdGgpIC8gMjsKICAgIHZhciB5ID0gKGggKyB0YWxsKSAvIDIgLSAyMjsKICAgIHZhciBwMSA9IFt4LCB5XTsKICAgIHZhciBwMiA9IFt4ICsgYmFzZSwgeV07CiAgICB2YXIgcDMgPSBbeCArIGJhc2UgKiAwLjUsIHkgLSB0YWxsXTsKICAgIHZhciBxMSA9IFtwMVswXSArIGRlcHRoLCBwMVsxXSAtIGRlcHRoXTsKICAgIHZhciBxMiA9IFtwMlswXSArIGRlcHRoLCBwMlsxXSAtIGRlcHRoXTsKICAgIHZhciBxMyA9IFtwM1swXSArIGRlcHRoLCBwM1sxXSAtIGRlcHRoXTsKICAgIGZpbGxBbmRTdHJva2UoY3R4LCBmdW5jdGlvbiAoKSB7CiAgICAgIGN0eC5tb3ZlVG8ocDFbMF0sIHAxWzFdKTsgY3R4LmxpbmVUbyhwMlswXSwgcDJbMV0pOyBjdHgubGluZVRvKHAzWzBdLCBwM1sxXSk7IGN0eC5jbG9zZVBhdGgoKTsKICAgIH0sICIjZDlmNWYxIiwgIiMwZjc2NmUiLCA0KTsKICAgIGZpbGxBbmRTdHJva2UoY3R4LCBmdW5jdGlvbiAoKSB7CiAgICAgIGN0eC5tb3ZlVG8ocTFbMF0sIHExWzFdKTsgY3R4LmxpbmVUbyhxMlswXSwgcTJbMV0pOyBjdHgubGluZVRvKHEzWzBdLCBxM1sxXSk7IGN0eC5jbG9zZVBhdGgoKTsKICAgIH0sICJyZ2JhKDE1LDExOCwxMTAsMC4xMCkiLCAiIzBmNzY2ZSIsIDIpOwogICAgZHJhd1NlZ21lbnQoY3R4LCBwMVswXSwgcDFbMV0sIHExWzBdLCBxMVsxXSwgIiMwZjc2NmUiLCAzKTsKICAgIGRyYXdTZWdtZW50KGN0eCwgcDJbMF0sIHAyWzFdLCBxMlswXSwgcTJbMV0sICIjMGY3NjZlIiwgMyk7CiAgICBkcmF3U2VnbWVudChjdHgsIHAzWzBdLCBwM1sxXSwgcTNbMF0sIHEzWzFdLCAiIzBmNzY2ZSIsIDMpOwogICAgZHJhd0Rhc2hlZChjdHgsIHAzWzBdLCBwM1sxXSwgcDNbMF0sIHksICIjOWE2YTA1Iik7CiAgICBkcmF3RGltZW5zaW9uKGN0eCwgeCwgeSArIDM0LCB4ICsgYmFzZSwgeSArIDM0LCAiZyA9ICIgKyBuKGQuZykpOwogICAgZHJhd0RpbWVuc2lvbihjdHgsIHAyWzBdICsgMTgsIHAyWzFdLCBxMlswXSArIDE4LCBxMlsxXSwgImsgPSAiICsgbihkLmspKTsKICAgIGRyYXdMYWJlbChjdHgsIHggKyBiYXNlICogMC41MiwgeSAtIHRhbGwgKiAwLjM1LCAiRyA9IGcgwrcgaCA6IDIiKTsKICB9CgogIGZ1bmN0aW9uIGRyYXdDeWxpbmRlcihjdHgsIHcsIGgsIGQpIHsKICAgIHZhciByYWRpdXMgPSBNYXRoLm1pbigodyAtIDE5MCkgLyA0LCBkLnIgKiAyNik7CiAgICB2YXIgdGFsbCA9IE1hdGgubWluKGggLSAxNzAsIGQuaCAqIDI4KTsKICAgIHZhciBjeCA9IHcgLyAyOwogICAgdmFyIHkgPSAoaCAtIHRhbGwpIC8gMjsKICAgIGRyYXdDeWxpbmRlckJvZHkoY3R4LCBjeCwgeSwgcmFkaXVzLCB0YWxsLCAiI2U3ZWVmYyIsICIjMjQ1NGE2Iik7CiAgICBkcmF3RGFzaGVkKGN0eCwgY3gsIHkgKyAxOCwgY3ggKyByYWRpdXMsIHkgKyAxOCwgIiMwZjc2NmUiKTsKICAgIGRyYXdEaW1lbnNpb24oY3R4LCBjeCArIHJhZGl1cyArIDMwLCB5LCBjeCArIHJhZGl1cyArIDMwLCB5ICsgdGFsbCwgImggPSAiICsgbihkLmgpKTsKICAgIGRyYXdMYWJlbChjdHgsIGN4LCB5ICsgdGFsbCArIDM2LCAiViA9IM+AIMK3IHLCsiDCtyBoIik7CiAgfQoKICBmdW5jdGlvbiBkcmF3UHlyYW1pZChjdHgsIHcsIGgsIGQpIHsKICAgIHZhciBiYXNlID0gTWF0aC5taW4odyAtIDI0MCwgZC5hICogMzQpOwogICAgdmFyIHRhbGwgPSBNYXRoLm1pbihoIC0gMTcwLCBkLmggKiAzMCk7CiAgICB2YXIgY3ggPSB3IC8gMjsKICAgIHZhciB5ID0gaCAvIDIgKyBiYXNlICogMC4yMjsKICAgIHZhciBkZXB0aCA9IGJhc2UgKiAwLjQyOwogICAgdmFyIGFwZXhZID0geSAtIHRhbGw7CiAgICB2YXIgbGVmdCA9IGN4IC0gYmFzZSAvIDI7CiAgICB2YXIgcmlnaHQgPSBjeCArIGJhc2UgLyAyOwogICAgZmlsbEFuZFN0cm9rZShjdHgsIGZ1bmN0aW9uICgpIHsKICAgICAgY3R4Lm1vdmVUbyhsZWZ0LCB5KTsKICAgICAgY3R4LmxpbmVUbyhjeCAtIGJhc2UgLyAyICsgZGVwdGgsIHkgLSBkZXB0aCk7CiAgICAgIGN0eC5saW5lVG8ocmlnaHQgKyBkZXB0aCwgeSAtIGRlcHRoKTsKICAgICAgY3R4LmxpbmVUbyhyaWdodCwgeSk7CiAgICAgIGN0eC5jbG9zZVBhdGgoKTsKICAgIH0sICIjZmZmNGQyIiwgIiM5YTZhMDUiLCAzKTsKICAgIGRyYXdTZWdtZW50KGN0eCwgY3gsIGFwZXhZLCBsZWZ0LCB5LCAiIzlhNmEwNSIsIDQpOwogICAgZHJhd1NlZ21lbnQoY3R4LCBjeCwgYXBleFksIHJpZ2h0LCB5LCAiIzlhNmEwNSIsIDQpOwogICAgZHJhd1NlZ21lbnQoY3R4LCBjeCwgYXBleFksIHJpZ2h0ICsgZGVwdGgsIHkgLSBkZXB0aCwgIiM5YTZhMDUiLCAzKTsKICAgIGRyYXdTZWdtZW50KGN0eCwgY3gsIGFwZXhZLCBjeCAtIGJhc2UgLyAyICsgZGVwdGgsIHkgLSBkZXB0aCwgIiM5YTZhMDUiLCAzKTsKICAgIGRyYXdEYXNoZWQoY3R4LCBjeCwgYXBleFksIGN4LCB5IC0gZGVwdGggKiAwLjUsICIjMjQ1NGE2Iik7CiAgICBkcmF3RGltZW5zaW9uKGN0eCwgcmlnaHQgKyAyOCwgYXBleFksIHJpZ2h0ICsgMjgsIHksICJoID0gIiArIG4oZC5oKSk7CiAgICBkcmF3TGFiZWwoY3R4LCBjeCwgeSArIDM2LCAiQXVzYmxpY2s6IFYgPSBHIMK3IGggOiAzIik7CiAgfQoKICBmdW5jdGlvbiBkcmF3Q29uZShjdHgsIHcsIGgsIGQpIHsKICAgIHZhciByYWRpdXMgPSBNYXRoLm1pbigodyAtIDE5MCkgLyA0LCBkLnIgKiAyOCk7CiAgICB2YXIgdGFsbCA9IE1hdGgubWluKGggLSAxNzAsIGQuaCAqIDMwKTsKICAgIHZhciBjeCA9IHcgLyAyOwogICAgdmFyIHkgPSBoIC8gMiArIHRhbGwgLyAyIC0gMTI7CiAgICB2YXIgYXBleFkgPSB5IC0gdGFsbDsKICAgIGZpbGxBbmRTdHJva2UoY3R4LCBmdW5jdGlvbiAoKSB7CiAgICAgIGN0eC5tb3ZlVG8oY3gsIGFwZXhZKTsKICAgICAgY3R4LmxpbmVUbyhjeCAtIHJhZGl1cywgeSk7CiAgICAgIGN0eC5lbGxpcHNlKGN4LCB5LCByYWRpdXMsIHJhZGl1cyAqIDAuMjgsIDAsIE1hdGguUEksIDAsIHRydWUpOwogICAgICBjdHgubGluZVRvKGN4ICsgcmFkaXVzLCB5KTsKICAgICAgY3R4LmNsb3NlUGF0aCgpOwogICAgfSwgIiNlN2VlZmMiLCAiIzI0NTRhNiIsIDQpOwogICAgZHJhd0Rhc2hlZChjdHgsIGN4LCBhcGV4WSwgY3gsIHksICIjMGY3NjZlIik7CiAgICBkcmF3RGltZW5zaW9uKGN0eCwgY3ggKyByYWRpdXMgKyAzMCwgYXBleFksIGN4ICsgcmFkaXVzICsgMzAsIHksICJoID0gIiArIG4oZC5oKSk7CiAgICBkcmF3TGFiZWwoY3R4LCBjeCwgeSArIDM2LCAiQXVzYmxpY2s6IDogMyB3aWUgUHlyYW1pZGUiKTsKICB9CgogIGZ1bmN0aW9uIGRyYXdTcGhlcmUoY3R4LCB3LCBoLCBkKSB7CiAgICB2YXIgciA9IE1hdGgubWluKCh3IC0gMTgwKSAvIDIsIChoIC0gMTUwKSAvIDIsIGQuciAqIDMwKTsKICAgIHZhciBjeCA9IHcgLyAyOwogICAgdmFyIGN5ID0gaCAvIDI7CiAgICBmaWxsQW5kU3Ryb2tlKGN0eCwgZnVuY3Rpb24gKCkgewogICAgICBjdHguYXJjKGN4LCBjeSwgciwgMCwgTWF0aC5QSSAqIDIpOwogICAgfSwgIiNkOWY1ZjEiLCAiIzBmNzY2ZSIsIDQpOwogICAgZHJhd1NlZ21lbnQoY3R4LCBjeCwgY3ksIGN4ICsgciwgY3ksICIjMjQ1NGE2IiwgMyk7CiAgICBjdHguc3Ryb2tlU3R5bGUgPSAicmdiYSgzNiw4NCwxNjYsMC4zOCkiOwogICAgY3R4LmxpbmVXaWR0aCA9IDI7CiAgICBjdHguYmVnaW5QYXRoKCk7CiAgICBjdHguZWxsaXBzZShjeCwgY3ksIHIsIHIgKiAwLjMyLCAwLCAwLCBNYXRoLlBJICogMik7CiAgICBjdHguc3Ryb2tlKCk7CiAgICBkcmF3TGFiZWwoY3R4LCBjeCArIHIgLyAyLCBjeSAtIDE4LCAiciA9ICIgKyBuKGQucikgKyAiIGNtIik7CiAgICBkcmF3TGFiZWwoY3R4LCBjeCwgY3kgKyByICsgMzQsICJBdXNibGljazogViA9IDQgOiAzIMK3IM+AIMK3IHLCsyIpOwogIH0KCiAgZnVuY3Rpb24gZHJhd0dyaWRJbnNpZGUoY3R4LCB4LCB5LCB3LCBoLCBjb2xzLCByb3dzKSB7CiAgICBjdHguc2F2ZSgpOwogICAgY3R4LnN0cm9rZVN0eWxlID0gInJnYmEoMzYsODQsMTY2LDAuMTYpIjsKICAgIGN0eC5saW5lV2lkdGggPSAxOwogICAgdmFyIG1heENvbHMgPSBNYXRoLm1pbigyNCwgTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChjb2xzKSkpOwogICAgdmFyIG1heFJvd3MgPSBNYXRoLm1pbigyMCwgTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChyb3dzKSkpOwogICAgZm9yICh2YXIgaSA9IDE7IGkgPCBtYXhDb2xzOyBpICs9IDEpIHsKICAgICAgdmFyIGd4ID0geCArIHcgKiBpIC8gbWF4Q29sczsKICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICBjdHgubW92ZVRvKGd4LCB5KTsKICAgICAgY3R4LmxpbmVUbyhneCwgeSArIGgpOwogICAgICBjdHguc3Ryb2tlKCk7CiAgICB9CiAgICBmb3IgKHZhciBqID0gMTsgaiA8IG1heFJvd3M7IGogKz0gMSkgewogICAgICB2YXIgZ3kgPSB5ICsgaCAqIGogLyBtYXhSb3dzOwogICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgIGN0eC5tb3ZlVG8oeCwgZ3kpOwogICAgICBjdHgubGluZVRvKHggKyB3LCBneSk7CiAgICAgIGN0eC5zdHJva2UoKTsKICAgIH0KICAgIGN0eC5yZXN0b3JlKCk7CiAgfQoKICBmdW5jdGlvbiBkcmF3Qm94M2QoY3R4LCB4LCB5LCBidywgYmgsIGRlcHRoLCBmaWxsLCBzdHJva2UpIHsKICAgIGZpbGxBbmRTdHJva2UoY3R4LCBmdW5jdGlvbiAoKSB7CiAgICAgIGN0eC5yZWN0KHgsIHksIGJ3LCBiaCk7CiAgICB9LCBmaWxsLCBzdHJva2UsIDQpOwogICAgZmlsbEFuZFN0cm9rZShjdHgsIGZ1bmN0aW9uICgpIHsKICAgICAgY3R4Lm1vdmVUbyh4LCB5KTsKICAgICAgY3R4LmxpbmVUbyh4ICsgZGVwdGgsIHkgLSBkZXB0aCk7CiAgICAgIGN0eC5saW5lVG8oeCArIGJ3ICsgZGVwdGgsIHkgLSBkZXB0aCk7CiAgICAgIGN0eC5saW5lVG8oeCArIGJ3LCB5KTsKICAgICAgY3R4LmNsb3NlUGF0aCgpOwogICAgfSwgInJnYmEoMjU1LDI1NSwyNTUsMC43MikiLCBzdHJva2UsIDMpOwogICAgZmlsbEFuZFN0cm9rZShjdHgsIGZ1bmN0aW9uICgpIHsKICAgICAgY3R4Lm1vdmVUbyh4ICsgYncsIHkpOwogICAgICBjdHgubGluZVRvKHggKyBidyArIGRlcHRoLCB5IC0gZGVwdGgpOwogICAgICBjdHgubGluZVRvKHggKyBidyArIGRlcHRoLCB5ICsgYmggLSBkZXB0aCk7CiAgICAgIGN0eC5saW5lVG8oeCArIGJ3LCB5ICsgYmgpOwogICAgICBjdHguY2xvc2VQYXRoKCk7CiAgICB9LCAicmdiYSgzNiw4NCwxNjYsMC4xMCkiLCBzdHJva2UsIDMpOwogIH0KCiAgZnVuY3Rpb24gZHJhd0xheWVyTGluZXMoY3R4LCB4LCB5LCBidywgYmgsIGRlcHRoLCBjb3VudCkgewogICAgY3R4LnNhdmUoKTsKICAgIGN0eC5zdHJva2VTdHlsZSA9ICJyZ2JhKDM2LDg0LDE2NiwwLjE4KSI7CiAgICBjdHgubGluZVdpZHRoID0gMTsKICAgIHZhciBzdGVwcyA9IE1hdGgubWF4KDIsIGNvdW50KTsKICAgIGZvciAodmFyIGkgPSAxOyBpIDwgc3RlcHM7IGkgKz0gMSkgewogICAgICB2YXIgeXkgPSB5ICsgYmggKiBpIC8gc3RlcHM7CiAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgY3R4Lm1vdmVUbyh4LCB5eSk7CiAgICAgIGN0eC5saW5lVG8oeCArIGJ3LCB5eSk7CiAgICAgIGN0eC5saW5lVG8oeCArIGJ3ICsgZGVwdGgsIHl5IC0gZGVwdGgpOwogICAgICBjdHguc3Ryb2tlKCk7CiAgICB9CiAgICBjdHgucmVzdG9yZSgpOwogIH0KCiAgZnVuY3Rpb24gZHJhd0N5bGluZGVyQm9keShjdHgsIGN4LCB5LCByLCB0YWxsLCBmaWxsLCBzdHJva2UpIHsKICAgIGN0eC5zYXZlKCk7CiAgICBjdHguZmlsbFN0eWxlID0gZmlsbDsKICAgIGN0eC5zdHJva2VTdHlsZSA9IHN0cm9rZTsKICAgIGN0eC5saW5lV2lkdGggPSA0OwogICAgY3R4LmJlZ2luUGF0aCgpOwogICAgY3R4LmVsbGlwc2UoY3gsIHksIHIsIHIgKiAwLjI4LCAwLCAwLCBNYXRoLlBJICogMik7CiAgICBjdHguZmlsbCgpOwogICAgY3R4LnN0cm9rZSgpOwogICAgY3R4LmJlZ2luUGF0aCgpOwogICAgY3R4Lm1vdmVUbyhjeCAtIHIsIHkpOwogICAgY3R4LmxpbmVUbyhjeCAtIHIsIHkgKyB0YWxsKTsKICAgIGN0eC5lbGxpcHNlKGN4LCB5ICsgdGFsbCwgciwgciAqIDAuMjgsIDAsIE1hdGguUEksIDAsIHRydWUpOwogICAgY3R4LmxpbmVUbyhjeCArIHIsIHkpOwogICAgY3R4LnN0cm9rZSgpOwogICAgY3R4LmZpbGxTdHlsZSA9ICJyZ2JhKDM2LDg0LDE2NiwwLjA4KSI7CiAgICBjdHguYmVnaW5QYXRoKCk7CiAgICBjdHgubW92ZVRvKGN4IC0gciwgeSk7CiAgICBjdHgubGluZVRvKGN4IC0gciwgeSArIHRhbGwpOwogICAgY3R4LmVsbGlwc2UoY3gsIHkgKyB0YWxsLCByLCByICogMC4yOCwgMCwgMCwgTWF0aC5QSSk7CiAgICBjdHgubGluZVRvKGN4ICsgciwgeSk7CiAgICBjdHguY2xvc2VQYXRoKCk7CiAgICBjdHguZmlsbCgpOwogICAgY3R4LnJlc3RvcmUoKTsKICB9CgogIGZ1bmN0aW9uIGZpbGxBbmRTdHJva2UoY3R4LCBwYXRoTWFrZXIsIGZpbGwsIHN0cm9rZSwgbGluZVdpZHRoKSB7CiAgICBjdHguc2F2ZSgpOwogICAgY3R4LmJlZ2luUGF0aCgpOwogICAgcGF0aE1ha2VyKCk7CiAgICBjdHguZmlsbFN0eWxlID0gZmlsbDsKICAgIGN0eC5maWxsKCk7CiAgICBjdHguc3Ryb2tlU3R5bGUgPSBzdHJva2U7CiAgICBjdHgubGluZVdpZHRoID0gbGluZVdpZHRoOwogICAgY3R4LmxpbmVKb2luID0gInJvdW5kIjsKICAgIGN0eC5saW5lQ2FwID0gInJvdW5kIjsKICAgIGN0eC5zdHJva2UoKTsKICAgIGN0eC5yZXN0b3JlKCk7CiAgfQoKICBmdW5jdGlvbiBkcmF3U2VnbWVudChjdHgsIHgxLCB5MSwgeDIsIHkyLCBjb2xvciwgd2lkdGgpIHsKICAgIGN0eC5zYXZlKCk7CiAgICBjdHguc3Ryb2tlU3R5bGUgPSBjb2xvcjsKICAgIGN0eC5saW5lV2lkdGggPSB3aWR0aDsKICAgIGN0eC5saW5lQ2FwID0gInJvdW5kIjsKICAgIGN0eC5iZWdpblBhdGgoKTsKICAgIGN0eC5tb3ZlVG8oeDEsIHkxKTsKICAgIGN0eC5saW5lVG8oeDIsIHkyKTsKICAgIGN0eC5zdHJva2UoKTsKICAgIGN0eC5yZXN0b3JlKCk7CiAgfQoKICBmdW5jdGlvbiBkcmF3RGFzaGVkKGN0eCwgeDEsIHkxLCB4MiwgeTIsIGNvbG9yKSB7CiAgICBjdHguc2F2ZSgpOwogICAgY3R4LnN0cm9rZVN0eWxlID0gY29sb3I7CiAgICBjdHgubGluZVdpZHRoID0gMjsKICAgIGN0eC5zZXRMaW5lRGFzaChbNywgNl0pOwogICAgY3R4LmJlZ2luUGF0aCgpOwogICAgY3R4Lm1vdmVUbyh4MSwgeTEpOwogICAgY3R4LmxpbmVUbyh4MiwgeTIpOwogICAgY3R4LnN0cm9rZSgpOwogICAgY3R4LnJlc3RvcmUoKTsKICB9CgogIGZ1bmN0aW9uIGRyYXdEaW1lbnNpb24oY3R4LCB4MSwgeTEsIHgyLCB5MiwgbGFiZWwpIHsKICAgIGRyYXdTZWdtZW50KGN0eCwgeDEsIHkxLCB4MiwgeTIsICIjMTEyMDMzIiwgMik7CiAgICBkcmF3QXJyb3dIZWFkKGN0eCwgeDEsIHkxLCB4MiwgeTIpOwogICAgZHJhd0Fycm93SGVhZChjdHgsIHgyLCB5MiwgeDEsIHkxKTsKICAgIGRyYXdMYWJlbChjdHgsICh4MSArIHgyKSAvIDIsICh5MSArIHkyKSAvIDIsIGxhYmVsKTsKICB9CgogIGZ1bmN0aW9uIGRyYXdBcnJvd0hlYWQoY3R4LCB4LCB5LCB0b3dhcmRYLCB0b3dhcmRZKSB7CiAgICB2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKHRvd2FyZFkgLSB5LCB0b3dhcmRYIC0geCk7CiAgICB2YXIgbGVuZ3RoID0gOTsKICAgIGN0eC5zYXZlKCk7CiAgICBjdHguZmlsbFN0eWxlID0gIiMxMTIwMzMiOwogICAgY3R4LmJlZ2luUGF0aCgpOwogICAgY3R4Lm1vdmVUbyh4LCB5KTsKICAgIGN0eC5saW5lVG8oeCArIE1hdGguY29zKGFuZ2xlICsgMC41NSkgKiBsZW5ndGgsIHkgKyBNYXRoLnNpbihhbmdsZSArIDAuNTUpICogbGVuZ3RoKTsKICAgIGN0eC5saW5lVG8oeCArIE1hdGguY29zKGFuZ2xlIC0gMC41NSkgKiBsZW5ndGgsIHkgKyBNYXRoLnNpbihhbmdsZSAtIDAuNTUpICogbGVuZ3RoKTsKICAgIGN0eC5jbG9zZVBhdGgoKTsKICAgIGN0eC5maWxsKCk7CiAgICBjdHgucmVzdG9yZSgpOwogIH0KCiAgZnVuY3Rpb24gZHJhd1JpZ2h0QW5nbGUoY3R4LCB4LCB5LCBzaXplKSB7CiAgICBjdHguc2F2ZSgpOwogICAgY3R4LnN0cm9rZVN0eWxlID0gIiM5YTZhMDUiOwogICAgY3R4LmxpbmVXaWR0aCA9IDM7CiAgICBjdHguYmVnaW5QYXRoKCk7CiAgICBjdHgubW92ZVRvKHggKyBzaXplLCB5KTsKICAgIGN0eC5saW5lVG8oeCArIHNpemUsIHkgLSBzaXplKTsKICAgIGN0eC5saW5lVG8oeCwgeSAtIHNpemUpOwogICAgY3R4LnN0cm9rZSgpOwogICAgY3R4LnJlc3RvcmUoKTsKICB9CgogIGZ1bmN0aW9uIGRyYXdMYWJlbChjdHgsIHgsIHksIHRleHQpIHsKICAgIGN0eC5zYXZlKCk7CiAgICBjdHguZm9udCA9ICI3MDAgMTVweCBzeXN0ZW0tdWksIHNhbnMtc2VyaWYiOwogICAgY3R4LnRleHRBbGlnbiA9ICJjZW50ZXIiOwogICAgY3R4LnRleHRCYXNlbGluZSA9ICJtaWRkbGUiOwogICAgdmFyIG1ldHJpY3MgPSBjdHgubWVhc3VyZVRleHQodGV4dCk7CiAgICB2YXIgcGFkWCA9IDg7CiAgICB2YXIgcGFkWSA9IDU7CiAgICBjdHguZmlsbFN0eWxlID0gInJnYmEoMjU1LDI1NSwyNTUsMC45MikiOwogICAgY3R4LnN0cm9rZVN0eWxlID0gInJnYmEoMTQ0LDE2OCwxOTEsMC41NSkiOwogICAgY3R4LmxpbmVXaWR0aCA9IDE7CiAgICBjdHguYmVnaW5QYXRoKCk7CiAgICBjdHgucmVjdCh4IC0gbWV0cmljcy53aWR0aCAvIDIgLSBwYWRYLCB5IC0gMTEgLSBwYWRZLCBtZXRyaWNzLndpZHRoICsgcGFkWCAqIDIsIDIyICsgcGFkWSAqIDIpOwogICAgY3R4LmZpbGwoKTsKICAgIGN0eC5zdHJva2UoKTsKICAgIGN0eC5maWxsU3R5bGUgPSAiIzExMjAzMyI7CiAgICBjdHguZmlsbFRleHQodGV4dCwgeCwgeSk7CiAgICBjdHgucmVzdG9yZSgpOwogIH0KCiAgZnVuY3Rpb24gcHJlcGFyZVRhc2tzKCkgewogICAgdGFza0ZhY3RvcmllcyA9IFsKICAgICAgeyBza2lsbDogIlVtZmFuZyIsIHNoYXBlSWQ6ICJyZWN0YW5nbGUiLCB0aXRsZTogIkVyZ2VibmlzIiwgbWluRGlmZmljdWx0eTogMSwgbWF4RGlmZmljdWx0eTogMywgbWFrZTogdGFza1JlY3RhbmdsZVBlcmltZXRlciB9LAogICAgICB7IHNraWxsOiAiRmzDpGNoZSIsIHNoYXBlSWQ6ICJyZWN0YW5nbGUiLCB0aXRsZTogIkVyZ2VibmlzIiwgbWluRGlmZmljdWx0eTogMSwgbWF4RGlmZmljdWx0eTogMywgbWFrZTogdGFza1JlY3RhbmdsZUFyZWEgfSwKICAgICAgeyBza2lsbDogIlVtZmFuZyIsIHNoYXBlSWQ6ICJzcXVhcmUiLCB0aXRsZTogIkVyZ2VibmlzIiwgbWluRGlmZmljdWx0eTogMSwgbWF4RGlmZmljdWx0eTogMywgbWFrZTogdGFza1NxdWFyZVBlcmltZXRlciB9LAogICAgICB7IHNraWxsOiAiRmzDpGNoZSIsIHNoYXBlSWQ6ICJzcXVhcmUiLCB0aXRsZTogIlVta2VocmF1ZmdhYmUiLCBtaW5EaWZmaWN1bHR5OiAzLCBtYXhEaWZmaWN1bHR5OiA1LCBtYWtlOiB0YXNrU3F1YXJlUmV2ZXJzZUFyZWEgfSwKICAgICAgeyBza2lsbDogIkZsw6RjaGUiLCBzaGFwZUlkOiAidHJpYW5nbGUiLCB0aXRsZTogIkRyZWllY2siLCBtaW5EaWZmaWN1bHR5OiAxLCBtYXhEaWZmaWN1bHR5OiA0LCBtYWtlOiB0YXNrVHJpYW5nbGVBcmVhIH0sCiAgICAgIHsgc2tpbGw6ICJVbWZhbmciLCBzaGFwZUlkOiAidHJpYW5nbGUiLCB0aXRsZTogIkRyZWllY2siLCBtaW5EaWZmaWN1bHR5OiAxLCBtYXhEaWZmaWN1bHR5OiAzLCBtYWtlOiB0YXNrVHJpYW5nbGVQZXJpbWV0ZXIgfSwKICAgICAgeyBza2lsbDogIkZsw6RjaGUiLCBzaGFwZUlkOiAicmlnaHRUcmlhbmdsZSIsIHRpdGxlOiAiaGFsYmVzIFJlY2h0ZWNrIiwgbWluRGlmZmljdWx0eTogMSwgbWF4RGlmZmljdWx0eTogNCwgbWFrZTogdGFza1JpZ2h0VHJpYW5nbGVBcmVhIH0sCiAgICAgIHsgc2tpbGw6ICJGbMOkY2hlIiwgc2hhcGVJZDogInBhcmFsbGVsb2dyYW0iLCB0aXRsZTogIlZlcsOkbmRlcnVuZyIsIG1pbkRpZmZpY3VsdHk6IDIsIG1heERpZmZpY3VsdHk6IDUsIG1ha2U6IHRhc2tQYXJhbGxlbG9ncmFtQ2hhbmdlIH0sCiAgICAgIHsgc2tpbGw6ICJGbMOkY2hlIiwgc2hhcGVJZDogInRyYXBlem9pZCIsIHRpdGxlOiAiVHJhcGV6IiwgbWluRGlmZmljdWx0eTogMiwgbWF4RGlmZmljdWx0eTogNSwgbWFrZTogdGFza1RyYXBlem9pZEFyZWEgfSwKICAgICAgeyBza2lsbDogIkZsw6RjaGUiLCBzaGFwZUlkOiAicmhvbWJ1cyIsIHRpdGxlOiAiUmF1dGUiLCBtaW5EaWZmaWN1bHR5OiAyLCBtYXhEaWZmaWN1bHR5OiA0LCBtYWtlOiB0YXNrUmhvbWJ1c0FyZWEgfSwKICAgICAgeyBza2lsbDogIlN0cmF0ZWdpZSIsIHNoYXBlSWQ6ICJjb21wb3NpdGUiLCB0aXRsZTogIlplcmxlZ2VuIiwgbWluRGlmZmljdWx0eTogMiwgbWF4RGlmZmljdWx0eTogNSwgbWFrZTogdGFza0NvbXBvc2l0ZUFyZWEgfSwKICAgICAgeyBza2lsbDogIktub2JlbGF1ZmdhYmVuIiwgc2hhcGVJZDogImNvbXBvc2l0ZSIsIHRpdGxlOiAiTWVpc3RlcmF1ZmdhYmUiLCBtaW5EaWZmaWN1bHR5OiA0LCBtYXhEaWZmaWN1bHR5OiA1LCBtYWtlOiB0YXNrQ29tcG9zaXRlUHV6emxlIH0sCiAgICAgIHsgc2tpbGw6ICJVbWZhbmciLCBzaGFwZUlkOiAiY2lyY2xlIiwgdGl0bGU6ICJLcmVpcy1BdXNibGljayIsIG1pbkRpZmZpY3VsdHk6IDIsIG1heERpZmZpY3VsdHk6IDUsIG1ha2U6IHRhc2tDaXJjbGVQZXJpbWV0ZXIgfSwKICAgICAgeyBza2lsbDogIkZsw6RjaGUiLCBzaGFwZUlkOiAiY2lyY2xlIiwgdGl0bGU6ICJLcmVpcy1BdXNibGljayIsIG1pbkRpZmZpY3VsdHk6IDIsIG1heERpZmZpY3VsdHk6IDUsIG1ha2U6IHRhc2tDaXJjbGVBcmVhIH0sCiAgICAgIHsgc2tpbGw6ICJWb2x1bWVuIiwgc2hhcGVJZDogImN1YmUiLCB0aXRsZTogIlfDvHJmZWwiLCBtaW5EaWZmaWN1bHR5OiAxLCBtYXhEaWZmaWN1bHR5OiA0LCBtYWtlOiB0YXNrQ3ViZVZvbHVtZSB9LAogICAgICB7IHNraWxsOiAiVm9sdW1lbiIsIHNoYXBlSWQ6ICJjdWJvaWQiLCB0aXRsZTogIlF1YWRlciIsIG1pbkRpZmZpY3VsdHk6IDEsIG1heERpZmZpY3VsdHk6IDUsIG1ha2U6IHRhc2tDdWJvaWRWb2x1bWUgfSwKICAgICAgeyBza2lsbDogIlZvbHVtZW4iLCBzaGFwZUlkOiAiY3Vib2lkIiwgdGl0bGU6ICJVbWtlaHJhdWZnYWJlIiwgbWluRGlmZmljdWx0eTogNCwgbWF4RGlmZmljdWx0eTogNSwgbWFrZTogdGFza0N1Ym9pZFJldmVyc2VIZWlnaHQgfSwKICAgICAgeyBza2lsbDogIlZvbHVtZW4iLCBzaGFwZUlkOiAicHJpc20iLCB0aXRsZTogIlByaXNtYSIsIG1pbkRpZmZpY3VsdHk6IDIsIG1heERpZmZpY3VsdHk6IDUsIG1ha2U6IHRhc2tQcmlzbVZvbHVtZSB9LAogICAgICB7IHNraWxsOiAiS25vYmVsYXVmZ2FiZW4iLCBzaGFwZUlkOiAicHJpc20iLCB0aXRsZTogIk1laXN0ZXJhdWZnYWJlIiwgbWluRGlmZmljdWx0eTogNCwgbWF4RGlmZmljdWx0eTogNSwgbWFrZTogdGFza1ByaXNtUHV6emxlIH0sCiAgICAgIHsgc2tpbGw6ICJWb2x1bWVuIiwgc2hhcGVJZDogImN5bGluZGVyIiwgdGl0bGU6ICJaeWxpbmRlci1BdXNibGljayIsIG1pbkRpZmZpY3VsdHk6IDIsIG1heERpZmZpY3VsdHk6IDUsIG1ha2U6IHRhc2tDeWxpbmRlclZvbHVtZSB9LAogICAgICB7IHNraWxsOiAiVm9sdW1lbiIsIHNoYXBlSWQ6ICJweXJhbWlkIiwgdGl0bGU6ICJQeXJhbWlkZW4tQXVzYmxpY2siLCBtaW5EaWZmaWN1bHR5OiAzLCBtYXhEaWZmaWN1bHR5OiA1LCBtYWtlOiB0YXNrUHlyYW1pZFZvbHVtZSB9LAogICAgICB7IHNraWxsOiAiVm9sdW1lbiIsIHNoYXBlSWQ6ICJjb25lIiwgdGl0bGU6ICJLZWdlbC1BdXNibGljayIsIG1pbkRpZmZpY3VsdHk6IDMsIG1heERpZmZpY3VsdHk6IDUsIG1ha2U6IHRhc2tDb25lVm9sdW1lIH0sCiAgICAgIHsgc2tpbGw6ICJWb2x1bWVuIiwgc2hhcGVJZDogInNwaGVyZSIsIHRpdGxlOiAiS3VnZWwtQXVzYmxpY2siLCBtaW5EaWZmaWN1bHR5OiAzLCBtYXhEaWZmaWN1bHR5OiA1LCBtYWtlOiB0YXNrU3BoZXJlVm9sdW1lIH0sCiAgICAgIHsgc2tpbGw6ICJGb3JtZWxuIiwgc2hhcGVJZDogInJlY3RhbmdsZSIsIHRpdGxlOiAiRm9ybWVsIHfDpGhsZW4iLCBtaW5EaWZmaWN1bHR5OiAxLCBtYXhEaWZmaWN1bHR5OiA0LCBtYWtlOiB0YXNrRm9ybXVsYVJlY3RhbmdsZUFyZWEgfSwKICAgICAgeyBza2lsbDogIkZvcm1lbG4iLCBzaGFwZUlkOiAidHJpYW5nbGUiLCB0aXRsZTogIkZvcm1lbCB3w6RobGVuIiwgbWluRGlmZmljdWx0eTogMSwgbWF4RGlmZmljdWx0eTogNCwgbWFrZTogdGFza0Zvcm11bGFUcmlhbmdsZUFyZWEgfSwKICAgICAgeyBza2lsbDogIkZvcm1lbG4iLCBzaGFwZUlkOiAiY3Vib2lkIiwgdGl0bGU6ICJGb3JtZWwgd8OkaGxlbiIsIG1pbkRpZmZpY3VsdHk6IDEsIG1heERpZmZpY3VsdHk6IDQsIG1ha2U6IHRhc2tGb3JtdWxhQ3Vib2lkVm9sdW1lIH0sCiAgICAgIHsgc2tpbGw6ICJGb3JtZWxuIiwgc2hhcGVJZDogInByaXNtIiwgdGl0bGU6ICJGb3JtZWwgenVvcmRuZW4iLCBtaW5EaWZmaWN1bHR5OiAyLCBtYXhEaWZmaWN1bHR5OiA1LCBtYWtlOiB0YXNrRm9ybXVsYVByaXNtIH0sCiAgICAgIHsgc2tpbGw6ICJFaW5oZWl0ZW4iLCBzaGFwZUlkOiAicmVjdGFuZ2xlIiwgdGl0bGU6ICJFaW5oZWl0IHfDpGhsZW4iLCBtaW5EaWZmaWN1bHR5OiAxLCBtYXhEaWZmaWN1bHR5OiA1LCBtYWtlOiB0YXNrVW5pdEFyZWEgfSwKICAgICAgeyBza2lsbDogIkVpbmhlaXRlbiIsIHNoYXBlSWQ6ICJjdWJvaWQiLCB0aXRsZTogIkVpbmhlaXQgd8OkaGxlbiIsIG1pbkRpZmZpY3VsdHk6IDEsIG1heERpZmZpY3VsdHk6IDUsIG1ha2U6IHRhc2tVbml0Vm9sdW1lIH0sCiAgICAgIHsgc2tpbGw6ICJFaW5oZWl0ZW4iLCBzaGFwZUlkOiAic3F1YXJlIiwgdGl0bGU6ICJFaW5oZWl0IHfDpGhsZW4iLCBtaW5EaWZmaWN1bHR5OiAxLCBtYXhEaWZmaWN1bHR5OiA1LCBtYWtlOiB0YXNrVW5pdFBlcmltZXRlciB9LAogICAgICB7IHNraWxsOiAiU3RyYXRlZ2llIiwgc2hhcGVJZDogInJlY3RhbmdsZSIsIHRpdGxlOiAiRmVobGVyIGZpbmRlbiIsIG1pbkRpZmZpY3VsdHk6IDIsIG1heERpZmZpY3VsdHk6IDUsIG1ha2U6IHRhc2tGaW5kV3JvbmdSZWN0YW5nbGUgfSwKICAgICAgeyBza2lsbDogIlN0cmF0ZWdpZSIsIHNoYXBlSWQ6ICJjdWJvaWQiLCB0aXRsZTogIlZlcsOkbmRlcnVuZyIsIG1pbkRpZmZpY3VsdHk6IDIsIG1heERpZmZpY3VsdHk6IDUsIG1ha2U6IHRhc2tDdWJvaWRDaGFuZ2UgfSwKICAgICAgeyBza2lsbDogIlN0cmF0ZWdpZSIsIHNoYXBlSWQ6ICJyZWN0YW5nbGUiLCB0aXRsZTogIlNhY2hhdWZnYWJlIiwgbWluRGlmZmljdWx0eTogMiwgbWF4RGlmZmljdWx0eTogNSwgbWFrZTogdGFza1Jvb21GbG9vciB9LAogICAgICB7IHNraWxsOiAiVW1mYW5nIiwgc2hhcGVJZDogInJlY3RhbmdsZSIsIHRpdGxlOiAiU2FjaGF1ZmdhYmUiLCBtaW5EaWZmaWN1bHR5OiAyLCBtYXhEaWZmaWN1bHR5OiA1LCBtYWtlOiB0YXNrR2FyZGVuRmVuY2UgfSwKICAgICAgeyBza2lsbDogIlZvbHVtZW4iLCBzaGFwZUlkOiAiY3Vib2lkIiwgdGl0bGU6ICJTYWNoYXVmZ2FiZSIsIG1pbkRpZmZpY3VsdHk6IDIsIG1heERpZmZpY3VsdHk6IDUsIG1ha2U6IHRhc2tBcXVhcml1bSB9CiAgICBdOwogIH0KCiAgZnVuY3Rpb24gdGFza1JlY3RhbmdsZVBlcmltZXRlcihkaWZmaWN1bHR5KSB7CiAgICB2YXIgYSA9IHJuZCg0LCAxOCk7CiAgICB2YXIgYiA9IHJuZCgzLCAxMik7CiAgICB2YXIgYW5zd2VyID0gMiAqIGEgKyAyICogYjsKICAgIHJldHVybiBudW1iZXJDaG9pY2VUYXNrKCJVbWZhbmcgYmVyZWNobmVuIiwgIkVpbiBSZWNodGVjayBpc3QgIiArIG4oYSkgKyAiIGNtIGxhbmcgdW5kICIgKyBuKGIpICsgIiBjbSBicmVpdC4gV2llIGdyb8OfIGlzdCBkZXIgVW1mYW5nPyIsIGFuc3dlciwgImNtIiwgIlUgPSAyIMK3IGEgKyAyIMK3IGIgPSAyIMK3ICIgKyBuKGEpICsgIiArIDIgwrcgIiArIG4oYikgKyAiID0gIiArIG4oYW5zd2VyKSArICIgY20uIiwgIkJlaW0gVW1mYW5nIHdpcmQgZGVyIFJhbmQgYWRkaWVydDogTMOkbmdlIHVuZCBCcmVpdGUga29tbWVuIGpld2VpbHMgendlaW1hbCB2b3IuIiwgW2EgKyBiLCBhICogYiwgMiAqIGEgKyBiXSwgZGlmZmljdWx0eSwgMSk7CiAgfQoKICBmdW5jdGlvbiB0YXNrUmVjdGFuZ2xlQXJlYShkaWZmaWN1bHR5KSB7CiAgICB2YXIgYSA9IHJuZCg0LCAxOCk7CiAgICB2YXIgYiA9IHJuZCgzLCAxMik7CiAgICB2YXIgYW5zd2VyID0gYSAqIGI7CiAgICByZXR1cm4gbnVtYmVySW5wdXRUYXNrKCJGbMOkY2hlbmluaGFsdCBiZXJlY2huZW4iLCAiRWluIFppbW1lciBpc3QgIiArIG4oYSkgKyAiIG0gbGFuZyB1bmQgIiArIG4oYikgKyAiIG0gYnJlaXQuIEdpYiBkZW4gRmzDpGNoZW5pbmhhbHQgZWluLiIsIGFuc3dlciwgIm3CsiIsICJBID0gYSDCtyBiID0gIiArIG4oYSkgKyAiIMK3ICIgKyBuKGIpICsgIiA9ICIgKyBuKGFuc3dlcikgKyAiIG3Csi4iLCAiRmzDpGNoZW5pbmhhbHQgYmVkZXV0ZXQgUmVpaGVuIG1hbCBTcGFsdGVuLiBEaWUgRWluaGVpdCBpc3QgbcKyLiIsIGRpZmZpY3VsdHksIDEpOwogIH0KCiAgZnVuY3Rpb24gdGFza1NxdWFyZVBlcmltZXRlcihkaWZmaWN1bHR5KSB7CiAgICB2YXIgYSA9IHJuZCgzLCAxNCk7CiAgICB2YXIgYW5zd2VyID0gNCAqIGE7CiAgICByZXR1cm4gbnVtYmVyQ2hvaWNlVGFzaygiUXVhZHJhdC1VbWZhbmciLCAiRWluIFF1YWRyYXQgaGF0IGRpZSBTZWl0ZW5sw6RuZ2UgIiArIG4oYSkgKyAiIGNtLiBXaWUgZ3Jvw58gaXN0IGRlciBVbWZhbmc/IiwgYW5zd2VyLCAiY20iLCAiVSA9IDQgwrcgYSA9IDQgwrcgIiArIG4oYSkgKyAiID0gIiArIG4oYW5zd2VyKSArICIgY20uIiwgIkJlaW0gUXVhZHJhdCBzaW5kIGFsbGUgU2VpdGVuIGdsZWljaCBsYW5nLiIsIFthICogYSwgMiAqIGEsIDMgKiBhXSwgZGlmZmljdWx0eSwgMSk7CiAgfQoKICBmdW5jdGlvbiB0YXNrU3F1YXJlUmV2ZXJzZUFyZWEoZGlmZmljdWx0eSkgewogICAgdmFyIGEgPSBybmQoNCwgMTIpOwogICAgdmFyIGFyZWEgPSBhICogYTsKICAgIHJldHVybiBudW1iZXJJbnB1dFRhc2soIlVta2VocmF1ZmdhYmUiLCAiRWluIFF1YWRyYXQgaGF0IGRlbiBGbMOkY2hlbmluaGFsdCAiICsgbihhcmVhKSArICIgY23Csi4gV2llIGxhbmcgaXN0IGVpbmUgU2VpdGU/IiwgYSwgImNtIiwgIkdlc3VjaHQgaXN0IGEgbWl0IGEgwrcgYSA9ICIgKyBuKGFyZWEpICsgIi4gQWxzbyBpc3QgYSA9ICIgKyBuKGEpICsgIiBjbS4iLCAiV2VsY2hlIFphaGwgbWFsIHNpY2ggc2VsYnN0IGVyZ2lidCBkZW4gRmzDpGNoZW5pbmhhbHQ/IiwgZGlmZmljdWx0eSwgNCk7CiAgfQoKICBmdW5jdGlvbiB0YXNrVHJpYW5nbGVBcmVhKGRpZmZpY3VsdHkpIHsKICAgIHZhciBnID0gcm5kKDQsIDE2KTsKICAgIHZhciBoID0gcGljayhbNCwgNiwgOCwgMTAsIDEyXSk7CiAgICB2YXIgYW5zd2VyID0gZyAqIGggLyAyOwogICAgcmV0dXJuIG51bWJlckNob2ljZVRhc2soIkRyZWllY2tzZmzDpGNoZSIsICJFaW4gRHJlaWVjayBoYXQgZGllIEdydW5kc2VpdGUgZyA9ICIgKyBuKGcpICsgIiBjbSB1bmQgZGllIEjDtmhlIGggPSAiICsgbihoKSArICIgY20uIFdpZSBncm/DnyBpc3QgZGllIEZsw6RjaGU/IiwgYW5zd2VyLCAiY23CsiIsICJBID0gZyDCtyBoIDogMiA9ICIgKyBuKGcpICsgIiDCtyAiICsgbihoKSArICIgOiAyID0gIiArIG4oYW5zd2VyKSArICIgY23Csi4iLCAiRGFzIERyZWllY2sgaXN0IGhhbGIgc28gZ3Jvw58gd2llIGRhcyBwYXNzZW5kZSBSZWNodGVjay4iLCBbZyAqIGgsIGcgKyBoLCAoZyArIGgpICogMl0sIGRpZmZpY3VsdHksIDIpOwogIH0KCiAgZnVuY3Rpb24gdGFza1RyaWFuZ2xlUGVyaW1ldGVyKGRpZmZpY3VsdHkpIHsKICAgIHZhciBhID0gcm5kKDQsIDEyKTsKICAgIHZhciBiID0gcm5kKDQsIDEyKTsKICAgIHZhciBjID0gcm5kKDQsIDEyKTsKICAgIHZhciBhbnN3ZXIgPSBhICsgYiArIGM7CiAgICByZXR1cm4gbnVtYmVyQ2hvaWNlVGFzaygiRHJlaWVja3MtVW1mYW5nIiwgIkVpbiBEcmVpZWNrIGhhdCBkaWUgU2VpdGVuICIgKyBuKGEpICsgIiBjbSwgIiArIG4oYikgKyAiIGNtIHVuZCAiICsgbihjKSArICIgY20uIFdpZSBncm/DnyBpc3QgZGVyIFVtZmFuZz8iLCBhbnN3ZXIsICJjbSIsICJVID0gYSArIGIgKyBjID0gIiArIG4oYSkgKyAiICsgIiArIG4oYikgKyAiICsgIiArIG4oYykgKyAiID0gIiArIG4oYW5zd2VyKSArICIgY20uIiwgIkJlaW0gVW1mYW5nIHrDpGhsdCBqZWRlIFJhbmRzZWl0ZSBnZW5hdSBlaW5tYWwuIiwgW2EgKiBiLCAyICogKGEgKyBiKSwgYSArIGJdLCBkaWZmaWN1bHR5LCAxKTsKICB9CgogIGZ1bmN0aW9uIHRhc2tSaWdodFRyaWFuZ2xlQXJlYShkaWZmaWN1bHR5KSB7CiAgICB2YXIgYSA9IHBpY2soWzQsIDYsIDgsIDEwLCAxMiwgMTRdKTsKICAgIHZhciBiID0gcGljayhbNCwgNiwgOCwgMTBdKTsKICAgIHZhciBhbnN3ZXIgPSBhICogYiAvIDI7CiAgICByZXR1cm4gbnVtYmVySW5wdXRUYXNrKCJSZWNodHdpbmtsaWdlcyBEcmVpZWNrIiwgIkVpbiByZWNodHdpbmtsaWdlcyBEcmVpZWNrIGhhdCBLYXRoZXRlbiB2b24gIiArIG4oYSkgKyAiIGNtIHVuZCAiICsgbihiKSArICIgY20uIEdpYiBkZW4gRmzDpGNoZW5pbmhhbHQgZWluLiIsIGFuc3dlciwgImNtwrIiLCAiQSA9IGEgwrcgYiA6IDIgPSAiICsgbihhKSArICIgwrcgIiArIG4oYikgKyAiIDogMiA9ICIgKyBuKGFuc3dlcikgKyAiIGNtwrIuIiwgIkRpZSBLYXRoZXRlbiBiaWxkZW4gZWluIFJlY2h0ZWNrLiBEYXMgRHJlaWVjayBpc3QgZGllIEjDpGxmdGUgZGF2b24uIiwgZGlmZmljdWx0eSwgMik7CiAgfQoKICBmdW5jdGlvbiB0YXNrUGFyYWxsZWxvZ3JhbUNoYW5nZShkaWZmaWN1bHR5KSB7CiAgICByZXR1cm4gY2hvaWNlVGFzaygiVmVyw6RuZGVydW5nIiwgIkJlaSBlaW5lbSBQYXJhbGxlbG9ncmFtbSBibGVpYnQgZGllIEjDtmhlIGdsZWljaC4gRGllIEdydW5kc2VpdGUgd2lyZCB2ZXJkb3BwZWx0LiBXYXMgcGFzc2llcnQgbWl0IGRlbSBGbMOkY2hlbmluaGFsdD8iLCBbIkVyIHZlcmRvcHBlbHQgc2ljaC4iLCAiRXIgaGFsYmllcnQgc2ljaC4iLCAiRXIgYmxlaWJ0IGdsZWljaC4iLCAiRXIgdmVydmllcmZhY2h0IHNpY2guIl0sIDAsICJBID0gZyDCtyBoLiBXZW5uIG51ciBnIHZlcmRvcHBlbHQgd2lyZCB1bmQgaCBnbGVpY2ggYmxlaWJ0LCB3aXJkIGF1Y2ggQSB2ZXJkb3BwZWx0LiIsICJTY2hhdSBhdWYgZGllIEZvcm1lbCBBID0gZyDCtyBoLiIsIGRpZmZpY3VsdHksIDMpOwogIH0KCiAgZnVuY3Rpb24gdGFza1RyYXBlem9pZEFyZWEoZGlmZmljdWx0eSkgewogICAgdmFyIGEgPSBybmQoMTAsIDIwKTsKICAgIHZhciBjID0gcm5kKDQsIDEyKTsKICAgIHZhciBoID0gcGljayhbNCwgNiwgOCwgMTBdKTsKICAgIHZhciBhbnN3ZXIgPSAoYSArIGMpICogaCAvIDI7CiAgICByZXR1cm4gbnVtYmVyQ2hvaWNlVGFzaygiVHJhcGV6ZmzDpGNoZSIsICJFaW4gVHJhcGV6IGhhdCBwYXJhbGxlbGUgU2VpdGVuIGEgPSAiICsgbihhKSArICIgY20gdW5kIGMgPSAiICsgbihjKSArICIgY20uIERpZSBIw7ZoZSBiZXRyw6RndCAiICsgbihoKSArICIgY20uIFdpZSBncm/DnyBpc3QgQT8iLCBhbnN3ZXIsICJjbcKyIiwgIkEgPSAoYSArIGMpIMK3IGggOiAyID0gKCIgKyBuKGEpICsgIiArICIgKyBuKGMpICsgIikgwrcgIiArIG4oaCkgKyAiIDogMiA9ICIgKyBuKGFuc3dlcikgKyAiIGNtwrIuIiwgIkFkZGllcmUgenVlcnN0IGRpZSBwYXJhbGxlbGVuIFNlaXRlbiB1bmQgcmVjaG5lIGRhbm4gbWl0IGRlciBIw7ZoZS4iLCBbKGEgKyBjKSAqIGgsIGEgKiBjLCBhICsgYyArIGhdLCBkaWZmaWN1bHR5LCAzKTsKICB9CgogIGZ1bmN0aW9uIHRhc2tSaG9tYnVzQXJlYShkaWZmaWN1bHR5KSB7CiAgICB2YXIgZSA9IHBpY2soWzgsIDEwLCAxMiwgMTQsIDE2XSk7CiAgICB2YXIgZiA9IHBpY2soWzYsIDgsIDEwLCAxMl0pOwogICAgdmFyIGFuc3dlciA9IGUgKiBmIC8gMjsKICAgIHJldHVybiBudW1iZXJDaG9pY2VUYXNrKCJSYXV0ZSIsICJFaW5lIFJhdXRlIGhhdCBkaWUgRGlhZ29uYWxlbiBlID0gIiArIG4oZSkgKyAiIGNtIHVuZCBmID0gIiArIG4oZikgKyAiIGNtLiBXaWUgZ3Jvw58gaXN0IGRlciBGbMOkY2hlbmluaGFsdD8iLCBhbnN3ZXIsICJjbcKyIiwgIkEgPSBlIMK3IGYgOiAyID0gIiArIG4oZSkgKyAiIMK3ICIgKyBuKGYpICsgIiA6IDIgPSAiICsgbihhbnN3ZXIpICsgIiBjbcKyLiIsICJEaWUgRGlhZ29uYWxlbiBoZWxmZW4gYmVpbSBaZXJsZWdlbiBpbiBEcmVpZWNrZS4iLCBbZSAqIGYsIGUgKyBmLCAyICogKGUgKyBmKV0sIGRpZmZpY3VsdHksIDMpOwogIH0KCiAgZnVuY3Rpb24gdGFza0NvbXBvc2l0ZUFyZWEoZGlmZmljdWx0eSkgewogICAgdmFyIGEgPSBybmQoMTAsIDE4KTsKICAgIHZhciBiID0gcm5kKDgsIDE0KTsKICAgIHZhciBjID0gcm5kKDMsIDYpOwogICAgdmFyIGQgPSBybmQoMiwgNSk7CiAgICB2YXIgYW5zd2VyID0gYSAqIGIgLSBjICogZDsKICAgIHJldHVybiBudW1iZXJJbnB1dFRhc2soIlplcmxlZ3VuZ3NhdWZnYWJlIiwgIkVpbmUgTC1GbMOkY2hlIGVudHN0ZWh0IGF1cyBlaW5lbSBSZWNodGVjayAiICsgbihhKSArICIgY20gw5cgIiArIG4oYikgKyAiIGNtLiBPYmVuIHJlY2h0cyBmZWhsdCBlaW4gUmVjaHRlY2sgIiArIG4oYykgKyAiIGNtIMOXICIgKyBuKGQpICsgIiBjbS4gR2liIGRpZSBGbMOkY2hlIGVpbi4iLCBhbnN3ZXIsICJjbcKyIiwgIkdyb8OfZXMgUmVjaHRlY2s6ICIgKyBuKGEgKiBiKSArICIgY23Csi4gQXVzc2Nobml0dDogIiArIG4oYyAqIGQpICsgIiBjbcKyLiBBbHNvIEEgPSAiICsgbihhbnN3ZXIpICsgIiBjbcKyLiIsICJFcmfDpG56ZSB6dWVyc3QgenVtIGdyb8OfZW4gUmVjaHRlY2sgdW5kIHppZWhlIGRlbiBmZWhsZW5kZW4gVGVpbCBhYi4iLCBkaWZmaWN1bHR5LCAzKTsKICB9CgogIGZ1bmN0aW9uIHRhc2tDb21wb3NpdGVQdXp6bGUoZGlmZmljdWx0eSkgewogICAgdmFyIGEgPSAxNjsKICAgIHZhciBiID0gMTA7CiAgICB2YXIgYyA9IDU7CiAgICB2YXIgZCA9IDQ7CiAgICB2YXIgYW5zd2VyID0gYSAqIGIgLSBjICogZDsKICAgIHJldHVybiBudW1iZXJDaG9pY2VUYXNrKCJNZWlzdGVyYXVmZ2FiZSIsICJFaW4gR2FydGVuYmVldCBpc3QgTC1mw7ZybWlnLiBHcm/Dn2VzIFJlY2h0ZWNrOiAxNiBtIMOXIDEwIG0uIEF1c3NjaG5pdHQ6IDUgbSDDlyA0IG0uIFdpZSB2aWVsZSBRdWFkcmF0bWV0ZXIgRXJkZSB3ZXJkZW4gZ2VicmF1Y2h0PyIsIGFuc3dlciwgIm3CsiIsICJBID0gMTYgwrcgMTAgLSA1IMK3IDQgPSAxNjAgLSAyMCA9IDE0MCBtwrIuIiwgIlp1ZXJzdCBkYXMgZ3Jvw59lIFJlY2h0ZWNrLCBkYW5uIGRlbiBBdXNzY2huaXR0IGFiemllaGVuLiIsIFthICogYiwgYyAqIGQsIDIgKiBhICsgMiAqIGJdLCBkaWZmaWN1bHR5LCA1KTsKICB9CgogIGZ1bmN0aW9uIHRhc2tDaXJjbGVQZXJpbWV0ZXIoZGlmZmljdWx0eSkgewogICAgdmFyIHIgPSBwaWNrKFsyLCAzLCA0LCA1LCA2LCA4XSk7CiAgICB2YXIgYW5zd2VyID0gMiAqIFBJICogcjsKICAgIHJldHVybiBudW1iZXJDaG9pY2VUYXNrKCJLcmVpc3VtZmFuZyIsICJBdXNibGljayBLcmVpczogciA9ICIgKyBuKHIpICsgIiBjbS4gTnV0emUgz4Ag4omIIDMsMTQuIFdpZSBncm/DnyBpc3QgZGVyIFVtZmFuZyB1bmdlZsOkaHI/IiwgYW5zd2VyLCAiY20iLCAiVSA9IDIgwrcgz4AgwrcgciA9IDIgwrcgMywxNCDCtyAiICsgbihyKSArICIgPSAiICsgbihhbnN3ZXIpICsgIiBjbS4iLCAiVW1mYW5nIGlzdCBkZXIgUmFuZDogQmVpbSBLcmVpcyBudXR6dCBkdSAyIMK3IM+AIMK3IHIuIiwgW1BJICogciAqIHIsIDIgKiByLCBQSSAqIHJdLCBkaWZmaWN1bHR5LCAzKTsKICB9CgogIGZ1bmN0aW9uIHRhc2tDaXJjbGVBcmVhKGRpZmZpY3VsdHkpIHsKICAgIHZhciByID0gcGljayhbMiwgMywgNCwgNSwgNl0pOwogICAgdmFyIGFuc3dlciA9IFBJICogciAqIHI7CiAgICByZXR1cm4gbnVtYmVyQ2hvaWNlVGFzaygiS3JlaXNmbMOkY2hlIiwgIkF1c2JsaWNrIEtyZWlzOiByID0gIiArIG4ocikgKyAiIGNtLiBOdXR6ZSDPgCDiiYggMywxNC4gV2llIGdyb8OfIGlzdCBkaWUgRmzDpGNoZSB1bmdlZsOkaHI/IiwgYW5zd2VyLCAiY23CsiIsICJBID0gz4AgwrcgcsKyID0gMywxNCDCtyAiICsgbihyKSArICLCsiA9ICIgKyBuKGFuc3dlcikgKyAiIGNtwrIuIiwgIkbDvHIgZGllIEtyZWlzZmzDpGNoZSBrb21tdCBkZXIgUmFkaXVzIHp3ZWltYWwgdm9yOiBywrIuIiwgWzIgKiBQSSAqIHIsIHIgKiByLCBQSSAqIHJdLCBkaWZmaWN1bHR5LCAzKTsKICB9CgogIGZ1bmN0aW9uIHRhc2tDdWJlVm9sdW1lKGRpZmZpY3VsdHkpIHsKICAgIHZhciBhID0gcm5kKDIsIDkpOwogICAgdmFyIGFuc3dlciA9IGEgKiBhICogYTsKICAgIHJldHVybiBudW1iZXJDaG9pY2VUYXNrKCJXw7xyZmVsdm9sdW1lbiIsICJFaW4gV8O8cmZlbCBoYXQgZGllIEthbnRlbmzDpG5nZSAiICsgbihhKSArICIgY20uIFdpZSBncm/DnyBpc3QgZGFzIFZvbHVtZW4/IiwgYW5zd2VyLCAiY23CsyIsICJWID0gYSDCtyBhIMK3IGEgPSAiICsgbihhKSArICIgwrcgIiArIG4oYSkgKyAiIMK3ICIgKyBuKGEpICsgIiA9ICIgKyBuKGFuc3dlcikgKyAiIGNtwrMuIiwgIlZvbHVtZW4gesOkaGx0IEVpbmhlaXRzd8O8cmZlbCwgZGVzaGFsYiBjbcKzLiIsIFthICogYSwgNiAqIGEgKiBhLCA0ICogYV0sIGRpZmZpY3VsdHksIDEpOwogIH0KCiAgZnVuY3Rpb24gdGFza0N1Ym9pZFZvbHVtZShkaWZmaWN1bHR5KSB7CiAgICB2YXIgbCA9IHJuZCg0LCAxNCk7CiAgICB2YXIgYiA9IHJuZCgzLCAxMCk7CiAgICB2YXIgaCA9IHJuZCgyLCA4KTsKICAgIHZhciBhbnN3ZXIgPSBsICogYiAqIGg7CiAgICByZXR1cm4gbnVtYmVySW5wdXRUYXNrKCJRdWFkZXJ2b2x1bWVuIiwgIkVpbiBRdWFkZXIgaXN0ICIgKyBuKGwpICsgIiBjbSBsYW5nLCAiICsgbihiKSArICIgY20gYnJlaXQgdW5kICIgKyBuKGgpICsgIiBjbSBob2NoLiBHaWIgZGFzIFZvbHVtZW4gZWluLiIsIGFuc3dlciwgImNtwrMiLCAiViA9IGwgwrcgYiDCtyBoID0gIiArIG4obCkgKyAiIMK3ICIgKyBuKGIpICsgIiDCtyAiICsgbihoKSArICIgPSAiICsgbihhbnN3ZXIpICsgIiBjbcKzLiIsICJFcnN0IEdydW5kZmzDpGNoZSBsIMK3IGIsIGRhbm4gbWFsIEjDtmhlLiIsIGRpZmZpY3VsdHksIDEpOwogIH0KCiAgZnVuY3Rpb24gdGFza0N1Ym9pZFJldmVyc2VIZWlnaHQoZGlmZmljdWx0eSkgewogICAgdmFyIGwgPSBybmQoNCwgMTApOwogICAgdmFyIGIgPSBybmQoMywgOCk7CiAgICB2YXIgaCA9IHJuZCgyLCA5KTsKICAgIHZhciB2b2x1bWUgPSBsICogYiAqIGg7CiAgICByZXR1cm4gbnVtYmVySW5wdXRUYXNrKCJGZWhsZW5kZSBIw7ZoZSIsICJFaW4gUXVhZGVyIGhhdCBWID0gIiArIG4odm9sdW1lKSArICIgY23CsywgbCA9ICIgKyBuKGwpICsgIiBjbSB1bmQgYiA9ICIgKyBuKGIpICsgIiBjbS4gV2llIGhvY2ggaXN0IGVyPyIsIGgsICJjbSIsICJoID0gViA6IChsIMK3IGIpID0gIiArIG4odm9sdW1lKSArICIgOiAoIiArIG4obCkgKyAiIMK3ICIgKyBuKGIpICsgIikgPSAiICsgbihoKSArICIgY20uIiwgIlRlaWxlIGRhcyBWb2x1bWVuIGR1cmNoIGRpZSBHcnVuZGZsw6RjaGUuIiwgZGlmZmljdWx0eSwgNCk7CiAgfQoKICBmdW5jdGlvbiB0YXNrUHJpc21Wb2x1bWUoZGlmZmljdWx0eSkgewogICAgdmFyIGcgPSBwaWNrKFs2LCA4LCAxMCwgMTJdKTsKICAgIHZhciBoID0gcGljayhbNCwgNiwgOF0pOwogICAgdmFyIGsgPSBybmQoNSwgMTIpOwogICAgdmFyIGJhc2UgPSBnICogaCAvIDI7CiAgICB2YXIgYW5zd2VyID0gYmFzZSAqIGs7CiAgICByZXR1cm4gbnVtYmVyQ2hvaWNlVGFzaygiRHJlaWVja3NwcmlzbWEiLCAiRWluIERyZWllY2tzcHJpc21hIGhhdCBlaW5lIERyZWllY2tzZ3J1bmRmbMOkY2hlIG1pdCBnID0gIiArIG4oZykgKyAiIGNtIHVuZCBoID0gIiArIG4oaCkgKyAiIGNtLiBEaWUgS8O2cnBlcmjDtmhlIGsgYmV0csOkZ3QgIiArIG4oaykgKyAiIGNtLiBXaWUgZ3Jvw58gaXN0IFY/IiwgYW5zd2VyLCAiY23CsyIsICJHID0gIiArIG4oZykgKyAiIMK3ICIgKyBuKGgpICsgIiA6IDIgPSAiICsgbihiYXNlKSArICIgY23Csi4gViA9IEcgwrcgayA9ICIgKyBuKGJhc2UpICsgIiDCtyAiICsgbihrKSArICIgPSAiICsgbihhbnN3ZXIpICsgIiBjbcKzLiIsICJFcnN0IEdydW5kZmzDpGNoZSBiZXJlY2huZW4sIGRhbm4gaW4gZGllIFRpZWZlIHN0YXBlbG4uIiwgW2cgKiBoICogaywgYmFzZSArIGssIGcgKyBoICsga10sIGRpZmZpY3VsdHksIDMpOwogIH0KCiAgZnVuY3Rpb24gdGFza1ByaXNtUHV6emxlKGRpZmZpY3VsdHkpIHsKICAgIHZhciBnID0gODsKICAgIHZhciBoID0gNjsKICAgIHZhciBrID0gMTI7CiAgICB2YXIgYmFzZSA9IGcgKiBoIC8gMjsKICAgIHZhciBhbnN3ZXIgPSBiYXNlICogazsKICAgIHJldHVybiBudW1iZXJJbnB1dFRhc2soIk1laXN0ZXJhdWZnYWJlIiwgIkVpbiBaZWx0IMOkaG5lbHQgZWluZW0gRHJlaWVja3NwcmlzbWEuIERpZSBEcmVpZWNrc2Zsw6RjaGUgdm9ybmUgaGF0IGcgPSA4IG0gdW5kIGggPSA2IG0uIERhcyBaZWx0IGlzdCAxMiBtIGxhbmcuIEdpYiBkYXMgVm9sdW1lbiBlaW4uIiwgYW5zd2VyLCAibcKzIiwgIkcgPSA4IMK3IDYgOiAyID0gMjQgbcKyLiBWID0gMjQgwrcgMTIgPSAyODggbcKzLiIsICJaZWx0IHZvcm5lIGFscyBEcmVpZWNrLCBkYW5uIGluIGRpZSBMw6RuZ2Ugc3RhcGVsbi4iLCBkaWZmaWN1bHR5LCA1KTsKICB9CgogIGZ1bmN0aW9uIHRhc2tDeWxpbmRlclZvbHVtZShkaWZmaWN1bHR5KSB7CiAgICB2YXIgciA9IHBpY2soWzIsIDMsIDQsIDVdKTsKICAgIHZhciBoID0gcGljayhbNCwgNiwgOCwgMTBdKTsKICAgIHZhciBhbnN3ZXIgPSBQSSAqIHIgKiByICogaDsKICAgIHJldHVybiBudW1iZXJDaG9pY2VUYXNrKCJaeWxpbmRlciIsICJBdXNibGljayBaeWxpbmRlcjogciA9ICIgKyBuKHIpICsgIiBjbSwgaCA9ICIgKyBuKGgpICsgIiBjbS4gTnV0emUgz4Ag4omIIDMsMTQuIFdpZSBncm/DnyBpc3QgViB1bmdlZsOkaHI/IiwgYW5zd2VyLCAiY23CsyIsICJWID0gz4AgwrcgcsKyIMK3IGggPSAzLDE0IMK3ICIgKyBuKHIpICsgIsKyIMK3ICIgKyBuKGgpICsgIiA9ICIgKyBuKGFuc3dlcikgKyAiIGNtwrMuIiwgIktyZWlzLUdydW5kZmzDpGNoZSBtYWwgSMO2aGUuIiwgW1BJICogciAqIGgsIDIgKiBQSSAqIHIgKiBoLCBQSSAqIHIgKiByXSwgZGlmZmljdWx0eSwgMyk7CiAgfQoKICBmdW5jdGlvbiB0YXNrUHlyYW1pZFZvbHVtZShkaWZmaWN1bHR5KSB7CiAgICB2YXIgYSA9IHBpY2soWzMsIDYsIDksIDEyXSk7CiAgICB2YXIgaCA9IHBpY2soWzYsIDksIDEyXSk7CiAgICB2YXIgYW5zd2VyID0gYSAqIGEgKiBoIC8gMzsKICAgIHJldHVybiBudW1iZXJDaG9pY2VUYXNrKCJQeXJhbWlkZSIsICJBdXNibGljayBQeXJhbWlkZTogcXVhZHJhdGlzY2hlIEdydW5kZmzDpGNoZSBhID0gIiArIG4oYSkgKyAiIGNtLCBIw7ZoZSBoID0gIiArIG4oaCkgKyAiIGNtLiBXaWUgZ3Jvw58gaXN0IFY/IiwgYW5zd2VyLCAiY23CsyIsICJHID0gIiArIG4oYSkgKyAiIMK3ICIgKyBuKGEpICsgIiA9ICIgKyBuKGEgKiBhKSArICIgY23Csi4gViA9IEcgwrcgaCA6IDMgPSAiICsgbihhbnN3ZXIpICsgIiBjbcKzLiIsICJQeXJhbWlkZW52b2x1bWVuOiBHcnVuZGZsw6RjaGUgbWFsIEjDtmhlIGR1cmNoIDMuIiwgW2EgKiBhICogaCwgYSAqIGggLyAzLCBhICogYV0sIGRpZmZpY3VsdHksIDQpOwogIH0KCiAgZnVuY3Rpb24gdGFza0NvbmVWb2x1bWUoZGlmZmljdWx0eSkgewogICAgdmFyIHIgPSBwaWNrKFsyLCAzLCA0XSk7CiAgICB2YXIgaCA9IHBpY2soWzYsIDksIDEyXSk7CiAgICB2YXIgYW5zd2VyID0gUEkgKiByICogciAqIGggLyAzOwogICAgcmV0dXJuIG51bWJlckNob2ljZVRhc2soIktlZ2VsIiwgIkF1c2JsaWNrIEtlZ2VsOiByID0gIiArIG4ocikgKyAiIGNtLCBoID0gIiArIG4oaCkgKyAiIGNtLiBOdXR6ZSDPgCDiiYggMywxNC4gV2llIGdyb8OfIGlzdCBWIHVuZ2Vmw6Rocj8iLCBhbnN3ZXIsICJjbcKzIiwgIlYgPSDPgCDCtyBywrIgwrcgaCA6IDMgPSAzLDE0IMK3ICIgKyBuKHIpICsgIsKyIMK3ICIgKyBuKGgpICsgIiA6IDMgPSAiICsgbihhbnN3ZXIpICsgIiBjbcKzLiIsICJEZXIgS2VnZWwgbnV0enQgZGllIEtyZWlzZ3J1bmRmbMOkY2hlIHVuZCB3aXJkIGR1cmNoIDMgZ2VyZWNobmV0LiIsIFtQSSAqIHIgKiByICogaCwgUEkgKiByICogaCwgMiAqIFBJICogcl0sIGRpZmZpY3VsdHksIDQpOwogIH0KCiAgZnVuY3Rpb24gdGFza1NwaGVyZVZvbHVtZShkaWZmaWN1bHR5KSB7CiAgICB2YXIgciA9IHBpY2soWzIsIDMsIDRdKTsKICAgIHZhciBhbnN3ZXIgPSA0ICogUEkgKiByICogciAqIHIgLyAzOwogICAgcmV0dXJuIG51bWJlckNob2ljZVRhc2soIkt1Z2VsIiwgIkF1c2JsaWNrIEt1Z2VsOiByID0gIiArIG4ocikgKyAiIGNtLiBOdXR6ZSDPgCDiiYggMywxNC4gV2llIGdyb8OfIGlzdCBWIHVuZ2Vmw6Rocj8iLCBhbnN3ZXIsICJjbcKzIiwgIlYgPSA0IDogMyDCtyDPgCDCtyBywrMgPSA0IDogMyDCtyAzLDE0IMK3ICIgKyBuKHIpICsgIsKzID0gIiArIG4oYW5zd2VyKSArICIgY23Csy4iLCAiQmVpbSBLdWdlbHZvbHVtZW4ga29tbXQgZGVyIFJhZGl1cyBkcmVpbWFsIHZvci4iLCBbNCAqIFBJICogciAqIHIsIFBJICogciAqIHIgKiByLCAyICogUEkgKiByXSwgZGlmZmljdWx0eSwgNCk7CiAgfQoKICBmdW5jdGlvbiB0YXNrRm9ybXVsYVJlY3RhbmdsZUFyZWEoZGlmZmljdWx0eSkgewogICAgcmV0dXJuIGNob2ljZVRhc2soIkZvcm1lbCB3w6RobGVuIiwgIldlbGNoZSBGb3JtZWwgcGFzc3QgenVtIEZsw6RjaGVuaW5oYWx0IGVpbmVzIFJlY2h0ZWNrcz8iLCBbIkEgPSBhIMK3IGIiLCAiVSA9IDIgwrcgYSArIDIgwrcgYiIsICJWID0gbCDCtyBiIMK3IGgiLCAiQSA9IGcgwrcgaCA6IDIiXSwgMCwgIkJlaW0gUmVjaHRlY2sgd2VyZGVuIEzDpG5nZSB1bmQgQnJlaXRlIG11bHRpcGxpemllcnQ6IEEgPSBhIMK3IGIuIiwgIkZsw6RjaGVuaW5oYWx0IHrDpGhsdCBLw6RzdGNoZW4gaW0gUmVjaHRlY2suIiwgZGlmZmljdWx0eSwgMSk7CiAgfQoKICBmdW5jdGlvbiB0YXNrRm9ybXVsYVRyaWFuZ2xlQXJlYShkaWZmaWN1bHR5KSB7CiAgICByZXR1cm4gY2hvaWNlVGFzaygiRm9ybWVsIHfDpGhsZW4iLCAiV2VsY2hlIEZvcm1lbCBwYXNzdCB6dW0gRmzDpGNoZW5pbmhhbHQgZWluZXMgRHJlaWVja3MgbWl0IEdydW5kc2VpdGUgZyB1bmQgSMO2aGUgaD8iLCBbIkEgPSBnIMK3IGggOiAyIiwgIkEgPSBnIMK3IGgiLCAiVSA9IDMgwrcgZyIsICJWID0gRyDCtyBoIl0sIDAsICJEYXMgRHJlaWVjayBpc3QgZGllIEjDpGxmdGUgZGVzIHBhc3NlbmRlbiBSZWNodGVja3M6IEEgPSBnIMK3IGggOiAyLiIsICJEcmVpZWNrIGJlZGV1dGV0OiBwYXNzZW5kZXMgUmVjaHRlY2sgaGFsYmllcmVuLiIsIGRpZmZpY3VsdHksIDEpOwogIH0KCiAgZnVuY3Rpb24gdGFza0Zvcm11bGFDdWJvaWRWb2x1bWUoZGlmZmljdWx0eSkgewogICAgcmV0dXJuIGNob2ljZVRhc2soIkZvcm1lbCB3w6RobGVuIiwgIldlbGNoZSBGb3JtZWwgcGFzc3QgenVtIFZvbHVtZW4gZWluZXMgUXVhZGVycz8iLCBbIlYgPSBsIMK3IGIgwrcgaCIsICJBID0gYSDCtyBiIiwgIlUgPSAyIMK3IGwgKyAyIMK3IGIiLCAiViA9IGEgwrcgYSJdLCAwLCAiRWluIFF1YWRlciB3aXJkIGF1cyBMw6RuZ2UsIEJyZWl0ZSB1bmQgSMO2aGUgZ2ViaWxkZXQ6IFYgPSBsIMK3IGIgwrcgaC4iLCAiVm9sdW1lbiBicmF1Y2h0IGRyZWkgTMOkbmdlbnJpY2h0dW5nZW4uIiwgZGlmZmljdWx0eSwgMSk7CiAgfQoKICBmdW5jdGlvbiB0YXNrRm9ybXVsYVByaXNtKGRpZmZpY3VsdHkpIHsKICAgIHJldHVybiBjaG9pY2VUYXNrKCJadW9yZG5lbiIsICJXZWxjaGUgQXVzc2FnZSBwYXNzdCB6dSBqZWRlbSBQcmlzbWE/IiwgWyJWID0gR3J1bmRmbMOkY2hlIMK3IEvDtnJwZXJow7ZoZSIsICJVID0gNCDCtyBhIiwgIkEgPSDPgCDCtyBywrIiLCAiViA9IGEgwrcgYSJdLCAwLCAiRsO8ciBqZWRlcyBQcmlzbWEgZ2lsdDogVm9sdW1lbiA9IEdydW5kZmzDpGNoZSDCtyBLw7ZycGVyaMO2aGUuIiwgIkVpbiBQcmlzbWEgc3RhcGVsdCBnbGVpY2hlIEdydW5kZmzDpGNoZW4uIiwgZGlmZmljdWx0eSwgMik7CiAgfQoKICBmdW5jdGlvbiB0YXNrVW5pdEFyZWEoZGlmZmljdWx0eSkgewogICAgcmV0dXJuIGNob2ljZVRhc2soIkVpbmhlaXQgd8OkaGxlbiIsICJXZWxjaGUgRWluaGVpdCBwYXNzdCB6dSBlaW5lbSBGbMOkY2hlbmluaGFsdD8iLCBbImNtwrIiLCAiY20iLCAiY23CsyIsICJrZyJdLCAwLCAiRmzDpGNoZW5pbmhhbHQgd2lyZCBpbiBRdWFkcmF0ZWluaGVpdGVuIGdlbWVzc2VuLCB6dW0gQmVpc3BpZWwgY23CsiBvZGVyIG3Csi4iLCAiRWluZSBGbMOkY2hlIGhhdCB6d2VpIFJpY2h0dW5nZW46IEzDpG5nZSB1bmQgQnJlaXRlLiIsIGRpZmZpY3VsdHksIDEpOwogIH0KCiAgZnVuY3Rpb24gdGFza1VuaXRWb2x1bWUoZGlmZmljdWx0eSkgewogICAgcmV0dXJuIGNob2ljZVRhc2soIkVpbmhlaXQgd8OkaGxlbiIsICJXZWxjaGUgRWluaGVpdCBwYXNzdCB6dSBlaW5lbSBWb2x1bWVuPyIsIFsiY23CsyIsICJjbcKyIiwgImNtIiwgIkdyYWQiXSwgMCwgIlZvbHVtZW4gd2lyZCBpbiBLdWJpa2VpbmhlaXRlbiBnZW1lc3NlbiwgenVtIEJlaXNwaWVsIGNtwrMgb2RlciBtwrMuIiwgIlZvbHVtZW4gaGF0IGRyZWkgUmljaHR1bmdlbi4iLCBkaWZmaWN1bHR5LCAxKTsKICB9CgogIGZ1bmN0aW9uIHRhc2tVbml0UGVyaW1ldGVyKGRpZmZpY3VsdHkpIHsKICAgIHJldHVybiBjaG9pY2VUYXNrKCJFaW5oZWl0IHfDpGhsZW4iLCAiV2VsY2hlIEVpbmhlaXQgcGFzc3QgenVtIFVtZmFuZz8iLCBbIm0iLCAibcKyIiwgIm3CsyIsICJMaXRlciBwcm8gTWludXRlIl0sIDAsICJVbWZhbmcgaXN0IGVpbmUgTMOkbmdlIGFtIFJhbmQuIERlc2hhbGIgcGFzc3QgbSBvZGVyIGNtLiIsICJVbWZhbmcgaXN0IGtlaW4gRmzDpGNoZW4tIHVuZCBrZWluIFJhdW1tYcOfLiIsIGRpZmZpY3VsdHksIDEpOwogIH0KCiAgZnVuY3Rpb24gdGFza0ZpbmRXcm9uZ1JlY3RhbmdsZShkaWZmaWN1bHR5KSB7CiAgICB2YXIgYSA9IDg7CiAgICB2YXIgYiA9IDU7CiAgICByZXR1cm4gY2hvaWNlVGFzaygiRmVobGVyIGZpbmRlbiIsICJFaW4gUmVjaHRlY2sgaGF0IGEgPSA4IGNtIHVuZCBiID0gNSBjbS4gV2VsY2hlIFJlY2hudW5nIGlzdCBmYWxzY2g/IiwgWyJBID0gMiDCtyA4ICsgMiDCtyA1ID0gMjYgY23CsiIsICJVID0gMiDCtyA4ICsgMiDCtyA1ID0gMjYgY20iLCAiQSA9IDggwrcgNSA9IDQwIGNtwrIiLCAiVSA9IDggKyA1ICsgOCArIDUgPSAyNiBjbSJdLCAwLCAiRGllIFJlY2hudW5nIDIgwrcgOCArIDIgwrcgNSBiZXJlY2huZXQgZGVuIFVtZmFuZywgbmljaHQgZGVuIEZsw6RjaGVuaW5oYWx0LiBBdcOfZXJkZW0gd8OkcmUgZsO8ciBGbMOkY2hlIGRpZSBFaW5oZWl0IGNtwrIgbsO2dGlnLiIsICJQcsO8ZmUgenVlcnN0OiBXaXJkIFJhbmQgb2RlciBGbMOkY2hlIGdlc3VjaHQ/IiwgZGlmZmljdWx0eSwgMyk7CiAgfQoKICBmdW5jdGlvbiB0YXNrQ3Vib2lkQ2hhbmdlKGRpZmZpY3VsdHkpIHsKICAgIHJldHVybiBjaG9pY2VUYXNrKCJWZXLDpG5kZXJ1bmciLCAiQmVpIGVpbmVtIFF1YWRlciBibGVpYmVuIEzDpG5nZSB1bmQgQnJlaXRlIGdsZWljaC4gRGllIEjDtmhlIHdpcmQgdmVyZHJlaWZhY2h0LiBXYXMgcGFzc2llcnQgbWl0IGRlbSBWb2x1bWVuPyIsIFsiRXMgdmVyZHJlaWZhY2h0IHNpY2guIiwgIkVzIHZlcmRvcHBlbHQgc2ljaC4iLCAiRXMgYmxlaWJ0IGdsZWljaC4iLCAiRXMgd2lyZCBuZXVubWFsIHNvIGdyb8OfLiJdLCAwLCAiViA9IGwgwrcgYiDCtyBoLiBXZW5uIG51ciBoIHZlcmRyZWlmYWNodCB3aXJkLCB3aXJkIGF1Y2ggViB2ZXJkcmVpZmFjaHQuIiwgIlNjaGF1IGF1ZiBWID0gbCDCtyBiIMK3IGguIiwgZGlmZmljdWx0eSwgMyk7CiAgfQoKICBmdW5jdGlvbiB0YXNrUm9vbUZsb29yKGRpZmZpY3VsdHkpIHsKICAgIHZhciBsID0gcm5kKDQsIDkpOwogICAgdmFyIGIgPSBybmQoMywgNyk7CiAgICB2YXIgYW5zd2VyID0gbCAqIGI7CiAgICByZXR1cm4gbnVtYmVyQ2hvaWNlVGFzaygiU2FjaGF1ZmdhYmUiLCAiRWluIEtsYXNzZW5yYXVtIGlzdCAiICsgbihsKSArICIgbSBsYW5nIHVuZCAiICsgbihiKSArICIgbSBicmVpdC4gV2llIHZpZWwgQm9kZW5mbMOkY2hlIG11c3MgZ2VyZWluaWd0IHdlcmRlbj8iLCBhbnN3ZXIsICJtwrIiLCAiQm9kZW5mbMOkY2hlID0gUmVjaHRlY2tmbMOkY2hlID0gIiArIG4obCkgKyAiIMK3ICIgKyBuKGIpICsgIiA9ICIgKyBuKGFuc3dlcikgKyAiIG3Csi4iLCAiRWluIEJvZGVuIGlzdCBlaW5lIEZsw6RjaGUsIG5pY2h0IGVpbiBVbWZhbmcuIiwgWzIgKiAobCArIGIpLCBsICsgYiwgbCAqIGIgKiAyXSwgZGlmZmljdWx0eSwgMyk7CiAgfQoKICBmdW5jdGlvbiB0YXNrR2FyZGVuRmVuY2UoZGlmZmljdWx0eSkgewogICAgdmFyIGwgPSBybmQoNiwgMTQpOwogICAgdmFyIGIgPSBybmQoNCwgOSk7CiAgICB2YXIgYW5zd2VyID0gMiAqIChsICsgYik7CiAgICByZXR1cm4gbnVtYmVyQ2hvaWNlVGFzaygiQW53ZW5kdW5nc2F1ZmdhYmUiLCAiRWluIHJlY2h0ZWNraWdlcyBHYXJ0ZW5iZWV0IGlzdCAiICsgbihsKSArICIgbSBsYW5nIHVuZCAiICsgbihiKSArICIgbSBicmVpdC4gV2llIHZpZWxlIE1ldGVyIFphdW4gYnJhdWNodCBtYW4gcnVuZGhlcnVtPyIsIGFuc3dlciwgIm0iLCAiWmF1biBydW5kaGVydW0gYmVkZXV0ZXQgVW1mYW5nOiBVID0gMiDCtyAoIiArIG4obCkgKyAiICsgIiArIG4oYikgKyAiKSA9ICIgKyBuKGFuc3dlcikgKyAiIG0uIiwgIlJ1bmRoZXJ1bSBpc3QgZWluIFNpZ25hbHdvcnQgZsO8ciBVbWZhbmcuIiwgW2wgKiBiLCBsICsgYiwgMiAqIGwgKyBiXSwgZGlmZmljdWx0eSwgMik7CiAgfQoKICBmdW5jdGlvbiB0YXNrQXF1YXJpdW0oZGlmZmljdWx0eSkgewogICAgdmFyIGwgPSBwaWNrKFszMCwgNDAsIDUwXSk7CiAgICB2YXIgYiA9IHBpY2soWzIwLCAyNSwgMzBdKTsKICAgIHZhciBoID0gcGljayhbMjAsIDMwLCA0MF0pOwogICAgdmFyIGFuc3dlciA9IGwgKiBiICogaDsKICAgIHJldHVybiBudW1iZXJDaG9pY2VUYXNrKCJBcXVhcml1bSIsICJFaW4gQXF1YXJpdW0gaXN0IGlubmVuICIgKyBuKGwpICsgIiBjbSBsYW5nLCAiICsgbihiKSArICIgY20gYnJlaXQgdW5kICIgKyBuKGgpICsgIiBjbSBob2NoLiBXaWUgZ3Jvw58gaXN0IGRhcyBWb2x1bWVuPyIsIGFuc3dlciwgImNtwrMiLCAiViA9IGwgwrcgYiDCtyBoID0gIiArIG4obCkgKyAiIMK3ICIgKyBuKGIpICsgIiDCtyAiICsgbihoKSArICIgPSAiICsgbihhbnN3ZXIpICsgIiBjbcKzLiIsICJFaW4gQXF1YXJpdW0gaXN0IGVpbiBRdWFkZXIuIFZvbHVtZW4gaGF0IGNtwrMuIiwgW2wgKiBiLCAyICogKGwgKyBiKSwgbCArIGIgKyBoXSwgZGlmZmljdWx0eSwgMyk7CiAgfQoKICBmdW5jdGlvbiBjaG9pY2VUYXNrKHRpdGxlLCBwcm9tcHQsIG9wdGlvbnMsIGNvcnJlY3RJbmRleCwgZXhwbGFuYXRpb24sIGhpbnQsIGRpZmZpY3VsdHksIG1pbkxldmVsKSB7CiAgICB2YXIgb3JkZXJlZCA9IG9wdGlvbnMubWFwKGZ1bmN0aW9uICh0ZXh0LCBpbmRleCkgewogICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBjb3JyZWN0OiBpbmRleCA9PT0gY29ycmVjdEluZGV4IH07CiAgICB9KTsKICAgIG9yZGVyZWQgPSBzaHVmZmxlKG9yZGVyZWQpOwogICAgdmFyIGZpbmFsT3B0aW9ucyA9IG9yZGVyZWQubWFwKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiBpdGVtLnRleHQ7IH0pOwogICAgdmFyIGZpbmFsQ29ycmVjdCA9IDA7CiAgICBvcmRlcmVkLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7CiAgICAgIGlmIChpdGVtLmNvcnJlY3QpIHsKICAgICAgICBmaW5hbENvcnJlY3QgPSBpbmRleDsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gewogICAgICBraW5kOiAiY2hvaWNlIiwKICAgICAgdGl0bGU6IHRpdGxlLAogICAgICBwcm9tcHQ6IHByb21wdCwKICAgICAgb3B0aW9uczogZmluYWxPcHRpb25zLAogICAgICBjb3JyZWN0SW5kZXg6IGZpbmFsQ29ycmVjdCwKICAgICAgZXhwbGFuYXRpb246IGV4cGxhbmF0aW9uLAogICAgICBoaW50OiBoaW50LAogICAgICBkaWZmaWN1bHR5OiBNYXRoLm1heChtaW5MZXZlbCB8fCAxLCBkaWZmaWN1bHR5KSwKICAgICAgcG9pbnRzOiBwb2ludHNGb3JEaWZmaWN1bHR5KE1hdGgubWF4KG1pbkxldmVsIHx8IDEsIGRpZmZpY3VsdHkpKQogICAgfTsKICB9CgogIGZ1bmN0aW9uIG51bWJlckNob2ljZVRhc2sodGl0bGUsIHByb21wdCwgYW5zd2VyLCB1bml0LCBleHBsYW5hdGlvbiwgaGludCwgZGlzdHJhY3RvcnMsIGRpZmZpY3VsdHksIG1pbkxldmVsKSB7CiAgICB2YXIgb3B0aW9ucyA9IHVuaXF1ZU9wdGlvbnMoYW5zd2VyLCBkaXN0cmFjdG9ycykubWFwKGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICByZXR1cm4gZm9ybWF0TnVtYmVyKHZhbHVlKSArICIgIiArIHVuaXQ7CiAgICB9KTsKICAgIHJldHVybiBjaG9pY2VUYXNrKHRpdGxlLCBwcm9tcHQsIG9wdGlvbnMsIDAsIGV4cGxhbmF0aW9uLCBoaW50LCBkaWZmaWN1bHR5LCBtaW5MZXZlbCk7CiAgfQoKICBmdW5jdGlvbiBudW1iZXJJbnB1dFRhc2sodGl0bGUsIHByb21wdCwgYW5zd2VyLCB1bml0LCBleHBsYW5hdGlvbiwgaGludCwgZGlmZmljdWx0eSwgbWluTGV2ZWwpIHsKICAgIHJldHVybiB7CiAgICAgIGtpbmQ6ICJudW1iZXIiLAogICAgICB0aXRsZTogdGl0bGUsCiAgICAgIHByb21wdDogcHJvbXB0LAogICAgICBjb3JyZWN0TnVtYmVyOiByb3VuZE9uZShhbnN3ZXIpLAogICAgICB1bml0OiB1bml0LAogICAgICBleHBsYW5hdGlvbjogZXhwbGFuYXRpb24sCiAgICAgIGhpbnQ6IGhpbnQsCiAgICAgIGRpZmZpY3VsdHk6IE1hdGgubWF4KG1pbkxldmVsIHx8IDEsIGRpZmZpY3VsdHkpLAogICAgICBwb2ludHM6IHBvaW50c0ZvckRpZmZpY3VsdHkoTWF0aC5tYXgobWluTGV2ZWwgfHwgMSwgZGlmZmljdWx0eSkpLAogICAgICB0b2xlcmFuY2U6IDAuMDYsCiAgICAgIGxhc3RJbnB1dDogIiIKICAgIH07CiAgfQoKICBmdW5jdGlvbiB1bmlxdWVPcHRpb25zKGFuc3dlciwgZGlzdHJhY3RvcnMpIHsKICAgIHZhciB2YWx1ZXMgPSBbcm91bmRPbmUoYW5zd2VyKV07CiAgICBkaXN0cmFjdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgIHZhciB2YWx1ZSA9IHJvdW5kT25lKE1hdGgubWF4KDAuMSwgaXRlbSkpOwogICAgICBpZiAoTWF0aC5hYnModmFsdWUgLSB2YWx1ZXNbMF0pID4gMC4wNiAmJiB2YWx1ZXMuaW5kZXhPZih2YWx1ZSkgPCAwKSB7CiAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpOwogICAgICB9CiAgICB9KTsKICAgIHZhciBudWRnZSA9IDE7CiAgICB3aGlsZSAodmFsdWVzLmxlbmd0aCA8IDQpIHsKICAgICAgdmFyIG5leHQgPSByb3VuZE9uZShhbnN3ZXIgKyBudWRnZSAqIChhbnN3ZXIgPiAxMCA/IDMgOiAxKSk7CiAgICAgIGlmIChNYXRoLmFicyhuZXh0IC0gdmFsdWVzWzBdKSA+IDAuMDYgJiYgdmFsdWVzLmluZGV4T2YobmV4dCkgPCAwKSB7CiAgICAgICAgdmFsdWVzLnB1c2gobmV4dCk7CiAgICAgIH0KICAgICAgbnVkZ2UgKz0gMTsKICAgIH0KICAgIHJldHVybiB2YWx1ZXMuc2xpY2UoMCwgNCk7CiAgfQoKICBmdW5jdGlvbiBjb3JyZWN0VGV4dCh0YXNrKSB7CiAgICBpZiAodGFzay5raW5kID09PSAiY2hvaWNlIikgewogICAgICByZXR1cm4gIlJpY2h0aWcgaXN0OiAiICsgdGFzay5vcHRpb25zW3Rhc2suY29ycmVjdEluZGV4XTsKICAgIH0KICAgIHJldHVybiAiUmljaHRpZyBpc3Q6ICIgKyBmb3JtYXROdW1iZXIodGFzay5jb3JyZWN0TnVtYmVyKSArICIgIiArIHRhc2sudW5pdDsKICB9CgogIGZ1bmN0aW9uIG1ha2VFeHBsb3JlUHJvbXB0KCkgewogICAgdmFyIHNoYXBlID0gZ2V0U2hhcGUoc3RhdGUuc2VsZWN0ZWRTaGFwZSk7CiAgICB2YXIgdmFsdWVzID0gZ2V0VmFsdWVzKHNoYXBlLmlkKTsKICAgIHZhciBjYWxjID0gc2hhcGUuY2FsY3VsYXRpb25GdW5jdGlvbih2YWx1ZXMpOwogICAgaWYgKHNoYXBlLnR5cGUgPT09ICJLw7ZycGVyIikgewogICAgICB2YXIgdm9sdW1lID0gY2FsYy52b2x1bWUgfHwgMDsKICAgICAgcmV0dXJuICJWZXLDpG5kZXJlIGJlaW0gIiArIHNoYXBlLm5hbWUgKyAiIGVpbiBNYcOfLiBCZW9iYWNodGUsIHdpZSBzaWNoIGRhcyBWb2x1bWVuIHZlcsOkbmRlcnQuIEFrdHVlbGw6ICIgKyBmb3JtYXROdW1iZXIodm9sdW1lKSArICIgY23Csy4iOwogICAgfQogICAgdmFyIGFyZWEgPSBjYWxjLmFyZWEgfHwgY2FsYy5iYXNlQXJlYSB8fCAwOwogICAgdmFyIHBlcmltZXRlciA9IGNhbGMucGVyaW1ldGVyIHx8IDA7CiAgICBpZiAocGVyaW1ldGVyID4gMCkgewogICAgICByZXR1cm4gIlZlcsOkbmRlcmUgYmVpICIgKyBzaGFwZS5uYW1lICsgIiBlaW4gTWHDny4gVmVyZ2xlaWNoZSBVbWZhbmcgIiArIGZvcm1hdE51bWJlcihwZXJpbWV0ZXIpICsgIiBjbSB1bmQgRmzDpGNoZSAiICsgZm9ybWF0TnVtYmVyKGFyZWEpICsgIiBjbcKyLiI7CiAgICB9CiAgICByZXR1cm4gIlZlcsOkbmRlcmUgYmVpICIgKyBzaGFwZS5uYW1lICsgIiBlaW4gTWHDny4gQmVvYmFjaHRlIGRpZSBGb3JtZWwgdW5kIGRpZSBwYXNzZW5kZSBFaW5oZWl0LiI7CiAgfQoKICBmdW5jdGlvbiBidWlsZEFkdmljZSgpIHsKICAgIHZhciBsb3cgPSBjYXRlZ29yaWVzWzBdOwogICAgdmFyIGhpZ2ggPSBjYXRlZ29yaWVzWzBdOwogICAgY2F0ZWdvcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChjYXRlZ29yeSkgewogICAgICBpZiAoKHN0YXRlLmNhdGVnb3J5U2NvcmVzW2NhdGVnb3J5XSB8fCAwKSA8IChzdGF0ZS5jYXRlZ29yeVNjb3Jlc1tsb3ddIHx8IDApKSB7CiAgICAgICAgbG93ID0gY2F0ZWdvcnk7CiAgICAgIH0KICAgICAgaWYgKChzdGF0ZS5jYXRlZ29yeVNjb3Jlc1tjYXRlZ29yeV0gfHwgMCkgPiAoc3RhdGUuY2F0ZWdvcnlTY29yZXNbaGlnaF0gfHwgMCkpIHsKICAgICAgICBoaWdoID0gY2F0ZWdvcnk7CiAgICAgIH0KICAgIH0pOwogICAgaWYgKHN0YXRlLnNjb3JlID09PSAwKSB7CiAgICAgIHJldHVybiAiU3RhcnRlIG1pdCBkZW0gRm9ybWVsLUxhYm9yLiBWZXLDpG5kZXJlIGVpbiBNYcOfIHVuZCBzcHJpY2ggbGF1dDogV2FzIGlzdCBSYW5kLCB3YXMgaXN0IEZsw6RjaGUsIHdhcyBpc3QgUmF1bT8iOwogICAgfQogICAgcmV0dXJuICJTdMOkcmtlOiAiICsgaGlnaCArICIuIE7DpGNoc3RlciBndXRlciDDnGJ1bmdzYmVyZWljaDogIiArIGxvdyArICIuIE51dHplIGRvcnQgenVlcnN0IFN0dWZlIDEgb2RlciAyIHVuZCBzdGVpZ2VyZSBkaWNoIGRhbmFjaC4iOwogIH0KCiAgZnVuY3Rpb24gcG9pbnRzRm9yRGlmZmljdWx0eShkaWZmaWN1bHR5KSB7CiAgICB2YXIgdGFibGUgPSBbMCwgOCwgMTIsIDE2LCAyMSwgMjddOwogICAgcmV0dXJuIHRhYmxlW01hdGgubWF4KDEsIE1hdGgubWluKDUsIGRpZmZpY3VsdHkpKV07CiAgfQoKICBmdW5jdGlvbiBnZXRTaGFwZShzaGFwZUlkKSB7CiAgICB2YXIgaWQgPSBzaGFwZUlkIHx8IHN0YXRlLnNlbGVjdGVkU2hhcGU7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNoYXBlcy5sZW5ndGg7IGkgKz0gMSkgewogICAgICBpZiAoc2hhcGVzW2ldLmlkID09PSBpZCkgewogICAgICAgIHJldHVybiBzaGFwZXNbaV07CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBzaGFwZXNbMF07CiAgfQoKICBmdW5jdGlvbiBnZXRWYWx1ZXMoc2hhcGVJZCkgewogICAgcmV0dXJuIHN0YXRlLnNoYXBlUGFyYW1ldGVyc1tzaGFwZUlkIHx8IHN0YXRlLnNlbGVjdGVkU2hhcGVdOwogIH0KCiAgZnVuY3Rpb24gZ2V0UGFyYW1ldGVyKHNoYXBlLCBrZXkpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2hhcGUucGFyYW1ldGVycy5sZW5ndGg7IGkgKz0gMSkgewogICAgICBpZiAoc2hhcGUucGFyYW1ldGVyc1tpXS5rZXkgPT09IGtleSkgewogICAgICAgIHJldHVybiBzaGFwZS5wYXJhbWV0ZXJzW2ldOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIGZ1bmN0aW9uIGNsYW1wVG9TdGVwKHZhbHVlLCBwYXJhbSkgewogICAgdmFyIGNsYW1wZWQgPSBNYXRoLm1heChwYXJhbS5taW4sIE1hdGgubWluKHBhcmFtLm1heCwgTnVtYmVyKHZhbHVlKSkpOwogICAgdmFyIHN0ZXBzID0gTWF0aC5yb3VuZCgoY2xhbXBlZCAtIHBhcmFtLm1pbikgLyBwYXJhbS5zdGVwKTsKICAgIHJldHVybiByb3VuZE9uZShwYXJhbS5taW4gKyBzdGVwcyAqIHBhcmFtLnN0ZXApOwogIH0KCiAgZnVuY3Rpb24gbWFrZU5vZGUodGFnLCBjbGFzc05hbWUsIHRleHQpIHsKICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpOwogICAgaWYgKGNsYXNzTmFtZSkgewogICAgICBub2RlLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKICAgIH0KICAgIGlmICh0ZXh0ICE9PSB1bmRlZmluZWQpIHsKICAgICAgbm9kZS50ZXh0Q29udGVudCA9IHRleHQ7CiAgICB9CiAgICByZXR1cm4gbm9kZTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlR2VybWFuTnVtYmVyKHRleHQpIHsKICAgIGlmICh0eXBlb2YgdGV4dCAhPT0gInN0cmluZyIpIHsKICAgICAgcmV0dXJuIE5hTjsKICAgIH0KICAgIHJldHVybiBOdW1iZXIodGV4dC50cmltKCkucmVwbGFjZSgiLCIsICIuIikpOwogIH0KCiAgZnVuY3Rpb24gbih2YWx1ZSkgewogICAgcmV0dXJuIGZvcm1hdE51bWJlcih2YWx1ZSk7CiAgfQoKICBmdW5jdGlvbiBmb3JtYXROdW1iZXIodmFsdWUpIHsKICAgIHZhciByb3VuZGVkID0gcm91bmRPbmUodmFsdWUpOwogICAgaWYgKE1hdGguYWJzKHJvdW5kZWQgLSBNYXRoLnJvdW5kKHJvdW5kZWQpKSA8IDAuMDAxKSB7CiAgICAgIHJldHVybiBTdHJpbmcoTWF0aC5yb3VuZChyb3VuZGVkKSk7CiAgICB9CiAgICByZXR1cm4gU3RyaW5nKHJvdW5kZWQpLnJlcGxhY2UoIi4iLCAiLCIpOwogIH0KCiAgZnVuY3Rpb24gcm91bmRPbmUodmFsdWUpIHsKICAgIHJldHVybiBNYXRoLnJvdW5kKE51bWJlcih2YWx1ZSkgKiAxMCkgLyAxMDsKICB9CgogIGZ1bmN0aW9uIHJuZChtaW4sIG1heCkgewogICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSkgKyBtaW47CiAgfQoKICBmdW5jdGlvbiBwaWNrKGxpc3QpIHsKICAgIHJldHVybiBsaXN0W3JuZCgwLCBsaXN0Lmxlbmd0aCAtIDEpXTsKICB9CgogIGZ1bmN0aW9uIHNodWZmbGUobGlzdCkgewogICAgdmFyIGNvcHkgPSBsaXN0LnNsaWNlKCk7CiAgICBmb3IgKHZhciBpID0gY29weS5sZW5ndGggLSAxOyBpID4gMDsgaSAtPSAxKSB7CiAgICAgIHZhciBqID0gcm5kKDAsIGkpOwogICAgICB2YXIgdGVtcCA9IGNvcHlbaV07CiAgICAgIGNvcHlbaV0gPSBjb3B5W2pdOwogICAgICBjb3B5W2pdID0gdGVtcDsKICAgIH0KICAgIHJldHVybiBjb3B5OwogIH0KfSgpKTsKCjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4=
</aimoocgame>
</aimoocgame>



Aktuelle Version vom 5. Juli 2026, 11:37 Uhr

Geometrie Master


Geometrie Master

Interaktives Geometrie-Lernspiel für Klasse 5/6 mit Formel-Labor, Umfang-, Flächen- und Volumenaufgaben.

MOOCwiki Spiele

Geometrie Master





Schulfach+

Prüfungsliteratur 2026
Bundesland Bücher Kurzbeschreibung
Baden-Württemberg

Abitur

  1. Der zerbrochne Krug - Heinrich von Kleist
  2. Heimsuchung - Jenny Erpenbeck

Mittlere Reife

  1. Der Markisenmann - Jan Weiler oder Als die Welt uns gehörte - Liz Kessler
  2. Ein Schatten wie ein Leopard - Myron Levoy oder Pampa Blues - Rolf Lappert

Abitur Dorfrichter-Komödie über Wahrheit/Schuld; Roman über einen Ort und deutsche Geschichte. Mittlere Reife Wahllektüren (Roadtrip-Vater-Sohn / Jugendroman im NS-Kontext / Coming-of-age / Provinzroman).

Bayern

Abitur

  1. Der zerbrochne Krug - Heinrich von Kleist
  2. Heimsuchung - Jenny Erpenbeck

Abitur Lustspiel über Machtmissbrauch und Recht; Roman als Zeitschnitt deutscher Geschichte an einem Haus/Grundstück.

Berlin/Brandenburg

Abitur

  1. Der zerbrochne Krug - Heinrich von Kleist
  2. Woyzeck - Georg Büchner
  3. Der Biberpelz - Gerhart Hauptmann
  4. Heimsuchung - Jenny Erpenbeck

Abitur Gerichtskomödie; soziales Drama um Ausbeutung/Armut; Komödie/Satire um Diebstahl und Obrigkeit; Roman über Erinnerungsräume und Umbrüche.

Bremen

Abitur

  1. Nach Mitternacht - Irmgard Keun
  2. Mario und der Zauberer - Thomas Mann
  3. Emilia Galotti - Gotthold Ephraim Lessing oder Miss Sara Sampson - Gotthold Ephraim Lessing

Abitur Roman in der NS-Zeit (Alltag, Anpassung, Angst); Novelle über Verführung/Massenpsychologie; bürgerliche Trauerspiele (Moral, Macht, Stand).

Hamburg

Abitur

  1. Der zerbrochne Krug - Heinrich von Kleist
  2. Das kunstseidene Mädchen - Irmgard Keun

Abitur Justiz-/Machtkritik als Komödie; Großstadtroman der Weimarer Zeit (Rollenbilder, Aufstiegsträume, soziale Realität).

Hessen

Abitur

  1. Der zerbrochne Krug - Heinrich von Kleist
  2. Woyzeck - Georg Büchner
  3. Heimsuchung - Jenny Erpenbeck
  4. Der Prozess - Franz Kafka

Abitur Gerichtskomödie; Fragmentdrama über Gewalt/Entmenschlichung; Erinnerungsroman über deutsche Brüche; moderner Roman über Schuld, Macht und Bürokratie.

Niedersachsen

Abitur

  1. Der zerbrochene Krug - Heinrich von Kleist
  2. Das kunstseidene Mädchen - Irmgard Keun
  3. Die Marquise von O. - Heinrich von Kleist
  4. Über das Marionettentheater - Heinrich von Kleist

Abitur Schwerpunkt auf Drama/Roman sowie Kleist-Prosatext und Essay (Ehre, Gewalt, Unschuld; Ästhetik/„Anmut“).

Nordrhein-Westfalen

Abitur

  1. Der zerbrochne Krug - Heinrich von Kleist
  2. Heimsuchung - Jenny Erpenbeck

Abitur Komödie über Wahrheit und Autorität; Roman als literarische „Geschichtsschichtung“ an einem Ort.

Saarland

Abitur

  1. Heimsuchung - Jenny Erpenbeck
  2. Furor - Lutz Hübner und Sarah Nemitz
  3. Bahnwärter Thiel - Gerhart Hauptmann

Abitur Erinnerungsroman an einem Ort; zeitgenössisches Drama über Eskalation/Populismus; naturalistische Novelle (Pflicht/Überforderung/Abgrund).

Sachsen (berufliches Gymnasium)

Abitur

  1. Der zerbrochne Krug - Heinrich von Kleist
  2. Woyzeck - Georg Büchner
  3. Irrungen, Wirrungen - Theodor Fontane
  4. Der gute Mensch von Sezuan - Bertolt Brecht
  5. Heimsuchung - Jenny Erpenbeck
  6. Der Trafikant - Robert Seethaler

Abitur Mischung aus Klassiker-Drama, sozialem Drama, realistischem Roman, epischem Theater und Gegenwarts-/Erinnerungsroman; zusätzlich Coming-of-age im historischen Kontext.

Sachsen-Anhalt

Abitur

  1. (keine fest benannte landesweite Pflichtlektüre veröffentlicht; Themenfelder)

Abitur Schwerpunktsetzung über Themenfelder (u. a. Literatur um 1900; Sprache in politisch-gesellschaftlichen Kontexten), ohne feste Einzeltitel.

Schleswig-Holstein

Abitur

  1. Der zerbrochne Krug - Heinrich von Kleist
  2. Heimsuchung - Jenny Erpenbeck

Abitur Recht/Gerechtigkeit und historische Tiefenschichten eines Ortes – umgesetzt über Drama und Gegenwartsroman.

Thüringen

Abitur

  1. (keine fest benannte landesweite Pflichtlektüre veröffentlicht; Orientierung am gemeinsamen Aufgabenpool)

Abitur In der Praxis häufig Orientierung am gemeinsamen Aufgabenpool; landesweite Einzeltitel je nach Vorgabe/Handreichung nicht einheitlich ausgewiesen.

Mecklenburg-Vorpommern

Abitur

  1. (Quelle aktuell technisch nicht abrufbar; Beteiligung am gemeinsamen Aufgabenpool bekannt)

Abitur Land beteiligt sich am länderübergreifenden Aufgabenpool; konkrete, veröffentlichte Einzeltitel konnten hier nicht ausgelesen werden.

Rheinland-Pfalz

Abitur

  1. (keine landesweit einheitliche Pflichtlektüre; schulische Auswahl)

Abitur Keine landesweite Einheitsliste; Auswahl kann schul-/kursbezogen erfolgen.




aiMOOCs



aiMOOC Projekte












THE MONKEY DANCE




The Monkey DanceaiMOOCs

  1. Trust Me It's True: #Verschwörungstheorie #FakeNews
  2. Gregor Samsa Is You: #Kafka #Verwandlung
  3. Who Owns Who: #Musk #Geld
  4. Lump: #Trump #Manipulation
  5. Filth Like You: #Konsum #Heuchelei
  6. Your Poverty Pisses Me Off: #SozialeUngerechtigkeit #Musk
  7. Hello I'm Pump: #Trump #Kapitalismus
  8. Monkey Dance Party: #Lebensfreude
  9. God Hates You Too: #Religionsfanatiker
  10. You You You: #Klimawandel #Klimaleugner
  11. Monkey Free: #Konformität #Macht #Kontrolle
  12. Pure Blood: #Rassismus
  13. Monkey World: #Chaos #Illusion #Manipulation
  14. Uh Uh Uh Poor You: #Kafka #BerichtAkademie #Doppelmoral
  15. The Monkey Dance Song: #Gesellschaftskritik
  16. Will You Be Mine: #Love
  17. Arbeitsheft
  18. And Thanks for Your Meat: #AntiFactoryFarming #AnimalRights #MeatIndustry


© The Monkey Dance on Spotify, YouTube, Amazon, MOOCit, Deezer, ...



Text bearbeiten Bild einfügen Video einbetten Interaktive Aufgaben erstellen