IyEgL2Jpbi9zaAouICIke3NyY2Rpcj0ufS9pbml0LnNoIjsgcGF0aF9wcmVwZW5kXyAuIC4uL3NyYwoKIyBUZXN0IG9mIGdldHRleHQgZmFjaWxpdGllcyBpbiB0aGUgQyBsYW5ndWFnZS4KIyBBc3N1bWVzIGFuIGZyX0ZSIGxvY2FsZSBpcyBpbnN0YWxsZWQuCiMgQXNzdW1lcyB0aGUgZm9sbG93aW5nIHBhY2thZ2VzIGFyZSBpbnN0YWxsZWQ6IGdjYy4KCiMgVGhpcyB0ZXN0IGZhaWxzIGlmIHRoZSBnZXR0ZXh0IHBhY2thZ2Ugd2FzIGNvbmZpZ3VyZWQgd2l0aCAtLWRpc2FibGUtbmxzLAojIGJlY2F1c2UgaW4gdGhpcyBjYXNlIHRoZSBnZXR0ZXh0LXJ1bnRpbWUvaW50bC8gZGlyZWN0b3J5IGRvZXMgbm90IHByb2R1Y2UKIyBhIDxsaWJpbnRsLmg+IGhlYWRlciBmaWxlLgoKY2F0IDw8XEVPRiA+IHByb2cuYwojaW5jbHVkZSAiY29uZmlnLmgiCiNpbmNsdWRlIDxsaWJpbnRsLmg+CiNpbmNsdWRlIDxsb2NhbGUuaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgInhzZXRlbnYuaCIKI2RlZmluZSBfKHN0cmluZykgZ2V0dGV4dCAoc3RyaW5nKQoKaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCnsKICBpbnQgbiA9IGF0b2kgKGFyZ3ZbMl0pOwoKICB4c2V0ZW52ICgiTENfQUxMIiwgYXJndlsxXSwgMSk7CiAgaWYgKHNldGxvY2FsZSAoTENfQUxMLCAiIikgPT0gTlVMTCkKICAgIC8qIENvdWxkbid0IHNldCBsb2NhbGUuICAqLwogICAgZXhpdCAoNzcpOwoKICB0ZXh0ZG9tYWluICgicHJvZyIpOwogIGJpbmR0ZXh0ZG9tYWluICgicHJvZyIsICIuIik7CgogIHByaW50ZiAoXygiJ1lvdXIgY29tbWFuZCwgcGxlYXNlPycsIGFza2VkIHRoZSB3YWl0ZXIuIikpOwogIHByaW50ZiAoIlxuIik7CgogIHByaW50ZiAobmdldHRleHQgKCJhIHBpZWNlIG9mIGNha2UiLCAiJWQgcGllY2VzIG9mIGNha2UiLCBuKSwgbik7CiAgcHJpbnRmICgiXG4iKTsKCiAgcHJpbnRmIChfKCIlcyBpcyByZXBsYWNlZCBieSAlcy4iKSwgIkZGIiwgIkVVUiIpOwogIHByaW50ZiAoIlxuIik7CgogIGV4aXQgKDApOwp9CkVPRgoKIyBQdXQgdGhlIC1JIGZsYWdzIGJlZm9yZSAke0NGTEFHU30gJHtDUFBGTEFHU30sIHRvIG1ha2Ugc3VyZSB0aGF0IGxpYmludGwuaAojIGlzIGZvdW5kIGluIHRoZSBidWlsZCBkaXJlY3RvcnksIHJlZ2FyZGxlc3Mgb2YgLUkgb3B0aW9ucyBwcmVzZW50IGluCiMgJHtDRkxBR1N9IG9yICR7Q1BQRkxBR1N9Lgoke0NDfSAtSS4uLy4uIC1JIiRhYnNfdG9wX3NyY2RpciIvZ251bGliLWxpYiAtSS4uLy4uLy4uL2dldHRleHQtcnVudGltZS9pbnRsICR7Q0ZMQUdTfSAke0NQUEZMQUdTfSAtYyBwcm9nLmMgXAogIHx8IEV4aXQgMQoKOiAke0NPTkZJR19TSEVMTD0ke1NIRUxMLS9iaW4vc2h9fQoke0NPTkZJR19TSEVMTH0gIiR0b3BfYnVpbGRkaXIiL2xpYnRvb2wgLS1xdWlldCAtLXRhZz1DQyAtLW1vZGU9bGluayBcCiAgJHtDQ30gJHtDRkxBR1N9IC1vIHByb2cgcHJvZy4ke09CSkVYVH0gLi4vLi4vZ251bGliLWxpYi9saWJnZXR0ZXh0bGliLmxhICR7TERGTEFHU30gJHtMVExJQklOVEx9IFwKICB8fCBFeGl0IDEKCjogJHtYR0VUVEVYVD14Z2V0dGV4dH0KJHtYR0VUVEVYVH0gLW8gcHJvZy50bXAgLS1vbWl0LWhlYWRlciAtLW5vLWxvY2F0aW9uIC1rXyBwcm9nLmMgfHwgRXhpdCAxCkxDX0FMTD1DIHRyIC1kICdccicgPCBwcm9nLnRtcCA+IHByb2cucG90IHx8IEV4aXQgMQoKY2F0IDw8RU9GID4gcHJvZy5vawojLCBjLWZvcm1hdAptc2dpZCAiJ1lvdXIgY29tbWFuZCwgcGxlYXNlPycsIGFza2VkIHRoZSB3YWl0ZXIuIgptc2dzdHIgIiIKCiMsIGMtZm9ybWF0Cm1zZ2lkICJhIHBpZWNlIG9mIGNha2UiCm1zZ2lkX3BsdXJhbCAiJWQgcGllY2VzIG9mIGNha2UiCm1zZ3N0clswXSAiIgptc2dzdHJbMV0gIiIKCiMsIGMtZm9ybWF0Cm1zZ2lkICIlcyBpcyByZXBsYWNlZCBieSAlcy4iCm1zZ3N0ciAiIgpFT0YKCjogJHtESUZGPWRpZmZ9CiR7RElGRn0gcHJvZy5vayBwcm9nLnBvdCB8fCBFeGl0IDEKCmNhdCA8PFxFT0YgPiBmci5wbwptc2dpZCAiIgptc2dzdHIgIiIKIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xXG4iCiJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiA+IDEpO1xuIgoKIywgYy1mb3JtYXQKbXNnaWQgIidZb3VyIGNvbW1hbmQsIHBsZWFzZT8nLCBhc2tlZCB0aGUgd2FpdGVyLiIKbXNnc3RyICKrVm90cmUgY29tbWFuZGUsIHMnaWwgdm91cyBwbGFpdLssIGRpdCBsZSBnYXLnb24uIgoKIyBMZXMgZ2F0ZWF1eCBhbGxlbWFuZHMgc29udCBsZXMgbWVpbGxldXJzIGR1IG1vbmRlLgojLCBjLWZvcm1hdAptc2dpZCAiYSBwaWVjZSBvZiBjYWtlIgptc2dpZF9wbHVyYWwgIiVkIHBpZWNlcyBvZiBjYWtlIgptc2dzdHJbMF0gInVuIG1vcmNlYXUgZGUgZ2F0ZWF1Igptc2dzdHJbMV0gIiVkIG1vcmNlYXV4IGRlIGdhdGVhdSIKCiMgUmV2ZXJzZSB0aGUgYXJndW1lbnRzLgojLCBjLWZvcm1hdAptc2dpZCAiJXMgaXMgcmVwbGFjZWQgYnkgJXMuIgptc2dzdHIgIiUyJHMgcmVtcGxhY2UgJTEkcy4iCkVPRgoKOiAke01TR01FUkdFPW1zZ21lcmdlfQoke01TR01FUkdFfSAtcSAtbyBmci5wby50bXAgZnIucG8gcHJvZy5wb3QgfHwgRXhpdCAxCkxDX0FMTD1DIHRyIC1kICdccicgPCBmci5wby50bXAgPiBmci5wby5uZXcgfHwgRXhpdCAxCgo6ICR7RElGRj1kaWZmfQoke0RJRkZ9IGZyLnBvIGZyLnBvLm5ldyB8fCBFeGl0IDEKCnRlc3QgLWQgZnIgfHwgbWtkaXIgZnIKdGVzdCAtZCBmci9MQ19NRVNTQUdFUyB8fCBta2RpciBmci9MQ19NRVNTQUdFUwoKOiAke01TR0ZNVD1tc2dmbXR9CiR7TVNHRk1UfSAtbyBmci9MQ19NRVNTQUdFUy9wcm9nLm1vIGZyLnBvCgo6ICR7RElGRj1kaWZmfQpjYXQgPDxcRU9GID4gcHJvZy5vawqrVm90cmUgY29tbWFuZGUsIHMnaWwgdm91cyBwbGFpdLssIGRpdCBsZSBnYXLnb24uCjIgbW9yY2VhdXggZGUgZ2F0ZWF1CkVVUiByZW1wbGFjZSBGRi4KRU9GCmNhdCA8PFxFT0YgPiBwcm9nLm9rdQrCq1ZvdHJlIGNvbW1hbmRlLCBzJ2lsIHZvdXMgcGxhaXTCuywgZGl0IGxlIGdhcsOnb24uCjIgbW9yY2VhdXggZGUgZ2F0ZWF1CkVVUiByZW1wbGFjZSBGRi4KRU9GCgo6ICR7TE9DQUxFX0ZSPWZyX0ZSfQo6ICR7TE9DQUxFX0ZSX1VURjg9ZnJfRlIuVVRGLTh9CmlmIHRlc3QgJExPQ0FMRV9GUiAhPSBub25lOyB0aGVuCiAgcHJlcGFyZV9sb2NhbGVfIGZyICRMT0NBTEVfRlIKICBMQU5HVUFHRT0gLi9wcm9nICRMT0NBTEVfRlIgMiA+IHByb2cudG1wCiAgY2FzZSAkPyBpbgogICAgMCkgY2FzZSAiJGhvc3Rfb3MiIGluCiAgICAgICAgIG1pbmd3KikgTENfQUxMPUMgdHIgLWQgJ1xyJyA8IHByb2cudG1wID4gcHJvZy5vdXQgfHwgRXhpdCAxIDs7CiAgICAgICAgICopIGNwIHByb2cudG1wIHByb2cub3V0IHx8IEV4aXQgMSA7OwogICAgICAgZXNhYwogICAgICAgJHtESUZGfSBwcm9nLm9rIHByb2cub3V0IHx8IEV4aXQgMTs7CiAgICA3NykgTE9DQUxFX0ZSPW5vbmU7OwogICAgKikgRXhpdCAxOzsKICBlc2FjCmZpCmlmIHRlc3QgJExPQ0FMRV9GUl9VVEY4ICE9IG5vbmU7IHRoZW4KICBwcmVwYXJlX2xvY2FsZV8gZnIgJExPQ0FMRV9GUl9VVEY4CiAgTEFOR1VBR0U9IC4vcHJvZyAkTE9DQUxFX0ZSX1VURjggMiA+IHByb2cudG1wCiAgY2FzZSAkPyBpbgogICAgMCkgY2FzZSAiJGhvc3Rfb3MiIGluCiAgICAgICAgIG1pbmd3KikgTENfQUxMPUMgdHIgLWQgJ1xyJyA8IHByb2cudG1wID4gcHJvZy5vdXQgfHwgRXhpdCAxIDs7CiAgICAgICAgICopIGNwIHByb2cudG1wIHByb2cub3V0IHx8IEV4aXQgMSA7OwogICAgICAgZXNhYwogICAgICAgJHtESUZGfSBwcm9nLm9rdSBwcm9nLm91dCB8fCBFeGl0IDE7OwogICAgNzcpIExPQ0FMRV9GUl9VVEY4PW5vbmU7OwogICAgKikgRXhpdCAxOzsKICBlc2FjCmZpCmlmIHRlc3QgJExPQ0FMRV9GUiA9IG5vbmUgJiYgdGVzdCAkTE9DQUxFX0ZSX1VURjggPSBub25lOyB0aGVuCiAgaWYgdGVzdCAtZiAvdXNyL2Jpbi9sb2NhbGVkZWY7IHRoZW4KICAgIGVjaG8gIlNraXBwaW5nIHRlc3Q6IG5vIGZyZW5jaCBsb2NhbGUgaXMgaW5zdGFsbGVkIgogIGVsc2UKICAgIGVjaG8gIlNraXBwaW5nIHRlc3Q6IG5vIGZyZW5jaCBsb2NhbGUgaXMgc3VwcG9ydGVkIgogIGZpCiAgRXhpdCA3NwpmaQoKRXhpdCAwCg==