IyBQcmludGVyRGlhbG9nX2RlLnByb3BlcnRpZXMgLS0gR2VybWFuIHByb3BlcnR5IGZpbGUgZm9yIFByaW50ZXJEaWFsb2cKIyBDb3B5cmlnaHQgKEMpIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiMgCiMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIENsYXNzcGF0aC4KIyAKIyBHTlUgQ2xhc3NwYXRoIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKIyBhbnkgbGF0ZXIgdmVyc2lvbi4KIyAKIyBHTlUgQ2xhc3NwYXRoIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAojIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyAKIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggR05VIENsYXNzcGF0aDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZQojIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQojIDAyMTEwLTEzMDEgVVNBLgojIAojIExpbmtpbmcgdGhpcyBsaWJyYXJ5IHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHkgd2l0aCBvdGhlciBtb2R1bGVzIGlzCiMgbWFraW5nIGEgY29tYmluZWQgd29yayBiYXNlZCBvbiB0aGlzIGxpYnJhcnkuICBUaHVzLCB0aGUgdGVybXMgYW5kCiMgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgY292ZXIgdGhlIHdob2xlCiMgY29tYmluYXRpb24uCiMgCiMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mIHRoaXMgbGlicmFyeSBnaXZlIHlvdQojIHBlcm1pc3Npb24gdG8gbGluayB0aGlzIGxpYnJhcnkgd2l0aCBpbmRlcGVuZGVudCBtb2R1bGVzIHRvIHByb2R1Y2UgYW4KIyBleGVjdXRhYmxlLCByZWdhcmRsZXNzIG9mIHRoZSBsaWNlbnNlIHRlcm1zIG9mIHRoZXNlIGluZGVwZW5kZW50CiMgbW9kdWxlcywgYW5kIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHVuZGVyCiMgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCwgZm9yIGVhY2ggbGlua2VkCiMgaW5kZXBlbmRlbnQgbW9kdWxlLCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIGxpY2Vuc2Ugb2YgdGhhdAojIG1vZHVsZS4gIEFuIGluZGVwZW5kZW50IG1vZHVsZSBpcyBhIG1vZHVsZSB3aGljaCBpcyBub3QgZGVyaXZlZCBmcm9tCiMgb3IgYmFzZWQgb24gdGhpcyBsaWJyYXJ5LiAgSWYgeW91IG1vZGlmeSB0aGlzIGxpYnJhcnksIHlvdSBtYXkgZXh0ZW5kCiMgdGhpcyBleGNlcHRpb24gdG8geW91ciB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBidXQgeW91IGFyZSBub3QKIyBvYmxpZ2F0ZWQgdG8gZG8gc28uICBJZiB5b3UgZG8gbm90IHdpc2ggdG8gZG8gc28sIGRlbGV0ZSB0aGlzCiMgZXhjZXB0aW9uIHN0YXRlbWVudCBmcm9tIHlvdXIgdmVyc2lvbi4KIwpyYnQub25lc2lkZWQ9RWluc2VpdGlnCnJidC5jYWxlbmRhcj1LYWxlbmRlcmRydWNrCnJidC5kdXBsZXg9RHVwbGV4CnJidC5ibGFja3doaXRlPVNjaHdhcnp3ZWnfCnJidC5jb2xvcj1GYXJiZQpyYnQubG93PUVudHd1cmYKcmJ0Lm5vcm1hbD1Ob3JtYWwKcmJ0LmhpZ2g9SG9jaApyYnQuYWxsPUFsbGUKcmJ0LnBhZ2VzPVNlaXRlbgpyYnQucG9ydHJhaXQ9SG9jaGZvcm1hdApyYnQubGFuZHNjYXBlPVF1ZXJmb3JtYXQKcmJ0LnJldnBvcnRyYWl0PVVtZ2VrZWhydGVzIEhvY2hmb3JtYXQKcmJ0LnJldmxhbmRzY2FwZT1VbWdla2VocnRlcyBRdWVyZm9ybWF0CmNiLmNvdmVyPURlY2tibGF0dApjYi5zb3J0PVNvcnRpZXJlbgpjYi5vdXRwdXQ9QXVzZ2FiZSBpbiBEYXRlaSB1bWxlaXRlbgpsYi5zaXplPUdy9t9lOgpsYi5zb3VyY2U9UXVlbGxlOgpsYi5sZWZ0PWxpbmtzIChtbSkKbGIucmlnaHQ9cmVjaHRzIChtbSkKbGIudG9wPW9iZW4gKG1tKQpsYi5ib3R0b209dW50ZW4gKG1tKQpsYi5uYW1lPU5hbWU6CmxiLnN0YXR1cz1TdGF0dXM6CmxiLnR5cD1UeXA6CmxiLmluZm89SW5mbzoKbGIudG89QmlzCmxiLmNvcGllcz1BbnphaGwgZGVyIEtvcGllbjoKbGIuam9ibmFtZT1Kb2ItbmFtZToKbGIudXNlcm5hbWU9QmVudXR6ZXJuYW1lOgpsYi5wcmlvcml0eT1Qcmlvcml05HQ6CmxiLmFjY2VwdGluZ2pvYnM9RHJ1Y2tlciBuaW1tdCBBdWZ0cuRnZSBhbgpsYi5ub3RhY2NlcHRpbmdqb2JzPURydWNrZXIgbmltbXQga2VpbmUgQXVmdHLkZ2UgYW4KbGIuYXV0b21hdGljYWxseT1BdXRvbWF0aXNjaGUgQXVzd2FobApidC5hdHRyaWJ1dGVzPUVpZ2Vuc2NoYWZ0ZW4uLi4KYnQucHJpbnQ9RHJ1Y2tlbgpidC5PSz1PSwpidC5jYW5jZWw9QWJicmVjaGVuCnRpdGxlLm1lZGlhcz1NZWRpZW4KdGl0bGUucHJpbnRzZXJ2aWNlPURydWNrZGllbnN0CnRpdGxlLm9yaWVudGF0aW9uPUF1c3JpY2h0dW5nCnRpdGxlLmNvbG9yPUZhcmJkYXJzdGVsbHVuZwp0aXRsZS5zaWRlcz1TZWl0ZW4KdGl0bGUuY29waWVzPUtvcGllbgp0aXRsZS5xdWFsaXR5PVF1YWxpdOR0CnRpdGxlLmpvYmF0dHJpYnV0ZXM9Sm9iLUF0dHJpYnV0ZQp0aXRsZS5tYXJnaW5zPVLkbmRlcgp0aXRsZS5wcmludGRpYWxvZz1EcnVja2VuCnRpdGxlLnBhZ2VkaWFsb2c9U2VpdGUgZWlucmljaHRlbgp0aXRsZS5wcmludHJhbmdlPURydWNrYmVyZWljaAp0YWIuZ2VuZXJhbD1BbGxnZW1laW4KdGFiLnBhZ2VzZXR1cD1TZWl0ZSBlaW5yaWNodGVuCnRhYi5hcHBlYXJhbmNlPUF1c3NlaGVuCg==