IyEgL2Jpbi9zaAouICIke3NyY2Rpcj0ufS9pbml0LnNoIjsgcGF0aF9wcmVwZW5kXyAuIC4uL3NyYwoKIyBUZXN0IG9mIGdldHRleHQgZmFjaWxpdGllcyBpbiB0aGUgbGlicmVwIGxhbmd1YWdlLgojIEFzc3VtZXMgYW4gZnJfRlIgbG9jYWxlIGlzIGluc3RhbGxlZC4KIyBBc3N1bWVzIHRoZSBmb2xsb3dpbmcgcGFja2FnZXMgYXJlIGluc3RhbGxlZDogbGlicmVwLgoKY2F0IDw8XEVPRiA+IHByb2cuamwKKHJlcXVpcmUgJ3JlcC5pMThuLmdldHRleHQpCgoodGV4dGRvbWFpbiAicHJvZyIpCihiaW5kdGV4dGRvbWFpbiAicHJvZyIgIi4iKQoKKGZvcm1hdCBzdGFuZGFyZC1vdXRwdXQgIiVzXG4iIChfICInWW91ciBjb21tYW5kLCBwbGVhc2U/JywgYXNrZWQgdGhlIHdhaXRlci4iKSkKCihmb3JtYXQgc3RhbmRhcmQtb3V0cHV0ICIlc1xuIgogICAgICAgIChmb3JtYXQgbmlsIChfICIlcyBpcyByZXBsYWNlZCBieSAlcy4iKSAiRkYiICJFVVIiKSkKRU9GCgo6ICR7WEdFVFRFWFQ9eGdldHRleHR9CiR7WEdFVFRFWFR9IC1vIHByb2cudG1wIC0tb21pdC1oZWFkZXIgLS1uby1sb2NhdGlvbiBwcm9nLmpsIHx8IEV4aXQgMQpMQ19BTEw9QyB0ciAtZCAnXHInIDwgcHJvZy50bXAgPiBwcm9nLnBvdCB8fCBFeGl0IDEKCmNhdCA8PEVPRiA+IHByb2cub2sKbXNnaWQgIidZb3VyIGNvbW1hbmQsIHBsZWFzZT8nLCBhc2tlZCB0aGUgd2FpdGVyLiIKbXNnc3RyICIiCgojLCBsaWJyZXAtZm9ybWF0Cm1zZ2lkICIlcyBpcyByZXBsYWNlZCBieSAlcy4iCm1zZ3N0ciAiIgpFT0YKCjogJHtESUZGPWRpZmZ9CiR7RElGRn0gcHJvZy5vayBwcm9nLnBvdCB8fCBFeGl0IDEKCmNhdCA8PFxFT0YgPiBmci5wbwptc2dpZCAiIgptc2dzdHIgIiIKIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xXG4iCiJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiA+IDEpO1xuIgoKbXNnaWQgIidZb3VyIGNvbW1hbmQsIHBsZWFzZT8nLCBhc2tlZCB0aGUgd2FpdGVyLiIKbXNnc3RyICKrVm90cmUgY29tbWFuZGUsIHMnaWwgdm91cyBwbGFpdLssIGRpdCBsZSBnYXLnb24uIgoKIyBSZXZlcnNlIHRoZSBhcmd1bWVudHMuCiMsIGxpYnJlcC1mb3JtYXQKbXNnaWQgIiVzIGlzIHJlcGxhY2VkIGJ5ICVzLiIKbXNnc3RyICIlMiRzIHJlbXBsYWNlICUxJHMuIgpFT0YKCjogJHtNU0dNRVJHRT1tc2dtZXJnZX0KJHtNU0dNRVJHRX0gLXEgLW8gZnIucG8udG1wIGZyLnBvIHByb2cucG90IHx8IEV4aXQgMQpMQ19BTEw9QyB0ciAtZCAnXHInIDwgZnIucG8udG1wID4gZnIucG8ubmV3IHx8IEV4aXQgMQoKOiAke0RJRkY9ZGlmZn0KJHtESUZGfSBmci5wbyBmci5wby5uZXcgfHwgRXhpdCAxCgp0ZXN0IC1kIGZyIHx8IG1rZGlyIGZyCnRlc3QgLWQgZnIvTENfTUVTU0FHRVMgfHwgbWtkaXIgZnIvTENfTUVTU0FHRVMKCjogJHtNU0dGTVQ9bXNnZm10fQoke01TR0ZNVH0gLW8gZnIvTENfTUVTU0FHRVMvcHJvZy5tbyBmci5wbwoKIyBUZXN0IGZvciBwcmVzZW5jZSBvZiByZXAgdmVyc2lvbiAwLjE1LjMgb3IgbmV3ZXIuCihyZXAgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+L2Rldi9udWxsIFwKICB8fCB7IGVjaG8gIlNraXBwaW5nIHRlc3Q6IHJlcCBub3QgZm91bmQiOyBFeGl0IDc3OyB9CmNhc2UgYHJlcCAtLXZlcnNpb24gfCBzZWQgLWUgJ3MvXlteMC05XSovLydgIGluCiAgMC5bMC05XSB8IDAuMVswLTVdIHwgMC5bMC05XS4qIHwgMC4xWzAtNF0uKiB8IDAuMTUuWzAtMl0gKQogICAgZWNobyAiU2tpcHBpbmcgdGVzdDogcmVwIHZlcnNpb24gdG9vIG9sZCI7IEV4aXQgNzc7Owplc2FjCgojIFRlc3Qgd2hpY2ggb2YgdGhlIGZyX0ZSIGxvY2FsZXMgYXJlIGluc3RhbGxlZC4KOiAke0xPQ0FMRV9GUj1mcl9GUn0KOiAke0xPQ0FMRV9GUl9VVEY4PWZyX0ZSLlVURi04fQppZiB0ZXN0ICRMT0NBTEVfRlIgIT0gbm9uZTsgdGhlbgogIExDX0FMTD0kTE9DQUxFX0ZSIC4uL3Rlc3Rsb2NhbGUKICBjYXNlICQ/IGluCiAgICAwKSA7OwogICAgNzcpIExPQ0FMRV9GUj1ub25lOzsKICAgICopIEV4aXQgMTs7CiAgZXNhYwpmaQppZiB0ZXN0ICRMT0NBTEVfRlJfVVRGOCAhPSBub25lOyB0aGVuCiAgTENfQUxMPSRMT0NBTEVfRlJfVVRGOCAuLi90ZXN0bG9jYWxlCiAgY2FzZSAkPyBpbgogICAgMCkgOzsKICAgIDc3KSBMT0NBTEVfRlJfVVRGOD1ub25lOzsKICAgICopIEV4aXQgMTs7CiAgZXNhYwpmaQppZiB0ZXN0ICRMT0NBTEVfRlIgPSBub25lICYmIHRlc3QgJExPQ0FMRV9GUl9VVEY4ID0gbm9uZTsgdGhlbgogIGlmIHRlc3QgLWYgL3Vzci9iaW4vbG9jYWxlZGVmOyB0aGVuCiAgICBlY2hvICJTa2lwcGluZyB0ZXN0OiBubyBmcmVuY2ggbG9jYWxlIGlzIGluc3RhbGxlZCIKICBlbHNlCiAgICBlY2hvICJTa2lwcGluZyB0ZXN0OiBubyBmcmVuY2ggbG9jYWxlIGlzIHN1cHBvcnRlZCIKICBmaQogIEV4aXQgNzcKZmkKCjogJHtESUZGPWRpZmZ9CmNhdCA8PFxFT0YgPiBwcm9nLm9rCqtWb3RyZSBjb21tYW5kZSwgcydpbCB2b3VzIHBsYWl0uywgZGl0IGxlIGdhcudvbi4KRVVSIHJlbXBsYWNlIEZGLgpFT0YKY2F0IDw8XEVPRiA+IHByb2cub2t1CsKrVm90cmUgY29tbWFuZGUsIHMnaWwgdm91cyBwbGFpdMK7LCBkaXQgbGUgZ2Fyw6dvbi4KRVVSIHJlbXBsYWNlIEZGLgpFT0YKCjogJHtMT0NBTEVfRlI9ZnJfRlJ9CjogJHtMT0NBTEVfRlJfVVRGOD1mcl9GUi5VVEYtOH0KaWYgdGVzdCAkTE9DQUxFX0ZSICE9IG5vbmU7IHRoZW4KICBwcmVwYXJlX2xvY2FsZV8gZnIgJExPQ0FMRV9GUgogIExBTkdVQUdFPSBMQ19BTEw9JExPQ0FMRV9GUiByZXAgLS1uby1yYyAtLWJhdGNoIHByb2cuamwgPiBwcm9nLm91dCB8fCBFeGl0IDEKICAke0RJRkZ9IHByb2cub2sgcHJvZy5vdXQgfHwgRXhpdCAxCmZpCmlmIHRlc3QgJExPQ0FMRV9GUl9VVEY4ICE9IG5vbmU7IHRoZW4KICBwcmVwYXJlX2xvY2FsZV8gZnIgJExPQ0FMRV9GUl9VVEY4CiAgTEFOR1VBR0U9IExDX0FMTD0kTE9DQUxFX0ZSX1VURjggcmVwIC0tbm8tcmMgLS1iYXRjaCBwcm9nLmpsID4gcHJvZy5vdXQgfHwgRXhpdCAxCiAgJHtESUZGfSBwcm9nLm9rdSBwcm9nLm91dCB8fCBFeGl0IDEKZmkKCkV4aXQgMAo=