IyEgL2Jpbi9zaAouICIke3NyY2Rpcj0ufS9pbml0LnNoIjsgcGF0aF9wcmVwZW5kXyAuIC4uL3NyYwoKIyBUZXN0IG9mIGdldHRleHQgZmFjaWxpdGllcyBpbiB0aGUgT2JqZWN0aXZlIEMgbGFuZ3VhZ2UuCiMgQXNzdW1lcyBhbiBmcl9GUiBsb2NhbGUgaXMgaW5zdGFsbGVkLgojIEFzc3VtZXMgdGhlIGZvbGxvd2luZyBwYWNrYWdlcyBhcmUgaW5zdGFsbGVkOiBnY2MuCgojIFRoaXMgdGVzdCBmYWlscyBpZiB0aGUgZ2V0dGV4dCBwYWNrYWdlIHdhcyBjb25maWd1cmVkIHdpdGggLS1kaXNhYmxlLW5scywKIyBiZWNhdXNlIGluIHRoaXMgY2FzZSB0aGUgZ2V0dGV4dC1ydW50aW1lL2ludGwvIGRpcmVjdG9yeSBkb2VzIG5vdCBwcm9kdWNlCiMgYSA8bGliaW50bC5oPiBoZWFkZXIgZmlsZS4KCiMgVGVzdCB3aGV0aGVyIGFuIE9iamVjdGl2ZUMgY29tcGlsZXIgaXMgZm91bmQuCmNhdCA8PFxFT0YgPiBoZWxsby5tCiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CmludCBtYWluICgpCnsKICBwcmludGYgKCJIZWxsbyB3b3JsZFxuIik7CiAgZXhpdCAoMCk7Cn0KRU9GCiR7Q0N9ICR7Q0ZMQUdTfSAke0NQUEZMQUdTfSAke0xERkxBR1N9IC1vIGhlbGxvIGhlbGxvLm0gMj4vZGV2L251bGwgXAogIHx8IHsgZWNobyAiU2tpcHBpbmcgdGVzdDogT2JqZWN0aXZlIEMgY29tcGlsZXIgbm90IGZvdW5kIgogICAgICAgRXhpdCA3NwogICAgIH0KCmNhdCA8PFxFT0YgPiBwcm9nLm0KI2luY2x1ZGUgImNvbmZpZy5oIgojaW5jbHVkZSA8bGliaW50bC5oPgojaW5jbHVkZSA8bG9jYWxlLmg+CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlICJ4c2V0ZW52LmgiCiNkZWZpbmUgXyhzdHJpbmcpIGdldHRleHQgKHN0cmluZykKCmludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQp7CiAgaW50IG4gPSBhdG9pIChhcmd2WzJdKTsKCiAgeHNldGVudiAoIkxDX0FMTCIsIGFyZ3ZbMV0sIDEpOwogIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgIiIpID09IE5VTEwpCiAgICAvKiBDb3VsZG4ndCBzZXQgbG9jYWxlLiAgKi8KICAgIGV4aXQgKDc3KTsKCiAgdGV4dGRvbWFpbiAoInByb2ciKTsKICBiaW5kdGV4dGRvbWFpbiAoInByb2ciLCAiLiIpOwoKICBwcmludGYgKF8oIidZb3VyIGNvbW1hbmQsIHBsZWFzZT8nLCBhc2tlZCB0aGUgd2FpdGVyLiIpKTsKICBwcmludGYgKCJcbiIpOwoKICBwcmludGYgKG5nZXR0ZXh0ICgiYSBwaWVjZSBvZiBjYWtlIiwgIiVkIHBpZWNlcyBvZiBjYWtlIiwgbiksIG4pOwogIHByaW50ZiAoIlxuIik7CgogIHByaW50ZiAoXygiJXMgaXMgcmVwbGFjZWQgYnkgJXMuIiksICJGRiIsICJFVVIiKTsKICBwcmludGYgKCJcbiIpOwoKICBleGl0ICgwKTsKfQpFT0YKCiMgUHV0IHRoZSAtSSBmbGFncyBiZWZvcmUgJHtDRkxBR1N9ICR7Q1BQRkxBR1N9LCB0byBtYWtlIHN1cmUgdGhhdCBsaWJpbnRsLmgKIyBpcyBmb3VuZCBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5LCByZWdhcmRsZXNzIG9mIC1JIG9wdGlvbnMgcHJlc2VudCBpbgojICR7Q0ZMQUdTfSBvciAke0NQUEZMQUdTfS4KJHtDQ30gLUkuLi8uLiAtSSIkYWJzX3RvcF9zcmNkaXIiL2dudWxpYi1saWIgLUkuLi8uLi8uLi9nZXR0ZXh0LXJ1bnRpbWUvaW50bCAke0NGTEFHU30gJHtDUFBGTEFHU30gLWMgcHJvZy5tIFwKICB8fCBFeGl0IDEKCjogJHtDT05GSUdfU0hFTEw9JHtTSEVMTC0vYmluL3NofX0KJHtDT05GSUdfU0hFTEx9ICIkdG9wX2J1aWxkZGlyIi9saWJ0b29sIC0tcXVpZXQgLS10YWc9Q0MgLS1tb2RlPWxpbmsgXAogICR7Q0N9ICR7Q0ZMQUdTfSAtbyBwcm9nIHByb2cuJHtPQkpFWFR9IC4uLy4uL2dudWxpYi1saWIvbGliZ2V0dGV4dGxpYi5sYSAke0xERkxBR1N9ICR7TFRMSUJJTlRMfSBcCiAgfHwgRXhpdCAxCgo6ICR7WEdFVFRFWFQ9eGdldHRleHR9CiR7WEdFVFRFWFR9IC1vIHByb2cudG1wIC0tb21pdC1oZWFkZXIgLS1uby1sb2NhdGlvbiAta18gcHJvZy5tIHx8IEV4aXQgMQpMQ19BTEw9QyB0ciAtZCAnXHInIDwgcHJvZy50bXAgPiBwcm9nLnBvdCB8fCBFeGl0IDEKCmNhdCA8PEVPRiA+IHByb2cub2sKIywgYy1mb3JtYXQKbXNnaWQgIidZb3VyIGNvbW1hbmQsIHBsZWFzZT8nLCBhc2tlZCB0aGUgd2FpdGVyLiIKbXNnc3RyICIiCgojLCBjLWZvcm1hdAptc2dpZCAiYSBwaWVjZSBvZiBjYWtlIgptc2dpZF9wbHVyYWwgIiVkIHBpZWNlcyBvZiBjYWtlIgptc2dzdHJbMF0gIiIKbXNnc3RyWzFdICIiCgojLCBjLWZvcm1hdAptc2dpZCAiJXMgaXMgcmVwbGFjZWQgYnkgJXMuIgptc2dzdHIgIiIKRU9GCgo6ICR7RElGRj1kaWZmfQoke0RJRkZ9IHByb2cub2sgcHJvZy5wb3QgfHwgRXhpdCAxCgpjYXQgPDxcRU9GID4gZnIucG8KbXNnaWQgIiIKbXNnc3RyICIiCiJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMVxuIgoiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gPiAxKTtcbiIKCiMsIGMtZm9ybWF0Cm1zZ2lkICInWW91ciBjb21tYW5kLCBwbGVhc2U/JywgYXNrZWQgdGhlIHdhaXRlci4iCm1zZ3N0ciAiq1ZvdHJlIGNvbW1hbmRlLCBzJ2lsIHZvdXMgcGxhaXS7LCBkaXQgbGUgZ2Fy529uLiIKCiMgTGVzIGdhdGVhdXggYWxsZW1hbmRzIHNvbnQgbGVzIG1laWxsZXVycyBkdSBtb25kZS4KIywgYy1mb3JtYXQKbXNnaWQgImEgcGllY2Ugb2YgY2FrZSIKbXNnaWRfcGx1cmFsICIlZCBwaWVjZXMgb2YgY2FrZSIKbXNnc3RyWzBdICJ1biBtb3JjZWF1IGRlIGdhdGVhdSIKbXNnc3RyWzFdICIlZCBtb3JjZWF1eCBkZSBnYXRlYXUiCgojIFJldmVyc2UgdGhlIGFyZ3VtZW50cy4KIywgYy1mb3JtYXQKbXNnaWQgIiVzIGlzIHJlcGxhY2VkIGJ5ICVzLiIKbXNnc3RyICIlMiRzIHJlbXBsYWNlICUxJHMuIgpFT0YKCjogJHtNU0dNRVJHRT1tc2dtZXJnZX0KJHtNU0dNRVJHRX0gLXEgLW8gZnIucG8udG1wIGZyLnBvIHByb2cucG90IHx8IEV4aXQgMQpMQ19BTEw9QyB0ciAtZCAnXHInIDwgZnIucG8udG1wID4gZnIucG8ubmV3IHx8IEV4aXQgMQoKOiAke0RJRkY9ZGlmZn0KJHtESUZGfSBmci5wbyBmci5wby5uZXcgfHwgRXhpdCAxCgp0ZXN0IC1kIGZyIHx8IG1rZGlyIGZyCnRlc3QgLWQgZnIvTENfTUVTU0FHRVMgfHwgbWtkaXIgZnIvTENfTUVTU0FHRVMKCjogJHtNU0dGTVQ9bXNnZm10fQoke01TR0ZNVH0gLW8gZnIvTENfTUVTU0FHRVMvcHJvZy5tbyBmci5wbwoKOiAke0RJRkY9ZGlmZn0KY2F0IDw8XEVPRiA+IHByb2cub2sKq1ZvdHJlIGNvbW1hbmRlLCBzJ2lsIHZvdXMgcGxhaXS7LCBkaXQgbGUgZ2Fy529uLgoyIG1vcmNlYXV4IGRlIGdhdGVhdQpFVVIgcmVtcGxhY2UgRkYuCkVPRgpjYXQgPDxcRU9GID4gcHJvZy5va3UKwqtWb3RyZSBjb21tYW5kZSwgcydpbCB2b3VzIHBsYWl0wrssIGRpdCBsZSBnYXLDp29uLgoyIG1vcmNlYXV4IGRlIGdhdGVhdQpFVVIgcmVtcGxhY2UgRkYuCkVPRgoKOiAke0xPQ0FMRV9GUj1mcl9GUn0KOiAke0xPQ0FMRV9GUl9VVEY4PWZyX0ZSLlVURi04fQppZiB0ZXN0ICRMT0NBTEVfRlIgIT0gbm9uZTsgdGhlbgogIHByZXBhcmVfbG9jYWxlXyBmciAkTE9DQUxFX0ZSCiAgTEFOR1VBR0U9IC4vcHJvZyAkTE9DQUxFX0ZSIDIgPiBwcm9nLm91dAogIGNhc2UgJD8gaW4KICAgIDApICR7RElGRn0gcHJvZy5vayBwcm9nLm91dCB8fCBFeGl0IDE7OwogICAgNzcpIExPQ0FMRV9GUj1ub25lOzsKICAgICopIEV4aXQgMTs7CiAgZXNhYwpmaQppZiB0ZXN0ICRMT0NBTEVfRlJfVVRGOCAhPSBub25lOyB0aGVuCiAgcHJlcGFyZV9sb2NhbGVfIGZyICRMT0NBTEVfRlJfVVRGOAogIExBTkdVQUdFPSAuL3Byb2cgJExPQ0FMRV9GUl9VVEY4IDIgPiBwcm9nLm91dAogIGNhc2UgJD8gaW4KICAgIDApICR7RElGRn0gcHJvZy5va3UgcHJvZy5vdXQgfHwgRXhpdCAxOzsKICAgIDc3KSBMT0NBTEVfRlJfVVRGOD1ub25lOzsKICAgICopIEV4aXQgMTs7CiAgZXNhYwpmaQppZiB0ZXN0ICRMT0NBTEVfRlIgPSBub25lICYmIHRlc3QgJExPQ0FMRV9GUl9VVEY4ID0gbm9uZTsgdGhlbgogIGlmIHRlc3QgLWYgL3Vzci9iaW4vbG9jYWxlZGVmOyB0aGVuCiAgICBlY2hvICJTa2lwcGluZyB0ZXN0OiBubyBmcmVuY2ggbG9jYWxlIGlzIGluc3RhbGxlZCIKICBlbHNlCiAgICBlY2hvICJTa2lwcGluZyB0ZXN0OiBubyBmcmVuY2ggbG9jYWxlIGlzIHN1cHBvcnRlZCIKICBmaQogIEV4aXQgNzcKZmkKCkV4aXQgMAo=