Name: series-workflowpz8sf Phase: Failed StartedAt: 2026-08-03 17:56:53 +0000 UTC FinishedAt: 2026-08-03 18:11:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpz8sf[0] Phase: Succeeded StartedAt: 2026-08-03 17:56:53 +0000 UTC FinishedAt: 2026-08-03 18:11:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpz8sf[0].run-triage Phase: Succeeded StartedAt: 2026-08-03 17:56:53 +0000 UTC FinishedAt: 2026-08-03 18:11:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBwZ2RhdF9wYWdlX2V4dF9pbml0YCBmdW5jdGlvbiwgd2hpY2ggd2FzIGVpdGhlciBhbiBlbXB0eSBzdHViIG9yIHNpbXBseSBzZXQgYHBnZGF0LVx1MDAzZW5vZGVfcGFnZV9leHQgPSBOVUxMYC4gU2luY2UgYHBnZGF0YCBzdHJ1Y3R1cmVzIGFyZSBhbHdheXMgemVyby1pbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gKHZpYSBgbWVtc2V0YCBpbiBgYWxsb2Nfbm9kZV9kYXRhYCBvciBieSB1c2luZyBgbWVtYmxvY2tfYWxsb2NgKSwgdGhpcyBpbml0aWFsaXphdGlvbiB3YXMgY29tcGxldGVseSByZWR1bmRhbnQuIFJlbW92aW5nIGl0IGlzIGEgcHVyZWx5IGRlY29yYXRpdmUgY2xlYW51cCB0aGF0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZmEzNjA3NTBlZGQ1ZWFjMDczOWJkYjk3NTRmMTBhN2Y2ZDgxY2RhYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTg6MDg6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oXG5pbmRleCBmMjNkNGIyMThkYTA3Li43OWM1M2VjNDVkZmE3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmhcbkBAIC01NSw3ICYjNDM7NTUsNiBAQCBzdHJ1Y3QgcGFnZV9leHQge1xuIFxuIGV4dGVybiBib29sIGVhcmx5X3BhZ2VfZXh0O1xuIGV4dGVybiB1bnNpZ25lZCBsb25nIHBhZ2VfZXh0X3NpemU7XG4tZXh0ZXJuIHZvaWQgcGdkYXRfcGFnZV9leHRfaW5pdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KTtcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgZWFybHlfcGFnZV9leHRfZW5hYmxlZCh2b2lkKVxuIHtcbkBAIC0yMDIsMTAgJiM0MzsyMDEsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZWFybHlfcGFnZV9leHRfZW5hYmxlZCh2b2lkKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgcGdkYXRfcGFnZV9leHRfaW5pdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuLXtcbi19XG4tXG4gc3RhdGljIGlubGluZSB2b2lkIHBhZ2VfZXh0X2luaXQodm9pZClcbiB7XG4gfVxuZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuY1xuaW5kZXggNzExZjgyMWY3YjNjNy4uZTljNDIwNGI3M2FkYiAxMDA2NDRcbi0tLSBhL21tL21tX2luaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW1faW5pdC5jXG5AQCAtMTM5NCw3ICYjNDM7MTM5NCw2IEBAIHN0YXRpYyB2b2lkIF9fbWVtaW5pdCBwZ2RhdF9pbml0X2ludGVybmFscyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfVk1TQ0FOX1RIUk9UVExFOyBpJiM0MzsmIzQzOylcbiBcdFx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZwZ2RhdC1cdTAwM2VyZWNsYWltX3dhaXRbaV0pO1xuIFxuLVx0cGdkYXRfcGFnZV9leHRfaW5pdChwZ2RhdCk7XG4gXHRscnV2ZWNfaW5pdChcdTAwMjZwZ2RhdC1cdTAwM2VfX2xydXZlYyk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfZXh0LmMgYi9tbS9wYWdlX2V4dC5jXG5pbmRleCBlMmU5MmJkMjdlYmRkLi5iNjc5YThjMWY3ZDdlIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9leHQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9leHQuY1xuQEAgLTE2NCwxMSAmIzQzOzE2NCw2IEBAIHZvaWQgX19pbml0IHBhZ2VfZXh0X2luaXRfZmxhdG1lbV9sYXRlKHZvaWQpXG4gXHRpbnZva2VfaW5pdF9jYWxsYmFja3MoKTtcbiB9XG4gXG4tdm9pZCBfX21lbWluaXQgcGdkYXRfcGFnZV9leHRfaW5pdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuLXtcbi1cdHBnZGF0LVx1MDAzZW5vZGVfcGFnZV9leHQgPSBOVUxMO1xuLX1cbi1cbiBzdGF0aWMgc3RydWN0IHBhZ2VfZXh0ICpsb29rdXBfcGFnZV9leHQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcbkBAIC00OTQsMTAgJiM0Mzs0ODksNiBAQCB2b2lkIF9faW5pdCBwYWdlX2V4dF9pbml0KHZvaWQpXG4gXHRwYW5pYyhcJiMzNDtPdXQgb2YgbWVtb3J5XCYjMzQ7KTtcbiB9XG4gXG4tdm9pZCBfX21lbWluaXQgcGdkYXRfcGFnZV9leHRfaW5pdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuLXtcbi19XG4tXG4gI2VuZGlmXG4gXG4gLyoqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBwZ2RhdF9wYWdlX2V4dF9pbml0YCBmdW5jdGlvbiwgd2hpY2ggd2FzIGVpdGhlciBhbiBlbXB0eSBzdHViIG9yIHNpbXBseSBzZXQgYHBnZGF0LVx1MDAzZW5vZGVfcGFnZV9leHQgPSBOVUxMYC4gU2luY2UgYHBnZGF0YCBzdHJ1Y3R1cmVzIGFyZSBhbHdheXMgemVyby1pbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gKHZpYSBgbWVtc2V0YCBpbiBgYWxsb2Nfbm9kZV9kYXRhYCBvciBieSB1c2luZyBgbWVtYmxvY2tfYWxsb2NgKSwgdGhpcyBpbml0aWFsaXphdGlvbiB3YXMgY29tcGxldGVseSByZWR1bmRhbnQuIFJlbW92aW5nIGl0IGlzIGEgcHVyZWx5IGRlY29yYXRpdmUgY2xlYW51cCB0aGF0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZmEzNjA3NTBlZGQ1ZWFjMDczOWJkYjk3NTRmMTBhN2Y2ZDgxY2RhYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMgMTg6MDg6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmgKaW5kZXggZjIzZDRiMjE4ZGEwNy4uNzljNTNlYzQ1ZGZhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZV9leHQuaApAQCAtNTUsNyAmIzQzOzU1LDYgQEAgc3RydWN0IHBhZ2VfZXh0IHsKIAogZXh0ZXJuIGJvb2wgZWFybHlfcGFnZV9leHQ7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBwYWdlX2V4dF9zaXplOwotZXh0ZXJuIHZvaWQgcGdkYXRfcGFnZV9leHRfaW5pdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KTsKIAogc3RhdGljIGlubGluZSBib29sIGVhcmx5X3BhZ2VfZXh0X2VuYWJsZWQodm9pZCkKIHsKQEAgLTIwMiwxMCAmIzQzOzIwMSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBlYXJseV9wYWdlX2V4dF9lbmFibGVkKHZvaWQpCiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcGdkYXRfcGFnZV9leHRfaW5pdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KQotewotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9leHRfaW5pdCh2b2lkKQogewogfQpkaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jCmluZGV4IDcxMWY4MjFmN2IzYzcuLmU5YzQyMDRiNzNhZGIgMTAwNjQ0Ci0tLSBhL21tL21tX2luaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tbV9pbml0LmMKQEAgLTEzOTQsNyAmIzQzOzEzOTQsNiBAQCBzdGF0aWMgdm9pZCBfX21lbWluaXQgcGdkYXRfaW5pdF9pbnRlcm5hbHMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkKIAlmb3IgKGkgPSAwOyBpICZsdDsgTlJfVk1TQ0FOX1RIUk9UVExFOyBpJiM0MzsmIzQzOykKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmYW1wO3BnZGF0LSZndDtyZWNsYWltX3dhaXRbaV0pOwogCi0JcGdkYXRfcGFnZV9leHRfaW5pdChwZ2RhdCk7CiAJbHJ1dmVjX2luaXQoJmFtcDtwZ2RhdC0mZ3Q7X19scnV2ZWMpOwogfQogCmRpZmYgLS1naXQgYS9tbS9wYWdlX2V4dC5jIGIvbW0vcGFnZV9leHQuYwppbmRleCBlMmU5MmJkMjdlYmRkLi5iNjc5YThjMWY3ZDdlIDEwMDY0NAotLS0gYS9tbS9wYWdlX2V4dC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfZXh0LmMKQEAgLTE2NCwxMSAmIzQzOzE2NCw2IEBAIHZvaWQgX19pbml0IHBhZ2VfZXh0X2luaXRfZmxhdG1lbV9sYXRlKHZvaWQpCiAJaW52b2tlX2luaXRfY2FsbGJhY2tzKCk7CiB9CiAKLXZvaWQgX19tZW1pbml0IHBnZGF0X3BhZ2VfZXh0X2luaXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkKLXsKLQlwZ2RhdC0mZ3Q7bm9kZV9wYWdlX2V4dCA9IE5VTEw7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcGFnZV9leHQgKmxvb2t1cF9wYWdlX2V4dChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAl1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpOwpAQCAtNDk0LDEwICYjNDM7NDg5LDYgQEAgdm9pZCBfX2luaXQgcGFnZV9leHRfaW5pdCh2b2lkKQogCXBhbmljKCYjMzQ7T3V0IG9mIG1lbW9yeSYjMzQ7KTsKIH0KIAotdm9pZCBfX21lbWluaXQgcGdkYXRfcGFnZV9leHRfaW5pdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KQotewotfQotCiAjZW5kaWYKIAogLyoqCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NjcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogUmVtb3ZpbmcgYHBnZGF0X3BhZ2VfZXh0X2luaXRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgYXhpbmcgdGhlIGBwZ2RhdF9wYWdlX2V4dF9pbml0YCBmdW5jdGlvbiwgYW5kIGl0cyBjb3JyZXNwb25kaW5nIGNhbGxzLiBJIHNlZSB0aGUgY2hhbmdlcyBhcmUgaW4gYGluY2x1ZGUvbGludXgvcGFnZV9leHQuaGAsIGBtbS9tbV9pbml0LmNgLCBhbmQgYG1tL3BhZ2VfZXh0LmNgLiBJbnRlcmVzdGluZy4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIGBwZ2RhdF9wYWdlX2V4dF9pbml0YCB3YXMgZXNzZW50aWFsbHkganVzdCBpbml0aWFsaXppbmcgYHBnZGF0LSZndDtub2RlX3BhZ2VfZXh0ID0gTlVMTDtgIGluIGNlcnRhaW4gY29uZmlndXJhdGlvbnMsIGFuZCBjb21wbGV0ZWx5IGVtcHR5IGluIG90aGVycy4gU2VlbXMgbGlrZSBzb21lIHJlZHVuZGFudCBjb2RlLCBwb3RlbnRpYWxseS4KCldhaXQgYSBzZWNvbmQuLi4gaWYgd2UmIzM5O3JlIHJlbW92aW5nIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwgZG9lcyB0aGF0IG1lYW4gYG5vZGVfcGFnZV9leHRgIGl0c2VsZiBpcyBiZWluZyByZW1vdmVkPyBJIG5lZWQgdG8gdmVyaWZ5IHRoaXMuIExldCBtZSBxdWlja2x5IGNoZWNrIGlmIGBub2RlX3BhZ2VfZXh0YCBzdGlsbCBleGlzdHMgd2l0aGluIHRoZSBgcGdsaXN0X2RhdGFgIHN0cnVjdHVyZS4gVGltZSB0byBydW4gYSBxdWljayBncmVwIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGVsc2UgcmVsaWVzIG9uIGl0IGFuZCB0aGF0IHdlJiMzOTtyZSBub3QgYWJvdXQgdG8gYnJlYWsgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bm9kZV9wYWdlX2V4dCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q9MjEwPUdlbmVyYWxcbi0tXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMjMwLVxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjIzMTpgYG5vZGVfcGFnZV9leHRgYFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTIzMi0gIEZvciBVTUEgc3lzdGVtcyB0aGF0IHVzZSBGTEFUTUVNIG1lbW9yeSBtb2RlbCB0aGUgMCYjMzk7cyBub2RlXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjMzOiAgYGBub2RlX3BhZ2VfZXh0YGAgaXMgYXJyYXkgb2YgZXh0ZW5zaW9ucyBvZiBzdHJ1Y3QgcGFnZXMuIEF2YWlsYWJsZSBvbmx5XG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMjM0LSAgaW4gdGhlIGtlcm5lbHMgYnVpbHQgd2l0aCBgYENPTkZJR19QQUdFX0VYVEVOU0lPTmBgIGVuYWJsZWQuXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdD0yMDU9bm9kZV96b25lbGlzdHPlvJXnlKjjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTIxOS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjIwOmBgbm9kZV9wYWdlX2V4dGBgXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjIyMTrlr7nkuo7kvb/nlKhGTEFUTUVN5YaF5a2Y5qih5Z6L55qEVU1B57O757uf77yMMOWPt+iKgueCueeahCBgYG5vZGVfcGFnZV9leHRgYFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0yMjIt5pivc3RydWN0IHBhZ2Vz55qE5omp5bGV5pWw57uE44CC5Y+q5pyJ5Zyo5p6E5bu65pe25byA5ZCv5LqGIGBgQ09ORklHX1BBR0VfRVhURU5TSU9OYGBcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTE0Nzk9dHlwZWRlZiBzdHJ1Y3QgcGdsaXN0X2RhdGEge1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTQ5Ny0jaWZkZWYgQ09ORklHX1BBR0VfRVhURU5TSU9OXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE0OTg6XHRzdHJ1Y3QgcGFnZV9leHQgKm5vZGVfcGFnZV9leHQ7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE0OTktI2VuZGlmXG4tLVxubW0vcGFnZV9leHQuYz0xNjc9c3RhdGljIHN0cnVjdCBwYWdlX2V4dCAqbG9va3VwX3BhZ2VfZXh0KGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL3BhZ2VfZXh0LmMtMTczLVx0V0FSTl9PTl9PTkNFKCFyY3VfcmVhZF9sb2NrX2hlbGQoKSk7XG5tbS9wYWdlX2V4dC5jOjE3NDpcdGJhc2UgPSBOT0RFX0RBVEEocGFnZV90b19uaWQocGFnZSkpLVx1MDAzZW5vZGVfcGFnZV9leHQ7XG5tbS9wYWdlX2V4dC5jLTE3NS1cdC8qXG4tLVxubW0vcGFnZV9leHQuYy0xODctXG5tbS9wYWdlX2V4dC5jOjE4ODpzdGF0aWMgaW50IF9faW5pdCBhbGxvY19ub2RlX3BhZ2VfZXh0KGludCBuaWQpXG5tbS9wYWdlX2V4dC5jLTE4OS17XG4tLVxubW0vcGFnZV9leHQuYy0yMTMtXHRcdHJldHVybiAtRU5PTUVNO1xubW0vcGFnZV9leHQuYzoyMTQ6XHROT0RFX0RBVEEobmlkKS1cdTAwM2Vub2RlX3BhZ2VfZXh0ID0gYmFzZTtcbm1tL3BhZ2VfZXh0LmMtMjE1LVx0dG90YWxfdXNhZ2UgJiM0Mzs9IHRhYmxlX3NpemU7XG4tLVxubW0vcGFnZV9leHQuYz0yMjA9dm9pZCBfX2luaXQgcGFnZV9leHRfaW5pdF9mbGF0bWVtKHZvaWQpXG4tLVxubW0vcGFnZV9leHQuYy0yMjgtXHRmb3JfZWFjaF9vbmxpbmVfbm9kZShuaWQpICB7XG5tbS9wYWdlX2V4dC5jOjIyOTpcdFx0ZmFpbCA9IGFsbG9jX25vZGVfcGFnZV9leHQobmlkKTtcbm1tL3BhZ2VfZXh0LmMtMjMwLVx0XHRpZiAoZmFpbClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzE0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgUmVtb3ZhbCBvZiBgcGdkYXRfcGFnZV9leHRfaW5pdGAqKgoKT2theSwgc28gYG5vZGVfcGFnZV9leHRgIGlzIHN0aWxsIGJlaW5nIGFjdGl2ZWx5IHV0aWxpemVkIHdpdGhpbiBgYWxsb2Nfbm9kZV9wYWdlX2V4dGAgYW5kIGBsb29rdXBfcGFnZV9leHRgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gVGhlIHBhdGNoIGluIHF1ZXN0aW9uIGlzIGp1c3QgZWxpbWluYXRpbmcgdGhlIGBwZ2RhdF9wYWdlX2V4dF9pbml0YCBmdW5jdGlvbiwgd2hpY2ggd2FzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgaXQgdG8gYE5VTExgLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoYXQgaW5pdGlhbGl6YXRpb24gc3RpbGwgbmVjZXNzYXJ5PwoKSG1tLi4uIGEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IHRoZSBgcGdkYXRgIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgdXNpbmcgZWl0aGVyIGBremFsbG9jYCBvciBgbWVtYmxvY2tfYWxsb2NgLCBhbmQgYm90aCBvZiB0aG9zZSBtZXRob2RzIHplcm8gdGhlIGFsbG9jYXRlZCBtZW1vcnkuIFRoaXMgc3VnZ2VzdHMgdGhlIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIG1pZ2h0IGJlIHJlZHVuZGFudC4gVG8gYmUgY29tcGxldGVseSBzdXJlLCBJIHNob3VsZCB2ZXJpZnkgdGhlIGBwZ2RhdF9pbml0X2ludGVybmFsc2AgZnVuY3Rpb24gaW4gYG1tL21tX2luaXQuY2AgdG8gY29uZmlybSB0aGUgbWVtb3J5IGluaXRpYWxpemF0aW9uIGJlaGF2aW9yLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBpdCB0byBtYWtlIGNlcnRhaW4gbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGdkYXRfaW5pdF9pbnRlcm5hbHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbW1faW5pdC5jPTEzODA9c3RhdGljIHZvaWQgcGdkYXRfaW5pdF9rY29tcGFjdGQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkge31cbi0tXG5tbS9tbV9pbml0LmMtMTM4Mi1cbm1tL21tX2luaXQuYzoxMzgzOnN0YXRpYyB2b2lkIF9fbWVtaW5pdCBwZ2RhdF9pbml0X2ludGVybmFscyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxubW0vbW1faW5pdC5jLTEzODQte1xuLS1cbm1tL21tX2luaXQuYz0xNTMyPWludCBfX3JlZiBmcmVlX2FyZWFfaW5pdF9jb3JlX2hvdHBsdWcoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbi0tXG5tbS9tbV9pbml0LmMtMTUzNy1cbm1tL21tX2luaXQuYzoxNTM4Olx0cGdkYXRfaW5pdF9pbnRlcm5hbHMocGdkYXQpO1xubW0vbW1faW5pdC5jLTE1MzktXG4tLVxubW0vbW1faW5pdC5jPTE1OTA9c3RhdGljIHZvaWQgX19pbml0IGZyZWVfYXJlYV9pbml0X2NvcmUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbi0tXG5tbS9tbV9pbml0LmMtMTU5NC1cbm1tL21tX2luaXQuYzoxNTk1Olx0cGdkYXRfaW5pdF9pbnRlcm5hbHMocGdkYXQpO1xubW0vbW1faW5pdC5jLTE1OTYtXHRwZ2RhdC1cdTAwM2VwZXJfY3B1X25vZGVzdGF0cyA9IFx1MDAyNmJvb3Rfbm9kZXN0YXRzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNTcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgSW5pdGlhbGl6YXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIHRoZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcywgc3BlY2lmaWNhbGx5IHRoZSBgcGdkYXRfaW5pdF9pbnRlcm5hbHNgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHJlbW92aW5nIGEgY2FsbCB0byBgcGdkYXRfcGFnZV9leHRfaW5pdChwZ2RhdCk7YC4gVGhpcyBmdW5jdGlvbiB3YXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgYHBnZGF0LSZndDtub2RlX3BhZ2VfZXh0YCB0byBgTlVMTGAuIFRoZSBrZXkgcXVlc3Rpb24gaGVyZSBpcywgZG9lcyB0aGlzIHJlbW92YWwgcmVwcmVzZW50IGEgZnVuY3Rpb25hbCBjaGFuZ2U/IEl0IGZlZWxzIGxpa2UgaXQgbWlnaHQgYmUgcmVkdW5kYW50LCBidXQgSSBuZWVkIHRvIGJlIHN1cmUuCgpJZiBgcGdkYXRgIGlzIGluaXRpYWxpemVkIHdpdGggemVyb3MsIHdoaWNoIGlzIGNvbW1vbiBpbiBtYW55IGFyY2hpdGVjdHVyZXMsIHRoZW4gc2V0dGluZyBgcGdkYXQtJmd0O25vZGVfcGFnZV9leHRgIHRvIGBOVUxMYCBleHBsaWNpdGx5IHdvdWxkIGJlIHJlZHVuZGFudCwgYmVjYXVzZSBpdCYjMzk7cyBhbHJlYWR5IGltcGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gemVybywgd2hpY2ggaXMgdGhlIHNhbWUgdGhpbmcgYXMgYE5VTExgIGluIHRoaXMgY29udGV4dC4gQnV0LCBJIHJlYWxseSBjYW4mIzM5O3Qgc2F5IGZvciBzdXJlLCB3aXRob3V0IHZlcmlmeWluZyBob3cgYW5kIHdoZXJlIHRoaXMgc3RydWN0dXJlLCBgcGdkYXRgLCBpcyBhY3R1YWxseSBhbGxvY2F0ZWQuIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBjb2RlIGZvciBgcGdkYXRgIGl0c2VsZiB0byBiZSBjZXJ0YWluLiBUaGF0JiMzOTtzIHRoZSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2Nfbm9kZV9kYXRhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbG9vbmdhcmNoL2tlcm5lbC9udW1hLmM9MTQzPXN0YXRpYyB2b2lkIF9faW5pdCBub2RlX21lbV9pbml0KHVuc2lnbmVkIGludCBub2RlKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9udW1hLmMtMTU1LVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL251bWEuYzoxNTY6XHRhbGxvY19ub2RlX2RhdGEobm9kZSk7XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbnVtYS5jLTE1Ny19XG4tLVxuYXJjaC9taXBzL2xvb25nc29uNjQvbnVtYS5jPTgyPXN0YXRpYyB2b2lkIF9faW5pdCBub2RlX21lbV9pbml0KHVuc2lnbmVkIGludCBub2RlKVxuLS1cbmFyY2gvbWlwcy9sb29uZ3NvbjY0L251bWEuYy05NC1cbmFyY2gvbWlwcy9sb29uZ3NvbjY0L251bWEuYzo5NTpcdGFsbG9jX25vZGVfZGF0YShub2RlKTtcbmFyY2gvbWlwcy9sb29uZ3NvbjY0L251bWEuYy05Ni1cbi0tXG5hcmNoL3Bvd2VycGMvbW0vbnVtYS5jPTEwOTM9c3RhdGljIHZvaWQgX19pbml0IHNldHVwX25vZGVfZGF0YShpbnQgbmlkLCB1NjQgc3RhcnRfcGZuLCB1NjQgZW5kX3Bmbilcbi0tXG5hcmNoL3Bvd2VycGMvbW0vbnVtYS5jLTEwOTYtXG5hcmNoL3Bvd2VycGMvbW0vbnVtYS5jOjEwOTc6XHRhbGxvY19ub2RlX2RhdGEobmlkKTtcbmFyY2gvcG93ZXJwYy9tbS9udW1hLmMtMTA5OC1cbi0tXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYz0xMDY0PXN0YXRpYyB2b2lkIF9faW5pdCBhbGxvY2F0ZV9ub2RlX2RhdGEoaW50IG5pZClcbi0tXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYy0xMDY5LSNpZmRlZiBDT05GSUdfTlVNQVxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmM6MTA3MDpcdGFsbG9jX25vZGVfZGF0YShuaWQpO1xuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMtMTA3MS1cbi0tXG5hcmNoL3g4Ni9tbS9udW1hLmM9MTI2PXN0YXRpYyBpbnQgX19pbml0IG51bWFfcmVnaXN0ZXJfbm9kZXModm9pZClcbi0tXG5hcmNoL3g4Ni9tbS9udW1hLmMtMTQ0LVxuYXJjaC94ODYvbW0vbnVtYS5jOjE0NTpcdFx0YWxsb2Nfbm9kZV9kYXRhKG5pZCk7XG5hcmNoL3g4Ni9tbS9udW1hLmMtMTQ2LVx0XHRub2RlX3NldF9vbmxpbmUobmlkKTtcbi0tXG5kcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmM9MTk1PXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ub2RlX2RhdGEoaW50IG5pZCwgdTY0IHN0YXJ0X3BmbiwgdTY0IGVuZF9wZm4pXG4tLVxuZHJpdmVycy9iYXNlL2FyY2hfbnVtYS5jLTE5OS1cbmRyaXZlcnMvYmFzZS9hcmNoX251bWEuYzoyMDA6XHRhbGxvY19ub2RlX2RhdGEobmlkKTtcbmRyaXZlcnMvYmFzZS9hcmNoX251bWEuYy0yMDEtXG4tLVxuaW5jbHVkZS9saW51eC9udW1hLmg9MjU9ZXh0ZXJuIHN0cnVjdCBwZ2xpc3RfZGF0YSAqbm9kZV9kYXRhW107XG4tLVxuaW5jbHVkZS9saW51eC9udW1hLmgtMjctXG5pbmNsdWRlL2xpbnV4L251bWEuaDoyODp2b2lkIF9faW5pdCBhbGxvY19ub2RlX2RhdGEoaW50IG5pZCk7XG5pbmNsdWRlL2xpbnV4L251bWEuaC0yOS12b2lkIF9faW5pdCBhbGxvY19vZmZsaW5lX25vZGVfZGF0YShpbnQgbmlkKTtcbi0tXG5tbS9udW1hLmM9OT1FWFBPUlRfU1lNQk9MKG5vZGVfZGF0YSk7XG4tLVxubW0vbnVtYS5jLTExLS8qIEFsbG9jYXRlIE5PREVfREFUQSBmb3IgYSBub2RlIG9uIHRoZSBsb2NhbCBtZW1vcnkgKi9cbm1tL251bWEuYzoxMjp2b2lkIF9faW5pdCBhbGxvY19ub2RlX2RhdGEoaW50IG5pZClcbm1tL251bWEuYy0xMy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUxOQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGFsbG9jX25vZGVfZGF0YWAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHJldmlzaXQgYGFsbG9jX25vZGVfZGF0YWAgd2l0aGluIGBtbS9udW1hLmNgLiBJdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBOVU1BIG5vZGUgZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gdGFrZXMgcGxhY2UsIHNvIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gb3Igbm9kZSBjaGFyYWN0ZXJpc3RpY3MgYWxtb3N0IGNlcnRhaW5seSBoYXMgYSByb290IGhlcmUuIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgc3RhdGUgb2YgdGhlIGZ1bmN0aW9uLCB0aGUgc3BlY2lmaWMgY2FsbCBjaGFpbiwgYW5kIHRoZSBtZW1vcnkgc3RydWN0dXJlcyBjcmVhdGVkLiBJIGtub3cgaXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbiBmb3Igc2V0dGluZyB1cCB0aGUgbm9kZSYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBjb250ZXh0cywgYW5kIHN1YnRsZSBlcnJvcnMgY2FuIHByb3BhZ2F0ZSBhbmQgY2F1c2UgaGVhZGFjaGVzIGRvd24gdGhlIGxpbmUuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gbG9vayBmb3IgaG93IHRoaXMgaW50ZWdyYXRlcyB3aXRoIHRoZSBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzIHdpdGhpbiB0aGlzIGZpbGUgYXMgd2VsbCBhcyBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIE5VTUEgbGF5ZXIgYW5kIGl0cyBzcGVjaWZpYyBjYWxscyB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgQVBJcy4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBnZW5lcmljIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgdGhlIGFzc29jaWF0ZWQgZXJyb3ItaGFuZGxpbmcgcGF0aHMuIEEgZGVlcCBkaXZlIHdpbGwgdW5jb3ZlciBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgbGVha3Mgb3IsIG1heWJlIGp1c3QgbWF5YmUsIGEgc3RyYWlnaHRmb3J3YXJkIG1pc2NvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgX19pbml0IGFsbG9jX25vZGVfZGF0YSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L251bWEuaD0yNT1leHRlcm4gc3RydWN0IHBnbGlzdF9kYXRhICpub2RlX2RhdGFbXTtcbi0tXG5pbmNsdWRlL2xpbnV4L251bWEuaC0yNy1cbmluY2x1ZGUvbGludXgvbnVtYS5oOjI4OnZvaWQgX19pbml0IGFsbG9jX25vZGVfZGF0YShpbnQgbmlkKTtcbmluY2x1ZGUvbGludXgvbnVtYS5oLTI5LXZvaWQgX19pbml0IGFsbG9jX29mZmxpbmVfbm9kZV9kYXRhKGludCBuaWQpO1xuLS1cbm1tL251bWEuYz05PUVYUE9SVF9TWU1CT0wobm9kZV9kYXRhKTtcbi0tXG5tbS9udW1hLmMtMTEtLyogQWxsb2NhdGUgTk9ERV9EQVRBIGZvciBhIG5vZGUgb24gdGhlIGxvY2FsIG1lbW9yeSAqL1xubW0vbnVtYS5jOjEyOnZvaWQgX19pbml0IGFsbG9jX25vZGVfZGF0YShpbnQgbmlkKVxubW0vbnVtYS5jLTEzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk4MQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCBgbW0vbnVtYS5jYCBhbmQgZm9jdXMgb24gbGluZXMgMTIgdGhyb3VnaCAzMC4gTXkgZ29hbCBoZXJlIGlzIHRvIGdldCBhIHF1aWNrIGdyYXNwIG9mIHRoZSBjb250ZXh0IHRoZXNlIGxpbmVzIGVzdGFibGlzaC4gVGhpcyBsaWtlbHkgbWVhbnMgdGhleSYjMzk7cmUgc2V0dGluZyB1cCBzb21lIGZ1bmRhbWVudGFsIGRlZmluaXRpb25zLCBkYXRhIHN0cnVjdHVyZXMsIG9yIGluaXRpYWxpemF0aW9ucyByZWxhdGVkIHRvIE5VTUEgKE5vbi1Vbmlmb3JtIE1lbW9yeSBBY2Nlc3MpIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2UgZGVjbGFyYXRpb25zIG9mIHJlbGV2YW50IHN0cnVjdHVyZXMsIHBvc3NpYmx5IHNvbWUgY29uc3RhbnQgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBub2RlIHNpemVzIG9yIG1lbW9yeSB6b25lcywgYW5kIG1heWJlIHNvbWUgaW5pdGlhbCBhc3NpZ25tZW50cyBvciBmdW5jdGlvbiBwcm90b3R5cGVzIHRoYXQgYXJlIGNydWNpYWwgdG8gdGhlIE5VTUEgYXJjaGl0ZWN0dXJlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCBob3cgdGhlIGtlcm5lbCBpcyBwZXJjZWl2aW5nIGFuZCBpbnRlcmFjdGluZyB3aXRoIHRoZSBkaWZmZXJlbnQgbWVtb3J5IG5vZGVzIGF2YWlsYWJsZSBpbiB0aGUgc3lzdGVtLiBLbm93aW5nIHRoaXMgZm91bmRhdGlvbiB3aWxsIGhlbHAgbWUgcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBtb3JlIGNvbXBsZXggbG9naWMgdGhhdCB3aWxsIGZvbGxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9udW1hLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDEyOlx0dm9pZCBfX2luaXQgYWxsb2Nfbm9kZV9kYXRhKGludCBuaWQpXG4gIDEzOlx0e1xuICAxNDpcdFx0Y29uc3Qgc2l6ZV90IG5kX3NpemUgPSByb3VuZHVwKHNpemVvZihwZ19kYXRhX3QpLCBTTVBfQ0FDSEVfQllURVMpO1xuICAxNTpcdFx0dTY0IG5kX3BhO1xuICAxNjpcdFx0aW50IHRuaWQ7XG4gIDE3Olx0XG4gIDE4Olx0XHQvKiBBbGxvY2F0ZSBub2RlIGRhdGEuICBUcnkgbm9kZS1sb2NhbCBtZW1vcnkgYW5kIHRoZW4gYW55IG5vZGUuICovXG4gIDE5Olx0XHRuZF9wYSA9IG1lbWJsb2NrX3BoeXNfYWxsb2NfdHJ5X25pZChuZF9zaXplLCBTTVBfQ0FDSEVfQllURVMsIG5pZCk7XG4gIDIwOlx0XHRpZiAoIW5kX3BhKVxuICAyMTpcdFx0XHRwYW5pYyhcJiMzNDtDYW5ub3QgYWxsb2NhdGUgJXp1IGJ5dGVzIGZvciBub2RlICVkIGRhdGFcXG5cJiMzNDssXG4gIDIyOlx0XHRcdCAgICAgIG5kX3NpemUsIG5pZCk7XG4gIDIzOlx0XG4gIDI0Olx0XHQvKiByZXBvcnQgYW5kIGluaXRpYWxpemUgKi9cbiAgMjU6XHRcdHByX2luZm8oXCYjMzQ7Tk9ERV9EQVRBKCVkKSBhbGxvY2F0ZWQgW21lbSAlIzAxMEx4LSUjMDEwTHhdXFxuXCYjMzQ7LCBuaWQsXG4gIDI2Olx0XHRcdG5kX3BhLCBuZF9wYSAmIzQzOyBuZF9zaXplIC0gMSk7XG4gIDI3Olx0XHR0bmlkID0gZWFybHlfcGZuX3RvX25pZChuZF9wYSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4gIDI4Olx0XHRpZiAodG5pZCAhPSBuaWQpXG4gIDI5Olx0XHRcdHByX2luZm8oXCYjMzQ7ICAgIE5PREVfREFUQSglZCkgb24gbm9kZSAlZFxcblwmIzM0OywgbmlkLCB0bmlkKTtcbiAgMzA6XHRcbiAgMzE6XHRcdG5vZGVfZGF0YVtuaWRdID0gX192YShuZF9wYSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NzUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczogKipIYW5nIG9uIGEgc2Vjb25kLCBkb2VzIGBtZW1ibG9ja19waHlzX2FsbG9jX3RyeV9uaWRgIGFjdHVhbGx5IHplcm8gb3V0IHRoZSBtZW1vcnkgaXQgYWxsb2NhdGVzIGJ5IGRlZmF1bHQ/KiogVGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8ga25vdy4gSWYgaXQgZG9lcywgdGhhdCYjMzk7cyBvbmUgbGVzcyB0aGluZyBJIGhhdmUgdG8gd29ycnkgYWJvdXQuIElmIG5vdCwgSSYjMzk7bGwgbmVlZCB0byBleHBsaWNpdGx5IHplcm8gaXQgbXlzZWxmIHdoaWNoIGNvdWxkIGludHJvZHVjZSBzb21lIGNvbXBsZXhpdHkuCgpTbywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBMZXQmIzM5O3MgZGl2ZSByaWdodCBpbnRvIHRoZSBjb2RlIGZvciBgbWVtYmxvY2tfcGh5c19hbGxvY190cnlfbmlkYCBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4gR290dGEgY29uZmlybSB0aGlzIGJlaGF2aW9yIGJlZm9yZSBJIG1vdmUgZm9yd2FyZCwgbm8gYXNzdW1wdGlvbnMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWJsb2NrX3BoeXNfYWxsb2NfdHJ5X25pZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg9NDAyPXBoeXNfYWRkcl90IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChwaHlzX2FkZHJfdCBzaXplLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC00MDQtXHRcdFx0XHQgICAgICBwaHlzX2FkZHJfdCBlbmQsIGludCBuaWQsIGJvb2wgZXhhY3RfbmlkKTtcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaDo0MDU6cGh5c19hZGRyX3QgbWVtYmxvY2tfcGh5c19hbGxvY190cnlfbmlkKHBoeXNfYWRkcl90IHNpemUsIHBoeXNfYWRkcl90IGFsaWduLCBpbnQgbmlkKTtcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC00MDYtXG4tLVxubW0vbWVtYmxvY2suYz0xNjIxPXBoeXNfYWRkcl90IF9faW5pdCBtZW1ibG9ja19waHlzX2FsbG9jX3JhbmdlKHBoeXNfYWRkcl90IHNpemUsXG4tLVxubW0vbWVtYmxvY2suYy0xNjMzLS8qKlxubW0vbWVtYmxvY2suYzoxNjM0OiAqIG1lbWJsb2NrX3BoeXNfYWxsb2NfdHJ5X25pZCAtIGFsbG9jYXRlIGEgbWVtb3J5IGJsb2NrIGZyb20gc3BlY2lmaWVkIE5VTUEgbm9kZVxubW0vbWVtYmxvY2suYy0xNjM1LSAqIEBzaXplOiBzaXplIG9mIG1lbW9yeSBibG9jayB0byBiZSBhbGxvY2F0ZWQgaW4gYnl0ZXNcbi0tXG5tbS9tZW1ibG9jay5jLTE2NDUtICovXG5tbS9tZW1ibG9jay5jOjE2NDY6cGh5c19hZGRyX3QgX19pbml0IG1lbWJsb2NrX3BoeXNfYWxsb2NfdHJ5X25pZChwaHlzX2FkZHJfdCBzaXplLCBwaHlzX2FkZHJfdCBhbGlnbiwgaW50IG5pZClcbm1tL21lbWJsb2NrLmMtMTY0Ny17XG4tLVxubW0vbnVtYS5jPTEyPXZvaWQgX19pbml0IGFsbG9jX25vZGVfZGF0YShpbnQgbmlkKVxuLS1cbm1tL251bWEuYy0xOC1cdC8qIEFsbG9jYXRlIG5vZGUgZGF0YS4gIFRyeSBub2RlLWxvY2FsIG1lbW9yeSBhbmQgdGhlbiBhbnkgbm9kZS4gKi9cbm1tL251bWEuYzoxOTpcdG5kX3BhID0gbWVtYmxvY2tfcGh5c19hbGxvY190cnlfbmlkKG5kX3NpemUsIFNNUF9DQUNIRV9CWVRFUywgbmlkKTtcbm1tL251bWEuYy0yMC1cdGlmICghbmRfcGEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMTQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBtbS9tZW1ibG9jay5jYCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgbW0vbWVtYmxvY2suY2AgZmlsZSwgc3BlY2lmaWNhbGx5IGxpbmVzIDE2NDYgdGhyb3VnaCAxNjYwLiBNeSBpbnRlcm5hbCBwYXJzaW5nIGVuZ2luZSBpcyBhbHJlYWR5IGNodXJuaW5nLiBJIGtub3cgdGhpcyBmaWxlIGlzIGNydWNpYWwgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgdGhvc2Ugc3BlY2lmaWMgbGluZXMgcHJvYmFibHkgZGVhbCB3aXRoIGEgcHJldHR5IGltcG9ydGFudCBhc3BlY3Qgb2YgdGhlIG1lbWJsb2NrJiMzOTtzIG9wZXJhdGlvbi4gSSYjMzk7bSBndWVzc2luZyBpdCYjMzk7cyByZWxhdGVkIHRvIGFsbG9jYXRpb24sIGZyZWVpbmcsIG9yIG1heWJlIGluaXRpYWxpemF0aW9uLCBnaXZlbiB0aGUgY29udGV4dC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQgcGVhcmxzIG9mIHdpc2RvbSB0aGlzIHNlY3Rpb24gaG9sZHMuIEkmIzM5O20gZXhwZWN0aW5nIHNvbWV0aGluZyBudWFuY2VkLCBwb3RlbnRpYWxseSBpbnZvbHZpbmcgYWRkcmVzc2luZyBjb21wbGV4IGhhcmR3YXJlIGludGVyYWN0aW9ucyBvciByZXNvdXJjZSBjb25zdHJhaW50cywgb3Igc29tZSBjbGV2ZXIgYml0IG1hbmlwdWxhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1ibG9jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY0NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjQ2Olx0cGh5c19hZGRyX3QgX19pbml0IG1lbWJsb2NrX3BoeXNfYWxsb2NfdHJ5X25pZChwaHlzX2FkZHJfdCBzaXplLCBwaHlzX2FkZHJfdCBhbGlnbiwgaW50IG5pZClcbjE2NDc6XHR7XG4xNjQ4Olx0XHRyZXR1cm4gbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHNpemUsIGFsaWduLCAwLFxuMTY0OTpcdFx0XHRcdFx0XHRNRU1CTE9DS19BTExPQ19BQ0NFU1NJQkxFLCBuaWQsIGZhbHNlKTtcbjE2NTA6XHR9XG4xNjUxOlx0XG4xNjUyOlx0LyoqXG4xNjUzOlx0ICogbWVtYmxvY2tfYWxsb2NfaW50ZXJuYWwgLSBhbGxvY2F0ZSBib290IG1lbW9yeSBibG9ja1xuMTY1NDpcdCAqIEBzaXplOiBzaXplIG9mIG1lbW9yeSBibG9jayB0byBiZSBhbGxvY2F0ZWQgaW4gYnl0ZXNcbjE2NTU6XHQgKiBAYWxpZ246IGFsaWdubWVudCBvZiB0aGUgcmVnaW9uIGFuZCBibG9jayYjMzk7cyBzaXplXG4xNjU2Olx0ICogQG1pbl9hZGRyOiB0aGUgbG93ZXIgYm91bmQgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gYWxsb2NhdGUgKHBoeXMgYWRkcmVzcylcbjE2NTc6XHQgKiBAbWF4X2FkZHI6IHRoZSB1cHBlciBib3VuZCBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBhbGxvY2F0ZSAocGh5cyBhZGRyZXNzKVxuMTY1ODpcdCAqIEBuaWQ6IG5pZCBvZiB0aGUgZnJlZSBhcmVhIHRvIGZpbmQsICVOVU1BX05PX05PREUgZm9yIGFueSBub2RlXG4xNjU5Olx0ICogQGV4YWN0X25pZDogY29udHJvbCB0aGUgYWxsb2NhdGlvbiBmYWxsIGJhY2sgdG8gb3RoZXIgbm9kZXNcbjE2NjA6XHQgKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzM4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKk1lbW9yeSBBbGxvY2F0aW9uIENvbmNlcm5zKioKCkhvbGQgb24gYSBzZWNvbmQuLi4gaXMgbXkgdW5kZXJzdGFuZGluZyBvZiBgbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkYCBjb3JyZWN0PyBJIHRob3VnaHQgaXQgKmNsZWFyZWQqIHRoZSBtZW1vcnkgaXQgYWxsb2NhdGVzLCBidXQgbm93IEkmIzM5O20gaGF2aW5nIGEgbmFnZ2luZyBkb3VidC4gSSBuZWVkIHRvIHZlcmlmeSB0aGlzIGFzc3VtcHRpb24uIElmIGl0IGRvZXNuJiMzOTt0IGNsZWFyIHRoZSBtZW1vcnksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3RhdGUgaXQgbGVhdmVzIGl0IGluLCBhbmQgd2hldGhlciBvciBub3QgdGhhdCBpbnRyb2R1Y2VzIGFueSBzZWN1cml0eSBvciBzdGFiaWxpdHkgY29uY2VybnMgaW4gdGhlIHN5c3RlbSBJJiMzOTttIHdvcmtpbmcgb24uIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBhbmQgZG91YmxlLWNoZWNrIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBjb2RlIGZvciBib3RoIGBtZW1ibG9ja19hbGxvY19pbnRlcm5hbGAgYW5kIGBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuZGFtZW50YWwgZGlmZmVyZW5jZSBhbmQgY29udHJvbCBiZXR3ZWVuIHRoZSB0d28uIE9uZSBvZiB0aGVzZSBmdW5jdGlvbnMgbXVzdCBoYW5kbGUgbWVtb3J5IGNsZWFyaW5nLCBhbmQgaWYgaXQmIzM5O3Mgbm90IHRoZSBvbmUgSSAqdGhvdWdodCogaXQgd2FzLCBJIG5lZWQgdG8gYWRqdXN0IG15IGFwcHJvYWNoIGFjY29yZGluZ2x5LiBUaGlzIHNlZW1zIGxpa2UgYSBjcml0aWNhbCBkZXRhaWwgSSBjYW4mIzM5O3QgYWZmb3JkIHRvIGdldCB3cm9uZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtYmxvY2suaD00MDA9cGh5c19hZGRyX3QgbWVtYmxvY2tfcGh5c19hbGxvY19yYW5nZShwaHlzX2FkZHJfdCBzaXplLCBwaHlzX2FkZHJfdCBhbGlnbixcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC00MDEtXHRcdFx0XHQgICAgICBwaHlzX2FkZHJfdCBzdGFydCwgcGh5c19hZGRyX3QgZW5kKTtcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaDo0MDI6cGh5c19hZGRyX3QgbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHBoeXNfYWRkcl90IHNpemUsXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtNDAzLVx0XHRcdFx0ICAgICAgcGh5c19hZGRyX3QgYWxpZ24sIHBoeXNfYWRkcl90IHN0YXJ0LFxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NjcyPXN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy03MjQtXHRcdHNpemUgPSBzY3JhdGNoX3NpemVfbm9kZShuaWQpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo3MjU6XHRcdGFkZHIgPSBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQoc2l6ZSwgQ01BX01JTl9BTElHTk1FTlRfQllURVMsXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTcyNi1cdFx0XHRcdFx0XHQwLCBNRU1CTE9DS19BTExPQ19BQ0NFU1NJQkxFLFxuLS1cbm1tL2NtYS5jPTM4Nz1zdGF0aWMgcGh5c19hZGRyX3QgX19pbml0IGNtYV9hbGxvY19tZW0ocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcbi0tXG5tbS9jbWEuYy00MDItXHRcdG1lbWJsb2NrX3NldF9ib3R0b21fdXAodHJ1ZSk7XG5tbS9jbWEuYzo0MDM6XHRcdGFkZHIgPSBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQoc2l6ZSwgYWxpZ24sIFNaXzRHLCBsaW1pdCxcbm1tL2NtYS5jLTQwNC1cdFx0XHRcdFx0XHRuaWQsIHRydWUpO1xuLS1cbm1tL2NtYS5jLTQyMi1cdFx0aWYgKGJhc2UgXHUwMDNjIGhpZ2htZW0gXHUwMDI2XHUwMDI2IGxpbWl0IFx1MDAzZSBoaWdobWVtKSB7XG5tbS9jbWEuYzo0MjM6XHRcdFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBhbGlnbiwgaGlnaG1lbSxcbm1tL2NtYS5jLTQyNC1cdFx0XHRcdFx0XHRcdGxpbWl0LCBuaWQsIHRydWUpO1xuLS1cbm1tL2NtYS5jLTQyOS1cdGlmICghYWRkcilcbm1tL2NtYS5jOjQzMDpcdFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBhbGlnbiwgYmFzZSwgbGltaXQsIG5pZCxcbm1tL2NtYS5jLTQzMS1cdFx0XHRcdFx0XHR0cnVlKTtcbi0tXG5tbS9tZW1ibG9jay5jLTk2LSAqIG1lbW9yeSByYW5nZXMgYW5kIHRoZSBmYWxsYmFjayBtZXRob2RzLiBDb25zdWx0IHRoZSBkb2N1bWVudGF0aW9uXG5tbS9tZW1ibG9jay5jOjk3OiAqIG9mIG1lbWJsb2NrX2FsbG9jX2ludGVybmFsKCkgYW5kIG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZCgpXG5tbS9tZW1ibG9jay5jLTk4LSAqIGZ1bmN0aW9ucyBmb3IgbW9yZSBlbGFib3JhdGUgZGVzY3JpcHRpb24uXG4tLVxubW0vbWVtYmxvY2suYz0xNDkxPWludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfc2V0X25vZGUocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcbi0tXG5tbS9tZW1ibG9jay5jLTE1MTAtLyoqXG5tbS9tZW1ibG9jay5jOjE1MTE6ICogbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkIC0gYWxsb2NhdGUgYm9vdCBtZW1vcnkgYmxvY2tcbm1tL21lbWJsb2NrLmMtMTUxMi0gKiBAc2l6ZTogc2l6ZSBvZiBtZW1vcnkgYmxvY2sgdG8gYmUgYWxsb2NhdGVkIGluIGJ5dGVzXG4tLVxubW0vbWVtYmxvY2suYy0xNTM0LSAqL1xubW0vbWVtYmxvY2suYzoxNTM1OnBoeXNfYWRkcl90IF9faW5pdCBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQocGh5c19hZGRyX3Qgc2l6ZSxcbm1tL21lbWJsb2NrLmMtMTUzNi1cdFx0XHRcdFx0cGh5c19hZGRyX3QgYWxpZ24sIHBoeXNfYWRkcl90IHN0YXJ0LFxuLS1cbm1tL21lbWJsb2NrLmM9MTYyMT1waHlzX2FkZHJfdCBfX2luaXQgbWVtYmxvY2tfcGh5c19hbGxvY19yYW5nZShwaHlzX2FkZHJfdCBzaXplLFxuLS1cbm1tL21lbWJsb2NrLmMtMTYyOC1cdFx0ICAgICAodm9pZCAqKV9SRVRfSVBfKTtcbm1tL21lbWJsb2NrLmM6MTYyOTpcdHJldHVybiBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQoc2l6ZSwgYWxpZ24sIHN0YXJ0LCBlbmQsIE5VTUFfTk9fTk9ERSxcbm1tL21lbWJsb2NrLmMtMTYzMC1cdFx0XHRcdFx0ZmFsc2UpO1xuLS1cbm1tL21lbWJsb2NrLmM9MTY0Nj1waHlzX2FkZHJfdCBfX2luaXQgbWVtYmxvY2tfcGh5c19hbGxvY190cnlfbmlkKHBoeXNfYWRkcl90IHNpemUsIHBoeXNfYWRkcl90IGFsaWduLCBpbnQgbmlkKVxubW0vbWVtYmxvY2suYy0xNjQ3LXtcbm1tL21lbWJsb2NrLmM6MTY0ODpcdHJldHVybiBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQoc2l6ZSwgYWxpZ24sIDAsXG5tbS9tZW1ibG9jay5jLTE2NDktXHRcdFx0XHRcdE1FTUJMT0NLX0FMTE9DX0FDQ0VTU0lCTEUsIG5pZCwgZmFsc2UpO1xuLS1cbm1tL21lbWJsb2NrLmMtMTY2MC0gKlxubW0vbWVtYmxvY2suYzoxNjYxOiAqIEFsbG9jYXRlcyBtZW1vcnkgYmxvY2sgdXNpbmcgbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKCkgYW5kXG5tbS9tZW1ibG9jay5jLTE2NjItICogY29udmVydHMgdGhlIHJldHVybmVkIHBoeXNpY2FsIGFkZHJlc3MgdG8gdmlydHVhbC5cbi0tXG5tbS9tZW1ibG9jay5jLTE2NjYtICogYXMgbm9kZSBhbmQgbWlycm9yZWQgbWVtb3J5IHdpbGwgYmUgaGFuZGxlZCBhZ2FpbiBpblxubW0vbWVtYmxvY2suYzoxNjY3OiAqIG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZCgpLlxubW0vbWVtYmxvY2suYy0xNjY4LSAqXG4tLVxubW0vbWVtYmxvY2suYz0xNjcyPXN0YXRpYyB2b2lkICogX19pbml0IG1lbWJsb2NrX2FsbG9jX2ludGVybmFsKFxuLS1cbm1tL21lbWJsb2NrLmMtMTY4Mi1cbm1tL21lbWJsb2NrLmM6MTY4MzpcdGFsbG9jID0gbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHNpemUsIGFsaWduLCBtaW5fYWRkciwgbWF4X2FkZHIsIG5pZCxcbm1tL21lbWJsb2NrLmMtMTY4NC1cdFx0XHRcdFx0ZXhhY3RfbmlkKTtcbi0tXG5tbS9tZW1ibG9jay5jLTE2ODctXHRpZiAoIWFsbG9jIFx1MDAyNlx1MDAyNiBtaW5fYWRkcilcbm1tL21lbWJsb2NrLmM6MTY4ODpcdFx0YWxsb2MgPSBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQoc2l6ZSwgYWxpZ24sIDAsIG1heF9hZGRyLCBuaWQsXG5tbS9tZW1ibG9jay5jLTE2ODktXHRcdFx0XHRcdFx0ZXhhY3RfbmlkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM3OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBOb2RlIERhdGEgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBgbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkYCBnaXZlcyB1cyBhICpwaHlzaWNhbCogYWRkcmVzcywgcmlnaHQ/IFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBUaGVuLCBsZXQmIzM5O3MgbG9vayBhdCBgYWxsb2Nfbm9kZV9kYXRhYC4gQWhhISBJdCBjYWxscyBgbWVtYmxvY2tfcGh5c19hbGxvY190cnlfbmlkYC4gU28sIGl0JiMzOTtzIGRlZmluaXRlbHkgdHJ5aW5nIHRvIGFsbG9jYXRlIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgdXNpbmcgYG1lbWJsb2NrYCwgYW5kIGl0JiMzOTtzIGF0dGVtcHRpbmcgdGhpcyBmb3IgYSBzcGVjaWZpYyBub2RlIElEIChgbmlkYCkuIElmIHRoYXQgZmFpbHMsIGl0IHBhbmljcyDigJMgYSBwcmV0dHkgZm9yY2VmdWwgaW5kaWNhdG9yLiBJdCB0aGVuIGxvZ3MgdGhlIGFsbG9jYXRpb24sIGluZGljYXRpbmcgdGhlIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UuIEl0IGNhbGN1bGF0ZXMgdGhlIG5vZGUgSUQgb2YgdGhlIGFsbG9jYXRlZCBwaHlzaWNhbCBhZGRyZXNzIHRocm91Z2ggYGVhcmx5X3Bmbl90b19uaWRgLCB0byBlbnN1cmUgd2hhdCBub2RlIHRoZSBtZW1vcnkgaXMgb24uIENyaXRpY2FsbHksIGFuZCB0aGlzIGlzIHdoYXQgSSB3YXMgbG9va2luZyBmb3IsIGl0IGFzc2lnbnMgdGhlIHZpcnR1YWwgYWRkcmVzcyB1c2luZyBgX192YShuZF9wYSlgIHRvIGBub2RlX2RhdGFbbmlkXWAuIEFuZCBoZXJlIGl0IGlzLi4uIHRoZXJlIGl0IGlzISBgbWVtc2V0YCEgSXQgKmRvZXMqIHplcm8gdGhlIGFsbG9jYXRlZCBtZW1vcnkgdXNpbmcgYG1lbXNldChub2RlX2RhdGFbbmlkXSwgMCwgc2l6ZW9mKHBnX2RhdGFfdCkpYC4gT2theSwgc28gdGhlIGBwZ19kYXRhX3RgIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCB0byB6ZXJvIGFmdGVyIHRoZSBwaHlzaWNhbCBhbGxvY2F0aW9uLiBNYWtlcyBzZW5zZS4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIGluaXRpYWxpemF0aW9uIHN0ZXAuIEdvb2QuIE5vdywgSSBoYXZlIGEgcHJldHR5IGNsZWFyIHBpY3R1cmUgb2YgdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9udW1hLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0XHRwcl9pbmZvKFwmIzM0O05PREVfREFUQSglZCkgYWxsb2NhdGVkIFttZW0gJSMwMTBMeC0lIzAxMEx4XVxcblwmIzM0OywgbmlkLFxuICAyNjpcdFx0XHRuZF9wYSwgbmRfcGEgJiM0MzsgbmRfc2l6ZSAtIDEpO1xuICAyNzpcdFx0dG5pZCA9IGVhcmx5X3Bmbl90b19uaWQobmRfcGEgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuICAyODpcdFx0aWYgKHRuaWQgIT0gbmlkKVxuICAyOTpcdFx0XHRwcl9pbmZvKFwmIzM0OyAgICBOT0RFX0RBVEEoJWQpIG9uIG5vZGUgJWRcXG5cJiMzNDssIG5pZCwgdG5pZCk7XG4gIDMwOlx0XG4gIDMxOlx0XHRub2RlX2RhdGFbbmlkXSA9IF9fdmEobmRfcGEpO1xuICAzMjpcdFx0bWVtc2V0KE5PREVfREFUQShuaWQpLCAwLCBzaXplb2YocGdfZGF0YV90KSk7XG4gIDMzOlx0fVxuICAzNDpcdFxuICAzNTpcdHZvaWQgX19pbml0IGFsbG9jX29mZmxpbmVfbm9kZV9kYXRhKGludCBuaWQpXG4gIDM2Olx0e1xuICAzNzpcdFx0cGdfZGF0YV90ICpwZ2RhdDtcbiAgMzg6XHRcdG5vZGVfZGF0YVtuaWRdID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZW9mKCpwZ2RhdCksIFNNUF9DQUNIRV9CWVRFUyk7XG4gIDM5Olx0fVxuICA0MDpcdFxuICA0MTpcdC8qIFN0dWIgZnVuY3Rpb25zOiAqL1xuICA0MjpcdFxuICA0MzpcdCNpZm5kZWYgbWVtb3J5X2FkZF9waHlzYWRkcl90b19uaWRcbiAgNDQ6XHRpbnQgbWVtb3J5X2FkZF9waHlzYWRkcl90b19uaWQodTY0IHN0YXJ0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDMwNgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1lbW9yeSBJbml0aWFsaXphdGlvbiBhbmQgTm9kZSBEYXRhOiBBIFF1aWNrIFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCwgYWhhISwgSSBzZWUgdGhlIGBtZW1zZXRgIHJpZ2h0IHRoZXJlIG9uIGxpbmUgMzIuIEl0JiMzOTtzIGluaXRpYWxpemluZyBgTk9ERV9EQVRBKG5pZClgIHdpdGggemVyb3MsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBgcGdfZGF0YV90YCBzdHJ1Y3R1cmUuIFRoYXQgY29uZmlybXMgdGhlIGV4cGVjdGF0aW9uIHRoYXQgYHBnZGF0YCBpcyBpbmRlZWQgYWx3YXlzIHplcm8taW5pdGlhbGl6ZWQgYXQgdGhpcyBwb2ludC4KCkJ1dCBJJiMzOTttIGFsc28gdGhpbmtpbmcuLi4gZGlkbiYjMzk7dCB3ZSB1c2UgYGFsbG9jX29mZmxpbmVfbm9kZV9kYXRhYCByZWNlbnRseT8gSSBrbm93IHRoYXQgZnVuY3Rpb24gdXNlcyBgbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWNgLiBOb3csIHRoYXQgb25lIGlzIGltcG9ydGFudC4gSSB0aGluayBJIHJlbWVtYmVyIHRoYXQgYG1lbWJsb2NrX2FsbG9jX29yX3BhbmljYCBldmVudHVhbGx5IGNhbGxzIGBtZW1ibG9ja19hbGxvY2AgdW5kZXJuZWF0aC4gQW5kIGlmIG15IG1lbW9yeSBpcyByaWdodCwgYG1lbWJsb2NrX2FsbG9jYCBhbHNvIHplcm9lcyBvdXQgdGhlIG1lbW9yeSBpdCBhbGxvY2F0ZXMuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBzaG91bGQgcmVhbGx5IGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWNgIGl0c2VsZi4gQmVzdCB0byBjb25maXJtIHRoYXQgbXkgYXNzdW1wdGlvbnMgYXJlIHNvdW5kLCB5b3Uga25vdz8gSXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWJsb2NrX2FsbG9jX29yX3BhbmljJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA2MDggbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfY2lhLmM9MzI4PWNpYV9wcmVwYXJlX3RiaWFfd29ya2Fyb3VuZChpbnQgd2luZG93KVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfY2lhLmMtMzMzLVx0LyogVXNlIG1pbmltYWwgMUsgbWFwLiAqL1xuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9jaWEuYzozMzQ6XHRwcHRlID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoQ0lBX0JST0tFTl9UQklBX1NJWkUsIDMyNzY4KTtcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfY2lhLmMtMzM1LVx0cHRlID0gKHZpcnRfdG9fcGh5cyhwcHRlKSBcdTAwM2VcdTAwM2UgKFBBR0VfU0hJRlQgLSAxKSkgfCAxO1xuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmM9Nzk9bWtfcmVzb3VyY2VfbmFtZShpbnQgcGUsIGludCBwb3J0LCBjaGFyICpzdHIpXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYy04Ni1cdHN6ICYjNDM7PSAxOyAvKiBOVUwgdGVybWluYXRvciAqL1xuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYzo4NzpcdG5hbWUgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzeiwgU01QX0NBQ0hFX0JZVEVTKTtcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtODgtXHRzdHJzY3B5KG5hbWUsIHRtcCwgc3opO1xuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmM9MTExPWFsbG9jX2lvNyh1bnNpZ25lZCBpbnQgcGUpXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYy0xMjEtXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jOjEyMjpcdGlvNyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZigqaW83KSwgU01QX0NBQ0hFX0JZVEVTKTtcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtMTIzLVx0aW83LVx1MDAzZXBlID0gcGU7XG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmM9MzkxPWFsbG9jX3BjaV9jb250cm9sbGVyKHZvaWQpXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMtMzk0LVxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmM6Mzk1Olx0aG9zZSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZigqaG9zZSksIFNNUF9DQUNIRV9CWVRFUyk7XG5hcmNoL2FscGhhL2tlcm5lbC9wY2kuYy0zOTYtXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmM9NDA0PWFsbG9jX3Jlc291cmNlKHZvaWQpXG5hcmNoL2FscGhhL2tlcm5lbC9wY2kuYy00MDUte1xuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmM6NDA2Olx0cmV0dXJuIG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpLCBTTVBfQ0FDSEVfQllURVMpO1xuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMtNDA3LX1cbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9wY2lfaW9tbXUuYz02MD1pb21tdV9hcmVuYV9uZXdfbm9kZShpbnQgbmlkLCBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsIGRtYV9hZGRyX3QgYmFzZSxcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9wY2lfaW9tbXUuYy03NC1cbmFyY2gvYWxwaGEva2VybmVsL3BjaV9pb21tdS5jOjc1Olx0YXJlbmEgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YoKmFyZW5hKSwgU01QX0NBQ0hFX0JZVEVTKTtcbmFyY2gvYWxwaGEva2VybmVsL3BjaV9pb21tdS5jOjc2Olx0YXJlbmEtXHUwMDNlcHRlcyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKG1lbV9zaXplLCBhbGlnbik7XG5hcmNoL2FscGhhL2tlcm5lbC9wY2lfaW9tbXUuYy03Ny1cbi0tXG5hcmNoL2FybS9rZXJuZWwvc2V0dXAuYz04NTU9c3RhdGljIHZvaWQgX19pbml0IHJlcXVlc3Rfc3RhbmRhcmRfcmVzb3VyY2VzKGNvbnN0IHN0cnVjdCBtYWNoaW5lX2Rlc2MgKm1kZXNjKVxuLS1cbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jLTg4Mi1cdFx0aWYgKGFybV9oYXNfaWRtYXBfYWxpYXMoKSBcdTAwMjZcdTAwMjYgYm9vdF9hbGlhc19zdGFydCAhPSBJRE1BUF9JTlZBTElEX0FERFIpIHtcbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jOjg4MzpcdFx0XHRyZXMgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YoKnJlcyksIFNNUF9DQUNIRV9CWVRFUyk7XG5hcmNoL2FybS9rZXJuZWwvc2V0dXAuYy04ODQtXHRcdFx0cmVzLVx1MDAzZW5hbWUgPSBcJiMzNDtTeXN0ZW0gUkFNIChib290IGFsaWFzKVwmIzM0Oztcbi0tXG5hcmNoL2FybS9rZXJuZWwvc2V0dXAuYy04OTAtXG5hcmNoL2FybS9rZXJuZWwvc2V0dXAuYzo4OTE6XHRcdHJlcyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZigqcmVzKSwgU01QX0NBQ0hFX0JZVEVTKTtcbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jLTg5Mi1cdFx0cmVzLVx1MDAzZW5hbWUgID0gXCYjMzQ7U3lzdGVtIFJBTVwmIzM0Oztcbi0tXG5hcmNoL2FybS9tbS9tbXUuYz03MjA9c3RhdGljIHZvaWQgX19pbml0ICplYXJseV9hbGxvYyh1bnNpZ25lZCBsb25nIHN6KVxuYXJjaC9hcm0vbW0vbW11LmMtNzIxLXtcbmFyY2gvYXJtL21tL21tdS5jOjcyMjpcdHJldHVybiBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzeiwgc3opO1xuYXJjaC9hcm0vbW0vbW11LmMtNzIzLVxuLS1cbmFyY2gvYXJtL21tL21tdS5jPTEwMDk9dm9pZCBfX2luaXQgaW90YWJsZV9pbml0KHN0cnVjdCBtYXBfZGVzYyAqaW9fZGVzYywgaW50IG5yKVxuLS1cbmFyY2gvYXJtL21tL21tdS5jLTEwMTctXG5hcmNoL2FybS9tbS9tbXUuYzoxMDE4Olx0c3ZtID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZW9mKCpzdm0pICogbnIsIF9fYWxpZ25vZl9fKCpzdm0pKTtcbmFyY2gvYXJtL21tL21tdS5jLTEwMTktXG4tLVxuYXJjaC9hcm0vbW0vbW11LmM9MTAzND12b2lkIF9faW5pdCB2bV9yZXNlcnZlX2FyZWFfZWFybHkodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsXG4tLVxuYXJjaC9hcm0vbW0vbW11LmMtMTAzOS1cbmFyY2gvYXJtL21tL21tdS5jOjEwNDA6XHRzdm0gPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YoKnN2bSksIF9fYWxpZ25vZl9fKCpzdm0pKTtcbmFyY2gvYXJtL21tL21tdS5jLTEwNDEtXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYz0yMTA9c3RhdGljIHZvaWQgX19pbml0IHJlcXVlc3Rfc3RhbmRhcmRfcmVzb3VyY2VzKHZvaWQpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYy0yMjUtXHRyZXNfc2l6ZSA9IG51bV9zdGFuZGFyZF9yZXNvdXJjZXMgKiBzaXplb2YoKnN0YW5kYXJkX3Jlc291cmNlcyk7XG5hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jOjIyNjpcdHN0YW5kYXJkX3Jlc291cmNlcyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHJlc19zaXplLCBTTVBfQ0FDSEVfQllURVMpO1xuYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYy0yMjctXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM9NDIxPXN0YXRpYyB2b2lkIF9faW5pdCByZXNvdXJjZV9pbml0KHZvaWQpXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDM2LVx0cmVzX3NpemUgPSBudW1fc3RhbmRhcmRfcmVzb3VyY2VzICogc2l6ZW9mKCpzdGFuZGFyZF9yZXNvdXJjZXMpO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM6NDM3Olx0c3RhbmRhcmRfcmVzb3VyY2VzID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMocmVzX3NpemUsIFNNUF9DQUNIRV9CWVRFUyk7XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYy00MzgtXG4tLVxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jPTE2MD1wdGVfdCAqIF9faW5pdCBwb3B1bGF0ZV9rZXJuZWxfcHRlKHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5hcmNoL2xvb25nYXJjaC9tbS9pbml0LmMtMTY3LVx0aWYgKHA0ZF9ub25lKHA0ZHBfZ2V0KHA0ZCkpKSB7XG5hcmNoL2xvb25nYXJjaC9tbS9pbml0LmM6MTY4Olx0XHRwdWQgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQQUdFX1NJWkUsIFBBR0VfU0laRSk7XG5hcmNoL2xvb25nYXJjaC9tbS9pbml0LmMtMTY5LVx0XHRwNGRfcG9wdWxhdGUoXHUwMDI2aW5pdF9tbSwgcDRkLCBwdWQpO1xuLS1cbmFyY2gvbG9vbmdhcmNoL21tL2luaXQuYy0xNzYtXHRpZiAocHVkX25vbmUocHVkcF9nZXQocHVkKSkpIHtcbmFyY2gvbG9vbmdhcmNoL21tL2luaXQuYzoxNzc6XHRcdHBtZCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBBR0VfU0laRSwgUEFHRV9TSVpFKTtcbmFyY2gvbG9vbmdhcmNoL21tL2luaXQuYy0xNzgtXHRcdHB1ZF9wb3B1bGF0ZShcdTAwMjZpbml0X21tLCBwdWQsIHBtZCk7XG4tLVxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jLTE4Ny1cbmFyY2gvbG9vbmdhcmNoL21tL2luaXQuYzoxODg6XHRcdHB0ZSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBBR0VfU0laRSwgUEFHRV9TSVpFKTtcbmFyY2gvbG9vbmdhcmNoL21tL2luaXQuYy0xODktXHRcdHBtZF9wb3B1bGF0ZV9rZXJuZWwoXHUwMDI2aW5pdF9tbSwgcG1kLCBwdGUpO1xuLS1cbmFyY2gvbTY4ay9tbS9tY2ZtbXUuYz0zNj12b2lkIF9faW5pdCBwYWdpbmdfaW5pdCh2b2lkKVxuLS1cbmFyY2gvbTY4ay9tbS9tY2ZtbXUuYy00OC1cdHNpemUgPSAoc2l6ZSAmIzQzOyBQQUdFX1NJWkUpIFx1MDAyNiB+KFBBR0VfU0laRS0xKTtcbmFyY2gvbTY4ay9tbS9tY2ZtbXUuYzo0OTpcdG5leHRfcGd0YWJsZSA9ICh1bnNpZ25lZCBsb25nKSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplLCBQQUdFX1NJWkUpO1xuYXJjaC9tNjhrL21tL21jZm1tdS5jLTUwLVxuLS1cbmFyY2gvbTY4ay9tbS9zdW4zbW11LmM9MzY9dm9pZCBfX2luaXQgcGFnaW5nX2luaXQodm9pZClcbi0tXG5hcmNoL202OGsvbW0vc3VuM21tdS5jLTUzLVxuYXJjaC9tNjhrL21tL3N1bjNtbXUuYzo1NDpcdG5leHRfcGd0YWJsZSA9ICh1bnNpZ25lZCBsb25nKW1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemUsIFBBR0VfU0laRSk7XG5hcmNoL202OGsvbW0vc3VuM21tdS5jLTU1LVx0Ym9vdG1lbV9lbmQgPSAobmV4dF9wZ3RhYmxlICYjNDM7IHNpemUgJiM0MzsgUEFHRV9TSVpFKSBcdTAwMjYgUEFHRV9NQVNLO1xuLS1cbmFyY2gvbTY4ay9zdW4zL3N1bjNkdm1hLmM9MjM1PXZvaWQgX19pbml0IGR2bWFfaW5pdCh2b2lkKVxuLS1cbmFyY2gvbTY4ay9zdW4zL3N1bjNkdm1hLmMtMjU0LVxuYXJjaC9tNjhrL3N1bjMvc3VuM2R2bWEuYzoyNTU6XHRpb21tdV91c2UgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhJT01NVV9UT1RBTF9FTlRSSUVTICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLFxuYXJjaC9tNjhrL3N1bjMvc3VuM2R2bWEuYy0yNTYtXHRcdFx0XHQgICBTTVBfQ0FDSEVfQllURVMpO1xuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYz02ODM9c3RhdGljIHZvaWQgX19pbml0IHJlc291cmNlX2luaXQodm9pZClcbi0tXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNzAwLVxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jOjcwMTpcdFx0cmVzID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSksIFNNUF9DQUNIRV9CWVRFUyk7XG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNzAyLVxuLS1cbmFyY2gvbWlwcy9tbS9pbml0LmM9NTk9dm9pZCBfX2luaXQgYXJjaF9zZXR1cF96ZXJvX3BhZ2VzKHZvaWQpXG4tLVxuYXJjaC9taXBzL21tL2luaXQuYy02Ny1cbmFyY2gvbWlwcy9tbS9pbml0LmM6Njg6XHRlbXB0eV96ZXJvX3BhZ2UgPSAodW5zaWduZWQgbG9uZyltZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyLCBQQUdFX1NJWkUpO1xuYXJjaC9taXBzL21tL2luaXQuYy02OS1cbi0tXG5hcmNoL29wZW5yaXNjL21tL2lvcmVtYXAuYz0zND1wdGVfdCBfX3JlZiAqcHRlX2FsbG9jX29uZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxuYXJjaC9vcGVucmlzYy9tbS9pb3JlbWFwLmMtNDAtXHR9IGVsc2Uge1xuYXJjaC9vcGVucmlzYy9tbS9pb3JlbWFwLmM6NDE6XHRcdHB0ZSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBBR0VfU0laRSwgUEFHRV9TSVpFKTtcbmFyY2gvb3BlbnJpc2MvbW0vaW9yZW1hcC5jLTQyLVx0fVxuLS1cbmFyY2gvcGFyaXNjL21tL2luaXQuYz0zNDM9c3RhdGljIHZvaWQgX19yZWYgbWFwX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfdmFkZHIsXG4tLVxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTM3OS1cdFx0aWYgKHB1ZF9ub25lKCpwdWQpKSB7XG5hcmNoL3BhcmlzYy9tbS9pbml0LmM6MzgwOlx0XHRcdHBtZCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBBR0VfU0laRSBcdTAwM2NcdTAwM2MgUE1EX1RBQkxFX09SREVSLFxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTM4MS1cdFx0XHRcdFx0ICAgICBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIFBNRF9UQUJMRV9PUkRFUik7XG4tLVxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTM4OC1cdFx0XHRpZiAocG1kX25vbmUoKnBtZCkpIHtcbmFyY2gvcGFyaXNjL21tL2luaXQuYzozODk6XHRcdFx0XHRwZ190YWJsZSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBBR0VfU0laRSwgUEFHRV9TSVpFKTtcbmFyY2gvcGFyaXNjL21tL2luaXQuYy0zOTAtXHRcdFx0XHRwbWRfcG9wdWxhdGVfa2VybmVsKE5VTEwsIHBtZCwgcGdfdGFibGUpO1xuLS1cbmFyY2gvcGFyaXNjL21tL2luaXQuYz02NjE9c3RhdGljIHZvaWQgX19pbml0IGZpeG1hcF9pbml0KHZvaWQpXG4tLVxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTY3My1cdGlmIChwdWRfbm9uZSgqcHVkKSkge1xuYXJjaC9wYXJpc2MvbW0vaW5pdC5jOjY3NDpcdFx0cG1kID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBQTURfVEFCTEVfT1JERVIsXG5hcmNoL3BhcmlzYy9tbS9pbml0LmMtNjc1LVx0XHRcdFx0ICAgICBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIFBNRF9UQUJMRV9PUkRFUik7XG4tLVxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTY4MS1cdGRvIHtcbmFyY2gvcGFyaXNjL21tL2luaXQuYzo2ODI6XHRcdHB0ZV90ICpwdGUgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQQUdFX1NJWkUsIFBBR0VfU0laRSk7XG5hcmNoL3BhcmlzYy9tbS9pbml0LmMtNjgzLVxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvZHRfY3B1X2Z0cnMuYz0xMDc4PXN0YXRpYyBpbnQgX19pbml0IGR0X2NwdV9mdHJzX3NjYW5fY2FsbGJhY2sodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9kdF9jcHVfZnRycy5jLTEwOTktXHRkdF9jcHVfZmVhdHVyZXMgPVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9kdF9jcHVfZnRycy5jOjExMDA6XHRcdG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9kdF9jcHVfZnRycy5jLTExMDEtXHRcdFx0c2l6ZW9mKHN0cnVjdCBkdF9jcHVfZmVhdHVyZSkgKiBucl9kdF9jcHVfZmVhdHVyZXMsXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfMzIuYz0yMTE9cGNpX2NyZWF0ZV9PRl9idXNfbWFwKHZvaWQpXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfMzIuYy0yMTUtXG5hcmNoL3Bvd2VycGMva2VybmVsL3BjaV8zMi5jOjIxNjpcdG9mX3Byb3AgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2Yoc3RydWN0IHByb3BlcnR5KSAmIzQzOyAyNTYsXG5hcmNoL3Bvd2VycGMva2VybmVsL3BjaV8zMi5jLTIxNy1cdFx0XHRcdCBTTVBfQ0FDSEVfQllURVMpO1xuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmM9NDUxPXZvaWQgX19pbml0IHNtcF9zZXR1cF9jcHVfbWFwcyh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMtNDU4LVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYzo0NTk6XHRjcHVfdG9fcGh5c19pZCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKG5yX2NwdV9pZHMgKiBzaXplb2YodTMyKSxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMtNDYwLVx0XHRcdFx0XHRfX2FsaWdub2ZfXyh1MzIpKTtcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmM9MTQxPXN0YXRpYyB2b2lkICpfX2luaXQgYWxsb2Nfc3RhY2sodm9pZClcbmFyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYy0xNDIte1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF8zMi5jOjE0MzpcdHJldHVybiBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhUSFJFQURfU0laRSwgVEhSRUFEX0FMSUdOKTtcbmFyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYy0xNDQtfVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3MzMi9tbXUuYz0zNDY9dm9pZCBfX2luaXQgTU1VX2luaXRfaHcodm9pZClcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzMzIvbW11LmMtMzc3LVx0aWYgKCBwcGNfbWQucHJvZ3Jlc3MgKSBwcGNfbWQucHJvZ3Jlc3MoXCYjMzQ7aGFzaDpmaW5kIHBpZWNlXCYjMzQ7LCAweDMyMik7XG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzMzIvbW11LmM6Mzc4Olx0SGFzaCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKEhhc2hfc2l6ZSwgSGFzaF9zaXplKTtcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3MzMi9tbXUuYy0zNzktXHRfU0RSMSA9IF9fcGEoSGFzaCkgfCBTRFIxX0xPV19CSVRTO1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9wZ3RhYmxlLmM9MzA0PXZvaWQgX19pbml0IG1tdV9wYXJ0aXRpb25fdGFibGVfaW5pdCh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9wZ3RhYmxlLmMtMzA5LVx0LyogSW5pdGlhbGl6ZSB0aGUgUGFydGl0aW9uIFRhYmxlIHdpdGggbm8gZW50cmllcyAqL1xuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3BndGFibGUuYzozMTA6XHRwYXJ0aXRpb25fdGIgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhwYXRiX3NpemUsIHBhdGJfc2l6ZSk7XG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcGd0YWJsZS5jLTMxMS1cdHB0Y3IgPSBfX3BhKHBhcnRpdGlvbl90YikgfCAoUEFUQl9TSVpFX1NISUZUIC0gMTIpO1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jPTMyPXN0YXRpYyBpbnQgX19pbml0IGthc2FuX21hcF9rZXJuZWxfcGFnZSh1bnNpZ25lZCBsb25nIGVhLCB1bnNpZ25lZCBsb25nIHBhLCBwZ3Byb3RfdCBwcm90KVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jLTQyLVx0aWYgKGthc2FuX3B1ZF90YWJsZSgqcDRkcCkpIHtcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jOjQzOlx0XHRwdWRwID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUFVEX1RBQkxFX1NJWkUsIFBVRF9UQUJMRV9TSVpFKTtcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jLTQ0LVx0XHRtZW1jcHkocHVkcCwga2FzYW5fZWFybHlfc2hhZG93X3B1ZCwgUFVEX1RBQkxFX1NJWkUpO1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jLTQ4LVx0aWYgKGthc2FuX3BtZF90YWJsZSgqcHVkcCkpIHtcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jOjQ5Olx0XHRwbWRwID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUE1EX1RBQkxFX1NJWkUsIFBNRF9UQUJMRV9TSVpFKTtcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jLTUwLVx0XHRtZW1jcHkocG1kcCwga2FzYW5fZWFybHlfc2hhZG93X3BtZCwgUE1EX1RBQkxFX1NJWkUpO1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jLTU0LVx0aWYgKGthc2FuX3B0ZV90YWJsZSgqcG1kcCkpIHtcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jOjU1Olx0XHRwdGVwID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUFRFX1RBQkxFX1NJWkUsIFBURV9UQUJMRV9TSVpFKTtcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jLTU2LVx0XHRtZW1jcHkocHRlcCwga2FzYW5fZWFybHlfc2hhZG93X3B0ZSwgUFRFX1RBQkxFX1NJWkUpO1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jPTY2PXN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9pbml0X3BoeXNfcmVnaW9uKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpXG4tLVxuYXJjaC9wb3dlcnBjL21tL2thc2FuL2luaXRfYm9vazNlXzY0LmMtNzYtXG5hcmNoL3Bvd2VycGMvbW0va2FzYW4vaW5pdF9ib29rM2VfNjQuYzo3NzpcdHZhID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoa19lbmQgLSBrX3N0YXJ0LCBQQUdFX1NJWkUpO1xuYXJjaC9wb3dlcnBjL21tL2thc2FuL2luaXRfYm9vazNlXzY0LmMtNzgtXHRmb3IgKGtfY3VyID0ga19zdGFydDsga19jdXIgXHUwMDNjIGtfZW5kOyBrX2N1ciAmIzQzOz0gUEFHRV9TSVpFLCB2YSAmIzQzOz0gUEFHRV9TSVpFKVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szc182NC5jPTIyPXN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9pbml0X3BoeXNfcmVnaW9uKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpXG4tLVxuYXJjaC9wb3dlcnBjL21tL2thc2FuL2luaXRfYm9vazNzXzY0LmMtMzItXG5hcmNoL3Bvd2VycGMvbW0va2FzYW4vaW5pdF9ib29rM3NfNjQuYzozMzpcdHZhID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoa19lbmQgLSBrX3N0YXJ0LCBQQUdFX1NJWkUpO1xuYXJjaC9wb3dlcnBjL21tL2thc2FuL2luaXRfYm9vazNzXzY0LmMtMzQtXHRmb3IgKGtfY3VyID0ga19zdGFydDsga19jdXIgXHUwMDNjIGtfZW5kOyBrX2N1ciAmIzQzOz0gUEFHRV9TSVpFLCB2YSAmIzQzOz0gUEFHRV9TSVpFKVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvbW11X2NvbnRleHQuYz0zNjk9dm9pZCBfX2luaXQgbW11X2NvbnRleHRfaW5pdCh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvbW11X2NvbnRleHQuYy0zNzktXHQgKi9cbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvbW11X2NvbnRleHQuYzozODA6XHRjb250ZXh0X21hcCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKENUWF9NQVBfU0laRSwgU01QX0NBQ0hFX0JZVEVTKTtcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvbW11X2NvbnRleHQuYzozODE6XHRjb250ZXh0X21tID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZW9mKHZvaWQgKikgKiAoTEFTVF9DT05URVhUICYjNDM7IDEpLFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC9tbXVfY29udGV4dC5jLTM4Mi1cdFx0XHRcdCAgICBTTVBfQ0FDSEVfQllURVMpO1xuYXJjaC9wb3dlcnBjL21tL25vaGFzaC9tbXVfY29udGV4dC5jLTM4My1cdGlmIChJU19FTkFCTEVEKENPTkZJR19TTVApKSB7XG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL21tdV9jb250ZXh0LmM6Mzg0Olx0XHRzdGFsZV9tYXBbYm9vdF9jcHVpZF0gPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhDVFhfTUFQX1NJWkUsIFNNUF9DQUNIRV9CWVRFUyk7XG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL21tdV9jb250ZXh0LmMtMzg1LVx0XHRjcHVocF9zZXR1cF9zdGF0ZV9ub2NhbGxzKENQVUhQX1BPV0VSUENfTU1VX0NUWF9QUkVQQVJFLFxuLS1cbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmM9NTE9dm9pZCBfX2luaXQgKmVhcmx5X2FsbG9jX3BndGFibGUodW5zaWduZWQgbG9uZyBzaXplKVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYy01Mi17XG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jOjUzOlx0cmV0dXJuIG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemUsIHNpemUpO1xuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYy01NC1cbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL252cmFtLmM9NTA4PXN0YXRpYyBpbnQgX19pbml0IGNvcmU5OV9udnJhbV9zZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9udnJhbS5jLTUxNi1cdH1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbnZyYW0uYzo1MTc6XHRudnJhbV9pbWFnZSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKE5WUkFNX1NJWkUsIFNNUF9DQUNIRV9CWVRFUyk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL252cmFtLmMtNTE4LVx0bnZyYW1fZGF0YSA9IGlvcmVtYXAoYWRkciwgTlZSQU1fU0laRSoyKTtcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC5jPTE0Nz1pbnQgX19pbml0IGVhcmx5X2luaXRfZHRfc2Nhbl9yZWNvdmVyYWJsZV9yYW5nZXModW5zaWduZWQgbG9uZyBub2RlLFxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLmMtMTgyLVx0ICovXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC5jOjE4MzpcdG1jX3JlY292ZXJhYmxlX3JhbmdlID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZSwgX19hbGlnbm9mX18odTY0KSk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC5jLTE4NC1cbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zZXR1cC5jPTExND1zdGF0aWMgdm9pZCBfX2luaXQgcHJlYWxsb2Moc3RydWN0IHBzM19wcmVhbGxvYyAqcClcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zZXR1cC5jLTExOC1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3NldHVwLmM6MTE5Olx0cC1cdTAwM2VhZGRyZXNzID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMocC1cdTAwM2VzaXplLCBwLVx1MDAzZWFsaWduKTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3NldHVwLmMtMTIwLVxuLS1cbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXNpX2JpdG1hcC5jPTExMj1pbnQgX19yZWYgbXNpX2JpdG1hcF9hbGxvYyhzdHJ1Y3QgbXNpX2JpdG1hcCAqYm1wLCB1bnNpZ25lZCBpbnQgaXJxX2NvdW50LFxuLS1cbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXNpX2JpdG1hcC5jLTEyNi1cdGVsc2Uge1xuYXJjaC9wb3dlcnBjL3N5c2Rldi9tc2lfYml0bWFwLmM6MTI3Olx0XHRibXAtXHUwMDNlYml0bWFwID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZSwgU01QX0NBQ0hFX0JZVEVTKTtcbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXNpX2JpdG1hcC5jLTEyOC1cdFx0LyogdGhlIGJpdG1hcCB3b24mIzM5O3QgYmUgZnJlZWQgZnJvbSBtZW1ibG9jayBhbGxvY2F0b3IgKi9cbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9zZXR1cC5jPTEzNT1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9yZXNvdXJjZXModm9pZClcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9zZXR1cC5jLTE0OC1cdG1lbV9yZXNfc3ogPSBudW1fcmVzb3VyY2VzICogc2l6ZW9mKCptZW1fcmVzKTtcbmFyY2gvcmlzY3Yva2VybmVsL3NldHVwLmM6MTQ5Olx0bWVtX3JlcyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKG1lbV9yZXNfc3osIFNNUF9DQUNIRV9CWVRFUyk7XG5hcmNoL3Jpc2N2L2tlcm5lbC9zZXR1cC5jLTE1MC1cbi0tXG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYz0yOT1zdGF0aWMgdm9pZCBfX2luaXQga2FzYW5fcG9wdWxhdGVfcHRlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jLTM0LVx0aWYgKHBtZF9ub25lKHBtZHBfZ2V0KHBtZCkpKSB7XG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYzozNTpcdFx0cCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBUUlNfUEVSX1BURSAqIHNpemVvZihwdGVfdCksIFBBR0VfU0laRSk7XG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYy0zNi1cdFx0c2V0X3BtZChwbWQsIHBmbl9wbWQoUEZOX0RPV04oX19wYShwKSksIFBBR0VfVEFCTEUpKTtcbi0tXG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYz01MD1zdGF0aWMgdm9pZCBfX2luaXQga2FzYW5fcG9wdWxhdGVfcG1kKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jLTU2LVx0aWYgKHB1ZF9ub25lKHB1ZHBfZ2V0KHB1ZCkpKSB7XG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYzo1NzpcdFx0cCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBUUlNfUEVSX1BNRCAqIHNpemVvZihwbWRfdCksIFBBR0VfU0laRSk7XG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYy01OC1cdFx0c2V0X3B1ZChwdWQsIHBmbl9wdWQoUEZOX0RPV04oX19wYShwKSksIFBBR0VfVEFCTEUpKTtcbi0tXG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYz04MD1zdGF0aWMgdm9pZCBfX2luaXQga2FzYW5fcG9wdWxhdGVfcHVkKHA0ZF90ICpwNGQsXG4tLVxuYXJjaC9yaXNjdi9tbS9rYXNhbl9pbml0LmMtODctXHRpZiAocDRkX25vbmUocDRkcF9nZXQocDRkKSkpIHtcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jOjg4Olx0XHRwID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUFRSU19QRVJfUFVEICogc2l6ZW9mKHB1ZF90KSwgUEFHRV9TSVpFKTtcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jLTg5LVx0XHRzZXRfcDRkKHA0ZCwgcGZuX3A0ZChQRk5fRE9XTihfX3BhKHApKSwgUEFHRV9UQUJMRSkpO1xuLS1cbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jPTExMT1zdGF0aWMgdm9pZCBfX2luaXQga2FzYW5fcG9wdWxhdGVfcDRkKHBnZF90ICpwZ2QsXG4tLVxuYXJjaC9yaXNjdi9tbS9rYXNhbl9pbml0LmMtMTE4LVx0aWYgKHBnZF9ub25lKHBnZHBfZ2V0KHBnZCkpKSB7XG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYzoxMTk6XHRcdHAgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQVFJTX1BFUl9QNEQgKiBzaXplb2YocDRkX3QpLCBQQUdFX1NJWkUpO1xuYXJjaC9yaXNjdi9tbS9rYXNhbl9pbml0LmMtMTIwLVx0XHRzZXRfcGdkKHBnZCwgcGZuX3BnZChQRk5fRE9XTihfX3BhKHApKSwgUEFHRV9UQUJMRSkpO1xuLS1cbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jPTM3Nz1zdGF0aWMgdm9pZCBfX2luaXQga2FzYW5fc2hhbGxvd19wb3B1bGF0ZV9wdWQocDRkX3QgKnA0ZCxcbi0tXG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYy0zODctXHRcdGlmIChwdWRfbm9uZShwdWRwX2dldChwdWRfaykpKSB7XG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYzozODg6XHRcdFx0cCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBBR0VfU0laRSwgUEFHRV9TSVpFKTtcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jLTM4OS1cdFx0XHRzZXRfcHVkKHB1ZF9rLCBwZm5fcHVkKFBGTl9ET1dOKF9fcGEocCkpLCBQQUdFX1RBQkxFKSk7XG4tLVxuYXJjaC9yaXNjdi9tbS9rYXNhbl9pbml0LmM9Mzk3PXN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9zaGFsbG93X3BvcHVsYXRlX3A0ZChwZ2RfdCAqcGdkLFxuLS1cbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jLTQwNy1cdFx0aWYgKHA0ZF9ub25lKHA0ZHBfZ2V0KHA0ZF9rKSkpIHtcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jOjQwODpcdFx0XHRwID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUEFHRV9TSVpFLCBQQUdFX1NJWkUpO1xuYXJjaC9yaXNjdi9tbS9rYXNhbl9pbml0LmMtNDA5LVx0XHRcdHNldF9wNGQocDRkX2ssIHBmbl9wNGQoUEZOX0RPV04oX19wYShwKSksIFBBR0VfVEFCTEUpKTtcbi0tXG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYz00MTc9c3RhdGljIHZvaWQgX19pbml0IGthc2FuX3NoYWxsb3dfcG9wdWxhdGVfcGdkKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jLTQyNi1cdFx0aWYgKHBnZF9ub25lKHBnZHBfZ2V0KHBnZF9rKSkpIHtcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jOjQyNzpcdFx0XHRwID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUEFHRV9TSVpFLCBQQUdFX1NJWkUpO1xuYXJjaC9yaXNjdi9tbS9rYXNhbl9pbml0LmMtNDI4LVx0XHRcdHNldF9wZ2QocGdkX2ssIHBmbl9wZ2QoUEZOX0RPV04oX19wYShwKSksIFBBR0VfVEFCTEUpKTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL2NyYXNoX2R1bXAuYz02Mz1zdHJ1Y3Qgc2F2ZV9hcmVhICogX19pbml0IHNhdmVfYXJlYV9hbGxvYyhib29sIGlzX2Jvb3RfY3B1KVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvY3Jhc2hfZHVtcC5jLTY2LVxuYXJjaC9zMzkwL2tlcm5lbC9jcmFzaF9kdW1wLmM6Njc6XHRzYSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZigqc2EpLCA4KTtcbmFyY2gvczM5MC9rZXJuZWwvY3Jhc2hfZHVtcC5jLTY4LVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvbnVtYS5jPTE3PXZvaWQgX19pbml0IG51bWFfc2V0dXAodm9pZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL251bWEuYy0yNC1cdGZvciAobmlkID0gMDsgbmlkIFx1MDAzYyBNQVhfTlVNTk9ERVM7IG5pZCYjNDM7JiM0MzspXG5hcmNoL3MzOTAva2VybmVsL251bWEuYzoyNTpcdFx0Tk9ERV9EQVRBKG5pZCkgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YocGdfZGF0YV90KSwgOCk7XG5hcmNoL3MzOTAva2VybmVsL251bWEuYy0yNi1cdE5PREVfREFUQSgwKS1cdTAwM2Vub2RlX3NwYW5uZWRfcGFnZXMgPSBtZW1ibG9ja19lbmRfb2ZfRFJBTSgpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYz0zNzg9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHN0YWNrX2FsbG9jX2Vhcmx5KHZvaWQpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTM4MS1cbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYzozODI6XHRzdGFjayA9ICh1bnNpZ25lZCBsb25nKW1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFRIUkVBRF9TSVpFLCBUSFJFQURfU0laRSk7XG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtMzgzLVx0cmV0dXJuIHN0YWNrO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYz00OTA9c3RhdGljIHZvaWQgX19pbml0IHNldHVwX3Jlc291cmNlcyh2b2lkKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy01MDQtXHRmb3JfZWFjaF9tZW1fcmFuZ2UoaSwgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCkge1xuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jOjUwNTpcdFx0cmVzID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZW9mKCpyZXMpLCA4KTtcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy01MDYtXHRcdHJlcy1cdTAwM2VmbGFncyA9IElPUkVTT1VSQ0VfQlVTWSB8IElPUkVTT1VSQ0VfU1lTVEVNX1JBTTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtNTIzLVx0XHRcdGlmIChzdGRfcmVzLVx1MDAzZWVuZCBcdTAwM2UgcmVzLVx1MDAzZWVuZCkge1xuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jOjUyNDpcdFx0XHRcdHN1Yl9yZXMgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YoKnN1Yl9yZXMpLCA4KTtcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy01MjUtXHRcdFx0XHQqc3ViX3JlcyA9ICpzdGRfcmVzO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYz04MTI9c3RhdGljIHZvaWQgX19pbml0IHNldHVwX3JhbmRvbW5lc3Modm9pZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtODE1LVxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jOjgxNjpcdHZtbXMgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQQUdFX1NJWkUsIFBBR0VfU0laRSk7XG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtODE3LVx0aWYgKHN0c2kodm1tcywgMywgMiwgMikgPT0gMCBcdTAwMjZcdTAwMjYgdm1tcy1cdTAwM2Vjb3VudClcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NtcC5jPTU5OD12b2lkIF9faW5pdCBzbXBfc2F2ZV9kdW1wX2lwbF9jcHUodm9pZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NtcC5jLTYwNS1cdHNhID0gc2F2ZV9hcmVhX2FsbG9jKHRydWUpO1xuYXJjaC9zMzkwL2tlcm5lbC9zbXAuYzo2MDY6XHRyZWdzID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoNTEyLCA4KTtcbmFyY2gvczM5MC9rZXJuZWwvc21wLmMtNjA3LVx0Y29weV9vbGRtZW1fa2VybmVsKHJlZ3MsIF9fTENfRlBSRUdTX1NBVkVfQVJFQSwgNTEyKTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NtcC5jPTc3Nz12b2lkIF9faW5pdCBzbXBfZGV0ZWN0X2NwdXModm9pZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NtcC5jLTc4My1cdC8qIEdldCBDUFUgaW5mb3JtYXRpb24gKi9cbmFyY2gvczM5MC9rZXJuZWwvc21wLmM6Nzg0Olx0aW5mbyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZigqaW5mbyksIDgpO1xuYXJjaC9zMzkwL2tlcm5lbC9zbXAuYy03ODUtXHRzbXBfZ2V0X2NvcmVfaW5mbyhpbmZvLCAxKTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL3RvcG9sb2d5LmM9NTM5PXN0YXRpYyB2b2lkIF9faW5pdCBhbGxvY19tYXNrcyhzdHJ1Y3Qgc3lzaW5mb18xNV8xX3ggKmluZm8sXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC90b3BvbG9neS5jLTU0OC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX21hc2tzOyBpJiM0MzsmIzQzOykge1xuYXJjaC9zMzkwL2tlcm5lbC90b3BvbG9neS5jOjU0OTpcdFx0bWFzay1cdTAwM2VuZXh0ID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZW9mKCptYXNrLVx1MDAzZW5leHQpLCA4KTtcbmFyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYy01NTAtXHRcdG1hc2sgPSBtYXNrLVx1MDAzZW5leHQ7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC90b3BvbG9neS5jPTU2ND12b2lkIF9faW5pdCB0b3BvbG9neV9pbml0X2Vhcmx5KHZvaWQpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC90b3BvbG9neS5jLTU3Ni1cdFx0Z290byBvdXQ7XG5hcmNoL3MzOTAva2VybmVsL3RvcG9sb2d5LmM6NTc3Olx0dGxfaW5mbyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBBR0VfU0laRSwgUEFHRV9TSVpFKTtcbmFyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYy01NzgtXHRpbmZvID0gdGxfaW5mbztcbi0tXG5hcmNoL3MzOTAvbW0vaW5pdC5jPTcyPXZvaWQgX19pbml0IGFyY2hfc2V0dXBfemVyb19wYWdlcyh2b2lkKVxuLS1cbmFyY2gvczM5MC9tbS9pbml0LmMtODMtXG5hcmNoL3MzOTAvbW0vaW5pdC5jOjg0Olx0ZW1wdHlfemVyb19wYWdlID0gKHVuc2lnbmVkIGxvbmcpbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBvcmRlciwgUEFHRV9TSVpFKTtcbmFyY2gvczM5MC9tbS9pbml0LmMtODUtXG4tLVxuYXJjaC9zaC9tbS9pbml0LmM9MTI5PXN0YXRpYyBwbWRfdCAqIF9faW5pdCBvbmVfbWRfdGFibGVfaW5pdChwdWRfdCAqcHVkKVxuLS1cbmFyY2gvc2gvbW0vaW5pdC5jLTEzMy1cbmFyY2gvc2gvbW0vaW5pdC5jOjEzNDpcdFx0cG1kID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUEFHRV9TSVpFLCBQQUdFX1NJWkUpO1xuYXJjaC9zaC9tbS9pbml0LmMtMTM1LVx0XHRwdWRfcG9wdWxhdGUoXHUwMDI2aW5pdF9tbSwgcHVkLCBwbWQpO1xuLS1cbmFyY2gvc2gvbW0vaW5pdC5jPTE0Mj1zdGF0aWMgcHRlX3QgKiBfX2luaXQgb25lX3BhZ2VfdGFibGVfaW5pdChwbWRfdCAqcG1kKVxuLS1cbmFyY2gvc2gvbW0vaW5pdC5jLTE0Ni1cbmFyY2gvc2gvbW0vaW5pdC5jOjE0NzpcdFx0cHRlID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUEFHRV9TSVpFLCBQQUdFX1NJWkUpO1xuYXJjaC9zaC9tbS9pbml0LmMtMTQ4LVx0XHRwbWRfcG9wdWxhdGVfa2VybmVsKFx1MDAyNmluaXRfbW0sIHBtZCwgcHRlKTtcbi0tXG5hcmNoL3NwYXJjL2tlcm5lbC9wcm9tXzMyLmM9Mjc9dm9pZCAqIF9faW5pdCBwcm9tX2Vhcmx5X2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbi0tXG5hcmNoL3NwYXJjL2tlcm5lbC9wcm9tXzMyLmMtMzAtXG5hcmNoL3NwYXJjL2tlcm5lbC9wcm9tXzMyLmM6MzE6XHRyZXQgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplLCBTTVBfQ0FDSEVfQllURVMpO1xuYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV8zMi5jLTMyLVxuLS1cbmFyY2gvc3BhcmMvbW0vc3JtbXUuYz0yNjY9c3RhdGljIHZvaWQgX19pbml0IHNybW11X25vY2FjaGVfaW5pdCh2b2lkKVxuLS1cbmFyY2gvc3BhcmMvbW0vc3JtbXUuYy0yNzktXG5hcmNoL3NwYXJjL21tL3NybW11LmM6MjgwOlx0c3JtbXVfbm9jYWNoZV9wb29sID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc3JtbXVfbm9jYWNoZV9zaXplLFxuYXJjaC9zcGFyYy9tbS9zcm1tdS5jLTI4MS1cdFx0XHRcdFx0ICAgIFNSTU1VX05PQ0FDSEVfQUxJR05fTUFYKTtcbi0tXG5hcmNoL3NwYXJjL21tL3NybW11LmMtMjg0LVx0c3JtbXVfbm9jYWNoZV9iaXRtYXAgPVxuYXJjaC9zcGFyYy9tbS9zcm1tdS5jOjI4NTpcdFx0bWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoQklUU19UT19MT05HUyhiaXRtYXBfYml0cykgKiBzaXplb2YobG9uZyksXG5hcmNoL3NwYXJjL21tL3NybW11LmMtMjg2LVx0XHRcdCAgICAgICBTTVBfQ0FDSEVfQllURVMpO1xuLS1cbmFyY2gvc3BhcmMvbW0vc3JtbXUuYz00NDM9c3RhdGljIHZvaWQgX19pbml0IHNwYXJjX2NvbnRleHRfaW5pdChpbnQgbnVtY3R4KVxuLS1cbmFyY2gvc3BhcmMvbW0vc3JtbXUuYy00NDgtXHRzaXplID0gbnVtY3R4ICogc2l6ZW9mKHN0cnVjdCBjdHhfbGlzdCk7XG5hcmNoL3NwYXJjL21tL3NybW11LmM6NDQ5Olx0Y3R4X2xpc3RfcG9vbCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemUsIFNNUF9DQUNIRV9CWVRFUyk7XG5hcmNoL3NwYXJjL21tL3NybW11LmMtNDUwLVxuLS1cbmFyY2gvdW0vZHJpdmVycy92ZWN0b3Jfa2Vybi5jPTE2OTc9c3RhdGljIGludCBfX2luaXQgdmVjdG9yX3NldHVwKGNoYXIgKnN0cilcbi0tXG5hcmNoL3VtL2RyaXZlcnMvdmVjdG9yX2tlcm4uYy0xNzA3LVx0fVxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmM6MTcwODpcdG5ldyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZigqbmV3KSwgU01QX0NBQ0hFX0JZVEVTKTtcbmFyY2gvdW0vZHJpdmVycy92ZWN0b3Jfa2Vybi5jLTE3MDktXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuZXctXHUwMDNlbGlzdCk7XG4tLVxuYXJjaC91bS9rZXJuZWwvbG9hZF9maWxlLmM9MzI9dm9pZCAqdW1sX2xvYWRfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSwgdW5zaWduZWQgbG9uZyBsb25nICpzaXplKVxuLS1cbmFyY2gvdW0va2VybmVsL2xvYWRfZmlsZS5jLTUwLVxuYXJjaC91bS9rZXJuZWwvbG9hZF9maWxlLmM6NTE6XHRhcmVhID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoKnNpemUsIFNNUF9DQUNIRV9CWVRFUyk7XG5hcmNoL3VtL2tlcm5lbC9sb2FkX2ZpbGUuYy01Mi1cbi0tXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmM9MTE4Nj1zdGF0aWMgdm9pZCBfX2luaXQgYWxsb2NfcnVudGltZV9kYXRhKGludCBjcHUpXG4tLVxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jLTExOTktXHRcdC8qIEFsbG9jYXRlIHRoZSBTVlNNIENBIHBhZ2UgaWYgYW4gU1ZTTSBpcyBwcmVzZW50ICovXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmM6MTIwMDpcdFx0Y2FhID0gY3B1ID8gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZW9mKCpjYWEpLCBQQUdFX1NJWkUpXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMtMTIwMS1cdFx0XHQgIDogXHUwMDI2Ym9vdF9zdnNtX2NhX3BhZ2U7XG4tLVxuYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jPTg5Nz1zdGF0aWMgaW50IF9faW5pdCBhY3BpX3BhcnNlX2hwZXQoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSlcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMtOTQxLSNkZWZpbmUgSFBFVF9SRVNPVVJDRV9OQU1FX1NJWkUgOVxuYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jOjk0MjpcdGhwZXRfcmVzID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZW9mKCpocGV0X3JlcykgJiM0MzsgSFBFVF9SRVNPVVJDRV9OQU1FX1NJWkUsXG5hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMtOTQzLVx0XHRcdFx0ICBTTVBfQ0FDSEVfQllURVMpO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYz0yNTAwPXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKiBfX2luaXQgaW9hcGljX3NldHVwX3Jlc291cmNlcyh2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYy0yNTEyLVxuYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jOjI1MTM6XHRtZW0gPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhuLCBTTVBfQ0FDSEVfQllURVMpO1xuYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jLTI1MTQtXHRyZXMgPSAodm9pZCAqKW1lbTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmM9MjU0OT12b2lkIF9faW5pdCBpb19hcGljX2luaXRfbWFwcGluZ3Modm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMtMjU3MS0jZW5kaWZcbmFyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYzoyNTcyOlx0XHRcdGlvYXBpY19waHlzID0gKHVuc2lnbmVkIGxvbmcpbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUEFHRV9TSVpFLFxuYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jLTI1NzMtXHRcdFx0XHRcdFx0XHRcdCAgICBQQUdFX1NJWkUpO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9lODIwLmM9MTExMz1fX2luaXQgdm9pZCBlODIwX19yZXNlcnZlX3Jlc291cmNlcyh2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9lODIwLmMtMTExOC1cbmFyY2gveDg2L2tlcm5lbC9lODIwLmM6MTExOTpcdHJlcyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZigqcmVzKSAqIGU4MjBfdGFibGUtXHUwMDNlbnJfZW50cmllcyxcbmFyY2gveDg2L2tlcm5lbC9lODIwLmMtMTEyMC1cdFx0XHQgICAgIFNNUF9DQUNIRV9CWVRFUyk7XG4tLVxuYXJjaC94ODYvcGxhdGZvcm0vb2xwYy9vbHBjX2R0LmM9MTI0PXZvaWQgKiBfX2luaXQgcHJvbV9lYXJseV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpXG4tLVxuYXJjaC94ODYvcGxhdGZvcm0vb2xwYy9vbHBjX2R0LmMtMTM4LVx0XHQgKi9cbmFyY2gveDg2L3BsYXRmb3JtL29scGMvb2xwY19kdC5jOjEzOTpcdFx0cmVzID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoY2h1bmtfc2l6ZSwgU01QX0NBQ0hFX0JZVEVTKTtcbmFyY2gveDg2L3BsYXRmb3JtL29scGMvb2xwY19kdC5jLTE0MC1cdFx0cHJvbV9lYXJseV9hbGxvY2F0ZWQgJiM0Mzs9IGNodW5rX3NpemU7XG4tLVxuYXJjaC94ODYveGVuL3AybS5jPTE3OD1zdGF0aWMgdm9pZCAqIF9fcmVmIGFsbG9jX3AybV9wYWdlKHZvaWQpXG4tLVxuYXJjaC94ODYveGVuL3AybS5jLTE4MC1cdGlmICh1bmxpa2VseSghc2xhYl9pc19hdmFpbGFibGUoKSkpIHtcbmFyY2gveDg2L3hlbi9wMm0uYzoxODE6XHRcdHJldHVybiBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQQUdFX1NJWkUsIFBBR0VfU0laRSk7XG5hcmNoL3g4Ni94ZW4vcDJtLmMtMTgyLVx0fVxuLS1cbmFyY2gveHRlbnNhL21tL2thc2FuX2luaXQuYz0zNT1zdGF0aWMgdm9pZCBfX2luaXQgcG9wdWxhdGUodm9pZCAqc3RhcnQsIHZvaWQgKmVuZClcbi0tXG5hcmNoL3h0ZW5zYS9tbS9rYXNhbl9pbml0LmMtNDEtXHRwbWRfdCAqcG1kID0gcG1kX29mZl9rKHZhZGRyKTtcbmFyY2gveHRlbnNhL21tL2thc2FuX2luaXQuYzo0MjpcdHB0ZV90ICpwdGUgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhuX3BhZ2VzICogc2l6ZW9mKHB0ZV90KSwgUEFHRV9TSVpFKTtcbmFyY2gveHRlbnNhL21tL2thc2FuX2luaXQuYy00My1cbi0tXG5kcml2ZXJzL2Nsay90aS9jbGsuYz00MzM9dm9pZCBfX2luaXQgb21hcDJfY2xrX2xlZ2FjeV9wcm92aWRlcl9pbml0KGludCBpbmRleCwgdm9pZCBfX2lvbWVtICptZW0pXG4tLVxuZHJpdmVycy9jbGsvdGkvY2xrLmMtNDM2LVxuZHJpdmVycy9jbGsvdGkvY2xrLmM6NDM3Olx0aW8gPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YoKmlvKSwgU01QX0NBQ0hFX0JZVEVTKTtcbmRyaXZlcnMvY2xrL3RpL2Nsay5jLTQzOC1cbi0tXG5kcml2ZXJzL21hY2ludG9zaC9zbXUuYz00NzI9aW50IF9faW5pdCBzbXVfaW5pdCAodm9pZClcbi0tXG5kcml2ZXJzL21hY2ludG9zaC9zbXUuYy00OTQtXG5kcml2ZXJzL21hY2ludG9zaC9zbXUuYzo0OTU6XHRzbXUgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2Yoc3RydWN0IHNtdV9kZXZpY2UpLCBTTVBfQ0FDSEVfQllURVMpO1xuZHJpdmVycy9tYWNpbnRvc2gvc211LmMtNDk2LVx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2c211LVx1MDAzZWxvY2spO1xuLS1cbmRyaXZlcnMvb2YvZmR0LmM9MTIwMD1zdGF0aWMgdm9pZCAqIF9faW5pdCBlYXJseV9pbml0X2R0X2FsbG9jX21lbW9yeV9hcmNoKHU2NCBzaXplLCB1NjQgYWxpZ24pXG5kcml2ZXJzL29mL2ZkdC5jLTEyMDEte1xuZHJpdmVycy9vZi9mZHQuYzoxMjAyOlx0cmV0dXJuIG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemUsIGFsaWduKTtcbmRyaXZlcnMvb2YvZmR0LmMtMTIwMy19XG4tLVxuZHJpdmVycy9vZi91bml0dGVzdC5jPTM5MDY9c3RhdGljIHZvaWQgKiBfX2luaXQgZHRfYWxsb2NfbWVtb3J5KHU2NCBzaXplLCB1NjQgYWxpZ24pXG5kcml2ZXJzL29mL3VuaXR0ZXN0LmMtMzkwNy17XG5kcml2ZXJzL29mL3VuaXR0ZXN0LmM6MzkwODpcdHJldHVybiBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplLCBhbGlnbik7XG5kcml2ZXJzL29mL3VuaXR0ZXN0LmMtMzkwOS19XG4tLVxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oPTQyND1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKm1lbWJsb2NrX2FsbG9jKHBoeXNfYWRkcl90IHNpemUsIHBoeXNfYWRkcl90IGFsaWduKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC00MjktXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg6NDMwOnZvaWQgKl9fbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMocGh5c19hZGRyX3Qgc2l6ZSwgcGh5c19hZGRyX3QgYWxpZ24sXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtNDMxLVx0XHRcdFx0Y29uc3QgY2hhciAqZnVuYyk7XG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtNDMyLVxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjQzMzojZGVmaW5lIG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemUsIGFsaWduKSAgICBcXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjQzNDpcdCBfX21lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemUsIGFsaWduLCBfX2Z1bmNfXylcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC00MzUtXG4tLVxuaW5pdC9tYWluLmM9NjA0PXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9jb21tYW5kX2xpbmUoY2hhciAqY29tbWFuZF9saW5lKVxuLS1cbmluaXQvbWFpbi5jLTYxNi1cbmluaXQvbWFpbi5jOjYxNzpcdHNhdmVkX2NvbW1hbmRfbGluZSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKGxlbiwgU01QX0NBQ0hFX0JZVEVTKTtcbmluaXQvbWFpbi5jLTYxOC1cbi0tXG5pbml0L21haW4uYy02MjAtXG5pbml0L21haW4uYzo2MjE6XHRzdGF0aWNfY29tbWFuZF9saW5lID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMobGVuLCBTTVBfQ0FDSEVfQllURVMpO1xuaW5pdC9tYWluLmMtNjIyLVxuLS1cbmluaXQvbWFpbi5jPTEyMTE9c3RhdGljIGludCBfX2luaXQgaW5pdGNhbGxfYmxhY2tsaXN0KGNoYXIgKnN0cilcbi0tXG5pbml0L21haW4uYy0xMjIwLVx0XHRcdHByX2RlYnVnKFwmIzM0O2JsYWNrbGlzdGluZyBpbml0Y2FsbCAlc1xcblwmIzM0Oywgc3RyX2VudHJ5KTtcbmluaXQvbWFpbi5jOjEyMjE6XHRcdFx0ZW50cnkgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YoKmVudHJ5KSxcbmluaXQvbWFpbi5jLTEyMjItXHRcdFx0XHRcdCAgICAgICBTTVBfQ0FDSEVfQllURVMpO1xuaW5pdC9tYWluLmM6MTIyMzpcdFx0XHRlbnRyeS1cdTAwM2VidWYgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzdHJsZW4oc3RyX2VudHJ5KSAmIzQzOyAxLFxuaW5pdC9tYWluLmMtMTIyNC1cdFx0XHRcdFx0XHQgICAgU01QX0NBQ0hFX0JZVEVTKTtcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI5MQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDExMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBBbGxvY2F0aW9uIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYG1lbWJsb2NrX2FsbG9jX29yX3BhbmljYCBtYWNybyBhbmQgaW1tZWRpYXRlbHksIG15IGJyYWluJiMzOTtzIGFscmVhZHkgcGFyc2luZyB0aGUgaW1wbGljYXRpb25zLiBJdCYjMzk7cyBkZWZpbmVkIGFzIGEgd3JhcHBlciBhcm91bmQgYF9fbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWNgLiAgVGhlIHNpZ25hdHVyZSB0ZWxscyBtZSBpdCB0YWtlcyBhIHNpemUgYW5kIGFsaWdubWVudCwgYW5kIGNydWNpYWxseSwgcGFzc2VzIHRoZSBjdXJyZW50IGZ1bmN0aW9uJiMzOTtzIG5hbWUuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBkZXRhaWxzLCBhbmQgbXkgZXhwZXJpZW5jZSBzYXlzIHRoYXQgSSBuZWVkIHRvIHRyYWNlIHRoaXMgZnVydGhlci4gVGhlIHJlYWwgd29yayBpcyBwcm9iYWJseSBkb25lIGluIGBfX21lbWJsb2NrX2FsbG9jX29yX3BhbmljYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgYWxsb2NhdGlvbiAqYWN0dWFsbHkqIGhhcHBlbnMsIGFuZCBzcGVjaWZpY2FsbHksIGlmIGl0IGluaXRpYWxpemVzIHRoZSBtZW1vcnkuIEJlY2F1c2UgSSYjMzk7bSBwcmV0dHkgc3VyZSBgX19tZW1ibG9ja19hbGxvY19vcl9wYW5pY2AgY2FsbHMgYG1lbWJsb2NrX2FsbG9jX3RyeV9uaWRgLCBhbmQgbXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB6ZXJvZXMgdGhlIG1lbW9yeS4KClNvIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBtbS9tZW1ibG9jay5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGRlZmluaXRpb24gb2YgYF9fbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWNgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZSBtZW1vcnkgaXMgaW5kZWVkIHplcm9lZCBkdXJpbmcgYWxsb2NhdGlvbiBhcyBJIHN1c3BlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1ibG9jay5oPTQyND1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKm1lbWJsb2NrX2FsbG9jKHBoeXNfYWRkcl90IHNpemUsIHBoeXNfYWRkcl90IGFsaWduKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC00MjktXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg6NDMwOnZvaWQgKl9fbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMocGh5c19hZGRyX3Qgc2l6ZSwgcGh5c19hZGRyX3QgYWxpZ24sXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtNDMxLVx0XHRcdFx0Y29uc3QgY2hhciAqZnVuYyk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTQzMy0jZGVmaW5lIG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemUsIGFsaWduKSAgICBcXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjQzNDpcdCBfX21lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemUsIGFsaWduLCBfX2Z1bmNfXylcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC00MzUtXG4tLVxubW0vbWVtYmxvY2suYz0xNzc3PXZvaWQgKiBfX2luaXQgbWVtYmxvY2tfYWxsb2NfdHJ5X25pZChcbi0tXG5tbS9tZW1ibG9jay5jLTE3OTUtLyoqXG5tbS9tZW1ibG9jay5jOjE3OTY6ICogX19tZW1ibG9ja19hbGxvY19vcl9wYW5pYyAtIFRyeSB0byBhbGxvY2F0ZSBtZW1vcnkgYW5kIHBhbmljIG9uIGZhaWx1cmVcbm1tL21lbWJsb2NrLmMtMTc5Ny0gKiBAc2l6ZTogc2l6ZSBvZiBtZW1vcnkgYmxvY2sgdG8gYmUgYWxsb2NhdGVkIGluIGJ5dGVzXG4tLVxubW0vbWVtYmxvY2suYy0xODA0LSAqL1xubW0vbWVtYmxvY2suYzoxODA1OnZvaWQgKl9faW5pdCBfX21lbWJsb2NrX2FsbG9jX29yX3BhbmljKHBoeXNfYWRkcl90IHNpemUsIHBoeXNfYWRkcl90IGFsaWduLFxubW0vbWVtYmxvY2suYy0xODA2LVx0XHRcdFx0ICAgICAgIGNvbnN0IGNoYXIgKmZ1bmMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDUxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYG1tL21lbWJsb2NrLmNgIGZpbGUsIHNwZWNpZmljYWxseSBsaW5lcyAxODA1IHRocm91Z2ggMTgxNS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGF0IHNlY3Rpb24gZm9yIGEgcmVhc29uLCBhbmQgYmFzZWQgb24gdGhlIGNvbnRleHQsIGl0JiMzOTtzIGxpa2VseSBkZWFsaW5nIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gb3IgbWFuYWdlbWVudCBhdCBhIGZvdW5kYXRpb25hbCBsZXZlbCDigJMgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgZWFybHkgYm9vdCBwcm9jZXNzIG9yIGhhbmRsaW5nIG9mIHJlc2VydmVkIG1lbW9yeSByZWdpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhlIGtlcm5lbCBpcyBpbml0aWFsaXppbmcgb3IgbWFuaXB1bGF0aW5nIHRoZSBtZW1ibG9jayBkYXRhIHN0cnVjdHVyZXMgaW4gdGhhdCBwYXJ0aWN1bGFyIGNvZGUgc2VnbWVudC4gSSBleHBlY3QgdG8gYmUgbG9va2luZyBmb3IgZGV0YWlscyBvbiBob3cgdGhlIHN5c3RlbSBkZXRlcm1pbmVzIG9yIG1vZGlmaWVzIHRoZSBwaHlzaWNhbCBtZW1vcnkgbWFwLiBJcyBpdCBhZGRpbmcsIHJlbW92aW5nLCBvciBhZGp1c3RpbmcgbWVtb3J5IHJlZ2lvbnM/IFdoYXQgc3BlY2lmaWMgcGFyYW1ldGVycyBhcmUgYmVpbmcgdXNlZD8gSSYjMzk7bGwgcHJvYmFibHkgYmUgbG9va2luZyBmb3IgY2FsbHMgdG8gZnVuY3Rpb25zIGxpa2UgYG1lbWJsb2NrX2FkZCgpYCwgYG1lbWJsb2NrX3JlbW92ZSgpYCwgb3IgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCBhZmZlY3QgdGhlIG1lbWJsb2NrIGxpc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmbG93IGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhlIGNvZGUmIzM5O3MgZXhlY3V0aW9uLiBVbHRpbWF0ZWx5LCBteSBnb2FsIGlzIHRvIGdyYXNwIHRoZSBpbnRyaWNhY2llcyBvZiB0aGlzIHBhcnRpY3VsYXIgc2VjdGlvbiBhbmQgaG93IGl0IGNvbnRyaWJ1dGVzIHRvIHRoZSBicm9hZGVyIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWJsb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4MDU6XHR2b2lkICpfX2luaXQgX19tZW1ibG9ja19hbGxvY19vcl9wYW5pYyhwaHlzX2FkZHJfdCBzaXplLCBwaHlzX2FkZHJfdCBhbGlnbixcbjE4MDY6XHRcdFx0XHRcdCAgICAgICBjb25zdCBjaGFyICpmdW5jKVxuMTgwNzpcdHtcbjE4MDg6XHRcdHZvaWQgKmFkZHIgPSBtZW1ibG9ja19hbGxvYyhzaXplLCBhbGlnbik7XG4xODA5Olx0XG4xODEwOlx0XHRpZiAodW5saWtlbHkoIWFkZHIpKVxuMTgxMTpcdFx0XHRwYW5pYyhcJiMzNDslczogRmFpbGVkIHRvIGFsbG9jYXRlICVwYXAgYnl0ZXNcXG5cJiMzNDssIGZ1bmMsIFx1MDAyNnNpemUpO1xuMTgxMjpcdFx0cmV0dXJuIGFkZHI7XG4xODEzOlx0fVxuMTgxNDpcdFxuMTgxNTpcdC8qXG4xODE2Olx0ICogUmVtYWluaW5nIEFQSSBmdW5jdGlvbnNcbjE4MTc6XHQgKi9cbjE4MTg6XHRcbjE4MTk6XHRwaHlzX2FkZHJfdCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfcGh5c19tZW1fc2l6ZSh2b2lkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzU2MwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWR1bmRhbnQgSW5pdGlhbGl6YXRpb24gQ2xlYW51cCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgZmxhZ2dlZCBhcyBhIGNsZWFudXAsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gTGV0JiMzOTtzIHNlZS4uLiBgbWVtYmxvY2tfYWxsb2NgIGlzIHJlc3BvbnNpYmxlIGZvciB6ZXJvaW5nIHRoZSBtZW1vcnkuIEFoLCBhbmQgYGFsbG9jX25vZGVfZGF0YWAgc3BlY2lmaWNhbGx5IHVzZXMgYG1lbWJsb2NrX3BoeXNfYWxsb2NfdHJ5X25pZGAsIHdoaWNoIGFsc28gZ2V0cyB6ZXJvZWQuIFBsdXMsIGBtZW1zZXRgIGlzIHVzZWQgb24gYE5PREVfREFUQShuaWQpYCB0byBpbml0aWFsaXplIGBwZ19kYXRhX3RgIHRvIHplcm8uIFJpZ2h0LCBzbyB0aGF0IG1lYW5zIGBwZ2RhdGAgaXMgYWx3YXlzIGluaXRpYWxpemVkIHRvIGFsbCB6ZXJvcy4KClRoZXJlZm9yZSwgdGhlIGFzc2lnbm1lbnQgYHBnZGF0LSZndDtub2RlX3BhZ2VfZXh0ID0gTlVMTDtgIGluc2lkZSBgcGdkYXRfcGFnZV9leHRfaW5pdGAgaXMgY29tcGxldGVseSByZWR1bmRhbnQuIEl0JiMzOTtzIGFscmVhZHkgemVybyBmcm9tIHRoZSBzdGFydC4gVGhpcyBwYXRjaCBpcyBqdXN0IHJlbW92aW5nIHRoYXQgcmVkdW5kYW50IGluaXRpYWxpemF0aW9uIGFuZCB0aGUgZW1wdHkgZnVuY3Rpb24gc3R1YiDigJMgcHVyZWx5IGRlY29yYXRpdmUuIEl0JiMzOTtzIGEgY2xlYW51cCwgbm90IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFzIGZhciBhcyBJIGNhbiBzZWUuCgpIYW5nIG9uIGEgc2Vjb25k4oCmIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGNhbGxzIHRvIGBwZ2RhdF9wYWdlX2V4dF9pbml0YC4gTGV0JiMzOTtzIGdyZXAgdGhlIHdob2xlIHRyZWUgdG8gYmUgY29tcGxldGVseSBzdXJlLiBXZSBkb24mIzM5O3Qgd2FudCB0byBtaXNzIGFueSBlZGdlIGNhc2VzLCB5b3Uga25vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZ2RhdF9wYWdlX2V4dF9pbml0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwMjcKCQkJCQkJCW91dHB1dDogMTI1CgkJCQkJCQl0aG91Z2h0czogODE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IHBnZGF0X3BhZ2VfZXh0X2luaXQgUmVtb3ZhbCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGRpZmYgY2xlYXJseSBzaG93cyB0aGF0IHRoZSBmdW5jdGlvbiBgcGdkYXRfcGFnZV9leHRfaW5pdGAgaXMgYmVpbmcgY29tcGxldGVseSByZW1vdmVkIGFjcm9zcyB0aGUgcmVsZXZhbnQgZmlsZXMuIExldCYjMzk7cyBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIGltcGFjdC4gSSBzZWUgaXQmIzM5O3MgZ29uZSBmcm9tIGBpbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmhgLCBgbW0vbW1faW5pdC5jYCBhbmQgYG1tL3BhZ2VfZXh0LmNgCgpMb29raW5nIGF0IHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIHJlbW92ZWQgZGVmaW5pdGlvbiBpbiBgbW0vcGFnZV9leHQuY2AsIHRoZSBmdW5jdGlvbiBpdHNlbGYgd2FzIGV4dHJlbWVseSBzaW1wbGU6IGBwZ2RhdC0mZ3Q7bm9kZV9wYWdlX2V4dCA9IE5VTEw7YC4gQW5kLCBzaW5jZSBgcGdkYXRgIGlzIGFsd2F5cyB6ZXJvLWluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiwgdGhlIGZ1bmN0aW9uIGl0c2VsZiB3YXMgZG9pbmcgbm90aGluZyBvZiBzdWJzdGFuY2UuCgpTbywgZXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgYSBjbGVhbi11cC4gVGhlIGV4cGxpY2l0IHNldHRpbmcgb2YgYG5vZGVfcGFnZV9leHRgIHRvIGBOVUxMYCB3YXMgcmVkdW5kYW50IGJlY2F1c2UgdGhlIG1lbW9yeSB3YXMgYWxyZWFkeSBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGUgcmVtb3ZhbCBpcyBsaWtlbHkgaW50ZW5kZWQgdG8gcmVkdWNlIGNvZGUgY2x1dHRlciBhbmQgaW1wcm92ZSBvdmVyYWxsIG1haW50YWluYWJpbGl0eSwgYXMgd2VsbCBhcyB0byBlbGltaW5hdGUgYSBzbWFsbCBhbW91bnQgb2YgcmVkdW5kYW50IGV4ZWN1dGlvbi4gTm8gZnVuY3Rpb25hbGl0eSBpcyBhZmZlY3RlZCBieSB0aGUgY2hhbmdlLiBXb3J0aEZ1enppbmc9ZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYHBnZGF0X3BhZ2VfZXh0X2luaXRgIGZ1bmN0aW9uLCB3aGljaCB3YXMgZWl0aGVyIGFuIGVtcHR5IHN0dWIgb3Igc2ltcGx5IHNldCBgcGdkYXQtXHUwMDNlbm9kZV9wYWdlX2V4dCA9IE5VTExgLiBTaW5jZSBgcGdkYXRgIHN0cnVjdHVyZXMgYXJlIGFsd2F5cyB6ZXJvLWluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiAodmlhIGBtZW1zZXRgIGluIGBhbGxvY19ub2RlX2RhdGFgIG9yIGJ5IHVzaW5nIGBtZW1ibG9ja19hbGxvY2ApLCB0aGlzIGluaXRpYWxpemF0aW9uIHdhcyBjb21wbGV0ZWx5IHJlZHVuZGFudC4gUmVtb3ZpbmcgaXQgaXMgYSBwdXJlbHkgZGVjb3JhdGl2ZSBjbGVhbnVwIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBwZ2RhdF9wYWdlX2V4dF9pbml0YCBmdW5jdGlvbiwgd2hpY2ggd2FzIGVpdGhlciBhbiBlbXB0eSBzdHViIG9yIHNpbXBseSBzZXQgYHBnZGF0LVx1MDAzZW5vZGVfcGFnZV9leHQgPSBOVUxMYC4gU2luY2UgYHBnZGF0YCBzdHJ1Y3R1cmVzIGFyZSBhbHdheXMgemVyby1pbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gKHZpYSBgbWVtc2V0YCBpbiBgYWxsb2Nfbm9kZV9kYXRhYCBvciBieSB1c2luZyBgbWVtYmxvY2tfYWxsb2NgKSwgdGhpcyBpbml0aWFsaXphdGlvbiB3YXMgY29tcGxldGVseSByZWR1bmRhbnQuIFJlbW92aW5nIGl0IGlzIGEgcHVyZWx5IGRlY29yYXRpdmUgY2xlYW51cCB0aGF0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MDg6NDYuOTkzMDc4NzQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyMDE2ODMxODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBgcGdkYXRfcGFnZV9leHRfaW5pdGAgZnVuY3Rpb24sIHdoaWNoIHdhcyBlaXRoZXIgYW4gZW1wdHkgc3R1YiBvciBzaW1wbHkgc2V0IGBwZ2RhdC1cXHUwMDNlbm9kZV9wYWdlX2V4dCA9IE5VTExgLiBTaW5jZSBgcGdkYXRgIHN0cnVjdHVyZXMgYXJlIGFsd2F5cyB6ZXJvLWluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiAodmlhIGBtZW1zZXRgIGluIGBhbGxvY19ub2RlX2RhdGFgIG9yIGJ5IHVzaW5nIGBtZW1ibG9ja19hbGxvY2ApLCB0aGlzIGluaXRpYWxpemF0aW9uIHdhcyBjb21wbGV0ZWx5IHJlZHVuZGFudC4gUmVtb3ZpbmcgaXQgaXMgYSBwdXJlbHkgZGVjb3JhdGl2ZSBjbGVhbnVwIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjA4OjQ2Ljk5MzA4Mzg1NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA2NDM2Mjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZmEzNjA3NTBlZGQ1ZWFjMDczOWJkYjk3NTRmMTBhN2Y2ZDgxY2RhYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzIDE4OjA4OjQ2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9leHQuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9leHQuaFxcbmluZGV4IGYyM2Q0YjIxOGRhMDcuLjc5YzUzZWM0NWRmYTcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oXFxuQEAgLTU1LDcgKzU1LDYgQEAgc3RydWN0IHBhZ2VfZXh0IHtcXG4gXFxuIGV4dGVybiBib29sIGVhcmx5X3BhZ2VfZXh0O1xcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBwYWdlX2V4dF9zaXplO1xcbi1leHRlcm4gdm9pZCBwZ2RhdF9wYWdlX2V4dF9pbml0KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpO1xcbiBcXG4gc3RhdGljIGlubGluZSBib29sIGVhcmx5X3BhZ2VfZXh0X2VuYWJsZWQodm9pZClcXG4ge1xcbkBAIC0yMDIsMTAgKzIwMSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBlYXJseV9wYWdlX2V4dF9lbmFibGVkKHZvaWQpXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIHBnZGF0X3BhZ2VfZXh0X2luaXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG4te1xcbi19XFxuLVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9leHRfaW5pdCh2b2lkKVxcbiB7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXFxuaW5kZXggNzExZjgyMWY3YjNjNy4uZTljNDIwNGI3M2FkYiAxMDA2NDRcXG4tLS0gYS9tbS9tbV9pbml0LmNcXG4rKysgYi9tbS9tbV9pbml0LmNcXG5AQCAtMTM5NCw3ICsxMzk0LDYgQEAgc3RhdGljIHZvaWQgX19tZW1pbml0IHBnZGF0X2luaXRfaW50ZXJuYWxzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9WTVNDQU5fVEhST1RUTEU7IGkrKylcXG4gXFx0XFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2cGdkYXQtXFx1MDAzZXJlY2xhaW1fd2FpdFtpXSk7XFxuIFxcbi1cXHRwZ2RhdF9wYWdlX2V4dF9pbml0KHBnZGF0KTtcXG4gXFx0bHJ1dmVjX2luaXQoXFx1MDAyNnBnZGF0LVxcdTAwM2VfX2xydXZlYyk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfZXh0LmMgYi9tbS9wYWdlX2V4dC5jXFxuaW5kZXggZTJlOTJiZDI3ZWJkZC4uYjY3OWE4YzFmN2Q3ZSAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX2V4dC5jXFxuKysrIGIvbW0vcGFnZV9leHQuY1xcbkBAIC0xNjQsMTEgKzE2NCw2IEBAIHZvaWQgX19pbml0IHBhZ2VfZXh0X2luaXRfZmxhdG1lbV9sYXRlKHZvaWQpXFxuIFxcdGludm9rZV9pbml0X2NhbGxiYWNrcygpO1xcbiB9XFxuIFxcbi12b2lkIF9fbWVtaW5pdCBwZ2RhdF9wYWdlX2V4dF9pbml0KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuLXtcXG4tXFx0cGdkYXQtXFx1MDAzZW5vZGVfcGFnZV9leHQgPSBOVUxMO1xcbi19XFxuLVxcbiBzdGF0aWMgc3RydWN0IHBhZ2VfZXh0ICpsb29rdXBfcGFnZV9leHQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcXG5AQCAtNDk0LDEwICs0ODksNiBAQCB2b2lkIF9faW5pdCBwYWdlX2V4dF9pbml0KHZvaWQpXFxuIFxcdHBhbmljKFxcXCJPdXQgb2YgbWVtb3J5XFxcIik7XFxuIH1cXG4gXFxuLXZvaWQgX19tZW1pbml0IHBnZGF0X3BhZ2VfZXh0X2luaXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG4te1xcbi19XFxuLVxcbiAjZW5kaWZcXG4gXFxuIC8qKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODowODo0Ny4zMDA0Mzk0ODFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNTE3MDk0NjI4OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBwZ2RhdF9wYWdlX2V4dF9pbml0YCBmdW5jdGlvbiwgd2hpY2ggd2FzIGVpdGhlciBhbiBlbXB0eSBzdHViIG9yIHNpbXBseSBzZXQgYHBnZGF0LVxcdTAwM2Vub2RlX3BhZ2VfZXh0ID0gTlVMTGAuIFNpbmNlIGBwZ2RhdGAgc3RydWN0dXJlcyBhcmUgYWx3YXlzIHplcm8taW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uICh2aWEgYG1lbXNldGAgaW4gYGFsbG9jX25vZGVfZGF0YWAgb3IgYnkgdXNpbmcgYG1lbWJsb2NrX2FsbG9jYCksIHRoaXMgaW5pdGlhbGl6YXRpb24gd2FzIGNvbXBsZXRlbHkgcmVkdW5kYW50LiBSZW1vdmluZyBpdCBpcyBhIHB1cmVseSBkZWNvcmF0aXZlIGNsZWFudXAgdGhhdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmEzNjA3NTBlZGQ1ZWFjMDczOWJkYjk3NTRmMTBhN2Y2ZDgxY2RhYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTg6MDg6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmhcbmluZGV4IGYyM2Q0YjIxOGRhMDcuLjc5YzUzZWM0NWRmYTcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZV9leHQuaFxuQEAgLTU1LDcgKzU1LDYgQEAgc3RydWN0IHBhZ2VfZXh0IHtcbiBcbiBleHRlcm4gYm9vbCBlYXJseV9wYWdlX2V4dDtcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBwYWdlX2V4dF9zaXplO1xuLWV4dGVybiB2b2lkIHBnZGF0X3BhZ2VfZXh0X2luaXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCk7XG4gXG4gc3RhdGljIGlubGluZSBib29sIGVhcmx5X3BhZ2VfZXh0X2VuYWJsZWQodm9pZClcbiB7XG5AQCAtMjAyLDEwICsyMDEsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZWFybHlfcGFnZV9leHRfZW5hYmxlZCh2b2lkKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgcGdkYXRfcGFnZV9leHRfaW5pdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuLXtcbi19XG4tXG4gc3RhdGljIGlubGluZSB2b2lkIHBhZ2VfZXh0X2luaXQodm9pZClcbiB7XG4gfVxuZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuY1xuaW5kZXggNzExZjgyMWY3YjNjNy4uZTljNDIwNGI3M2FkYiAxMDA2NDRcbi0tLSBhL21tL21tX2luaXQuY1xuKysrIGIvbW0vbW1faW5pdC5jXG5AQCAtMTM5NCw3ICsxMzk0LDYgQEAgc3RhdGljIHZvaWQgX19tZW1pbml0IHBnZGF0X2luaXRfaW50ZXJuYWxzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9WTVNDQU5fVEhST1RUTEU7IGkrKylcbiBcdFx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZwZ2RhdC1cdTAwM2VyZWNsYWltX3dhaXRbaV0pO1xuIFxuLVx0cGdkYXRfcGFnZV9leHRfaW5pdChwZ2RhdCk7XG4gXHRscnV2ZWNfaW5pdChcdTAwMjZwZ2RhdC1cdTAwM2VfX2xydXZlYyk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfZXh0LmMgYi9tbS9wYWdlX2V4dC5jXG5pbmRleCBlMmU5MmJkMjdlYmRkLi5iNjc5YThjMWY3ZDdlIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9leHQuY1xuKysrIGIvbW0vcGFnZV9leHQuY1xuQEAgLTE2NCwxMSArMTY0LDYgQEAgdm9pZCBfX2luaXQgcGFnZV9leHRfaW5pdF9mbGF0bWVtX2xhdGUodm9pZClcbiBcdGludm9rZV9pbml0X2NhbGxiYWNrcygpO1xuIH1cbiBcbi12b2lkIF9fbWVtaW5pdCBwZ2RhdF9wYWdlX2V4dF9pbml0KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG4te1xuLVx0cGdkYXQtXHUwMDNlbm9kZV9wYWdlX2V4dCA9IE5VTEw7XG4tfVxuLVxuIHN0YXRpYyBzdHJ1Y3QgcGFnZV9leHQgKmxvb2t1cF9wYWdlX2V4dChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xuQEAgLTQ5NCwxMCArNDg5LDYgQEAgdm9pZCBfX2luaXQgcGFnZV9leHRfaW5pdCh2b2lkKVxuIFx0cGFuaWMoXCJPdXQgb2YgbWVtb3J5XCIpO1xuIH1cbiBcbi12b2lkIF9fbWVtaW5pdCBwZ2RhdF9wYWdlX2V4dF9pbml0KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG4te1xuLX1cbi1cbiAjZW5kaWZcbiBcbiAvKipcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjA4OjQ3LjMwMDQ0MTAxMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNTg0MjExOTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IFJlbW92aW5nIGBwZ2RhdF9wYWdlX2V4dF9pbml0YCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGF4aW5nIHRoZSBgcGdkYXRfcGFnZV9leHRfaW5pdGAgZnVuY3Rpb24sIGFuZCBpdHMgY29ycmVzcG9uZGluZyBjYWxscy4gSSBzZWUgdGhlIGNoYW5nZXMgYXJlIGluIGBpbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmhgLCBgbW0vbW1faW5pdC5jYCwgYW5kIGBtbS9wYWdlX2V4dC5jYC4gSW50ZXJlc3RpbmcuIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCBgcGdkYXRfcGFnZV9leHRfaW5pdGAgd2FzIGVzc2VudGlhbGx5IGp1c3QgaW5pdGlhbGl6aW5nIGBwZ2RhdC1cdTAwM2Vub2RlX3BhZ2VfZXh0ID0gTlVMTDtgIGluIGNlcnRhaW4gY29uZmlndXJhdGlvbnMsIGFuZCBjb21wbGV0ZWx5IGVtcHR5IGluIG90aGVycy4gU2VlbXMgbGlrZSBzb21lIHJlZHVuZGFudCBjb2RlLCBwb3RlbnRpYWxseS5cblxuV2FpdCBhIHNlY29uZC4uLiBpZiB3ZSdyZSByZW1vdmluZyB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24sIGRvZXMgdGhhdCBtZWFuIGBub2RlX3BhZ2VfZXh0YCBpdHNlbGYgaXMgYmVpbmcgcmVtb3ZlZD8gSSBuZWVkIHRvIHZlcmlmeSB0aGlzLiBMZXQgbWUgcXVpY2tseSBjaGVjayBpZiBgbm9kZV9wYWdlX2V4dGAgc3RpbGwgZXhpc3RzIHdpdGhpbiB0aGUgYHBnbGlzdF9kYXRhYCBzdHJ1Y3R1cmUuIFRpbWUgdG8gcnVuIGEgcXVpY2sgZ3JlcCB0byBtYWtlIHN1cmUgbm90aGluZyBlbHNlIHJlbGllcyBvbiBpdCBhbmQgdGhhdCB3ZSdyZSBub3QgYWJvdXQgdG8gYnJlYWsgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NjcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODowOTo0OS44ODQ2NTY3MDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0OTMxMjk3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJub2RlX3BhZ2VfZXh0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdD0yMTA9R2VuZXJhbFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTIzMC1cXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjMxOmBgbm9kZV9wYWdlX2V4dGBgXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTIzMi0gIEZvciBVTUEgc3lzdGVtcyB0aGF0IHVzZSBGTEFUTUVNIG1lbW9yeSBtb2RlbCB0aGUgMCdzIG5vZGVcXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjMzOiAgYGBub2RlX3BhZ2VfZXh0YGAgaXMgYXJyYXkgb2YgZXh0ZW5zaW9ucyBvZiBzdHJ1Y3QgcGFnZXMuIEF2YWlsYWJsZSBvbmx5XFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTIzNC0gIGluIHRoZSBrZXJuZWxzIGJ1aWx0IHdpdGggYGBDT05GSUdfUEFHRV9FWFRFTlNJT05gYCBlbmFibGVkLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdD0yMDU9bm9kZV96b25lbGlzdHPlvJXnlKjjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMjE5LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjIwOmBgbm9kZV9wYWdlX2V4dGBgXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoyMjE65a+55LqO5L2/55SoRkxBVE1FTeWGheWtmOaooeWei+eahFVNQeezu+e7n++8jDDlj7foioLngrnnmoQgYGBub2RlX3BhZ2VfZXh0YGBcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTIyMi3mmK9zdHJ1Y3QgcGFnZXPnmoTmianlsZXmlbDnu4TjgILlj6rmnInlnKjmnoTlu7rml7blvIDlkK/kuoYgYGBDT05GSUdfUEFHRV9FWFRFTlNJT05gYFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xNDc5PXR5cGVkZWYgc3RydWN0IHBnbGlzdF9kYXRhIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTQ5Ny0jaWZkZWYgQ09ORklHX1BBR0VfRVhURU5TSU9OXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNDk4OlxcdHN0cnVjdCBwYWdlX2V4dCAqbm9kZV9wYWdlX2V4dDtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE0OTktI2VuZGlmXFxuLS1cXG5tbS9wYWdlX2V4dC5jPTE2Nz1zdGF0aWMgc3RydWN0IHBhZ2VfZXh0ICpsb29rdXBfcGFnZV9leHQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9wYWdlX2V4dC5jLTE3My1cXHRXQVJOX09OX09OQ0UoIXJjdV9yZWFkX2xvY2tfaGVsZCgpKTtcXG5tbS9wYWdlX2V4dC5jOjE3NDpcXHRiYXNlID0gTk9ERV9EQVRBKHBhZ2VfdG9fbmlkKHBhZ2UpKS1cXHUwMDNlbm9kZV9wYWdlX2V4dDtcXG5tbS9wYWdlX2V4dC5jLTE3NS1cXHQvKlxcbi0tXFxubW0vcGFnZV9leHQuYy0xODctXFxubW0vcGFnZV9leHQuYzoxODg6c3RhdGljIGludCBfX2luaXQgYWxsb2Nfbm9kZV9wYWdlX2V4dChpbnQgbmlkKVxcbm1tL3BhZ2VfZXh0LmMtMTg5LXtcXG4tLVxcbm1tL3BhZ2VfZXh0LmMtMjEzLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL3BhZ2VfZXh0LmM6MjE0OlxcdE5PREVfREFUQShuaWQpLVxcdTAwM2Vub2RlX3BhZ2VfZXh0ID0gYmFzZTtcXG5tbS9wYWdlX2V4dC5jLTIxNS1cXHR0b3RhbF91c2FnZSArPSB0YWJsZV9zaXplO1xcbi0tXFxubW0vcGFnZV9leHQuYz0yMjA9dm9pZCBfX2luaXQgcGFnZV9leHRfaW5pdF9mbGF0bWVtKHZvaWQpXFxuLS1cXG5tbS9wYWdlX2V4dC5jLTIyOC1cXHRmb3JfZWFjaF9vbmxpbmVfbm9kZShuaWQpICB7XFxubW0vcGFnZV9leHQuYzoyMjk6XFx0XFx0ZmFpbCA9IGFsbG9jX25vZGVfcGFnZV9leHQobmlkKTtcXG5tbS9wYWdlX2V4dC5jLTIzMC1cXHRcXHRpZiAoZmFpbClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MDk6NTEuNzMzOTgzNzMxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQyOTYwMDE3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFJlbW92YWwgb2YgYHBnZGF0X3BhZ2VfZXh0X2luaXRgKipcblxuT2theSwgc28gYG5vZGVfcGFnZV9leHRgIGlzIHN0aWxsIGJlaW5nIGFjdGl2ZWx5IHV0aWxpemVkIHdpdGhpbiBgYWxsb2Nfbm9kZV9wYWdlX2V4dGAgYW5kIGBsb29rdXBfcGFnZV9leHRgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBUaGUgcGF0Y2ggaW4gcXVlc3Rpb24gaXMganVzdCBlbGltaW5hdGluZyB0aGUgYHBnZGF0X3BhZ2VfZXh0X2luaXRgIGZ1bmN0aW9uLCB3aGljaCB3YXMgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyBpdCB0byBgTlVMTGAuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhhdCBpbml0aWFsaXphdGlvbiBzdGlsbCBuZWNlc3Nhcnk/XG5cbkhtbS4uLiBhIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCB0aGUgYHBnZGF0YCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGVpdGhlciBga3phbGxvY2Agb3IgYG1lbWJsb2NrX2FsbG9jYCwgYW5kIGJvdGggb2YgdGhvc2UgbWV0aG9kcyB6ZXJvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBUaGlzIHN1Z2dlc3RzIHRoZSBleHBsaWNpdCBpbml0aWFsaXphdGlvbiBtaWdodCBiZSByZWR1bmRhbnQuIFRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgSSBzaG91bGQgdmVyaWZ5IHRoZSBgcGdkYXRfaW5pdF9pbnRlcm5hbHNgIGZ1bmN0aW9uIGluIGBtbS9tbV9pbml0LmNgIHRvIGNvbmZpcm0gdGhlIG1lbW9yeSBpbml0aWFsaXphdGlvbiBiZWhhdmlvci4gSSdsbCB0YWtlIGEgbG9vayBhdCBpdCB0byBtYWtlIGNlcnRhaW4gbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MTQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MDk6NTcuMTYzNTg2NDgxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzAzMTk1ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGdkYXRfaW5pdF9pbnRlcm5hbHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbW1faW5pdC5jPTEzODA9c3RhdGljIHZvaWQgcGdkYXRfaW5pdF9rY29tcGFjdGQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkge31cXG4tLVxcbm1tL21tX2luaXQuYy0xMzgyLVxcbm1tL21tX2luaXQuYzoxMzgzOnN0YXRpYyB2b2lkIF9fbWVtaW5pdCBwZ2RhdF9pbml0X2ludGVybmFscyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxcbm1tL21tX2luaXQuYy0xMzg0LXtcXG4tLVxcbm1tL21tX2luaXQuYz0xNTMyPWludCBfX3JlZiBmcmVlX2FyZWFfaW5pdF9jb3JlX2hvdHBsdWcoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG4tLVxcbm1tL21tX2luaXQuYy0xNTM3LVxcbm1tL21tX2luaXQuYzoxNTM4OlxcdHBnZGF0X2luaXRfaW50ZXJuYWxzKHBnZGF0KTtcXG5tbS9tbV9pbml0LmMtMTUzOS1cXG4tLVxcbm1tL21tX2luaXQuYz0xNTkwPXN0YXRpYyB2b2lkIF9faW5pdCBmcmVlX2FyZWFfaW5pdF9jb3JlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuLS1cXG5tbS9tbV9pbml0LmMtMTU5NC1cXG5tbS9tbV9pbml0LmM6MTU5NTpcXHRwZ2RhdF9pbml0X2ludGVybmFscyhwZ2RhdCk7XFxubW0vbW1faW5pdC5jLTE1OTYtXFx0cGdkYXQtXFx1MDAzZXBlcl9jcHVfbm9kZXN0YXRzID0gXFx1MDAyNmJvb3Rfbm9kZXN0YXRzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODowOTo1OS4xMzM5MTI0MTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTI0NTQ5NDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBJbml0aWFsaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIHRoZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcywgc3BlY2lmaWNhbGx5IHRoZSBgcGdkYXRfaW5pdF9pbnRlcm5hbHNgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0J3MgcmVtb3ZpbmcgYSBjYWxsIHRvIGBwZ2RhdF9wYWdlX2V4dF9pbml0KHBnZGF0KTtgLiBUaGlzIGZ1bmN0aW9uIHdhcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyBgcGdkYXQtXHUwMDNlbm9kZV9wYWdlX2V4dGAgdG8gYE5VTExgLiBUaGUga2V5IHF1ZXN0aW9uIGhlcmUgaXMsIGRvZXMgdGhpcyByZW1vdmFsIHJlcHJlc2VudCBhIGZ1bmN0aW9uYWwgY2hhbmdlPyBJdCBmZWVscyBsaWtlIGl0IG1pZ2h0IGJlIHJlZHVuZGFudCwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLlxuXG5JZiBgcGdkYXRgIGlzIGluaXRpYWxpemVkIHdpdGggemVyb3MsIHdoaWNoIGlzIGNvbW1vbiBpbiBtYW55IGFyY2hpdGVjdHVyZXMsIHRoZW4gc2V0dGluZyBgcGdkYXQtXHUwMDNlbm9kZV9wYWdlX2V4dGAgdG8gYE5VTExgIGV4cGxpY2l0bHkgd291bGQgYmUgcmVkdW5kYW50LCBiZWNhdXNlIGl0J3MgYWxyZWFkeSBpbXBsaWNpdGx5IGluaXRpYWxpemVkIHRvIHplcm8sIHdoaWNoIGlzIHRoZSBzYW1lIHRoaW5nIGFzIGBOVUxMYCBpbiB0aGlzIGNvbnRleHQuIEJ1dCwgSSByZWFsbHkgY2FuJ3Qgc2F5IGZvciBzdXJlLCB3aXRob3V0IHZlcmlmeWluZyBob3cgYW5kIHdoZXJlIHRoaXMgc3RydWN0dXJlLCBgcGdkYXRgLCBpcyBhY3R1YWxseSBhbGxvY2F0ZWQuIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBjb2RlIGZvciBgcGdkYXRgIGl0c2VsZiB0byBiZSBjZXJ0YWluLiBUaGF0J3MgdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM1NywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjEwOjAzLjA1ODQ2NDIyNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA2OTM4OTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX25vZGVfZGF0YVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2xvb25nYXJjaC9rZXJuZWwvbnVtYS5jPTE0Mz1zdGF0aWMgdm9pZCBfX2luaXQgbm9kZV9tZW1faW5pdCh1bnNpZ25lZCBpbnQgbm9kZSlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9udW1hLmMtMTU1LVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9udW1hLmM6MTU2OlxcdGFsbG9jX25vZGVfZGF0YShub2RlKTtcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbnVtYS5jLTE1Ny19XFxuLS1cXG5hcmNoL21pcHMvbG9vbmdzb242NC9udW1hLmM9ODI9c3RhdGljIHZvaWQgX19pbml0IG5vZGVfbWVtX2luaXQodW5zaWduZWQgaW50IG5vZGUpXFxuLS1cXG5hcmNoL21pcHMvbG9vbmdzb242NC9udW1hLmMtOTQtXFxuYXJjaC9taXBzL2xvb25nc29uNjQvbnVtYS5jOjk1OlxcdGFsbG9jX25vZGVfZGF0YShub2RlKTtcXG5hcmNoL21pcHMvbG9vbmdzb242NC9udW1hLmMtOTYtXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vbnVtYS5jPTEwOTM9c3RhdGljIHZvaWQgX19pbml0IHNldHVwX25vZGVfZGF0YShpbnQgbmlkLCB1NjQgc3RhcnRfcGZuLCB1NjQgZW5kX3BmbilcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9udW1hLmMtMTA5Ni1cXG5hcmNoL3Bvd2VycGMvbW0vbnVtYS5jOjEwOTc6XFx0YWxsb2Nfbm9kZV9kYXRhKG5pZCk7XFxuYXJjaC9wb3dlcnBjL21tL251bWEuYy0xMDk4LVxcbi0tXFxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmM9MTA2ND1zdGF0aWMgdm9pZCBfX2luaXQgYWxsb2NhdGVfbm9kZV9kYXRhKGludCBuaWQpXFxuLS1cXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYy0xMDY5LSNpZmRlZiBDT05GSUdfTlVNQVxcbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jOjEwNzA6XFx0YWxsb2Nfbm9kZV9kYXRhKG5pZCk7XFxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMtMTA3MS1cXG4tLVxcbmFyY2gveDg2L21tL251bWEuYz0xMjY9c3RhdGljIGludCBfX2luaXQgbnVtYV9yZWdpc3Rlcl9ub2Rlcyh2b2lkKVxcbi0tXFxuYXJjaC94ODYvbW0vbnVtYS5jLTE0NC1cXG5hcmNoL3g4Ni9tbS9udW1hLmM6MTQ1OlxcdFxcdGFsbG9jX25vZGVfZGF0YShuaWQpO1xcbmFyY2gveDg2L21tL251bWEuYy0xNDYtXFx0XFx0bm9kZV9zZXRfb25saW5lKG5pZCk7XFxuLS1cXG5kcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmM9MTk1PXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ub2RlX2RhdGEoaW50IG5pZCwgdTY0IHN0YXJ0X3BmbiwgdTY0IGVuZF9wZm4pXFxuLS1cXG5kcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmMtMTk5LVxcbmRyaXZlcnMvYmFzZS9hcmNoX251bWEuYzoyMDA6XFx0YWxsb2Nfbm9kZV9kYXRhKG5pZCk7XFxuZHJpdmVycy9iYXNlL2FyY2hfbnVtYS5jLTIwMS1cXG4tLVxcbmluY2x1ZGUvbGludXgvbnVtYS5oPTI1PWV4dGVybiBzdHJ1Y3QgcGdsaXN0X2RhdGEgKm5vZGVfZGF0YVtdO1xcbi0tXFxuaW5jbHVkZS9saW51eC9udW1hLmgtMjctXFxuaW5jbHVkZS9saW51eC9udW1hLmg6Mjg6dm9pZCBfX2luaXQgYWxsb2Nfbm9kZV9kYXRhKGludCBuaWQpO1xcbmluY2x1ZGUvbGludXgvbnVtYS5oLTI5LXZvaWQgX19pbml0IGFsbG9jX29mZmxpbmVfbm9kZV9kYXRhKGludCBuaWQpO1xcbi0tXFxubW0vbnVtYS5jPTk9RVhQT1JUX1NZTUJPTChub2RlX2RhdGEpO1xcbi0tXFxubW0vbnVtYS5jLTExLS8qIEFsbG9jYXRlIE5PREVfREFUQSBmb3IgYSBub2RlIG9uIHRoZSBsb2NhbCBtZW1vcnkgKi9cXG5tbS9udW1hLmM6MTI6dm9pZCBfX2luaXQgYWxsb2Nfbm9kZV9kYXRhKGludCBuaWQpXFxubW0vbnVtYS5jLTEzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTA6MDQuODY1NDA5MjE4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTkwNDM4MTI5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgYWxsb2Nfbm9kZV9kYXRhYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHJldmlzaXQgYGFsbG9jX25vZGVfZGF0YWAgd2l0aGluIGBtbS9udW1hLmNgLiBJdCdzIHdoZXJlIHRoZSBjb3JlIE5VTUEgbm9kZSBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiB0YWtlcyBwbGFjZSwgc28gYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBvciBub2RlIGNoYXJhY3RlcmlzdGljcyBhbG1vc3QgY2VydGFpbmx5IGhhcyBhIHJvb3QgaGVyZS4gSSB3YW50IHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBzdGF0ZSBvZiB0aGUgZnVuY3Rpb24sIHRoZSBzcGVjaWZpYyBjYWxsIGNoYWluLCBhbmQgdGhlIG1lbW9yeSBzdHJ1Y3R1cmVzIGNyZWF0ZWQuIEkga25vdyBpdCdzIGEgY3JpdGljYWwgZnVuY3Rpb24gZm9yIHNldHRpbmcgdXAgdGhlIG5vZGUncyBtZW1vcnkgbWFuYWdlbWVudCBjb250ZXh0cywgYW5kIHN1YnRsZSBlcnJvcnMgY2FuIHByb3BhZ2F0ZSBhbmQgY2F1c2UgaGVhZGFjaGVzIGRvd24gdGhlIGxpbmUuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBsb29rIGZvciBob3cgdGhpcyBpbnRlZ3JhdGVzIHdpdGggdGhlIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZXMgd2l0aGluIHRoaXMgZmlsZSBhcyB3ZWxsIGFzIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgTlVNQSBsYXllciBhbmQgaXRzIHNwZWNpZmljIGNhbGxzIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBBUElzLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIGdlbmVyaWMgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCB0aGUgYXNzb2NpYXRlZCBlcnJvci1oYW5kbGluZyBwYXRocy4gQSBkZWVwIGRpdmUgd2lsbCB1bmNvdmVyIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBsZWFrcyBvciwgbWF5YmUganVzdCBtYXliZSwgYSBzdHJhaWdodGZvcndhcmQgbWlzY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUxOSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjEwOjE0Ljc2OTc5NDY0MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwMzE1NTExNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIF9faW5pdCBhbGxvY19ub2RlX2RhdGFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9udW1hLmg9MjU9ZXh0ZXJuIHN0cnVjdCBwZ2xpc3RfZGF0YSAqbm9kZV9kYXRhW107XFxuLS1cXG5pbmNsdWRlL2xpbnV4L251bWEuaC0yNy1cXG5pbmNsdWRlL2xpbnV4L251bWEuaDoyODp2b2lkIF9faW5pdCBhbGxvY19ub2RlX2RhdGEoaW50IG5pZCk7XFxuaW5jbHVkZS9saW51eC9udW1hLmgtMjktdm9pZCBfX2luaXQgYWxsb2Nfb2ZmbGluZV9ub2RlX2RhdGEoaW50IG5pZCk7XFxuLS1cXG5tbS9udW1hLmM9OT1FWFBPUlRfU1lNQk9MKG5vZGVfZGF0YSk7XFxuLS1cXG5tbS9udW1hLmMtMTEtLyogQWxsb2NhdGUgTk9ERV9EQVRBIGZvciBhIG5vZGUgb24gdGhlIGxvY2FsIG1lbW9yeSAqL1xcbm1tL251bWEuYzoxMjp2b2lkIF9faW5pdCBhbGxvY19ub2RlX2RhdGEoaW50IG5pZClcXG5tbS9udW1hLmMtMTMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxMDoxNi40NzI5NjA3MjdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQxNzYzMzY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBwdWxsIHVwIGBtbS9udW1hLmNgIGFuZCBmb2N1cyBvbiBsaW5lcyAxMiB0aHJvdWdoIDMwLiBNeSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgcXVpY2sgZ3Jhc3Agb2YgdGhlIGNvbnRleHQgdGhlc2UgbGluZXMgZXN0YWJsaXNoLiBUaGlzIGxpa2VseSBtZWFucyB0aGV5J3JlIHNldHRpbmcgdXAgc29tZSBmdW5kYW1lbnRhbCBkZWZpbml0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBpbml0aWFsaXphdGlvbnMgcmVsYXRlZCB0byBOVU1BIChOb24tVW5pZm9ybSBNZW1vcnkgQWNjZXNzKSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSBkZWNsYXJhdGlvbnMgb2YgcmVsZXZhbnQgc3RydWN0dXJlcywgcG9zc2libHkgc29tZSBjb25zdGFudCBkZWZpbml0aW9ucyByZWxhdGVkIHRvIG5vZGUgc2l6ZXMgb3IgbWVtb3J5IHpvbmVzLCBhbmQgbWF5YmUgc29tZSBpbml0aWFsIGFzc2lnbm1lbnRzIG9yIGZ1bmN0aW9uIHByb3RvdHlwZXMgdGhhdCBhcmUgY3J1Y2lhbCB0byB0aGUgTlVNQSBhcmNoaXRlY3R1cmUuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaG93IHRoZSBrZXJuZWwgaXMgcGVyY2VpdmluZyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGlmZmVyZW50IG1lbW9yeSBub2RlcyBhdmFpbGFibGUgaW4gdGhlIHN5c3RlbS4gS25vd2luZyB0aGlzIGZvdW5kYXRpb24gd2lsbCBoZWxwIG1lIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgbW9yZSBjb21wbGV4IGxvZ2ljIHRoYXQgd2lsbCBmb2xsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5ODEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxMDoyMS44OTA1OTg5MDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbnVtYS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDEyOlxcdHZvaWQgX19pbml0IGFsbG9jX25vZGVfZGF0YShpbnQgbmlkKVxcbiAgMTM6XFx0e1xcbiAgMTQ6XFx0XFx0Y29uc3Qgc2l6ZV90IG5kX3NpemUgPSByb3VuZHVwKHNpemVvZihwZ19kYXRhX3QpLCBTTVBfQ0FDSEVfQllURVMpO1xcbiAgMTU6XFx0XFx0dTY0IG5kX3BhO1xcbiAgMTY6XFx0XFx0aW50IHRuaWQ7XFxuICAxNzpcXHRcXG4gIDE4OlxcdFxcdC8qIEFsbG9jYXRlIG5vZGUgZGF0YS4gIFRyeSBub2RlLWxvY2FsIG1lbW9yeSBhbmQgdGhlbiBhbnkgbm9kZS4gKi9cXG4gIDE5OlxcdFxcdG5kX3BhID0gbWVtYmxvY2tfcGh5c19hbGxvY190cnlfbmlkKG5kX3NpemUsIFNNUF9DQUNIRV9CWVRFUywgbmlkKTtcXG4gIDIwOlxcdFxcdGlmICghbmRfcGEpXFxuICAyMTpcXHRcXHRcXHRwYW5pYyhcXFwiQ2Fubm90IGFsbG9jYXRlICV6dSBieXRlcyBmb3Igbm9kZSAlZCBkYXRhXFxcXG5cXFwiLFxcbiAgMjI6XFx0XFx0XFx0ICAgICAgbmRfc2l6ZSwgbmlkKTtcXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0LyogcmVwb3J0IGFuZCBpbml0aWFsaXplICovXFxuICAyNTpcXHRcXHRwcl9pbmZvKFxcXCJOT0RFX0RBVEEoJWQpIGFsbG9jYXRlZCBbbWVtICUjMDEwTHgtJSMwMTBMeF1cXFxcblxcXCIsIG5pZCxcXG4gIDI2OlxcdFxcdFxcdG5kX3BhLCBuZF9wYSArIG5kX3NpemUgLSAxKTtcXG4gIDI3OlxcdFxcdHRuaWQgPSBlYXJseV9wZm5fdG9fbmlkKG5kX3BhIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbiAgMjg6XFx0XFx0aWYgKHRuaWQgIT0gbmlkKVxcbiAgMjk6XFx0XFx0XFx0cHJfaW5mbyhcXFwiICAgIE5PREVfREFUQSglZCkgb24gbm9kZSAlZFxcXFxuXFxcIiwgbmlkLCB0bmlkKTtcXG4gIDMwOlxcdFxcbiAgMzE6XFx0XFx0bm9kZV9kYXRhW25pZF0gPSBfX3ZhKG5kX3BhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTA6MjEuODkwNjYzMzU3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMzE4OTgzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczogKipIYW5nIG9uIGEgc2Vjb25kLCBkb2VzIGBtZW1ibG9ja19waHlzX2FsbG9jX3RyeV9uaWRgIGFjdHVhbGx5IHplcm8gb3V0IHRoZSBtZW1vcnkgaXQgYWxsb2NhdGVzIGJ5IGRlZmF1bHQ/KiogVGhhdCdzIGltcG9ydGFudCB0byBrbm93LiBJZiBpdCBkb2VzLCB0aGF0J3Mgb25lIGxlc3MgdGhpbmcgSSBoYXZlIHRvIHdvcnJ5IGFib3V0LiBJZiBub3QsIEknbGwgbmVlZCB0byBleHBsaWNpdGx5IHplcm8gaXQgbXlzZWxmIHdoaWNoIGNvdWxkIGludHJvZHVjZSBzb21lIGNvbXBsZXhpdHkuXG5cblNvLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIExldCdzIGRpdmUgcmlnaHQgaW50byB0aGUgY29kZSBmb3IgYG1lbWJsb2NrX3BoeXNfYWxsb2NfdHJ5X25pZGAgYW5kIHNlZSB3aGF0J3Mgd2hhdC4gR290dGEgY29uZmlybSB0aGlzIGJlaGF2aW9yIGJlZm9yZSBJIG1vdmUgZm9yd2FyZCwgbm8gYXNzdW1wdGlvbnMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NzUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjEwOjI0LjkyMjU2NDEyMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2NDM4ODg0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1ibG9ja19waHlzX2FsbG9jX3RyeV9uaWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1ibG9jay5oPTQwMj1waHlzX2FkZHJfdCBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQocGh5c19hZGRyX3Qgc2l6ZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC00MDQtXFx0XFx0XFx0XFx0ICAgICAgcGh5c19hZGRyX3QgZW5kLCBpbnQgbmlkLCBib29sIGV4YWN0X25pZCk7XFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjQwNTpwaHlzX2FkZHJfdCBtZW1ibG9ja19waHlzX2FsbG9jX3RyeV9uaWQocGh5c19hZGRyX3Qgc2l6ZSwgcGh5c19hZGRyX3QgYWxpZ24sIGludCBuaWQpO1xcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC00MDYtXFxuLS1cXG5tbS9tZW1ibG9jay5jPTE2MjE9cGh5c19hZGRyX3QgX19pbml0IG1lbWJsb2NrX3BoeXNfYWxsb2NfcmFuZ2UocGh5c19hZGRyX3Qgc2l6ZSxcXG4tLVxcbm1tL21lbWJsb2NrLmMtMTYzMy0vKipcXG5tbS9tZW1ibG9jay5jOjE2MzQ6ICogbWVtYmxvY2tfcGh5c19hbGxvY190cnlfbmlkIC0gYWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgZnJvbSBzcGVjaWZpZWQgTlVNQSBub2RlXFxubW0vbWVtYmxvY2suYy0xNjM1LSAqIEBzaXplOiBzaXplIG9mIG1lbW9yeSBibG9jayB0byBiZSBhbGxvY2F0ZWQgaW4gYnl0ZXNcXG4tLVxcbm1tL21lbWJsb2NrLmMtMTY0NS0gKi9cXG5tbS9tZW1ibG9jay5jOjE2NDY6cGh5c19hZGRyX3QgX19pbml0IG1lbWJsb2NrX3BoeXNfYWxsb2NfdHJ5X25pZChwaHlzX2FkZHJfdCBzaXplLCBwaHlzX2FkZHJfdCBhbGlnbiwgaW50IG5pZClcXG5tbS9tZW1ibG9jay5jLTE2NDcte1xcbi0tXFxubW0vbnVtYS5jPTEyPXZvaWQgX19pbml0IGFsbG9jX25vZGVfZGF0YShpbnQgbmlkKVxcbi0tXFxubW0vbnVtYS5jLTE4LVxcdC8qIEFsbG9jYXRlIG5vZGUgZGF0YS4gIFRyeSBub2RlLWxvY2FsIG1lbW9yeSBhbmQgdGhlbiBhbnkgbm9kZS4gKi9cXG5tbS9udW1hLmM6MTk6XFx0bmRfcGEgPSBtZW1ibG9ja19waHlzX2FsbG9jX3RyeV9uaWQobmRfc2l6ZSwgU01QX0NBQ0hFX0JZVEVTLCBuaWQpO1xcbm1tL251bWEuYy0yMC1cXHRpZiAoIW5kX3BhKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxMDoyNi42ODY5NjEzNjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0MzEyNzk5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbW0vbWVtYmxvY2suY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgbW0vbWVtYmxvY2suY2AgZmlsZSwgc3BlY2lmaWNhbGx5IGxpbmVzIDE2NDYgdGhyb3VnaCAxNjYwLiBNeSBpbnRlcm5hbCBwYXJzaW5nIGVuZ2luZSBpcyBhbHJlYWR5IGNodXJuaW5nLiBJIGtub3cgdGhpcyBmaWxlIGlzIGNydWNpYWwgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgdGhvc2Ugc3BlY2lmaWMgbGluZXMgcHJvYmFibHkgZGVhbCB3aXRoIGEgcHJldHR5IGltcG9ydGFudCBhc3BlY3Qgb2YgdGhlIG1lbWJsb2NrJ3Mgb3BlcmF0aW9uLiBJJ20gZ3Vlc3NpbmcgaXQncyByZWxhdGVkIHRvIGFsbG9jYXRpb24sIGZyZWVpbmcsIG9yIG1heWJlIGluaXRpYWxpemF0aW9uLCBnaXZlbiB0aGUgY29udGV4dC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCBwZWFybHMgb2Ygd2lzZG9tIHRoaXMgc2VjdGlvbiBob2xkcy4gSSdtIGV4cGVjdGluZyBzb21ldGhpbmcgbnVhbmNlZCwgcG90ZW50aWFsbHkgaW52b2x2aW5nIGFkZHJlc3NpbmcgY29tcGxleCBoYXJkd2FyZSBpbnRlcmFjdGlvbnMgb3IgcmVzb3VyY2UgY29uc3RyYWludHMsIG9yIHNvbWUgY2xldmVyIGJpdCBtYW5pcHVsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxMDozMS4wMzAwOTMwOTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWJsb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY0NixcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTY0NjpcXHRwaHlzX2FkZHJfdCBfX2luaXQgbWVtYmxvY2tfcGh5c19hbGxvY190cnlfbmlkKHBoeXNfYWRkcl90IHNpemUsIHBoeXNfYWRkcl90IGFsaWduLCBpbnQgbmlkKVxcbjE2NDc6XFx0e1xcbjE2NDg6XFx0XFx0cmV0dXJuIG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBhbGlnbiwgMCxcXG4xNjQ5OlxcdFxcdFxcdFxcdFxcdFxcdE1FTUJMT0NLX0FMTE9DX0FDQ0VTU0lCTEUsIG5pZCwgZmFsc2UpO1xcbjE2NTA6XFx0fVxcbjE2NTE6XFx0XFxuMTY1MjpcXHQvKipcXG4xNjUzOlxcdCAqIG1lbWJsb2NrX2FsbG9jX2ludGVybmFsIC0gYWxsb2NhdGUgYm9vdCBtZW1vcnkgYmxvY2tcXG4xNjU0OlxcdCAqIEBzaXplOiBzaXplIG9mIG1lbW9yeSBibG9jayB0byBiZSBhbGxvY2F0ZWQgaW4gYnl0ZXNcXG4xNjU1OlxcdCAqIEBhbGlnbjogYWxpZ25tZW50IG9mIHRoZSByZWdpb24gYW5kIGJsb2NrJ3Mgc2l6ZVxcbjE2NTY6XFx0ICogQG1pbl9hZGRyOiB0aGUgbG93ZXIgYm91bmQgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gYWxsb2NhdGUgKHBoeXMgYWRkcmVzcylcXG4xNjU3OlxcdCAqIEBtYXhfYWRkcjogdGhlIHVwcGVyIGJvdW5kIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGFsbG9jYXRlIChwaHlzIGFkZHJlc3MpXFxuMTY1ODpcXHQgKiBAbmlkOiBuaWQgb2YgdGhlIGZyZWUgYXJlYSB0byBmaW5kLCAlTlVNQV9OT19OT0RFIGZvciBhbnkgbm9kZVxcbjE2NTk6XFx0ICogQGV4YWN0X25pZDogY29udHJvbCB0aGUgYWxsb2NhdGlvbiBmYWxsIGJhY2sgdG8gb3RoZXIgbm9kZXNcXG4xNjYwOlxcdCAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjEwOjMxLjAzMDI1OTg3MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDc0OTM2MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipNZW1vcnkgQWxsb2NhdGlvbiBDb25jZXJucyoqXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gaXMgbXkgdW5kZXJzdGFuZGluZyBvZiBgbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkYCBjb3JyZWN0PyBJIHRob3VnaHQgaXQgKmNsZWFyZWQqIHRoZSBtZW1vcnkgaXQgYWxsb2NhdGVzLCBidXQgbm93IEknbSBoYXZpbmcgYSBuYWdnaW5nIGRvdWJ0LiBJIG5lZWQgdG8gdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbi4gSWYgaXQgZG9lc24ndCBjbGVhciB0aGUgbWVtb3J5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHN0YXRlIGl0IGxlYXZlcyBpdCBpbiwgYW5kIHdoZXRoZXIgb3Igbm90IHRoYXQgaW50cm9kdWNlcyBhbnkgc2VjdXJpdHkgb3Igc3RhYmlsaXR5IGNvbmNlcm5zIGluIHRoZSBzeXN0ZW0gSSdtIHdvcmtpbmcgb24uIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBhbmQgZG91YmxlLWNoZWNrIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBjb2RlIGZvciBib3RoIGBtZW1ibG9ja19hbGxvY19pbnRlcm5hbGAgYW5kIGBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuZGFtZW50YWwgZGlmZmVyZW5jZSBhbmQgY29udHJvbCBiZXR3ZWVuIHRoZSB0d28uIE9uZSBvZiB0aGVzZSBmdW5jdGlvbnMgbXVzdCBoYW5kbGUgbWVtb3J5IGNsZWFyaW5nLCBhbmQgaWYgaXQncyBub3QgdGhlIG9uZSBJICp0aG91Z2h0KiBpdCB3YXMsIEkgbmVlZCB0byBhZGp1c3QgbXkgYXBwcm9hY2ggYWNjb3JkaW5nbHkuIFRoaXMgc2VlbXMgbGlrZSBhIGNyaXRpY2FsIGRldGFpbCBJIGNhbid0IGFmZm9yZCB0byBnZXQgd3JvbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MzgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjEwOjM2LjUwNTE5ODQ4MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1ODMyNzAwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1ibG9ja19hbGxvY19yYW5nZV9uaWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1ibG9jay5oPTQwMD1waHlzX2FkZHJfdCBtZW1ibG9ja19waHlzX2FsbG9jX3JhbmdlKHBoeXNfYWRkcl90IHNpemUsIHBoeXNfYWRkcl90IGFsaWduLFxcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC00MDEtXFx0XFx0XFx0XFx0ICAgICAgcGh5c19hZGRyX3Qgc3RhcnQsIHBoeXNfYWRkcl90IGVuZCk7XFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjQwMjpwaHlzX2FkZHJfdCBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQocGh5c19hZGRyX3Qgc2l6ZSxcXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtNDAzLVxcdFxcdFxcdFxcdCAgICAgIHBoeXNfYWRkcl90IGFsaWduLCBwaHlzX2FkZHJfdCBzdGFydCxcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NjcyPXN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTcyNC1cXHRcXHRzaXplID0gc2NyYXRjaF9zaXplX25vZGUobmlkKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjcyNTpcXHRcXHRhZGRyID0gbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHNpemUsIENNQV9NSU5fQUxJR05NRU5UX0JZVEVTLFxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNzI2LVxcdFxcdFxcdFxcdFxcdFxcdDAsIE1FTUJMT0NLX0FMTE9DX0FDQ0VTU0lCTEUsXFxuLS1cXG5tbS9jbWEuYz0zODc9c3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBjbWFfYWxsb2NfbWVtKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsXFxuLS1cXG5tbS9jbWEuYy00MDItXFx0XFx0bWVtYmxvY2tfc2V0X2JvdHRvbV91cCh0cnVlKTtcXG5tbS9jbWEuYzo0MDM6XFx0XFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBhbGlnbiwgU1pfNEcsIGxpbWl0LFxcbm1tL2NtYS5jLTQwNC1cXHRcXHRcXHRcXHRcXHRcXHRuaWQsIHRydWUpO1xcbi0tXFxubW0vY21hLmMtNDIyLVxcdFxcdGlmIChiYXNlIFxcdTAwM2MgaGlnaG1lbSBcXHUwMDI2XFx1MDAyNiBsaW1pdCBcXHUwMDNlIGhpZ2htZW0pIHtcXG5tbS9jbWEuYzo0MjM6XFx0XFx0XFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBhbGlnbiwgaGlnaG1lbSxcXG5tbS9jbWEuYy00MjQtXFx0XFx0XFx0XFx0XFx0XFx0XFx0bGltaXQsIG5pZCwgdHJ1ZSk7XFxuLS1cXG5tbS9jbWEuYy00MjktXFx0aWYgKCFhZGRyKVxcbm1tL2NtYS5jOjQzMDpcXHRcXHRhZGRyID0gbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHNpemUsIGFsaWduLCBiYXNlLCBsaW1pdCwgbmlkLFxcbm1tL2NtYS5jLTQzMS1cXHRcXHRcXHRcXHRcXHRcXHR0cnVlKTtcXG4tLVxcbm1tL21lbWJsb2NrLmMtOTYtICogbWVtb3J5IHJhbmdlcyBhbmQgdGhlIGZhbGxiYWNrIG1ldGhvZHMuIENvbnN1bHQgdGhlIGRvY3VtZW50YXRpb25cXG5tbS9tZW1ibG9jay5jOjk3OiAqIG9mIG1lbWJsb2NrX2FsbG9jX2ludGVybmFsKCkgYW5kIG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZCgpXFxubW0vbWVtYmxvY2suYy05OC0gKiBmdW5jdGlvbnMgZm9yIG1vcmUgZWxhYm9yYXRlIGRlc2NyaXB0aW9uLlxcbi0tXFxubW0vbWVtYmxvY2suYz0xNDkxPWludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfc2V0X25vZGUocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcXG4tLVxcbm1tL21lbWJsb2NrLmMtMTUxMC0vKipcXG5tbS9tZW1ibG9jay5jOjE1MTE6ICogbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkIC0gYWxsb2NhdGUgYm9vdCBtZW1vcnkgYmxvY2tcXG5tbS9tZW1ibG9jay5jLTE1MTItICogQHNpemU6IHNpemUgb2YgbWVtb3J5IGJsb2NrIHRvIGJlIGFsbG9jYXRlZCBpbiBieXRlc1xcbi0tXFxubW0vbWVtYmxvY2suYy0xNTM0LSAqL1xcbm1tL21lbWJsb2NrLmM6MTUzNTpwaHlzX2FkZHJfdCBfX2luaXQgbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHBoeXNfYWRkcl90IHNpemUsXFxubW0vbWVtYmxvY2suYy0xNTM2LVxcdFxcdFxcdFxcdFxcdHBoeXNfYWRkcl90IGFsaWduLCBwaHlzX2FkZHJfdCBzdGFydCxcXG4tLVxcbm1tL21lbWJsb2NrLmM9MTYyMT1waHlzX2FkZHJfdCBfX2luaXQgbWVtYmxvY2tfcGh5c19hbGxvY19yYW5nZShwaHlzX2FkZHJfdCBzaXplLFxcbi0tXFxubW0vbWVtYmxvY2suYy0xNjI4LVxcdFxcdCAgICAgKHZvaWQgKilfUkVUX0lQXyk7XFxubW0vbWVtYmxvY2suYzoxNjI5OlxcdHJldHVybiBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQoc2l6ZSwgYWxpZ24sIHN0YXJ0LCBlbmQsIE5VTUFfTk9fTk9ERSxcXG5tbS9tZW1ibG9jay5jLTE2MzAtXFx0XFx0XFx0XFx0XFx0ZmFsc2UpO1xcbi0tXFxubW0vbWVtYmxvY2suYz0xNjQ2PXBoeXNfYWRkcl90IF9faW5pdCBtZW1ibG9ja19waHlzX2FsbG9jX3RyeV9uaWQocGh5c19hZGRyX3Qgc2l6ZSwgcGh5c19hZGRyX3QgYWxpZ24sIGludCBuaWQpXFxubW0vbWVtYmxvY2suYy0xNjQ3LXtcXG5tbS9tZW1ibG9jay5jOjE2NDg6XFx0cmV0dXJuIG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBhbGlnbiwgMCxcXG5tbS9tZW1ibG9jay5jLTE2NDktXFx0XFx0XFx0XFx0XFx0TUVNQkxPQ0tfQUxMT0NfQUNDRVNTSUJMRSwgbmlkLCBmYWxzZSk7XFxuLS1cXG5tbS9tZW1ibG9jay5jLTE2NjAtICpcXG5tbS9tZW1ibG9jay5jOjE2NjE6ICogQWxsb2NhdGVzIG1lbW9yeSBibG9jayB1c2luZyBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQoKSBhbmRcXG5tbS9tZW1ibG9jay5jLTE2NjItICogY29udmVydHMgdGhlIHJldHVybmVkIHBoeXNpY2FsIGFkZHJlc3MgdG8gdmlydHVhbC5cXG4tLVxcbm1tL21lbWJsb2NrLmMtMTY2Ni0gKiBhcyBub2RlIGFuZCBtaXJyb3JlZCBtZW1vcnkgd2lsbCBiZSBoYW5kbGVkIGFnYWluIGluXFxubW0vbWVtYmxvY2suYzoxNjY3OiAqIG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZCgpLlxcbm1tL21lbWJsb2NrLmMtMTY2OC0gKlxcbi0tXFxubW0vbWVtYmxvY2suYz0xNjcyPXN0YXRpYyB2b2lkICogX19pbml0IG1lbWJsb2NrX2FsbG9jX2ludGVybmFsKFxcbi0tXFxubW0vbWVtYmxvY2suYy0xNjgyLVxcbm1tL21lbWJsb2NrLmM6MTY4MzpcXHRhbGxvYyA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBhbGlnbiwgbWluX2FkZHIsIG1heF9hZGRyLCBuaWQsXFxubW0vbWVtYmxvY2suYy0xNjg0LVxcdFxcdFxcdFxcdFxcdGV4YWN0X25pZCk7XFxuLS1cXG5tbS9tZW1ibG9jay5jLTE2ODctXFx0aWYgKCFhbGxvYyBcXHUwMDI2XFx1MDAyNiBtaW5fYWRkcilcXG5tbS9tZW1ibG9jay5jOjE2ODg6XFx0XFx0YWxsb2MgPSBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQoc2l6ZSwgYWxpZ24sIDAsIG1heF9hZGRyLCBuaWQsXFxubW0vbWVtYmxvY2suYy0xNjg5LVxcdFxcdFxcdFxcdFxcdFxcdGV4YWN0X25pZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjEwOjM4LjI2MzU1NDQ2NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzI4OTc1ODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE5vZGUgRGF0YSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gYG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZGAgZ2l2ZXMgdXMgYSAqcGh5c2ljYWwqIGFkZHJlc3MsIHJpZ2h0PyBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBUaGVuLCBsZXQncyBsb29rIGF0IGBhbGxvY19ub2RlX2RhdGFgLiBBaGEhIEl0IGNhbGxzIGBtZW1ibG9ja19waHlzX2FsbG9jX3RyeV9uaWRgLiBTbywgaXQncyBkZWZpbml0ZWx5IHRyeWluZyB0byBhbGxvY2F0ZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IHVzaW5nIGBtZW1ibG9ja2AsIGFuZCBpdCdzIGF0dGVtcHRpbmcgdGhpcyBmb3IgYSBzcGVjaWZpYyBub2RlIElEIChgbmlkYCkuIElmIHRoYXQgZmFpbHMsIGl0IHBhbmljcyDigJMgYSBwcmV0dHkgZm9yY2VmdWwgaW5kaWNhdG9yLiBJdCB0aGVuIGxvZ3MgdGhlIGFsbG9jYXRpb24sIGluZGljYXRpbmcgdGhlIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UuIEl0IGNhbGN1bGF0ZXMgdGhlIG5vZGUgSUQgb2YgdGhlIGFsbG9jYXRlZCBwaHlzaWNhbCBhZGRyZXNzIHRocm91Z2ggYGVhcmx5X3Bmbl90b19uaWRgLCB0byBlbnN1cmUgd2hhdCBub2RlIHRoZSBtZW1vcnkgaXMgb24uIENyaXRpY2FsbHksIGFuZCB0aGlzIGlzIHdoYXQgSSB3YXMgbG9va2luZyBmb3IsIGl0IGFzc2lnbnMgdGhlIHZpcnR1YWwgYWRkcmVzcyB1c2luZyBgX192YShuZF9wYSlgIHRvIGBub2RlX2RhdGFbbmlkXWAuIEFuZCBoZXJlIGl0IGlzLi4uIHRoZXJlIGl0IGlzISBgbWVtc2V0YCEgSXQgKmRvZXMqIHplcm8gdGhlIGFsbG9jYXRlZCBtZW1vcnkgdXNpbmcgYG1lbXNldChub2RlX2RhdGFbbmlkXSwgMCwgc2l6ZW9mKHBnX2RhdGFfdCkpYC4gT2theSwgc28gdGhlIGBwZ19kYXRhX3RgIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCB0byB6ZXJvIGFmdGVyIHRoZSBwaHlzaWNhbCBhbGxvY2F0aW9uLiBNYWtlcyBzZW5zZS4gVGhhdCdzIGEgY3JpdGljYWwgaW5pdGlhbGl6YXRpb24gc3RlcC4gR29vZC4gTm93LCBJIGhhdmUgYSBwcmV0dHkgY2xlYXIgcGljdHVyZSBvZiB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mzc4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjEwOjQzLjU5MjUzMzk3N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9udW1hLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjU6XFx0XFx0cHJfaW5mbyhcXFwiTk9ERV9EQVRBKCVkKSBhbGxvY2F0ZWQgW21lbSAlIzAxMEx4LSUjMDEwTHhdXFxcXG5cXFwiLCBuaWQsXFxuICAyNjpcXHRcXHRcXHRuZF9wYSwgbmRfcGEgKyBuZF9zaXplIC0gMSk7XFxuICAyNzpcXHRcXHR0bmlkID0gZWFybHlfcGZuX3RvX25pZChuZF9wYSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG4gIDI4OlxcdFxcdGlmICh0bmlkICE9IG5pZClcXG4gIDI5OlxcdFxcdFxcdHByX2luZm8oXFxcIiAgICBOT0RFX0RBVEEoJWQpIG9uIG5vZGUgJWRcXFxcblxcXCIsIG5pZCwgdG5pZCk7XFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdG5vZGVfZGF0YVtuaWRdID0gX192YShuZF9wYSk7XFxuICAzMjpcXHRcXHRtZW1zZXQoTk9ERV9EQVRBKG5pZCksIDAsIHNpemVvZihwZ19kYXRhX3QpKTtcXG4gIDMzOlxcdH1cXG4gIDM0OlxcdFxcbiAgMzU6XFx0dm9pZCBfX2luaXQgYWxsb2Nfb2ZmbGluZV9ub2RlX2RhdGEoaW50IG5pZClcXG4gIDM2OlxcdHtcXG4gIDM3OlxcdFxcdHBnX2RhdGFfdCAqcGdkYXQ7XFxuICAzODpcXHRcXHRub2RlX2RhdGFbbmlkXSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZigqcGdkYXQpLCBTTVBfQ0FDSEVfQllURVMpO1xcbiAgMzk6XFx0fVxcbiAgNDA6XFx0XFxuICA0MTpcXHQvKiBTdHViIGZ1bmN0aW9uczogKi9cXG4gIDQyOlxcdFxcbiAgNDM6XFx0I2lmbmRlZiBtZW1vcnlfYWRkX3BoeXNhZGRyX3RvX25pZFxcbiAgNDQ6XFx0aW50IG1lbW9yeV9hZGRfcGh5c2FkZHJfdG9fbmlkKHU2NCBzdGFydClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTA6NDMuNTkyNjAyNDM3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3ODk1MTkxMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTWVtb3J5IEluaXRpYWxpemF0aW9uIGFuZCBOb2RlIERhdGE6IEEgUXVpY2sgUmV2aWV3KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCwgYWhhISwgSSBzZWUgdGhlIGBtZW1zZXRgIHJpZ2h0IHRoZXJlIG9uIGxpbmUgMzIuIEl0J3MgaW5pdGlhbGl6aW5nIGBOT0RFX0RBVEEobmlkKWAgd2l0aCB6ZXJvcywgd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlIGBwZ19kYXRhX3RgIHN0cnVjdHVyZS4gVGhhdCBjb25maXJtcyB0aGUgZXhwZWN0YXRpb24gdGhhdCBgcGdkYXRgIGlzIGluZGVlZCBhbHdheXMgemVyby1pbml0aWFsaXplZCBhdCB0aGlzIHBvaW50LlxuXG5CdXQgSSdtIGFsc28gdGhpbmtpbmcuLi4gZGlkbid0IHdlIHVzZSBgYWxsb2Nfb2ZmbGluZV9ub2RlX2RhdGFgIHJlY2VudGx5PyBJIGtub3cgdGhhdCBmdW5jdGlvbiB1c2VzIGBtZW1ibG9ja19hbGxvY19vcl9wYW5pY2AuIE5vdywgdGhhdCBvbmUgaXMgaW1wb3J0YW50LiBJIHRoaW5rIEkgcmVtZW1iZXIgdGhhdCBgbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWNgIGV2ZW50dWFsbHkgY2FsbHMgYG1lbWJsb2NrX2FsbG9jYCB1bmRlcm5lYXRoLiBBbmQgaWYgbXkgbWVtb3J5IGlzIHJpZ2h0LCBgbWVtYmxvY2tfYWxsb2NgIGFsc28gemVyb2VzIG91dCB0aGUgbWVtb3J5IGl0IGFsbG9jYXRlcy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgc2hvdWxkIHJlYWxseSBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG1lbWJsb2NrX2FsbG9jX29yX3BhbmljYCBpdHNlbGYuIEJlc3QgdG8gY29uZmlybSB0aGF0IG15IGFzc3VtcHRpb25zIGFyZSBzb3VuZCwgeW91IGtub3c/IEl0J3MgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzA2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxMDo0OS4zODIxMjQ3NTJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTEwMDMxODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA2MDggbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfY2lhLmM9MzI4PWNpYV9wcmVwYXJlX3RiaWFfd29ya2Fyb3VuZChpbnQgd2luZG93KVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9jaWEuYy0zMzMtXFx0LyogVXNlIG1pbmltYWwgMUsgbWFwLiAqL1xcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfY2lhLmM6MzM0OlxcdHBwdGUgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhDSUFfQlJPS0VOX1RCSUFfU0laRSwgMzI3NjgpO1xcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfY2lhLmMtMzM1LVxcdHB0ZSA9ICh2aXJ0X3RvX3BoeXMocHB0ZSkgXFx1MDAzZVxcdTAwM2UgKFBBR0VfU0hJRlQgLSAxKSkgfCAxO1xcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYz03OT1ta19yZXNvdXJjZV9uYW1lKGludCBwZSwgaW50IHBvcnQsIGNoYXIgKnN0cilcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtODYtXFx0c3ogKz0gMTsgLyogTlVMIHRlcm1pbmF0b3IgKi9cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jOjg3OlxcdG5hbWUgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzeiwgU01QX0NBQ0hFX0JZVEVTKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jLTg4LVxcdHN0cnNjcHkobmFtZSwgdG1wLCBzeik7XFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jPTExMT1hbGxvY19pbzcodW5zaWduZWQgaW50IHBlKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYy0xMjEtXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYzoxMjI6XFx0aW83ID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZW9mKCppbzcpLCBTTVBfQ0FDSEVfQllURVMpO1xcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtMTIzLVxcdGlvNy1cXHUwMDNlcGUgPSBwZTtcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jPTM5MT1hbGxvY19wY2lfY29udHJvbGxlcih2b2lkKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMtMzk0LVxcbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jOjM5NTpcXHRob3NlID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZW9mKCpob3NlKSwgU01QX0NBQ0hFX0JZVEVTKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9wY2kuYy0zOTYtXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9wY2kuYz00MDQ9YWxsb2NfcmVzb3VyY2Uodm9pZClcXG5hcmNoL2FscGhhL2tlcm5lbC9wY2kuYy00MDUte1xcbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jOjQwNjpcXHRyZXR1cm4gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSksIFNNUF9DQUNIRV9CWVRFUyk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMtNDA3LX1cXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL3BjaV9pb21tdS5jPTYwPWlvbW11X2FyZW5hX25ld19ub2RlKGludCBuaWQsIHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwgZG1hX2FkZHJfdCBiYXNlLFxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpX2lvbW11LmMtNzQtXFxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpX2lvbW11LmM6NzU6XFx0YXJlbmEgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YoKmFyZW5hKSwgU01QX0NBQ0hFX0JZVEVTKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9wY2lfaW9tbXUuYzo3NjpcXHRhcmVuYS1cXHUwMDNlcHRlcyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKG1lbV9zaXplLCBhbGlnbik7XFxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpX2lvbW11LmMtNzctXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvc2V0dXAuYz04NTU9c3RhdGljIHZvaWQgX19pbml0IHJlcXVlc3Rfc3RhbmRhcmRfcmVzb3VyY2VzKGNvbnN0IHN0cnVjdCBtYWNoaW5lX2Rlc2MgKm1kZXNjKVxcbi0tXFxuYXJjaC9hcm0va2VybmVsL3NldHVwLmMtODgyLVxcdFxcdGlmIChhcm1faGFzX2lkbWFwX2FsaWFzKCkgXFx1MDAyNlxcdTAwMjYgYm9vdF9hbGlhc19zdGFydCAhPSBJRE1BUF9JTlZBTElEX0FERFIpIHtcXG5hcmNoL2FybS9rZXJuZWwvc2V0dXAuYzo4ODM6XFx0XFx0XFx0cmVzID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZW9mKCpyZXMpLCBTTVBfQ0FDSEVfQllURVMpO1xcbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jLTg4NC1cXHRcXHRcXHRyZXMtXFx1MDAzZW5hbWUgPSBcXFwiU3lzdGVtIFJBTSAoYm9vdCBhbGlhcylcXFwiO1xcbi0tXFxuYXJjaC9hcm0va2VybmVsL3NldHVwLmMtODkwLVxcbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jOjg5MTpcXHRcXHRyZXMgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YoKnJlcyksIFNNUF9DQUNIRV9CWVRFUyk7XFxuYXJjaC9hcm0va2VybmVsL3NldHVwLmMtODkyLVxcdFxcdHJlcy1cXHUwMDNlbmFtZSAgPSBcXFwiU3lzdGVtIFJBTVxcXCI7XFxuLS1cXG5hcmNoL2FybS9tbS9tbXUuYz03MjA9c3RhdGljIHZvaWQgX19pbml0ICplYXJseV9hbGxvYyh1bnNpZ25lZCBsb25nIHN6KVxcbmFyY2gvYXJtL21tL21tdS5jLTcyMS17XFxuYXJjaC9hcm0vbW0vbW11LmM6NzIyOlxcdHJldHVybiBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzeiwgc3opO1xcbmFyY2gvYXJtL21tL21tdS5jLTcyMy1cXG4tLVxcbmFyY2gvYXJtL21tL21tdS5jPTEwMDk9dm9pZCBfX2luaXQgaW90YWJsZV9pbml0KHN0cnVjdCBtYXBfZGVzYyAqaW9fZGVzYywgaW50IG5yKVxcbi0tXFxuYXJjaC9hcm0vbW0vbW11LmMtMTAxNy1cXG5hcmNoL2FybS9tbS9tbXUuYzoxMDE4OlxcdHN2bSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZigqc3ZtKSAqIG5yLCBfX2FsaWdub2ZfXygqc3ZtKSk7XFxuYXJjaC9hcm0vbW0vbW11LmMtMTAxOS1cXG4tLVxcbmFyY2gvYXJtL21tL21tdS5jPTEwMzQ9dm9pZCBfX2luaXQgdm1fcmVzZXJ2ZV9hcmVhX2Vhcmx5KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLFxcbi0tXFxuYXJjaC9hcm0vbW0vbW11LmMtMTAzOS1cXG5hcmNoL2FybS9tbS9tbXUuYzoxMDQwOlxcdHN2bSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZigqc3ZtKSwgX19hbGlnbm9mX18oKnN2bSkpO1xcbmFyY2gvYXJtL21tL21tdS5jLTEwNDEtXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jPTIxMD1zdGF0aWMgdm9pZCBfX2luaXQgcmVxdWVzdF9zdGFuZGFyZF9yZXNvdXJjZXModm9pZClcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3NldHVwLmMtMjI1LVxcdHJlc19zaXplID0gbnVtX3N0YW5kYXJkX3Jlc291cmNlcyAqIHNpemVvZigqc3RhbmRhcmRfcmVzb3VyY2VzKTtcXG5hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jOjIyNjpcXHRzdGFuZGFyZF9yZXNvdXJjZXMgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhyZXNfc2l6ZSwgU01QX0NBQ0hFX0JZVEVTKTtcXG5hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jLTIyNy1cXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jPTQyMT1zdGF0aWMgdm9pZCBfX2luaXQgcmVzb3VyY2VfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDM2LVxcdHJlc19zaXplID0gbnVtX3N0YW5kYXJkX3Jlc291cmNlcyAqIHNpemVvZigqc3RhbmRhcmRfcmVzb3VyY2VzKTtcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYzo0Mzc6XFx0c3RhbmRhcmRfcmVzb3VyY2VzID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMocmVzX3NpemUsIFNNUF9DQUNIRV9CWVRFUyk7XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDM4LVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jPTE2MD1wdGVfdCAqIF9faW5pdCBwb3B1bGF0ZV9rZXJuZWxfcHRlKHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL21tL2luaXQuYy0xNjctXFx0aWYgKHA0ZF9ub25lKHA0ZHBfZ2V0KHA0ZCkpKSB7XFxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jOjE2ODpcXHRcXHRwdWQgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQQUdFX1NJWkUsIFBBR0VfU0laRSk7XFxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jLTE2OS1cXHRcXHRwNGRfcG9wdWxhdGUoXFx1MDAyNmluaXRfbW0sIHA0ZCwgcHVkKTtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL21tL2luaXQuYy0xNzYtXFx0aWYgKHB1ZF9ub25lKHB1ZHBfZ2V0KHB1ZCkpKSB7XFxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jOjE3NzpcXHRcXHRwbWQgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQQUdFX1NJWkUsIFBBR0VfU0laRSk7XFxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jLTE3OC1cXHRcXHRwdWRfcG9wdWxhdGUoXFx1MDAyNmluaXRfbW0sIHB1ZCwgcG1kKTtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL21tL2luaXQuYy0xODctXFxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jOjE4ODpcXHRcXHRwdGUgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQQUdFX1NJWkUsIFBBR0VfU0laRSk7XFxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jLTE4OS1cXHRcXHRwbWRfcG9wdWxhdGVfa2VybmVsKFxcdTAwMjZpbml0X21tLCBwbWQsIHB0ZSk7XFxuLS1cXG5hcmNoL202OGsvbW0vbWNmbW11LmM9MzY9dm9pZCBfX2luaXQgcGFnaW5nX2luaXQodm9pZClcXG4tLVxcbmFyY2gvbTY4ay9tbS9tY2ZtbXUuYy00OC1cXHRzaXplID0gKHNpemUgKyBQQUdFX1NJWkUpIFxcdTAwMjYgfihQQUdFX1NJWkUtMSk7XFxuYXJjaC9tNjhrL21tL21jZm1tdS5jOjQ5OlxcdG5leHRfcGd0YWJsZSA9ICh1bnNpZ25lZCBsb25nKSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplLCBQQUdFX1NJWkUpO1xcbmFyY2gvbTY4ay9tbS9tY2ZtbXUuYy01MC1cXG4tLVxcbmFyY2gvbTY4ay9tbS9zdW4zbW11LmM9MzY9dm9pZCBfX2luaXQgcGFnaW5nX2luaXQodm9pZClcXG4tLVxcbmFyY2gvbTY4ay9tbS9zdW4zbW11LmMtNTMtXFxuYXJjaC9tNjhrL21tL3N1bjNtbXUuYzo1NDpcXHRuZXh0X3BndGFibGUgPSAodW5zaWduZWQgbG9uZyltZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplLCBQQUdFX1NJWkUpO1xcbmFyY2gvbTY4ay9tbS9zdW4zbW11LmMtNTUtXFx0Ym9vdG1lbV9lbmQgPSAobmV4dF9wZ3RhYmxlICsgc2l6ZSArIFBBR0VfU0laRSkgXFx1MDAyNiBQQUdFX01BU0s7XFxuLS1cXG5hcmNoL202OGsvc3VuMy9zdW4zZHZtYS5jPTIzNT12b2lkIF9faW5pdCBkdm1hX2luaXQodm9pZClcXG4tLVxcbmFyY2gvbTY4ay9zdW4zL3N1bjNkdm1hLmMtMjU0LVxcbmFyY2gvbTY4ay9zdW4zL3N1bjNkdm1hLmM6MjU1OlxcdGlvbW11X3VzZSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKElPTU1VX1RPVEFMX0VOVFJJRVMgKiBzaXplb2YodW5zaWduZWQgbG9uZyksXFxuYXJjaC9tNjhrL3N1bjMvc3VuM2R2bWEuYy0yNTYtXFx0XFx0XFx0XFx0ICAgU01QX0NBQ0hFX0JZVEVTKTtcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYz02ODM9c3RhdGljIHZvaWQgX19pbml0IHJlc291cmNlX2luaXQodm9pZClcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy03MDAtXFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jOjcwMTpcXHRcXHRyZXMgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSwgU01QX0NBQ0hFX0JZVEVTKTtcXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNzAyLVxcbi0tXFxuYXJjaC9taXBzL21tL2luaXQuYz01OT12b2lkIF9faW5pdCBhcmNoX3NldHVwX3plcm9fcGFnZXModm9pZClcXG4tLVxcbmFyY2gvbWlwcy9tbS9pbml0LmMtNjctXFxuYXJjaC9taXBzL21tL2luaXQuYzo2ODpcXHRlbXB0eV96ZXJvX3BhZ2UgPSAodW5zaWduZWQgbG9uZyltZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2Mgb3JkZXIsIFBBR0VfU0laRSk7XFxuYXJjaC9taXBzL21tL2luaXQuYy02OS1cXG4tLVxcbmFyY2gvb3BlbnJpc2MvbW0vaW9yZW1hcC5jPTM0PXB0ZV90IF9fcmVmICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmFyY2gvb3BlbnJpc2MvbW0vaW9yZW1hcC5jLTQwLVxcdH0gZWxzZSB7XFxuYXJjaC9vcGVucmlzYy9tbS9pb3JlbWFwLmM6NDE6XFx0XFx0cHRlID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUEFHRV9TSVpFLCBQQUdFX1NJWkUpO1xcbmFyY2gvb3BlbnJpc2MvbW0vaW9yZW1hcC5jLTQyLVxcdH1cXG4tLVxcbmFyY2gvcGFyaXNjL21tL2luaXQuYz0zNDM9c3RhdGljIHZvaWQgX19yZWYgbWFwX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfdmFkZHIsXFxuLS1cXG5hcmNoL3BhcmlzYy9tbS9pbml0LmMtMzc5LVxcdFxcdGlmIChwdWRfbm9uZSgqcHVkKSkge1xcbmFyY2gvcGFyaXNjL21tL2luaXQuYzozODA6XFx0XFx0XFx0cG1kID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIFBNRF9UQUJMRV9PUkRFUixcXG5hcmNoL3BhcmlzYy9tbS9pbml0LmMtMzgxLVxcdFxcdFxcdFxcdFxcdCAgICAgUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIFBNRF9UQUJMRV9PUkRFUik7XFxuLS1cXG5hcmNoL3BhcmlzYy9tbS9pbml0LmMtMzg4LVxcdFxcdFxcdGlmIChwbWRfbm9uZSgqcG1kKSkge1xcbmFyY2gvcGFyaXNjL21tL2luaXQuYzozODk6XFx0XFx0XFx0XFx0cGdfdGFibGUgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQQUdFX1NJWkUsIFBBR0VfU0laRSk7XFxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTM5MC1cXHRcXHRcXHRcXHRwbWRfcG9wdWxhdGVfa2VybmVsKE5VTEwsIHBtZCwgcGdfdGFibGUpO1xcbi0tXFxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jPTY2MT1zdGF0aWMgdm9pZCBfX2luaXQgZml4bWFwX2luaXQodm9pZClcXG4tLVxcbmFyY2gvcGFyaXNjL21tL2luaXQuYy02NzMtXFx0aWYgKHB1ZF9ub25lKCpwdWQpKSB7XFxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jOjY3NDpcXHRcXHRwbWQgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2MgUE1EX1RBQkxFX09SREVSLFxcbmFyY2gvcGFyaXNjL21tL2luaXQuYy02NzUtXFx0XFx0XFx0XFx0ICAgICBQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2MgUE1EX1RBQkxFX09SREVSKTtcXG4tLVxcbmFyY2gvcGFyaXNjL21tL2luaXQuYy02ODEtXFx0ZG8ge1xcbmFyY2gvcGFyaXNjL21tL2luaXQuYzo2ODI6XFx0XFx0cHRlX3QgKnB0ZSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBBR0VfU0laRSwgUEFHRV9TSVpFKTtcXG5hcmNoL3BhcmlzYy9tbS9pbml0LmMtNjgzLVxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9kdF9jcHVfZnRycy5jPTEwNzg9c3RhdGljIGludCBfX2luaXQgZHRfY3B1X2Z0cnNfc2Nhbl9jYWxsYmFjayh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZHRfY3B1X2Z0cnMuYy0xMDk5LVxcdGR0X2NwdV9mZWF0dXJlcyA9XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9kdF9jcHVfZnRycy5jOjExMDA6XFx0XFx0bWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9kdF9jcHVfZnRycy5jLTExMDEtXFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBkdF9jcHVfZmVhdHVyZSkgKiBucl9kdF9jcHVfZmVhdHVyZXMsXFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL3BjaV8zMi5jPTIxMT1wY2lfY3JlYXRlX09GX2J1c19tYXAodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzMyLmMtMjE1LVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzMyLmM6MjE2OlxcdG9mX3Byb3AgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2Yoc3RydWN0IHByb3BlcnR5KSArIDI1NixcXG5hcmNoL3Bvd2VycGMva2VybmVsL3BjaV8zMi5jLTIxNy1cXHRcXHRcXHRcXHQgU01QX0NBQ0hFX0JZVEVTKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmM9NDUxPXZvaWQgX19pbml0IHNtcF9zZXR1cF9jcHVfbWFwcyh2b2lkKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYy00NTgtXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYzo0NTk6XFx0Y3B1X3RvX3BoeXNfaWQgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhucl9jcHVfaWRzICogc2l6ZW9mKHUzMiksXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYy00NjAtXFx0XFx0XFx0XFx0XFx0X19hbGlnbm9mX18odTMyKSk7XFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmM9MTQxPXN0YXRpYyB2b2lkICpfX2luaXQgYWxsb2Nfc3RhY2sodm9pZClcXG5hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmMtMTQyLXtcXG5hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmM6MTQzOlxcdHJldHVybiBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhUSFJFQURfU0laRSwgVEhSRUFEX0FMSUdOKTtcXG5hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmMtMTQ0LX1cXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3MzMi9tbXUuYz0zNDY9dm9pZCBfX2luaXQgTU1VX2luaXRfaHcodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3MzMi9tbXUuYy0zNzctXFx0aWYgKCBwcGNfbWQucHJvZ3Jlc3MgKSBwcGNfbWQucHJvZ3Jlc3MoXFxcImhhc2g6ZmluZCBwaWVjZVxcXCIsIDB4MzIyKTtcXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzMzIvbW11LmM6Mzc4OlxcdEhhc2ggPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhIYXNoX3NpemUsIEhhc2hfc2l6ZSk7XFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczMyL21tdS5jLTM3OS1cXHRfU0RSMSA9IF9fcGEoSGFzaCkgfCBTRFIxX0xPV19CSVRTO1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3BndGFibGUuYz0zMDQ9dm9pZCBfX2luaXQgbW11X3BhcnRpdGlvbl90YWJsZV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcGd0YWJsZS5jLTMwOS1cXHQvKiBJbml0aWFsaXplIHRoZSBQYXJ0aXRpb24gVGFibGUgd2l0aCBubyBlbnRyaWVzICovXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3BndGFibGUuYzozMTA6XFx0cGFydGl0aW9uX3RiID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMocGF0Yl9zaXplLCBwYXRiX3NpemUpO1xcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9wZ3RhYmxlLmMtMzExLVxcdHB0Y3IgPSBfX3BhKHBhcnRpdGlvbl90YikgfCAoUEFUQl9TSVpFX1NISUZUIC0gMTIpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2thc2FuL2luaXRfYm9vazNlXzY0LmM9MzI9c3RhdGljIGludCBfX2luaXQga2FzYW5fbWFwX2tlcm5lbF9wYWdlKHVuc2lnbmVkIGxvbmcgZWEsIHVuc2lnbmVkIGxvbmcgcGEsIHBncHJvdF90IHByb3QpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0va2FzYW4vaW5pdF9ib29rM2VfNjQuYy00Mi1cXHRpZiAoa2FzYW5fcHVkX3RhYmxlKCpwNGRwKSkge1xcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jOjQzOlxcdFxcdHB1ZHAgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQVURfVEFCTEVfU0laRSwgUFVEX1RBQkxFX1NJWkUpO1xcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jLTQ0LVxcdFxcdG1lbWNweShwdWRwLCBrYXNhbl9lYXJseV9zaGFkb3dfcHVkLCBQVURfVEFCTEVfU0laRSk7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0va2FzYW4vaW5pdF9ib29rM2VfNjQuYy00OC1cXHRpZiAoa2FzYW5fcG1kX3RhYmxlKCpwdWRwKSkge1xcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jOjQ5OlxcdFxcdHBtZHAgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQTURfVEFCTEVfU0laRSwgUE1EX1RBQkxFX1NJWkUpO1xcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jLTUwLVxcdFxcdG1lbWNweShwbWRwLCBrYXNhbl9lYXJseV9zaGFkb3dfcG1kLCBQTURfVEFCTEVfU0laRSk7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0va2FzYW4vaW5pdF9ib29rM2VfNjQuYy01NC1cXHRpZiAoa2FzYW5fcHRlX3RhYmxlKCpwbWRwKSkge1xcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jOjU1OlxcdFxcdHB0ZXAgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQVEVfVEFCTEVfU0laRSwgUFRFX1RBQkxFX1NJWkUpO1xcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jLTU2LVxcdFxcdG1lbWNweShwdGVwLCBrYXNhbl9lYXJseV9zaGFkb3dfcHRlLCBQVEVfVEFCTEVfU0laRSk7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0va2FzYW4vaW5pdF9ib29rM2VfNjQuYz02Nj1zdGF0aWMgdm9pZCBfX2luaXQga2FzYW5faW5pdF9waHlzX3JlZ2lvbih2b2lkICpzdGFydCwgdm9pZCAqZW5kKVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2thc2FuL2luaXRfYm9vazNlXzY0LmMtNzYtXFxuYXJjaC9wb3dlcnBjL21tL2thc2FuL2luaXRfYm9vazNlXzY0LmM6Nzc6XFx0dmEgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhrX2VuZCAtIGtfc3RhcnQsIFBBR0VfU0laRSk7XFxuYXJjaC9wb3dlcnBjL21tL2thc2FuL2luaXRfYm9vazNlXzY0LmMtNzgtXFx0Zm9yIChrX2N1ciA9IGtfc3RhcnQ7IGtfY3VyIFxcdTAwM2Mga19lbmQ7IGtfY3VyICs9IFBBR0VfU0laRSwgdmEgKz0gUEFHRV9TSVpFKVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2thc2FuL2luaXRfYm9vazNzXzY0LmM9MjI9c3RhdGljIHZvaWQgX19pbml0IGthc2FuX2luaXRfcGh5c19yZWdpb24odm9pZCAqc3RhcnQsIHZvaWQgKmVuZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szc182NC5jLTMyLVxcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szc182NC5jOjMzOlxcdHZhID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoa19lbmQgLSBrX3N0YXJ0LCBQQUdFX1NJWkUpO1xcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szc182NC5jLTM0LVxcdGZvciAoa19jdXIgPSBrX3N0YXJ0OyBrX2N1ciBcXHUwMDNjIGtfZW5kOyBrX2N1ciArPSBQQUdFX1NJWkUsIHZhICs9IFBBR0VfU0laRSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvbW11X2NvbnRleHQuYz0zNjk9dm9pZCBfX2luaXQgbW11X2NvbnRleHRfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC9tbXVfY29udGV4dC5jLTM3OS1cXHQgKi9cXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL21tdV9jb250ZXh0LmM6MzgwOlxcdGNvbnRleHRfbWFwID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoQ1RYX01BUF9TSVpFLCBTTVBfQ0FDSEVfQllURVMpO1xcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvbW11X2NvbnRleHQuYzozODE6XFx0Y29udGV4dF9tbSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZih2b2lkICopICogKExBU1RfQ09OVEVYVCArIDEpLFxcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvbW11X2NvbnRleHQuYy0zODItXFx0XFx0XFx0XFx0ICAgIFNNUF9DQUNIRV9CWVRFUyk7XFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC9tbXVfY29udGV4dC5jLTM4My1cXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU01QKSkge1xcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvbW11X2NvbnRleHQuYzozODQ6XFx0XFx0c3RhbGVfbWFwW2Jvb3RfY3B1aWRdID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoQ1RYX01BUF9TSVpFLCBTTVBfQ0FDSEVfQllURVMpO1xcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvbW11X2NvbnRleHQuYy0zODUtXFx0XFx0Y3B1aHBfc2V0dXBfc3RhdGVfbm9jYWxscyhDUFVIUF9QT1dFUlBDX01NVV9DVFhfUFJFUEFSRSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmM9NTE9dm9pZCBfX2luaXQgKmVhcmx5X2FsbG9jX3BndGFibGUodW5zaWduZWQgbG9uZyBzaXplKVxcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMtNTIte1xcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmM6NTM6XFx0cmV0dXJuIG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemUsIHNpemUpO1xcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMtNTQtXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL252cmFtLmM9NTA4PXN0YXRpYyBpbnQgX19pbml0IGNvcmU5OV9udnJhbV9zZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL252cmFtLmMtNTE2LVxcdH1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL252cmFtLmM6NTE3OlxcdG52cmFtX2ltYWdlID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoTlZSQU1fU0laRSwgU01QX0NBQ0hFX0JZVEVTKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL252cmFtLmMtNTE4LVxcdG52cmFtX2RhdGEgPSBpb3JlbWFwKGFkZHIsIE5WUkFNX1NJWkUqMik7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC5jPTE0Nz1pbnQgX19pbml0IGVhcmx5X2luaXRfZHRfc2Nhbl9yZWNvdmVyYWJsZV9yYW5nZXModW5zaWduZWQgbG9uZyBub2RlLFxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L29wYWwuYy0xODItXFx0ICovXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L29wYWwuYzoxODM6XFx0bWNfcmVjb3ZlcmFibGVfcmFuZ2UgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplLCBfX2FsaWdub2ZfXyh1NjQpKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC5jLTE4NC1cXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3NldHVwLmM9MTE0PXN0YXRpYyB2b2lkIF9faW5pdCBwcmVhbGxvYyhzdHJ1Y3QgcHMzX3ByZWFsbG9jICpwKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc2V0dXAuYy0xMTgtXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc2V0dXAuYzoxMTk6XFx0cC1cXHUwMDNlYWRkcmVzcyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHAtXFx1MDAzZXNpemUsIHAtXFx1MDAzZWFsaWduKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zZXR1cC5jLTEyMC1cXG4tLVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXNpX2JpdG1hcC5jPTExMj1pbnQgX19yZWYgbXNpX2JpdG1hcF9hbGxvYyhzdHJ1Y3QgbXNpX2JpdG1hcCAqYm1wLCB1bnNpZ25lZCBpbnQgaXJxX2NvdW50LFxcbi0tXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9tc2lfYml0bWFwLmMtMTI2LVxcdGVsc2Uge1xcbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXNpX2JpdG1hcC5jOjEyNzpcXHRcXHRibXAtXFx1MDAzZWJpdG1hcCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemUsIFNNUF9DQUNIRV9CWVRFUyk7XFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9tc2lfYml0bWFwLmMtMTI4LVxcdFxcdC8qIHRoZSBiaXRtYXAgd29uJ3QgYmUgZnJlZWQgZnJvbSBtZW1ibG9jayBhbGxvY2F0b3IgKi9cXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL3NldHVwLmM9MTM1PXN0YXRpYyB2b2lkIF9faW5pdCBpbml0X3Jlc291cmNlcyh2b2lkKVxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvc2V0dXAuYy0xNDgtXFx0bWVtX3Jlc19zeiA9IG51bV9yZXNvdXJjZXMgKiBzaXplb2YoKm1lbV9yZXMpO1xcbmFyY2gvcmlzY3Yva2VybmVsL3NldHVwLmM6MTQ5OlxcdG1lbV9yZXMgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhtZW1fcmVzX3N6LCBTTVBfQ0FDSEVfQllURVMpO1xcbmFyY2gvcmlzY3Yva2VybmVsL3NldHVwLmMtMTUwLVxcbi0tXFxuYXJjaC9yaXNjdi9tbS9rYXNhbl9pbml0LmM9Mjk9c3RhdGljIHZvaWQgX19pbml0IGthc2FuX3BvcHVsYXRlX3B0ZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIGVuZClcXG4tLVxcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jLTM0LVxcdGlmIChwbWRfbm9uZShwbWRwX2dldChwbWQpKSkge1xcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jOjM1OlxcdFxcdHAgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQVFJTX1BFUl9QVEUgKiBzaXplb2YocHRlX3QpLCBQQUdFX1NJWkUpO1xcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jLTM2LVxcdFxcdHNldF9wbWQocG1kLCBwZm5fcG1kKFBGTl9ET1dOKF9fcGEocCkpLCBQQUdFX1RBQkxFKSk7XFxuLS1cXG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYz01MD1zdGF0aWMgdm9pZCBfX2luaXQga2FzYW5fcG9wdWxhdGVfcG1kKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbi0tXFxuYXJjaC9yaXNjdi9tbS9rYXNhbl9pbml0LmMtNTYtXFx0aWYgKHB1ZF9ub25lKHB1ZHBfZ2V0KHB1ZCkpKSB7XFxuYXJjaC9yaXNjdi9tbS9rYXNhbl9pbml0LmM6NTc6XFx0XFx0cCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBUUlNfUEVSX1BNRCAqIHNpemVvZihwbWRfdCksIFBBR0VfU0laRSk7XFxuYXJjaC9yaXNjdi9tbS9rYXNhbl9pbml0LmMtNTgtXFx0XFx0c2V0X3B1ZChwdWQsIHBmbl9wdWQoUEZOX0RPV04oX19wYShwKSksIFBBR0VfVEFCTEUpKTtcXG4tLVxcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jPTgwPXN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9wb3B1bGF0ZV9wdWQocDRkX3QgKnA0ZCxcXG4tLVxcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jLTg3LVxcdGlmIChwNGRfbm9uZShwNGRwX2dldChwNGQpKSkge1xcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jOjg4OlxcdFxcdHAgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQVFJTX1BFUl9QVUQgKiBzaXplb2YocHVkX3QpLCBQQUdFX1NJWkUpO1xcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jLTg5LVxcdFxcdHNldF9wNGQocDRkLCBwZm5fcDRkKFBGTl9ET1dOKF9fcGEocCkpLCBQQUdFX1RBQkxFKSk7XFxuLS1cXG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYz0xMTE9c3RhdGljIHZvaWQgX19pbml0IGthc2FuX3BvcHVsYXRlX3A0ZChwZ2RfdCAqcGdkLFxcbi0tXFxuYXJjaC9yaXNjdi9tbS9rYXNhbl9pbml0LmMtMTE4LVxcdGlmIChwZ2Rfbm9uZShwZ2RwX2dldChwZ2QpKSkge1xcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jOjExOTpcXHRcXHRwID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUFRSU19QRVJfUDREICogc2l6ZW9mKHA0ZF90KSwgUEFHRV9TSVpFKTtcXG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYy0xMjAtXFx0XFx0c2V0X3BnZChwZ2QsIHBmbl9wZ2QoUEZOX0RPV04oX19wYShwKSksIFBBR0VfVEFCTEUpKTtcXG4tLVxcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jPTM3Nz1zdGF0aWMgdm9pZCBfX2luaXQga2FzYW5fc2hhbGxvd19wb3B1bGF0ZV9wdWQocDRkX3QgKnA0ZCxcXG4tLVxcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jLTM4Ny1cXHRcXHRpZiAocHVkX25vbmUocHVkcF9nZXQocHVkX2spKSkge1xcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jOjM4ODpcXHRcXHRcXHRwID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUEFHRV9TSVpFLCBQQUdFX1NJWkUpO1xcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jLTM4OS1cXHRcXHRcXHRzZXRfcHVkKHB1ZF9rLCBwZm5fcHVkKFBGTl9ET1dOKF9fcGEocCkpLCBQQUdFX1RBQkxFKSk7XFxuLS1cXG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYz0zOTc9c3RhdGljIHZvaWQgX19pbml0IGthc2FuX3NoYWxsb3dfcG9wdWxhdGVfcDRkKHBnZF90ICpwZ2QsXFxuLS1cXG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYy00MDctXFx0XFx0aWYgKHA0ZF9ub25lKHA0ZHBfZ2V0KHA0ZF9rKSkpIHtcXG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYzo0MDg6XFx0XFx0XFx0cCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBBR0VfU0laRSwgUEFHRV9TSVpFKTtcXG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYy00MDktXFx0XFx0XFx0c2V0X3A0ZChwNGRfaywgcGZuX3A0ZChQRk5fRE9XTihfX3BhKHApKSwgUEFHRV9UQUJMRSkpO1xcbi0tXFxuYXJjaC9yaXNjdi9tbS9rYXNhbl9pbml0LmM9NDE3PXN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9zaGFsbG93X3BvcHVsYXRlX3BnZCh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIGVuZClcXG4tLVxcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jLTQyNi1cXHRcXHRpZiAocGdkX25vbmUocGdkcF9nZXQocGdkX2spKSkge1xcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jOjQyNzpcXHRcXHRcXHRwID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUEFHRV9TSVpFLCBQQUdFX1NJWkUpO1xcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jLTQyOC1cXHRcXHRcXHRzZXRfcGdkKHBnZF9rLCBwZm5fcGdkKFBGTl9ET1dOKF9fcGEocCkpLCBQQUdFX1RBQkxFKSk7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2NyYXNoX2R1bXAuYz02Mz1zdHJ1Y3Qgc2F2ZV9hcmVhICogX19pbml0IHNhdmVfYXJlYV9hbGxvYyhib29sIGlzX2Jvb3RfY3B1KVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9jcmFzaF9kdW1wLmMtNjYtXFxuYXJjaC9zMzkwL2tlcm5lbC9jcmFzaF9kdW1wLmM6Njc6XFx0c2EgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YoKnNhKSwgOCk7XFxuYXJjaC9zMzkwL2tlcm5lbC9jcmFzaF9kdW1wLmMtNjgtXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL251bWEuYz0xNz12b2lkIF9faW5pdCBudW1hX3NldHVwKHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL251bWEuYy0yNC1cXHRmb3IgKG5pZCA9IDA7IG5pZCBcXHUwMDNjIE1BWF9OVU1OT0RFUzsgbmlkKyspXFxuYXJjaC9zMzkwL2tlcm5lbC9udW1hLmM6MjU6XFx0XFx0Tk9ERV9EQVRBKG5pZCkgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YocGdfZGF0YV90KSwgOCk7XFxuYXJjaC9zMzkwL2tlcm5lbC9udW1hLmMtMjYtXFx0Tk9ERV9EQVRBKDApLVxcdTAwM2Vub2RlX3NwYW5uZWRfcGFnZXMgPSBtZW1ibG9ja19lbmRfb2ZfRFJBTSgpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM9Mzc4PXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBzdGFja19hbGxvY19lYXJseSh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTM4MS1cXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM6MzgyOlxcdHN0YWNrID0gKHVuc2lnbmVkIGxvbmcpbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoVEhSRUFEX1NJWkUsIFRIUkVBRF9TSVpFKTtcXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtMzgzLVxcdHJldHVybiBzdGFjaztcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYz00OTA9c3RhdGljIHZvaWQgX19pbml0IHNldHVwX3Jlc291cmNlcyh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTUwNC1cXHRmb3JfZWFjaF9tZW1fcmFuZ2UoaSwgXFx1MDAyNnN0YXJ0LCBcXHUwMDI2ZW5kKSB7XFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jOjUwNTpcXHRcXHRyZXMgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YoKnJlcyksIDgpO1xcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy01MDYtXFx0XFx0cmVzLVxcdTAwM2VmbGFncyA9IElPUkVTT1VSQ0VfQlVTWSB8IElPUkVTT1VSQ0VfU1lTVEVNX1JBTTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy01MjMtXFx0XFx0XFx0aWYgKHN0ZF9yZXMtXFx1MDAzZWVuZCBcXHUwMDNlIHJlcy1cXHUwMDNlZW5kKSB7XFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jOjUyNDpcXHRcXHRcXHRcXHRzdWJfcmVzID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZW9mKCpzdWJfcmVzKSwgOCk7XFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTUyNS1cXHRcXHRcXHRcXHQqc3ViX3JlcyA9ICpzdGRfcmVzO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jPTgxMj1zdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfcmFuZG9tbmVzcyh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTgxNS1cXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM6ODE2OlxcdHZtbXMgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQQUdFX1NJWkUsIFBBR0VfU0laRSk7XFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTgxNy1cXHRpZiAoc3RzaSh2bW1zLCAzLCAyLCAyKSA9PSAwIFxcdTAwMjZcXHUwMDI2IHZtbXMtXFx1MDAzZWNvdW50KVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9zbXAuYz01OTg9dm9pZCBfX2luaXQgc21wX3NhdmVfZHVtcF9pcGxfY3B1KHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3NtcC5jLTYwNS1cXHRzYSA9IHNhdmVfYXJlYV9hbGxvYyh0cnVlKTtcXG5hcmNoL3MzOTAva2VybmVsL3NtcC5jOjYwNjpcXHRyZWdzID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoNTEyLCA4KTtcXG5hcmNoL3MzOTAva2VybmVsL3NtcC5jLTYwNy1cXHRjb3B5X29sZG1lbV9rZXJuZWwocmVncywgX19MQ19GUFJFR1NfU0FWRV9BUkVBLCA1MTIpO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9zbXAuYz03Nzc9dm9pZCBfX2luaXQgc21wX2RldGVjdF9jcHVzKHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3NtcC5jLTc4My1cXHQvKiBHZXQgQ1BVIGluZm9ybWF0aW9uICovXFxuYXJjaC9zMzkwL2tlcm5lbC9zbXAuYzo3ODQ6XFx0aW5mbyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZigqaW5mbyksIDgpO1xcbmFyY2gvczM5MC9rZXJuZWwvc21wLmMtNzg1LVxcdHNtcF9nZXRfY29yZV9pbmZvKGluZm8sIDEpO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC90b3BvbG9neS5jPTUzOT1zdGF0aWMgdm9pZCBfX2luaXQgYWxsb2NfbWFza3Moc3RydWN0IHN5c2luZm9fMTVfMV94ICppbmZvLFxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC90b3BvbG9neS5jLTU0OC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfbWFza3M7IGkrKykge1xcbmFyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYzo1NDk6XFx0XFx0bWFzay1cXHUwMDNlbmV4dCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZigqbWFzay1cXHUwMDNlbmV4dCksIDgpO1xcbmFyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYy01NTAtXFx0XFx0bWFzayA9IG1hc2stXFx1MDAzZW5leHQ7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3RvcG9sb2d5LmM9NTY0PXZvaWQgX19pbml0IHRvcG9sb2d5X2luaXRfZWFybHkodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYy01NzYtXFx0XFx0Z290byBvdXQ7XFxuYXJjaC9zMzkwL2tlcm5lbC90b3BvbG9neS5jOjU3NzpcXHR0bF9pbmZvID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUEFHRV9TSVpFLCBQQUdFX1NJWkUpO1xcbmFyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYy01NzgtXFx0aW5mbyA9IHRsX2luZm87XFxuLS1cXG5hcmNoL3MzOTAvbW0vaW5pdC5jPTcyPXZvaWQgX19pbml0IGFyY2hfc2V0dXBfemVyb19wYWdlcyh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL21tL2luaXQuYy04My1cXG5hcmNoL3MzOTAvbW0vaW5pdC5jOjg0OlxcdGVtcHR5X3plcm9fcGFnZSA9ICh1bnNpZ25lZCBsb25nKW1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBvcmRlciwgUEFHRV9TSVpFKTtcXG5hcmNoL3MzOTAvbW0vaW5pdC5jLTg1LVxcbi0tXFxuYXJjaC9zaC9tbS9pbml0LmM9MTI5PXN0YXRpYyBwbWRfdCAqIF9faW5pdCBvbmVfbWRfdGFibGVfaW5pdChwdWRfdCAqcHVkKVxcbi0tXFxuYXJjaC9zaC9tbS9pbml0LmMtMTMzLVxcbmFyY2gvc2gvbW0vaW5pdC5jOjEzNDpcXHRcXHRwbWQgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQQUdFX1NJWkUsIFBBR0VfU0laRSk7XFxuYXJjaC9zaC9tbS9pbml0LmMtMTM1LVxcdFxcdHB1ZF9wb3B1bGF0ZShcXHUwMDI2aW5pdF9tbSwgcHVkLCBwbWQpO1xcbi0tXFxuYXJjaC9zaC9tbS9pbml0LmM9MTQyPXN0YXRpYyBwdGVfdCAqIF9faW5pdCBvbmVfcGFnZV90YWJsZV9pbml0KHBtZF90ICpwbWQpXFxuLS1cXG5hcmNoL3NoL21tL2luaXQuYy0xNDYtXFxuYXJjaC9zaC9tbS9pbml0LmM6MTQ3OlxcdFxcdHB0ZSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBBR0VfU0laRSwgUEFHRV9TSVpFKTtcXG5hcmNoL3NoL21tL2luaXQuYy0xNDgtXFx0XFx0cG1kX3BvcHVsYXRlX2tlcm5lbChcXHUwMDI2aW5pdF9tbSwgcG1kLCBwdGUpO1xcbi0tXFxuYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV8zMi5jPTI3PXZvaWQgKiBfX2luaXQgcHJvbV9lYXJseV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpXFxuLS1cXG5hcmNoL3NwYXJjL2tlcm5lbC9wcm9tXzMyLmMtMzAtXFxuYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV8zMi5jOjMxOlxcdHJldCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemUsIFNNUF9DQUNIRV9CWVRFUyk7XFxuYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV8zMi5jLTMyLVxcbi0tXFxuYXJjaC9zcGFyYy9tbS9zcm1tdS5jPTI2Nj1zdGF0aWMgdm9pZCBfX2luaXQgc3JtbXVfbm9jYWNoZV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3NwYXJjL21tL3NybW11LmMtMjc5LVxcbmFyY2gvc3BhcmMvbW0vc3JtbXUuYzoyODA6XFx0c3JtbXVfbm9jYWNoZV9wb29sID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc3JtbXVfbm9jYWNoZV9zaXplLFxcbmFyY2gvc3BhcmMvbW0vc3JtbXUuYy0yODEtXFx0XFx0XFx0XFx0XFx0ICAgIFNSTU1VX05PQ0FDSEVfQUxJR05fTUFYKTtcXG4tLVxcbmFyY2gvc3BhcmMvbW0vc3JtbXUuYy0yODQtXFx0c3JtbXVfbm9jYWNoZV9iaXRtYXAgPVxcbmFyY2gvc3BhcmMvbW0vc3JtbXUuYzoyODU6XFx0XFx0bWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoQklUU19UT19MT05HUyhiaXRtYXBfYml0cykgKiBzaXplb2YobG9uZyksXFxuYXJjaC9zcGFyYy9tbS9zcm1tdS5jLTI4Ni1cXHRcXHRcXHQgICAgICAgU01QX0NBQ0hFX0JZVEVTKTtcXG4tLVxcbmFyY2gvc3BhcmMvbW0vc3JtbXUuYz00NDM9c3RhdGljIHZvaWQgX19pbml0IHNwYXJjX2NvbnRleHRfaW5pdChpbnQgbnVtY3R4KVxcbi0tXFxuYXJjaC9zcGFyYy9tbS9zcm1tdS5jLTQ0OC1cXHRzaXplID0gbnVtY3R4ICogc2l6ZW9mKHN0cnVjdCBjdHhfbGlzdCk7XFxuYXJjaC9zcGFyYy9tbS9zcm1tdS5jOjQ0OTpcXHRjdHhfbGlzdF9wb29sID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZSwgU01QX0NBQ0hFX0JZVEVTKTtcXG5hcmNoL3NwYXJjL21tL3NybW11LmMtNDUwLVxcbi0tXFxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmM9MTY5Nz1zdGF0aWMgaW50IF9faW5pdCB2ZWN0b3Jfc2V0dXAoY2hhciAqc3RyKVxcbi0tXFxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmMtMTcwNy1cXHR9XFxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmM6MTcwODpcXHRuZXcgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YoKm5ldyksIFNNUF9DQUNIRV9CWVRFUyk7XFxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmMtMTcwOS1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bmV3LVxcdTAwM2VsaXN0KTtcXG4tLVxcbmFyY2gvdW0va2VybmVsL2xvYWRfZmlsZS5jPTMyPXZvaWQgKnVtbF9sb2FkX2ZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUsIHVuc2lnbmVkIGxvbmcgbG9uZyAqc2l6ZSlcXG4tLVxcbmFyY2gvdW0va2VybmVsL2xvYWRfZmlsZS5jLTUwLVxcbmFyY2gvdW0va2VybmVsL2xvYWRfZmlsZS5jOjUxOlxcdGFyZWEgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYygqc2l6ZSwgU01QX0NBQ0hFX0JZVEVTKTtcXG5hcmNoL3VtL2tlcm5lbC9sb2FkX2ZpbGUuYy01Mi1cXG4tLVxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYz0xMTg2PXN0YXRpYyB2b2lkIF9faW5pdCBhbGxvY19ydW50aW1lX2RhdGEoaW50IGNwdSlcXG4tLVxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy0xMTk5LVxcdFxcdC8qIEFsbG9jYXRlIHRoZSBTVlNNIENBIHBhZ2UgaWYgYW4gU1ZTTSBpcyBwcmVzZW50ICovXFxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jOjEyMDA6XFx0XFx0Y2FhID0gY3B1ID8gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZW9mKCpjYWEpLCBQQUdFX1NJWkUpXFxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jLTEyMDEtXFx0XFx0XFx0ICA6IFxcdTAwMjZib290X3N2c21fY2FfcGFnZTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYz04OTc9c3RhdGljIGludCBfX2luaXQgYWNwaV9wYXJzZV9ocGV0KHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGUpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMtOTQxLSNkZWZpbmUgSFBFVF9SRVNPVVJDRV9OQU1FX1NJWkUgOVxcbmFyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYzo5NDI6XFx0aHBldF9yZXMgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YoKmhwZXRfcmVzKSArIEhQRVRfUkVTT1VSQ0VfTkFNRV9TSVpFLFxcbmFyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYy05NDMtXFx0XFx0XFx0XFx0ICBTTVBfQ0FDSEVfQllURVMpO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jPTI1MDA9c3RhdGljIHN0cnVjdCByZXNvdXJjZSAqIF9faW5pdCBpb2FwaWNfc2V0dXBfcmVzb3VyY2VzKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMtMjUxMi1cXG5hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmM6MjUxMzpcXHRtZW0gPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhuLCBTTVBfQ0FDSEVfQllURVMpO1xcbmFyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYy0yNTE0LVxcdHJlcyA9ICh2b2lkICopbWVtO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jPTI1NDk9dm9pZCBfX2luaXQgaW9fYXBpY19pbml0X21hcHBpbmdzKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMtMjU3MS0jZW5kaWZcXG5hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmM6MjU3MjpcXHRcXHRcXHRpb2FwaWNfcGh5cyA9ICh1bnNpZ25lZCBsb25nKW1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBBR0VfU0laRSxcXG5hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMtMjU3My1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgUEFHRV9TSVpFKTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9lODIwLmM9MTExMz1fX2luaXQgdm9pZCBlODIwX19yZXNlcnZlX3Jlc291cmNlcyh2b2lkKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2U4MjAuYy0xMTE4LVxcbmFyY2gveDg2L2tlcm5lbC9lODIwLmM6MTExOTpcXHRyZXMgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YoKnJlcykgKiBlODIwX3RhYmxlLVxcdTAwM2Vucl9lbnRyaWVzLFxcbmFyY2gveDg2L2tlcm5lbC9lODIwLmMtMTEyMC1cXHRcXHRcXHQgICAgIFNNUF9DQUNIRV9CWVRFUyk7XFxuLS1cXG5hcmNoL3g4Ni9wbGF0Zm9ybS9vbHBjL29scGNfZHQuYz0xMjQ9dm9pZCAqIF9faW5pdCBwcm9tX2Vhcmx5X2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4tLVxcbmFyY2gveDg2L3BsYXRmb3JtL29scGMvb2xwY19kdC5jLTEzOC1cXHRcXHQgKi9cXG5hcmNoL3g4Ni9wbGF0Zm9ybS9vbHBjL29scGNfZHQuYzoxMzk6XFx0XFx0cmVzID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoY2h1bmtfc2l6ZSwgU01QX0NBQ0hFX0JZVEVTKTtcXG5hcmNoL3g4Ni9wbGF0Zm9ybS9vbHBjL29scGNfZHQuYy0xNDAtXFx0XFx0cHJvbV9lYXJseV9hbGxvY2F0ZWQgKz0gY2h1bmtfc2l6ZTtcXG4tLVxcbmFyY2gveDg2L3hlbi9wMm0uYz0xNzg9c3RhdGljIHZvaWQgKiBfX3JlZiBhbGxvY19wMm1fcGFnZSh2b2lkKVxcbi0tXFxuYXJjaC94ODYveGVuL3AybS5jLTE4MC1cXHRpZiAodW5saWtlbHkoIXNsYWJfaXNfYXZhaWxhYmxlKCkpKSB7XFxuYXJjaC94ODYveGVuL3AybS5jOjE4MTpcXHRcXHRyZXR1cm4gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUEFHRV9TSVpFLCBQQUdFX1NJWkUpO1xcbmFyY2gveDg2L3hlbi9wMm0uYy0xODItXFx0fVxcbi0tXFxuYXJjaC94dGVuc2EvbW0va2FzYW5faW5pdC5jPTM1PXN0YXRpYyB2b2lkIF9faW5pdCBwb3B1bGF0ZSh2b2lkICpzdGFydCwgdm9pZCAqZW5kKVxcbi0tXFxuYXJjaC94dGVuc2EvbW0va2FzYW5faW5pdC5jLTQxLVxcdHBtZF90ICpwbWQgPSBwbWRfb2ZmX2sodmFkZHIpO1xcbmFyY2gveHRlbnNhL21tL2thc2FuX2luaXQuYzo0MjpcXHRwdGVfdCAqcHRlID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMobl9wYWdlcyAqIHNpemVvZihwdGVfdCksIFBBR0VfU0laRSk7XFxuYXJjaC94dGVuc2EvbW0va2FzYW5faW5pdC5jLTQzLVxcbi0tXFxuZHJpdmVycy9jbGsvdGkvY2xrLmM9NDMzPXZvaWQgX19pbml0IG9tYXAyX2Nsa19sZWdhY3lfcHJvdmlkZXJfaW5pdChpbnQgaW5kZXgsIHZvaWQgX19pb21lbSAqbWVtKVxcbi0tXFxuZHJpdmVycy9jbGsvdGkvY2xrLmMtNDM2LVxcbmRyaXZlcnMvY2xrL3RpL2Nsay5jOjQzNzpcXHRpbyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZigqaW8pLCBTTVBfQ0FDSEVfQllURVMpO1xcbmRyaXZlcnMvY2xrL3RpL2Nsay5jLTQzOC1cXG4tLVxcbmRyaXZlcnMvbWFjaW50b3NoL3NtdS5jPTQ3Mj1pbnQgX19pbml0IHNtdV9pbml0ICh2b2lkKVxcbi0tXFxuZHJpdmVycy9tYWNpbnRvc2gvc211LmMtNDk0LVxcbmRyaXZlcnMvbWFjaW50b3NoL3NtdS5jOjQ5NTpcXHRzbXUgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2Yoc3RydWN0IHNtdV9kZXZpY2UpLCBTTVBfQ0FDSEVfQllURVMpO1xcbmRyaXZlcnMvbWFjaW50b3NoL3NtdS5jLTQ5Ni1cXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2c211LVxcdTAwM2Vsb2NrKTtcXG4tLVxcbmRyaXZlcnMvb2YvZmR0LmM9MTIwMD1zdGF0aWMgdm9pZCAqIF9faW5pdCBlYXJseV9pbml0X2R0X2FsbG9jX21lbW9yeV9hcmNoKHU2NCBzaXplLCB1NjQgYWxpZ24pXFxuZHJpdmVycy9vZi9mZHQuYy0xMjAxLXtcXG5kcml2ZXJzL29mL2ZkdC5jOjEyMDI6XFx0cmV0dXJuIG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemUsIGFsaWduKTtcXG5kcml2ZXJzL29mL2ZkdC5jLTEyMDMtfVxcbi0tXFxuZHJpdmVycy9vZi91bml0dGVzdC5jPTM5MDY9c3RhdGljIHZvaWQgKiBfX2luaXQgZHRfYWxsb2NfbWVtb3J5KHU2NCBzaXplLCB1NjQgYWxpZ24pXFxuZHJpdmVycy9vZi91bml0dGVzdC5jLTM5MDcte1xcbmRyaXZlcnMvb2YvdW5pdHRlc3QuYzozOTA4OlxcdHJldHVybiBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplLCBhbGlnbik7XFxuZHJpdmVycy9vZi91bml0dGVzdC5jLTM5MDktfVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oPTQyND1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKm1lbWJsb2NrX2FsbG9jKHBoeXNfYWRkcl90IHNpemUsIHBoeXNfYWRkcl90IGFsaWduKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTQyOS1cXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg6NDMwOnZvaWQgKl9fbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMocGh5c19hZGRyX3Qgc2l6ZSwgcGh5c19hZGRyX3QgYWxpZ24sXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTQzMS1cXHRcXHRcXHRcXHRjb25zdCBjaGFyICpmdW5jKTtcXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtNDMyLVxcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaDo0MzM6I2RlZmluZSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplLCBhbGlnbikgICAgXFxcXFxcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaDo0MzQ6XFx0IF9fbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZSwgYWxpZ24sIF9fZnVuY19fKVxcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC00MzUtXFxuLS1cXG5pbml0L21haW4uYz02MDQ9c3RhdGljIHZvaWQgX19pbml0IHNldHVwX2NvbW1hbmRfbGluZShjaGFyICpjb21tYW5kX2xpbmUpXFxuLS1cXG5pbml0L21haW4uYy02MTYtXFxuaW5pdC9tYWluLmM6NjE3OlxcdHNhdmVkX2NvbW1hbmRfbGluZSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKGxlbiwgU01QX0NBQ0hFX0JZVEVTKTtcXG5pbml0L21haW4uYy02MTgtXFxuLS1cXG5pbml0L21haW4uYy02MjAtXFxuaW5pdC9tYWluLmM6NjIxOlxcdHN0YXRpY19jb21tYW5kX2xpbmUgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhsZW4sIFNNUF9DQUNIRV9CWVRFUyk7XFxuaW5pdC9tYWluLmMtNjIyLVxcbi0tXFxuaW5pdC9tYWluLmM9MTIxMT1zdGF0aWMgaW50IF9faW5pdCBpbml0Y2FsbF9ibGFja2xpc3QoY2hhciAqc3RyKVxcbi0tXFxuaW5pdC9tYWluLmMtMTIyMC1cXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiYmxhY2tsaXN0aW5nIGluaXRjYWxsICVzXFxcXG5cXFwiLCBzdHJfZW50cnkpO1xcbmluaXQvbWFpbi5jOjEyMjE6XFx0XFx0XFx0ZW50cnkgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YoKmVudHJ5KSxcXG5pbml0L21haW4uYy0xMjIyLVxcdFxcdFxcdFxcdFxcdCAgICAgICBTTVBfQ0FDSEVfQllURVMpO1xcbmluaXQvbWFpbi5jOjEyMjM6XFx0XFx0XFx0ZW50cnktXFx1MDAzZWJ1ZiA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHN0cmxlbihzdHJfZW50cnkpICsgMSxcXG5pbml0L21haW4uYy0xMjI0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBTTVBfQ0FDSEVfQllURVMpO1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxMDo1MS4yMzMxMzQ2MTRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE1OTY5MDg1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBBbGxvY2F0aW9uIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBtZW1ibG9ja19hbGxvY19vcl9wYW5pY2AgbWFjcm8gYW5kIGltbWVkaWF0ZWx5LCBteSBicmFpbidzIGFscmVhZHkgcGFyc2luZyB0aGUgaW1wbGljYXRpb25zLiBJdCdzIGRlZmluZWQgYXMgYSB3cmFwcGVyIGFyb3VuZCBgX19tZW1ibG9ja19hbGxvY19vcl9wYW5pY2AuICBUaGUgc2lnbmF0dXJlIHRlbGxzIG1lIGl0IHRha2VzIGEgc2l6ZSBhbmQgYWxpZ25tZW50LCBhbmQgY3J1Y2lhbGx5LCBwYXNzZXMgdGhlIGN1cnJlbnQgZnVuY3Rpb24ncyBuYW1lLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIGRldGFpbHMsIGFuZCBteSBleHBlcmllbmNlIHNheXMgdGhhdCBJIG5lZWQgdG8gdHJhY2UgdGhpcyBmdXJ0aGVyLiBUaGUgcmVhbCB3b3JrIGlzIHByb2JhYmx5IGRvbmUgaW4gYF9fbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBhbGxvY2F0aW9uICphY3R1YWxseSogaGFwcGVucywgYW5kIHNwZWNpZmljYWxseSwgaWYgaXQgaW5pdGlhbGl6ZXMgdGhlIG1lbW9yeS4gQmVjYXVzZSBJJ20gcHJldHR5IHN1cmUgYF9fbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWNgIGNhbGxzIGBtZW1ibG9ja19hbGxvY190cnlfbmlkYCwgYW5kIG15IGd1dCBmZWVsaW5nIGlzIHRoYXQgemVyb2VzIHRoZSBtZW1vcnkuXG5cblNvIEknbSBnb2luZyB0byBqdW1wIGludG8gYG1tL21lbWJsb2NrLmNgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgX19tZW1ibG9ja19hbGxvY19vcl9wYW5pY2AuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlIG1lbW9yeSBpcyBpbmRlZWQgemVyb2VkIGR1cmluZyBhbGxvY2F0aW9uIGFzIEkgc3VzcGVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyOTEsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTA6NTYuMzkyODI4MTA4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQyODAxODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1ibG9jay5oPTQyND1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKm1lbWJsb2NrX2FsbG9jKHBoeXNfYWRkcl90IHNpemUsIHBoeXNfYWRkcl90IGFsaWduKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTQyOS1cXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg6NDMwOnZvaWQgKl9fbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMocGh5c19hZGRyX3Qgc2l6ZSwgcGh5c19hZGRyX3QgYWxpZ24sXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTQzMS1cXHRcXHRcXHRcXHRjb25zdCBjaGFyICpmdW5jKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC00MzMtI2RlZmluZSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplLCBhbGlnbikgICAgXFxcXFxcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaDo0MzQ6XFx0IF9fbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZSwgYWxpZ24sIF9fZnVuY19fKVxcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC00MzUtXFxuLS1cXG5tbS9tZW1ibG9jay5jPTE3Nzc9dm9pZCAqIF9faW5pdCBtZW1ibG9ja19hbGxvY190cnlfbmlkKFxcbi0tXFxubW0vbWVtYmxvY2suYy0xNzk1LS8qKlxcbm1tL21lbWJsb2NrLmM6MTc5NjogKiBfX21lbWJsb2NrX2FsbG9jX29yX3BhbmljIC0gVHJ5IHRvIGFsbG9jYXRlIG1lbW9yeSBhbmQgcGFuaWMgb24gZmFpbHVyZVxcbm1tL21lbWJsb2NrLmMtMTc5Ny0gKiBAc2l6ZTogc2l6ZSBvZiBtZW1vcnkgYmxvY2sgdG8gYmUgYWxsb2NhdGVkIGluIGJ5dGVzXFxuLS1cXG5tbS9tZW1ibG9jay5jLTE4MDQtICovXFxubW0vbWVtYmxvY2suYzoxODA1OnZvaWQgKl9faW5pdCBfX21lbWJsb2NrX2FsbG9jX29yX3BhbmljKHBoeXNfYWRkcl90IHNpemUsIHBoeXNfYWRkcl90IGFsaWduLFxcbm1tL21lbWJsb2NrLmMtMTgwNi1cXHRcXHRcXHRcXHQgICAgICAgY29uc3QgY2hhciAqZnVuYylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTA6NTguMTM1NjM1ODEzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzQ4NzEwMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBtbS9tZW1ibG9jay5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgbGluZXMgMTgwNSB0aHJvdWdoIDE4MTUuIEknbSBmb2N1c2luZyBvbiB0aGF0IHNlY3Rpb24gZm9yIGEgcmVhc29uLCBhbmQgYmFzZWQgb24gdGhlIGNvbnRleHQsIGl0J3MgbGlrZWx5IGRlYWxpbmcgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBvciBtYW5hZ2VtZW50IGF0IGEgZm91bmRhdGlvbmFsIGxldmVsIOKAkyBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBlYXJseSBib290IHByb2Nlc3Mgb3IgaGFuZGxpbmcgb2YgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZSBrZXJuZWwgaXMgaW5pdGlhbGl6aW5nIG9yIG1hbmlwdWxhdGluZyB0aGUgbWVtYmxvY2sgZGF0YSBzdHJ1Y3R1cmVzIGluIHRoYXQgcGFydGljdWxhciBjb2RlIHNlZ21lbnQuIEkgZXhwZWN0IHRvIGJlIGxvb2tpbmcgZm9yIGRldGFpbHMgb24gaG93IHRoZSBzeXN0ZW0gZGV0ZXJtaW5lcyBvciBtb2RpZmllcyB0aGUgcGh5c2ljYWwgbWVtb3J5IG1hcC4gSXMgaXQgYWRkaW5nLCByZW1vdmluZywgb3IgYWRqdXN0aW5nIG1lbW9yeSByZWdpb25zPyBXaGF0IHNwZWNpZmljIHBhcmFtZXRlcnMgYXJlIGJlaW5nIHVzZWQ/IEknbGwgcHJvYmFibHkgYmUgbG9va2luZyBmb3IgY2FsbHMgdG8gZnVuY3Rpb25zIGxpa2UgYG1lbWJsb2NrX2FkZCgpYCwgYG1lbWJsb2NrX3JlbW92ZSgpYCwgb3IgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCBhZmZlY3QgdGhlIG1lbWJsb2NrIGxpc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmbG93IGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhlIGNvZGUncyBleGVjdXRpb24uIFVsdGltYXRlbHksIG15IGdvYWwgaXMgdG8gZ3Jhc3AgdGhlIGludHJpY2FjaWVzIG9mIHRoaXMgcGFydGljdWxhciBzZWN0aW9uIGFuZCBob3cgaXQgY29udHJpYnV0ZXMgdG8gdGhlIGJyb2FkZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDUxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTE6MDIuMDEwNTEwMDU1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1ibG9jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MDUsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4MDU6XFx0dm9pZCAqX19pbml0IF9fbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMocGh5c19hZGRyX3Qgc2l6ZSwgcGh5c19hZGRyX3QgYWxpZ24sXFxuMTgwNjpcXHRcXHRcXHRcXHRcXHQgICAgICAgY29uc3QgY2hhciAqZnVuYylcXG4xODA3OlxcdHtcXG4xODA4OlxcdFxcdHZvaWQgKmFkZHIgPSBtZW1ibG9ja19hbGxvYyhzaXplLCBhbGlnbik7XFxuMTgwOTpcXHRcXG4xODEwOlxcdFxcdGlmICh1bmxpa2VseSghYWRkcikpXFxuMTgxMTpcXHRcXHRcXHRwYW5pYyhcXFwiJXM6IEZhaWxlZCB0byBhbGxvY2F0ZSAlcGFwIGJ5dGVzXFxcXG5cXFwiLCBmdW5jLCBcXHUwMDI2c2l6ZSk7XFxuMTgxMjpcXHRcXHRyZXR1cm4gYWRkcjtcXG4xODEzOlxcdH1cXG4xODE0OlxcdFxcbjE4MTU6XFx0LypcXG4xODE2OlxcdCAqIFJlbWFpbmluZyBBUEkgZnVuY3Rpb25zXFxuMTgxNzpcXHQgKi9cXG4xODE4OlxcdFxcbjE4MTk6XFx0cGh5c19hZGRyX3QgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX3BoeXNfbWVtX3NpemUodm9pZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTE6MDIuMDEwNjY0Mjk1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMDIyOTgxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVkdW5kYW50IEluaXRpYWxpemF0aW9uIENsZWFudXAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIGZsYWdnZWQgYXMgYSBjbGVhbnVwLCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIExldCdzIHNlZS4uLiBgbWVtYmxvY2tfYWxsb2NgIGlzIHJlc3BvbnNpYmxlIGZvciB6ZXJvaW5nIHRoZSBtZW1vcnkuIEFoLCBhbmQgYGFsbG9jX25vZGVfZGF0YWAgc3BlY2lmaWNhbGx5IHVzZXMgYG1lbWJsb2NrX3BoeXNfYWxsb2NfdHJ5X25pZGAsIHdoaWNoIGFsc28gZ2V0cyB6ZXJvZWQuIFBsdXMsIGBtZW1zZXRgIGlzIHVzZWQgb24gYE5PREVfREFUQShuaWQpYCB0byBpbml0aWFsaXplIGBwZ19kYXRhX3RgIHRvIHplcm8uIFJpZ2h0LCBzbyB0aGF0IG1lYW5zIGBwZ2RhdGAgaXMgYWx3YXlzIGluaXRpYWxpemVkIHRvIGFsbCB6ZXJvcy5cblxuVGhlcmVmb3JlLCB0aGUgYXNzaWdubWVudCBgcGdkYXQtXHUwMDNlbm9kZV9wYWdlX2V4dCA9IE5VTEw7YCBpbnNpZGUgYHBnZGF0X3BhZ2VfZXh0X2luaXRgIGlzIGNvbXBsZXRlbHkgcmVkdW5kYW50LiBJdCdzIGFscmVhZHkgemVybyBmcm9tIHRoZSBzdGFydC4gVGhpcyBwYXRjaCBpcyBqdXN0IHJlbW92aW5nIHRoYXQgcmVkdW5kYW50IGluaXRpYWxpemF0aW9uIGFuZCB0aGUgZW1wdHkgZnVuY3Rpb24gc3R1YiDigJMgcHVyZWx5IGRlY29yYXRpdmUuIEl0J3MgYSBjbGVhbnVwLCBub3QgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYXMgZmFyIGFzIEkgY2FuIHNlZS5cblxuSGFuZyBvbiBhIHNlY29uZOKApiBJIHNob3VsZCBkb3VibGUgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBjYWxscyB0byBgcGdkYXRfcGFnZV9leHRfaW5pdGAuIExldCdzIGdyZXAgdGhlIHdob2xlIHRyZWUgdG8gYmUgY29tcGxldGVseSBzdXJlLiBXZSBkb24ndCB3YW50IHRvIG1pc3MgYW55IGVkZ2UgY2FzZXMsIHlvdSBrbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzU2MywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjExOjA3LjMxMjk2NTE5N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyMDcxMzgwNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGdkYXRfcGFnZV9leHRfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTE6MDkuMDMzNjg3NzgyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5NzYxODMzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogcGdkYXRfcGFnZV9leHRfaW5pdCBSZW1vdmFsKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBsb29rcyBzdHJhaWdodGZvcndhcmQuIFRoZSBkaWZmIGNsZWFybHkgc2hvd3MgdGhhdCB0aGUgZnVuY3Rpb24gYHBnZGF0X3BhZ2VfZXh0X2luaXRgIGlzIGJlaW5nIGNvbXBsZXRlbHkgcmVtb3ZlZCBhY3Jvc3MgdGhlIHJlbGV2YW50IGZpbGVzLiBMZXQncyBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIGltcGFjdC4gSSBzZWUgaXQncyBnb25lIGZyb20gYGluY2x1ZGUvbGludXgvcGFnZV9leHQuaGAsIGBtbS9tbV9pbml0LmNgIGFuZCBgbW0vcGFnZV9leHQuY2BcblxuTG9va2luZyBhdCB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSByZW1vdmVkIGRlZmluaXRpb24gaW4gYG1tL3BhZ2VfZXh0LmNgLCB0aGUgZnVuY3Rpb24gaXRzZWxmIHdhcyBleHRyZW1lbHkgc2ltcGxlOiBgcGdkYXQtXHUwMDNlbm9kZV9wYWdlX2V4dCA9IE5VTEw7YC4gQW5kLCBzaW5jZSBgcGdkYXRgIGlzIGFsd2F5cyB6ZXJvLWluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiwgdGhlIGZ1bmN0aW9uIGl0c2VsZiB3YXMgZG9pbmcgbm90aGluZyBvZiBzdWJzdGFuY2UuXG5cblNvLCBlc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBhIGNsZWFuLXVwLiBUaGUgZXhwbGljaXQgc2V0dGluZyBvZiBgbm9kZV9wYWdlX2V4dGAgdG8gYE5VTExgIHdhcyByZWR1bmRhbnQgYmVjYXVzZSB0aGUgbWVtb3J5IHdhcyBhbHJlYWR5IGluaXRpYWxpemVkIHRvIHplcm8uIFRoZSByZW1vdmFsIGlzIGxpa2VseSBpbnRlbmRlZCB0byByZWR1Y2UgY29kZSBjbHV0dGVyIGFuZCBpbXByb3ZlIG92ZXJhbGwgbWFpbnRhaW5hYmlsaXR5LCBhcyB3ZWxsIGFzIHRvIGVsaW1pbmF0ZSBhIHNtYWxsIGFtb3VudCBvZiByZWR1bmRhbnQgZXhlY3V0aW9uLiBObyBmdW5jdGlvbmFsaXR5IGlzIGFmZmVjdGVkIGJ5IHRoZSBjaGFuZ2UuIFdvcnRoRnV6emluZz1mYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwMjcsIk91dHB1dFRva2VucyI6MTI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjExOjE5LjAwOTg3NDY3NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBwZ2RhdF9wYWdlX2V4dF9pbml0YCBmdW5jdGlvbiwgd2hpY2ggd2FzIGVpdGhlciBhbiBlbXB0eSBzdHViIG9yIHNpbXBseSBzZXQgYHBnZGF0LVxcdTAwM2Vub2RlX3BhZ2VfZXh0ID0gTlVMTGAuIFNpbmNlIGBwZ2RhdGAgc3RydWN0dXJlcyBhcmUgYWx3YXlzIHplcm8taW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uICh2aWEgYG1lbXNldGAgaW4gYGFsbG9jX25vZGVfZGF0YWAgb3IgYnkgdXNpbmcgYG1lbWJsb2NrX2FsbG9jYCksIHRoaXMgaW5pdGlhbGl6YXRpb24gd2FzIGNvbXBsZXRlbHkgcmVkdW5kYW50LiBSZW1vdmluZyBpdCBpcyBhIHB1cmVseSBkZWNvcmF0aXZlIGNsZWFudXAgdGhhdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYHBnZGF0X3BhZ2VfZXh0X2luaXRgIGZ1bmN0aW9uLCB3aGljaCB3YXMgZWl0aGVyIGFuIGVtcHR5IHN0dWIgb3Igc2ltcGx5IHNldCBgcGdkYXQtXFx1MDAzZW5vZGVfcGFnZV9leHQgPSBOVUxMYC4gU2luY2UgYHBnZGF0YCBzdHJ1Y3R1cmVzIGFyZSBhbHdheXMgemVyby1pbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gKHZpYSBgbWVtc2V0YCBpbiBgYWxsb2Nfbm9kZV9kYXRhYCBvciBieSB1c2luZyBgbWVtYmxvY2tfYWxsb2NgKSwgdGhpcyBpbml0aWFsaXphdGlvbiB3YXMgY29tcGxldGVseSByZWR1bmRhbnQuIFJlbW92aW5nIGl0IGlzIGEgcHVyZWx5IGRlY29yYXRpdmUgY2xlYW51cCB0aGF0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpz8sf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-03 17:56:53 +0000 UTC FinishedAt: 2026-08-03 18:11:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBwZ2RhdF9wYWdlX2V4dF9pbml0YCBmdW5jdGlvbiwgd2hpY2ggd2FzIGVpdGhlciBhbiBlbXB0eSBzdHViIG9yIHNpbXBseSBzZXQgYHBnZGF0LVx1MDAzZW5vZGVfcGFnZV9leHQgPSBOVUxMYC4gU2luY2UgYHBnZGF0YCBzdHJ1Y3R1cmVzIGFyZSBhbHdheXMgemVyby1pbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gKHZpYSBgbWVtc2V0YCBpbiBgYWxsb2Nfbm9kZV9kYXRhYCBvciBieSB1c2luZyBgbWVtYmxvY2tfYWxsb2NgKSwgdGhpcyBpbml0aWFsaXphdGlvbiB3YXMgY29tcGxldGVseSByZWR1bmRhbnQuIFJlbW92aW5nIGl0IGlzIGEgcHVyZWx5IGRlY29yYXRpdmUgY2xlYW51cCB0aGF0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZmEzNjA3NTBlZGQ1ZWFjMDczOWJkYjk3NTRmMTBhN2Y2ZDgxY2RhYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTg6MDg6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oXG5pbmRleCBmMjNkNGIyMThkYTA3Li43OWM1M2VjNDVkZmE3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmhcbkBAIC01NSw3ICYjNDM7NTUsNiBAQCBzdHJ1Y3QgcGFnZV9leHQge1xuIFxuIGV4dGVybiBib29sIGVhcmx5X3BhZ2VfZXh0O1xuIGV4dGVybiB1bnNpZ25lZCBsb25nIHBhZ2VfZXh0X3NpemU7XG4tZXh0ZXJuIHZvaWQgcGdkYXRfcGFnZV9leHRfaW5pdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KTtcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgZWFybHlfcGFnZV9leHRfZW5hYmxlZCh2b2lkKVxuIHtcbkBAIC0yMDIsMTAgJiM0MzsyMDEsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZWFybHlfcGFnZV9leHRfZW5hYmxlZCh2b2lkKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgcGdkYXRfcGFnZV9leHRfaW5pdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuLXtcbi19XG4tXG4gc3RhdGljIGlubGluZSB2b2lkIHBhZ2VfZXh0X2luaXQodm9pZClcbiB7XG4gfVxuZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuY1xuaW5kZXggNzExZjgyMWY3YjNjNy4uZTljNDIwNGI3M2FkYiAxMDA2NDRcbi0tLSBhL21tL21tX2luaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW1faW5pdC5jXG5AQCAtMTM5NCw3ICYjNDM7MTM5NCw2IEBAIHN0YXRpYyB2b2lkIF9fbWVtaW5pdCBwZ2RhdF9pbml0X2ludGVybmFscyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfVk1TQ0FOX1RIUk9UVExFOyBpJiM0MzsmIzQzOylcbiBcdFx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZwZ2RhdC1cdTAwM2VyZWNsYWltX3dhaXRbaV0pO1xuIFxuLVx0cGdkYXRfcGFnZV9leHRfaW5pdChwZ2RhdCk7XG4gXHRscnV2ZWNfaW5pdChcdTAwMjZwZ2RhdC1cdTAwM2VfX2xydXZlYyk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfZXh0LmMgYi9tbS9wYWdlX2V4dC5jXG5pbmRleCBlMmU5MmJkMjdlYmRkLi5iNjc5YThjMWY3ZDdlIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9leHQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9leHQuY1xuQEAgLTE2NCwxMSAmIzQzOzE2NCw2IEBAIHZvaWQgX19pbml0IHBhZ2VfZXh0X2luaXRfZmxhdG1lbV9sYXRlKHZvaWQpXG4gXHRpbnZva2VfaW5pdF9jYWxsYmFja3MoKTtcbiB9XG4gXG4tdm9pZCBfX21lbWluaXQgcGdkYXRfcGFnZV9leHRfaW5pdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuLXtcbi1cdHBnZGF0LVx1MDAzZW5vZGVfcGFnZV9leHQgPSBOVUxMO1xuLX1cbi1cbiBzdGF0aWMgc3RydWN0IHBhZ2VfZXh0ICpsb29rdXBfcGFnZV9leHQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcbkBAIC00OTQsMTAgJiM0Mzs0ODksNiBAQCB2b2lkIF9faW5pdCBwYWdlX2V4dF9pbml0KHZvaWQpXG4gXHRwYW5pYyhcJiMzNDtPdXQgb2YgbWVtb3J5XCYjMzQ7KTtcbiB9XG4gXG4tdm9pZCBfX21lbWluaXQgcGdkYXRfcGFnZV9leHRfaW5pdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuLXtcbi19XG4tXG4gI2VuZGlmXG4gXG4gLyoqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBwZ2RhdF9wYWdlX2V4dF9pbml0YCBmdW5jdGlvbiwgd2hpY2ggd2FzIGVpdGhlciBhbiBlbXB0eSBzdHViIG9yIHNpbXBseSBzZXQgYHBnZGF0LVx1MDAzZW5vZGVfcGFnZV9leHQgPSBOVUxMYC4gU2luY2UgYHBnZGF0YCBzdHJ1Y3R1cmVzIGFyZSBhbHdheXMgemVyby1pbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gKHZpYSBgbWVtc2V0YCBpbiBgYWxsb2Nfbm9kZV9kYXRhYCBvciBieSB1c2luZyBgbWVtYmxvY2tfYWxsb2NgKSwgdGhpcyBpbml0aWFsaXphdGlvbiB3YXMgY29tcGxldGVseSByZWR1bmRhbnQuIFJlbW92aW5nIGl0IGlzIGEgcHVyZWx5IGRlY29yYXRpdmUgY2xlYW51cCB0aGF0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZmEzNjA3NTBlZGQ1ZWFjMDczOWJkYjk3NTRmMTBhN2Y2ZDgxY2RhYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMgMTg6MDg6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmgKaW5kZXggZjIzZDRiMjE4ZGEwNy4uNzljNTNlYzQ1ZGZhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZV9leHQuaApAQCAtNTUsNyAmIzQzOzU1LDYgQEAgc3RydWN0IHBhZ2VfZXh0IHsKIAogZXh0ZXJuIGJvb2wgZWFybHlfcGFnZV9leHQ7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBwYWdlX2V4dF9zaXplOwotZXh0ZXJuIHZvaWQgcGdkYXRfcGFnZV9leHRfaW5pdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KTsKIAogc3RhdGljIGlubGluZSBib29sIGVhcmx5X3BhZ2VfZXh0X2VuYWJsZWQodm9pZCkKIHsKQEAgLTIwMiwxMCAmIzQzOzIwMSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBlYXJseV9wYWdlX2V4dF9lbmFibGVkKHZvaWQpCiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcGdkYXRfcGFnZV9leHRfaW5pdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KQotewotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9leHRfaW5pdCh2b2lkKQogewogfQpkaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jCmluZGV4IDcxMWY4MjFmN2IzYzcuLmU5YzQyMDRiNzNhZGIgMTAwNjQ0Ci0tLSBhL21tL21tX2luaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tbV9pbml0LmMKQEAgLTEzOTQsNyAmIzQzOzEzOTQsNiBAQCBzdGF0aWMgdm9pZCBfX21lbWluaXQgcGdkYXRfaW5pdF9pbnRlcm5hbHMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkKIAlmb3IgKGkgPSAwOyBpICZsdDsgTlJfVk1TQ0FOX1RIUk9UVExFOyBpJiM0MzsmIzQzOykKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmYW1wO3BnZGF0LSZndDtyZWNsYWltX3dhaXRbaV0pOwogCi0JcGdkYXRfcGFnZV9leHRfaW5pdChwZ2RhdCk7CiAJbHJ1dmVjX2luaXQoJmFtcDtwZ2RhdC0mZ3Q7X19scnV2ZWMpOwogfQogCmRpZmYgLS1naXQgYS9tbS9wYWdlX2V4dC5jIGIvbW0vcGFnZV9leHQuYwppbmRleCBlMmU5MmJkMjdlYmRkLi5iNjc5YThjMWY3ZDdlIDEwMDY0NAotLS0gYS9tbS9wYWdlX2V4dC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfZXh0LmMKQEAgLTE2NCwxMSAmIzQzOzE2NCw2IEBAIHZvaWQgX19pbml0IHBhZ2VfZXh0X2luaXRfZmxhdG1lbV9sYXRlKHZvaWQpCiAJaW52b2tlX2luaXRfY2FsbGJhY2tzKCk7CiB9CiAKLXZvaWQgX19tZW1pbml0IHBnZGF0X3BhZ2VfZXh0X2luaXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkKLXsKLQlwZ2RhdC0mZ3Q7bm9kZV9wYWdlX2V4dCA9IE5VTEw7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcGFnZV9leHQgKmxvb2t1cF9wYWdlX2V4dChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAl1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpOwpAQCAtNDk0LDEwICYjNDM7NDg5LDYgQEAgdm9pZCBfX2luaXQgcGFnZV9leHRfaW5pdCh2b2lkKQogCXBhbmljKCYjMzQ7T3V0IG9mIG1lbW9yeSYjMzQ7KTsKIH0KIAotdm9pZCBfX21lbWluaXQgcGdkYXRfcGFnZV9leHRfaW5pdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KQotewotfQotCiAjZW5kaWYKIAogLyoqCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NjcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogUmVtb3ZpbmcgYHBnZGF0X3BhZ2VfZXh0X2luaXRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgYXhpbmcgdGhlIGBwZ2RhdF9wYWdlX2V4dF9pbml0YCBmdW5jdGlvbiwgYW5kIGl0cyBjb3JyZXNwb25kaW5nIGNhbGxzLiBJIHNlZSB0aGUgY2hhbmdlcyBhcmUgaW4gYGluY2x1ZGUvbGludXgvcGFnZV9leHQuaGAsIGBtbS9tbV9pbml0LmNgLCBhbmQgYG1tL3BhZ2VfZXh0LmNgLiBJbnRlcmVzdGluZy4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIGBwZ2RhdF9wYWdlX2V4dF9pbml0YCB3YXMgZXNzZW50aWFsbHkganVzdCBpbml0aWFsaXppbmcgYHBnZGF0LSZndDtub2RlX3BhZ2VfZXh0ID0gTlVMTDtgIGluIGNlcnRhaW4gY29uZmlndXJhdGlvbnMsIGFuZCBjb21wbGV0ZWx5IGVtcHR5IGluIG90aGVycy4gU2VlbXMgbGlrZSBzb21lIHJlZHVuZGFudCBjb2RlLCBwb3RlbnRpYWxseS4KCldhaXQgYSBzZWNvbmQuLi4gaWYgd2UmIzM5O3JlIHJlbW92aW5nIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwgZG9lcyB0aGF0IG1lYW4gYG5vZGVfcGFnZV9leHRgIGl0c2VsZiBpcyBiZWluZyByZW1vdmVkPyBJIG5lZWQgdG8gdmVyaWZ5IHRoaXMuIExldCBtZSBxdWlja2x5IGNoZWNrIGlmIGBub2RlX3BhZ2VfZXh0YCBzdGlsbCBleGlzdHMgd2l0aGluIHRoZSBgcGdsaXN0X2RhdGFgIHN0cnVjdHVyZS4gVGltZSB0byBydW4gYSBxdWljayBncmVwIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGVsc2UgcmVsaWVzIG9uIGl0IGFuZCB0aGF0IHdlJiMzOTtyZSBub3QgYWJvdXQgdG8gYnJlYWsgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bm9kZV9wYWdlX2V4dCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q9MjEwPUdlbmVyYWxcbi0tXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMjMwLVxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjIzMTpgYG5vZGVfcGFnZV9leHRgYFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTIzMi0gIEZvciBVTUEgc3lzdGVtcyB0aGF0IHVzZSBGTEFUTUVNIG1lbW9yeSBtb2RlbCB0aGUgMCYjMzk7cyBub2RlXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjMzOiAgYGBub2RlX3BhZ2VfZXh0YGAgaXMgYXJyYXkgb2YgZXh0ZW5zaW9ucyBvZiBzdHJ1Y3QgcGFnZXMuIEF2YWlsYWJsZSBvbmx5XG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMjM0LSAgaW4gdGhlIGtlcm5lbHMgYnVpbHQgd2l0aCBgYENPTkZJR19QQUdFX0VYVEVOU0lPTmBgIGVuYWJsZWQuXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdD0yMDU9bm9kZV96b25lbGlzdHPlvJXnlKjjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTIxOS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjIwOmBgbm9kZV9wYWdlX2V4dGBgXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjIyMTrlr7nkuo7kvb/nlKhGTEFUTUVN5YaF5a2Y5qih5Z6L55qEVU1B57O757uf77yMMOWPt+iKgueCueeahCBgYG5vZGVfcGFnZV9leHRgYFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0yMjIt5pivc3RydWN0IHBhZ2Vz55qE5omp5bGV5pWw57uE44CC5Y+q5pyJ5Zyo5p6E5bu65pe25byA5ZCv5LqGIGBgQ09ORklHX1BBR0VfRVhURU5TSU9OYGBcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTE0Nzk9dHlwZWRlZiBzdHJ1Y3QgcGdsaXN0X2RhdGEge1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTQ5Ny0jaWZkZWYgQ09ORklHX1BBR0VfRVhURU5TSU9OXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE0OTg6XHRzdHJ1Y3QgcGFnZV9leHQgKm5vZGVfcGFnZV9leHQ7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE0OTktI2VuZGlmXG4tLVxubW0vcGFnZV9leHQuYz0xNjc9c3RhdGljIHN0cnVjdCBwYWdlX2V4dCAqbG9va3VwX3BhZ2VfZXh0KGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL3BhZ2VfZXh0LmMtMTczLVx0V0FSTl9PTl9PTkNFKCFyY3VfcmVhZF9sb2NrX2hlbGQoKSk7XG5tbS9wYWdlX2V4dC5jOjE3NDpcdGJhc2UgPSBOT0RFX0RBVEEocGFnZV90b19uaWQocGFnZSkpLVx1MDAzZW5vZGVfcGFnZV9leHQ7XG5tbS9wYWdlX2V4dC5jLTE3NS1cdC8qXG4tLVxubW0vcGFnZV9leHQuYy0xODctXG5tbS9wYWdlX2V4dC5jOjE4ODpzdGF0aWMgaW50IF9faW5pdCBhbGxvY19ub2RlX3BhZ2VfZXh0KGludCBuaWQpXG5tbS9wYWdlX2V4dC5jLTE4OS17XG4tLVxubW0vcGFnZV9leHQuYy0yMTMtXHRcdHJldHVybiAtRU5PTUVNO1xubW0vcGFnZV9leHQuYzoyMTQ6XHROT0RFX0RBVEEobmlkKS1cdTAwM2Vub2RlX3BhZ2VfZXh0ID0gYmFzZTtcbm1tL3BhZ2VfZXh0LmMtMjE1LVx0dG90YWxfdXNhZ2UgJiM0Mzs9IHRhYmxlX3NpemU7XG4tLVxubW0vcGFnZV9leHQuYz0yMjA9dm9pZCBfX2luaXQgcGFnZV9leHRfaW5pdF9mbGF0bWVtKHZvaWQpXG4tLVxubW0vcGFnZV9leHQuYy0yMjgtXHRmb3JfZWFjaF9vbmxpbmVfbm9kZShuaWQpICB7XG5tbS9wYWdlX2V4dC5jOjIyOTpcdFx0ZmFpbCA9IGFsbG9jX25vZGVfcGFnZV9leHQobmlkKTtcbm1tL3BhZ2VfZXh0LmMtMjMwLVx0XHRpZiAoZmFpbClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzE0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgUmVtb3ZhbCBvZiBgcGdkYXRfcGFnZV9leHRfaW5pdGAqKgoKT2theSwgc28gYG5vZGVfcGFnZV9leHRgIGlzIHN0aWxsIGJlaW5nIGFjdGl2ZWx5IHV0aWxpemVkIHdpdGhpbiBgYWxsb2Nfbm9kZV9wYWdlX2V4dGAgYW5kIGBsb29rdXBfcGFnZV9leHRgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gVGhlIHBhdGNoIGluIHF1ZXN0aW9uIGlzIGp1c3QgZWxpbWluYXRpbmcgdGhlIGBwZ2RhdF9wYWdlX2V4dF9pbml0YCBmdW5jdGlvbiwgd2hpY2ggd2FzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgaXQgdG8gYE5VTExgLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoYXQgaW5pdGlhbGl6YXRpb24gc3RpbGwgbmVjZXNzYXJ5PwoKSG1tLi4uIGEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IHRoZSBgcGdkYXRgIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgdXNpbmcgZWl0aGVyIGBremFsbG9jYCBvciBgbWVtYmxvY2tfYWxsb2NgLCBhbmQgYm90aCBvZiB0aG9zZSBtZXRob2RzIHplcm8gdGhlIGFsbG9jYXRlZCBtZW1vcnkuIFRoaXMgc3VnZ2VzdHMgdGhlIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIG1pZ2h0IGJlIHJlZHVuZGFudC4gVG8gYmUgY29tcGxldGVseSBzdXJlLCBJIHNob3VsZCB2ZXJpZnkgdGhlIGBwZ2RhdF9pbml0X2ludGVybmFsc2AgZnVuY3Rpb24gaW4gYG1tL21tX2luaXQuY2AgdG8gY29uZmlybSB0aGUgbWVtb3J5IGluaXRpYWxpemF0aW9uIGJlaGF2aW9yLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBpdCB0byBtYWtlIGNlcnRhaW4gbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGdkYXRfaW5pdF9pbnRlcm5hbHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbW1faW5pdC5jPTEzODA9c3RhdGljIHZvaWQgcGdkYXRfaW5pdF9rY29tcGFjdGQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkge31cbi0tXG5tbS9tbV9pbml0LmMtMTM4Mi1cbm1tL21tX2luaXQuYzoxMzgzOnN0YXRpYyB2b2lkIF9fbWVtaW5pdCBwZ2RhdF9pbml0X2ludGVybmFscyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxubW0vbW1faW5pdC5jLTEzODQte1xuLS1cbm1tL21tX2luaXQuYz0xNTMyPWludCBfX3JlZiBmcmVlX2FyZWFfaW5pdF9jb3JlX2hvdHBsdWcoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbi0tXG5tbS9tbV9pbml0LmMtMTUzNy1cbm1tL21tX2luaXQuYzoxNTM4Olx0cGdkYXRfaW5pdF9pbnRlcm5hbHMocGdkYXQpO1xubW0vbW1faW5pdC5jLTE1MzktXG4tLVxubW0vbW1faW5pdC5jPTE1OTA9c3RhdGljIHZvaWQgX19pbml0IGZyZWVfYXJlYV9pbml0X2NvcmUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbi0tXG5tbS9tbV9pbml0LmMtMTU5NC1cbm1tL21tX2luaXQuYzoxNTk1Olx0cGdkYXRfaW5pdF9pbnRlcm5hbHMocGdkYXQpO1xubW0vbW1faW5pdC5jLTE1OTYtXHRwZ2RhdC1cdTAwM2VwZXJfY3B1X25vZGVzdGF0cyA9IFx1MDAyNmJvb3Rfbm9kZXN0YXRzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNTcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgSW5pdGlhbGl6YXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIHRoZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcywgc3BlY2lmaWNhbGx5IHRoZSBgcGdkYXRfaW5pdF9pbnRlcm5hbHNgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHJlbW92aW5nIGEgY2FsbCB0byBgcGdkYXRfcGFnZV9leHRfaW5pdChwZ2RhdCk7YC4gVGhpcyBmdW5jdGlvbiB3YXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgYHBnZGF0LSZndDtub2RlX3BhZ2VfZXh0YCB0byBgTlVMTGAuIFRoZSBrZXkgcXVlc3Rpb24gaGVyZSBpcywgZG9lcyB0aGlzIHJlbW92YWwgcmVwcmVzZW50IGEgZnVuY3Rpb25hbCBjaGFuZ2U/IEl0IGZlZWxzIGxpa2UgaXQgbWlnaHQgYmUgcmVkdW5kYW50LCBidXQgSSBuZWVkIHRvIGJlIHN1cmUuCgpJZiBgcGdkYXRgIGlzIGluaXRpYWxpemVkIHdpdGggemVyb3MsIHdoaWNoIGlzIGNvbW1vbiBpbiBtYW55IGFyY2hpdGVjdHVyZXMsIHRoZW4gc2V0dGluZyBgcGdkYXQtJmd0O25vZGVfcGFnZV9leHRgIHRvIGBOVUxMYCBleHBsaWNpdGx5IHdvdWxkIGJlIHJlZHVuZGFudCwgYmVjYXVzZSBpdCYjMzk7cyBhbHJlYWR5IGltcGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gemVybywgd2hpY2ggaXMgdGhlIHNhbWUgdGhpbmcgYXMgYE5VTExgIGluIHRoaXMgY29udGV4dC4gQnV0LCBJIHJlYWxseSBjYW4mIzM5O3Qgc2F5IGZvciBzdXJlLCB3aXRob3V0IHZlcmlmeWluZyBob3cgYW5kIHdoZXJlIHRoaXMgc3RydWN0dXJlLCBgcGdkYXRgLCBpcyBhY3R1YWxseSBhbGxvY2F0ZWQuIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBjb2RlIGZvciBgcGdkYXRgIGl0c2VsZiB0byBiZSBjZXJ0YWluLiBUaGF0JiMzOTtzIHRoZSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2Nfbm9kZV9kYXRhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbG9vbmdhcmNoL2tlcm5lbC9udW1hLmM9MTQzPXN0YXRpYyB2b2lkIF9faW5pdCBub2RlX21lbV9pbml0KHVuc2lnbmVkIGludCBub2RlKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9udW1hLmMtMTU1LVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL251bWEuYzoxNTY6XHRhbGxvY19ub2RlX2RhdGEobm9kZSk7XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbnVtYS5jLTE1Ny19XG4tLVxuYXJjaC9taXBzL2xvb25nc29uNjQvbnVtYS5jPTgyPXN0YXRpYyB2b2lkIF9faW5pdCBub2RlX21lbV9pbml0KHVuc2lnbmVkIGludCBub2RlKVxuLS1cbmFyY2gvbWlwcy9sb29uZ3NvbjY0L251bWEuYy05NC1cbmFyY2gvbWlwcy9sb29uZ3NvbjY0L251bWEuYzo5NTpcdGFsbG9jX25vZGVfZGF0YShub2RlKTtcbmFyY2gvbWlwcy9sb29uZ3NvbjY0L251bWEuYy05Ni1cbi0tXG5hcmNoL3Bvd2VycGMvbW0vbnVtYS5jPTEwOTM9c3RhdGljIHZvaWQgX19pbml0IHNldHVwX25vZGVfZGF0YShpbnQgbmlkLCB1NjQgc3RhcnRfcGZuLCB1NjQgZW5kX3Bmbilcbi0tXG5hcmNoL3Bvd2VycGMvbW0vbnVtYS5jLTEwOTYtXG5hcmNoL3Bvd2VycGMvbW0vbnVtYS5jOjEwOTc6XHRhbGxvY19ub2RlX2RhdGEobmlkKTtcbmFyY2gvcG93ZXJwYy9tbS9udW1hLmMtMTA5OC1cbi0tXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYz0xMDY0PXN0YXRpYyB2b2lkIF9faW5pdCBhbGxvY2F0ZV9ub2RlX2RhdGEoaW50IG5pZClcbi0tXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYy0xMDY5LSNpZmRlZiBDT05GSUdfTlVNQVxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmM6MTA3MDpcdGFsbG9jX25vZGVfZGF0YShuaWQpO1xuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMtMTA3MS1cbi0tXG5hcmNoL3g4Ni9tbS9udW1hLmM9MTI2PXN0YXRpYyBpbnQgX19pbml0IG51bWFfcmVnaXN0ZXJfbm9kZXModm9pZClcbi0tXG5hcmNoL3g4Ni9tbS9udW1hLmMtMTQ0LVxuYXJjaC94ODYvbW0vbnVtYS5jOjE0NTpcdFx0YWxsb2Nfbm9kZV9kYXRhKG5pZCk7XG5hcmNoL3g4Ni9tbS9udW1hLmMtMTQ2LVx0XHRub2RlX3NldF9vbmxpbmUobmlkKTtcbi0tXG5kcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmM9MTk1PXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ub2RlX2RhdGEoaW50IG5pZCwgdTY0IHN0YXJ0X3BmbiwgdTY0IGVuZF9wZm4pXG4tLVxuZHJpdmVycy9iYXNlL2FyY2hfbnVtYS5jLTE5OS1cbmRyaXZlcnMvYmFzZS9hcmNoX251bWEuYzoyMDA6XHRhbGxvY19ub2RlX2RhdGEobmlkKTtcbmRyaXZlcnMvYmFzZS9hcmNoX251bWEuYy0yMDEtXG4tLVxuaW5jbHVkZS9saW51eC9udW1hLmg9MjU9ZXh0ZXJuIHN0cnVjdCBwZ2xpc3RfZGF0YSAqbm9kZV9kYXRhW107XG4tLVxuaW5jbHVkZS9saW51eC9udW1hLmgtMjctXG5pbmNsdWRlL2xpbnV4L251bWEuaDoyODp2b2lkIF9faW5pdCBhbGxvY19ub2RlX2RhdGEoaW50IG5pZCk7XG5pbmNsdWRlL2xpbnV4L251bWEuaC0yOS12b2lkIF9faW5pdCBhbGxvY19vZmZsaW5lX25vZGVfZGF0YShpbnQgbmlkKTtcbi0tXG5tbS9udW1hLmM9OT1FWFBPUlRfU1lNQk9MKG5vZGVfZGF0YSk7XG4tLVxubW0vbnVtYS5jLTExLS8qIEFsbG9jYXRlIE5PREVfREFUQSBmb3IgYSBub2RlIG9uIHRoZSBsb2NhbCBtZW1vcnkgKi9cbm1tL251bWEuYzoxMjp2b2lkIF9faW5pdCBhbGxvY19ub2RlX2RhdGEoaW50IG5pZClcbm1tL251bWEuYy0xMy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUxOQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGFsbG9jX25vZGVfZGF0YWAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHJldmlzaXQgYGFsbG9jX25vZGVfZGF0YWAgd2l0aGluIGBtbS9udW1hLmNgLiBJdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBOVU1BIG5vZGUgZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gdGFrZXMgcGxhY2UsIHNvIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gb3Igbm9kZSBjaGFyYWN0ZXJpc3RpY3MgYWxtb3N0IGNlcnRhaW5seSBoYXMgYSByb290IGhlcmUuIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgc3RhdGUgb2YgdGhlIGZ1bmN0aW9uLCB0aGUgc3BlY2lmaWMgY2FsbCBjaGFpbiwgYW5kIHRoZSBtZW1vcnkgc3RydWN0dXJlcyBjcmVhdGVkLiBJIGtub3cgaXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbiBmb3Igc2V0dGluZyB1cCB0aGUgbm9kZSYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBjb250ZXh0cywgYW5kIHN1YnRsZSBlcnJvcnMgY2FuIHByb3BhZ2F0ZSBhbmQgY2F1c2UgaGVhZGFjaGVzIGRvd24gdGhlIGxpbmUuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gbG9vayBmb3IgaG93IHRoaXMgaW50ZWdyYXRlcyB3aXRoIHRoZSBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzIHdpdGhpbiB0aGlzIGZpbGUgYXMgd2VsbCBhcyBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIE5VTUEgbGF5ZXIgYW5kIGl0cyBzcGVjaWZpYyBjYWxscyB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgQVBJcy4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBnZW5lcmljIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgdGhlIGFzc29jaWF0ZWQgZXJyb3ItaGFuZGxpbmcgcGF0aHMuIEEgZGVlcCBkaXZlIHdpbGwgdW5jb3ZlciBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgbGVha3Mgb3IsIG1heWJlIGp1c3QgbWF5YmUsIGEgc3RyYWlnaHRmb3J3YXJkIG1pc2NvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgX19pbml0IGFsbG9jX25vZGVfZGF0YSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L251bWEuaD0yNT1leHRlcm4gc3RydWN0IHBnbGlzdF9kYXRhICpub2RlX2RhdGFbXTtcbi0tXG5pbmNsdWRlL2xpbnV4L251bWEuaC0yNy1cbmluY2x1ZGUvbGludXgvbnVtYS5oOjI4OnZvaWQgX19pbml0IGFsbG9jX25vZGVfZGF0YShpbnQgbmlkKTtcbmluY2x1ZGUvbGludXgvbnVtYS5oLTI5LXZvaWQgX19pbml0IGFsbG9jX29mZmxpbmVfbm9kZV9kYXRhKGludCBuaWQpO1xuLS1cbm1tL251bWEuYz05PUVYUE9SVF9TWU1CT0wobm9kZV9kYXRhKTtcbi0tXG5tbS9udW1hLmMtMTEtLyogQWxsb2NhdGUgTk9ERV9EQVRBIGZvciBhIG5vZGUgb24gdGhlIGxvY2FsIG1lbW9yeSAqL1xubW0vbnVtYS5jOjEyOnZvaWQgX19pbml0IGFsbG9jX25vZGVfZGF0YShpbnQgbmlkKVxubW0vbnVtYS5jLTEzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk4MQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCBgbW0vbnVtYS5jYCBhbmQgZm9jdXMgb24gbGluZXMgMTIgdGhyb3VnaCAzMC4gTXkgZ29hbCBoZXJlIGlzIHRvIGdldCBhIHF1aWNrIGdyYXNwIG9mIHRoZSBjb250ZXh0IHRoZXNlIGxpbmVzIGVzdGFibGlzaC4gVGhpcyBsaWtlbHkgbWVhbnMgdGhleSYjMzk7cmUgc2V0dGluZyB1cCBzb21lIGZ1bmRhbWVudGFsIGRlZmluaXRpb25zLCBkYXRhIHN0cnVjdHVyZXMsIG9yIGluaXRpYWxpemF0aW9ucyByZWxhdGVkIHRvIE5VTUEgKE5vbi1Vbmlmb3JtIE1lbW9yeSBBY2Nlc3MpIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2UgZGVjbGFyYXRpb25zIG9mIHJlbGV2YW50IHN0cnVjdHVyZXMsIHBvc3NpYmx5IHNvbWUgY29uc3RhbnQgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBub2RlIHNpemVzIG9yIG1lbW9yeSB6b25lcywgYW5kIG1heWJlIHNvbWUgaW5pdGlhbCBhc3NpZ25tZW50cyBvciBmdW5jdGlvbiBwcm90b3R5cGVzIHRoYXQgYXJlIGNydWNpYWwgdG8gdGhlIE5VTUEgYXJjaGl0ZWN0dXJlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCBob3cgdGhlIGtlcm5lbCBpcyBwZXJjZWl2aW5nIGFuZCBpbnRlcmFjdGluZyB3aXRoIHRoZSBkaWZmZXJlbnQgbWVtb3J5IG5vZGVzIGF2YWlsYWJsZSBpbiB0aGUgc3lzdGVtLiBLbm93aW5nIHRoaXMgZm91bmRhdGlvbiB3aWxsIGhlbHAgbWUgcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBtb3JlIGNvbXBsZXggbG9naWMgdGhhdCB3aWxsIGZvbGxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9udW1hLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDEyOlx0dm9pZCBfX2luaXQgYWxsb2Nfbm9kZV9kYXRhKGludCBuaWQpXG4gIDEzOlx0e1xuICAxNDpcdFx0Y29uc3Qgc2l6ZV90IG5kX3NpemUgPSByb3VuZHVwKHNpemVvZihwZ19kYXRhX3QpLCBTTVBfQ0FDSEVfQllURVMpO1xuICAxNTpcdFx0dTY0IG5kX3BhO1xuICAxNjpcdFx0aW50IHRuaWQ7XG4gIDE3Olx0XG4gIDE4Olx0XHQvKiBBbGxvY2F0ZSBub2RlIGRhdGEuICBUcnkgbm9kZS1sb2NhbCBtZW1vcnkgYW5kIHRoZW4gYW55IG5vZGUuICovXG4gIDE5Olx0XHRuZF9wYSA9IG1lbWJsb2NrX3BoeXNfYWxsb2NfdHJ5X25pZChuZF9zaXplLCBTTVBfQ0FDSEVfQllURVMsIG5pZCk7XG4gIDIwOlx0XHRpZiAoIW5kX3BhKVxuICAyMTpcdFx0XHRwYW5pYyhcJiMzNDtDYW5ub3QgYWxsb2NhdGUgJXp1IGJ5dGVzIGZvciBub2RlICVkIGRhdGFcXG5cJiMzNDssXG4gIDIyOlx0XHRcdCAgICAgIG5kX3NpemUsIG5pZCk7XG4gIDIzOlx0XG4gIDI0Olx0XHQvKiByZXBvcnQgYW5kIGluaXRpYWxpemUgKi9cbiAgMjU6XHRcdHByX2luZm8oXCYjMzQ7Tk9ERV9EQVRBKCVkKSBhbGxvY2F0ZWQgW21lbSAlIzAxMEx4LSUjMDEwTHhdXFxuXCYjMzQ7LCBuaWQsXG4gIDI2Olx0XHRcdG5kX3BhLCBuZF9wYSAmIzQzOyBuZF9zaXplIC0gMSk7XG4gIDI3Olx0XHR0bmlkID0gZWFybHlfcGZuX3RvX25pZChuZF9wYSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4gIDI4Olx0XHRpZiAodG5pZCAhPSBuaWQpXG4gIDI5Olx0XHRcdHByX2luZm8oXCYjMzQ7ICAgIE5PREVfREFUQSglZCkgb24gbm9kZSAlZFxcblwmIzM0OywgbmlkLCB0bmlkKTtcbiAgMzA6XHRcbiAgMzE6XHRcdG5vZGVfZGF0YVtuaWRdID0gX192YShuZF9wYSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NzUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczogKipIYW5nIG9uIGEgc2Vjb25kLCBkb2VzIGBtZW1ibG9ja19waHlzX2FsbG9jX3RyeV9uaWRgIGFjdHVhbGx5IHplcm8gb3V0IHRoZSBtZW1vcnkgaXQgYWxsb2NhdGVzIGJ5IGRlZmF1bHQ/KiogVGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8ga25vdy4gSWYgaXQgZG9lcywgdGhhdCYjMzk7cyBvbmUgbGVzcyB0aGluZyBJIGhhdmUgdG8gd29ycnkgYWJvdXQuIElmIG5vdCwgSSYjMzk7bGwgbmVlZCB0byBleHBsaWNpdGx5IHplcm8gaXQgbXlzZWxmIHdoaWNoIGNvdWxkIGludHJvZHVjZSBzb21lIGNvbXBsZXhpdHkuCgpTbywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBMZXQmIzM5O3MgZGl2ZSByaWdodCBpbnRvIHRoZSBjb2RlIGZvciBgbWVtYmxvY2tfcGh5c19hbGxvY190cnlfbmlkYCBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4gR290dGEgY29uZmlybSB0aGlzIGJlaGF2aW9yIGJlZm9yZSBJIG1vdmUgZm9yd2FyZCwgbm8gYXNzdW1wdGlvbnMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWJsb2NrX3BoeXNfYWxsb2NfdHJ5X25pZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg9NDAyPXBoeXNfYWRkcl90IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChwaHlzX2FkZHJfdCBzaXplLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC00MDQtXHRcdFx0XHQgICAgICBwaHlzX2FkZHJfdCBlbmQsIGludCBuaWQsIGJvb2wgZXhhY3RfbmlkKTtcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaDo0MDU6cGh5c19hZGRyX3QgbWVtYmxvY2tfcGh5c19hbGxvY190cnlfbmlkKHBoeXNfYWRkcl90IHNpemUsIHBoeXNfYWRkcl90IGFsaWduLCBpbnQgbmlkKTtcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC00MDYtXG4tLVxubW0vbWVtYmxvY2suYz0xNjIxPXBoeXNfYWRkcl90IF9faW5pdCBtZW1ibG9ja19waHlzX2FsbG9jX3JhbmdlKHBoeXNfYWRkcl90IHNpemUsXG4tLVxubW0vbWVtYmxvY2suYy0xNjMzLS8qKlxubW0vbWVtYmxvY2suYzoxNjM0OiAqIG1lbWJsb2NrX3BoeXNfYWxsb2NfdHJ5X25pZCAtIGFsbG9jYXRlIGEgbWVtb3J5IGJsb2NrIGZyb20gc3BlY2lmaWVkIE5VTUEgbm9kZVxubW0vbWVtYmxvY2suYy0xNjM1LSAqIEBzaXplOiBzaXplIG9mIG1lbW9yeSBibG9jayB0byBiZSBhbGxvY2F0ZWQgaW4gYnl0ZXNcbi0tXG5tbS9tZW1ibG9jay5jLTE2NDUtICovXG5tbS9tZW1ibG9jay5jOjE2NDY6cGh5c19hZGRyX3QgX19pbml0IG1lbWJsb2NrX3BoeXNfYWxsb2NfdHJ5X25pZChwaHlzX2FkZHJfdCBzaXplLCBwaHlzX2FkZHJfdCBhbGlnbiwgaW50IG5pZClcbm1tL21lbWJsb2NrLmMtMTY0Ny17XG4tLVxubW0vbnVtYS5jPTEyPXZvaWQgX19pbml0IGFsbG9jX25vZGVfZGF0YShpbnQgbmlkKVxuLS1cbm1tL251bWEuYy0xOC1cdC8qIEFsbG9jYXRlIG5vZGUgZGF0YS4gIFRyeSBub2RlLWxvY2FsIG1lbW9yeSBhbmQgdGhlbiBhbnkgbm9kZS4gKi9cbm1tL251bWEuYzoxOTpcdG5kX3BhID0gbWVtYmxvY2tfcGh5c19hbGxvY190cnlfbmlkKG5kX3NpemUsIFNNUF9DQUNIRV9CWVRFUywgbmlkKTtcbm1tL251bWEuYy0yMC1cdGlmICghbmRfcGEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMTQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBtbS9tZW1ibG9jay5jYCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgbW0vbWVtYmxvY2suY2AgZmlsZSwgc3BlY2lmaWNhbGx5IGxpbmVzIDE2NDYgdGhyb3VnaCAxNjYwLiBNeSBpbnRlcm5hbCBwYXJzaW5nIGVuZ2luZSBpcyBhbHJlYWR5IGNodXJuaW5nLiBJIGtub3cgdGhpcyBmaWxlIGlzIGNydWNpYWwgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgdGhvc2Ugc3BlY2lmaWMgbGluZXMgcHJvYmFibHkgZGVhbCB3aXRoIGEgcHJldHR5IGltcG9ydGFudCBhc3BlY3Qgb2YgdGhlIG1lbWJsb2NrJiMzOTtzIG9wZXJhdGlvbi4gSSYjMzk7bSBndWVzc2luZyBpdCYjMzk7cyByZWxhdGVkIHRvIGFsbG9jYXRpb24sIGZyZWVpbmcsIG9yIG1heWJlIGluaXRpYWxpemF0aW9uLCBnaXZlbiB0aGUgY29udGV4dC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQgcGVhcmxzIG9mIHdpc2RvbSB0aGlzIHNlY3Rpb24gaG9sZHMuIEkmIzM5O20gZXhwZWN0aW5nIHNvbWV0aGluZyBudWFuY2VkLCBwb3RlbnRpYWxseSBpbnZvbHZpbmcgYWRkcmVzc2luZyBjb21wbGV4IGhhcmR3YXJlIGludGVyYWN0aW9ucyBvciByZXNvdXJjZSBjb25zdHJhaW50cywgb3Igc29tZSBjbGV2ZXIgYml0IG1hbmlwdWxhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1ibG9jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY0NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjQ2Olx0cGh5c19hZGRyX3QgX19pbml0IG1lbWJsb2NrX3BoeXNfYWxsb2NfdHJ5X25pZChwaHlzX2FkZHJfdCBzaXplLCBwaHlzX2FkZHJfdCBhbGlnbiwgaW50IG5pZClcbjE2NDc6XHR7XG4xNjQ4Olx0XHRyZXR1cm4gbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHNpemUsIGFsaWduLCAwLFxuMTY0OTpcdFx0XHRcdFx0XHRNRU1CTE9DS19BTExPQ19BQ0NFU1NJQkxFLCBuaWQsIGZhbHNlKTtcbjE2NTA6XHR9XG4xNjUxOlx0XG4xNjUyOlx0LyoqXG4xNjUzOlx0ICogbWVtYmxvY2tfYWxsb2NfaW50ZXJuYWwgLSBhbGxvY2F0ZSBib290IG1lbW9yeSBibG9ja1xuMTY1NDpcdCAqIEBzaXplOiBzaXplIG9mIG1lbW9yeSBibG9jayB0byBiZSBhbGxvY2F0ZWQgaW4gYnl0ZXNcbjE2NTU6XHQgKiBAYWxpZ246IGFsaWdubWVudCBvZiB0aGUgcmVnaW9uIGFuZCBibG9jayYjMzk7cyBzaXplXG4xNjU2Olx0ICogQG1pbl9hZGRyOiB0aGUgbG93ZXIgYm91bmQgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gYWxsb2NhdGUgKHBoeXMgYWRkcmVzcylcbjE2NTc6XHQgKiBAbWF4X2FkZHI6IHRoZSB1cHBlciBib3VuZCBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBhbGxvY2F0ZSAocGh5cyBhZGRyZXNzKVxuMTY1ODpcdCAqIEBuaWQ6IG5pZCBvZiB0aGUgZnJlZSBhcmVhIHRvIGZpbmQsICVOVU1BX05PX05PREUgZm9yIGFueSBub2RlXG4xNjU5Olx0ICogQGV4YWN0X25pZDogY29udHJvbCB0aGUgYWxsb2NhdGlvbiBmYWxsIGJhY2sgdG8gb3RoZXIgbm9kZXNcbjE2NjA6XHQgKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzM4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKk1lbW9yeSBBbGxvY2F0aW9uIENvbmNlcm5zKioKCkhvbGQgb24gYSBzZWNvbmQuLi4gaXMgbXkgdW5kZXJzdGFuZGluZyBvZiBgbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkYCBjb3JyZWN0PyBJIHRob3VnaHQgaXQgKmNsZWFyZWQqIHRoZSBtZW1vcnkgaXQgYWxsb2NhdGVzLCBidXQgbm93IEkmIzM5O20gaGF2aW5nIGEgbmFnZ2luZyBkb3VidC4gSSBuZWVkIHRvIHZlcmlmeSB0aGlzIGFzc3VtcHRpb24uIElmIGl0IGRvZXNuJiMzOTt0IGNsZWFyIHRoZSBtZW1vcnksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3RhdGUgaXQgbGVhdmVzIGl0IGluLCBhbmQgd2hldGhlciBvciBub3QgdGhhdCBpbnRyb2R1Y2VzIGFueSBzZWN1cml0eSBvciBzdGFiaWxpdHkgY29uY2VybnMgaW4gdGhlIHN5c3RlbSBJJiMzOTttIHdvcmtpbmcgb24uIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBhbmQgZG91YmxlLWNoZWNrIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBjb2RlIGZvciBib3RoIGBtZW1ibG9ja19hbGxvY19pbnRlcm5hbGAgYW5kIGBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuZGFtZW50YWwgZGlmZmVyZW5jZSBhbmQgY29udHJvbCBiZXR3ZWVuIHRoZSB0d28uIE9uZSBvZiB0aGVzZSBmdW5jdGlvbnMgbXVzdCBoYW5kbGUgbWVtb3J5IGNsZWFyaW5nLCBhbmQgaWYgaXQmIzM5O3Mgbm90IHRoZSBvbmUgSSAqdGhvdWdodCogaXQgd2FzLCBJIG5lZWQgdG8gYWRqdXN0IG15IGFwcHJvYWNoIGFjY29yZGluZ2x5LiBUaGlzIHNlZW1zIGxpa2UgYSBjcml0aWNhbCBkZXRhaWwgSSBjYW4mIzM5O3QgYWZmb3JkIHRvIGdldCB3cm9uZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtYmxvY2suaD00MDA9cGh5c19hZGRyX3QgbWVtYmxvY2tfcGh5c19hbGxvY19yYW5nZShwaHlzX2FkZHJfdCBzaXplLCBwaHlzX2FkZHJfdCBhbGlnbixcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC00MDEtXHRcdFx0XHQgICAgICBwaHlzX2FkZHJfdCBzdGFydCwgcGh5c19hZGRyX3QgZW5kKTtcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaDo0MDI6cGh5c19hZGRyX3QgbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHBoeXNfYWRkcl90IHNpemUsXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtNDAzLVx0XHRcdFx0ICAgICAgcGh5c19hZGRyX3QgYWxpZ24sIHBoeXNfYWRkcl90IHN0YXJ0LFxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NjcyPXN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy03MjQtXHRcdHNpemUgPSBzY3JhdGNoX3NpemVfbm9kZShuaWQpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo3MjU6XHRcdGFkZHIgPSBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQoc2l6ZSwgQ01BX01JTl9BTElHTk1FTlRfQllURVMsXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTcyNi1cdFx0XHRcdFx0XHQwLCBNRU1CTE9DS19BTExPQ19BQ0NFU1NJQkxFLFxuLS1cbm1tL2NtYS5jPTM4Nz1zdGF0aWMgcGh5c19hZGRyX3QgX19pbml0IGNtYV9hbGxvY19tZW0ocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcbi0tXG5tbS9jbWEuYy00MDItXHRcdG1lbWJsb2NrX3NldF9ib3R0b21fdXAodHJ1ZSk7XG5tbS9jbWEuYzo0MDM6XHRcdGFkZHIgPSBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQoc2l6ZSwgYWxpZ24sIFNaXzRHLCBsaW1pdCxcbm1tL2NtYS5jLTQwNC1cdFx0XHRcdFx0XHRuaWQsIHRydWUpO1xuLS1cbm1tL2NtYS5jLTQyMi1cdFx0aWYgKGJhc2UgXHUwMDNjIGhpZ2htZW0gXHUwMDI2XHUwMDI2IGxpbWl0IFx1MDAzZSBoaWdobWVtKSB7XG5tbS9jbWEuYzo0MjM6XHRcdFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBhbGlnbiwgaGlnaG1lbSxcbm1tL2NtYS5jLTQyNC1cdFx0XHRcdFx0XHRcdGxpbWl0LCBuaWQsIHRydWUpO1xuLS1cbm1tL2NtYS5jLTQyOS1cdGlmICghYWRkcilcbm1tL2NtYS5jOjQzMDpcdFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBhbGlnbiwgYmFzZSwgbGltaXQsIG5pZCxcbm1tL2NtYS5jLTQzMS1cdFx0XHRcdFx0XHR0cnVlKTtcbi0tXG5tbS9tZW1ibG9jay5jLTk2LSAqIG1lbW9yeSByYW5nZXMgYW5kIHRoZSBmYWxsYmFjayBtZXRob2RzLiBDb25zdWx0IHRoZSBkb2N1bWVudGF0aW9uXG5tbS9tZW1ibG9jay5jOjk3OiAqIG9mIG1lbWJsb2NrX2FsbG9jX2ludGVybmFsKCkgYW5kIG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZCgpXG5tbS9tZW1ibG9jay5jLTk4LSAqIGZ1bmN0aW9ucyBmb3IgbW9yZSBlbGFib3JhdGUgZGVzY3JpcHRpb24uXG4tLVxubW0vbWVtYmxvY2suYz0xNDkxPWludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfc2V0X25vZGUocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcbi0tXG5tbS9tZW1ibG9jay5jLTE1MTAtLyoqXG5tbS9tZW1ibG9jay5jOjE1MTE6ICogbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkIC0gYWxsb2NhdGUgYm9vdCBtZW1vcnkgYmxvY2tcbm1tL21lbWJsb2NrLmMtMTUxMi0gKiBAc2l6ZTogc2l6ZSBvZiBtZW1vcnkgYmxvY2sgdG8gYmUgYWxsb2NhdGVkIGluIGJ5dGVzXG4tLVxubW0vbWVtYmxvY2suYy0xNTM0LSAqL1xubW0vbWVtYmxvY2suYzoxNTM1OnBoeXNfYWRkcl90IF9faW5pdCBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQocGh5c19hZGRyX3Qgc2l6ZSxcbm1tL21lbWJsb2NrLmMtMTUzNi1cdFx0XHRcdFx0cGh5c19hZGRyX3QgYWxpZ24sIHBoeXNfYWRkcl90IHN0YXJ0LFxuLS1cbm1tL21lbWJsb2NrLmM9MTYyMT1waHlzX2FkZHJfdCBfX2luaXQgbWVtYmxvY2tfcGh5c19hbGxvY19yYW5nZShwaHlzX2FkZHJfdCBzaXplLFxuLS1cbm1tL21lbWJsb2NrLmMtMTYyOC1cdFx0ICAgICAodm9pZCAqKV9SRVRfSVBfKTtcbm1tL21lbWJsb2NrLmM6MTYyOTpcdHJldHVybiBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQoc2l6ZSwgYWxpZ24sIHN0YXJ0LCBlbmQsIE5VTUFfTk9fTk9ERSxcbm1tL21lbWJsb2NrLmMtMTYzMC1cdFx0XHRcdFx0ZmFsc2UpO1xuLS1cbm1tL21lbWJsb2NrLmM9MTY0Nj1waHlzX2FkZHJfdCBfX2luaXQgbWVtYmxvY2tfcGh5c19hbGxvY190cnlfbmlkKHBoeXNfYWRkcl90IHNpemUsIHBoeXNfYWRkcl90IGFsaWduLCBpbnQgbmlkKVxubW0vbWVtYmxvY2suYy0xNjQ3LXtcbm1tL21lbWJsb2NrLmM6MTY0ODpcdHJldHVybiBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQoc2l6ZSwgYWxpZ24sIDAsXG5tbS9tZW1ibG9jay5jLTE2NDktXHRcdFx0XHRcdE1FTUJMT0NLX0FMTE9DX0FDQ0VTU0lCTEUsIG5pZCwgZmFsc2UpO1xuLS1cbm1tL21lbWJsb2NrLmMtMTY2MC0gKlxubW0vbWVtYmxvY2suYzoxNjYxOiAqIEFsbG9jYXRlcyBtZW1vcnkgYmxvY2sgdXNpbmcgbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKCkgYW5kXG5tbS9tZW1ibG9jay5jLTE2NjItICogY29udmVydHMgdGhlIHJldHVybmVkIHBoeXNpY2FsIGFkZHJlc3MgdG8gdmlydHVhbC5cbi0tXG5tbS9tZW1ibG9jay5jLTE2NjYtICogYXMgbm9kZSBhbmQgbWlycm9yZWQgbWVtb3J5IHdpbGwgYmUgaGFuZGxlZCBhZ2FpbiBpblxubW0vbWVtYmxvY2suYzoxNjY3OiAqIG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZCgpLlxubW0vbWVtYmxvY2suYy0xNjY4LSAqXG4tLVxubW0vbWVtYmxvY2suYz0xNjcyPXN0YXRpYyB2b2lkICogX19pbml0IG1lbWJsb2NrX2FsbG9jX2ludGVybmFsKFxuLS1cbm1tL21lbWJsb2NrLmMtMTY4Mi1cbm1tL21lbWJsb2NrLmM6MTY4MzpcdGFsbG9jID0gbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHNpemUsIGFsaWduLCBtaW5fYWRkciwgbWF4X2FkZHIsIG5pZCxcbm1tL21lbWJsb2NrLmMtMTY4NC1cdFx0XHRcdFx0ZXhhY3RfbmlkKTtcbi0tXG5tbS9tZW1ibG9jay5jLTE2ODctXHRpZiAoIWFsbG9jIFx1MDAyNlx1MDAyNiBtaW5fYWRkcilcbm1tL21lbWJsb2NrLmM6MTY4ODpcdFx0YWxsb2MgPSBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQoc2l6ZSwgYWxpZ24sIDAsIG1heF9hZGRyLCBuaWQsXG5tbS9tZW1ibG9jay5jLTE2ODktXHRcdFx0XHRcdFx0ZXhhY3RfbmlkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM3OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBOb2RlIERhdGEgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBgbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkYCBnaXZlcyB1cyBhICpwaHlzaWNhbCogYWRkcmVzcywgcmlnaHQ/IFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBUaGVuLCBsZXQmIzM5O3MgbG9vayBhdCBgYWxsb2Nfbm9kZV9kYXRhYC4gQWhhISBJdCBjYWxscyBgbWVtYmxvY2tfcGh5c19hbGxvY190cnlfbmlkYC4gU28sIGl0JiMzOTtzIGRlZmluaXRlbHkgdHJ5aW5nIHRvIGFsbG9jYXRlIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgdXNpbmcgYG1lbWJsb2NrYCwgYW5kIGl0JiMzOTtzIGF0dGVtcHRpbmcgdGhpcyBmb3IgYSBzcGVjaWZpYyBub2RlIElEIChgbmlkYCkuIElmIHRoYXQgZmFpbHMsIGl0IHBhbmljcyDigJMgYSBwcmV0dHkgZm9yY2VmdWwgaW5kaWNhdG9yLiBJdCB0aGVuIGxvZ3MgdGhlIGFsbG9jYXRpb24sIGluZGljYXRpbmcgdGhlIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UuIEl0IGNhbGN1bGF0ZXMgdGhlIG5vZGUgSUQgb2YgdGhlIGFsbG9jYXRlZCBwaHlzaWNhbCBhZGRyZXNzIHRocm91Z2ggYGVhcmx5X3Bmbl90b19uaWRgLCB0byBlbnN1cmUgd2hhdCBub2RlIHRoZSBtZW1vcnkgaXMgb24uIENyaXRpY2FsbHksIGFuZCB0aGlzIGlzIHdoYXQgSSB3YXMgbG9va2luZyBmb3IsIGl0IGFzc2lnbnMgdGhlIHZpcnR1YWwgYWRkcmVzcyB1c2luZyBgX192YShuZF9wYSlgIHRvIGBub2RlX2RhdGFbbmlkXWAuIEFuZCBoZXJlIGl0IGlzLi4uIHRoZXJlIGl0IGlzISBgbWVtc2V0YCEgSXQgKmRvZXMqIHplcm8gdGhlIGFsbG9jYXRlZCBtZW1vcnkgdXNpbmcgYG1lbXNldChub2RlX2RhdGFbbmlkXSwgMCwgc2l6ZW9mKHBnX2RhdGFfdCkpYC4gT2theSwgc28gdGhlIGBwZ19kYXRhX3RgIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCB0byB6ZXJvIGFmdGVyIHRoZSBwaHlzaWNhbCBhbGxvY2F0aW9uLiBNYWtlcyBzZW5zZS4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIGluaXRpYWxpemF0aW9uIHN0ZXAuIEdvb2QuIE5vdywgSSBoYXZlIGEgcHJldHR5IGNsZWFyIHBpY3R1cmUgb2YgdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9udW1hLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0XHRwcl9pbmZvKFwmIzM0O05PREVfREFUQSglZCkgYWxsb2NhdGVkIFttZW0gJSMwMTBMeC0lIzAxMEx4XVxcblwmIzM0OywgbmlkLFxuICAyNjpcdFx0XHRuZF9wYSwgbmRfcGEgJiM0MzsgbmRfc2l6ZSAtIDEpO1xuICAyNzpcdFx0dG5pZCA9IGVhcmx5X3Bmbl90b19uaWQobmRfcGEgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuICAyODpcdFx0aWYgKHRuaWQgIT0gbmlkKVxuICAyOTpcdFx0XHRwcl9pbmZvKFwmIzM0OyAgICBOT0RFX0RBVEEoJWQpIG9uIG5vZGUgJWRcXG5cJiMzNDssIG5pZCwgdG5pZCk7XG4gIDMwOlx0XG4gIDMxOlx0XHRub2RlX2RhdGFbbmlkXSA9IF9fdmEobmRfcGEpO1xuICAzMjpcdFx0bWVtc2V0KE5PREVfREFUQShuaWQpLCAwLCBzaXplb2YocGdfZGF0YV90KSk7XG4gIDMzOlx0fVxuICAzNDpcdFxuICAzNTpcdHZvaWQgX19pbml0IGFsbG9jX29mZmxpbmVfbm9kZV9kYXRhKGludCBuaWQpXG4gIDM2Olx0e1xuICAzNzpcdFx0cGdfZGF0YV90ICpwZ2RhdDtcbiAgMzg6XHRcdG5vZGVfZGF0YVtuaWRdID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZW9mKCpwZ2RhdCksIFNNUF9DQUNIRV9CWVRFUyk7XG4gIDM5Olx0fVxuICA0MDpcdFxuICA0MTpcdC8qIFN0dWIgZnVuY3Rpb25zOiAqL1xuICA0MjpcdFxuICA0MzpcdCNpZm5kZWYgbWVtb3J5X2FkZF9waHlzYWRkcl90b19uaWRcbiAgNDQ6XHRpbnQgbWVtb3J5X2FkZF9waHlzYWRkcl90b19uaWQodTY0IHN0YXJ0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDMwNgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1lbW9yeSBJbml0aWFsaXphdGlvbiBhbmQgTm9kZSBEYXRhOiBBIFF1aWNrIFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCwgYWhhISwgSSBzZWUgdGhlIGBtZW1zZXRgIHJpZ2h0IHRoZXJlIG9uIGxpbmUgMzIuIEl0JiMzOTtzIGluaXRpYWxpemluZyBgTk9ERV9EQVRBKG5pZClgIHdpdGggemVyb3MsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBgcGdfZGF0YV90YCBzdHJ1Y3R1cmUuIFRoYXQgY29uZmlybXMgdGhlIGV4cGVjdGF0aW9uIHRoYXQgYHBnZGF0YCBpcyBpbmRlZWQgYWx3YXlzIHplcm8taW5pdGlhbGl6ZWQgYXQgdGhpcyBwb2ludC4KCkJ1dCBJJiMzOTttIGFsc28gdGhpbmtpbmcuLi4gZGlkbiYjMzk7dCB3ZSB1c2UgYGFsbG9jX29mZmxpbmVfbm9kZV9kYXRhYCByZWNlbnRseT8gSSBrbm93IHRoYXQgZnVuY3Rpb24gdXNlcyBgbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWNgLiBOb3csIHRoYXQgb25lIGlzIGltcG9ydGFudC4gSSB0aGluayBJIHJlbWVtYmVyIHRoYXQgYG1lbWJsb2NrX2FsbG9jX29yX3BhbmljYCBldmVudHVhbGx5IGNhbGxzIGBtZW1ibG9ja19hbGxvY2AgdW5kZXJuZWF0aC4gQW5kIGlmIG15IG1lbW9yeSBpcyByaWdodCwgYG1lbWJsb2NrX2FsbG9jYCBhbHNvIHplcm9lcyBvdXQgdGhlIG1lbW9yeSBpdCBhbGxvY2F0ZXMuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBzaG91bGQgcmVhbGx5IGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWNgIGl0c2VsZi4gQmVzdCB0byBjb25maXJtIHRoYXQgbXkgYXNzdW1wdGlvbnMgYXJlIHNvdW5kLCB5b3Uga25vdz8gSXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWJsb2NrX2FsbG9jX29yX3BhbmljJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA2MDggbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfY2lhLmM9MzI4PWNpYV9wcmVwYXJlX3RiaWFfd29ya2Fyb3VuZChpbnQgd2luZG93KVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfY2lhLmMtMzMzLVx0LyogVXNlIG1pbmltYWwgMUsgbWFwLiAqL1xuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9jaWEuYzozMzQ6XHRwcHRlID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoQ0lBX0JST0tFTl9UQklBX1NJWkUsIDMyNzY4KTtcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfY2lhLmMtMzM1LVx0cHRlID0gKHZpcnRfdG9fcGh5cyhwcHRlKSBcdTAwM2VcdTAwM2UgKFBBR0VfU0hJRlQgLSAxKSkgfCAxO1xuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmM9Nzk9bWtfcmVzb3VyY2VfbmFtZShpbnQgcGUsIGludCBwb3J0LCBjaGFyICpzdHIpXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYy04Ni1cdHN6ICYjNDM7PSAxOyAvKiBOVUwgdGVybWluYXRvciAqL1xuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYzo4NzpcdG5hbWUgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzeiwgU01QX0NBQ0hFX0JZVEVTKTtcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtODgtXHRzdHJzY3B5KG5hbWUsIHRtcCwgc3opO1xuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmM9MTExPWFsbG9jX2lvNyh1bnNpZ25lZCBpbnQgcGUpXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYy0xMjEtXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jOjEyMjpcdGlvNyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZigqaW83KSwgU01QX0NBQ0hFX0JZVEVTKTtcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtMTIzLVx0aW83LVx1MDAzZXBlID0gcGU7XG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmM9MzkxPWFsbG9jX3BjaV9jb250cm9sbGVyKHZvaWQpXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMtMzk0LVxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmM6Mzk1Olx0aG9zZSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZigqaG9zZSksIFNNUF9DQUNIRV9CWVRFUyk7XG5hcmNoL2FscGhhL2tlcm5lbC9wY2kuYy0zOTYtXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmM9NDA0PWFsbG9jX3Jlc291cmNlKHZvaWQpXG5hcmNoL2FscGhhL2tlcm5lbC9wY2kuYy00MDUte1xuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmM6NDA2Olx0cmV0dXJuIG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpLCBTTVBfQ0FDSEVfQllURVMpO1xuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMtNDA3LX1cbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9wY2lfaW9tbXUuYz02MD1pb21tdV9hcmVuYV9uZXdfbm9kZShpbnQgbmlkLCBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsIGRtYV9hZGRyX3QgYmFzZSxcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9wY2lfaW9tbXUuYy03NC1cbmFyY2gvYWxwaGEva2VybmVsL3BjaV9pb21tdS5jOjc1Olx0YXJlbmEgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YoKmFyZW5hKSwgU01QX0NBQ0hFX0JZVEVTKTtcbmFyY2gvYWxwaGEva2VybmVsL3BjaV9pb21tdS5jOjc2Olx0YXJlbmEtXHUwMDNlcHRlcyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKG1lbV9zaXplLCBhbGlnbik7XG5hcmNoL2FscGhhL2tlcm5lbC9wY2lfaW9tbXUuYy03Ny1cbi0tXG5hcmNoL2FybS9rZXJuZWwvc2V0dXAuYz04NTU9c3RhdGljIHZvaWQgX19pbml0IHJlcXVlc3Rfc3RhbmRhcmRfcmVzb3VyY2VzKGNvbnN0IHN0cnVjdCBtYWNoaW5lX2Rlc2MgKm1kZXNjKVxuLS1cbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jLTg4Mi1cdFx0aWYgKGFybV9oYXNfaWRtYXBfYWxpYXMoKSBcdTAwMjZcdTAwMjYgYm9vdF9hbGlhc19zdGFydCAhPSBJRE1BUF9JTlZBTElEX0FERFIpIHtcbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jOjg4MzpcdFx0XHRyZXMgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YoKnJlcyksIFNNUF9DQUNIRV9CWVRFUyk7XG5hcmNoL2FybS9rZXJuZWwvc2V0dXAuYy04ODQtXHRcdFx0cmVzLVx1MDAzZW5hbWUgPSBcJiMzNDtTeXN0ZW0gUkFNIChib290IGFsaWFzKVwmIzM0Oztcbi0tXG5hcmNoL2FybS9rZXJuZWwvc2V0dXAuYy04OTAtXG5hcmNoL2FybS9rZXJuZWwvc2V0dXAuYzo4OTE6XHRcdHJlcyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZigqcmVzKSwgU01QX0NBQ0hFX0JZVEVTKTtcbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jLTg5Mi1cdFx0cmVzLVx1MDAzZW5hbWUgID0gXCYjMzQ7U3lzdGVtIFJBTVwmIzM0Oztcbi0tXG5hcmNoL2FybS9tbS9tbXUuYz03MjA9c3RhdGljIHZvaWQgX19pbml0ICplYXJseV9hbGxvYyh1bnNpZ25lZCBsb25nIHN6KVxuYXJjaC9hcm0vbW0vbW11LmMtNzIxLXtcbmFyY2gvYXJtL21tL21tdS5jOjcyMjpcdHJldHVybiBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzeiwgc3opO1xuYXJjaC9hcm0vbW0vbW11LmMtNzIzLVxuLS1cbmFyY2gvYXJtL21tL21tdS5jPTEwMDk9dm9pZCBfX2luaXQgaW90YWJsZV9pbml0KHN0cnVjdCBtYXBfZGVzYyAqaW9fZGVzYywgaW50IG5yKVxuLS1cbmFyY2gvYXJtL21tL21tdS5jLTEwMTctXG5hcmNoL2FybS9tbS9tbXUuYzoxMDE4Olx0c3ZtID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZW9mKCpzdm0pICogbnIsIF9fYWxpZ25vZl9fKCpzdm0pKTtcbmFyY2gvYXJtL21tL21tdS5jLTEwMTktXG4tLVxuYXJjaC9hcm0vbW0vbW11LmM9MTAzND12b2lkIF9faW5pdCB2bV9yZXNlcnZlX2FyZWFfZWFybHkodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsXG4tLVxuYXJjaC9hcm0vbW0vbW11LmMtMTAzOS1cbmFyY2gvYXJtL21tL21tdS5jOjEwNDA6XHRzdm0gPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YoKnN2bSksIF9fYWxpZ25vZl9fKCpzdm0pKTtcbmFyY2gvYXJtL21tL21tdS5jLTEwNDEtXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYz0yMTA9c3RhdGljIHZvaWQgX19pbml0IHJlcXVlc3Rfc3RhbmRhcmRfcmVzb3VyY2VzKHZvaWQpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYy0yMjUtXHRyZXNfc2l6ZSA9IG51bV9zdGFuZGFyZF9yZXNvdXJjZXMgKiBzaXplb2YoKnN0YW5kYXJkX3Jlc291cmNlcyk7XG5hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jOjIyNjpcdHN0YW5kYXJkX3Jlc291cmNlcyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHJlc19zaXplLCBTTVBfQ0FDSEVfQllURVMpO1xuYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYy0yMjctXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM9NDIxPXN0YXRpYyB2b2lkIF9faW5pdCByZXNvdXJjZV9pbml0KHZvaWQpXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDM2LVx0cmVzX3NpemUgPSBudW1fc3RhbmRhcmRfcmVzb3VyY2VzICogc2l6ZW9mKCpzdGFuZGFyZF9yZXNvdXJjZXMpO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM6NDM3Olx0c3RhbmRhcmRfcmVzb3VyY2VzID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMocmVzX3NpemUsIFNNUF9DQUNIRV9CWVRFUyk7XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYy00MzgtXG4tLVxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jPTE2MD1wdGVfdCAqIF9faW5pdCBwb3B1bGF0ZV9rZXJuZWxfcHRlKHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5hcmNoL2xvb25nYXJjaC9tbS9pbml0LmMtMTY3LVx0aWYgKHA0ZF9ub25lKHA0ZHBfZ2V0KHA0ZCkpKSB7XG5hcmNoL2xvb25nYXJjaC9tbS9pbml0LmM6MTY4Olx0XHRwdWQgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQQUdFX1NJWkUsIFBBR0VfU0laRSk7XG5hcmNoL2xvb25nYXJjaC9tbS9pbml0LmMtMTY5LVx0XHRwNGRfcG9wdWxhdGUoXHUwMDI2aW5pdF9tbSwgcDRkLCBwdWQpO1xuLS1cbmFyY2gvbG9vbmdhcmNoL21tL2luaXQuYy0xNzYtXHRpZiAocHVkX25vbmUocHVkcF9nZXQocHVkKSkpIHtcbmFyY2gvbG9vbmdhcmNoL21tL2luaXQuYzoxNzc6XHRcdHBtZCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBBR0VfU0laRSwgUEFHRV9TSVpFKTtcbmFyY2gvbG9vbmdhcmNoL21tL2luaXQuYy0xNzgtXHRcdHB1ZF9wb3B1bGF0ZShcdTAwMjZpbml0X21tLCBwdWQsIHBtZCk7XG4tLVxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jLTE4Ny1cbmFyY2gvbG9vbmdhcmNoL21tL2luaXQuYzoxODg6XHRcdHB0ZSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBBR0VfU0laRSwgUEFHRV9TSVpFKTtcbmFyY2gvbG9vbmdhcmNoL21tL2luaXQuYy0xODktXHRcdHBtZF9wb3B1bGF0ZV9rZXJuZWwoXHUwMDI2aW5pdF9tbSwgcG1kLCBwdGUpO1xuLS1cbmFyY2gvbTY4ay9tbS9tY2ZtbXUuYz0zNj12b2lkIF9faW5pdCBwYWdpbmdfaW5pdCh2b2lkKVxuLS1cbmFyY2gvbTY4ay9tbS9tY2ZtbXUuYy00OC1cdHNpemUgPSAoc2l6ZSAmIzQzOyBQQUdFX1NJWkUpIFx1MDAyNiB+KFBBR0VfU0laRS0xKTtcbmFyY2gvbTY4ay9tbS9tY2ZtbXUuYzo0OTpcdG5leHRfcGd0YWJsZSA9ICh1bnNpZ25lZCBsb25nKSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplLCBQQUdFX1NJWkUpO1xuYXJjaC9tNjhrL21tL21jZm1tdS5jLTUwLVxuLS1cbmFyY2gvbTY4ay9tbS9zdW4zbW11LmM9MzY9dm9pZCBfX2luaXQgcGFnaW5nX2luaXQodm9pZClcbi0tXG5hcmNoL202OGsvbW0vc3VuM21tdS5jLTUzLVxuYXJjaC9tNjhrL21tL3N1bjNtbXUuYzo1NDpcdG5leHRfcGd0YWJsZSA9ICh1bnNpZ25lZCBsb25nKW1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemUsIFBBR0VfU0laRSk7XG5hcmNoL202OGsvbW0vc3VuM21tdS5jLTU1LVx0Ym9vdG1lbV9lbmQgPSAobmV4dF9wZ3RhYmxlICYjNDM7IHNpemUgJiM0MzsgUEFHRV9TSVpFKSBcdTAwMjYgUEFHRV9NQVNLO1xuLS1cbmFyY2gvbTY4ay9zdW4zL3N1bjNkdm1hLmM9MjM1PXZvaWQgX19pbml0IGR2bWFfaW5pdCh2b2lkKVxuLS1cbmFyY2gvbTY4ay9zdW4zL3N1bjNkdm1hLmMtMjU0LVxuYXJjaC9tNjhrL3N1bjMvc3VuM2R2bWEuYzoyNTU6XHRpb21tdV91c2UgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhJT01NVV9UT1RBTF9FTlRSSUVTICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLFxuYXJjaC9tNjhrL3N1bjMvc3VuM2R2bWEuYy0yNTYtXHRcdFx0XHQgICBTTVBfQ0FDSEVfQllURVMpO1xuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYz02ODM9c3RhdGljIHZvaWQgX19pbml0IHJlc291cmNlX2luaXQodm9pZClcbi0tXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNzAwLVxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jOjcwMTpcdFx0cmVzID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSksIFNNUF9DQUNIRV9CWVRFUyk7XG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNzAyLVxuLS1cbmFyY2gvbWlwcy9tbS9pbml0LmM9NTk9dm9pZCBfX2luaXQgYXJjaF9zZXR1cF96ZXJvX3BhZ2VzKHZvaWQpXG4tLVxuYXJjaC9taXBzL21tL2luaXQuYy02Ny1cbmFyY2gvbWlwcy9tbS9pbml0LmM6Njg6XHRlbXB0eV96ZXJvX3BhZ2UgPSAodW5zaWduZWQgbG9uZyltZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyLCBQQUdFX1NJWkUpO1xuYXJjaC9taXBzL21tL2luaXQuYy02OS1cbi0tXG5hcmNoL29wZW5yaXNjL21tL2lvcmVtYXAuYz0zND1wdGVfdCBfX3JlZiAqcHRlX2FsbG9jX29uZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxuYXJjaC9vcGVucmlzYy9tbS9pb3JlbWFwLmMtNDAtXHR9IGVsc2Uge1xuYXJjaC9vcGVucmlzYy9tbS9pb3JlbWFwLmM6NDE6XHRcdHB0ZSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBBR0VfU0laRSwgUEFHRV9TSVpFKTtcbmFyY2gvb3BlbnJpc2MvbW0vaW9yZW1hcC5jLTQyLVx0fVxuLS1cbmFyY2gvcGFyaXNjL21tL2luaXQuYz0zNDM9c3RhdGljIHZvaWQgX19yZWYgbWFwX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfdmFkZHIsXG4tLVxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTM3OS1cdFx0aWYgKHB1ZF9ub25lKCpwdWQpKSB7XG5hcmNoL3BhcmlzYy9tbS9pbml0LmM6MzgwOlx0XHRcdHBtZCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBBR0VfU0laRSBcdTAwM2NcdTAwM2MgUE1EX1RBQkxFX09SREVSLFxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTM4MS1cdFx0XHRcdFx0ICAgICBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIFBNRF9UQUJMRV9PUkRFUik7XG4tLVxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTM4OC1cdFx0XHRpZiAocG1kX25vbmUoKnBtZCkpIHtcbmFyY2gvcGFyaXNjL21tL2luaXQuYzozODk6XHRcdFx0XHRwZ190YWJsZSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBBR0VfU0laRSwgUEFHRV9TSVpFKTtcbmFyY2gvcGFyaXNjL21tL2luaXQuYy0zOTAtXHRcdFx0XHRwbWRfcG9wdWxhdGVfa2VybmVsKE5VTEwsIHBtZCwgcGdfdGFibGUpO1xuLS1cbmFyY2gvcGFyaXNjL21tL2luaXQuYz02NjE9c3RhdGljIHZvaWQgX19pbml0IGZpeG1hcF9pbml0KHZvaWQpXG4tLVxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTY3My1cdGlmIChwdWRfbm9uZSgqcHVkKSkge1xuYXJjaC9wYXJpc2MvbW0vaW5pdC5jOjY3NDpcdFx0cG1kID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBQTURfVEFCTEVfT1JERVIsXG5hcmNoL3BhcmlzYy9tbS9pbml0LmMtNjc1LVx0XHRcdFx0ICAgICBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIFBNRF9UQUJMRV9PUkRFUik7XG4tLVxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTY4MS1cdGRvIHtcbmFyY2gvcGFyaXNjL21tL2luaXQuYzo2ODI6XHRcdHB0ZV90ICpwdGUgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQQUdFX1NJWkUsIFBBR0VfU0laRSk7XG5hcmNoL3BhcmlzYy9tbS9pbml0LmMtNjgzLVxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvZHRfY3B1X2Z0cnMuYz0xMDc4PXN0YXRpYyBpbnQgX19pbml0IGR0X2NwdV9mdHJzX3NjYW5fY2FsbGJhY2sodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9kdF9jcHVfZnRycy5jLTEwOTktXHRkdF9jcHVfZmVhdHVyZXMgPVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9kdF9jcHVfZnRycy5jOjExMDA6XHRcdG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9kdF9jcHVfZnRycy5jLTExMDEtXHRcdFx0c2l6ZW9mKHN0cnVjdCBkdF9jcHVfZmVhdHVyZSkgKiBucl9kdF9jcHVfZmVhdHVyZXMsXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfMzIuYz0yMTE9cGNpX2NyZWF0ZV9PRl9idXNfbWFwKHZvaWQpXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfMzIuYy0yMTUtXG5hcmNoL3Bvd2VycGMva2VybmVsL3BjaV8zMi5jOjIxNjpcdG9mX3Byb3AgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2Yoc3RydWN0IHByb3BlcnR5KSAmIzQzOyAyNTYsXG5hcmNoL3Bvd2VycGMva2VybmVsL3BjaV8zMi5jLTIxNy1cdFx0XHRcdCBTTVBfQ0FDSEVfQllURVMpO1xuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmM9NDUxPXZvaWQgX19pbml0IHNtcF9zZXR1cF9jcHVfbWFwcyh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMtNDU4LVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYzo0NTk6XHRjcHVfdG9fcGh5c19pZCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKG5yX2NwdV9pZHMgKiBzaXplb2YodTMyKSxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMtNDYwLVx0XHRcdFx0XHRfX2FsaWdub2ZfXyh1MzIpKTtcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmM9MTQxPXN0YXRpYyB2b2lkICpfX2luaXQgYWxsb2Nfc3RhY2sodm9pZClcbmFyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYy0xNDIte1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF8zMi5jOjE0MzpcdHJldHVybiBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhUSFJFQURfU0laRSwgVEhSRUFEX0FMSUdOKTtcbmFyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYy0xNDQtfVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3MzMi9tbXUuYz0zNDY9dm9pZCBfX2luaXQgTU1VX2luaXRfaHcodm9pZClcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzMzIvbW11LmMtMzc3LVx0aWYgKCBwcGNfbWQucHJvZ3Jlc3MgKSBwcGNfbWQucHJvZ3Jlc3MoXCYjMzQ7aGFzaDpmaW5kIHBpZWNlXCYjMzQ7LCAweDMyMik7XG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzMzIvbW11LmM6Mzc4Olx0SGFzaCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKEhhc2hfc2l6ZSwgSGFzaF9zaXplKTtcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3MzMi9tbXUuYy0zNzktXHRfU0RSMSA9IF9fcGEoSGFzaCkgfCBTRFIxX0xPV19CSVRTO1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9wZ3RhYmxlLmM9MzA0PXZvaWQgX19pbml0IG1tdV9wYXJ0aXRpb25fdGFibGVfaW5pdCh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9wZ3RhYmxlLmMtMzA5LVx0LyogSW5pdGlhbGl6ZSB0aGUgUGFydGl0aW9uIFRhYmxlIHdpdGggbm8gZW50cmllcyAqL1xuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3BndGFibGUuYzozMTA6XHRwYXJ0aXRpb25fdGIgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhwYXRiX3NpemUsIHBhdGJfc2l6ZSk7XG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcGd0YWJsZS5jLTMxMS1cdHB0Y3IgPSBfX3BhKHBhcnRpdGlvbl90YikgfCAoUEFUQl9TSVpFX1NISUZUIC0gMTIpO1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jPTMyPXN0YXRpYyBpbnQgX19pbml0IGthc2FuX21hcF9rZXJuZWxfcGFnZSh1bnNpZ25lZCBsb25nIGVhLCB1bnNpZ25lZCBsb25nIHBhLCBwZ3Byb3RfdCBwcm90KVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jLTQyLVx0aWYgKGthc2FuX3B1ZF90YWJsZSgqcDRkcCkpIHtcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jOjQzOlx0XHRwdWRwID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUFVEX1RBQkxFX1NJWkUsIFBVRF9UQUJMRV9TSVpFKTtcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jLTQ0LVx0XHRtZW1jcHkocHVkcCwga2FzYW5fZWFybHlfc2hhZG93X3B1ZCwgUFVEX1RBQkxFX1NJWkUpO1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jLTQ4LVx0aWYgKGthc2FuX3BtZF90YWJsZSgqcHVkcCkpIHtcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jOjQ5Olx0XHRwbWRwID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUE1EX1RBQkxFX1NJWkUsIFBNRF9UQUJMRV9TSVpFKTtcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jLTUwLVx0XHRtZW1jcHkocG1kcCwga2FzYW5fZWFybHlfc2hhZG93X3BtZCwgUE1EX1RBQkxFX1NJWkUpO1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jLTU0LVx0aWYgKGthc2FuX3B0ZV90YWJsZSgqcG1kcCkpIHtcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jOjU1Olx0XHRwdGVwID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUFRFX1RBQkxFX1NJWkUsIFBURV9UQUJMRV9TSVpFKTtcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jLTU2LVx0XHRtZW1jcHkocHRlcCwga2FzYW5fZWFybHlfc2hhZG93X3B0ZSwgUFRFX1RBQkxFX1NJWkUpO1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jPTY2PXN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9pbml0X3BoeXNfcmVnaW9uKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpXG4tLVxuYXJjaC9wb3dlcnBjL21tL2thc2FuL2luaXRfYm9vazNlXzY0LmMtNzYtXG5hcmNoL3Bvd2VycGMvbW0va2FzYW4vaW5pdF9ib29rM2VfNjQuYzo3NzpcdHZhID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoa19lbmQgLSBrX3N0YXJ0LCBQQUdFX1NJWkUpO1xuYXJjaC9wb3dlcnBjL21tL2thc2FuL2luaXRfYm9vazNlXzY0LmMtNzgtXHRmb3IgKGtfY3VyID0ga19zdGFydDsga19jdXIgXHUwMDNjIGtfZW5kOyBrX2N1ciAmIzQzOz0gUEFHRV9TSVpFLCB2YSAmIzQzOz0gUEFHRV9TSVpFKVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szc182NC5jPTIyPXN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9pbml0X3BoeXNfcmVnaW9uKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpXG4tLVxuYXJjaC9wb3dlcnBjL21tL2thc2FuL2luaXRfYm9vazNzXzY0LmMtMzItXG5hcmNoL3Bvd2VycGMvbW0va2FzYW4vaW5pdF9ib29rM3NfNjQuYzozMzpcdHZhID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoa19lbmQgLSBrX3N0YXJ0LCBQQUdFX1NJWkUpO1xuYXJjaC9wb3dlcnBjL21tL2thc2FuL2luaXRfYm9vazNzXzY0LmMtMzQtXHRmb3IgKGtfY3VyID0ga19zdGFydDsga19jdXIgXHUwMDNjIGtfZW5kOyBrX2N1ciAmIzQzOz0gUEFHRV9TSVpFLCB2YSAmIzQzOz0gUEFHRV9TSVpFKVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvbW11X2NvbnRleHQuYz0zNjk9dm9pZCBfX2luaXQgbW11X2NvbnRleHRfaW5pdCh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvbW11X2NvbnRleHQuYy0zNzktXHQgKi9cbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvbW11X2NvbnRleHQuYzozODA6XHRjb250ZXh0X21hcCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKENUWF9NQVBfU0laRSwgU01QX0NBQ0hFX0JZVEVTKTtcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvbW11X2NvbnRleHQuYzozODE6XHRjb250ZXh0X21tID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZW9mKHZvaWQgKikgKiAoTEFTVF9DT05URVhUICYjNDM7IDEpLFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC9tbXVfY29udGV4dC5jLTM4Mi1cdFx0XHRcdCAgICBTTVBfQ0FDSEVfQllURVMpO1xuYXJjaC9wb3dlcnBjL21tL25vaGFzaC9tbXVfY29udGV4dC5jLTM4My1cdGlmIChJU19FTkFCTEVEKENPTkZJR19TTVApKSB7XG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL21tdV9jb250ZXh0LmM6Mzg0Olx0XHRzdGFsZV9tYXBbYm9vdF9jcHVpZF0gPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhDVFhfTUFQX1NJWkUsIFNNUF9DQUNIRV9CWVRFUyk7XG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL21tdV9jb250ZXh0LmMtMzg1LVx0XHRjcHVocF9zZXR1cF9zdGF0ZV9ub2NhbGxzKENQVUhQX1BPV0VSUENfTU1VX0NUWF9QUkVQQVJFLFxuLS1cbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmM9NTE9dm9pZCBfX2luaXQgKmVhcmx5X2FsbG9jX3BndGFibGUodW5zaWduZWQgbG9uZyBzaXplKVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYy01Mi17XG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jOjUzOlx0cmV0dXJuIG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemUsIHNpemUpO1xuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYy01NC1cbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL252cmFtLmM9NTA4PXN0YXRpYyBpbnQgX19pbml0IGNvcmU5OV9udnJhbV9zZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9udnJhbS5jLTUxNi1cdH1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbnZyYW0uYzo1MTc6XHRudnJhbV9pbWFnZSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKE5WUkFNX1NJWkUsIFNNUF9DQUNIRV9CWVRFUyk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL252cmFtLmMtNTE4LVx0bnZyYW1fZGF0YSA9IGlvcmVtYXAoYWRkciwgTlZSQU1fU0laRSoyKTtcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC5jPTE0Nz1pbnQgX19pbml0IGVhcmx5X2luaXRfZHRfc2Nhbl9yZWNvdmVyYWJsZV9yYW5nZXModW5zaWduZWQgbG9uZyBub2RlLFxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLmMtMTgyLVx0ICovXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC5jOjE4MzpcdG1jX3JlY292ZXJhYmxlX3JhbmdlID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZSwgX19hbGlnbm9mX18odTY0KSk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC5jLTE4NC1cbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zZXR1cC5jPTExND1zdGF0aWMgdm9pZCBfX2luaXQgcHJlYWxsb2Moc3RydWN0IHBzM19wcmVhbGxvYyAqcClcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zZXR1cC5jLTExOC1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3NldHVwLmM6MTE5Olx0cC1cdTAwM2VhZGRyZXNzID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMocC1cdTAwM2VzaXplLCBwLVx1MDAzZWFsaWduKTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3NldHVwLmMtMTIwLVxuLS1cbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXNpX2JpdG1hcC5jPTExMj1pbnQgX19yZWYgbXNpX2JpdG1hcF9hbGxvYyhzdHJ1Y3QgbXNpX2JpdG1hcCAqYm1wLCB1bnNpZ25lZCBpbnQgaXJxX2NvdW50LFxuLS1cbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXNpX2JpdG1hcC5jLTEyNi1cdGVsc2Uge1xuYXJjaC9wb3dlcnBjL3N5c2Rldi9tc2lfYml0bWFwLmM6MTI3Olx0XHRibXAtXHUwMDNlYml0bWFwID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZSwgU01QX0NBQ0hFX0JZVEVTKTtcbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXNpX2JpdG1hcC5jLTEyOC1cdFx0LyogdGhlIGJpdG1hcCB3b24mIzM5O3QgYmUgZnJlZWQgZnJvbSBtZW1ibG9jayBhbGxvY2F0b3IgKi9cbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9zZXR1cC5jPTEzNT1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9yZXNvdXJjZXModm9pZClcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9zZXR1cC5jLTE0OC1cdG1lbV9yZXNfc3ogPSBudW1fcmVzb3VyY2VzICogc2l6ZW9mKCptZW1fcmVzKTtcbmFyY2gvcmlzY3Yva2VybmVsL3NldHVwLmM6MTQ5Olx0bWVtX3JlcyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKG1lbV9yZXNfc3osIFNNUF9DQUNIRV9CWVRFUyk7XG5hcmNoL3Jpc2N2L2tlcm5lbC9zZXR1cC5jLTE1MC1cbi0tXG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYz0yOT1zdGF0aWMgdm9pZCBfX2luaXQga2FzYW5fcG9wdWxhdGVfcHRlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jLTM0LVx0aWYgKHBtZF9ub25lKHBtZHBfZ2V0KHBtZCkpKSB7XG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYzozNTpcdFx0cCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBUUlNfUEVSX1BURSAqIHNpemVvZihwdGVfdCksIFBBR0VfU0laRSk7XG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYy0zNi1cdFx0c2V0X3BtZChwbWQsIHBmbl9wbWQoUEZOX0RPV04oX19wYShwKSksIFBBR0VfVEFCTEUpKTtcbi0tXG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYz01MD1zdGF0aWMgdm9pZCBfX2luaXQga2FzYW5fcG9wdWxhdGVfcG1kKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jLTU2LVx0aWYgKHB1ZF9ub25lKHB1ZHBfZ2V0KHB1ZCkpKSB7XG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYzo1NzpcdFx0cCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBUUlNfUEVSX1BNRCAqIHNpemVvZihwbWRfdCksIFBBR0VfU0laRSk7XG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYy01OC1cdFx0c2V0X3B1ZChwdWQsIHBmbl9wdWQoUEZOX0RPV04oX19wYShwKSksIFBBR0VfVEFCTEUpKTtcbi0tXG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYz04MD1zdGF0aWMgdm9pZCBfX2luaXQga2FzYW5fcG9wdWxhdGVfcHVkKHA0ZF90ICpwNGQsXG4tLVxuYXJjaC9yaXNjdi9tbS9rYXNhbl9pbml0LmMtODctXHRpZiAocDRkX25vbmUocDRkcF9nZXQocDRkKSkpIHtcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jOjg4Olx0XHRwID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUFRSU19QRVJfUFVEICogc2l6ZW9mKHB1ZF90KSwgUEFHRV9TSVpFKTtcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jLTg5LVx0XHRzZXRfcDRkKHA0ZCwgcGZuX3A0ZChQRk5fRE9XTihfX3BhKHApKSwgUEFHRV9UQUJMRSkpO1xuLS1cbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jPTExMT1zdGF0aWMgdm9pZCBfX2luaXQga2FzYW5fcG9wdWxhdGVfcDRkKHBnZF90ICpwZ2QsXG4tLVxuYXJjaC9yaXNjdi9tbS9rYXNhbl9pbml0LmMtMTE4LVx0aWYgKHBnZF9ub25lKHBnZHBfZ2V0KHBnZCkpKSB7XG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYzoxMTk6XHRcdHAgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQVFJTX1BFUl9QNEQgKiBzaXplb2YocDRkX3QpLCBQQUdFX1NJWkUpO1xuYXJjaC9yaXNjdi9tbS9rYXNhbl9pbml0LmMtMTIwLVx0XHRzZXRfcGdkKHBnZCwgcGZuX3BnZChQRk5fRE9XTihfX3BhKHApKSwgUEFHRV9UQUJMRSkpO1xuLS1cbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jPTM3Nz1zdGF0aWMgdm9pZCBfX2luaXQga2FzYW5fc2hhbGxvd19wb3B1bGF0ZV9wdWQocDRkX3QgKnA0ZCxcbi0tXG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYy0zODctXHRcdGlmIChwdWRfbm9uZShwdWRwX2dldChwdWRfaykpKSB7XG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYzozODg6XHRcdFx0cCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBBR0VfU0laRSwgUEFHRV9TSVpFKTtcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jLTM4OS1cdFx0XHRzZXRfcHVkKHB1ZF9rLCBwZm5fcHVkKFBGTl9ET1dOKF9fcGEocCkpLCBQQUdFX1RBQkxFKSk7XG4tLVxuYXJjaC9yaXNjdi9tbS9rYXNhbl9pbml0LmM9Mzk3PXN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9zaGFsbG93X3BvcHVsYXRlX3A0ZChwZ2RfdCAqcGdkLFxuLS1cbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jLTQwNy1cdFx0aWYgKHA0ZF9ub25lKHA0ZHBfZ2V0KHA0ZF9rKSkpIHtcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jOjQwODpcdFx0XHRwID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUEFHRV9TSVpFLCBQQUdFX1NJWkUpO1xuYXJjaC9yaXNjdi9tbS9rYXNhbl9pbml0LmMtNDA5LVx0XHRcdHNldF9wNGQocDRkX2ssIHBmbl9wNGQoUEZOX0RPV04oX19wYShwKSksIFBBR0VfVEFCTEUpKTtcbi0tXG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYz00MTc9c3RhdGljIHZvaWQgX19pbml0IGthc2FuX3NoYWxsb3dfcG9wdWxhdGVfcGdkKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jLTQyNi1cdFx0aWYgKHBnZF9ub25lKHBnZHBfZ2V0KHBnZF9rKSkpIHtcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jOjQyNzpcdFx0XHRwID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUEFHRV9TSVpFLCBQQUdFX1NJWkUpO1xuYXJjaC9yaXNjdi9tbS9rYXNhbl9pbml0LmMtNDI4LVx0XHRcdHNldF9wZ2QocGdkX2ssIHBmbl9wZ2QoUEZOX0RPV04oX19wYShwKSksIFBBR0VfVEFCTEUpKTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL2NyYXNoX2R1bXAuYz02Mz1zdHJ1Y3Qgc2F2ZV9hcmVhICogX19pbml0IHNhdmVfYXJlYV9hbGxvYyhib29sIGlzX2Jvb3RfY3B1KVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvY3Jhc2hfZHVtcC5jLTY2LVxuYXJjaC9zMzkwL2tlcm5lbC9jcmFzaF9kdW1wLmM6Njc6XHRzYSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZigqc2EpLCA4KTtcbmFyY2gvczM5MC9rZXJuZWwvY3Jhc2hfZHVtcC5jLTY4LVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvbnVtYS5jPTE3PXZvaWQgX19pbml0IG51bWFfc2V0dXAodm9pZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL251bWEuYy0yNC1cdGZvciAobmlkID0gMDsgbmlkIFx1MDAzYyBNQVhfTlVNTk9ERVM7IG5pZCYjNDM7JiM0MzspXG5hcmNoL3MzOTAva2VybmVsL251bWEuYzoyNTpcdFx0Tk9ERV9EQVRBKG5pZCkgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YocGdfZGF0YV90KSwgOCk7XG5hcmNoL3MzOTAva2VybmVsL251bWEuYy0yNi1cdE5PREVfREFUQSgwKS1cdTAwM2Vub2RlX3NwYW5uZWRfcGFnZXMgPSBtZW1ibG9ja19lbmRfb2ZfRFJBTSgpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYz0zNzg9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHN0YWNrX2FsbG9jX2Vhcmx5KHZvaWQpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTM4MS1cbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYzozODI6XHRzdGFjayA9ICh1bnNpZ25lZCBsb25nKW1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFRIUkVBRF9TSVpFLCBUSFJFQURfU0laRSk7XG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtMzgzLVx0cmV0dXJuIHN0YWNrO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYz00OTA9c3RhdGljIHZvaWQgX19pbml0IHNldHVwX3Jlc291cmNlcyh2b2lkKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy01MDQtXHRmb3JfZWFjaF9tZW1fcmFuZ2UoaSwgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCkge1xuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jOjUwNTpcdFx0cmVzID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZW9mKCpyZXMpLCA4KTtcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy01MDYtXHRcdHJlcy1cdTAwM2VmbGFncyA9IElPUkVTT1VSQ0VfQlVTWSB8IElPUkVTT1VSQ0VfU1lTVEVNX1JBTTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtNTIzLVx0XHRcdGlmIChzdGRfcmVzLVx1MDAzZWVuZCBcdTAwM2UgcmVzLVx1MDAzZWVuZCkge1xuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jOjUyNDpcdFx0XHRcdHN1Yl9yZXMgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YoKnN1Yl9yZXMpLCA4KTtcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy01MjUtXHRcdFx0XHQqc3ViX3JlcyA9ICpzdGRfcmVzO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYz04MTI9c3RhdGljIHZvaWQgX19pbml0IHNldHVwX3JhbmRvbW5lc3Modm9pZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtODE1LVxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jOjgxNjpcdHZtbXMgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQQUdFX1NJWkUsIFBBR0VfU0laRSk7XG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtODE3LVx0aWYgKHN0c2kodm1tcywgMywgMiwgMikgPT0gMCBcdTAwMjZcdTAwMjYgdm1tcy1cdTAwM2Vjb3VudClcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NtcC5jPTU5OD12b2lkIF9faW5pdCBzbXBfc2F2ZV9kdW1wX2lwbF9jcHUodm9pZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NtcC5jLTYwNS1cdHNhID0gc2F2ZV9hcmVhX2FsbG9jKHRydWUpO1xuYXJjaC9zMzkwL2tlcm5lbC9zbXAuYzo2MDY6XHRyZWdzID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoNTEyLCA4KTtcbmFyY2gvczM5MC9rZXJuZWwvc21wLmMtNjA3LVx0Y29weV9vbGRtZW1fa2VybmVsKHJlZ3MsIF9fTENfRlBSRUdTX1NBVkVfQVJFQSwgNTEyKTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NtcC5jPTc3Nz12b2lkIF9faW5pdCBzbXBfZGV0ZWN0X2NwdXModm9pZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NtcC5jLTc4My1cdC8qIEdldCBDUFUgaW5mb3JtYXRpb24gKi9cbmFyY2gvczM5MC9rZXJuZWwvc21wLmM6Nzg0Olx0aW5mbyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZigqaW5mbyksIDgpO1xuYXJjaC9zMzkwL2tlcm5lbC9zbXAuYy03ODUtXHRzbXBfZ2V0X2NvcmVfaW5mbyhpbmZvLCAxKTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL3RvcG9sb2d5LmM9NTM5PXN0YXRpYyB2b2lkIF9faW5pdCBhbGxvY19tYXNrcyhzdHJ1Y3Qgc3lzaW5mb18xNV8xX3ggKmluZm8sXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC90b3BvbG9neS5jLTU0OC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX21hc2tzOyBpJiM0MzsmIzQzOykge1xuYXJjaC9zMzkwL2tlcm5lbC90b3BvbG9neS5jOjU0OTpcdFx0bWFzay1cdTAwM2VuZXh0ID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZW9mKCptYXNrLVx1MDAzZW5leHQpLCA4KTtcbmFyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYy01NTAtXHRcdG1hc2sgPSBtYXNrLVx1MDAzZW5leHQ7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC90b3BvbG9neS5jPTU2ND12b2lkIF9faW5pdCB0b3BvbG9neV9pbml0X2Vhcmx5KHZvaWQpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC90b3BvbG9neS5jLTU3Ni1cdFx0Z290byBvdXQ7XG5hcmNoL3MzOTAva2VybmVsL3RvcG9sb2d5LmM6NTc3Olx0dGxfaW5mbyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBBR0VfU0laRSwgUEFHRV9TSVpFKTtcbmFyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYy01NzgtXHRpbmZvID0gdGxfaW5mbztcbi0tXG5hcmNoL3MzOTAvbW0vaW5pdC5jPTcyPXZvaWQgX19pbml0IGFyY2hfc2V0dXBfemVyb19wYWdlcyh2b2lkKVxuLS1cbmFyY2gvczM5MC9tbS9pbml0LmMtODMtXG5hcmNoL3MzOTAvbW0vaW5pdC5jOjg0Olx0ZW1wdHlfemVyb19wYWdlID0gKHVuc2lnbmVkIGxvbmcpbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBvcmRlciwgUEFHRV9TSVpFKTtcbmFyY2gvczM5MC9tbS9pbml0LmMtODUtXG4tLVxuYXJjaC9zaC9tbS9pbml0LmM9MTI5PXN0YXRpYyBwbWRfdCAqIF9faW5pdCBvbmVfbWRfdGFibGVfaW5pdChwdWRfdCAqcHVkKVxuLS1cbmFyY2gvc2gvbW0vaW5pdC5jLTEzMy1cbmFyY2gvc2gvbW0vaW5pdC5jOjEzNDpcdFx0cG1kID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUEFHRV9TSVpFLCBQQUdFX1NJWkUpO1xuYXJjaC9zaC9tbS9pbml0LmMtMTM1LVx0XHRwdWRfcG9wdWxhdGUoXHUwMDI2aW5pdF9tbSwgcHVkLCBwbWQpO1xuLS1cbmFyY2gvc2gvbW0vaW5pdC5jPTE0Mj1zdGF0aWMgcHRlX3QgKiBfX2luaXQgb25lX3BhZ2VfdGFibGVfaW5pdChwbWRfdCAqcG1kKVxuLS1cbmFyY2gvc2gvbW0vaW5pdC5jLTE0Ni1cbmFyY2gvc2gvbW0vaW5pdC5jOjE0NzpcdFx0cHRlID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUEFHRV9TSVpFLCBQQUdFX1NJWkUpO1xuYXJjaC9zaC9tbS9pbml0LmMtMTQ4LVx0XHRwbWRfcG9wdWxhdGVfa2VybmVsKFx1MDAyNmluaXRfbW0sIHBtZCwgcHRlKTtcbi0tXG5hcmNoL3NwYXJjL2tlcm5lbC9wcm9tXzMyLmM9Mjc9dm9pZCAqIF9faW5pdCBwcm9tX2Vhcmx5X2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbi0tXG5hcmNoL3NwYXJjL2tlcm5lbC9wcm9tXzMyLmMtMzAtXG5hcmNoL3NwYXJjL2tlcm5lbC9wcm9tXzMyLmM6MzE6XHRyZXQgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplLCBTTVBfQ0FDSEVfQllURVMpO1xuYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV8zMi5jLTMyLVxuLS1cbmFyY2gvc3BhcmMvbW0vc3JtbXUuYz0yNjY9c3RhdGljIHZvaWQgX19pbml0IHNybW11X25vY2FjaGVfaW5pdCh2b2lkKVxuLS1cbmFyY2gvc3BhcmMvbW0vc3JtbXUuYy0yNzktXG5hcmNoL3NwYXJjL21tL3NybW11LmM6MjgwOlx0c3JtbXVfbm9jYWNoZV9wb29sID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc3JtbXVfbm9jYWNoZV9zaXplLFxuYXJjaC9zcGFyYy9tbS9zcm1tdS5jLTI4MS1cdFx0XHRcdFx0ICAgIFNSTU1VX05PQ0FDSEVfQUxJR05fTUFYKTtcbi0tXG5hcmNoL3NwYXJjL21tL3NybW11LmMtMjg0LVx0c3JtbXVfbm9jYWNoZV9iaXRtYXAgPVxuYXJjaC9zcGFyYy9tbS9zcm1tdS5jOjI4NTpcdFx0bWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoQklUU19UT19MT05HUyhiaXRtYXBfYml0cykgKiBzaXplb2YobG9uZyksXG5hcmNoL3NwYXJjL21tL3NybW11LmMtMjg2LVx0XHRcdCAgICAgICBTTVBfQ0FDSEVfQllURVMpO1xuLS1cbmFyY2gvc3BhcmMvbW0vc3JtbXUuYz00NDM9c3RhdGljIHZvaWQgX19pbml0IHNwYXJjX2NvbnRleHRfaW5pdChpbnQgbnVtY3R4KVxuLS1cbmFyY2gvc3BhcmMvbW0vc3JtbXUuYy00NDgtXHRzaXplID0gbnVtY3R4ICogc2l6ZW9mKHN0cnVjdCBjdHhfbGlzdCk7XG5hcmNoL3NwYXJjL21tL3NybW11LmM6NDQ5Olx0Y3R4X2xpc3RfcG9vbCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemUsIFNNUF9DQUNIRV9CWVRFUyk7XG5hcmNoL3NwYXJjL21tL3NybW11LmMtNDUwLVxuLS1cbmFyY2gvdW0vZHJpdmVycy92ZWN0b3Jfa2Vybi5jPTE2OTc9c3RhdGljIGludCBfX2luaXQgdmVjdG9yX3NldHVwKGNoYXIgKnN0cilcbi0tXG5hcmNoL3VtL2RyaXZlcnMvdmVjdG9yX2tlcm4uYy0xNzA3LVx0fVxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmM6MTcwODpcdG5ldyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZigqbmV3KSwgU01QX0NBQ0hFX0JZVEVTKTtcbmFyY2gvdW0vZHJpdmVycy92ZWN0b3Jfa2Vybi5jLTE3MDktXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuZXctXHUwMDNlbGlzdCk7XG4tLVxuYXJjaC91bS9rZXJuZWwvbG9hZF9maWxlLmM9MzI9dm9pZCAqdW1sX2xvYWRfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSwgdW5zaWduZWQgbG9uZyBsb25nICpzaXplKVxuLS1cbmFyY2gvdW0va2VybmVsL2xvYWRfZmlsZS5jLTUwLVxuYXJjaC91bS9rZXJuZWwvbG9hZF9maWxlLmM6NTE6XHRhcmVhID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoKnNpemUsIFNNUF9DQUNIRV9CWVRFUyk7XG5hcmNoL3VtL2tlcm5lbC9sb2FkX2ZpbGUuYy01Mi1cbi0tXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmM9MTE4Nj1zdGF0aWMgdm9pZCBfX2luaXQgYWxsb2NfcnVudGltZV9kYXRhKGludCBjcHUpXG4tLVxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jLTExOTktXHRcdC8qIEFsbG9jYXRlIHRoZSBTVlNNIENBIHBhZ2UgaWYgYW4gU1ZTTSBpcyBwcmVzZW50ICovXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmM6MTIwMDpcdFx0Y2FhID0gY3B1ID8gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZW9mKCpjYWEpLCBQQUdFX1NJWkUpXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMtMTIwMS1cdFx0XHQgIDogXHUwMDI2Ym9vdF9zdnNtX2NhX3BhZ2U7XG4tLVxuYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jPTg5Nz1zdGF0aWMgaW50IF9faW5pdCBhY3BpX3BhcnNlX2hwZXQoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSlcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMtOTQxLSNkZWZpbmUgSFBFVF9SRVNPVVJDRV9OQU1FX1NJWkUgOVxuYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jOjk0MjpcdGhwZXRfcmVzID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZW9mKCpocGV0X3JlcykgJiM0MzsgSFBFVF9SRVNPVVJDRV9OQU1FX1NJWkUsXG5hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMtOTQzLVx0XHRcdFx0ICBTTVBfQ0FDSEVfQllURVMpO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYz0yNTAwPXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKiBfX2luaXQgaW9hcGljX3NldHVwX3Jlc291cmNlcyh2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYy0yNTEyLVxuYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jOjI1MTM6XHRtZW0gPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhuLCBTTVBfQ0FDSEVfQllURVMpO1xuYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jLTI1MTQtXHRyZXMgPSAodm9pZCAqKW1lbTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmM9MjU0OT12b2lkIF9faW5pdCBpb19hcGljX2luaXRfbWFwcGluZ3Modm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMtMjU3MS0jZW5kaWZcbmFyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYzoyNTcyOlx0XHRcdGlvYXBpY19waHlzID0gKHVuc2lnbmVkIGxvbmcpbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUEFHRV9TSVpFLFxuYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jLTI1NzMtXHRcdFx0XHRcdFx0XHRcdCAgICBQQUdFX1NJWkUpO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9lODIwLmM9MTExMz1fX2luaXQgdm9pZCBlODIwX19yZXNlcnZlX3Jlc291cmNlcyh2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9lODIwLmMtMTExOC1cbmFyY2gveDg2L2tlcm5lbC9lODIwLmM6MTExOTpcdHJlcyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZigqcmVzKSAqIGU4MjBfdGFibGUtXHUwMDNlbnJfZW50cmllcyxcbmFyY2gveDg2L2tlcm5lbC9lODIwLmMtMTEyMC1cdFx0XHQgICAgIFNNUF9DQUNIRV9CWVRFUyk7XG4tLVxuYXJjaC94ODYvcGxhdGZvcm0vb2xwYy9vbHBjX2R0LmM9MTI0PXZvaWQgKiBfX2luaXQgcHJvbV9lYXJseV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpXG4tLVxuYXJjaC94ODYvcGxhdGZvcm0vb2xwYy9vbHBjX2R0LmMtMTM4LVx0XHQgKi9cbmFyY2gveDg2L3BsYXRmb3JtL29scGMvb2xwY19kdC5jOjEzOTpcdFx0cmVzID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoY2h1bmtfc2l6ZSwgU01QX0NBQ0hFX0JZVEVTKTtcbmFyY2gveDg2L3BsYXRmb3JtL29scGMvb2xwY19kdC5jLTE0MC1cdFx0cHJvbV9lYXJseV9hbGxvY2F0ZWQgJiM0Mzs9IGNodW5rX3NpemU7XG4tLVxuYXJjaC94ODYveGVuL3AybS5jPTE3OD1zdGF0aWMgdm9pZCAqIF9fcmVmIGFsbG9jX3AybV9wYWdlKHZvaWQpXG4tLVxuYXJjaC94ODYveGVuL3AybS5jLTE4MC1cdGlmICh1bmxpa2VseSghc2xhYl9pc19hdmFpbGFibGUoKSkpIHtcbmFyY2gveDg2L3hlbi9wMm0uYzoxODE6XHRcdHJldHVybiBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQQUdFX1NJWkUsIFBBR0VfU0laRSk7XG5hcmNoL3g4Ni94ZW4vcDJtLmMtMTgyLVx0fVxuLS1cbmFyY2gveHRlbnNhL21tL2thc2FuX2luaXQuYz0zNT1zdGF0aWMgdm9pZCBfX2luaXQgcG9wdWxhdGUodm9pZCAqc3RhcnQsIHZvaWQgKmVuZClcbi0tXG5hcmNoL3h0ZW5zYS9tbS9rYXNhbl9pbml0LmMtNDEtXHRwbWRfdCAqcG1kID0gcG1kX29mZl9rKHZhZGRyKTtcbmFyY2gveHRlbnNhL21tL2thc2FuX2luaXQuYzo0MjpcdHB0ZV90ICpwdGUgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhuX3BhZ2VzICogc2l6ZW9mKHB0ZV90KSwgUEFHRV9TSVpFKTtcbmFyY2gveHRlbnNhL21tL2thc2FuX2luaXQuYy00My1cbi0tXG5kcml2ZXJzL2Nsay90aS9jbGsuYz00MzM9dm9pZCBfX2luaXQgb21hcDJfY2xrX2xlZ2FjeV9wcm92aWRlcl9pbml0KGludCBpbmRleCwgdm9pZCBfX2lvbWVtICptZW0pXG4tLVxuZHJpdmVycy9jbGsvdGkvY2xrLmMtNDM2LVxuZHJpdmVycy9jbGsvdGkvY2xrLmM6NDM3Olx0aW8gPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YoKmlvKSwgU01QX0NBQ0hFX0JZVEVTKTtcbmRyaXZlcnMvY2xrL3RpL2Nsay5jLTQzOC1cbi0tXG5kcml2ZXJzL21hY2ludG9zaC9zbXUuYz00NzI9aW50IF9faW5pdCBzbXVfaW5pdCAodm9pZClcbi0tXG5kcml2ZXJzL21hY2ludG9zaC9zbXUuYy00OTQtXG5kcml2ZXJzL21hY2ludG9zaC9zbXUuYzo0OTU6XHRzbXUgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2Yoc3RydWN0IHNtdV9kZXZpY2UpLCBTTVBfQ0FDSEVfQllURVMpO1xuZHJpdmVycy9tYWNpbnRvc2gvc211LmMtNDk2LVx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2c211LVx1MDAzZWxvY2spO1xuLS1cbmRyaXZlcnMvb2YvZmR0LmM9MTIwMD1zdGF0aWMgdm9pZCAqIF9faW5pdCBlYXJseV9pbml0X2R0X2FsbG9jX21lbW9yeV9hcmNoKHU2NCBzaXplLCB1NjQgYWxpZ24pXG5kcml2ZXJzL29mL2ZkdC5jLTEyMDEte1xuZHJpdmVycy9vZi9mZHQuYzoxMjAyOlx0cmV0dXJuIG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemUsIGFsaWduKTtcbmRyaXZlcnMvb2YvZmR0LmMtMTIwMy19XG4tLVxuZHJpdmVycy9vZi91bml0dGVzdC5jPTM5MDY9c3RhdGljIHZvaWQgKiBfX2luaXQgZHRfYWxsb2NfbWVtb3J5KHU2NCBzaXplLCB1NjQgYWxpZ24pXG5kcml2ZXJzL29mL3VuaXR0ZXN0LmMtMzkwNy17XG5kcml2ZXJzL29mL3VuaXR0ZXN0LmM6MzkwODpcdHJldHVybiBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplLCBhbGlnbik7XG5kcml2ZXJzL29mL3VuaXR0ZXN0LmMtMzkwOS19XG4tLVxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oPTQyND1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKm1lbWJsb2NrX2FsbG9jKHBoeXNfYWRkcl90IHNpemUsIHBoeXNfYWRkcl90IGFsaWduKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC00MjktXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg6NDMwOnZvaWQgKl9fbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMocGh5c19hZGRyX3Qgc2l6ZSwgcGh5c19hZGRyX3QgYWxpZ24sXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtNDMxLVx0XHRcdFx0Y29uc3QgY2hhciAqZnVuYyk7XG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtNDMyLVxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjQzMzojZGVmaW5lIG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemUsIGFsaWduKSAgICBcXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjQzNDpcdCBfX21lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemUsIGFsaWduLCBfX2Z1bmNfXylcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC00MzUtXG4tLVxuaW5pdC9tYWluLmM9NjA0PXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9jb21tYW5kX2xpbmUoY2hhciAqY29tbWFuZF9saW5lKVxuLS1cbmluaXQvbWFpbi5jLTYxNi1cbmluaXQvbWFpbi5jOjYxNzpcdHNhdmVkX2NvbW1hbmRfbGluZSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKGxlbiwgU01QX0NBQ0hFX0JZVEVTKTtcbmluaXQvbWFpbi5jLTYxOC1cbi0tXG5pbml0L21haW4uYy02MjAtXG5pbml0L21haW4uYzo2MjE6XHRzdGF0aWNfY29tbWFuZF9saW5lID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMobGVuLCBTTVBfQ0FDSEVfQllURVMpO1xuaW5pdC9tYWluLmMtNjIyLVxuLS1cbmluaXQvbWFpbi5jPTEyMTE9c3RhdGljIGludCBfX2luaXQgaW5pdGNhbGxfYmxhY2tsaXN0KGNoYXIgKnN0cilcbi0tXG5pbml0L21haW4uYy0xMjIwLVx0XHRcdHByX2RlYnVnKFwmIzM0O2JsYWNrbGlzdGluZyBpbml0Y2FsbCAlc1xcblwmIzM0Oywgc3RyX2VudHJ5KTtcbmluaXQvbWFpbi5jOjEyMjE6XHRcdFx0ZW50cnkgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YoKmVudHJ5KSxcbmluaXQvbWFpbi5jLTEyMjItXHRcdFx0XHRcdCAgICAgICBTTVBfQ0FDSEVfQllURVMpO1xuaW5pdC9tYWluLmM6MTIyMzpcdFx0XHRlbnRyeS1cdTAwM2VidWYgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzdHJsZW4oc3RyX2VudHJ5KSAmIzQzOyAxLFxuaW5pdC9tYWluLmMtMTIyNC1cdFx0XHRcdFx0XHQgICAgU01QX0NBQ0hFX0JZVEVTKTtcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI5MQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDExMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBBbGxvY2F0aW9uIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYG1lbWJsb2NrX2FsbG9jX29yX3BhbmljYCBtYWNybyBhbmQgaW1tZWRpYXRlbHksIG15IGJyYWluJiMzOTtzIGFscmVhZHkgcGFyc2luZyB0aGUgaW1wbGljYXRpb25zLiBJdCYjMzk7cyBkZWZpbmVkIGFzIGEgd3JhcHBlciBhcm91bmQgYF9fbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWNgLiAgVGhlIHNpZ25hdHVyZSB0ZWxscyBtZSBpdCB0YWtlcyBhIHNpemUgYW5kIGFsaWdubWVudCwgYW5kIGNydWNpYWxseSwgcGFzc2VzIHRoZSBjdXJyZW50IGZ1bmN0aW9uJiMzOTtzIG5hbWUuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBkZXRhaWxzLCBhbmQgbXkgZXhwZXJpZW5jZSBzYXlzIHRoYXQgSSBuZWVkIHRvIHRyYWNlIHRoaXMgZnVydGhlci4gVGhlIHJlYWwgd29yayBpcyBwcm9iYWJseSBkb25lIGluIGBfX21lbWJsb2NrX2FsbG9jX29yX3BhbmljYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgYWxsb2NhdGlvbiAqYWN0dWFsbHkqIGhhcHBlbnMsIGFuZCBzcGVjaWZpY2FsbHksIGlmIGl0IGluaXRpYWxpemVzIHRoZSBtZW1vcnkuIEJlY2F1c2UgSSYjMzk7bSBwcmV0dHkgc3VyZSBgX19tZW1ibG9ja19hbGxvY19vcl9wYW5pY2AgY2FsbHMgYG1lbWJsb2NrX2FsbG9jX3RyeV9uaWRgLCBhbmQgbXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB6ZXJvZXMgdGhlIG1lbW9yeS4KClNvIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBtbS9tZW1ibG9jay5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGRlZmluaXRpb24gb2YgYF9fbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWNgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZSBtZW1vcnkgaXMgaW5kZWVkIHplcm9lZCBkdXJpbmcgYWxsb2NhdGlvbiBhcyBJIHN1c3BlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1ibG9jay5oPTQyND1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKm1lbWJsb2NrX2FsbG9jKHBoeXNfYWRkcl90IHNpemUsIHBoeXNfYWRkcl90IGFsaWduKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC00MjktXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg6NDMwOnZvaWQgKl9fbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMocGh5c19hZGRyX3Qgc2l6ZSwgcGh5c19hZGRyX3QgYWxpZ24sXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtNDMxLVx0XHRcdFx0Y29uc3QgY2hhciAqZnVuYyk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTQzMy0jZGVmaW5lIG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemUsIGFsaWduKSAgICBcXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjQzNDpcdCBfX21lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemUsIGFsaWduLCBfX2Z1bmNfXylcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC00MzUtXG4tLVxubW0vbWVtYmxvY2suYz0xNzc3PXZvaWQgKiBfX2luaXQgbWVtYmxvY2tfYWxsb2NfdHJ5X25pZChcbi0tXG5tbS9tZW1ibG9jay5jLTE3OTUtLyoqXG5tbS9tZW1ibG9jay5jOjE3OTY6ICogX19tZW1ibG9ja19hbGxvY19vcl9wYW5pYyAtIFRyeSB0byBhbGxvY2F0ZSBtZW1vcnkgYW5kIHBhbmljIG9uIGZhaWx1cmVcbm1tL21lbWJsb2NrLmMtMTc5Ny0gKiBAc2l6ZTogc2l6ZSBvZiBtZW1vcnkgYmxvY2sgdG8gYmUgYWxsb2NhdGVkIGluIGJ5dGVzXG4tLVxubW0vbWVtYmxvY2suYy0xODA0LSAqL1xubW0vbWVtYmxvY2suYzoxODA1OnZvaWQgKl9faW5pdCBfX21lbWJsb2NrX2FsbG9jX29yX3BhbmljKHBoeXNfYWRkcl90IHNpemUsIHBoeXNfYWRkcl90IGFsaWduLFxubW0vbWVtYmxvY2suYy0xODA2LVx0XHRcdFx0ICAgICAgIGNvbnN0IGNoYXIgKmZ1bmMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDUxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYG1tL21lbWJsb2NrLmNgIGZpbGUsIHNwZWNpZmljYWxseSBsaW5lcyAxODA1IHRocm91Z2ggMTgxNS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGF0IHNlY3Rpb24gZm9yIGEgcmVhc29uLCBhbmQgYmFzZWQgb24gdGhlIGNvbnRleHQsIGl0JiMzOTtzIGxpa2VseSBkZWFsaW5nIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gb3IgbWFuYWdlbWVudCBhdCBhIGZvdW5kYXRpb25hbCBsZXZlbCDigJMgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgZWFybHkgYm9vdCBwcm9jZXNzIG9yIGhhbmRsaW5nIG9mIHJlc2VydmVkIG1lbW9yeSByZWdpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhlIGtlcm5lbCBpcyBpbml0aWFsaXppbmcgb3IgbWFuaXB1bGF0aW5nIHRoZSBtZW1ibG9jayBkYXRhIHN0cnVjdHVyZXMgaW4gdGhhdCBwYXJ0aWN1bGFyIGNvZGUgc2VnbWVudC4gSSBleHBlY3QgdG8gYmUgbG9va2luZyBmb3IgZGV0YWlscyBvbiBob3cgdGhlIHN5c3RlbSBkZXRlcm1pbmVzIG9yIG1vZGlmaWVzIHRoZSBwaHlzaWNhbCBtZW1vcnkgbWFwLiBJcyBpdCBhZGRpbmcsIHJlbW92aW5nLCBvciBhZGp1c3RpbmcgbWVtb3J5IHJlZ2lvbnM/IFdoYXQgc3BlY2lmaWMgcGFyYW1ldGVycyBhcmUgYmVpbmcgdXNlZD8gSSYjMzk7bGwgcHJvYmFibHkgYmUgbG9va2luZyBmb3IgY2FsbHMgdG8gZnVuY3Rpb25zIGxpa2UgYG1lbWJsb2NrX2FkZCgpYCwgYG1lbWJsb2NrX3JlbW92ZSgpYCwgb3IgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCBhZmZlY3QgdGhlIG1lbWJsb2NrIGxpc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmbG93IGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhlIGNvZGUmIzM5O3MgZXhlY3V0aW9uLiBVbHRpbWF0ZWx5LCBteSBnb2FsIGlzIHRvIGdyYXNwIHRoZSBpbnRyaWNhY2llcyBvZiB0aGlzIHBhcnRpY3VsYXIgc2VjdGlvbiBhbmQgaG93IGl0IGNvbnRyaWJ1dGVzIHRvIHRoZSBicm9hZGVyIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWJsb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4MDU6XHR2b2lkICpfX2luaXQgX19tZW1ibG9ja19hbGxvY19vcl9wYW5pYyhwaHlzX2FkZHJfdCBzaXplLCBwaHlzX2FkZHJfdCBhbGlnbixcbjE4MDY6XHRcdFx0XHRcdCAgICAgICBjb25zdCBjaGFyICpmdW5jKVxuMTgwNzpcdHtcbjE4MDg6XHRcdHZvaWQgKmFkZHIgPSBtZW1ibG9ja19hbGxvYyhzaXplLCBhbGlnbik7XG4xODA5Olx0XG4xODEwOlx0XHRpZiAodW5saWtlbHkoIWFkZHIpKVxuMTgxMTpcdFx0XHRwYW5pYyhcJiMzNDslczogRmFpbGVkIHRvIGFsbG9jYXRlICVwYXAgYnl0ZXNcXG5cJiMzNDssIGZ1bmMsIFx1MDAyNnNpemUpO1xuMTgxMjpcdFx0cmV0dXJuIGFkZHI7XG4xODEzOlx0fVxuMTgxNDpcdFxuMTgxNTpcdC8qXG4xODE2Olx0ICogUmVtYWluaW5nIEFQSSBmdW5jdGlvbnNcbjE4MTc6XHQgKi9cbjE4MTg6XHRcbjE4MTk6XHRwaHlzX2FkZHJfdCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfcGh5c19tZW1fc2l6ZSh2b2lkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzU2MwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWR1bmRhbnQgSW5pdGlhbGl6YXRpb24gQ2xlYW51cCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgZmxhZ2dlZCBhcyBhIGNsZWFudXAsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gTGV0JiMzOTtzIHNlZS4uLiBgbWVtYmxvY2tfYWxsb2NgIGlzIHJlc3BvbnNpYmxlIGZvciB6ZXJvaW5nIHRoZSBtZW1vcnkuIEFoLCBhbmQgYGFsbG9jX25vZGVfZGF0YWAgc3BlY2lmaWNhbGx5IHVzZXMgYG1lbWJsb2NrX3BoeXNfYWxsb2NfdHJ5X25pZGAsIHdoaWNoIGFsc28gZ2V0cyB6ZXJvZWQuIFBsdXMsIGBtZW1zZXRgIGlzIHVzZWQgb24gYE5PREVfREFUQShuaWQpYCB0byBpbml0aWFsaXplIGBwZ19kYXRhX3RgIHRvIHplcm8uIFJpZ2h0LCBzbyB0aGF0IG1lYW5zIGBwZ2RhdGAgaXMgYWx3YXlzIGluaXRpYWxpemVkIHRvIGFsbCB6ZXJvcy4KClRoZXJlZm9yZSwgdGhlIGFzc2lnbm1lbnQgYHBnZGF0LSZndDtub2RlX3BhZ2VfZXh0ID0gTlVMTDtgIGluc2lkZSBgcGdkYXRfcGFnZV9leHRfaW5pdGAgaXMgY29tcGxldGVseSByZWR1bmRhbnQuIEl0JiMzOTtzIGFscmVhZHkgemVybyBmcm9tIHRoZSBzdGFydC4gVGhpcyBwYXRjaCBpcyBqdXN0IHJlbW92aW5nIHRoYXQgcmVkdW5kYW50IGluaXRpYWxpemF0aW9uIGFuZCB0aGUgZW1wdHkgZnVuY3Rpb24gc3R1YiDigJMgcHVyZWx5IGRlY29yYXRpdmUuIEl0JiMzOTtzIGEgY2xlYW51cCwgbm90IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFzIGZhciBhcyBJIGNhbiBzZWUuCgpIYW5nIG9uIGEgc2Vjb25k4oCmIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGNhbGxzIHRvIGBwZ2RhdF9wYWdlX2V4dF9pbml0YC4gTGV0JiMzOTtzIGdyZXAgdGhlIHdob2xlIHRyZWUgdG8gYmUgY29tcGxldGVseSBzdXJlLiBXZSBkb24mIzM5O3Qgd2FudCB0byBtaXNzIGFueSBlZGdlIGNhc2VzLCB5b3Uga25vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZ2RhdF9wYWdlX2V4dF9pbml0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwMjcKCQkJCQkJCW91dHB1dDogMTI1CgkJCQkJCQl0aG91Z2h0czogODE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IHBnZGF0X3BhZ2VfZXh0X2luaXQgUmVtb3ZhbCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGRpZmYgY2xlYXJseSBzaG93cyB0aGF0IHRoZSBmdW5jdGlvbiBgcGdkYXRfcGFnZV9leHRfaW5pdGAgaXMgYmVpbmcgY29tcGxldGVseSByZW1vdmVkIGFjcm9zcyB0aGUgcmVsZXZhbnQgZmlsZXMuIExldCYjMzk7cyBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIGltcGFjdC4gSSBzZWUgaXQmIzM5O3MgZ29uZSBmcm9tIGBpbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmhgLCBgbW0vbW1faW5pdC5jYCBhbmQgYG1tL3BhZ2VfZXh0LmNgCgpMb29raW5nIGF0IHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIHJlbW92ZWQgZGVmaW5pdGlvbiBpbiBgbW0vcGFnZV9leHQuY2AsIHRoZSBmdW5jdGlvbiBpdHNlbGYgd2FzIGV4dHJlbWVseSBzaW1wbGU6IGBwZ2RhdC0mZ3Q7bm9kZV9wYWdlX2V4dCA9IE5VTEw7YC4gQW5kLCBzaW5jZSBgcGdkYXRgIGlzIGFsd2F5cyB6ZXJvLWluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiwgdGhlIGZ1bmN0aW9uIGl0c2VsZiB3YXMgZG9pbmcgbm90aGluZyBvZiBzdWJzdGFuY2UuCgpTbywgZXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgYSBjbGVhbi11cC4gVGhlIGV4cGxpY2l0IHNldHRpbmcgb2YgYG5vZGVfcGFnZV9leHRgIHRvIGBOVUxMYCB3YXMgcmVkdW5kYW50IGJlY2F1c2UgdGhlIG1lbW9yeSB3YXMgYWxyZWFkeSBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGUgcmVtb3ZhbCBpcyBsaWtlbHkgaW50ZW5kZWQgdG8gcmVkdWNlIGNvZGUgY2x1dHRlciBhbmQgaW1wcm92ZSBvdmVyYWxsIG1haW50YWluYWJpbGl0eSwgYXMgd2VsbCBhcyB0byBlbGltaW5hdGUgYSBzbWFsbCBhbW91bnQgb2YgcmVkdW5kYW50IGV4ZWN1dGlvbi4gTm8gZnVuY3Rpb25hbGl0eSBpcyBhZmZlY3RlZCBieSB0aGUgY2hhbmdlLiBXb3J0aEZ1enppbmc9ZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYHBnZGF0X3BhZ2VfZXh0X2luaXRgIGZ1bmN0aW9uLCB3aGljaCB3YXMgZWl0aGVyIGFuIGVtcHR5IHN0dWIgb3Igc2ltcGx5IHNldCBgcGdkYXQtXHUwMDNlbm9kZV9wYWdlX2V4dCA9IE5VTExgLiBTaW5jZSBgcGdkYXRgIHN0cnVjdHVyZXMgYXJlIGFsd2F5cyB6ZXJvLWluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiAodmlhIGBtZW1zZXRgIGluIGBhbGxvY19ub2RlX2RhdGFgIG9yIGJ5IHVzaW5nIGBtZW1ibG9ja19hbGxvY2ApLCB0aGlzIGluaXRpYWxpemF0aW9uIHdhcyBjb21wbGV0ZWx5IHJlZHVuZGFudC4gUmVtb3ZpbmcgaXQgaXMgYSBwdXJlbHkgZGVjb3JhdGl2ZSBjbGVhbnVwIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBwZ2RhdF9wYWdlX2V4dF9pbml0YCBmdW5jdGlvbiwgd2hpY2ggd2FzIGVpdGhlciBhbiBlbXB0eSBzdHViIG9yIHNpbXBseSBzZXQgYHBnZGF0LVx1MDAzZW5vZGVfcGFnZV9leHQgPSBOVUxMYC4gU2luY2UgYHBnZGF0YCBzdHJ1Y3R1cmVzIGFyZSBhbHdheXMgemVyby1pbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gKHZpYSBgbWVtc2V0YCBpbiBgYWxsb2Nfbm9kZV9kYXRhYCBvciBieSB1c2luZyBgbWVtYmxvY2tfYWxsb2NgKSwgdGhpcyBpbml0aWFsaXphdGlvbiB3YXMgY29tcGxldGVseSByZWR1bmRhbnQuIFJlbW92aW5nIGl0IGlzIGEgcHVyZWx5IGRlY29yYXRpdmUgY2xlYW51cCB0aGF0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MDg6NDYuOTkzMDc4NzQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyMDE2ODMxODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBgcGdkYXRfcGFnZV9leHRfaW5pdGAgZnVuY3Rpb24sIHdoaWNoIHdhcyBlaXRoZXIgYW4gZW1wdHkgc3R1YiBvciBzaW1wbHkgc2V0IGBwZ2RhdC1cXHUwMDNlbm9kZV9wYWdlX2V4dCA9IE5VTExgLiBTaW5jZSBgcGdkYXRgIHN0cnVjdHVyZXMgYXJlIGFsd2F5cyB6ZXJvLWluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiAodmlhIGBtZW1zZXRgIGluIGBhbGxvY19ub2RlX2RhdGFgIG9yIGJ5IHVzaW5nIGBtZW1ibG9ja19hbGxvY2ApLCB0aGlzIGluaXRpYWxpemF0aW9uIHdhcyBjb21wbGV0ZWx5IHJlZHVuZGFudC4gUmVtb3ZpbmcgaXQgaXMgYSBwdXJlbHkgZGVjb3JhdGl2ZSBjbGVhbnVwIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjA4OjQ2Ljk5MzA4Mzg1NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA2NDM2Mjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZmEzNjA3NTBlZGQ1ZWFjMDczOWJkYjk3NTRmMTBhN2Y2ZDgxY2RhYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzIDE4OjA4OjQ2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9leHQuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9leHQuaFxcbmluZGV4IGYyM2Q0YjIxOGRhMDcuLjc5YzUzZWM0NWRmYTcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oXFxuQEAgLTU1LDcgKzU1LDYgQEAgc3RydWN0IHBhZ2VfZXh0IHtcXG4gXFxuIGV4dGVybiBib29sIGVhcmx5X3BhZ2VfZXh0O1xcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBwYWdlX2V4dF9zaXplO1xcbi1leHRlcm4gdm9pZCBwZ2RhdF9wYWdlX2V4dF9pbml0KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpO1xcbiBcXG4gc3RhdGljIGlubGluZSBib29sIGVhcmx5X3BhZ2VfZXh0X2VuYWJsZWQodm9pZClcXG4ge1xcbkBAIC0yMDIsMTAgKzIwMSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBlYXJseV9wYWdlX2V4dF9lbmFibGVkKHZvaWQpXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIHBnZGF0X3BhZ2VfZXh0X2luaXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG4te1xcbi19XFxuLVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9leHRfaW5pdCh2b2lkKVxcbiB7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXFxuaW5kZXggNzExZjgyMWY3YjNjNy4uZTljNDIwNGI3M2FkYiAxMDA2NDRcXG4tLS0gYS9tbS9tbV9pbml0LmNcXG4rKysgYi9tbS9tbV9pbml0LmNcXG5AQCAtMTM5NCw3ICsxMzk0LDYgQEAgc3RhdGljIHZvaWQgX19tZW1pbml0IHBnZGF0X2luaXRfaW50ZXJuYWxzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9WTVNDQU5fVEhST1RUTEU7IGkrKylcXG4gXFx0XFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2cGdkYXQtXFx1MDAzZXJlY2xhaW1fd2FpdFtpXSk7XFxuIFxcbi1cXHRwZ2RhdF9wYWdlX2V4dF9pbml0KHBnZGF0KTtcXG4gXFx0bHJ1dmVjX2luaXQoXFx1MDAyNnBnZGF0LVxcdTAwM2VfX2xydXZlYyk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfZXh0LmMgYi9tbS9wYWdlX2V4dC5jXFxuaW5kZXggZTJlOTJiZDI3ZWJkZC4uYjY3OWE4YzFmN2Q3ZSAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX2V4dC5jXFxuKysrIGIvbW0vcGFnZV9leHQuY1xcbkBAIC0xNjQsMTEgKzE2NCw2IEBAIHZvaWQgX19pbml0IHBhZ2VfZXh0X2luaXRfZmxhdG1lbV9sYXRlKHZvaWQpXFxuIFxcdGludm9rZV9pbml0X2NhbGxiYWNrcygpO1xcbiB9XFxuIFxcbi12b2lkIF9fbWVtaW5pdCBwZ2RhdF9wYWdlX2V4dF9pbml0KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuLXtcXG4tXFx0cGdkYXQtXFx1MDAzZW5vZGVfcGFnZV9leHQgPSBOVUxMO1xcbi19XFxuLVxcbiBzdGF0aWMgc3RydWN0IHBhZ2VfZXh0ICpsb29rdXBfcGFnZV9leHQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcXG5AQCAtNDk0LDEwICs0ODksNiBAQCB2b2lkIF9faW5pdCBwYWdlX2V4dF9pbml0KHZvaWQpXFxuIFxcdHBhbmljKFxcXCJPdXQgb2YgbWVtb3J5XFxcIik7XFxuIH1cXG4gXFxuLXZvaWQgX19tZW1pbml0IHBnZGF0X3BhZ2VfZXh0X2luaXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG4te1xcbi19XFxuLVxcbiAjZW5kaWZcXG4gXFxuIC8qKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODowODo0Ny4zMDA0Mzk0ODFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNTE3MDk0NjI4OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBwZ2RhdF9wYWdlX2V4dF9pbml0YCBmdW5jdGlvbiwgd2hpY2ggd2FzIGVpdGhlciBhbiBlbXB0eSBzdHViIG9yIHNpbXBseSBzZXQgYHBnZGF0LVxcdTAwM2Vub2RlX3BhZ2VfZXh0ID0gTlVMTGAuIFNpbmNlIGBwZ2RhdGAgc3RydWN0dXJlcyBhcmUgYWx3YXlzIHplcm8taW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uICh2aWEgYG1lbXNldGAgaW4gYGFsbG9jX25vZGVfZGF0YWAgb3IgYnkgdXNpbmcgYG1lbWJsb2NrX2FsbG9jYCksIHRoaXMgaW5pdGlhbGl6YXRpb24gd2FzIGNvbXBsZXRlbHkgcmVkdW5kYW50LiBSZW1vdmluZyBpdCBpcyBhIHB1cmVseSBkZWNvcmF0aXZlIGNsZWFudXAgdGhhdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmEzNjA3NTBlZGQ1ZWFjMDczOWJkYjk3NTRmMTBhN2Y2ZDgxY2RhYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTg6MDg6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmhcbmluZGV4IGYyM2Q0YjIxOGRhMDcuLjc5YzUzZWM0NWRmYTcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZV9leHQuaFxuQEAgLTU1LDcgKzU1LDYgQEAgc3RydWN0IHBhZ2VfZXh0IHtcbiBcbiBleHRlcm4gYm9vbCBlYXJseV9wYWdlX2V4dDtcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBwYWdlX2V4dF9zaXplO1xuLWV4dGVybiB2b2lkIHBnZGF0X3BhZ2VfZXh0X2luaXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCk7XG4gXG4gc3RhdGljIGlubGluZSBib29sIGVhcmx5X3BhZ2VfZXh0X2VuYWJsZWQodm9pZClcbiB7XG5AQCAtMjAyLDEwICsyMDEsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZWFybHlfcGFnZV9leHRfZW5hYmxlZCh2b2lkKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgcGdkYXRfcGFnZV9leHRfaW5pdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuLXtcbi19XG4tXG4gc3RhdGljIGlubGluZSB2b2lkIHBhZ2VfZXh0X2luaXQodm9pZClcbiB7XG4gfVxuZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuY1xuaW5kZXggNzExZjgyMWY3YjNjNy4uZTljNDIwNGI3M2FkYiAxMDA2NDRcbi0tLSBhL21tL21tX2luaXQuY1xuKysrIGIvbW0vbW1faW5pdC5jXG5AQCAtMTM5NCw3ICsxMzk0LDYgQEAgc3RhdGljIHZvaWQgX19tZW1pbml0IHBnZGF0X2luaXRfaW50ZXJuYWxzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9WTVNDQU5fVEhST1RUTEU7IGkrKylcbiBcdFx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZwZ2RhdC1cdTAwM2VyZWNsYWltX3dhaXRbaV0pO1xuIFxuLVx0cGdkYXRfcGFnZV9leHRfaW5pdChwZ2RhdCk7XG4gXHRscnV2ZWNfaW5pdChcdTAwMjZwZ2RhdC1cdTAwM2VfX2xydXZlYyk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfZXh0LmMgYi9tbS9wYWdlX2V4dC5jXG5pbmRleCBlMmU5MmJkMjdlYmRkLi5iNjc5YThjMWY3ZDdlIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9leHQuY1xuKysrIGIvbW0vcGFnZV9leHQuY1xuQEAgLTE2NCwxMSArMTY0LDYgQEAgdm9pZCBfX2luaXQgcGFnZV9leHRfaW5pdF9mbGF0bWVtX2xhdGUodm9pZClcbiBcdGludm9rZV9pbml0X2NhbGxiYWNrcygpO1xuIH1cbiBcbi12b2lkIF9fbWVtaW5pdCBwZ2RhdF9wYWdlX2V4dF9pbml0KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG4te1xuLVx0cGdkYXQtXHUwMDNlbm9kZV9wYWdlX2V4dCA9IE5VTEw7XG4tfVxuLVxuIHN0YXRpYyBzdHJ1Y3QgcGFnZV9leHQgKmxvb2t1cF9wYWdlX2V4dChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xuQEAgLTQ5NCwxMCArNDg5LDYgQEAgdm9pZCBfX2luaXQgcGFnZV9leHRfaW5pdCh2b2lkKVxuIFx0cGFuaWMoXCJPdXQgb2YgbWVtb3J5XCIpO1xuIH1cbiBcbi12b2lkIF9fbWVtaW5pdCBwZ2RhdF9wYWdlX2V4dF9pbml0KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG4te1xuLX1cbi1cbiAjZW5kaWZcbiBcbiAvKipcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjA4OjQ3LjMwMDQ0MTAxMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNTg0MjExOTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IFJlbW92aW5nIGBwZ2RhdF9wYWdlX2V4dF9pbml0YCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGF4aW5nIHRoZSBgcGdkYXRfcGFnZV9leHRfaW5pdGAgZnVuY3Rpb24sIGFuZCBpdHMgY29ycmVzcG9uZGluZyBjYWxscy4gSSBzZWUgdGhlIGNoYW5nZXMgYXJlIGluIGBpbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmhgLCBgbW0vbW1faW5pdC5jYCwgYW5kIGBtbS9wYWdlX2V4dC5jYC4gSW50ZXJlc3RpbmcuIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCBgcGdkYXRfcGFnZV9leHRfaW5pdGAgd2FzIGVzc2VudGlhbGx5IGp1c3QgaW5pdGlhbGl6aW5nIGBwZ2RhdC1cdTAwM2Vub2RlX3BhZ2VfZXh0ID0gTlVMTDtgIGluIGNlcnRhaW4gY29uZmlndXJhdGlvbnMsIGFuZCBjb21wbGV0ZWx5IGVtcHR5IGluIG90aGVycy4gU2VlbXMgbGlrZSBzb21lIHJlZHVuZGFudCBjb2RlLCBwb3RlbnRpYWxseS5cblxuV2FpdCBhIHNlY29uZC4uLiBpZiB3ZSdyZSByZW1vdmluZyB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24sIGRvZXMgdGhhdCBtZWFuIGBub2RlX3BhZ2VfZXh0YCBpdHNlbGYgaXMgYmVpbmcgcmVtb3ZlZD8gSSBuZWVkIHRvIHZlcmlmeSB0aGlzLiBMZXQgbWUgcXVpY2tseSBjaGVjayBpZiBgbm9kZV9wYWdlX2V4dGAgc3RpbGwgZXhpc3RzIHdpdGhpbiB0aGUgYHBnbGlzdF9kYXRhYCBzdHJ1Y3R1cmUuIFRpbWUgdG8gcnVuIGEgcXVpY2sgZ3JlcCB0byBtYWtlIHN1cmUgbm90aGluZyBlbHNlIHJlbGllcyBvbiBpdCBhbmQgdGhhdCB3ZSdyZSBub3QgYWJvdXQgdG8gYnJlYWsgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NjcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODowOTo0OS44ODQ2NTY3MDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0OTMxMjk3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJub2RlX3BhZ2VfZXh0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdD0yMTA9R2VuZXJhbFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTIzMC1cXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjMxOmBgbm9kZV9wYWdlX2V4dGBgXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTIzMi0gIEZvciBVTUEgc3lzdGVtcyB0aGF0IHVzZSBGTEFUTUVNIG1lbW9yeSBtb2RlbCB0aGUgMCdzIG5vZGVcXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjMzOiAgYGBub2RlX3BhZ2VfZXh0YGAgaXMgYXJyYXkgb2YgZXh0ZW5zaW9ucyBvZiBzdHJ1Y3QgcGFnZXMuIEF2YWlsYWJsZSBvbmx5XFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTIzNC0gIGluIHRoZSBrZXJuZWxzIGJ1aWx0IHdpdGggYGBDT05GSUdfUEFHRV9FWFRFTlNJT05gYCBlbmFibGVkLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdD0yMDU9bm9kZV96b25lbGlzdHPlvJXnlKjjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMjE5LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjIwOmBgbm9kZV9wYWdlX2V4dGBgXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoyMjE65a+55LqO5L2/55SoRkxBVE1FTeWGheWtmOaooeWei+eahFVNQeezu+e7n++8jDDlj7foioLngrnnmoQgYGBub2RlX3BhZ2VfZXh0YGBcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTIyMi3mmK9zdHJ1Y3QgcGFnZXPnmoTmianlsZXmlbDnu4TjgILlj6rmnInlnKjmnoTlu7rml7blvIDlkK/kuoYgYGBDT05GSUdfUEFHRV9FWFRFTlNJT05gYFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xNDc5PXR5cGVkZWYgc3RydWN0IHBnbGlzdF9kYXRhIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTQ5Ny0jaWZkZWYgQ09ORklHX1BBR0VfRVhURU5TSU9OXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNDk4OlxcdHN0cnVjdCBwYWdlX2V4dCAqbm9kZV9wYWdlX2V4dDtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE0OTktI2VuZGlmXFxuLS1cXG5tbS9wYWdlX2V4dC5jPTE2Nz1zdGF0aWMgc3RydWN0IHBhZ2VfZXh0ICpsb29rdXBfcGFnZV9leHQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9wYWdlX2V4dC5jLTE3My1cXHRXQVJOX09OX09OQ0UoIXJjdV9yZWFkX2xvY2tfaGVsZCgpKTtcXG5tbS9wYWdlX2V4dC5jOjE3NDpcXHRiYXNlID0gTk9ERV9EQVRBKHBhZ2VfdG9fbmlkKHBhZ2UpKS1cXHUwMDNlbm9kZV9wYWdlX2V4dDtcXG5tbS9wYWdlX2V4dC5jLTE3NS1cXHQvKlxcbi0tXFxubW0vcGFnZV9leHQuYy0xODctXFxubW0vcGFnZV9leHQuYzoxODg6c3RhdGljIGludCBfX2luaXQgYWxsb2Nfbm9kZV9wYWdlX2V4dChpbnQgbmlkKVxcbm1tL3BhZ2VfZXh0LmMtMTg5LXtcXG4tLVxcbm1tL3BhZ2VfZXh0LmMtMjEzLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL3BhZ2VfZXh0LmM6MjE0OlxcdE5PREVfREFUQShuaWQpLVxcdTAwM2Vub2RlX3BhZ2VfZXh0ID0gYmFzZTtcXG5tbS9wYWdlX2V4dC5jLTIxNS1cXHR0b3RhbF91c2FnZSArPSB0YWJsZV9zaXplO1xcbi0tXFxubW0vcGFnZV9leHQuYz0yMjA9dm9pZCBfX2luaXQgcGFnZV9leHRfaW5pdF9mbGF0bWVtKHZvaWQpXFxuLS1cXG5tbS9wYWdlX2V4dC5jLTIyOC1cXHRmb3JfZWFjaF9vbmxpbmVfbm9kZShuaWQpICB7XFxubW0vcGFnZV9leHQuYzoyMjk6XFx0XFx0ZmFpbCA9IGFsbG9jX25vZGVfcGFnZV9leHQobmlkKTtcXG5tbS9wYWdlX2V4dC5jLTIzMC1cXHRcXHRpZiAoZmFpbClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MDk6NTEuNzMzOTgzNzMxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQyOTYwMDE3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFJlbW92YWwgb2YgYHBnZGF0X3BhZ2VfZXh0X2luaXRgKipcblxuT2theSwgc28gYG5vZGVfcGFnZV9leHRgIGlzIHN0aWxsIGJlaW5nIGFjdGl2ZWx5IHV0aWxpemVkIHdpdGhpbiBgYWxsb2Nfbm9kZV9wYWdlX2V4dGAgYW5kIGBsb29rdXBfcGFnZV9leHRgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBUaGUgcGF0Y2ggaW4gcXVlc3Rpb24gaXMganVzdCBlbGltaW5hdGluZyB0aGUgYHBnZGF0X3BhZ2VfZXh0X2luaXRgIGZ1bmN0aW9uLCB3aGljaCB3YXMgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyBpdCB0byBgTlVMTGAuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhhdCBpbml0aWFsaXphdGlvbiBzdGlsbCBuZWNlc3Nhcnk/XG5cbkhtbS4uLiBhIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCB0aGUgYHBnZGF0YCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGVpdGhlciBga3phbGxvY2Agb3IgYG1lbWJsb2NrX2FsbG9jYCwgYW5kIGJvdGggb2YgdGhvc2UgbWV0aG9kcyB6ZXJvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBUaGlzIHN1Z2dlc3RzIHRoZSBleHBsaWNpdCBpbml0aWFsaXphdGlvbiBtaWdodCBiZSByZWR1bmRhbnQuIFRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgSSBzaG91bGQgdmVyaWZ5IHRoZSBgcGdkYXRfaW5pdF9pbnRlcm5hbHNgIGZ1bmN0aW9uIGluIGBtbS9tbV9pbml0LmNgIHRvIGNvbmZpcm0gdGhlIG1lbW9yeSBpbml0aWFsaXphdGlvbiBiZWhhdmlvci4gSSdsbCB0YWtlIGEgbG9vayBhdCBpdCB0byBtYWtlIGNlcnRhaW4gbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MTQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MDk6NTcuMTYzNTg2NDgxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzAzMTk1ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGdkYXRfaW5pdF9pbnRlcm5hbHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbW1faW5pdC5jPTEzODA9c3RhdGljIHZvaWQgcGdkYXRfaW5pdF9rY29tcGFjdGQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkge31cXG4tLVxcbm1tL21tX2luaXQuYy0xMzgyLVxcbm1tL21tX2luaXQuYzoxMzgzOnN0YXRpYyB2b2lkIF9fbWVtaW5pdCBwZ2RhdF9pbml0X2ludGVybmFscyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxcbm1tL21tX2luaXQuYy0xMzg0LXtcXG4tLVxcbm1tL21tX2luaXQuYz0xNTMyPWludCBfX3JlZiBmcmVlX2FyZWFfaW5pdF9jb3JlX2hvdHBsdWcoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG4tLVxcbm1tL21tX2luaXQuYy0xNTM3LVxcbm1tL21tX2luaXQuYzoxNTM4OlxcdHBnZGF0X2luaXRfaW50ZXJuYWxzKHBnZGF0KTtcXG5tbS9tbV9pbml0LmMtMTUzOS1cXG4tLVxcbm1tL21tX2luaXQuYz0xNTkwPXN0YXRpYyB2b2lkIF9faW5pdCBmcmVlX2FyZWFfaW5pdF9jb3JlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuLS1cXG5tbS9tbV9pbml0LmMtMTU5NC1cXG5tbS9tbV9pbml0LmM6MTU5NTpcXHRwZ2RhdF9pbml0X2ludGVybmFscyhwZ2RhdCk7XFxubW0vbW1faW5pdC5jLTE1OTYtXFx0cGdkYXQtXFx1MDAzZXBlcl9jcHVfbm9kZXN0YXRzID0gXFx1MDAyNmJvb3Rfbm9kZXN0YXRzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODowOTo1OS4xMzM5MTI0MTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTI0NTQ5NDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBJbml0aWFsaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIHRoZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcywgc3BlY2lmaWNhbGx5IHRoZSBgcGdkYXRfaW5pdF9pbnRlcm5hbHNgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0J3MgcmVtb3ZpbmcgYSBjYWxsIHRvIGBwZ2RhdF9wYWdlX2V4dF9pbml0KHBnZGF0KTtgLiBUaGlzIGZ1bmN0aW9uIHdhcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyBgcGdkYXQtXHUwMDNlbm9kZV9wYWdlX2V4dGAgdG8gYE5VTExgLiBUaGUga2V5IHF1ZXN0aW9uIGhlcmUgaXMsIGRvZXMgdGhpcyByZW1vdmFsIHJlcHJlc2VudCBhIGZ1bmN0aW9uYWwgY2hhbmdlPyBJdCBmZWVscyBsaWtlIGl0IG1pZ2h0IGJlIHJlZHVuZGFudCwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLlxuXG5JZiBgcGdkYXRgIGlzIGluaXRpYWxpemVkIHdpdGggemVyb3MsIHdoaWNoIGlzIGNvbW1vbiBpbiBtYW55IGFyY2hpdGVjdHVyZXMsIHRoZW4gc2V0dGluZyBgcGdkYXQtXHUwMDNlbm9kZV9wYWdlX2V4dGAgdG8gYE5VTExgIGV4cGxpY2l0bHkgd291bGQgYmUgcmVkdW5kYW50LCBiZWNhdXNlIGl0J3MgYWxyZWFkeSBpbXBsaWNpdGx5IGluaXRpYWxpemVkIHRvIHplcm8sIHdoaWNoIGlzIHRoZSBzYW1lIHRoaW5nIGFzIGBOVUxMYCBpbiB0aGlzIGNvbnRleHQuIEJ1dCwgSSByZWFsbHkgY2FuJ3Qgc2F5IGZvciBzdXJlLCB3aXRob3V0IHZlcmlmeWluZyBob3cgYW5kIHdoZXJlIHRoaXMgc3RydWN0dXJlLCBgcGdkYXRgLCBpcyBhY3R1YWxseSBhbGxvY2F0ZWQuIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBjb2RlIGZvciBgcGdkYXRgIGl0c2VsZiB0byBiZSBjZXJ0YWluLiBUaGF0J3MgdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM1NywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjEwOjAzLjA1ODQ2NDIyNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA2OTM4OTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX25vZGVfZGF0YVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2xvb25nYXJjaC9rZXJuZWwvbnVtYS5jPTE0Mz1zdGF0aWMgdm9pZCBfX2luaXQgbm9kZV9tZW1faW5pdCh1bnNpZ25lZCBpbnQgbm9kZSlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9udW1hLmMtMTU1LVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9udW1hLmM6MTU2OlxcdGFsbG9jX25vZGVfZGF0YShub2RlKTtcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbnVtYS5jLTE1Ny19XFxuLS1cXG5hcmNoL21pcHMvbG9vbmdzb242NC9udW1hLmM9ODI9c3RhdGljIHZvaWQgX19pbml0IG5vZGVfbWVtX2luaXQodW5zaWduZWQgaW50IG5vZGUpXFxuLS1cXG5hcmNoL21pcHMvbG9vbmdzb242NC9udW1hLmMtOTQtXFxuYXJjaC9taXBzL2xvb25nc29uNjQvbnVtYS5jOjk1OlxcdGFsbG9jX25vZGVfZGF0YShub2RlKTtcXG5hcmNoL21pcHMvbG9vbmdzb242NC9udW1hLmMtOTYtXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vbnVtYS5jPTEwOTM9c3RhdGljIHZvaWQgX19pbml0IHNldHVwX25vZGVfZGF0YShpbnQgbmlkLCB1NjQgc3RhcnRfcGZuLCB1NjQgZW5kX3BmbilcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9udW1hLmMtMTA5Ni1cXG5hcmNoL3Bvd2VycGMvbW0vbnVtYS5jOjEwOTc6XFx0YWxsb2Nfbm9kZV9kYXRhKG5pZCk7XFxuYXJjaC9wb3dlcnBjL21tL251bWEuYy0xMDk4LVxcbi0tXFxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmM9MTA2ND1zdGF0aWMgdm9pZCBfX2luaXQgYWxsb2NhdGVfbm9kZV9kYXRhKGludCBuaWQpXFxuLS1cXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYy0xMDY5LSNpZmRlZiBDT05GSUdfTlVNQVxcbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jOjEwNzA6XFx0YWxsb2Nfbm9kZV9kYXRhKG5pZCk7XFxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMtMTA3MS1cXG4tLVxcbmFyY2gveDg2L21tL251bWEuYz0xMjY9c3RhdGljIGludCBfX2luaXQgbnVtYV9yZWdpc3Rlcl9ub2Rlcyh2b2lkKVxcbi0tXFxuYXJjaC94ODYvbW0vbnVtYS5jLTE0NC1cXG5hcmNoL3g4Ni9tbS9udW1hLmM6MTQ1OlxcdFxcdGFsbG9jX25vZGVfZGF0YShuaWQpO1xcbmFyY2gveDg2L21tL251bWEuYy0xNDYtXFx0XFx0bm9kZV9zZXRfb25saW5lKG5pZCk7XFxuLS1cXG5kcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmM9MTk1PXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ub2RlX2RhdGEoaW50IG5pZCwgdTY0IHN0YXJ0X3BmbiwgdTY0IGVuZF9wZm4pXFxuLS1cXG5kcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmMtMTk5LVxcbmRyaXZlcnMvYmFzZS9hcmNoX251bWEuYzoyMDA6XFx0YWxsb2Nfbm9kZV9kYXRhKG5pZCk7XFxuZHJpdmVycy9iYXNlL2FyY2hfbnVtYS5jLTIwMS1cXG4tLVxcbmluY2x1ZGUvbGludXgvbnVtYS5oPTI1PWV4dGVybiBzdHJ1Y3QgcGdsaXN0X2RhdGEgKm5vZGVfZGF0YVtdO1xcbi0tXFxuaW5jbHVkZS9saW51eC9udW1hLmgtMjctXFxuaW5jbHVkZS9saW51eC9udW1hLmg6Mjg6dm9pZCBfX2luaXQgYWxsb2Nfbm9kZV9kYXRhKGludCBuaWQpO1xcbmluY2x1ZGUvbGludXgvbnVtYS5oLTI5LXZvaWQgX19pbml0IGFsbG9jX29mZmxpbmVfbm9kZV9kYXRhKGludCBuaWQpO1xcbi0tXFxubW0vbnVtYS5jPTk9RVhQT1JUX1NZTUJPTChub2RlX2RhdGEpO1xcbi0tXFxubW0vbnVtYS5jLTExLS8qIEFsbG9jYXRlIE5PREVfREFUQSBmb3IgYSBub2RlIG9uIHRoZSBsb2NhbCBtZW1vcnkgKi9cXG5tbS9udW1hLmM6MTI6dm9pZCBfX2luaXQgYWxsb2Nfbm9kZV9kYXRhKGludCBuaWQpXFxubW0vbnVtYS5jLTEzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTA6MDQuODY1NDA5MjE4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTkwNDM4MTI5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgYWxsb2Nfbm9kZV9kYXRhYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHJldmlzaXQgYGFsbG9jX25vZGVfZGF0YWAgd2l0aGluIGBtbS9udW1hLmNgLiBJdCdzIHdoZXJlIHRoZSBjb3JlIE5VTUEgbm9kZSBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiB0YWtlcyBwbGFjZSwgc28gYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBvciBub2RlIGNoYXJhY3RlcmlzdGljcyBhbG1vc3QgY2VydGFpbmx5IGhhcyBhIHJvb3QgaGVyZS4gSSB3YW50IHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBzdGF0ZSBvZiB0aGUgZnVuY3Rpb24sIHRoZSBzcGVjaWZpYyBjYWxsIGNoYWluLCBhbmQgdGhlIG1lbW9yeSBzdHJ1Y3R1cmVzIGNyZWF0ZWQuIEkga25vdyBpdCdzIGEgY3JpdGljYWwgZnVuY3Rpb24gZm9yIHNldHRpbmcgdXAgdGhlIG5vZGUncyBtZW1vcnkgbWFuYWdlbWVudCBjb250ZXh0cywgYW5kIHN1YnRsZSBlcnJvcnMgY2FuIHByb3BhZ2F0ZSBhbmQgY2F1c2UgaGVhZGFjaGVzIGRvd24gdGhlIGxpbmUuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBsb29rIGZvciBob3cgdGhpcyBpbnRlZ3JhdGVzIHdpdGggdGhlIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZXMgd2l0aGluIHRoaXMgZmlsZSBhcyB3ZWxsIGFzIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgTlVNQSBsYXllciBhbmQgaXRzIHNwZWNpZmljIGNhbGxzIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBBUElzLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIGdlbmVyaWMgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCB0aGUgYXNzb2NpYXRlZCBlcnJvci1oYW5kbGluZyBwYXRocy4gQSBkZWVwIGRpdmUgd2lsbCB1bmNvdmVyIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBsZWFrcyBvciwgbWF5YmUganVzdCBtYXliZSwgYSBzdHJhaWdodGZvcndhcmQgbWlzY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUxOSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjEwOjE0Ljc2OTc5NDY0MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwMzE1NTExNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIF9faW5pdCBhbGxvY19ub2RlX2RhdGFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9udW1hLmg9MjU9ZXh0ZXJuIHN0cnVjdCBwZ2xpc3RfZGF0YSAqbm9kZV9kYXRhW107XFxuLS1cXG5pbmNsdWRlL2xpbnV4L251bWEuaC0yNy1cXG5pbmNsdWRlL2xpbnV4L251bWEuaDoyODp2b2lkIF9faW5pdCBhbGxvY19ub2RlX2RhdGEoaW50IG5pZCk7XFxuaW5jbHVkZS9saW51eC9udW1hLmgtMjktdm9pZCBfX2luaXQgYWxsb2Nfb2ZmbGluZV9ub2RlX2RhdGEoaW50IG5pZCk7XFxuLS1cXG5tbS9udW1hLmM9OT1FWFBPUlRfU1lNQk9MKG5vZGVfZGF0YSk7XFxuLS1cXG5tbS9udW1hLmMtMTEtLyogQWxsb2NhdGUgTk9ERV9EQVRBIGZvciBhIG5vZGUgb24gdGhlIGxvY2FsIG1lbW9yeSAqL1xcbm1tL251bWEuYzoxMjp2b2lkIF9faW5pdCBhbGxvY19ub2RlX2RhdGEoaW50IG5pZClcXG5tbS9udW1hLmMtMTMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxMDoxNi40NzI5NjA3MjdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQxNzYzMzY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBwdWxsIHVwIGBtbS9udW1hLmNgIGFuZCBmb2N1cyBvbiBsaW5lcyAxMiB0aHJvdWdoIDMwLiBNeSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgcXVpY2sgZ3Jhc3Agb2YgdGhlIGNvbnRleHQgdGhlc2UgbGluZXMgZXN0YWJsaXNoLiBUaGlzIGxpa2VseSBtZWFucyB0aGV5J3JlIHNldHRpbmcgdXAgc29tZSBmdW5kYW1lbnRhbCBkZWZpbml0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBpbml0aWFsaXphdGlvbnMgcmVsYXRlZCB0byBOVU1BIChOb24tVW5pZm9ybSBNZW1vcnkgQWNjZXNzKSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSBkZWNsYXJhdGlvbnMgb2YgcmVsZXZhbnQgc3RydWN0dXJlcywgcG9zc2libHkgc29tZSBjb25zdGFudCBkZWZpbml0aW9ucyByZWxhdGVkIHRvIG5vZGUgc2l6ZXMgb3IgbWVtb3J5IHpvbmVzLCBhbmQgbWF5YmUgc29tZSBpbml0aWFsIGFzc2lnbm1lbnRzIG9yIGZ1bmN0aW9uIHByb3RvdHlwZXMgdGhhdCBhcmUgY3J1Y2lhbCB0byB0aGUgTlVNQSBhcmNoaXRlY3R1cmUuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaG93IHRoZSBrZXJuZWwgaXMgcGVyY2VpdmluZyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGlmZmVyZW50IG1lbW9yeSBub2RlcyBhdmFpbGFibGUgaW4gdGhlIHN5c3RlbS4gS25vd2luZyB0aGlzIGZvdW5kYXRpb24gd2lsbCBoZWxwIG1lIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgbW9yZSBjb21wbGV4IGxvZ2ljIHRoYXQgd2lsbCBmb2xsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5ODEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxMDoyMS44OTA1OTg5MDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbnVtYS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDEyOlxcdHZvaWQgX19pbml0IGFsbG9jX25vZGVfZGF0YShpbnQgbmlkKVxcbiAgMTM6XFx0e1xcbiAgMTQ6XFx0XFx0Y29uc3Qgc2l6ZV90IG5kX3NpemUgPSByb3VuZHVwKHNpemVvZihwZ19kYXRhX3QpLCBTTVBfQ0FDSEVfQllURVMpO1xcbiAgMTU6XFx0XFx0dTY0IG5kX3BhO1xcbiAgMTY6XFx0XFx0aW50IHRuaWQ7XFxuICAxNzpcXHRcXG4gIDE4OlxcdFxcdC8qIEFsbG9jYXRlIG5vZGUgZGF0YS4gIFRyeSBub2RlLWxvY2FsIG1lbW9yeSBhbmQgdGhlbiBhbnkgbm9kZS4gKi9cXG4gIDE5OlxcdFxcdG5kX3BhID0gbWVtYmxvY2tfcGh5c19hbGxvY190cnlfbmlkKG5kX3NpemUsIFNNUF9DQUNIRV9CWVRFUywgbmlkKTtcXG4gIDIwOlxcdFxcdGlmICghbmRfcGEpXFxuICAyMTpcXHRcXHRcXHRwYW5pYyhcXFwiQ2Fubm90IGFsbG9jYXRlICV6dSBieXRlcyBmb3Igbm9kZSAlZCBkYXRhXFxcXG5cXFwiLFxcbiAgMjI6XFx0XFx0XFx0ICAgICAgbmRfc2l6ZSwgbmlkKTtcXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0LyogcmVwb3J0IGFuZCBpbml0aWFsaXplICovXFxuICAyNTpcXHRcXHRwcl9pbmZvKFxcXCJOT0RFX0RBVEEoJWQpIGFsbG9jYXRlZCBbbWVtICUjMDEwTHgtJSMwMTBMeF1cXFxcblxcXCIsIG5pZCxcXG4gIDI2OlxcdFxcdFxcdG5kX3BhLCBuZF9wYSArIG5kX3NpemUgLSAxKTtcXG4gIDI3OlxcdFxcdHRuaWQgPSBlYXJseV9wZm5fdG9fbmlkKG5kX3BhIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbiAgMjg6XFx0XFx0aWYgKHRuaWQgIT0gbmlkKVxcbiAgMjk6XFx0XFx0XFx0cHJfaW5mbyhcXFwiICAgIE5PREVfREFUQSglZCkgb24gbm9kZSAlZFxcXFxuXFxcIiwgbmlkLCB0bmlkKTtcXG4gIDMwOlxcdFxcbiAgMzE6XFx0XFx0bm9kZV9kYXRhW25pZF0gPSBfX3ZhKG5kX3BhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTA6MjEuODkwNjYzMzU3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMzE4OTgzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczogKipIYW5nIG9uIGEgc2Vjb25kLCBkb2VzIGBtZW1ibG9ja19waHlzX2FsbG9jX3RyeV9uaWRgIGFjdHVhbGx5IHplcm8gb3V0IHRoZSBtZW1vcnkgaXQgYWxsb2NhdGVzIGJ5IGRlZmF1bHQ/KiogVGhhdCdzIGltcG9ydGFudCB0byBrbm93LiBJZiBpdCBkb2VzLCB0aGF0J3Mgb25lIGxlc3MgdGhpbmcgSSBoYXZlIHRvIHdvcnJ5IGFib3V0LiBJZiBub3QsIEknbGwgbmVlZCB0byBleHBsaWNpdGx5IHplcm8gaXQgbXlzZWxmIHdoaWNoIGNvdWxkIGludHJvZHVjZSBzb21lIGNvbXBsZXhpdHkuXG5cblNvLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIExldCdzIGRpdmUgcmlnaHQgaW50byB0aGUgY29kZSBmb3IgYG1lbWJsb2NrX3BoeXNfYWxsb2NfdHJ5X25pZGAgYW5kIHNlZSB3aGF0J3Mgd2hhdC4gR290dGEgY29uZmlybSB0aGlzIGJlaGF2aW9yIGJlZm9yZSBJIG1vdmUgZm9yd2FyZCwgbm8gYXNzdW1wdGlvbnMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NzUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjEwOjI0LjkyMjU2NDEyMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2NDM4ODg0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1ibG9ja19waHlzX2FsbG9jX3RyeV9uaWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1ibG9jay5oPTQwMj1waHlzX2FkZHJfdCBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQocGh5c19hZGRyX3Qgc2l6ZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC00MDQtXFx0XFx0XFx0XFx0ICAgICAgcGh5c19hZGRyX3QgZW5kLCBpbnQgbmlkLCBib29sIGV4YWN0X25pZCk7XFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjQwNTpwaHlzX2FkZHJfdCBtZW1ibG9ja19waHlzX2FsbG9jX3RyeV9uaWQocGh5c19hZGRyX3Qgc2l6ZSwgcGh5c19hZGRyX3QgYWxpZ24sIGludCBuaWQpO1xcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC00MDYtXFxuLS1cXG5tbS9tZW1ibG9jay5jPTE2MjE9cGh5c19hZGRyX3QgX19pbml0IG1lbWJsb2NrX3BoeXNfYWxsb2NfcmFuZ2UocGh5c19hZGRyX3Qgc2l6ZSxcXG4tLVxcbm1tL21lbWJsb2NrLmMtMTYzMy0vKipcXG5tbS9tZW1ibG9jay5jOjE2MzQ6ICogbWVtYmxvY2tfcGh5c19hbGxvY190cnlfbmlkIC0gYWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgZnJvbSBzcGVjaWZpZWQgTlVNQSBub2RlXFxubW0vbWVtYmxvY2suYy0xNjM1LSAqIEBzaXplOiBzaXplIG9mIG1lbW9yeSBibG9jayB0byBiZSBhbGxvY2F0ZWQgaW4gYnl0ZXNcXG4tLVxcbm1tL21lbWJsb2NrLmMtMTY0NS0gKi9cXG5tbS9tZW1ibG9jay5jOjE2NDY6cGh5c19hZGRyX3QgX19pbml0IG1lbWJsb2NrX3BoeXNfYWxsb2NfdHJ5X25pZChwaHlzX2FkZHJfdCBzaXplLCBwaHlzX2FkZHJfdCBhbGlnbiwgaW50IG5pZClcXG5tbS9tZW1ibG9jay5jLTE2NDcte1xcbi0tXFxubW0vbnVtYS5jPTEyPXZvaWQgX19pbml0IGFsbG9jX25vZGVfZGF0YShpbnQgbmlkKVxcbi0tXFxubW0vbnVtYS5jLTE4LVxcdC8qIEFsbG9jYXRlIG5vZGUgZGF0YS4gIFRyeSBub2RlLWxvY2FsIG1lbW9yeSBhbmQgdGhlbiBhbnkgbm9kZS4gKi9cXG5tbS9udW1hLmM6MTk6XFx0bmRfcGEgPSBtZW1ibG9ja19waHlzX2FsbG9jX3RyeV9uaWQobmRfc2l6ZSwgU01QX0NBQ0hFX0JZVEVTLCBuaWQpO1xcbm1tL251bWEuYy0yMC1cXHRpZiAoIW5kX3BhKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxMDoyNi42ODY5NjEzNjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0MzEyNzk5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbW0vbWVtYmxvY2suY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgbW0vbWVtYmxvY2suY2AgZmlsZSwgc3BlY2lmaWNhbGx5IGxpbmVzIDE2NDYgdGhyb3VnaCAxNjYwLiBNeSBpbnRlcm5hbCBwYXJzaW5nIGVuZ2luZSBpcyBhbHJlYWR5IGNodXJuaW5nLiBJIGtub3cgdGhpcyBmaWxlIGlzIGNydWNpYWwgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgdGhvc2Ugc3BlY2lmaWMgbGluZXMgcHJvYmFibHkgZGVhbCB3aXRoIGEgcHJldHR5IGltcG9ydGFudCBhc3BlY3Qgb2YgdGhlIG1lbWJsb2NrJ3Mgb3BlcmF0aW9uLiBJJ20gZ3Vlc3NpbmcgaXQncyByZWxhdGVkIHRvIGFsbG9jYXRpb24sIGZyZWVpbmcsIG9yIG1heWJlIGluaXRpYWxpemF0aW9uLCBnaXZlbiB0aGUgY29udGV4dC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCBwZWFybHMgb2Ygd2lzZG9tIHRoaXMgc2VjdGlvbiBob2xkcy4gSSdtIGV4cGVjdGluZyBzb21ldGhpbmcgbnVhbmNlZCwgcG90ZW50aWFsbHkgaW52b2x2aW5nIGFkZHJlc3NpbmcgY29tcGxleCBoYXJkd2FyZSBpbnRlcmFjdGlvbnMgb3IgcmVzb3VyY2UgY29uc3RyYWludHMsIG9yIHNvbWUgY2xldmVyIGJpdCBtYW5pcHVsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxMDozMS4wMzAwOTMwOTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWJsb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY0NixcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTY0NjpcXHRwaHlzX2FkZHJfdCBfX2luaXQgbWVtYmxvY2tfcGh5c19hbGxvY190cnlfbmlkKHBoeXNfYWRkcl90IHNpemUsIHBoeXNfYWRkcl90IGFsaWduLCBpbnQgbmlkKVxcbjE2NDc6XFx0e1xcbjE2NDg6XFx0XFx0cmV0dXJuIG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBhbGlnbiwgMCxcXG4xNjQ5OlxcdFxcdFxcdFxcdFxcdFxcdE1FTUJMT0NLX0FMTE9DX0FDQ0VTU0lCTEUsIG5pZCwgZmFsc2UpO1xcbjE2NTA6XFx0fVxcbjE2NTE6XFx0XFxuMTY1MjpcXHQvKipcXG4xNjUzOlxcdCAqIG1lbWJsb2NrX2FsbG9jX2ludGVybmFsIC0gYWxsb2NhdGUgYm9vdCBtZW1vcnkgYmxvY2tcXG4xNjU0OlxcdCAqIEBzaXplOiBzaXplIG9mIG1lbW9yeSBibG9jayB0byBiZSBhbGxvY2F0ZWQgaW4gYnl0ZXNcXG4xNjU1OlxcdCAqIEBhbGlnbjogYWxpZ25tZW50IG9mIHRoZSByZWdpb24gYW5kIGJsb2NrJ3Mgc2l6ZVxcbjE2NTY6XFx0ICogQG1pbl9hZGRyOiB0aGUgbG93ZXIgYm91bmQgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gYWxsb2NhdGUgKHBoeXMgYWRkcmVzcylcXG4xNjU3OlxcdCAqIEBtYXhfYWRkcjogdGhlIHVwcGVyIGJvdW5kIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGFsbG9jYXRlIChwaHlzIGFkZHJlc3MpXFxuMTY1ODpcXHQgKiBAbmlkOiBuaWQgb2YgdGhlIGZyZWUgYXJlYSB0byBmaW5kLCAlTlVNQV9OT19OT0RFIGZvciBhbnkgbm9kZVxcbjE2NTk6XFx0ICogQGV4YWN0X25pZDogY29udHJvbCB0aGUgYWxsb2NhdGlvbiBmYWxsIGJhY2sgdG8gb3RoZXIgbm9kZXNcXG4xNjYwOlxcdCAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjEwOjMxLjAzMDI1OTg3MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDc0OTM2MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipNZW1vcnkgQWxsb2NhdGlvbiBDb25jZXJucyoqXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gaXMgbXkgdW5kZXJzdGFuZGluZyBvZiBgbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkYCBjb3JyZWN0PyBJIHRob3VnaHQgaXQgKmNsZWFyZWQqIHRoZSBtZW1vcnkgaXQgYWxsb2NhdGVzLCBidXQgbm93IEknbSBoYXZpbmcgYSBuYWdnaW5nIGRvdWJ0LiBJIG5lZWQgdG8gdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbi4gSWYgaXQgZG9lc24ndCBjbGVhciB0aGUgbWVtb3J5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHN0YXRlIGl0IGxlYXZlcyBpdCBpbiwgYW5kIHdoZXRoZXIgb3Igbm90IHRoYXQgaW50cm9kdWNlcyBhbnkgc2VjdXJpdHkgb3Igc3RhYmlsaXR5IGNvbmNlcm5zIGluIHRoZSBzeXN0ZW0gSSdtIHdvcmtpbmcgb24uIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBhbmQgZG91YmxlLWNoZWNrIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBjb2RlIGZvciBib3RoIGBtZW1ibG9ja19hbGxvY19pbnRlcm5hbGAgYW5kIGBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuZGFtZW50YWwgZGlmZmVyZW5jZSBhbmQgY29udHJvbCBiZXR3ZWVuIHRoZSB0d28uIE9uZSBvZiB0aGVzZSBmdW5jdGlvbnMgbXVzdCBoYW5kbGUgbWVtb3J5IGNsZWFyaW5nLCBhbmQgaWYgaXQncyBub3QgdGhlIG9uZSBJICp0aG91Z2h0KiBpdCB3YXMsIEkgbmVlZCB0byBhZGp1c3QgbXkgYXBwcm9hY2ggYWNjb3JkaW5nbHkuIFRoaXMgc2VlbXMgbGlrZSBhIGNyaXRpY2FsIGRldGFpbCBJIGNhbid0IGFmZm9yZCB0byBnZXQgd3JvbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MzgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjEwOjM2LjUwNTE5ODQ4MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1ODMyNzAwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1ibG9ja19hbGxvY19yYW5nZV9uaWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1ibG9jay5oPTQwMD1waHlzX2FkZHJfdCBtZW1ibG9ja19waHlzX2FsbG9jX3JhbmdlKHBoeXNfYWRkcl90IHNpemUsIHBoeXNfYWRkcl90IGFsaWduLFxcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC00MDEtXFx0XFx0XFx0XFx0ICAgICAgcGh5c19hZGRyX3Qgc3RhcnQsIHBoeXNfYWRkcl90IGVuZCk7XFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjQwMjpwaHlzX2FkZHJfdCBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQocGh5c19hZGRyX3Qgc2l6ZSxcXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtNDAzLVxcdFxcdFxcdFxcdCAgICAgIHBoeXNfYWRkcl90IGFsaWduLCBwaHlzX2FkZHJfdCBzdGFydCxcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NjcyPXN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTcyNC1cXHRcXHRzaXplID0gc2NyYXRjaF9zaXplX25vZGUobmlkKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjcyNTpcXHRcXHRhZGRyID0gbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHNpemUsIENNQV9NSU5fQUxJR05NRU5UX0JZVEVTLFxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNzI2LVxcdFxcdFxcdFxcdFxcdFxcdDAsIE1FTUJMT0NLX0FMTE9DX0FDQ0VTU0lCTEUsXFxuLS1cXG5tbS9jbWEuYz0zODc9c3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBjbWFfYWxsb2NfbWVtKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsXFxuLS1cXG5tbS9jbWEuYy00MDItXFx0XFx0bWVtYmxvY2tfc2V0X2JvdHRvbV91cCh0cnVlKTtcXG5tbS9jbWEuYzo0MDM6XFx0XFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBhbGlnbiwgU1pfNEcsIGxpbWl0LFxcbm1tL2NtYS5jLTQwNC1cXHRcXHRcXHRcXHRcXHRcXHRuaWQsIHRydWUpO1xcbi0tXFxubW0vY21hLmMtNDIyLVxcdFxcdGlmIChiYXNlIFxcdTAwM2MgaGlnaG1lbSBcXHUwMDI2XFx1MDAyNiBsaW1pdCBcXHUwMDNlIGhpZ2htZW0pIHtcXG5tbS9jbWEuYzo0MjM6XFx0XFx0XFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBhbGlnbiwgaGlnaG1lbSxcXG5tbS9jbWEuYy00MjQtXFx0XFx0XFx0XFx0XFx0XFx0XFx0bGltaXQsIG5pZCwgdHJ1ZSk7XFxuLS1cXG5tbS9jbWEuYy00MjktXFx0aWYgKCFhZGRyKVxcbm1tL2NtYS5jOjQzMDpcXHRcXHRhZGRyID0gbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHNpemUsIGFsaWduLCBiYXNlLCBsaW1pdCwgbmlkLFxcbm1tL2NtYS5jLTQzMS1cXHRcXHRcXHRcXHRcXHRcXHR0cnVlKTtcXG4tLVxcbm1tL21lbWJsb2NrLmMtOTYtICogbWVtb3J5IHJhbmdlcyBhbmQgdGhlIGZhbGxiYWNrIG1ldGhvZHMuIENvbnN1bHQgdGhlIGRvY3VtZW50YXRpb25cXG5tbS9tZW1ibG9jay5jOjk3OiAqIG9mIG1lbWJsb2NrX2FsbG9jX2ludGVybmFsKCkgYW5kIG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZCgpXFxubW0vbWVtYmxvY2suYy05OC0gKiBmdW5jdGlvbnMgZm9yIG1vcmUgZWxhYm9yYXRlIGRlc2NyaXB0aW9uLlxcbi0tXFxubW0vbWVtYmxvY2suYz0xNDkxPWludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfc2V0X25vZGUocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcXG4tLVxcbm1tL21lbWJsb2NrLmMtMTUxMC0vKipcXG5tbS9tZW1ibG9jay5jOjE1MTE6ICogbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkIC0gYWxsb2NhdGUgYm9vdCBtZW1vcnkgYmxvY2tcXG5tbS9tZW1ibG9jay5jLTE1MTItICogQHNpemU6IHNpemUgb2YgbWVtb3J5IGJsb2NrIHRvIGJlIGFsbG9jYXRlZCBpbiBieXRlc1xcbi0tXFxubW0vbWVtYmxvY2suYy0xNTM0LSAqL1xcbm1tL21lbWJsb2NrLmM6MTUzNTpwaHlzX2FkZHJfdCBfX2luaXQgbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHBoeXNfYWRkcl90IHNpemUsXFxubW0vbWVtYmxvY2suYy0xNTM2LVxcdFxcdFxcdFxcdFxcdHBoeXNfYWRkcl90IGFsaWduLCBwaHlzX2FkZHJfdCBzdGFydCxcXG4tLVxcbm1tL21lbWJsb2NrLmM9MTYyMT1waHlzX2FkZHJfdCBfX2luaXQgbWVtYmxvY2tfcGh5c19hbGxvY19yYW5nZShwaHlzX2FkZHJfdCBzaXplLFxcbi0tXFxubW0vbWVtYmxvY2suYy0xNjI4LVxcdFxcdCAgICAgKHZvaWQgKilfUkVUX0lQXyk7XFxubW0vbWVtYmxvY2suYzoxNjI5OlxcdHJldHVybiBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQoc2l6ZSwgYWxpZ24sIHN0YXJ0LCBlbmQsIE5VTUFfTk9fTk9ERSxcXG5tbS9tZW1ibG9jay5jLTE2MzAtXFx0XFx0XFx0XFx0XFx0ZmFsc2UpO1xcbi0tXFxubW0vbWVtYmxvY2suYz0xNjQ2PXBoeXNfYWRkcl90IF9faW5pdCBtZW1ibG9ja19waHlzX2FsbG9jX3RyeV9uaWQocGh5c19hZGRyX3Qgc2l6ZSwgcGh5c19hZGRyX3QgYWxpZ24sIGludCBuaWQpXFxubW0vbWVtYmxvY2suYy0xNjQ3LXtcXG5tbS9tZW1ibG9jay5jOjE2NDg6XFx0cmV0dXJuIG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBhbGlnbiwgMCxcXG5tbS9tZW1ibG9jay5jLTE2NDktXFx0XFx0XFx0XFx0XFx0TUVNQkxPQ0tfQUxMT0NfQUNDRVNTSUJMRSwgbmlkLCBmYWxzZSk7XFxuLS1cXG5tbS9tZW1ibG9jay5jLTE2NjAtICpcXG5tbS9tZW1ibG9jay5jOjE2NjE6ICogQWxsb2NhdGVzIG1lbW9yeSBibG9jayB1c2luZyBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQoKSBhbmRcXG5tbS9tZW1ibG9jay5jLTE2NjItICogY29udmVydHMgdGhlIHJldHVybmVkIHBoeXNpY2FsIGFkZHJlc3MgdG8gdmlydHVhbC5cXG4tLVxcbm1tL21lbWJsb2NrLmMtMTY2Ni0gKiBhcyBub2RlIGFuZCBtaXJyb3JlZCBtZW1vcnkgd2lsbCBiZSBoYW5kbGVkIGFnYWluIGluXFxubW0vbWVtYmxvY2suYzoxNjY3OiAqIG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZCgpLlxcbm1tL21lbWJsb2NrLmMtMTY2OC0gKlxcbi0tXFxubW0vbWVtYmxvY2suYz0xNjcyPXN0YXRpYyB2b2lkICogX19pbml0IG1lbWJsb2NrX2FsbG9jX2ludGVybmFsKFxcbi0tXFxubW0vbWVtYmxvY2suYy0xNjgyLVxcbm1tL21lbWJsb2NrLmM6MTY4MzpcXHRhbGxvYyA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBhbGlnbiwgbWluX2FkZHIsIG1heF9hZGRyLCBuaWQsXFxubW0vbWVtYmxvY2suYy0xNjg0LVxcdFxcdFxcdFxcdFxcdGV4YWN0X25pZCk7XFxuLS1cXG5tbS9tZW1ibG9jay5jLTE2ODctXFx0aWYgKCFhbGxvYyBcXHUwMDI2XFx1MDAyNiBtaW5fYWRkcilcXG5tbS9tZW1ibG9jay5jOjE2ODg6XFx0XFx0YWxsb2MgPSBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQoc2l6ZSwgYWxpZ24sIDAsIG1heF9hZGRyLCBuaWQsXFxubW0vbWVtYmxvY2suYy0xNjg5LVxcdFxcdFxcdFxcdFxcdFxcdGV4YWN0X25pZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjEwOjM4LjI2MzU1NDQ2NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzI4OTc1ODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE5vZGUgRGF0YSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gYG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZGAgZ2l2ZXMgdXMgYSAqcGh5c2ljYWwqIGFkZHJlc3MsIHJpZ2h0PyBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBUaGVuLCBsZXQncyBsb29rIGF0IGBhbGxvY19ub2RlX2RhdGFgLiBBaGEhIEl0IGNhbGxzIGBtZW1ibG9ja19waHlzX2FsbG9jX3RyeV9uaWRgLiBTbywgaXQncyBkZWZpbml0ZWx5IHRyeWluZyB0byBhbGxvY2F0ZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IHVzaW5nIGBtZW1ibG9ja2AsIGFuZCBpdCdzIGF0dGVtcHRpbmcgdGhpcyBmb3IgYSBzcGVjaWZpYyBub2RlIElEIChgbmlkYCkuIElmIHRoYXQgZmFpbHMsIGl0IHBhbmljcyDigJMgYSBwcmV0dHkgZm9yY2VmdWwgaW5kaWNhdG9yLiBJdCB0aGVuIGxvZ3MgdGhlIGFsbG9jYXRpb24sIGluZGljYXRpbmcgdGhlIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UuIEl0IGNhbGN1bGF0ZXMgdGhlIG5vZGUgSUQgb2YgdGhlIGFsbG9jYXRlZCBwaHlzaWNhbCBhZGRyZXNzIHRocm91Z2ggYGVhcmx5X3Bmbl90b19uaWRgLCB0byBlbnN1cmUgd2hhdCBub2RlIHRoZSBtZW1vcnkgaXMgb24uIENyaXRpY2FsbHksIGFuZCB0aGlzIGlzIHdoYXQgSSB3YXMgbG9va2luZyBmb3IsIGl0IGFzc2lnbnMgdGhlIHZpcnR1YWwgYWRkcmVzcyB1c2luZyBgX192YShuZF9wYSlgIHRvIGBub2RlX2RhdGFbbmlkXWAuIEFuZCBoZXJlIGl0IGlzLi4uIHRoZXJlIGl0IGlzISBgbWVtc2V0YCEgSXQgKmRvZXMqIHplcm8gdGhlIGFsbG9jYXRlZCBtZW1vcnkgdXNpbmcgYG1lbXNldChub2RlX2RhdGFbbmlkXSwgMCwgc2l6ZW9mKHBnX2RhdGFfdCkpYC4gT2theSwgc28gdGhlIGBwZ19kYXRhX3RgIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCB0byB6ZXJvIGFmdGVyIHRoZSBwaHlzaWNhbCBhbGxvY2F0aW9uLiBNYWtlcyBzZW5zZS4gVGhhdCdzIGEgY3JpdGljYWwgaW5pdGlhbGl6YXRpb24gc3RlcC4gR29vZC4gTm93LCBJIGhhdmUgYSBwcmV0dHkgY2xlYXIgcGljdHVyZSBvZiB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mzc4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjEwOjQzLjU5MjUzMzk3N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9udW1hLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjU6XFx0XFx0cHJfaW5mbyhcXFwiTk9ERV9EQVRBKCVkKSBhbGxvY2F0ZWQgW21lbSAlIzAxMEx4LSUjMDEwTHhdXFxcXG5cXFwiLCBuaWQsXFxuICAyNjpcXHRcXHRcXHRuZF9wYSwgbmRfcGEgKyBuZF9zaXplIC0gMSk7XFxuICAyNzpcXHRcXHR0bmlkID0gZWFybHlfcGZuX3RvX25pZChuZF9wYSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG4gIDI4OlxcdFxcdGlmICh0bmlkICE9IG5pZClcXG4gIDI5OlxcdFxcdFxcdHByX2luZm8oXFxcIiAgICBOT0RFX0RBVEEoJWQpIG9uIG5vZGUgJWRcXFxcblxcXCIsIG5pZCwgdG5pZCk7XFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdG5vZGVfZGF0YVtuaWRdID0gX192YShuZF9wYSk7XFxuICAzMjpcXHRcXHRtZW1zZXQoTk9ERV9EQVRBKG5pZCksIDAsIHNpemVvZihwZ19kYXRhX3QpKTtcXG4gIDMzOlxcdH1cXG4gIDM0OlxcdFxcbiAgMzU6XFx0dm9pZCBfX2luaXQgYWxsb2Nfb2ZmbGluZV9ub2RlX2RhdGEoaW50IG5pZClcXG4gIDM2OlxcdHtcXG4gIDM3OlxcdFxcdHBnX2RhdGFfdCAqcGdkYXQ7XFxuICAzODpcXHRcXHRub2RlX2RhdGFbbmlkXSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZigqcGdkYXQpLCBTTVBfQ0FDSEVfQllURVMpO1xcbiAgMzk6XFx0fVxcbiAgNDA6XFx0XFxuICA0MTpcXHQvKiBTdHViIGZ1bmN0aW9uczogKi9cXG4gIDQyOlxcdFxcbiAgNDM6XFx0I2lmbmRlZiBtZW1vcnlfYWRkX3BoeXNhZGRyX3RvX25pZFxcbiAgNDQ6XFx0aW50IG1lbW9yeV9hZGRfcGh5c2FkZHJfdG9fbmlkKHU2NCBzdGFydClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTA6NDMuNTkyNjAyNDM3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3ODk1MTkxMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTWVtb3J5IEluaXRpYWxpemF0aW9uIGFuZCBOb2RlIERhdGE6IEEgUXVpY2sgUmV2aWV3KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCwgYWhhISwgSSBzZWUgdGhlIGBtZW1zZXRgIHJpZ2h0IHRoZXJlIG9uIGxpbmUgMzIuIEl0J3MgaW5pdGlhbGl6aW5nIGBOT0RFX0RBVEEobmlkKWAgd2l0aCB6ZXJvcywgd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlIGBwZ19kYXRhX3RgIHN0cnVjdHVyZS4gVGhhdCBjb25maXJtcyB0aGUgZXhwZWN0YXRpb24gdGhhdCBgcGdkYXRgIGlzIGluZGVlZCBhbHdheXMgemVyby1pbml0aWFsaXplZCBhdCB0aGlzIHBvaW50LlxuXG5CdXQgSSdtIGFsc28gdGhpbmtpbmcuLi4gZGlkbid0IHdlIHVzZSBgYWxsb2Nfb2ZmbGluZV9ub2RlX2RhdGFgIHJlY2VudGx5PyBJIGtub3cgdGhhdCBmdW5jdGlvbiB1c2VzIGBtZW1ibG9ja19hbGxvY19vcl9wYW5pY2AuIE5vdywgdGhhdCBvbmUgaXMgaW1wb3J0YW50LiBJIHRoaW5rIEkgcmVtZW1iZXIgdGhhdCBgbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWNgIGV2ZW50dWFsbHkgY2FsbHMgYG1lbWJsb2NrX2FsbG9jYCB1bmRlcm5lYXRoLiBBbmQgaWYgbXkgbWVtb3J5IGlzIHJpZ2h0LCBgbWVtYmxvY2tfYWxsb2NgIGFsc28gemVyb2VzIG91dCB0aGUgbWVtb3J5IGl0IGFsbG9jYXRlcy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgc2hvdWxkIHJlYWxseSBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG1lbWJsb2NrX2FsbG9jX29yX3BhbmljYCBpdHNlbGYuIEJlc3QgdG8gY29uZmlybSB0aGF0IG15IGFzc3VtcHRpb25zIGFyZSBzb3VuZCwgeW91IGtub3c/IEl0J3MgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzA2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxMDo0OS4zODIxMjQ3NTJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTEwMDMxODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA2MDggbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfY2lhLmM9MzI4PWNpYV9wcmVwYXJlX3RiaWFfd29ya2Fyb3VuZChpbnQgd2luZG93KVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9jaWEuYy0zMzMtXFx0LyogVXNlIG1pbmltYWwgMUsgbWFwLiAqL1xcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfY2lhLmM6MzM0OlxcdHBwdGUgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhDSUFfQlJPS0VOX1RCSUFfU0laRSwgMzI3NjgpO1xcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfY2lhLmMtMzM1LVxcdHB0ZSA9ICh2aXJ0X3RvX3BoeXMocHB0ZSkgXFx1MDAzZVxcdTAwM2UgKFBBR0VfU0hJRlQgLSAxKSkgfCAxO1xcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYz03OT1ta19yZXNvdXJjZV9uYW1lKGludCBwZSwgaW50IHBvcnQsIGNoYXIgKnN0cilcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtODYtXFx0c3ogKz0gMTsgLyogTlVMIHRlcm1pbmF0b3IgKi9cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jOjg3OlxcdG5hbWUgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzeiwgU01QX0NBQ0hFX0JZVEVTKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jLTg4LVxcdHN0cnNjcHkobmFtZSwgdG1wLCBzeik7XFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jPTExMT1hbGxvY19pbzcodW5zaWduZWQgaW50IHBlKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYy0xMjEtXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYzoxMjI6XFx0aW83ID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZW9mKCppbzcpLCBTTVBfQ0FDSEVfQllURVMpO1xcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtMTIzLVxcdGlvNy1cXHUwMDNlcGUgPSBwZTtcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jPTM5MT1hbGxvY19wY2lfY29udHJvbGxlcih2b2lkKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMtMzk0LVxcbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jOjM5NTpcXHRob3NlID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZW9mKCpob3NlKSwgU01QX0NBQ0hFX0JZVEVTKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9wY2kuYy0zOTYtXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9wY2kuYz00MDQ9YWxsb2NfcmVzb3VyY2Uodm9pZClcXG5hcmNoL2FscGhhL2tlcm5lbC9wY2kuYy00MDUte1xcbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jOjQwNjpcXHRyZXR1cm4gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSksIFNNUF9DQUNIRV9CWVRFUyk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMtNDA3LX1cXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL3BjaV9pb21tdS5jPTYwPWlvbW11X2FyZW5hX25ld19ub2RlKGludCBuaWQsIHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwgZG1hX2FkZHJfdCBiYXNlLFxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpX2lvbW11LmMtNzQtXFxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpX2lvbW11LmM6NzU6XFx0YXJlbmEgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YoKmFyZW5hKSwgU01QX0NBQ0hFX0JZVEVTKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9wY2lfaW9tbXUuYzo3NjpcXHRhcmVuYS1cXHUwMDNlcHRlcyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKG1lbV9zaXplLCBhbGlnbik7XFxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpX2lvbW11LmMtNzctXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvc2V0dXAuYz04NTU9c3RhdGljIHZvaWQgX19pbml0IHJlcXVlc3Rfc3RhbmRhcmRfcmVzb3VyY2VzKGNvbnN0IHN0cnVjdCBtYWNoaW5lX2Rlc2MgKm1kZXNjKVxcbi0tXFxuYXJjaC9hcm0va2VybmVsL3NldHVwLmMtODgyLVxcdFxcdGlmIChhcm1faGFzX2lkbWFwX2FsaWFzKCkgXFx1MDAyNlxcdTAwMjYgYm9vdF9hbGlhc19zdGFydCAhPSBJRE1BUF9JTlZBTElEX0FERFIpIHtcXG5hcmNoL2FybS9rZXJuZWwvc2V0dXAuYzo4ODM6XFx0XFx0XFx0cmVzID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZW9mKCpyZXMpLCBTTVBfQ0FDSEVfQllURVMpO1xcbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jLTg4NC1cXHRcXHRcXHRyZXMtXFx1MDAzZW5hbWUgPSBcXFwiU3lzdGVtIFJBTSAoYm9vdCBhbGlhcylcXFwiO1xcbi0tXFxuYXJjaC9hcm0va2VybmVsL3NldHVwLmMtODkwLVxcbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jOjg5MTpcXHRcXHRyZXMgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YoKnJlcyksIFNNUF9DQUNIRV9CWVRFUyk7XFxuYXJjaC9hcm0va2VybmVsL3NldHVwLmMtODkyLVxcdFxcdHJlcy1cXHUwMDNlbmFtZSAgPSBcXFwiU3lzdGVtIFJBTVxcXCI7XFxuLS1cXG5hcmNoL2FybS9tbS9tbXUuYz03MjA9c3RhdGljIHZvaWQgX19pbml0ICplYXJseV9hbGxvYyh1bnNpZ25lZCBsb25nIHN6KVxcbmFyY2gvYXJtL21tL21tdS5jLTcyMS17XFxuYXJjaC9hcm0vbW0vbW11LmM6NzIyOlxcdHJldHVybiBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzeiwgc3opO1xcbmFyY2gvYXJtL21tL21tdS5jLTcyMy1cXG4tLVxcbmFyY2gvYXJtL21tL21tdS5jPTEwMDk9dm9pZCBfX2luaXQgaW90YWJsZV9pbml0KHN0cnVjdCBtYXBfZGVzYyAqaW9fZGVzYywgaW50IG5yKVxcbi0tXFxuYXJjaC9hcm0vbW0vbW11LmMtMTAxNy1cXG5hcmNoL2FybS9tbS9tbXUuYzoxMDE4OlxcdHN2bSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZigqc3ZtKSAqIG5yLCBfX2FsaWdub2ZfXygqc3ZtKSk7XFxuYXJjaC9hcm0vbW0vbW11LmMtMTAxOS1cXG4tLVxcbmFyY2gvYXJtL21tL21tdS5jPTEwMzQ9dm9pZCBfX2luaXQgdm1fcmVzZXJ2ZV9hcmVhX2Vhcmx5KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLFxcbi0tXFxuYXJjaC9hcm0vbW0vbW11LmMtMTAzOS1cXG5hcmNoL2FybS9tbS9tbXUuYzoxMDQwOlxcdHN2bSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZigqc3ZtKSwgX19hbGlnbm9mX18oKnN2bSkpO1xcbmFyY2gvYXJtL21tL21tdS5jLTEwNDEtXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jPTIxMD1zdGF0aWMgdm9pZCBfX2luaXQgcmVxdWVzdF9zdGFuZGFyZF9yZXNvdXJjZXModm9pZClcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3NldHVwLmMtMjI1LVxcdHJlc19zaXplID0gbnVtX3N0YW5kYXJkX3Jlc291cmNlcyAqIHNpemVvZigqc3RhbmRhcmRfcmVzb3VyY2VzKTtcXG5hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jOjIyNjpcXHRzdGFuZGFyZF9yZXNvdXJjZXMgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhyZXNfc2l6ZSwgU01QX0NBQ0hFX0JZVEVTKTtcXG5hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jLTIyNy1cXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jPTQyMT1zdGF0aWMgdm9pZCBfX2luaXQgcmVzb3VyY2VfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDM2LVxcdHJlc19zaXplID0gbnVtX3N0YW5kYXJkX3Jlc291cmNlcyAqIHNpemVvZigqc3RhbmRhcmRfcmVzb3VyY2VzKTtcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYzo0Mzc6XFx0c3RhbmRhcmRfcmVzb3VyY2VzID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMocmVzX3NpemUsIFNNUF9DQUNIRV9CWVRFUyk7XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDM4LVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jPTE2MD1wdGVfdCAqIF9faW5pdCBwb3B1bGF0ZV9rZXJuZWxfcHRlKHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL21tL2luaXQuYy0xNjctXFx0aWYgKHA0ZF9ub25lKHA0ZHBfZ2V0KHA0ZCkpKSB7XFxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jOjE2ODpcXHRcXHRwdWQgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQQUdFX1NJWkUsIFBBR0VfU0laRSk7XFxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jLTE2OS1cXHRcXHRwNGRfcG9wdWxhdGUoXFx1MDAyNmluaXRfbW0sIHA0ZCwgcHVkKTtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL21tL2luaXQuYy0xNzYtXFx0aWYgKHB1ZF9ub25lKHB1ZHBfZ2V0KHB1ZCkpKSB7XFxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jOjE3NzpcXHRcXHRwbWQgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQQUdFX1NJWkUsIFBBR0VfU0laRSk7XFxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jLTE3OC1cXHRcXHRwdWRfcG9wdWxhdGUoXFx1MDAyNmluaXRfbW0sIHB1ZCwgcG1kKTtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL21tL2luaXQuYy0xODctXFxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jOjE4ODpcXHRcXHRwdGUgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQQUdFX1NJWkUsIFBBR0VfU0laRSk7XFxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jLTE4OS1cXHRcXHRwbWRfcG9wdWxhdGVfa2VybmVsKFxcdTAwMjZpbml0X21tLCBwbWQsIHB0ZSk7XFxuLS1cXG5hcmNoL202OGsvbW0vbWNmbW11LmM9MzY9dm9pZCBfX2luaXQgcGFnaW5nX2luaXQodm9pZClcXG4tLVxcbmFyY2gvbTY4ay9tbS9tY2ZtbXUuYy00OC1cXHRzaXplID0gKHNpemUgKyBQQUdFX1NJWkUpIFxcdTAwMjYgfihQQUdFX1NJWkUtMSk7XFxuYXJjaC9tNjhrL21tL21jZm1tdS5jOjQ5OlxcdG5leHRfcGd0YWJsZSA9ICh1bnNpZ25lZCBsb25nKSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplLCBQQUdFX1NJWkUpO1xcbmFyY2gvbTY4ay9tbS9tY2ZtbXUuYy01MC1cXG4tLVxcbmFyY2gvbTY4ay9tbS9zdW4zbW11LmM9MzY9dm9pZCBfX2luaXQgcGFnaW5nX2luaXQodm9pZClcXG4tLVxcbmFyY2gvbTY4ay9tbS9zdW4zbW11LmMtNTMtXFxuYXJjaC9tNjhrL21tL3N1bjNtbXUuYzo1NDpcXHRuZXh0X3BndGFibGUgPSAodW5zaWduZWQgbG9uZyltZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplLCBQQUdFX1NJWkUpO1xcbmFyY2gvbTY4ay9tbS9zdW4zbW11LmMtNTUtXFx0Ym9vdG1lbV9lbmQgPSAobmV4dF9wZ3RhYmxlICsgc2l6ZSArIFBBR0VfU0laRSkgXFx1MDAyNiBQQUdFX01BU0s7XFxuLS1cXG5hcmNoL202OGsvc3VuMy9zdW4zZHZtYS5jPTIzNT12b2lkIF9faW5pdCBkdm1hX2luaXQodm9pZClcXG4tLVxcbmFyY2gvbTY4ay9zdW4zL3N1bjNkdm1hLmMtMjU0LVxcbmFyY2gvbTY4ay9zdW4zL3N1bjNkdm1hLmM6MjU1OlxcdGlvbW11X3VzZSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKElPTU1VX1RPVEFMX0VOVFJJRVMgKiBzaXplb2YodW5zaWduZWQgbG9uZyksXFxuYXJjaC9tNjhrL3N1bjMvc3VuM2R2bWEuYy0yNTYtXFx0XFx0XFx0XFx0ICAgU01QX0NBQ0hFX0JZVEVTKTtcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYz02ODM9c3RhdGljIHZvaWQgX19pbml0IHJlc291cmNlX2luaXQodm9pZClcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy03MDAtXFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jOjcwMTpcXHRcXHRyZXMgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSwgU01QX0NBQ0hFX0JZVEVTKTtcXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNzAyLVxcbi0tXFxuYXJjaC9taXBzL21tL2luaXQuYz01OT12b2lkIF9faW5pdCBhcmNoX3NldHVwX3plcm9fcGFnZXModm9pZClcXG4tLVxcbmFyY2gvbWlwcy9tbS9pbml0LmMtNjctXFxuYXJjaC9taXBzL21tL2luaXQuYzo2ODpcXHRlbXB0eV96ZXJvX3BhZ2UgPSAodW5zaWduZWQgbG9uZyltZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2Mgb3JkZXIsIFBBR0VfU0laRSk7XFxuYXJjaC9taXBzL21tL2luaXQuYy02OS1cXG4tLVxcbmFyY2gvb3BlbnJpc2MvbW0vaW9yZW1hcC5jPTM0PXB0ZV90IF9fcmVmICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmFyY2gvb3BlbnJpc2MvbW0vaW9yZW1hcC5jLTQwLVxcdH0gZWxzZSB7XFxuYXJjaC9vcGVucmlzYy9tbS9pb3JlbWFwLmM6NDE6XFx0XFx0cHRlID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUEFHRV9TSVpFLCBQQUdFX1NJWkUpO1xcbmFyY2gvb3BlbnJpc2MvbW0vaW9yZW1hcC5jLTQyLVxcdH1cXG4tLVxcbmFyY2gvcGFyaXNjL21tL2luaXQuYz0zNDM9c3RhdGljIHZvaWQgX19yZWYgbWFwX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfdmFkZHIsXFxuLS1cXG5hcmNoL3BhcmlzYy9tbS9pbml0LmMtMzc5LVxcdFxcdGlmIChwdWRfbm9uZSgqcHVkKSkge1xcbmFyY2gvcGFyaXNjL21tL2luaXQuYzozODA6XFx0XFx0XFx0cG1kID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIFBNRF9UQUJMRV9PUkRFUixcXG5hcmNoL3BhcmlzYy9tbS9pbml0LmMtMzgxLVxcdFxcdFxcdFxcdFxcdCAgICAgUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIFBNRF9UQUJMRV9PUkRFUik7XFxuLS1cXG5hcmNoL3BhcmlzYy9tbS9pbml0LmMtMzg4LVxcdFxcdFxcdGlmIChwbWRfbm9uZSgqcG1kKSkge1xcbmFyY2gvcGFyaXNjL21tL2luaXQuYzozODk6XFx0XFx0XFx0XFx0cGdfdGFibGUgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQQUdFX1NJWkUsIFBBR0VfU0laRSk7XFxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTM5MC1cXHRcXHRcXHRcXHRwbWRfcG9wdWxhdGVfa2VybmVsKE5VTEwsIHBtZCwgcGdfdGFibGUpO1xcbi0tXFxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jPTY2MT1zdGF0aWMgdm9pZCBfX2luaXQgZml4bWFwX2luaXQodm9pZClcXG4tLVxcbmFyY2gvcGFyaXNjL21tL2luaXQuYy02NzMtXFx0aWYgKHB1ZF9ub25lKCpwdWQpKSB7XFxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jOjY3NDpcXHRcXHRwbWQgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2MgUE1EX1RBQkxFX09SREVSLFxcbmFyY2gvcGFyaXNjL21tL2luaXQuYy02NzUtXFx0XFx0XFx0XFx0ICAgICBQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2MgUE1EX1RBQkxFX09SREVSKTtcXG4tLVxcbmFyY2gvcGFyaXNjL21tL2luaXQuYy02ODEtXFx0ZG8ge1xcbmFyY2gvcGFyaXNjL21tL2luaXQuYzo2ODI6XFx0XFx0cHRlX3QgKnB0ZSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBBR0VfU0laRSwgUEFHRV9TSVpFKTtcXG5hcmNoL3BhcmlzYy9tbS9pbml0LmMtNjgzLVxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9kdF9jcHVfZnRycy5jPTEwNzg9c3RhdGljIGludCBfX2luaXQgZHRfY3B1X2Z0cnNfc2Nhbl9jYWxsYmFjayh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZHRfY3B1X2Z0cnMuYy0xMDk5LVxcdGR0X2NwdV9mZWF0dXJlcyA9XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9kdF9jcHVfZnRycy5jOjExMDA6XFx0XFx0bWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9kdF9jcHVfZnRycy5jLTExMDEtXFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBkdF9jcHVfZmVhdHVyZSkgKiBucl9kdF9jcHVfZmVhdHVyZXMsXFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL3BjaV8zMi5jPTIxMT1wY2lfY3JlYXRlX09GX2J1c19tYXAodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzMyLmMtMjE1LVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzMyLmM6MjE2OlxcdG9mX3Byb3AgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2Yoc3RydWN0IHByb3BlcnR5KSArIDI1NixcXG5hcmNoL3Bvd2VycGMva2VybmVsL3BjaV8zMi5jLTIxNy1cXHRcXHRcXHRcXHQgU01QX0NBQ0hFX0JZVEVTKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmM9NDUxPXZvaWQgX19pbml0IHNtcF9zZXR1cF9jcHVfbWFwcyh2b2lkKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYy00NTgtXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYzo0NTk6XFx0Y3B1X3RvX3BoeXNfaWQgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhucl9jcHVfaWRzICogc2l6ZW9mKHUzMiksXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYy00NjAtXFx0XFx0XFx0XFx0XFx0X19hbGlnbm9mX18odTMyKSk7XFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmM9MTQxPXN0YXRpYyB2b2lkICpfX2luaXQgYWxsb2Nfc3RhY2sodm9pZClcXG5hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmMtMTQyLXtcXG5hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmM6MTQzOlxcdHJldHVybiBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhUSFJFQURfU0laRSwgVEhSRUFEX0FMSUdOKTtcXG5hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmMtMTQ0LX1cXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3MzMi9tbXUuYz0zNDY9dm9pZCBfX2luaXQgTU1VX2luaXRfaHcodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3MzMi9tbXUuYy0zNzctXFx0aWYgKCBwcGNfbWQucHJvZ3Jlc3MgKSBwcGNfbWQucHJvZ3Jlc3MoXFxcImhhc2g6ZmluZCBwaWVjZVxcXCIsIDB4MzIyKTtcXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzMzIvbW11LmM6Mzc4OlxcdEhhc2ggPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhIYXNoX3NpemUsIEhhc2hfc2l6ZSk7XFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczMyL21tdS5jLTM3OS1cXHRfU0RSMSA9IF9fcGEoSGFzaCkgfCBTRFIxX0xPV19CSVRTO1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3BndGFibGUuYz0zMDQ9dm9pZCBfX2luaXQgbW11X3BhcnRpdGlvbl90YWJsZV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcGd0YWJsZS5jLTMwOS1cXHQvKiBJbml0aWFsaXplIHRoZSBQYXJ0aXRpb24gVGFibGUgd2l0aCBubyBlbnRyaWVzICovXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3BndGFibGUuYzozMTA6XFx0cGFydGl0aW9uX3RiID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMocGF0Yl9zaXplLCBwYXRiX3NpemUpO1xcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9wZ3RhYmxlLmMtMzExLVxcdHB0Y3IgPSBfX3BhKHBhcnRpdGlvbl90YikgfCAoUEFUQl9TSVpFX1NISUZUIC0gMTIpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2thc2FuL2luaXRfYm9vazNlXzY0LmM9MzI9c3RhdGljIGludCBfX2luaXQga2FzYW5fbWFwX2tlcm5lbF9wYWdlKHVuc2lnbmVkIGxvbmcgZWEsIHVuc2lnbmVkIGxvbmcgcGEsIHBncHJvdF90IHByb3QpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0va2FzYW4vaW5pdF9ib29rM2VfNjQuYy00Mi1cXHRpZiAoa2FzYW5fcHVkX3RhYmxlKCpwNGRwKSkge1xcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jOjQzOlxcdFxcdHB1ZHAgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQVURfVEFCTEVfU0laRSwgUFVEX1RBQkxFX1NJWkUpO1xcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jLTQ0LVxcdFxcdG1lbWNweShwdWRwLCBrYXNhbl9lYXJseV9zaGFkb3dfcHVkLCBQVURfVEFCTEVfU0laRSk7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0va2FzYW4vaW5pdF9ib29rM2VfNjQuYy00OC1cXHRpZiAoa2FzYW5fcG1kX3RhYmxlKCpwdWRwKSkge1xcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jOjQ5OlxcdFxcdHBtZHAgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQTURfVEFCTEVfU0laRSwgUE1EX1RBQkxFX1NJWkUpO1xcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jLTUwLVxcdFxcdG1lbWNweShwbWRwLCBrYXNhbl9lYXJseV9zaGFkb3dfcG1kLCBQTURfVEFCTEVfU0laRSk7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0va2FzYW4vaW5pdF9ib29rM2VfNjQuYy01NC1cXHRpZiAoa2FzYW5fcHRlX3RhYmxlKCpwbWRwKSkge1xcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jOjU1OlxcdFxcdHB0ZXAgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQVEVfVEFCTEVfU0laRSwgUFRFX1RBQkxFX1NJWkUpO1xcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szZV82NC5jLTU2LVxcdFxcdG1lbWNweShwdGVwLCBrYXNhbl9lYXJseV9zaGFkb3dfcHRlLCBQVEVfVEFCTEVfU0laRSk7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0va2FzYW4vaW5pdF9ib29rM2VfNjQuYz02Nj1zdGF0aWMgdm9pZCBfX2luaXQga2FzYW5faW5pdF9waHlzX3JlZ2lvbih2b2lkICpzdGFydCwgdm9pZCAqZW5kKVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2thc2FuL2luaXRfYm9vazNlXzY0LmMtNzYtXFxuYXJjaC9wb3dlcnBjL21tL2thc2FuL2luaXRfYm9vazNlXzY0LmM6Nzc6XFx0dmEgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhrX2VuZCAtIGtfc3RhcnQsIFBBR0VfU0laRSk7XFxuYXJjaC9wb3dlcnBjL21tL2thc2FuL2luaXRfYm9vazNlXzY0LmMtNzgtXFx0Zm9yIChrX2N1ciA9IGtfc3RhcnQ7IGtfY3VyIFxcdTAwM2Mga19lbmQ7IGtfY3VyICs9IFBBR0VfU0laRSwgdmEgKz0gUEFHRV9TSVpFKVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2thc2FuL2luaXRfYm9vazNzXzY0LmM9MjI9c3RhdGljIHZvaWQgX19pbml0IGthc2FuX2luaXRfcGh5c19yZWdpb24odm9pZCAqc3RhcnQsIHZvaWQgKmVuZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szc182NC5jLTMyLVxcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szc182NC5jOjMzOlxcdHZhID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoa19lbmQgLSBrX3N0YXJ0LCBQQUdFX1NJWkUpO1xcbmFyY2gvcG93ZXJwYy9tbS9rYXNhbi9pbml0X2Jvb2szc182NC5jLTM0LVxcdGZvciAoa19jdXIgPSBrX3N0YXJ0OyBrX2N1ciBcXHUwMDNjIGtfZW5kOyBrX2N1ciArPSBQQUdFX1NJWkUsIHZhICs9IFBBR0VfU0laRSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvbW11X2NvbnRleHQuYz0zNjk9dm9pZCBfX2luaXQgbW11X2NvbnRleHRfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC9tbXVfY29udGV4dC5jLTM3OS1cXHQgKi9cXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL21tdV9jb250ZXh0LmM6MzgwOlxcdGNvbnRleHRfbWFwID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoQ1RYX01BUF9TSVpFLCBTTVBfQ0FDSEVfQllURVMpO1xcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvbW11X2NvbnRleHQuYzozODE6XFx0Y29udGV4dF9tbSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZih2b2lkICopICogKExBU1RfQ09OVEVYVCArIDEpLFxcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvbW11X2NvbnRleHQuYy0zODItXFx0XFx0XFx0XFx0ICAgIFNNUF9DQUNIRV9CWVRFUyk7XFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC9tbXVfY29udGV4dC5jLTM4My1cXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU01QKSkge1xcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvbW11X2NvbnRleHQuYzozODQ6XFx0XFx0c3RhbGVfbWFwW2Jvb3RfY3B1aWRdID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoQ1RYX01BUF9TSVpFLCBTTVBfQ0FDSEVfQllURVMpO1xcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvbW11X2NvbnRleHQuYy0zODUtXFx0XFx0Y3B1aHBfc2V0dXBfc3RhdGVfbm9jYWxscyhDUFVIUF9QT1dFUlBDX01NVV9DVFhfUFJFUEFSRSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmM9NTE9dm9pZCBfX2luaXQgKmVhcmx5X2FsbG9jX3BndGFibGUodW5zaWduZWQgbG9uZyBzaXplKVxcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMtNTIte1xcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmM6NTM6XFx0cmV0dXJuIG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemUsIHNpemUpO1xcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMtNTQtXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL252cmFtLmM9NTA4PXN0YXRpYyBpbnQgX19pbml0IGNvcmU5OV9udnJhbV9zZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL252cmFtLmMtNTE2LVxcdH1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL252cmFtLmM6NTE3OlxcdG52cmFtX2ltYWdlID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoTlZSQU1fU0laRSwgU01QX0NBQ0hFX0JZVEVTKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL252cmFtLmMtNTE4LVxcdG52cmFtX2RhdGEgPSBpb3JlbWFwKGFkZHIsIE5WUkFNX1NJWkUqMik7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC5jPTE0Nz1pbnQgX19pbml0IGVhcmx5X2luaXRfZHRfc2Nhbl9yZWNvdmVyYWJsZV9yYW5nZXModW5zaWduZWQgbG9uZyBub2RlLFxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L29wYWwuYy0xODItXFx0ICovXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L29wYWwuYzoxODM6XFx0bWNfcmVjb3ZlcmFibGVfcmFuZ2UgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplLCBfX2FsaWdub2ZfXyh1NjQpKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC5jLTE4NC1cXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3NldHVwLmM9MTE0PXN0YXRpYyB2b2lkIF9faW5pdCBwcmVhbGxvYyhzdHJ1Y3QgcHMzX3ByZWFsbG9jICpwKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc2V0dXAuYy0xMTgtXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc2V0dXAuYzoxMTk6XFx0cC1cXHUwMDNlYWRkcmVzcyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHAtXFx1MDAzZXNpemUsIHAtXFx1MDAzZWFsaWduKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zZXR1cC5jLTEyMC1cXG4tLVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXNpX2JpdG1hcC5jPTExMj1pbnQgX19yZWYgbXNpX2JpdG1hcF9hbGxvYyhzdHJ1Y3QgbXNpX2JpdG1hcCAqYm1wLCB1bnNpZ25lZCBpbnQgaXJxX2NvdW50LFxcbi0tXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9tc2lfYml0bWFwLmMtMTI2LVxcdGVsc2Uge1xcbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXNpX2JpdG1hcC5jOjEyNzpcXHRcXHRibXAtXFx1MDAzZWJpdG1hcCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemUsIFNNUF9DQUNIRV9CWVRFUyk7XFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9tc2lfYml0bWFwLmMtMTI4LVxcdFxcdC8qIHRoZSBiaXRtYXAgd29uJ3QgYmUgZnJlZWQgZnJvbSBtZW1ibG9jayBhbGxvY2F0b3IgKi9cXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL3NldHVwLmM9MTM1PXN0YXRpYyB2b2lkIF9faW5pdCBpbml0X3Jlc291cmNlcyh2b2lkKVxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvc2V0dXAuYy0xNDgtXFx0bWVtX3Jlc19zeiA9IG51bV9yZXNvdXJjZXMgKiBzaXplb2YoKm1lbV9yZXMpO1xcbmFyY2gvcmlzY3Yva2VybmVsL3NldHVwLmM6MTQ5OlxcdG1lbV9yZXMgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhtZW1fcmVzX3N6LCBTTVBfQ0FDSEVfQllURVMpO1xcbmFyY2gvcmlzY3Yva2VybmVsL3NldHVwLmMtMTUwLVxcbi0tXFxuYXJjaC9yaXNjdi9tbS9rYXNhbl9pbml0LmM9Mjk9c3RhdGljIHZvaWQgX19pbml0IGthc2FuX3BvcHVsYXRlX3B0ZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIGVuZClcXG4tLVxcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jLTM0LVxcdGlmIChwbWRfbm9uZShwbWRwX2dldChwbWQpKSkge1xcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jOjM1OlxcdFxcdHAgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQVFJTX1BFUl9QVEUgKiBzaXplb2YocHRlX3QpLCBQQUdFX1NJWkUpO1xcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jLTM2LVxcdFxcdHNldF9wbWQocG1kLCBwZm5fcG1kKFBGTl9ET1dOKF9fcGEocCkpLCBQQUdFX1RBQkxFKSk7XFxuLS1cXG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYz01MD1zdGF0aWMgdm9pZCBfX2luaXQga2FzYW5fcG9wdWxhdGVfcG1kKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbi0tXFxuYXJjaC9yaXNjdi9tbS9rYXNhbl9pbml0LmMtNTYtXFx0aWYgKHB1ZF9ub25lKHB1ZHBfZ2V0KHB1ZCkpKSB7XFxuYXJjaC9yaXNjdi9tbS9rYXNhbl9pbml0LmM6NTc6XFx0XFx0cCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBUUlNfUEVSX1BNRCAqIHNpemVvZihwbWRfdCksIFBBR0VfU0laRSk7XFxuYXJjaC9yaXNjdi9tbS9rYXNhbl9pbml0LmMtNTgtXFx0XFx0c2V0X3B1ZChwdWQsIHBmbl9wdWQoUEZOX0RPV04oX19wYShwKSksIFBBR0VfVEFCTEUpKTtcXG4tLVxcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jPTgwPXN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9wb3B1bGF0ZV9wdWQocDRkX3QgKnA0ZCxcXG4tLVxcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jLTg3LVxcdGlmIChwNGRfbm9uZShwNGRwX2dldChwNGQpKSkge1xcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jOjg4OlxcdFxcdHAgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQVFJTX1BFUl9QVUQgKiBzaXplb2YocHVkX3QpLCBQQUdFX1NJWkUpO1xcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jLTg5LVxcdFxcdHNldF9wNGQocDRkLCBwZm5fcDRkKFBGTl9ET1dOKF9fcGEocCkpLCBQQUdFX1RBQkxFKSk7XFxuLS1cXG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYz0xMTE9c3RhdGljIHZvaWQgX19pbml0IGthc2FuX3BvcHVsYXRlX3A0ZChwZ2RfdCAqcGdkLFxcbi0tXFxuYXJjaC9yaXNjdi9tbS9rYXNhbl9pbml0LmMtMTE4LVxcdGlmIChwZ2Rfbm9uZShwZ2RwX2dldChwZ2QpKSkge1xcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jOjExOTpcXHRcXHRwID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUFRSU19QRVJfUDREICogc2l6ZW9mKHA0ZF90KSwgUEFHRV9TSVpFKTtcXG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYy0xMjAtXFx0XFx0c2V0X3BnZChwZ2QsIHBmbl9wZ2QoUEZOX0RPV04oX19wYShwKSksIFBBR0VfVEFCTEUpKTtcXG4tLVxcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jPTM3Nz1zdGF0aWMgdm9pZCBfX2luaXQga2FzYW5fc2hhbGxvd19wb3B1bGF0ZV9wdWQocDRkX3QgKnA0ZCxcXG4tLVxcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jLTM4Ny1cXHRcXHRpZiAocHVkX25vbmUocHVkcF9nZXQocHVkX2spKSkge1xcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jOjM4ODpcXHRcXHRcXHRwID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUEFHRV9TSVpFLCBQQUdFX1NJWkUpO1xcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jLTM4OS1cXHRcXHRcXHRzZXRfcHVkKHB1ZF9rLCBwZm5fcHVkKFBGTl9ET1dOKF9fcGEocCkpLCBQQUdFX1RBQkxFKSk7XFxuLS1cXG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYz0zOTc9c3RhdGljIHZvaWQgX19pbml0IGthc2FuX3NoYWxsb3dfcG9wdWxhdGVfcDRkKHBnZF90ICpwZ2QsXFxuLS1cXG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYy00MDctXFx0XFx0aWYgKHA0ZF9ub25lKHA0ZHBfZ2V0KHA0ZF9rKSkpIHtcXG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYzo0MDg6XFx0XFx0XFx0cCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBBR0VfU0laRSwgUEFHRV9TSVpFKTtcXG5hcmNoL3Jpc2N2L21tL2thc2FuX2luaXQuYy00MDktXFx0XFx0XFx0c2V0X3A0ZChwNGRfaywgcGZuX3A0ZChQRk5fRE9XTihfX3BhKHApKSwgUEFHRV9UQUJMRSkpO1xcbi0tXFxuYXJjaC9yaXNjdi9tbS9rYXNhbl9pbml0LmM9NDE3PXN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9zaGFsbG93X3BvcHVsYXRlX3BnZCh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIGVuZClcXG4tLVxcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jLTQyNi1cXHRcXHRpZiAocGdkX25vbmUocGdkcF9nZXQocGdkX2spKSkge1xcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jOjQyNzpcXHRcXHRcXHRwID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUEFHRV9TSVpFLCBQQUdFX1NJWkUpO1xcbmFyY2gvcmlzY3YvbW0va2FzYW5faW5pdC5jLTQyOC1cXHRcXHRcXHRzZXRfcGdkKHBnZF9rLCBwZm5fcGdkKFBGTl9ET1dOKF9fcGEocCkpLCBQQUdFX1RBQkxFKSk7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2NyYXNoX2R1bXAuYz02Mz1zdHJ1Y3Qgc2F2ZV9hcmVhICogX19pbml0IHNhdmVfYXJlYV9hbGxvYyhib29sIGlzX2Jvb3RfY3B1KVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9jcmFzaF9kdW1wLmMtNjYtXFxuYXJjaC9zMzkwL2tlcm5lbC9jcmFzaF9kdW1wLmM6Njc6XFx0c2EgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YoKnNhKSwgOCk7XFxuYXJjaC9zMzkwL2tlcm5lbC9jcmFzaF9kdW1wLmMtNjgtXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL251bWEuYz0xNz12b2lkIF9faW5pdCBudW1hX3NldHVwKHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL251bWEuYy0yNC1cXHRmb3IgKG5pZCA9IDA7IG5pZCBcXHUwMDNjIE1BWF9OVU1OT0RFUzsgbmlkKyspXFxuYXJjaC9zMzkwL2tlcm5lbC9udW1hLmM6MjU6XFx0XFx0Tk9ERV9EQVRBKG5pZCkgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YocGdfZGF0YV90KSwgOCk7XFxuYXJjaC9zMzkwL2tlcm5lbC9udW1hLmMtMjYtXFx0Tk9ERV9EQVRBKDApLVxcdTAwM2Vub2RlX3NwYW5uZWRfcGFnZXMgPSBtZW1ibG9ja19lbmRfb2ZfRFJBTSgpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM9Mzc4PXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBzdGFja19hbGxvY19lYXJseSh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTM4MS1cXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM6MzgyOlxcdHN0YWNrID0gKHVuc2lnbmVkIGxvbmcpbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoVEhSRUFEX1NJWkUsIFRIUkVBRF9TSVpFKTtcXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtMzgzLVxcdHJldHVybiBzdGFjaztcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYz00OTA9c3RhdGljIHZvaWQgX19pbml0IHNldHVwX3Jlc291cmNlcyh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTUwNC1cXHRmb3JfZWFjaF9tZW1fcmFuZ2UoaSwgXFx1MDAyNnN0YXJ0LCBcXHUwMDI2ZW5kKSB7XFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jOjUwNTpcXHRcXHRyZXMgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YoKnJlcyksIDgpO1xcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy01MDYtXFx0XFx0cmVzLVxcdTAwM2VmbGFncyA9IElPUkVTT1VSQ0VfQlVTWSB8IElPUkVTT1VSQ0VfU1lTVEVNX1JBTTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy01MjMtXFx0XFx0XFx0aWYgKHN0ZF9yZXMtXFx1MDAzZWVuZCBcXHUwMDNlIHJlcy1cXHUwMDNlZW5kKSB7XFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jOjUyNDpcXHRcXHRcXHRcXHRzdWJfcmVzID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZW9mKCpzdWJfcmVzKSwgOCk7XFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTUyNS1cXHRcXHRcXHRcXHQqc3ViX3JlcyA9ICpzdGRfcmVzO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jPTgxMj1zdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfcmFuZG9tbmVzcyh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTgxNS1cXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM6ODE2OlxcdHZtbXMgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQQUdFX1NJWkUsIFBBR0VfU0laRSk7XFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTgxNy1cXHRpZiAoc3RzaSh2bW1zLCAzLCAyLCAyKSA9PSAwIFxcdTAwMjZcXHUwMDI2IHZtbXMtXFx1MDAzZWNvdW50KVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9zbXAuYz01OTg9dm9pZCBfX2luaXQgc21wX3NhdmVfZHVtcF9pcGxfY3B1KHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3NtcC5jLTYwNS1cXHRzYSA9IHNhdmVfYXJlYV9hbGxvYyh0cnVlKTtcXG5hcmNoL3MzOTAva2VybmVsL3NtcC5jOjYwNjpcXHRyZWdzID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoNTEyLCA4KTtcXG5hcmNoL3MzOTAva2VybmVsL3NtcC5jLTYwNy1cXHRjb3B5X29sZG1lbV9rZXJuZWwocmVncywgX19MQ19GUFJFR1NfU0FWRV9BUkVBLCA1MTIpO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9zbXAuYz03Nzc9dm9pZCBfX2luaXQgc21wX2RldGVjdF9jcHVzKHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3NtcC5jLTc4My1cXHQvKiBHZXQgQ1BVIGluZm9ybWF0aW9uICovXFxuYXJjaC9zMzkwL2tlcm5lbC9zbXAuYzo3ODQ6XFx0aW5mbyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZigqaW5mbyksIDgpO1xcbmFyY2gvczM5MC9rZXJuZWwvc21wLmMtNzg1LVxcdHNtcF9nZXRfY29yZV9pbmZvKGluZm8sIDEpO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC90b3BvbG9neS5jPTUzOT1zdGF0aWMgdm9pZCBfX2luaXQgYWxsb2NfbWFza3Moc3RydWN0IHN5c2luZm9fMTVfMV94ICppbmZvLFxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC90b3BvbG9neS5jLTU0OC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfbWFza3M7IGkrKykge1xcbmFyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYzo1NDk6XFx0XFx0bWFzay1cXHUwMDNlbmV4dCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZigqbWFzay1cXHUwMDNlbmV4dCksIDgpO1xcbmFyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYy01NTAtXFx0XFx0bWFzayA9IG1hc2stXFx1MDAzZW5leHQ7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3RvcG9sb2d5LmM9NTY0PXZvaWQgX19pbml0IHRvcG9sb2d5X2luaXRfZWFybHkodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYy01NzYtXFx0XFx0Z290byBvdXQ7XFxuYXJjaC9zMzkwL2tlcm5lbC90b3BvbG9neS5jOjU3NzpcXHR0bF9pbmZvID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUEFHRV9TSVpFLCBQQUdFX1NJWkUpO1xcbmFyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYy01NzgtXFx0aW5mbyA9IHRsX2luZm87XFxuLS1cXG5hcmNoL3MzOTAvbW0vaW5pdC5jPTcyPXZvaWQgX19pbml0IGFyY2hfc2V0dXBfemVyb19wYWdlcyh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL21tL2luaXQuYy04My1cXG5hcmNoL3MzOTAvbW0vaW5pdC5jOjg0OlxcdGVtcHR5X3plcm9fcGFnZSA9ICh1bnNpZ25lZCBsb25nKW1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBvcmRlciwgUEFHRV9TSVpFKTtcXG5hcmNoL3MzOTAvbW0vaW5pdC5jLTg1LVxcbi0tXFxuYXJjaC9zaC9tbS9pbml0LmM9MTI5PXN0YXRpYyBwbWRfdCAqIF9faW5pdCBvbmVfbWRfdGFibGVfaW5pdChwdWRfdCAqcHVkKVxcbi0tXFxuYXJjaC9zaC9tbS9pbml0LmMtMTMzLVxcbmFyY2gvc2gvbW0vaW5pdC5jOjEzNDpcXHRcXHRwbWQgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQQUdFX1NJWkUsIFBBR0VfU0laRSk7XFxuYXJjaC9zaC9tbS9pbml0LmMtMTM1LVxcdFxcdHB1ZF9wb3B1bGF0ZShcXHUwMDI2aW5pdF9tbSwgcHVkLCBwbWQpO1xcbi0tXFxuYXJjaC9zaC9tbS9pbml0LmM9MTQyPXN0YXRpYyBwdGVfdCAqIF9faW5pdCBvbmVfcGFnZV90YWJsZV9pbml0KHBtZF90ICpwbWQpXFxuLS1cXG5hcmNoL3NoL21tL2luaXQuYy0xNDYtXFxuYXJjaC9zaC9tbS9pbml0LmM6MTQ3OlxcdFxcdHB0ZSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBBR0VfU0laRSwgUEFHRV9TSVpFKTtcXG5hcmNoL3NoL21tL2luaXQuYy0xNDgtXFx0XFx0cG1kX3BvcHVsYXRlX2tlcm5lbChcXHUwMDI2aW5pdF9tbSwgcG1kLCBwdGUpO1xcbi0tXFxuYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV8zMi5jPTI3PXZvaWQgKiBfX2luaXQgcHJvbV9lYXJseV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpXFxuLS1cXG5hcmNoL3NwYXJjL2tlcm5lbC9wcm9tXzMyLmMtMzAtXFxuYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV8zMi5jOjMxOlxcdHJldCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemUsIFNNUF9DQUNIRV9CWVRFUyk7XFxuYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV8zMi5jLTMyLVxcbi0tXFxuYXJjaC9zcGFyYy9tbS9zcm1tdS5jPTI2Nj1zdGF0aWMgdm9pZCBfX2luaXQgc3JtbXVfbm9jYWNoZV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3NwYXJjL21tL3NybW11LmMtMjc5LVxcbmFyY2gvc3BhcmMvbW0vc3JtbXUuYzoyODA6XFx0c3JtbXVfbm9jYWNoZV9wb29sID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc3JtbXVfbm9jYWNoZV9zaXplLFxcbmFyY2gvc3BhcmMvbW0vc3JtbXUuYy0yODEtXFx0XFx0XFx0XFx0XFx0ICAgIFNSTU1VX05PQ0FDSEVfQUxJR05fTUFYKTtcXG4tLVxcbmFyY2gvc3BhcmMvbW0vc3JtbXUuYy0yODQtXFx0c3JtbXVfbm9jYWNoZV9iaXRtYXAgPVxcbmFyY2gvc3BhcmMvbW0vc3JtbXUuYzoyODU6XFx0XFx0bWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoQklUU19UT19MT05HUyhiaXRtYXBfYml0cykgKiBzaXplb2YobG9uZyksXFxuYXJjaC9zcGFyYy9tbS9zcm1tdS5jLTI4Ni1cXHRcXHRcXHQgICAgICAgU01QX0NBQ0hFX0JZVEVTKTtcXG4tLVxcbmFyY2gvc3BhcmMvbW0vc3JtbXUuYz00NDM9c3RhdGljIHZvaWQgX19pbml0IHNwYXJjX2NvbnRleHRfaW5pdChpbnQgbnVtY3R4KVxcbi0tXFxuYXJjaC9zcGFyYy9tbS9zcm1tdS5jLTQ0OC1cXHRzaXplID0gbnVtY3R4ICogc2l6ZW9mKHN0cnVjdCBjdHhfbGlzdCk7XFxuYXJjaC9zcGFyYy9tbS9zcm1tdS5jOjQ0OTpcXHRjdHhfbGlzdF9wb29sID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZSwgU01QX0NBQ0hFX0JZVEVTKTtcXG5hcmNoL3NwYXJjL21tL3NybW11LmMtNDUwLVxcbi0tXFxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmM9MTY5Nz1zdGF0aWMgaW50IF9faW5pdCB2ZWN0b3Jfc2V0dXAoY2hhciAqc3RyKVxcbi0tXFxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmMtMTcwNy1cXHR9XFxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmM6MTcwODpcXHRuZXcgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YoKm5ldyksIFNNUF9DQUNIRV9CWVRFUyk7XFxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmMtMTcwOS1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bmV3LVxcdTAwM2VsaXN0KTtcXG4tLVxcbmFyY2gvdW0va2VybmVsL2xvYWRfZmlsZS5jPTMyPXZvaWQgKnVtbF9sb2FkX2ZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUsIHVuc2lnbmVkIGxvbmcgbG9uZyAqc2l6ZSlcXG4tLVxcbmFyY2gvdW0va2VybmVsL2xvYWRfZmlsZS5jLTUwLVxcbmFyY2gvdW0va2VybmVsL2xvYWRfZmlsZS5jOjUxOlxcdGFyZWEgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYygqc2l6ZSwgU01QX0NBQ0hFX0JZVEVTKTtcXG5hcmNoL3VtL2tlcm5lbC9sb2FkX2ZpbGUuYy01Mi1cXG4tLVxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYz0xMTg2PXN0YXRpYyB2b2lkIF9faW5pdCBhbGxvY19ydW50aW1lX2RhdGEoaW50IGNwdSlcXG4tLVxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy0xMTk5LVxcdFxcdC8qIEFsbG9jYXRlIHRoZSBTVlNNIENBIHBhZ2UgaWYgYW4gU1ZTTSBpcyBwcmVzZW50ICovXFxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jOjEyMDA6XFx0XFx0Y2FhID0gY3B1ID8gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZW9mKCpjYWEpLCBQQUdFX1NJWkUpXFxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jLTEyMDEtXFx0XFx0XFx0ICA6IFxcdTAwMjZib290X3N2c21fY2FfcGFnZTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYz04OTc9c3RhdGljIGludCBfX2luaXQgYWNwaV9wYXJzZV9ocGV0KHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGUpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMtOTQxLSNkZWZpbmUgSFBFVF9SRVNPVVJDRV9OQU1FX1NJWkUgOVxcbmFyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYzo5NDI6XFx0aHBldF9yZXMgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YoKmhwZXRfcmVzKSArIEhQRVRfUkVTT1VSQ0VfTkFNRV9TSVpFLFxcbmFyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYy05NDMtXFx0XFx0XFx0XFx0ICBTTVBfQ0FDSEVfQllURVMpO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jPTI1MDA9c3RhdGljIHN0cnVjdCByZXNvdXJjZSAqIF9faW5pdCBpb2FwaWNfc2V0dXBfcmVzb3VyY2VzKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMtMjUxMi1cXG5hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmM6MjUxMzpcXHRtZW0gPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhuLCBTTVBfQ0FDSEVfQllURVMpO1xcbmFyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYy0yNTE0LVxcdHJlcyA9ICh2b2lkICopbWVtO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jPTI1NDk9dm9pZCBfX2luaXQgaW9fYXBpY19pbml0X21hcHBpbmdzKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMtMjU3MS0jZW5kaWZcXG5hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmM6MjU3MjpcXHRcXHRcXHRpb2FwaWNfcGh5cyA9ICh1bnNpZ25lZCBsb25nKW1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBBR0VfU0laRSxcXG5hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMtMjU3My1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgUEFHRV9TSVpFKTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9lODIwLmM9MTExMz1fX2luaXQgdm9pZCBlODIwX19yZXNlcnZlX3Jlc291cmNlcyh2b2lkKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2U4MjAuYy0xMTE4LVxcbmFyY2gveDg2L2tlcm5lbC9lODIwLmM6MTExOTpcXHRyZXMgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YoKnJlcykgKiBlODIwX3RhYmxlLVxcdTAwM2Vucl9lbnRyaWVzLFxcbmFyY2gveDg2L2tlcm5lbC9lODIwLmMtMTEyMC1cXHRcXHRcXHQgICAgIFNNUF9DQUNIRV9CWVRFUyk7XFxuLS1cXG5hcmNoL3g4Ni9wbGF0Zm9ybS9vbHBjL29scGNfZHQuYz0xMjQ9dm9pZCAqIF9faW5pdCBwcm9tX2Vhcmx5X2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4tLVxcbmFyY2gveDg2L3BsYXRmb3JtL29scGMvb2xwY19kdC5jLTEzOC1cXHRcXHQgKi9cXG5hcmNoL3g4Ni9wbGF0Zm9ybS9vbHBjL29scGNfZHQuYzoxMzk6XFx0XFx0cmVzID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoY2h1bmtfc2l6ZSwgU01QX0NBQ0hFX0JZVEVTKTtcXG5hcmNoL3g4Ni9wbGF0Zm9ybS9vbHBjL29scGNfZHQuYy0xNDAtXFx0XFx0cHJvbV9lYXJseV9hbGxvY2F0ZWQgKz0gY2h1bmtfc2l6ZTtcXG4tLVxcbmFyY2gveDg2L3hlbi9wMm0uYz0xNzg9c3RhdGljIHZvaWQgKiBfX3JlZiBhbGxvY19wMm1fcGFnZSh2b2lkKVxcbi0tXFxuYXJjaC94ODYveGVuL3AybS5jLTE4MC1cXHRpZiAodW5saWtlbHkoIXNsYWJfaXNfYXZhaWxhYmxlKCkpKSB7XFxuYXJjaC94ODYveGVuL3AybS5jOjE4MTpcXHRcXHRyZXR1cm4gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUEFHRV9TSVpFLCBQQUdFX1NJWkUpO1xcbmFyY2gveDg2L3hlbi9wMm0uYy0xODItXFx0fVxcbi0tXFxuYXJjaC94dGVuc2EvbW0va2FzYW5faW5pdC5jPTM1PXN0YXRpYyB2b2lkIF9faW5pdCBwb3B1bGF0ZSh2b2lkICpzdGFydCwgdm9pZCAqZW5kKVxcbi0tXFxuYXJjaC94dGVuc2EvbW0va2FzYW5faW5pdC5jLTQxLVxcdHBtZF90ICpwbWQgPSBwbWRfb2ZmX2sodmFkZHIpO1xcbmFyY2gveHRlbnNhL21tL2thc2FuX2luaXQuYzo0MjpcXHRwdGVfdCAqcHRlID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMobl9wYWdlcyAqIHNpemVvZihwdGVfdCksIFBBR0VfU0laRSk7XFxuYXJjaC94dGVuc2EvbW0va2FzYW5faW5pdC5jLTQzLVxcbi0tXFxuZHJpdmVycy9jbGsvdGkvY2xrLmM9NDMzPXZvaWQgX19pbml0IG9tYXAyX2Nsa19sZWdhY3lfcHJvdmlkZXJfaW5pdChpbnQgaW5kZXgsIHZvaWQgX19pb21lbSAqbWVtKVxcbi0tXFxuZHJpdmVycy9jbGsvdGkvY2xrLmMtNDM2LVxcbmRyaXZlcnMvY2xrL3RpL2Nsay5jOjQzNzpcXHRpbyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemVvZigqaW8pLCBTTVBfQ0FDSEVfQllURVMpO1xcbmRyaXZlcnMvY2xrL3RpL2Nsay5jLTQzOC1cXG4tLVxcbmRyaXZlcnMvbWFjaW50b3NoL3NtdS5jPTQ3Mj1pbnQgX19pbml0IHNtdV9pbml0ICh2b2lkKVxcbi0tXFxuZHJpdmVycy9tYWNpbnRvc2gvc211LmMtNDk0LVxcbmRyaXZlcnMvbWFjaW50b3NoL3NtdS5jOjQ5NTpcXHRzbXUgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2Yoc3RydWN0IHNtdV9kZXZpY2UpLCBTTVBfQ0FDSEVfQllURVMpO1xcbmRyaXZlcnMvbWFjaW50b3NoL3NtdS5jLTQ5Ni1cXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2c211LVxcdTAwM2Vsb2NrKTtcXG4tLVxcbmRyaXZlcnMvb2YvZmR0LmM9MTIwMD1zdGF0aWMgdm9pZCAqIF9faW5pdCBlYXJseV9pbml0X2R0X2FsbG9jX21lbW9yeV9hcmNoKHU2NCBzaXplLCB1NjQgYWxpZ24pXFxuZHJpdmVycy9vZi9mZHQuYy0xMjAxLXtcXG5kcml2ZXJzL29mL2ZkdC5jOjEyMDI6XFx0cmV0dXJuIG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHNpemUsIGFsaWduKTtcXG5kcml2ZXJzL29mL2ZkdC5jLTEyMDMtfVxcbi0tXFxuZHJpdmVycy9vZi91bml0dGVzdC5jPTM5MDY9c3RhdGljIHZvaWQgKiBfX2luaXQgZHRfYWxsb2NfbWVtb3J5KHU2NCBzaXplLCB1NjQgYWxpZ24pXFxuZHJpdmVycy9vZi91bml0dGVzdC5jLTM5MDcte1xcbmRyaXZlcnMvb2YvdW5pdHRlc3QuYzozOTA4OlxcdHJldHVybiBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplLCBhbGlnbik7XFxuZHJpdmVycy9vZi91bml0dGVzdC5jLTM5MDktfVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oPTQyND1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKm1lbWJsb2NrX2FsbG9jKHBoeXNfYWRkcl90IHNpemUsIHBoeXNfYWRkcl90IGFsaWduKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTQyOS1cXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg6NDMwOnZvaWQgKl9fbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMocGh5c19hZGRyX3Qgc2l6ZSwgcGh5c19hZGRyX3QgYWxpZ24sXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTQzMS1cXHRcXHRcXHRcXHRjb25zdCBjaGFyICpmdW5jKTtcXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtNDMyLVxcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaDo0MzM6I2RlZmluZSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplLCBhbGlnbikgICAgXFxcXFxcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaDo0MzQ6XFx0IF9fbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZSwgYWxpZ24sIF9fZnVuY19fKVxcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC00MzUtXFxuLS1cXG5pbml0L21haW4uYz02MDQ9c3RhdGljIHZvaWQgX19pbml0IHNldHVwX2NvbW1hbmRfbGluZShjaGFyICpjb21tYW5kX2xpbmUpXFxuLS1cXG5pbml0L21haW4uYy02MTYtXFxuaW5pdC9tYWluLmM6NjE3OlxcdHNhdmVkX2NvbW1hbmRfbGluZSA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKGxlbiwgU01QX0NBQ0hFX0JZVEVTKTtcXG5pbml0L21haW4uYy02MTgtXFxuLS1cXG5pbml0L21haW4uYy02MjAtXFxuaW5pdC9tYWluLmM6NjIxOlxcdHN0YXRpY19jb21tYW5kX2xpbmUgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhsZW4sIFNNUF9DQUNIRV9CWVRFUyk7XFxuaW5pdC9tYWluLmMtNjIyLVxcbi0tXFxuaW5pdC9tYWluLmM9MTIxMT1zdGF0aWMgaW50IF9faW5pdCBpbml0Y2FsbF9ibGFja2xpc3QoY2hhciAqc3RyKVxcbi0tXFxuaW5pdC9tYWluLmMtMTIyMC1cXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiYmxhY2tsaXN0aW5nIGluaXRjYWxsICVzXFxcXG5cXFwiLCBzdHJfZW50cnkpO1xcbmluaXQvbWFpbi5jOjEyMjE6XFx0XFx0XFx0ZW50cnkgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplb2YoKmVudHJ5KSxcXG5pbml0L21haW4uYy0xMjIyLVxcdFxcdFxcdFxcdFxcdCAgICAgICBTTVBfQ0FDSEVfQllURVMpO1xcbmluaXQvbWFpbi5jOjEyMjM6XFx0XFx0XFx0ZW50cnktXFx1MDAzZWJ1ZiA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKHN0cmxlbihzdHJfZW50cnkpICsgMSxcXG5pbml0L21haW4uYy0xMjI0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBTTVBfQ0FDSEVfQllURVMpO1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxMDo1MS4yMzMxMzQ2MTRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE1OTY5MDg1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBBbGxvY2F0aW9uIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBtZW1ibG9ja19hbGxvY19vcl9wYW5pY2AgbWFjcm8gYW5kIGltbWVkaWF0ZWx5LCBteSBicmFpbidzIGFscmVhZHkgcGFyc2luZyB0aGUgaW1wbGljYXRpb25zLiBJdCdzIGRlZmluZWQgYXMgYSB3cmFwcGVyIGFyb3VuZCBgX19tZW1ibG9ja19hbGxvY19vcl9wYW5pY2AuICBUaGUgc2lnbmF0dXJlIHRlbGxzIG1lIGl0IHRha2VzIGEgc2l6ZSBhbmQgYWxpZ25tZW50LCBhbmQgY3J1Y2lhbGx5LCBwYXNzZXMgdGhlIGN1cnJlbnQgZnVuY3Rpb24ncyBuYW1lLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIGRldGFpbHMsIGFuZCBteSBleHBlcmllbmNlIHNheXMgdGhhdCBJIG5lZWQgdG8gdHJhY2UgdGhpcyBmdXJ0aGVyLiBUaGUgcmVhbCB3b3JrIGlzIHByb2JhYmx5IGRvbmUgaW4gYF9fbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBhbGxvY2F0aW9uICphY3R1YWxseSogaGFwcGVucywgYW5kIHNwZWNpZmljYWxseSwgaWYgaXQgaW5pdGlhbGl6ZXMgdGhlIG1lbW9yeS4gQmVjYXVzZSBJJ20gcHJldHR5IHN1cmUgYF9fbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWNgIGNhbGxzIGBtZW1ibG9ja19hbGxvY190cnlfbmlkYCwgYW5kIG15IGd1dCBmZWVsaW5nIGlzIHRoYXQgemVyb2VzIHRoZSBtZW1vcnkuXG5cblNvIEknbSBnb2luZyB0byBqdW1wIGludG8gYG1tL21lbWJsb2NrLmNgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgX19tZW1ibG9ja19hbGxvY19vcl9wYW5pY2AuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlIG1lbW9yeSBpcyBpbmRlZWQgemVyb2VkIGR1cmluZyBhbGxvY2F0aW9uIGFzIEkgc3VzcGVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyOTEsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTA6NTYuMzkyODI4MTA4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQyODAxODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1ibG9jay5oPTQyND1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKm1lbWJsb2NrX2FsbG9jKHBoeXNfYWRkcl90IHNpemUsIHBoeXNfYWRkcl90IGFsaWduKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTQyOS1cXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg6NDMwOnZvaWQgKl9fbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMocGh5c19hZGRyX3Qgc2l6ZSwgcGh5c19hZGRyX3QgYWxpZ24sXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTQzMS1cXHRcXHRcXHRcXHRjb25zdCBjaGFyICpmdW5jKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC00MzMtI2RlZmluZSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhzaXplLCBhbGlnbikgICAgXFxcXFxcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaDo0MzQ6XFx0IF9fbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoc2l6ZSwgYWxpZ24sIF9fZnVuY19fKVxcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC00MzUtXFxuLS1cXG5tbS9tZW1ibG9jay5jPTE3Nzc9dm9pZCAqIF9faW5pdCBtZW1ibG9ja19hbGxvY190cnlfbmlkKFxcbi0tXFxubW0vbWVtYmxvY2suYy0xNzk1LS8qKlxcbm1tL21lbWJsb2NrLmM6MTc5NjogKiBfX21lbWJsb2NrX2FsbG9jX29yX3BhbmljIC0gVHJ5IHRvIGFsbG9jYXRlIG1lbW9yeSBhbmQgcGFuaWMgb24gZmFpbHVyZVxcbm1tL21lbWJsb2NrLmMtMTc5Ny0gKiBAc2l6ZTogc2l6ZSBvZiBtZW1vcnkgYmxvY2sgdG8gYmUgYWxsb2NhdGVkIGluIGJ5dGVzXFxuLS1cXG5tbS9tZW1ibG9jay5jLTE4MDQtICovXFxubW0vbWVtYmxvY2suYzoxODA1OnZvaWQgKl9faW5pdCBfX21lbWJsb2NrX2FsbG9jX29yX3BhbmljKHBoeXNfYWRkcl90IHNpemUsIHBoeXNfYWRkcl90IGFsaWduLFxcbm1tL21lbWJsb2NrLmMtMTgwNi1cXHRcXHRcXHRcXHQgICAgICAgY29uc3QgY2hhciAqZnVuYylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTA6NTguMTM1NjM1ODEzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzQ4NzEwMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBtbS9tZW1ibG9jay5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgbGluZXMgMTgwNSB0aHJvdWdoIDE4MTUuIEknbSBmb2N1c2luZyBvbiB0aGF0IHNlY3Rpb24gZm9yIGEgcmVhc29uLCBhbmQgYmFzZWQgb24gdGhlIGNvbnRleHQsIGl0J3MgbGlrZWx5IGRlYWxpbmcgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBvciBtYW5hZ2VtZW50IGF0IGEgZm91bmRhdGlvbmFsIGxldmVsIOKAkyBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBlYXJseSBib290IHByb2Nlc3Mgb3IgaGFuZGxpbmcgb2YgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZSBrZXJuZWwgaXMgaW5pdGlhbGl6aW5nIG9yIG1hbmlwdWxhdGluZyB0aGUgbWVtYmxvY2sgZGF0YSBzdHJ1Y3R1cmVzIGluIHRoYXQgcGFydGljdWxhciBjb2RlIHNlZ21lbnQuIEkgZXhwZWN0IHRvIGJlIGxvb2tpbmcgZm9yIGRldGFpbHMgb24gaG93IHRoZSBzeXN0ZW0gZGV0ZXJtaW5lcyBvciBtb2RpZmllcyB0aGUgcGh5c2ljYWwgbWVtb3J5IG1hcC4gSXMgaXQgYWRkaW5nLCByZW1vdmluZywgb3IgYWRqdXN0aW5nIG1lbW9yeSByZWdpb25zPyBXaGF0IHNwZWNpZmljIHBhcmFtZXRlcnMgYXJlIGJlaW5nIHVzZWQ/IEknbGwgcHJvYmFibHkgYmUgbG9va2luZyBmb3IgY2FsbHMgdG8gZnVuY3Rpb25zIGxpa2UgYG1lbWJsb2NrX2FkZCgpYCwgYG1lbWJsb2NrX3JlbW92ZSgpYCwgb3IgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCBhZmZlY3QgdGhlIG1lbWJsb2NrIGxpc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmbG93IGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhlIGNvZGUncyBleGVjdXRpb24uIFVsdGltYXRlbHksIG15IGdvYWwgaXMgdG8gZ3Jhc3AgdGhlIGludHJpY2FjaWVzIG9mIHRoaXMgcGFydGljdWxhciBzZWN0aW9uIGFuZCBob3cgaXQgY29udHJpYnV0ZXMgdG8gdGhlIGJyb2FkZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDUxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTE6MDIuMDEwNTEwMDU1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1ibG9jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MDUsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4MDU6XFx0dm9pZCAqX19pbml0IF9fbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMocGh5c19hZGRyX3Qgc2l6ZSwgcGh5c19hZGRyX3QgYWxpZ24sXFxuMTgwNjpcXHRcXHRcXHRcXHRcXHQgICAgICAgY29uc3QgY2hhciAqZnVuYylcXG4xODA3OlxcdHtcXG4xODA4OlxcdFxcdHZvaWQgKmFkZHIgPSBtZW1ibG9ja19hbGxvYyhzaXplLCBhbGlnbik7XFxuMTgwOTpcXHRcXG4xODEwOlxcdFxcdGlmICh1bmxpa2VseSghYWRkcikpXFxuMTgxMTpcXHRcXHRcXHRwYW5pYyhcXFwiJXM6IEZhaWxlZCB0byBhbGxvY2F0ZSAlcGFwIGJ5dGVzXFxcXG5cXFwiLCBmdW5jLCBcXHUwMDI2c2l6ZSk7XFxuMTgxMjpcXHRcXHRyZXR1cm4gYWRkcjtcXG4xODEzOlxcdH1cXG4xODE0OlxcdFxcbjE4MTU6XFx0LypcXG4xODE2OlxcdCAqIFJlbWFpbmluZyBBUEkgZnVuY3Rpb25zXFxuMTgxNzpcXHQgKi9cXG4xODE4OlxcdFxcbjE4MTk6XFx0cGh5c19hZGRyX3QgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX3BoeXNfbWVtX3NpemUodm9pZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTE6MDIuMDEwNjY0Mjk1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMDIyOTgxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVkdW5kYW50IEluaXRpYWxpemF0aW9uIENsZWFudXAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIGZsYWdnZWQgYXMgYSBjbGVhbnVwLCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIExldCdzIHNlZS4uLiBgbWVtYmxvY2tfYWxsb2NgIGlzIHJlc3BvbnNpYmxlIGZvciB6ZXJvaW5nIHRoZSBtZW1vcnkuIEFoLCBhbmQgYGFsbG9jX25vZGVfZGF0YWAgc3BlY2lmaWNhbGx5IHVzZXMgYG1lbWJsb2NrX3BoeXNfYWxsb2NfdHJ5X25pZGAsIHdoaWNoIGFsc28gZ2V0cyB6ZXJvZWQuIFBsdXMsIGBtZW1zZXRgIGlzIHVzZWQgb24gYE5PREVfREFUQShuaWQpYCB0byBpbml0aWFsaXplIGBwZ19kYXRhX3RgIHRvIHplcm8uIFJpZ2h0LCBzbyB0aGF0IG1lYW5zIGBwZ2RhdGAgaXMgYWx3YXlzIGluaXRpYWxpemVkIHRvIGFsbCB6ZXJvcy5cblxuVGhlcmVmb3JlLCB0aGUgYXNzaWdubWVudCBgcGdkYXQtXHUwMDNlbm9kZV9wYWdlX2V4dCA9IE5VTEw7YCBpbnNpZGUgYHBnZGF0X3BhZ2VfZXh0X2luaXRgIGlzIGNvbXBsZXRlbHkgcmVkdW5kYW50LiBJdCdzIGFscmVhZHkgemVybyBmcm9tIHRoZSBzdGFydC4gVGhpcyBwYXRjaCBpcyBqdXN0IHJlbW92aW5nIHRoYXQgcmVkdW5kYW50IGluaXRpYWxpemF0aW9uIGFuZCB0aGUgZW1wdHkgZnVuY3Rpb24gc3R1YiDigJMgcHVyZWx5IGRlY29yYXRpdmUuIEl0J3MgYSBjbGVhbnVwLCBub3QgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYXMgZmFyIGFzIEkgY2FuIHNlZS5cblxuSGFuZyBvbiBhIHNlY29uZOKApiBJIHNob3VsZCBkb3VibGUgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBjYWxscyB0byBgcGdkYXRfcGFnZV9leHRfaW5pdGAuIExldCdzIGdyZXAgdGhlIHdob2xlIHRyZWUgdG8gYmUgY29tcGxldGVseSBzdXJlLiBXZSBkb24ndCB3YW50IHRvIG1pc3MgYW55IGVkZ2UgY2FzZXMsIHlvdSBrbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzU2MywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjExOjA3LjMxMjk2NTE5N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyMDcxMzgwNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGdkYXRfcGFnZV9leHRfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTE6MDkuMDMzNjg3NzgyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5NzYxODMzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogcGdkYXRfcGFnZV9leHRfaW5pdCBSZW1vdmFsKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBsb29rcyBzdHJhaWdodGZvcndhcmQuIFRoZSBkaWZmIGNsZWFybHkgc2hvd3MgdGhhdCB0aGUgZnVuY3Rpb24gYHBnZGF0X3BhZ2VfZXh0X2luaXRgIGlzIGJlaW5nIGNvbXBsZXRlbHkgcmVtb3ZlZCBhY3Jvc3MgdGhlIHJlbGV2YW50IGZpbGVzLiBMZXQncyBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIGltcGFjdC4gSSBzZWUgaXQncyBnb25lIGZyb20gYGluY2x1ZGUvbGludXgvcGFnZV9leHQuaGAsIGBtbS9tbV9pbml0LmNgIGFuZCBgbW0vcGFnZV9leHQuY2BcblxuTG9va2luZyBhdCB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSByZW1vdmVkIGRlZmluaXRpb24gaW4gYG1tL3BhZ2VfZXh0LmNgLCB0aGUgZnVuY3Rpb24gaXRzZWxmIHdhcyBleHRyZW1lbHkgc2ltcGxlOiBgcGdkYXQtXHUwMDNlbm9kZV9wYWdlX2V4dCA9IE5VTEw7YC4gQW5kLCBzaW5jZSBgcGdkYXRgIGlzIGFsd2F5cyB6ZXJvLWluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiwgdGhlIGZ1bmN0aW9uIGl0c2VsZiB3YXMgZG9pbmcgbm90aGluZyBvZiBzdWJzdGFuY2UuXG5cblNvLCBlc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBhIGNsZWFuLXVwLiBUaGUgZXhwbGljaXQgc2V0dGluZyBvZiBgbm9kZV9wYWdlX2V4dGAgdG8gYE5VTExgIHdhcyByZWR1bmRhbnQgYmVjYXVzZSB0aGUgbWVtb3J5IHdhcyBhbHJlYWR5IGluaXRpYWxpemVkIHRvIHplcm8uIFRoZSByZW1vdmFsIGlzIGxpa2VseSBpbnRlbmRlZCB0byByZWR1Y2UgY29kZSBjbHV0dGVyIGFuZCBpbXByb3ZlIG92ZXJhbGwgbWFpbnRhaW5hYmlsaXR5LCBhcyB3ZWxsIGFzIHRvIGVsaW1pbmF0ZSBhIHNtYWxsIGFtb3VudCBvZiByZWR1bmRhbnQgZXhlY3V0aW9uLiBObyBmdW5jdGlvbmFsaXR5IGlzIGFmZmVjdGVkIGJ5IHRoZSBjaGFuZ2UuIFdvcnRoRnV6emluZz1mYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwMjcsIk91dHB1dFRva2VucyI6MTI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjExOjE5LjAwOTg3NDY3NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBwZ2RhdF9wYWdlX2V4dF9pbml0YCBmdW5jdGlvbiwgd2hpY2ggd2FzIGVpdGhlciBhbiBlbXB0eSBzdHViIG9yIHNpbXBseSBzZXQgYHBnZGF0LVxcdTAwM2Vub2RlX3BhZ2VfZXh0ID0gTlVMTGAuIFNpbmNlIGBwZ2RhdGAgc3RydWN0dXJlcyBhcmUgYWx3YXlzIHplcm8taW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uICh2aWEgYG1lbXNldGAgaW4gYGFsbG9jX25vZGVfZGF0YWAgb3IgYnkgdXNpbmcgYG1lbWJsb2NrX2FsbG9jYCksIHRoaXMgaW5pdGlhbGl6YXRpb24gd2FzIGNvbXBsZXRlbHkgcmVkdW5kYW50LiBSZW1vdmluZyBpdCBpcyBhIHB1cmVseSBkZWNvcmF0aXZlIGNsZWFudXAgdGhhdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYHBnZGF0X3BhZ2VfZXh0X2luaXRgIGZ1bmN0aW9uLCB3aGljaCB3YXMgZWl0aGVyIGFuIGVtcHR5IHN0dWIgb3Igc2ltcGx5IHNldCBgcGdkYXQtXFx1MDAzZW5vZGVfcGFnZV9leHQgPSBOVUxMYC4gU2luY2UgYHBnZGF0YCBzdHJ1Y3R1cmVzIGFyZSBhbHdheXMgemVyby1pbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gKHZpYSBgbWVtc2V0YCBpbiBgYWxsb2Nfbm9kZV9kYXRhYCBvciBieSB1c2luZyBgbWVtYmxvY2tfYWxsb2NgKSwgdGhpcyBpbml0aWFsaXphdGlvbiB3YXMgY29tcGxldGVseSByZWR1bmRhbnQuIFJlbW92aW5nIGl0IGlzIGEgcHVyZWx5IGRlY29yYXRpdmUgY2xlYW51cCB0aGF0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpz8sf[1] Phase: Running StartedAt: 2026-08-03 18:11:31 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpz8sf[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-03 18:11:31 +0000 UTC FinishedAt: 2026-08-03 18:11:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}