IyEgL2Jpbi9zaAouICIke3NyY2Rpcj0ufS9pbml0LnNoIjsgcGF0aF9wcmVwZW5kXyAuIC4uL3NyYwoKIyBUZXN0IG9mIGdldHRleHQgZmFjaWxpdGllcyBpbiB0aGUgR05VIHNtYWxsdGFsayBsYW5ndWFnZS4KIyBBc3N1bWVzIGFuIGZyX0ZSIGxvY2FsZSBpcyBpbnN0YWxsZWQuCiMgQXNzdW1lcyB0aGUgZm9sbG93aW5nIHBhY2thZ2VzIGFyZSBpbnN0YWxsZWQ6IHNtYWxsdGFsay4KCmNhdCA8PFxFT0YgPiBwcm9nLnN0ClBhY2thZ2VMb2FkZXIgZmlsZUluUGFja2FnZTogJ0kxOE4nICEKCk9iamVjdCBzdWJjbGFzczogI01haW4KICBpbnN0YW5jZVZhcmlhYmxlTmFtZXM6ICcnCiAgY2xhc3NWYXJpYWJsZU5hbWVzOiAnTkxTJyAKICBwb29sRGljdGlvbmFyaWVzOiAnJwogIGNhdGVnb3J5OiAnUHJvZ3JhbScKIQohTWFpbiBtZXRob2RzRm9yOiAncnVubmluZychCnJ1bgogIHwgbiB8CiAgTkxTIDo9IEkxOE4gTG9jYWxlIGRlZmF1bHQgbWVzc2FnZXMgZG9tYWluOiAncHJvZycgbG9jYWxlRGlyZWN0b3J5OiAnLicuCiAgbiA6PSAyLgogIFRyYW5zY3JpcHQgc2hvd0NyOgogICAgKE5MUyA/ICcnJ1lvdXIgY29tbWFuZCwgcGxlYXNlPycnLCBhc2tlZCB0aGUgd2FpdGVyLicpLgogIFRyYW5zY3JpcHQgc2hvd0NyOgogICAgKChOTFMgYXQ6ICdhIHBpZWNlIG9mIGNha2UnIHBsdXJhbDogJyUxIHBpZWNlcyBvZiBjYWtlJyB3aXRoOiBuKSBiaW5kV2l0aDogbikuCiAgVHJhbnNjcmlwdCBzaG93Q3I6CiAgICAoKE5MUyA/ICclMSBpcyByZXBsYWNlZCBieSAlMi4nKSBiaW5kV2l0aDogJ0ZGJyB3aXRoOiAnRVVSJykuIQohCgpNYWluIG5ldyBydW4hCkVPRgoKOiAke1hHRVRURVhUPXhnZXR0ZXh0fQoke1hHRVRURVhUfSAtbyBwcm9nLnRtcCAtLW9taXQtaGVhZGVyIC0tbm8tbG9jYXRpb24gcHJvZy5zdCB8fCBFeGl0IDEKTENfQUxMPUMgdHIgLWQgJ1xyJyA8IHByb2cudG1wID4gcHJvZy5wb3QgfHwgRXhpdCAxCgpjYXQgPDxFT0YgPiBwcm9nLm9rCm1zZ2lkICInWW91ciBjb21tYW5kLCBwbGVhc2U/JywgYXNrZWQgdGhlIHdhaXRlci4iCm1zZ3N0ciAiIgoKIywgc21hbGx0YWxrLWZvcm1hdAptc2dpZCAiYSBwaWVjZSBvZiBjYWtlIgptc2dpZF9wbHVyYWwgIiUxIHBpZWNlcyBvZiBjYWtlIgptc2dzdHJbMF0gIiIKbXNnc3RyWzFdICIiCgojLCBzbWFsbHRhbGstZm9ybWF0Cm1zZ2lkICIlMSBpcyByZXBsYWNlZCBieSAlMi4iCm1zZ3N0ciAiIgpFT0YKCjogJHtESUZGPWRpZmZ9CiR7RElGRn0gcHJvZy5vayBwcm9nLnBvdCB8fCBFeGl0IDEKCmNhdCA8PFxFT0YgPiBmci5wbwptc2dpZCAiIgptc2dzdHIgIiIKIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xXG4iCiJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiA+IDEpO1xuIgoKbXNnaWQgIidZb3VyIGNvbW1hbmQsIHBsZWFzZT8nLCBhc2tlZCB0aGUgd2FpdGVyLiIKbXNnc3RyICKrVm90cmUgY29tbWFuZGUsIHMnaWwgdm91cyBwbGFpdLssIGRpdCBsZSBnYXLnb24uIgoKIyBMZXMgZ2F0ZWF1eCBhbGxlbWFuZHMgc29udCBsZXMgbWVpbGxldXJzIGR1IG1vbmRlLgojLCBzbWFsbHRhbGstZm9ybWF0Cm1zZ2lkICJhIHBpZWNlIG9mIGNha2UiCm1zZ2lkX3BsdXJhbCAiJTEgcGllY2VzIG9mIGNha2UiCm1zZ3N0clswXSAidW4gbW9yY2VhdSBkZSBnYXRlYXUiCm1zZ3N0clsxXSAiJTEgbW9yY2VhdXggZGUgZ2F0ZWF1IgoKIyBSZXZlcnNlIHRoZSBhcmd1bWVudHMuCiMsIHNtYWxsdGFsay1mb3JtYXQKbXNnaWQgIiUxIGlzIHJlcGxhY2VkIGJ5ICUyLiIKbXNnc3RyICIlMiByZW1wbGFjZSAlMS4iCkVPRgoKOiAke01TR01FUkdFPW1zZ21lcmdlfQoke01TR01FUkdFfSAtcSAtbyBmci5wby50bXAgZnIucG8gcHJvZy5wb3QgfHwgRXhpdCAxCkxDX0FMTD1DIHRyIC1kICdccicgPCBmci5wby50bXAgPiBmci5wby5uZXcgfHwgRXhpdCAxCgo6ICR7RElGRj1kaWZmfQoke0RJRkZ9IGZyLnBvIGZyLnBvLm5ldyB8fCBFeGl0IDEKCnRlc3QgLWQgZnIgfHwgbWtkaXIgZnIKdGVzdCAtZCBmci9MQ19NRVNTQUdFUyB8fCBta2RpciBmci9MQ19NRVNTQUdFUwoKOiAke01TR0ZNVD1tc2dmbXR9CiR7TVNHRk1UfSAtbyBmci9MQ19NRVNTQUdFUy9wcm9nLm1vIGZyLnBvCgojIFRlc3QgZm9yIHByZXNlbmNlIG9mIGdzdCB2ZXJzaW9uIDIuMC42IG9yIG5ld2VyLgooZ3N0IC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCBcCiAgfHwgeyBlY2hvICJTa2lwcGluZyB0ZXN0OiBnc3Qgbm90IGZvdW5kIjsgRXhpdCA3NzsgfQpjYXNlIGBnc3QgLS12ZXJzaW9uIHwgc2VkIC1uIC1lIDFwIHwgc2VkIC1lICdzL15bXjAtOV0qLy8nYCBpbgogIDAuKiB8IDEuKiB8IDIuMCB8IDIuMC5bMC01XSB8IDIuMSB8IDIuMS5bMC0xXSkKICAgIGVjaG8gIlNraXBwaW5nIHRlc3Q6IGdzdCB2ZXJzaW9uIHRvbyBvbGQiOyBFeGl0IDc3OzsKZXNhYwoKOiAke0RJRkY9ZGlmZn0KY2F0IDw8XEVPRiA+IHByb2cub2sKq1ZvdHJlIGNvbW1hbmRlLCBzJ2lsIHZvdXMgcGxhaXS7LCBkaXQgbGUgZ2Fy529uLgoyIG1vcmNlYXV4IGRlIGdhdGVhdQpFVVIgcmVtcGxhY2UgRkYuCkVPRgpjYXQgPDxcRU9GID4gcHJvZy5va3UKwqtWb3RyZSBjb21tYW5kZSwgcydpbCB2b3VzIHBsYWl0wrssIGRpdCBsZSBnYXLDp29uLgoyIG1vcmNlYXV4IGRlIGdhdGVhdQpFVVIgcmVtcGxhY2UgRkYuCkVPRgojIGdzdCB2ZXJzaW9ucyBvbGRlciB0aGFuIDIuMyBhbHNvIHByaW50ICJMb2FkaW5nIHBhY2thZ2UgSTE4TiIuCnsgZWNobyAnTG9hZGluZyBwYWNrYWdlIEkxOE4nOyBjYXQgcHJvZy5vazsgfSA+IHByb2cub2syCnsgZWNobyAnTG9hZGluZyBwYWNrYWdlIEkxOE4nOyBjYXQgcHJvZy5va3U7IH0gPiBwcm9nLm9rdTIKIyBnc3QgdmVyc2lvbiAzLjAuMyBhbHNvIHByaW50cyAiTG9hZGluZyBwYWNrYWdlIEljb252IiBhbmQKIyAiTG9hZGluZyBwYWNrYWdlIEkxOE4iLgp7IGVjaG8gJ0xvYWRpbmcgcGFja2FnZSBJY29udic7IGVjaG8gJ0xvYWRpbmcgcGFja2FnZSBJMThOJzsgY2F0IHByb2cub2s7IH0gPiBwcm9nLm9rMwp7IGVjaG8gJ0xvYWRpbmcgcGFja2FnZSBJY29udic7IGVjaG8gJ0xvYWRpbmcgcGFja2FnZSBJMThOJzsgY2F0IHByb2cub2t1OyB9ID4gcHJvZy5va3UzCgo6ICR7TE9DQUxFX0ZSPWZyX0ZSfQo6ICR7TE9DQUxFX0ZSX1VURjg9ZnJfRlIuVVRGLTh9CmlmIHRlc3QgJExPQ0FMRV9GUiAhPSBub25lOyB0aGVuCiAgcHJlcGFyZV9sb2NhbGVfIGZyICRMT0NBTEVfRlIKICBMQU5HVUFHRT0gTENfQUxMPSRMT0NBTEVfRlIgZ3N0IC1RIHByb2cuc3QgPiBwcm9nLm91dCB8fCBFeGl0IDEKICAke0RJRkZ9IHByb2cub2sgcHJvZy5vdXQgPiAvZGV2L251bGwgfHwKICAgICR7RElGRn0gcHJvZy5vazIgcHJvZy5vdXQgPiAvZGV2L251bGwgfHwKICAgICAgJHtESUZGfSBwcm9nLm9rMyBwcm9nLm91dCA+IC9kZXYvbnVsbCB8fAogICAgICAgIHsgJHtESUZGfSBwcm9nLm9rIHByb2cub3V0OyBFeGl0IDE7IH0KZmkKaWYgdGVzdCAkTE9DQUxFX0ZSX1VURjggIT0gbm9uZTsgdGhlbgogIHByZXBhcmVfbG9jYWxlXyBmciAkTE9DQUxFX0ZSX1VURjgKICBMQU5HVUFHRT0gTENfQUxMPSRMT0NBTEVfRlJfVVRGOCBnc3QgLVEgcHJvZy5zdCA+IHByb2cub3V0IHx8IEV4aXQgMQogICR7RElGRn0gcHJvZy5va3UgcHJvZy5vdXQgPiAvZGV2L251bGwgfHwKICAgICR7RElGRn0gcHJvZy5va3UyIHByb2cub3V0ID4gL2Rldi9udWxsIHx8CiAgICAgICR7RElGRn0gcHJvZy5va3UzIHByb2cub3V0ID4gL2Rldi9udWxsIHx8CiAgICAgICAgeyAke0RJRkZ9IHByb2cub2t1IHByb2cub3V0OyBFeGl0IDE7IH0KZmkKaWYgdGVzdCAkTE9DQUxFX0ZSID0gbm9uZSAmJiB0ZXN0ICRMT0NBTEVfRlJfVVRGOCA9IG5vbmU7IHRoZW4KICBpZiB0ZXN0IC1mIC91c3IvYmluL2xvY2FsZWRlZjsgdGhlbgogICAgZWNobyAiU2tpcHBpbmcgdGVzdDogbm8gZnJlbmNoIGxvY2FsZSBpcyBpbnN0YWxsZWQiCiAgZWxzZQogICAgZWNobyAiU2tpcHBpbmcgdGVzdDogbm8gZnJlbmNoIGxvY2FsZSBpcyBzdXBwb3J0ZWQiCiAgZmkKICBFeGl0IDc3CmZpCgpFeGl0IDAK