Name: series-workflowg8hms Phase: Failed StartedAt: 2026-07-06 19:20:35 +0000 UTC FinishedAt: 2026-07-06 19:52:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg8hms[0] Phase: Succeeded StartedAt: 2026-07-06 19:20:35 +0000 UTC FinishedAt: 2026-07-06 19:52:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg8hms[0].run-triage Phase: Succeeded StartedAt: 2026-07-06 19:20:35 +0000 UTC FinishedAt: 2026-07-06 19:52:16 +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+CgkJCTx0ZD4yMDI2LzA3LzA2IDE5OjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGFuZCBjYWxscyBpdCBmcm9tIGB0aHBfc2hyaW5rZXJfaW5pdGAsIHdoaWNoIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLiBUaGlzIGNvZGUgaXMgZXhlY3V0ZWQgZXhhY3RseSBvbmNlIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdCB0byBhcHBseSBtZW1vcnkgcHJvdGVjdGlvbnMgdG8gdGhlIGh1Z2UgemVybyBmb2xpby4gU2luY2UgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgY2Fubm90IGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSBvciBleGVjdXRlZCBkdXJpbmcgdGhlIHBvc3QtYm9vdCBmdXp6aW5nIHBoYXNlLCB0aGlzIHBhdGNoIGNhbm5vdCBiZSBhY3RpdmVseSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE5OjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOGQ4M2IzMmY0ZmU0YWNjZGRkYzZiMjNhNDYyYmZmY2FlN2Q4NmJjYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMTk6NDg6NDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxuaW5kZXggOTBmNjFiMTcyNzVlMWIuLjcwODMyNjAzMDNjM2NkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oXG5AQCAtMTQsNiAmIzQzOzE0LDggQEAgaW50IHNldF9tZW1vcnlfdmFsaWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGludCBlbmFibGUpO1xuIGludCBzZXRfZGlyZWN0X21hcF9pbnZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UpO1xuIGludCBzZXRfZGlyZWN0X21hcF9kZWZhdWx0X25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UpO1xuIGludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBuciwgYm9vbCB2YWxpZCk7XG4mIzQzO2ludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuJiM0MzsjZGVmaW5lIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2ggc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaFxuIGJvb2wga2VybmVsX3BhZ2VfcHJlc2VudChzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gXG4gaW50IHNldF9tZW1vcnlfZW5jcnlwdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMgYi9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmNcbmluZGV4IGJiZTk4YWM5YWQ4YzY3Li4xYTY3NjkwNzM1NThkMyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jXG5AQCAtMzY1LDYgJiM0MzszNjUsMTYgQEAgaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKVxuIFx0cmV0dXJuIHNldF9tZW1vcnlfdmFsaWQoYWRkciwgbnIsIHZhbGlkKTtcbiB9XG4gXG4mIzQzO2ludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWNhbl9zZXRfZGlyZWN0X21hcCgpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB1cGRhdGVfcmFuZ2VfcHJvdCgodW5zaWduZWQgbG9uZylhZGRyLCBQQUdFX1NJWkUgKiBucl9wYWdlcyxcbiYjNDM7XHRcdFx0XHQgX19wZ3Byb3QoUFRFX1JET05MWSksXG4mIzQzO1x0XHRcdFx0IF9fcGdwcm90KFBURV9XUklURSkpO1xuJiM0Mzt9XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DXG4gLypcbiAgKiBUaGlzIGlzIC0gYXBhcnQgZnJvbSB0aGUgcmV0dXJuIHZhbHVlIC0gZG9pbmcgdGhlIHNhbWVcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcbmluZGV4IDQzNjJjMjZhYTk5MmRiLi5iZDM4MTdlMDYwNTJjMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oXG5AQCAtODksNiAmIzQzOzg5LDggQEAgaW50IHNldF9wYWdlc19ydyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzKTtcbiBpbnQgc2V0X2RpcmVjdF9tYXBfaW52YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlKTtcbiBpbnQgc2V0X2RpcmVjdF9tYXBfZGVmYXVsdF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlKTtcbiBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpO1xuJiM0MztpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiYjNDM7I2RlZmluZSBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hcbiBib29sIGtlcm5lbF9wYWdlX3ByZXNlbnQoc3RydWN0IHBhZ2UgKnBhZ2UpO1xuIFxuIGV4dGVybiBpbnQga2VybmVsX3NldF90b19yZWFkb25seTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuaW5kZXggZDAyM2E0MGExZTAzNDUuLjU5ODdmNGM4NGY2ZmU5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuQEAgLTI2NjIsNiAmIzQzOzI2NjIsMjEgQEAgaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKVxuIFx0cmV0dXJuIF9fc2V0X3BhZ2VzX25wKHBhZ2UsIG5yKTtcbiB9XG4gXG4mIzQzO2ludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRlbXBhZGRyID0gKHVuc2lnbmVkIGxvbmcpYWRkcjtcbiYjNDM7XHRzdHJ1Y3QgY3BhX2RhdGEgY3BhID0ge1xuJiM0MztcdFx0LnZhZGRyID0gXHUwMDI2dGVtcGFkZHIsXG4mIzQzO1x0XHQucGdkID0gTlVMTCxcbiYjNDM7XHRcdC5udW1wYWdlcyA9IG5yX3BhZ2VzLFxuJiM0MztcdFx0Lm1hc2tfc2V0ID0gX19wZ3Byb3QoMCksXG4mIzQzO1x0XHQubWFza19jbHIgPSBfX3BncHJvdChfUEFHRV9SVyB8IF9QQUdFX0RJUlRZKSxcbiYjNDM7XHRcdC5mbGFncyA9IENQQV9OT19DSEVDS19BTElBUyxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbiYjNDM7fVxuJiM0MztcbiAjaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQ1xuIHZvaWQgX19rZXJuZWxfbWFwX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMsIGludCBlbmFibGUpXG4ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oIGIvaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmhcbmluZGV4IDMwMzBkOTI0NWY1YWM4Li5hOTA1MDc0ZmIyMWRlMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaFxuQEAgLTQwLDYgJiM0Mzs0MCwyMiBAQCBzdGF0aWMgaW5saW5lIGludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCAtIG1ha2UgZGlyZWN0LW1hcCBtYXBwaW5ncyByZWFkLW9ubHlcbiYjNDM7ICogQGFkZHI6IHN0YXJ0IGFkZHJlc3MgaW4gdGhlIGRpcmVjdCBtYXBcbiYjNDM7ICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgcGFnZXMgc3RhcnRpbmcgYXQgQGFkZHJcbiYjNDM7ICpcbiYjNDM7ICogTWFrZSB0aGUgZGlyZWN0LW1hcCBtYXBwaW5ncyBmb3IgQG5yX3BhZ2VzIHBhZ2VzIHN0YXJ0aW5nIGF0IEBhZGRyXG4mIzQzOyAqIHJlYWQtb25seSwgd2l0aG91dCBmbHVzaGluZyBUTEJzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciB3aGVuIHVuc3VwcG9ydGVkLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsXG4mIzQzO1x0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbiBcdHJldHVybiB0cnVlO1xuQEAgLTU2LDYgJiM0Mzs3MiwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3NldF9kaXJlY3RfbWFwKHZvaWQpXG4gfVxuICNkZWZpbmUgY2FuX3NldF9kaXJlY3RfbWFwIGNhbl9zZXRfZGlyZWN0X21hcFxuICNlbmRpZlxuJiM0MztcbiYjNDM7I2lmbmRlZiBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkcixcbiYjNDM7XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNkZWZpbmUgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXG4mIzQzOyNlbmRpZlxuICNlbmRpZiAvKiBDT05GSUdfQVJDSF9IQVNfU0VUX0RJUkVDVF9NQVAgKi9cbiBcbiAjaWZkZWYgQ09ORklHX1g4Nl82NFxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCBjMDg5MmNjNTMzYTlmYy4uM2VmNTZjYWRhMTA4ZDUgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtNDEsNiAmIzQzOzQxLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZ2FsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZ2FsbG9jX3RhZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZXdhbGsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdGxiLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG5AQCAtOTgxLDggJiM0Mzs5ODIsMTQgQEAgc3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcbiBcdFx0ICogdGhhdCBnZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBtb3N0IGxpa2VseSBub3QgZmFpbCBhc1xuIFx0XHQgKiB0aHBfc2hyaW5rZXJfaW5pdCgpIGlzIGludm9rZWQgZWFybHkgb24gZHVyaW5nIGJvb3QuXG4gXHRcdCAqL1xuLVx0XHRpZiAoIWdldF9odWdlX3plcm9fZm9saW8oKSlcbiYjNDM7XHRcdGlmICghZ2V0X2h1Z2VfemVyb19mb2xpbygpKSB7XG4gXHRcdFx0cHJfd2FybihcJiMzNDtBbGxvY2F0aW5nIHBlcnNpc3RlbnQgaHVnZSB6ZXJvIGZvbGlvIGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIFNldCB1cCBkdXJpbmcgZWFybHkgYm9vdDsgbm8gZXhwbGljaXQgVExCIGZsdXNoIGlzIG5lZWRlZCBoZXJlLiAqL1xuJiM0MztcdFx0c2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChmb2xpb19hZGRyZXNzKGh1Z2VfemVyb19mb2xpbyksXG4mIzQzO1x0XHRcdFx0XHQgIEhQQUdFX1BNRF9OUik7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE5OjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGFuZCBjYWxscyBpdCBmcm9tIGB0aHBfc2hyaW5rZXJfaW5pdGAsIHdoaWNoIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLiBUaGlzIGNvZGUgaXMgZXhlY3V0ZWQgZXhhY3RseSBvbmNlIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdCB0byBhcHBseSBtZW1vcnkgcHJvdGVjdGlvbnMgdG8gdGhlIGh1Z2UgemVybyBmb2xpby4gU2luY2UgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgY2Fubm90IGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSBvciBleGVjdXRlZCBkdXJpbmcgdGhlIHBvc3QtYm9vdCBmdXp6aW5nIHBoYXNlLCB0aGlzIHBhdGNoIGNhbm5vdCBiZSBhY3RpdmVseSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ZDgzYjMyZjRmZTRhY2NkZGRjNmIyM2E0NjJiZmZjYWU3ZDg2YmNiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgNiAxOTo0ODo0MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgKaW5kZXggOTBmNjFiMTcyNzVlMWIuLjcwODMyNjAzMDNjM2NkIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaApAQCAtMTQsNiAmIzQzOzE0LDggQEAgaW50IHNldF9tZW1vcnlfdmFsaWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGludCBlbmFibGUpOwogaW50IHNldF9kaXJlY3RfbWFwX2ludmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSk7CiBpbnQgc2V0X2RpcmVjdF9tYXBfZGVmYXVsdF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlKTsKIGludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBuciwgYm9vbCB2YWxpZCk7CiYjNDM7aW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7CiYjNDM7I2RlZmluZSBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2gKIGJvb2wga2VybmVsX3BhZ2VfcHJlc2VudChzdHJ1Y3QgcGFnZSAqcGFnZSk7CiAKIGludCBzZXRfbWVtb3J5X2VuY3J5cHRlZCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMgYi9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMKaW5kZXggYmJlOThhYzlhZDhjNjcuLjFhNjc2OTA3MzU1OGQzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jCkBAIC0zNjUsNiAmIzQzOzM2NSwxNiBAQCBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpCiAJcmV0dXJuIHNldF9tZW1vcnlfdmFsaWQoYWRkciwgbnIsIHZhbGlkKTsKIH0KIAomIzQzO2ludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiYjNDM7ewomIzQzOwlpZiAoIWNhbl9zZXRfZGlyZWN0X21hcCgpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB1cGRhdGVfcmFuZ2VfcHJvdCgodW5zaWduZWQgbG9uZylhZGRyLCBQQUdFX1NJWkUgKiBucl9wYWdlcywKJiM0MzsJCQkJIF9fcGdwcm90KFBURV9SRE9OTFkpLAomIzQzOwkJCQkgX19wZ3Byb3QoUFRFX1dSSVRFKSk7CiYjNDM7fQomIzQzOwogI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKIC8qCiAgKiBUaGlzIGlzIC0gYXBhcnQgZnJvbSB0aGUgcmV0dXJuIHZhbHVlIC0gZG9pbmcgdGhlIHNhbWUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaAppbmRleCA0MzYyYzI2YWE5OTJkYi4uYmQzODE3ZTA2MDUyYzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgKQEAgLTg5LDYgJiM0Mzs4OSw4IEBAIGludCBzZXRfcGFnZXNfcncoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcyk7CiBpbnQgc2V0X2RpcmVjdF9tYXBfaW52YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlKTsKIGludCBzZXRfZGlyZWN0X21hcF9kZWZhdWx0X25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UpOwogaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKTsKJiM0MztpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKJiM0MzsjZGVmaW5lIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2ggc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaAogYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKTsKIAogZXh0ZXJuIGludCBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMKaW5kZXggZDAyM2E0MGExZTAzNDUuLjU5ODdmNGM4NGY2ZmU5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMKQEAgLTI2NjIsNiAmIzQzOzI2NjIsMjEgQEAgaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKQogCXJldHVybiBfX3NldF9wYWdlc19ucChwYWdlLCBucik7CiB9CiAKJiM0MztpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyB0ZW1wYWRkciA9ICh1bnNpZ25lZCBsb25nKWFkZHI7CiYjNDM7CXN0cnVjdCBjcGFfZGF0YSBjcGEgPSB7CiYjNDM7CQkudmFkZHIgPSAmYW1wO3RlbXBhZGRyLAomIzQzOwkJLnBnZCA9IE5VTEwsCiYjNDM7CQkubnVtcGFnZXMgPSBucl9wYWdlcywKJiM0MzsJCS5tYXNrX3NldCA9IF9fcGdwcm90KDApLAomIzQzOwkJLm1hc2tfY2xyID0gX19wZ3Byb3QoX1BBR0VfUlcgfCBfUEFHRV9ESVJUWSksCiYjNDM7CQkuZmxhZ3MgPSBDUEFfTk9fQ0hFQ0tfQUxJQVMsCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscigmYW1wO2NwYSwgMSk7CiYjNDM7fQomIzQzOwogI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKIHZvaWQgX19rZXJuZWxfbWFwX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMsIGludCBlbmFibGUpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaCBiL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oCmluZGV4IDMwMzBkOTI0NWY1YWM4Li5hOTA1MDc0ZmIyMWRlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgKQEAgLTQwLDYgJiM0Mzs0MCwyMiBAQCBzdGF0aWMgaW5saW5lIGludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLAogCXJldHVybiAwOwogfQogCiYjNDM7LyoqCiYjNDM7ICogc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCAtIG1ha2UgZGlyZWN0LW1hcCBtYXBwaW5ncyByZWFkLW9ubHkKJiM0MzsgKiBAYWRkcjogc3RhcnQgYWRkcmVzcyBpbiB0aGUgZGlyZWN0IG1hcAomIzQzOyAqIEBucl9wYWdlczogbnVtYmVyIG9mIHBhZ2VzIHN0YXJ0aW5nIGF0IEBhZGRyCiYjNDM7ICoKJiM0MzsgKiBNYWtlIHRoZSBkaXJlY3QtbWFwIG1hcHBpbmdzIGZvciBAbnJfcGFnZXMgcGFnZXMgc3RhcnRpbmcgYXQgQGFkZHIKJiM0MzsgKiByZWFkLW9ubHksIHdpdGhvdXQgZmx1c2hpbmcgVExCcy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIHdoZW4gdW5zdXBwb3J0ZWQsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsCiYjNDM7CQkJCQkgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKQogewogCXJldHVybiB0cnVlOwpAQCAtNTYsNiAmIzQzOzcyLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fc2V0X2RpcmVjdF9tYXAodm9pZCkKIH0KICNkZWZpbmUgY2FuX3NldF9kaXJlY3RfbWFwIGNhbl9zZXRfZGlyZWN0X21hcAogI2VuZGlmCiYjNDM7CiYjNDM7I2lmbmRlZiBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLAomIzQzOwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2gKJiM0MzsjZW5kaWYKICNlbmRpZiAvKiBDT05GSUdfQVJDSF9IQVNfU0VUX0RJUkVDVF9NQVAgKi8KIAogI2lmZGVmIENPTkZJR19YODZfNjQKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IGMwODkyY2M1MzNhOWZjLi4zZWY1NmNhZGExMDhkNSAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC00MSw2ICYjNDM7NDEsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BnYWxsb2MuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wZ2FsbG9jX3RhZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2V3YWxrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NldF9tZW1vcnkuaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS90bGIuaCZndDsKICNpbmNsdWRlICYjMzQ7aW50ZXJuYWwuaCYjMzQ7CkBAIC05ODEsOCAmIzQzOzk4MiwxNCBAQCBzdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKQogCQkgKiB0aGF0IGdldF9odWdlX3plcm9fZm9saW8oKSB3aWxsIG1vc3QgbGlrZWx5IG5vdCBmYWlsIGFzCiAJCSAqIHRocF9zaHJpbmtlcl9pbml0KCkgaXMgaW52b2tlZCBlYXJseSBvbiBkdXJpbmcgYm9vdC4KIAkJICovCi0JCWlmICghZ2V0X2h1Z2VfemVyb19mb2xpbygpKQomIzQzOwkJaWYgKCFnZXRfaHVnZV96ZXJvX2ZvbGlvKCkpIHsKIAkJCXByX3dhcm4oJiMzNDtBbGxvY2F0aW5nIHBlcnNpc3RlbnQgaHVnZSB6ZXJvIGZvbGlvIGZhaWxlZFxuJiMzNDspOwomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogU2V0IHVwIGR1cmluZyBlYXJseSBib290OyBubyBleHBsaWNpdCBUTEIgZmx1c2ggaXMgbmVlZGVkIGhlcmUuICovCiYjNDM7CQlzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGZvbGlvX2FkZHJlc3MoaHVnZV96ZXJvX2ZvbGlvKSwKJiM0MzsJCQkJCSAgSFBBR0VfUE1EX05SKTsKIAkJcmV0dXJuIDA7CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE5OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NjAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBQYXRjaCBmb3IgUmVhZC1Pbmx5IEh1Z2UgWmVybyBGb2xpbyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgaW50cm9kdWNpbmcgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGFjcm9zcyBhIGZldyBhcmNoaXRlY3R1cmVzLCBzcGVjaWZpY2FsbHkgQVJNNjQgYW5kIHg4Niwgd2l0aCBzdXBwb3J0aW5nIGhlYWRlcnMgaW4gdGhlIGBpbmNsdWRlYCBkaXJlY3RvcnkuIEl0JiMzOTtzIGFsc28gdG91Y2hpbmcgYG1tL2h1Z2VfbWVtb3J5LmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7V2hhdCYjMzk7cyB0aGlzIG5ldyBmdW5jdGlvbiBkb2luZz8mIzM0OwoKUmlnaHQsIGl0IGxvb2tzIGxpa2UgdGhpcyBuZXcgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCB3aXRoaW4gYHRocF9zaHJpbmtlcl9pbml0KClgLCBhbmQgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIHdpdGggdGhlIGFkZHJlc3Mgb2YgdGhlIGBodWdlX3plcm9fZm9saW9gIGFuZCBgSFBBR0VfUE1EX05SYC4gQWgsIGFuZCB0aGVyZSBpdCBpczogaXQmIzM5O3MgbWFraW5nIHRoZSBodWdlIHplcm8gZm9saW8gcmVhZC1vbmx5IGluIHRoZSBkaXJlY3QgbWFwLiBOb3csICp0aGF0JiMzOTtzKiBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCBhbnkgYm9vdC10aW1lIGNoYW5nZXMuCgpIYW5nIG9uLi4uIGB0aHBfc2hyaW5rZXJfaW5pdCgpYCBpcyBhbiBgX19pbml0YCBmdW5jdGlvbi4gVGhhdCBtZWFucyBpdCYjMzk7cyBydW5uaW5nIGR1cmluZyBib290LiBPa2F5LCBzbyB0aGlzIHJlYWQtb25seSBjaGFuZ2UgaXMgaGFwcGVuaW5nIG9uY2UsIHZlcnkgZWFybHkgb24uIFRoZXJlIHNob3VsZG4mIzM5O3QgYmUgYW55IHVzZXJzcGFjZSBpbnRlcmFjdGlvbiBkaXJlY3RseSB0cmlnZ2VyaW5nIHRoaXMsIHdoaWNoIG1ha2VzIHRoaXMgY2hhbmdlIGEgbGl0dGxlIGxlc3MgaW1tZWRpYXRlbHkgY29uY2VybmluZywgYnV0IEkgc3RpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuIFRoZSBjb21tZW50IG9uIHRoZSBmb2xpbyBhZGRyZXNzIGRvZXMgbWVudGlvbiBzb21ldGhpbmcgYWJvdXQgZmFpbHVyZSwgc28gbWF5YmUgaXQmIzM5O3Mgbm90IGFsd2F5cyBkdXJpbmcgYm9vdC4KCk5vdywgd2h5IG1ha2UgdGhlIGh1Z2UgemVybyBmb2xpbyByZWFkLW9ubHk/IElzIHRoZXJlIGEgc2VjdXJpdHkgY29uY2Vybj8gUGVyZm9ybWFuY2U/IE15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlIHdoYXQgaXMgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZT8gQXJlIHRoZXJlIGZvbGxvdyB1cCBjb21taXRzPyBJcyB0aGlzIGEgY29tcGxldGUgc29sdXRpb24/CgpPa2F5LCBsZXQgbWUgY2hlY2sgd2hlcmUgYHRocF9zaHJpbmtlcl9pbml0YCBpcyBjYWxsZWQuIEl0JiMzOTtzIGFuIGBpbml0Y2FsbGAsIHNvIGxldCYjMzk7cyBsb29rIGF0IGBtbS9odWdlX21lbW9yeS5jYCBhZ2Fpbi4gSSBuZWVkIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBicm9hZGVyIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRoYXQgY2FsbHMgdGhpcyBmdW5jdGlvbiB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYW5kIHBvdGVudGlhbCByaXNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aHBfc2hyaW5rZXJfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz05NTA9aW50IGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZV9tZW1vcnkuYy05NTYtXG5tbS9odWdlX21lbW9yeS5jOjk1NzpzdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxubW0vaHVnZV9tZW1vcnkuYy05NTgte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtOTgyLVx0XHQgKiB0aGF0IGdldF9odWdlX3plcm9fZm9saW8oKSB3aWxsIG1vc3QgbGlrZWx5IG5vdCBmYWlsIGFzXG5tbS9odWdlX21lbW9yeS5jOjk4MzpcdFx0ICogdGhwX3Nocmlua2VyX2luaXQoKSBpcyBpbnZva2VkIGVhcmx5IG9uIGR1cmluZyBib290LlxubW0vaHVnZV9tZW1vcnkuYy05ODQtXHRcdCAqL1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTAxNz1zdGF0aWMgaW50IF9faW5pdCBodWdlcGFnZV9pbml0KHZvaWQpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMDM5LVxubW0vaHVnZV9tZW1vcnkuYzoxMDQwOlx0ZXJyID0gdGhwX3Nocmlua2VyX2luaXQoKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTA0MS1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY3MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipBbmFseXppbmcgdGhlIEh1Z2UgUGFnZSBJbml0aWFsaXphdGlvbiBTZXF1ZW5jZSoqCgpSaWdodCwgc28gYHRocF9zaHJpbmtlcl9pbml0YCBpcyBpbnZva2VkIGR1cmluZyBzeXN0ZW0gaW5pdGlhbGl6YXRpb24sIHNwZWNpZmljYWxseSBieSBgaHVnZXBhZ2VfaW5pdGAuIEFuZCBgaHVnZXBhZ2VfaW5pdGAgaXRzZWxmIGlzIGZsYWdnZWQgYXMgYW4gYF9faW5pdGAgZnVuY3Rpb24sIHNvIGl0JiMzOTtzIG9ubHkgY2FsbGVkIGR1cmluZyBrZXJuZWwgaW5pdGlhbGl6YXRpb24uIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVyZSYjMzk7cyBhIHVzZXItc3BhY2UgcGF0aHdheSB0byB0cmlnZ2VyIHRoYXQgaW5pdGlhbGl6YXRpb24uIE5vLCBiZWNhdXNlIGl0JiMzOTtzIHRpZWQgdG8gYW4gaW5pdGNhbGwuIFRoaXMgaXMgZ29vZCB0byBrbm93LCBiZWNhdXNlIGlmIHRoZXJlIHdlcmUgYSB1c2VyLXNwYWNlIGVxdWl2YWxlbnQgaXQgd291bGQgYmUgYSBwb3RlbnRpYWwgYXR0YWNrIHZlY3RvciBvciBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgYW4gZXllIG9uLgoKTm93LCB0aGlzIGZ1bmN0aW9uLCBgdGhwX3Nocmlua2VyX2luaXRgLCBpcyB3aGVyZSBgaHVnZV96ZXJvX2ZvbGlvYCBnZXRzIGFsbG9jYXRlZC4gSG1tLi4uIEkgd29uZGVyIGlmIHRoYXQgbWVtb3J5IGlzIGV2ZXIgZnJlZWQgYW5kIHRoZW4gcmVhbGxvY2F0ZWQgbGF0ZXI/IFRoYXQgd291bGQgaW5mbHVlbmNlIGhvdyBpdCYjMzk7cyB1c2VkIGVsc2V3aGVyZS4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgYW5kIHNlZSBob3cgYGdldF9odWdlX3plcm9fZm9saW9gIGhhbmRsZXMgdGhpbmdzLCB0byB1bmRlcnN0YW5kIGl0cyBsaWZlY3ljbGUuIFRoYXQgZnVuY3Rpb24gd2lsbCB0ZWxsIG1lIHRoZSBzdG9yeSBvZiBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIGFuZCByZS1hbGxvY2F0aW9uIGlmIHRoZXJlIGlzIGFueS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxOTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfaHVnZV96ZXJvX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTExNT11bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjI0LVxubW0vaHVnZV9tZW1vcnkuYzoyMjU6c3RhdGljIGJvb2wgZ2V0X2h1Z2VfemVyb19mb2xpbyh2b2lkKVxubW0vaHVnZV9tZW1vcnkuYy0yMjYte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjU2PXN0YXRpYyB2b2lkIHB1dF9odWdlX3plcm9fZm9saW8odm9pZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI2NC1cbm1tL2h1Z2VfbWVtb3J5LmM6MjY1OnN0cnVjdCBmb2xpbyAqbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL2h1Z2VfbWVtb3J5LmMtMjY2LXtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI3Mi1cbm1tL2h1Z2VfbWVtb3J5LmM6MjczOlx0aWYgKCFnZXRfaHVnZV96ZXJvX2ZvbGlvKCkpXG5tbS9odWdlX21lbW9yeS5jLTI3NC1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz05NTc9c3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTk4MS1cdFx0ICogaHVnZV96ZXJvX2ZvbGlvIHdpbGwgYWx3YXlzIGJlIE5VTEwgb24gZmFpbHVyZS4gV2UgYXNzdW1lXG5tbS9odWdlX21lbW9yeS5jOjk4MjpcdFx0ICogdGhhdCBnZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBtb3N0IGxpa2VseSBub3QgZmFpbCBhc1xubW0vaHVnZV9tZW1vcnkuYy05ODMtXHRcdCAqIHRocF9zaHJpbmtlcl9pbml0KCkgaXMgaW52b2tlZCBlYXJseSBvbiBkdXJpbmcgYm9vdC5cbm1tL2h1Z2VfbWVtb3J5LmMtOTg0LVx0XHQgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6OTg1Olx0XHRpZiAoIWdldF9odWdlX3plcm9fZm9saW8oKSkge1xubW0vaHVnZV9tZW1vcnkuYy05ODYtXHRcdFx0cHJfd2FybihcJiMzNDtBbGxvY2F0aW5nIHBlcnNpc3RlbnQgaHVnZSB6ZXJvIGZvbGlvIGZhaWxlZFxcblwmIzM0Oyk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xNDgzPXZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xNTA1LVx0XHRcdHJldHVybiBWTV9GQVVMVF9PT007XG5tbS9odWdlX21lbW9yeS5jOjE1MDY6XHRcdHplcm9fZm9saW8gPSBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKHZtYS1cdTAwM2V2bV9tbSk7XG5tbS9odWdlX21lbW9yeS5jLTE1MDctXHRcdGlmICh1bmxpa2VseSghemVyb19mb2xpbykpIHtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE4NzE9aW50IGNvcHlfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xOTM0LVx0XHQvKlxubW0vaHVnZV9tZW1vcnkuYzoxOTM1Olx0XHQgKiBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBuZXZlciBhbGxvY2F0ZSBhIG5ld1xubW0vaHVnZV9tZW1vcnkuYy0xOTM2LVx0XHQgKiBmb2xpbyBoZXJlLCBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgYSB6ZXJvIHBhZ2UgdG9cbi0tXG5tbS9odWdlX21lbW9yeS5jLTE5MzgtXHRcdCAqL1xubW0vaHVnZV9tZW1vcnkuYzoxOTM5Olx0XHRtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKGRzdF9tbSk7XG5tbS9odWdlX21lbW9yeS5jLTE5NDAtXHRcdGdvdG8gb3V0X3plcm9fcGFnZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxOTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzcxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgYGdldF9odWdlX3plcm9fZm9saW9gIEZ1bmN0aW9uIENhbGwqKgoKSG1tLCBzbyBgZ2V0X2h1Z2VfemVyb19mb2xpb2AgbWlnaHQgbm90IGJlIGNhbGxlZCBpbW1lZGlhdGVseSwgZGVwZW5kaW5nIG9uIHRoZSBwZXJzaXN0ZW5jZSBvZiB0aGUgaHVnZSB6ZXJvIGZvbGlvLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdyDigJMgaXQgZ2l2ZXMgdXMgc29tZSBmbGV4aWJpbGl0eS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGdldF9odWdlX3plcm9fZm9saW9gIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCBkb2VzLCBob3cgaXQgd29ya3MsIGFuZCB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgYXJlLiBLbm93aW5nIHRoaXMgd2lsbCBjbGFyaWZ5IHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0ICppcyogY2FsbGVkLCBhbmQgd2hldGhlciB0aGUgZGVsYXllZCBjYWxsIGludHJvZHVjZXMgYW55IHJpc2tzIG9yIG9wcG9ydHVuaXRpZXMgcmVnYXJkaW5nIHJlc291cmNlIG1hbmFnZW1lbnQgb3IgcGVyZm9ybWFuY2UuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMjA6XHRcdFx0cmV0dXJuIChzbWFwcyB8fCBpbl9wZikgPyBvcmRlcnMgOiAwO1xuIDIyMTpcdFxuIDIyMjpcdFx0cmV0dXJuIG9yZGVycztcbiAyMjM6XHR9XG4gMjI0Olx0XG4gMjI1Olx0c3RhdGljIGJvb2wgZ2V0X2h1Z2VfemVyb19mb2xpbyh2b2lkKVxuIDIyNjpcdHtcbiAyMjc6XHRcdHN0cnVjdCBmb2xpbyAqemVyb19mb2xpbztcbiAyMjg6XHRyZXRyeTpcbiAyMjk6XHRcdGlmIChsaWtlbHkoYXRvbWljX2luY19ub3RfemVybyhcdTAwMjZodWdlX3plcm9fcmVmY291bnQpKSlcbiAyMzA6XHRcdFx0cmV0dXJuIHRydWU7XG4gMjMxOlx0XG4gMjMyOlx0XHR6ZXJvX2ZvbGlvID0gZm9saW9fYWxsb2MoKEdGUF9UUkFOU0hVR0UgfCBfX0dGUF9aRVJPIHwgX19HRlBfWkVST1RBR1MpIFx1MDAyNlxuIDIzMzpcdFx0XHRcdFx0IH5fX0dGUF9NT1ZBQkxFLFxuIDIzNDpcdFx0XHRcdEhQQUdFX1BNRF9PUkRFUik7XG4gMjM1Olx0XHRpZiAoIXplcm9fZm9saW8pIHtcbiAyMzY6XHRcdFx0Y291bnRfdm1fZXZlbnQoVEhQX1pFUk9fUEFHRV9BTExPQ19GQUlMRUQpO1xuIDIzNzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMjM4Olx0XHR9XG4gMjM5Olx0XHQvKiBFbnN1cmUgemVybyBmb2xpbyB3b24mIzM5O3QgaGF2ZSBsYXJnZV9ybWFwcGFibGUgZmxhZyBzZXQuICovXG4gMjQwOlx0XHRmb2xpb19jbGVhcl9sYXJnZV9ybWFwcGFibGUoemVyb19mb2xpbyk7XG4gMjQxOlx0XHRwcmVlbXB0X2Rpc2FibGUoKTtcbiAyNDI6XHRcdGlmIChjbXB4Y2hnKFx1MDAyNmh1Z2VfemVyb19mb2xpbywgTlVMTCwgemVyb19mb2xpbykpIHtcbiAyNDM6XHRcdFx0cHJlZW1wdF9lbmFibGUoKTtcbiAyNDQ6XHRcdFx0Zm9saW9fcHV0KHplcm9fZm9saW8pO1xuIDI0NTpcdFx0XHRnb3RvIHJldHJ5O1xuIDI0NjpcdFx0fVxuIDI0NzpcdFx0V1JJVEVfT05DRShodWdlX3plcm9fcGZuLCBmb2xpb19wZm4oemVyb19mb2xpbykpO1xuIDI0ODpcdFxuIDI0OTpcdFx0LyogV2UgdGFrZSBhZGRpdGlvbmFsIHJlZmVyZW5jZSBoZXJlLiBJdCB3aWxsIGJlIHB1dCBiYWNrIGJ5IHNocmlua2VyICovXG4gMjUwOlx0XHRhdG9taWNfc2V0KFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCwgMik7XG4gMjUxOlx0XHRwcmVlbXB0X2VuYWJsZSgpO1xuIDI1MjpcdFx0Y291bnRfdm1fZXZlbnQoVEhQX1pFUk9fUEFHRV9BTExPQyk7XG4gMjUzOlx0XHRyZXR1cm4gdHJ1ZTtcbiAyNTQ6XHR9XG4gMjU1Olx0XG4gMjU2Olx0c3RhdGljIHZvaWQgcHV0X2h1Z2VfemVyb19mb2xpbyh2b2lkKVxuIDI1NzpcdHtcbiAyNTg6XHRcdC8qXG4gMjU5Olx0XHQgKiBDb3VudGVyIHNob3VsZCBuZXZlciBnbyB0byB6ZXJvIGhlcmUuIE9ubHkgc2hyaW5rZXIgY2FuIHB1dFxuIDI2MDpcdFx0ICogbGFzdCByZWZlcmVuY2UuXG4gMjYxOlx0XHQgKi9cbiAyNjI6XHRcdEJVR19PTihhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCkpO1xuIDI2MzpcdH1cbiAyNjQ6XHRcbiAyNjU6XHRzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gMjY2Olx0e1xuIDI2NzpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPKSlcbiAyNjg6XHRcdFx0cmV0dXJuIGh1Z2VfemVyb19mb2xpbztcbiAyNjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxOTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzM5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gd2VsbC12ZXJzZWQgaW4ga2VybmVsIGludGVybmFsczoKCioqRGl2aW5nIGludG8gdGhlIFRIUCBJbml0aWFsaXphdGlvbioqCgpSaWdodCwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgdGhwX3Nocmlua2VyX2luaXRgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyBwb3RlbnRpYWxseSBjcml0aWNhbCwgZXNwZWNpYWxseSBzaW5jZSBpdCYjMzk7cyBpbnZvbHZlZCBpbiBib290LXRpbWUgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2hhbmdpbmcgKmV4YWN0bHkqIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBMZXQmIzM5O3MgZ2V0IHRoZSBjb250ZXh0LCBhbmQgbGV0JiMzOTtzIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNpbmNlIGB0aHBfc2hyaW5rZXJfaW5pdGAgaGFuZGxlcyB0aGUgaW5pdGlhbGl6YXRpb24sIGl0JiMzOTtzIHByZXR0eSBzYWZlIHRvIGFzc3VtZSBpdCYjMzk7cyBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIEkgbmVlZCB0byByZXZpZXcgd2hhdCB0aGUgZnVuY3Rpb24gaXMgY3VycmVudGx5IGRvaW5nLCB3aGF0IHRoZSBwYXRjaCBtb2RpZmllcywgYW5kIGFueSByZWxhdGVkIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIHR3ZWFrZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE5OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTUwOlx0aW50IGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gOTUxOlx0e1xuIDk1MjpcdFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiA5NTM6XHRcdFx0cmV0dXJuIDA7XG4gOTU0Olx0XHRyZXR1cm4gZm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2MoZm9saW8sIFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgR0ZQX0tFUk5FTCk7XG4gOTU1Olx0fVxuIDk1NjpcdFxuIDk1NzpcdHN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXG4gOTU4Olx0e1xuIDk1OTpcdFx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHxcbiA5NjA6XHRcdFx0XHRcdFx0XHQgU0hSSU5LRVJfTUVNQ0dfQVdBUkUsXG4gOTYxOlx0XHRcdFx0XHRcdFx0IFwmIzM0O3RocC1kZWZlcnJlZF9zcGxpdFwmIzM0Oyk7XG4gOTYyOlx0XHRpZiAoIWRlZmVycmVkX3NwbGl0X3Nocmlua2VyKVxuIDk2MzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA5NjQ6XHRcbiA5NjU6XHRcdGlmIChsaXN0X2xydV9pbml0X21lbWNnX2tleShcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsXG4gOTY2Olx0XHRcdFx0XHQgICAgZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIsXG4gOTY3Olx0XHRcdFx0XHQgICAgXHUwMDI2ZGVmZXJyZWRfc3BsaXRfa2V5KSkge1xuIDk2ODpcdFx0XHRzaHJpbmtlcl9mcmVlKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcbiA5Njk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gOTcwOlx0XHR9XG4gOTcxOlx0XG4gOTcyOlx0XHRkZWZlcnJlZF9zcGxpdF9zaHJpbmtlci1cdTAwM2Vjb3VudF9vYmplY3RzID0gZGVmZXJyZWRfc3BsaXRfY291bnQ7XG4gOTczOlx0XHRkZWZlcnJlZF9zcGxpdF9zaHJpbmtlci1cdTAwM2VzY2FuX29iamVjdHMgPSBkZWZlcnJlZF9zcGxpdF9zY2FuO1xuIDk3NDpcdFx0c2hyaW5rZXJfcmVnaXN0ZXIoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpO1xuIDk3NTpcdFxuIDk3NjpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPKSkge1xuIDk3NzpcdFx0XHQvKlxuIDk3ODpcdFx0XHQgKiBCdW1wIHRoZSByZWZlcmVuY2Ugb2YgdGhlIGh1Z2VfemVyb19mb2xpbyBhbmQgZG8gbm90XG4gOTc5Olx0XHRcdCAqIGluaXRpYWxpemUgdGhlIHNocmlua2VyLlxuIDk4MDpcdFx0XHQgKlxuIDk4MTpcdFx0XHQgKiBodWdlX3plcm9fZm9saW8gd2lsbCBhbHdheXMgYmUgTlVMTCBvbiBmYWlsdXJlLiBXZSBhc3N1bWVcbiA5ODI6XHRcdFx0ICogdGhhdCBnZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBtb3N0IGxpa2VseSBub3QgZmFpbCBhc1xuIDk4MzpcdFx0XHQgKiB0aHBfc2hyaW5rZXJfaW5pdCgpIGlzIGludm9rZWQgZWFybHkgb24gZHVyaW5nIGJvb3QuXG4gOTg0Olx0XHRcdCAqL1xuIDk4NTpcdFx0XHRpZiAoIWdldF9odWdlX3plcm9fZm9saW8oKSkge1xuIDk4NjpcdFx0XHRcdHByX3dhcm4oXCYjMzQ7QWxsb2NhdGluZyBwZXJzaXN0ZW50IGh1Z2UgemVybyBmb2xpbyBmYWlsZWRcXG5cJiMzNDspO1xuIDk4NzpcdFx0XHRcdHJldHVybiAwO1xuIDk4ODpcdFx0XHR9XG4gOTg5Olx0XG4gOTkwOlx0XHRcdC8qIFNldCB1cCBkdXJpbmcgZWFybHkgYm9vdDsgbm8gZXhwbGljaXQgVExCIGZsdXNoIGlzIG5lZWRlZCBoZXJlLiAqL1xuIDk5MTpcdFx0XHRzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGZvbGlvX2FkZHJlc3MoaHVnZV96ZXJvX2ZvbGlvKSxcbiA5OTI6XHRcdFx0XHRcdFx0ICBIUEFHRV9QTURfTlIpO1xuIDk5MzpcdFx0XHRyZXR1cm4gMDtcbiA5OTQ6XHRcdH1cbiA5OTU6XHRcbiA5OTY6XHRcdGh1Z2VfemVyb19mb2xpb19zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKDAsIFwmIzM0O3RocC16ZXJvXCYjMzQ7KTtcbiA5OTc6XHRcdGlmICghaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyKSB7XG4gOTk4Olx0XHRcdHNocmlua2VyX2ZyZWUoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpO1xuIDk5OTpcdFx0XHRsaXN0X2xydV9kZXN0cm95KFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MTUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGZ1bmN0aW9uLiBCYXNlZCBvbiB0aGUgY3VycmVudCBjb2RlLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzICpleGNsdXNpdmVseSogY2FsbGVkIGZyb20gYHRocF9zaHJpbmtlcl9pbml0YC4gTm93LCB0aGF0JiMzOTtzIGEgcHJldHR5IHNwZWNpZmljIGRlcGVuZGVuY3kgd2hlbiB5b3UgY29uc2lkZXIgdGhhdCBpdCYjMzk7cyBvbmx5IGNhbGxlZCB3aGVuIGBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9gIGlzIGVuYWJsZWQuIE15IGZpcnN0IGluc3RpbmN0IGhlcmUgaXMgdG8gcXVlc3Rpb24gdGhpcy4gSXMgdGhpcyAqcmVhbGx5KiB0aGUgb25seSBwbGFjZSB3aGVyZSBpdCYjMzk7cyB1c2VkPyBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIG9mIHRoaXMuIEkgc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IHRoZXJlIGFyZW4mIzM5O3Qgb3RoZXIgY2FsbCBzaXRlcy4gTGV0IG1lIHJ1biBhIHF1aWNrIHNlYXJjaCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaD0xNj1pbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpO1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6MTc6aW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDoxODojZGVmaW5lIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2ggc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtMTktYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKTtcbi0tXG5hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmM9MzU4PWludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBuciwgYm9vbCB2YWxpZClcbi0tXG5hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMtMzY3LVxuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jOjM2ODppbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jLTM2OS17XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oPTkxPWludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBuciwgYm9vbCB2YWxpZCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6OTI6aW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6OTM6I2RlZmluZSBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC05NC1ib29sIGtlcm5lbF9wYWdlX3ByZXNlbnQoc3RydWN0IHBhZ2UgKnBhZ2UpO1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjY1Nz1pbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjY0LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNjY1OmludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2NjYte1xuLS1cbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oPTM3PXN0YXRpYyBpbmxpbmUgaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtNDMtLyoqXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaDo0NDogKiBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoIC0gbWFrZSBkaXJlY3QtbWFwIG1hcHBpbmdzIHJlYWQtb25seVxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtNDUtICogQGFkZHI6IHN0YXJ0IGFkZHJlc3MgaW4gdGhlIGRpcmVjdCBtYXBcbi0tXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC01Mi0gKi9cbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oOjUzOnN0YXRpYyBpbmxpbmUgaW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkcixcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTU0LVx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbi0tXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaD02OT1zdGF0aWMgaW5saW5lIGJvb2wgY2FuX3NldF9kaXJlY3RfbWFwKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtNzUtXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaDo3NjojaWZuZGVmIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oOjc3OnN0YXRpYyBpbmxpbmUgaW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkcixcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTc4LVx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbi0tXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC04Mi1cbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oOjgzOiNkZWZpbmUgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC04NC0jZW5kaWZcbi0tXG5tbS9odWdlX21lbW9yeS5jPTk1Nz1zdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtOTkwLVx0XHQvKiBTZXQgdXAgZHVyaW5nIGVhcmx5IGJvb3Q7IG5vIGV4cGxpY2l0IFRMQiBmbHVzaCBpcyBuZWVkZWQgaGVyZS4gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6OTkxOlx0XHRzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGZvbGlvX2FkZHJlc3MoaHVnZV96ZXJvX2ZvbGlvKSxcbm1tL2h1Z2VfbWVtb3J5LmMtOTkyLVx0XHRcdFx0XHQgIEhQQUdFX1BNRF9OUik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxNTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQW5hbHlzaXM6IEh1Z2UgWmVybyBGb2xpbyBSZWFkLU9ubHkgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoYCwgYW5kIHRoZSBvbmx5IHBsYWNlIGl0JiMzOTtzIGNhbGxlZCBpcyB3aXRoaW4gYHRocF9zaHJpbmtlcl9pbml0YC4gIEFuZCAqdGhhdCogaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24sIHdoaWNoIGlzIG9ubHkgZXhlY3V0ZWQgZHVyaW5nIGJvb3QgYW5kIHRoZW4gZGlzY2FyZGVkLiBUaGlzIG1lYW5zIGl0JiMzOTtzIHVucmVhY2hhYmxlIGFmdGVyIHRoZSBrZXJuZWwgaXMgdXAgYW5kIHJ1bm5pbmcg4oCTIGEga2V5IHBvaW50LgoKSSBpbml0aWFsbHkgY29uc2lkZXJlZCB3aGV0aGVyIHRoZXJlIHdhcyBzb21lIHNpZGUgZWZmZWN0LCBzb21ldGhpbmcgKmVsc2UqIHRoZSBmdXp6ZXIgY291bGQgdHJpZ2dlci4gVGhlIGNoYW5nZSBtYWtlcyB0aGUgaHVnZSB6ZXJvIGZvbGlvIHJlYWQtb25seSBpbiB0aGUgZGlyZWN0IG1hcC4gTXkgZmlyc3QgdGhvdWdodCB3YXMsICYjMzQ7Q291bGQgYSB3cml0ZSB0byBpdCBub3cgY2F1c2UgYSBjcmFzaCB0aGUgZnV6emVyIGNvdWxkIGRldGVjdD8mIzM0OyAgWWVzLCBpdCB3b3VsZCwgYnV0Li4uIHRoZSBodWdlIHplcm8gZm9saW8gaXMgKnN1cHBvc2VkKiB0byBiZSByZWFkLW9ubHkgYW55d2F5ISBUaGlzIHBhdGNoIGlzIGhhcmRlbmluZywgcHJldmVudGluZyBhY2NpZGVudGFsIG9yIG1hbGljaW91cyB3cml0ZXMgdG8gaXQgYW5kIHR1cm5pbmcgdGhlbSBpbnRvIGNyYXNoZXMuIEdvb2QgZm9yIHNlY3VyaXR5LCBidXQgYSBjcmFzaCB3b3VsZG4mIzM5O3QgaW5kaWNhdGUgc29tZXRoaW5nIG5ldyBpcyBmdXp6YWJsZS4KClNvLCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlICpuZXcqLCByZWFjaGFibGUgY29kZSBwYXRocyBwZXIgc2UuICBJdCBjaGFuZ2VzIG1lbW9yeSBwcm90ZWN0aW9uLiBJZiBXb3J0aEZ1enppbmcgd2VyZSB0cnVlLCBJJiMzOTtkIGhhdmUgdG8gaWRlbnRpZnkgd2hhdCB0byBmb2N1cyBvbi4gQnV0IHRoZXJlJiMzOTtzIG5vIHNwZWNpZmljIGZ1bmN0aW9uIHRvIHRhcmdldCBiZWNhdXNlIHRoZSBwcm90ZWN0aW9uIGFwcGxpZXMgZ2xvYmFsbHkgdG8gdGhlIGh1Z2UgemVybyBmb2xpby4gQW55IGNvZGUgdGhhdCBkZWFscyB3aXRoIFRIUCBjb3VsZCB0aGVvcmV0aWNhbGx5IGludGVyYWN0IHdpdGggaXQsIGJ1dCBJIGNhbiYjMzk7dCBwaW5wb2ludCBhIHNwZWNpZmljIGVudHJ5IHBvaW50IHRoYXQmIzM5O3MgbmV3bHkgZXhwb3NlZC4KClRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gVGhpcyBjb2RlLCB0aGUgbmV3IGZ1bmN0aW9uIGFuZCB0aGUgY2FsbCB0byBpdCwgaXMgb25seSBleGVjdXRlZCBkdXJpbmcgYm9vdCBhbmQgaXMgbm90IHJlYWNoYWJsZSBkdXJpbmcgdGhlIGZ1enppbmcgcGhhc2UuCgpFdmVuIGlmIEkgKmNvdWxkKiB0cmlnZ2VyIGEgd3JpdGUgdG8gdGhlIGZvbGlvICphZnRlciogYm9vdCwgdGhlIHBhdGNoIHdvdWxkIG9ubHkgY2hhbmdlIGFuIGV4aXN0aW5nLCBwb3NzaWJseSBlcnJvbmVvdXMsIGJlaGF2aW9yIGludG8gYSBjcmFzaCwgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgbmV3IGZ1bmN0aW9uYWxpdHkuIFNvLCBiYXNlZCBvbiB0aGUgcHJvbXB0JiMzOTtzIGluc3RydWN0aW9ucywgYW5kIGdpdmVuIHRoYXQgdGhlIGFkZGVkIGNvZGUgaXMgaW5hY2Nlc3NpYmxlIGFmdGVyIGJvb3QsIEkgY2Fubm90IHByb3ZpZGUgYW55IG1lYW5pbmdmdWwgYEZvY3VzU3ltYm9sc2AuCgpJIHJlY2hlY2tlZCB0aGUgY29kZSBhbmQgY29uZmlybWVkIHRoYXQgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGlzbiYjMzk7dCBleHBvcnRlZCBhbmQgaXNuJiMzOTt0IGNhbGxlZCBhbnl3aGVyZSBlbHNlLiBJdCYjMzk7cyBzdHJpY3RseSBhIGJvb3QtdGltZSBoYXJkZW5pbmcgbWVhc3VyZS4KCkkgd2lsbCBmb3JtdWxhdGUgdGhlIHJlYXNvbmluZyBhczogVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGFuZCBjYWxscyBpdCBmcm9tIGB0aHBfc2hyaW5rZXJfaW5pdGAsIHdoaWNoIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uIGV4ZWN1dGVkIG9ubHkgb25jZSBkdXJpbmcgZWFybHkga2VybmVsIGJvb3QuIFNpbmNlIHRoaXMgY29kZSBjYW5ub3QgYmUgdHJpZ2dlcmVkIG9yIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgZHVyaW5nIHRoZSBmdXp6aW5nIHBoYXNlLCBpdCBpcyBub3QgcG9zc2libGUgdG8gZnV6eiB0aGlzIGNoYW5nZS4gV29ydGhGdXp6aW5nID0gZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE5OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTgyND1jb25maWcgQVJDSF9XQU5UU19USFBfU1dBUFxuLS1cbm1tL0tjb25maWctODI2LVxubW0vS2NvbmZpZzo4Mjc6Y29uZmlnIFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPXG5tbS9LY29uZmlnLTgyOC1cdGJvb2wgXCYjMzQ7QWxsb2NhdGUgYSBQTUQgc2l6ZWQgZm9saW8gZm9yIHplcm9pbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTk6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NzQKCQkJCQkJCW91dHB1dDogMTE5CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgSSYjMzk7bSBkZWVwIGluIHRoZSBjb2RlOgoKKipUaGlua2luZyBUaHJvdWdoIFRoaXMgQm9vdC1UaW1lIEZsYWcqKgoKUmlnaHQsIGl0JiMzOTtzIGNvbmZpcm1lZC4gKlRoYXQqIGNvbmRpdGlvbiBpcyB0cnVlLiBCdXQgaGFuZyBvbi4uLiB0aGlzIGNvZGUsIHRoaXMgY3J1Y2lhbCBwaWVjZSwgaXQgb25seSBydW5zIGR1cmluZyB0aGUgYm9vdCBzZXF1ZW5jZS4gVGhhdCYjMzk7cyB0aGUga2V5LiBUaGF0IGNoYW5nZXMgZXZlcnl0aGluZyBpbiB0aGUgY29udGV4dCBvZiBteSB1bmRlcnN0YW5kaW5nLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgaXMgb25seSBleGVjdXRlZCBkdXJpbmcgYm9vdCBJIHNob3VsZCBjYWxsIHNldC1yZXN1bHRzIHdpdGggV29ydGhGdXp6aW5nPWZhbHNlLiBHb3QgaXQuIE5vIG5lZWQgdG8gbXVkZHkgdGhlIHdhdGVycyBvciBjb21wbGljYXRlIHRoaW5ncyBkdXJpbmcgdGhlICYjMzQ7bm9ybWFsJiMzNDsgcnVudGltZS4gQ2xlYXIgYW5kIGNvbmNpc2UsIGV4YWN0bHkgYXMgaXQgc2hvdWxkIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxOTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGFuZCBjYWxscyBpdCBmcm9tIGB0aHBfc2hyaW5rZXJfaW5pdGAsIHdoaWNoIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLiBUaGlzIGNvZGUgaXMgZXhlY3V0ZWQgZXhhY3RseSBvbmNlIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdCB0byBhcHBseSBtZW1vcnkgcHJvdGVjdGlvbnMgdG8gdGhlIGh1Z2UgemVybyBmb2xpby4gU2luY2UgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgY2Fubm90IGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSBvciBleGVjdXRlZCBkdXJpbmcgdGhlIHBvc3QtYm9vdCBmdXp6aW5nIHBoYXNlLCB0aGlzIHBhdGNoIGNhbm5vdCBiZSBhY3RpdmVseSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoYCBhbmQgY2FsbHMgaXQgZnJvbSBgdGhwX3Nocmlua2VyX2luaXRgLCB3aGljaCBpcyBhbiBgX19pbml0YCBmdW5jdGlvbi4gVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIGV4YWN0bHkgb25jZSBkdXJpbmcgZWFybHkga2VybmVsIGJvb3QgdG8gYXBwbHkgbWVtb3J5IHByb3RlY3Rpb25zIHRvIHRoZSBodWdlIHplcm8gZm9saW8uIFNpbmNlIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGNhbm5vdCBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2Ugb3IgZXhlY3V0ZWQgZHVyaW5nIHRoZSBwb3N0LWJvb3QgZnV6emluZyBwaGFzZSwgdGhpcyBwYXRjaCBjYW5ub3QgYmUgYWN0aXZlbHkgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE5OjQ4OjQ0LjU5MzM4NTU4OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODM3OTY5MzAxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAgYW5kIGNhbGxzIGl0IGZyb20gYHRocF9zaHJpbmtlcl9pbml0YCwgd2hpY2ggaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24uIFRoaXMgY29kZSBpcyBleGVjdXRlZCBleGFjdGx5IG9uY2UgZHVyaW5nIGVhcmx5IGtlcm5lbCBib290IHRvIGFwcGx5IG1lbW9yeSBwcm90ZWN0aW9ucyB0byB0aGUgaHVnZSB6ZXJvIGZvbGlvLiBTaW5jZSB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBjYW5ub3QgYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIG9yIGV4ZWN1dGVkIGR1cmluZyB0aGUgcG9zdC1ib290IGZ1enppbmcgcGhhc2UsIHRoaXMgcGF0Y2ggY2Fubm90IGJlIGFjdGl2ZWx5IGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE5OjQ4OjQ0LjU5MzM5MjIyOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMwMDg3MjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGQ4M2IzMmY0ZmU0YWNjZGRkYzZiMjNhNDYyYmZmY2FlN2Q4NmJjYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCA2IDE5OjQ4OjQyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcXG5pbmRleCA5MGY2MWIxNzI3NWUxYi4uNzA4MzI2MDMwM2MzY2QgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxcbkBAIC0xNCw2ICsxNCw4IEBAIGludCBzZXRfbWVtb3J5X3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzLCBpbnQgZW5hYmxlKTtcXG4gaW50IHNldF9kaXJlY3RfbWFwX2ludmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuIGludCBzZXRfZGlyZWN0X21hcF9kZWZhdWx0X25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbiBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpO1xcbitpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG4rI2RlZmluZSBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hcXG4gYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKTtcXG4gXFxuIGludCBzZXRfbWVtb3J5X2VuY3J5cHRlZCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYyBiL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY1xcbmluZGV4IGJiZTk4YWM5YWQ4YzY3Li4xYTY3NjkwNzM1NThkMyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmNcXG4rKysgYi9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmNcXG5AQCAtMzY1LDYgKzM2NSwxNiBAQCBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpXFxuIFxcdHJldHVybiBzZXRfbWVtb3J5X3ZhbGlkKGFkZHIsIG5yLCB2YWxpZCk7XFxuIH1cXG4gXFxuK2ludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuK3tcXG4rXFx0aWYgKCFjYW5fc2V0X2RpcmVjdF9tYXAoKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gdXBkYXRlX3JhbmdlX3Byb3QoKHVuc2lnbmVkIGxvbmcpYWRkciwgUEFHRV9TSVpFICogbnJfcGFnZXMsXFxuK1xcdFxcdFxcdFxcdCBfX3BncHJvdChQVEVfUkRPTkxZKSxcXG4rXFx0XFx0XFx0XFx0IF9fcGdwcm90KFBURV9XUklURSkpO1xcbit9XFxuK1xcbiAjaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQ1xcbiAvKlxcbiAgKiBUaGlzIGlzIC0gYXBhcnQgZnJvbSB0aGUgcmV0dXJuIHZhbHVlIC0gZG9pbmcgdGhlIHNhbWVcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oXFxuaW5kZXggNDM2MmMyNmFhOTkyZGIuLmJkMzgxN2UwNjA1MmMwIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxcbkBAIC04OSw2ICs4OSw4IEBAIGludCBzZXRfcGFnZXNfcncoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcyk7XFxuIGludCBzZXRfZGlyZWN0X21hcF9pbnZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbiBpbnQgc2V0X2RpcmVjdF9tYXBfZGVmYXVsdF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlKTtcXG4gaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKTtcXG4raW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuKyNkZWZpbmUgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXFxuIGJvb2wga2VybmVsX3BhZ2VfcHJlc2VudChzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuIFxcbiBleHRlcm4gaW50IGtlcm5lbF9zZXRfdG9fcmVhZG9ubHk7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXFxuaW5kZXggZDAyM2E0MGExZTAzNDUuLjU5ODdmNGM4NGY2ZmU5IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcXG4rKysgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXFxuQEAgLTI2NjIsNiArMjY2MiwyMSBAQCBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpXFxuIFxcdHJldHVybiBfX3NldF9wYWdlc19ucChwYWdlLCBucik7XFxuIH1cXG4gXFxuK2ludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyB0ZW1wYWRkciA9ICh1bnNpZ25lZCBsb25nKWFkZHI7XFxuK1xcdHN0cnVjdCBjcGFfZGF0YSBjcGEgPSB7XFxuK1xcdFxcdC52YWRkciA9IFxcdTAwMjZ0ZW1wYWRkcixcXG4rXFx0XFx0LnBnZCA9IE5VTEwsXFxuK1xcdFxcdC5udW1wYWdlcyA9IG5yX3BhZ2VzLFxcbitcXHRcXHQubWFza19zZXQgPSBfX3BncHJvdCgwKSxcXG4rXFx0XFx0Lm1hc2tfY2xyID0gX19wZ3Byb3QoX1BBR0VfUlcgfCBfUEFHRV9ESVJUWSksXFxuK1xcdFxcdC5mbGFncyA9IENQQV9OT19DSEVDS19BTElBUyxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2Y3BhLCAxKTtcXG4rfVxcbitcXG4gI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0NcXG4gdm9pZCBfX2tlcm5lbF9tYXBfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcywgaW50IGVuYWJsZSlcXG4ge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaCBiL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oXFxuaW5kZXggMzAzMGQ5MjQ1ZjVhYzguLmE5MDUwNzRmYjIxZGUwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmhcXG5AQCAtNDAsNiArNDAsMjIgQEAgc3RhdGljIGlubGluZSBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoIC0gbWFrZSBkaXJlY3QtbWFwIG1hcHBpbmdzIHJlYWQtb25seVxcbisgKiBAYWRkcjogc3RhcnQgYWRkcmVzcyBpbiB0aGUgZGlyZWN0IG1hcFxcbisgKiBAbnJfcGFnZXM6IG51bWJlciBvZiBwYWdlcyBzdGFydGluZyBhdCBAYWRkclxcbisgKlxcbisgKiBNYWtlIHRoZSBkaXJlY3QtbWFwIG1hcHBpbmdzIGZvciBAbnJfcGFnZXMgcGFnZXMgc3RhcnRpbmcgYXQgQGFkZHJcXG4rICogcmVhZC1vbmx5LCB3aXRob3V0IGZsdXNoaW5nIFRMQnMuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIHdoZW4gdW5zdXBwb3J0ZWQsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgaW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuIFxcdHJldHVybiB0cnVlO1xcbkBAIC01Niw2ICs3MiwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3NldF9kaXJlY3RfbWFwKHZvaWQpXFxuIH1cXG4gI2RlZmluZSBjYW5fc2V0X2RpcmVjdF9tYXAgY2FuX3NldF9kaXJlY3RfbWFwXFxuICNlbmRpZlxcbitcXG4rI2lmbmRlZiBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXFxuK3N0YXRpYyBpbmxpbmUgaW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKyNkZWZpbmUgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXFxuKyNlbmRpZlxcbiAjZW5kaWYgLyogQ09ORklHX0FSQ0hfSEFTX1NFVF9ESVJFQ1RfTUFQICovXFxuIFxcbiAjaWZkZWYgQ09ORklHX1g4Nl82NFxcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IGMwODkyY2M1MzNhOWZjLi4zZWY1NmNhZGExMDhkNSAxMDA2NDRcXG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXFxuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xcbkBAIC00MSw2ICs0MSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZ2FsbG9jLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZ2FsbG9jX3RhZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZXdhbGsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NldF9tZW1vcnkuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vdGxiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbkBAIC05ODEsOCArOTgyLDE0IEBAIHN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXFxuIFxcdFxcdCAqIHRoYXQgZ2V0X2h1Z2VfemVyb19mb2xpbygpIHdpbGwgbW9zdCBsaWtlbHkgbm90IGZhaWwgYXNcXG4gXFx0XFx0ICogdGhwX3Nocmlua2VyX2luaXQoKSBpcyBpbnZva2VkIGVhcmx5IG9uIGR1cmluZyBib290LlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKCFnZXRfaHVnZV96ZXJvX2ZvbGlvKCkpXFxuK1xcdFxcdGlmICghZ2V0X2h1Z2VfemVyb19mb2xpbygpKSB7XFxuIFxcdFxcdFxcdHByX3dhcm4oXFxcIkFsbG9jYXRpbmcgcGVyc2lzdGVudCBodWdlIHplcm8gZm9saW8gZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIFNldCB1cCBkdXJpbmcgZWFybHkgYm9vdDsgbm8gZXhwbGljaXQgVExCIGZsdXNoIGlzIG5lZWRlZCBoZXJlLiAqL1xcbitcXHRcXHRzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGZvbGlvX2FkZHJlc3MoaHVnZV96ZXJvX2ZvbGlvKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBIUEFHRV9QTURfTlIpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTk6NDg6NDUuMzI0NDI3NTk0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTc2NDg2NDExNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGFuZCBjYWxscyBpdCBmcm9tIGB0aHBfc2hyaW5rZXJfaW5pdGAsIHdoaWNoIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLiBUaGlzIGNvZGUgaXMgZXhlY3V0ZWQgZXhhY3RseSBvbmNlIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdCB0byBhcHBseSBtZW1vcnkgcHJvdGVjdGlvbnMgdG8gdGhlIGh1Z2UgemVybyBmb2xpby4gU2luY2UgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgY2Fubm90IGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSBvciBleGVjdXRlZCBkdXJpbmcgdGhlIHBvc3QtYm9vdCBmdXp6aW5nIHBoYXNlLCB0aGlzIHBhdGNoIGNhbm5vdCBiZSBhY3RpdmVseSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDhkODNiMzJmNGZlNGFjY2RkZGM2YjIzYTQ2MmJmZmNhZTdkODZiY2JcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCA2IDE5OjQ4OjQyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxuaW5kZXggOTBmNjFiMTcyNzVlMWIuLjcwODMyNjAzMDNjM2NkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oXG5AQCAtMTQsNiArMTQsOCBAQCBpbnQgc2V0X21lbW9yeV92YWxpZCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcywgaW50IGVuYWJsZSk7XG4gaW50IHNldF9kaXJlY3RfbWFwX2ludmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gaW50IHNldF9kaXJlY3RfbWFwX2RlZmF1bHRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKTtcbitpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbisjZGVmaW5lIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2ggc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaFxuIGJvb2wga2VybmVsX3BhZ2VfcHJlc2VudChzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gXG4gaW50IHNldF9tZW1vcnlfZW5jcnlwdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMgYi9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmNcbmluZGV4IGJiZTk4YWM5YWQ4YzY3Li4xYTY3NjkwNzM1NThkMyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY1xuKysrIGIvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jXG5AQCAtMzY1LDYgKzM2NSwxNiBAQCBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpXG4gXHRyZXR1cm4gc2V0X21lbW9yeV92YWxpZChhZGRyLCBuciwgdmFsaWQpO1xuIH1cbiBcbitpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuK3tcbitcdGlmICghY2FuX3NldF9kaXJlY3RfbWFwKCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHVwZGF0ZV9yYW5nZV9wcm90KCh1bnNpZ25lZCBsb25nKWFkZHIsIFBBR0VfU0laRSAqIG5yX3BhZ2VzLFxuK1x0XHRcdFx0IF9fcGdwcm90KFBURV9SRE9OTFkpLFxuK1x0XHRcdFx0IF9fcGdwcm90KFBURV9XUklURSkpO1xuK31cbitcbiAjaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQ1xuIC8qXG4gICogVGhpcyBpcyAtIGFwYXJ0IGZyb20gdGhlIHJldHVybiB2YWx1ZSAtIGRvaW5nIHRoZSBzYW1lXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oXG5pbmRleCA0MzYyYzI2YWE5OTJkYi4uYmQzODE3ZTA2MDUyYzAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxuQEAgLTg5LDYgKzg5LDggQEAgaW50IHNldF9wYWdlc19ydyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzKTtcbiBpbnQgc2V0X2RpcmVjdF9tYXBfaW52YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlKTtcbiBpbnQgc2V0X2RpcmVjdF9tYXBfZGVmYXVsdF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlKTtcbiBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpO1xuK2ludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuKyNkZWZpbmUgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXG4gYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKTtcbiBcbiBleHRlcm4gaW50IGtlcm5lbF9zZXRfdG9fcmVhZG9ubHk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbmluZGV4IGQwMjNhNDBhMWUwMzQ1Li41OTg3ZjRjODRmNmZlOSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbisrKyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbkBAIC0yNjYyLDYgKzI2NjIsMjEgQEAgaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKVxuIFx0cmV0dXJuIF9fc2V0X3BhZ2VzX25wKHBhZ2UsIG5yKTtcbiB9XG4gXG4raW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbit7XG4rXHR1bnNpZ25lZCBsb25nIHRlbXBhZGRyID0gKHVuc2lnbmVkIGxvbmcpYWRkcjtcbitcdHN0cnVjdCBjcGFfZGF0YSBjcGEgPSB7XG4rXHRcdC52YWRkciA9IFx1MDAyNnRlbXBhZGRyLFxuK1x0XHQucGdkID0gTlVMTCxcbitcdFx0Lm51bXBhZ2VzID0gbnJfcGFnZXMsXG4rXHRcdC5tYXNrX3NldCA9IF9fcGdwcm90KDApLFxuK1x0XHQubWFza19jbHIgPSBfX3BncHJvdChfUEFHRV9SVyB8IF9QQUdFX0RJUlRZKSxcbitcdFx0LmZsYWdzID0gQ1BBX05PX0NIRUNLX0FMSUFTLFxuK1x0fTtcbitcbitcdHJldHVybiBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcdTAwMjZjcGEsIDEpO1xuK31cbitcbiAjaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQ1xuIHZvaWQgX19rZXJuZWxfbWFwX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMsIGludCBlbmFibGUpXG4ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oIGIvaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmhcbmluZGV4IDMwMzBkOTI0NWY1YWM4Li5hOTA1MDc0ZmIyMWRlMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaFxuQEAgLTQwLDYgKzQwLDIyIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyoqXG4rICogc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCAtIG1ha2UgZGlyZWN0LW1hcCBtYXBwaW5ncyByZWFkLW9ubHlcbisgKiBAYWRkcjogc3RhcnQgYWRkcmVzcyBpbiB0aGUgZGlyZWN0IG1hcFxuKyAqIEBucl9wYWdlczogbnVtYmVyIG9mIHBhZ2VzIHN0YXJ0aW5nIGF0IEBhZGRyXG4rICpcbisgKiBNYWtlIHRoZSBkaXJlY3QtbWFwIG1hcHBpbmdzIGZvciBAbnJfcGFnZXMgcGFnZXMgc3RhcnRpbmcgYXQgQGFkZHJcbisgKiByZWFkLW9ubHksIHdpdGhvdXQgZmx1c2hpbmcgVExCcy5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIHdoZW4gdW5zdXBwb3J0ZWQsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsXG4rXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGJvb2wga2VybmVsX3BhZ2VfcHJlc2VudChzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4gXHRyZXR1cm4gdHJ1ZTtcbkBAIC01Niw2ICs3MiwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3NldF9kaXJlY3RfbWFwKHZvaWQpXG4gfVxuICNkZWZpbmUgY2FuX3NldF9kaXJlY3RfbWFwIGNhbl9zZXRfZGlyZWN0X21hcFxuICNlbmRpZlxuK1xuKyNpZm5kZWYgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaFxuK3N0YXRpYyBpbmxpbmUgaW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkcixcbitcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKyNkZWZpbmUgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXG4rI2VuZGlmXG4gI2VuZGlmIC8qIENPTkZJR19BUkNIX0hBU19TRVRfRElSRUNUX01BUCAqL1xuIFxuICNpZmRlZiBDT05GSUdfWDg2XzY0XG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IGMwODkyY2M1MzNhOWZjLi4zZWY1NmNhZGExMDhkNSAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC00MSw2ICs0MSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGdhbGxvYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGdhbGxvY190YWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2V3YWxrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdGxiLmhcdTAwM2VcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuQEAgLTk4MSw4ICs5ODIsMTQgQEAgc3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcbiBcdFx0ICogdGhhdCBnZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBtb3N0IGxpa2VseSBub3QgZmFpbCBhc1xuIFx0XHQgKiB0aHBfc2hyaW5rZXJfaW5pdCgpIGlzIGludm9rZWQgZWFybHkgb24gZHVyaW5nIGJvb3QuXG4gXHRcdCAqL1xuLVx0XHRpZiAoIWdldF9odWdlX3plcm9fZm9saW8oKSlcbitcdFx0aWYgKCFnZXRfaHVnZV96ZXJvX2ZvbGlvKCkpIHtcbiBcdFx0XHRwcl93YXJuKFwiQWxsb2NhdGluZyBwZXJzaXN0ZW50IGh1Z2UgemVybyBmb2xpbyBmYWlsZWRcXG5cIik7XG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbitcbitcdFx0LyogU2V0IHVwIGR1cmluZyBlYXJseSBib290OyBubyBleHBsaWNpdCBUTEIgZmx1c2ggaXMgbmVlZGVkIGhlcmUuICovXG4rXHRcdHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goZm9saW9fYWRkcmVzcyhodWdlX3plcm9fZm9saW8pLFxuK1x0XHRcdFx0XHQgIEhQQUdFX1BNRF9OUik7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTk6NDg6NDUuMzI0NDMzNjg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczNDE1NzQ3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBQYXRjaCBmb3IgUmVhZC1Pbmx5IEh1Z2UgWmVybyBGb2xpbyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgaW50cm9kdWNpbmcgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGFjcm9zcyBhIGZldyBhcmNoaXRlY3R1cmVzLCBzcGVjaWZpY2FsbHkgQVJNNjQgYW5kIHg4Niwgd2l0aCBzdXBwb3J0aW5nIGhlYWRlcnMgaW4gdGhlIGBpbmNsdWRlYCBkaXJlY3RvcnkuIEl0J3MgYWxzbyB0b3VjaGluZyBgbW0vaHVnZV9tZW1vcnkuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXaGF0J3MgdGhpcyBuZXcgZnVuY3Rpb24gZG9pbmc/XCJcblxuUmlnaHQsIGl0IGxvb2tzIGxpa2UgdGhpcyBuZXcgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCB3aXRoaW4gYHRocF9zaHJpbmtlcl9pbml0KClgLCBhbmQgaXQncyBiZWluZyBjYWxsZWQgd2l0aCB0aGUgYWRkcmVzcyBvZiB0aGUgYGh1Z2VfemVyb19mb2xpb2AgYW5kIGBIUEFHRV9QTURfTlJgLiBBaCwgYW5kIHRoZXJlIGl0IGlzOiBpdCdzIG1ha2luZyB0aGUgaHVnZSB6ZXJvIGZvbGlvIHJlYWQtb25seSBpbiB0aGUgZGlyZWN0IG1hcC4gTm93LCAqdGhhdCdzKiBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCBhbnkgYm9vdC10aW1lIGNoYW5nZXMuXG5cbkhhbmcgb24uLi4gYHRocF9zaHJpbmtlcl9pbml0KClgIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIGl0J3MgcnVubmluZyBkdXJpbmcgYm9vdC4gT2theSwgc28gdGhpcyByZWFkLW9ubHkgY2hhbmdlIGlzIGhhcHBlbmluZyBvbmNlLCB2ZXJ5IGVhcmx5IG9uLiBUaGVyZSBzaG91bGRuJ3QgYmUgYW55IHVzZXJzcGFjZSBpbnRlcmFjdGlvbiBkaXJlY3RseSB0cmlnZ2VyaW5nIHRoaXMsIHdoaWNoIG1ha2VzIHRoaXMgY2hhbmdlIGEgbGl0dGxlIGxlc3MgaW1tZWRpYXRlbHkgY29uY2VybmluZywgYnV0IEkgc3RpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuIFRoZSBjb21tZW50IG9uIHRoZSBmb2xpbyBhZGRyZXNzIGRvZXMgbWVudGlvbiBzb21ldGhpbmcgYWJvdXQgZmFpbHVyZSwgc28gbWF5YmUgaXQncyBub3QgYWx3YXlzIGR1cmluZyBib290LlxuXG5Ob3csIHdoeSBtYWtlIHRoZSBodWdlIHplcm8gZm9saW8gcmVhZC1vbmx5PyBJcyB0aGVyZSBhIHNlY3VyaXR5IGNvbmNlcm4/IFBlcmZvcm1hbmNlPyBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZSB3aGF0IGlzIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2U/IEFyZSB0aGVyZSBmb2xsb3cgdXAgY29tbWl0cz8gSXMgdGhpcyBhIGNvbXBsZXRlIHNvbHV0aW9uP1xuXG5Pa2F5LCBsZXQgbWUgY2hlY2sgd2hlcmUgYHRocF9zaHJpbmtlcl9pbml0YCBpcyBjYWxsZWQuIEl0J3MgYW4gYGluaXRjYWxsYCwgc28gbGV0J3MgbG9vayBhdCBgbW0vaHVnZV9tZW1vcnkuY2AgYWdhaW4uIEkgbmVlZCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnJvYWRlciBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRoYXQgY2FsbHMgdGhpcyBmdW5jdGlvbiB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYW5kIHBvdGVudGlhbCByaXNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY2MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE5OjQ5OjIyLjY2NjAxMjA1N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEyMTk2NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGhwX3Nocmlua2VyX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTk1MD1pbnQgZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtOTU2LVxcbm1tL2h1Z2VfbWVtb3J5LmM6OTU3OnN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXFxubW0vaHVnZV9tZW1vcnkuYy05NTgte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy05ODItXFx0XFx0ICogdGhhdCBnZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBtb3N0IGxpa2VseSBub3QgZmFpbCBhc1xcbm1tL2h1Z2VfbWVtb3J5LmM6OTgzOlxcdFxcdCAqIHRocF9zaHJpbmtlcl9pbml0KCkgaXMgaW52b2tlZCBlYXJseSBvbiBkdXJpbmcgYm9vdC5cXG5tbS9odWdlX21lbW9yeS5jLTk4NC1cXHRcXHQgKi9cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTAxNz1zdGF0aWMgaW50IF9faW5pdCBodWdlcGFnZV9pbml0KHZvaWQpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTEwMzktXFxubW0vaHVnZV9tZW1vcnkuYzoxMDQwOlxcdGVyciA9IHRocF9zaHJpbmtlcl9pbml0KCk7XFxubW0vaHVnZV9tZW1vcnkuYy0xMDQxLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE5OjQ5OjIyLjgzNzI0Njk5NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NDI5NTc3MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkFuYWx5emluZyB0aGUgSHVnZSBQYWdlIEluaXRpYWxpemF0aW9uIFNlcXVlbmNlKipcblxuUmlnaHQsIHNvIGB0aHBfc2hyaW5rZXJfaW5pdGAgaXMgaW52b2tlZCBkdXJpbmcgc3lzdGVtIGluaXRpYWxpemF0aW9uLCBzcGVjaWZpY2FsbHkgYnkgYGh1Z2VwYWdlX2luaXRgLiBBbmQgYGh1Z2VwYWdlX2luaXRgIGl0c2VsZiBpcyBmbGFnZ2VkIGFzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLCBzbyBpdCdzIG9ubHkgY2FsbGVkIGR1cmluZyBrZXJuZWwgaW5pdGlhbGl6YXRpb24uIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVyZSdzIGEgdXNlci1zcGFjZSBwYXRod2F5IHRvIHRyaWdnZXIgdGhhdCBpbml0aWFsaXphdGlvbi4gTm8sIGJlY2F1c2UgaXQncyB0aWVkIHRvIGFuIGluaXRjYWxsLiBUaGlzIGlzIGdvb2QgdG8ga25vdywgYmVjYXVzZSBpZiB0aGVyZSB3ZXJlIGEgdXNlci1zcGFjZSBlcXVpdmFsZW50IGl0IHdvdWxkIGJlIGEgcG90ZW50aWFsIGF0dGFjayB2ZWN0b3Igb3Igc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbi5cblxuTm93LCB0aGlzIGZ1bmN0aW9uLCBgdGhwX3Nocmlua2VyX2luaXRgLCBpcyB3aGVyZSBgaHVnZV96ZXJvX2ZvbGlvYCBnZXRzIGFsbG9jYXRlZC4gSG1tLi4uIEkgd29uZGVyIGlmIHRoYXQgbWVtb3J5IGlzIGV2ZXIgZnJlZWQgYW5kIHRoZW4gcmVhbGxvY2F0ZWQgbGF0ZXI/IFRoYXQgd291bGQgaW5mbHVlbmNlIGhvdyBpdCdzIHVzZWQgZWxzZXdoZXJlLiBMZXQncyBkaWcgZGVlcGVyIGFuZCBzZWUgaG93IGBnZXRfaHVnZV96ZXJvX2ZvbGlvYCBoYW5kbGVzIHRoaW5ncywgdG8gdW5kZXJzdGFuZCBpdHMgbGlmZWN5Y2xlLiBUaGF0IGZ1bmN0aW9uIHdpbGwgdGVsbCBtZSB0aGUgc3Rvcnkgb2YgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBhbmQgcmUtYWxsb2NhdGlvbiBpZiB0aGVyZSBpcyBhbnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NzAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxOTo1MDoxMS4yNjY4MjY4ODVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE1ODY2Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9odWdlX3plcm9fZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTExNT11bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yMjQtXFxubW0vaHVnZV9tZW1vcnkuYzoyMjU6c3RhdGljIGJvb2wgZ2V0X2h1Z2VfemVyb19mb2xpbyh2b2lkKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjI2LXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjU2PXN0YXRpYyB2b2lkIHB1dF9odWdlX3plcm9fZm9saW8odm9pZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjY0LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MjY1OnN0cnVjdCBmb2xpbyAqbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS9odWdlX21lbW9yeS5jLTI2Ni17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI3Mi1cXG5tbS9odWdlX21lbW9yeS5jOjI3MzpcXHRpZiAoIWdldF9odWdlX3plcm9fZm9saW8oKSlcXG5tbS9odWdlX21lbW9yeS5jLTI3NC1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9OTU3PXN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTk4MS1cXHRcXHQgKiBodWdlX3plcm9fZm9saW8gd2lsbCBhbHdheXMgYmUgTlVMTCBvbiBmYWlsdXJlLiBXZSBhc3N1bWVcXG5tbS9odWdlX21lbW9yeS5jOjk4MjpcXHRcXHQgKiB0aGF0IGdldF9odWdlX3plcm9fZm9saW8oKSB3aWxsIG1vc3QgbGlrZWx5IG5vdCBmYWlsIGFzXFxubW0vaHVnZV9tZW1vcnkuYy05ODMtXFx0XFx0ICogdGhwX3Nocmlua2VyX2luaXQoKSBpcyBpbnZva2VkIGVhcmx5IG9uIGR1cmluZyBib290Llxcbm1tL2h1Z2VfbWVtb3J5LmMtOTg0LVxcdFxcdCAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6OTg1OlxcdFxcdGlmICghZ2V0X2h1Z2VfemVyb19mb2xpbygpKSB7XFxubW0vaHVnZV9tZW1vcnkuYy05ODYtXFx0XFx0XFx0cHJfd2FybihcXFwiQWxsb2NhdGluZyBwZXJzaXN0ZW50IGh1Z2UgemVybyBmb2xpbyBmYWlsZWRcXFxcblxcXCIpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xNDgzPXZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE1MDUtXFx0XFx0XFx0cmV0dXJuIFZNX0ZBVUxUX09PTTtcXG5tbS9odWdlX21lbW9yeS5jOjE1MDY6XFx0XFx0emVyb19mb2xpbyA9IG1tX2dldF9odWdlX3plcm9fZm9saW8odm1hLVxcdTAwM2V2bV9tbSk7XFxubW0vaHVnZV9tZW1vcnkuYy0xNTA3LVxcdFxcdGlmICh1bmxpa2VseSghemVyb19mb2xpbykpIHtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTg3MT1pbnQgY29weV9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTkzNC1cXHRcXHQvKlxcbm1tL2h1Z2VfbWVtb3J5LmM6MTkzNTpcXHRcXHQgKiBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBuZXZlciBhbGxvY2F0ZSBhIG5ld1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTkzNi1cXHRcXHQgKiBmb2xpbyBoZXJlLCBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgYSB6ZXJvIHBhZ2UgdG9cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTkzOC1cXHRcXHQgKi9cXG5tbS9odWdlX21lbW9yeS5jOjE5Mzk6XFx0XFx0bW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhkc3RfbW0pO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTk0MC1cXHRcXHRnb3RvIG91dF96ZXJvX3BhZ2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE5OjUwOjExLjY4MjgxMDM2M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTAxNjk0MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIHRoZSBgZ2V0X2h1Z2VfemVyb19mb2xpb2AgRnVuY3Rpb24gQ2FsbCoqXG5cbkhtbSwgc28gYGdldF9odWdlX3plcm9fZm9saW9gIG1pZ2h0IG5vdCBiZSBjYWxsZWQgaW1tZWRpYXRlbHksIGRlcGVuZGluZyBvbiB0aGUgcGVyc2lzdGVuY2Ugb2YgdGhlIGh1Z2UgemVybyBmb2xpby4gVGhhdCdzIGdvb2QgdG8ga25vdyDigJMgaXQgZ2l2ZXMgdXMgc29tZSBmbGV4aWJpbGl0eS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGdldF9odWdlX3plcm9fZm9saW9gIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCBkb2VzLCBob3cgaXQgd29ya3MsIGFuZCB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgYXJlLiBLbm93aW5nIHRoaXMgd2lsbCBjbGFyaWZ5IHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0ICppcyogY2FsbGVkLCBhbmQgd2hldGhlciB0aGUgZGVsYXllZCBjYWxsIGludHJvZHVjZXMgYW55IHJpc2tzIG9yIG9wcG9ydHVuaXRpZXMgcmVnYXJkaW5nIHJlc291cmNlIG1hbmFnZW1lbnQgb3IgcGVyZm9ybWFuY2UuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NzEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxOTo1MDoyMi43ODQ1MDc2NzZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDMzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMjA6XFx0XFx0XFx0cmV0dXJuIChzbWFwcyB8fCBpbl9wZikgPyBvcmRlcnMgOiAwO1xcbiAyMjE6XFx0XFxuIDIyMjpcXHRcXHRyZXR1cm4gb3JkZXJzO1xcbiAyMjM6XFx0fVxcbiAyMjQ6XFx0XFxuIDIyNTpcXHRzdGF0aWMgYm9vbCBnZXRfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXFxuIDIyNjpcXHR7XFxuIDIyNzpcXHRcXHRzdHJ1Y3QgZm9saW8gKnplcm9fZm9saW87XFxuIDIyODpcXHRyZXRyeTpcXG4gMjI5OlxcdFxcdGlmIChsaWtlbHkoYXRvbWljX2luY19ub3RfemVybyhcXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50KSkpXFxuIDIzMDpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjMxOlxcdFxcbiAyMzI6XFx0XFx0emVyb19mb2xpbyA9IGZvbGlvX2FsbG9jKChHRlBfVFJBTlNIVUdFIHwgX19HRlBfWkVSTyB8IF9fR0ZQX1pFUk9UQUdTKSBcXHUwMDI2XFxuIDIzMzpcXHRcXHRcXHRcXHRcXHQgfl9fR0ZQX01PVkFCTEUsXFxuIDIzNDpcXHRcXHRcXHRcXHRIUEFHRV9QTURfT1JERVIpO1xcbiAyMzU6XFx0XFx0aWYgKCF6ZXJvX2ZvbGlvKSB7XFxuIDIzNjpcXHRcXHRcXHRjb3VudF92bV9ldmVudChUSFBfWkVST19QQUdFX0FMTE9DX0ZBSUxFRCk7XFxuIDIzNzpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDIzODpcXHRcXHR9XFxuIDIzOTpcXHRcXHQvKiBFbnN1cmUgemVybyBmb2xpbyB3b24ndCBoYXZlIGxhcmdlX3JtYXBwYWJsZSBmbGFnIHNldC4gKi9cXG4gMjQwOlxcdFxcdGZvbGlvX2NsZWFyX2xhcmdlX3JtYXBwYWJsZSh6ZXJvX2ZvbGlvKTtcXG4gMjQxOlxcdFxcdHByZWVtcHRfZGlzYWJsZSgpO1xcbiAyNDI6XFx0XFx0aWYgKGNtcHhjaGcoXFx1MDAyNmh1Z2VfemVyb19mb2xpbywgTlVMTCwgemVyb19mb2xpbykpIHtcXG4gMjQzOlxcdFxcdFxcdHByZWVtcHRfZW5hYmxlKCk7XFxuIDI0NDpcXHRcXHRcXHRmb2xpb19wdXQoemVyb19mb2xpbyk7XFxuIDI0NTpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbiAyNDY6XFx0XFx0fVxcbiAyNDc6XFx0XFx0V1JJVEVfT05DRShodWdlX3plcm9fcGZuLCBmb2xpb19wZm4oemVyb19mb2xpbykpO1xcbiAyNDg6XFx0XFxuIDI0OTpcXHRcXHQvKiBXZSB0YWtlIGFkZGl0aW9uYWwgcmVmZXJlbmNlIGhlcmUuIEl0IHdpbGwgYmUgcHV0IGJhY2sgYnkgc2hyaW5rZXIgKi9cXG4gMjUwOlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCwgMik7XFxuIDI1MTpcXHRcXHRwcmVlbXB0X2VuYWJsZSgpO1xcbiAyNTI6XFx0XFx0Y291bnRfdm1fZXZlbnQoVEhQX1pFUk9fUEFHRV9BTExPQyk7XFxuIDI1MzpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjU0OlxcdH1cXG4gMjU1OlxcdFxcbiAyNTY6XFx0c3RhdGljIHZvaWQgcHV0X2h1Z2VfemVyb19mb2xpbyh2b2lkKVxcbiAyNTc6XFx0e1xcbiAyNTg6XFx0XFx0LypcXG4gMjU5OlxcdFxcdCAqIENvdW50ZXIgc2hvdWxkIG5ldmVyIGdvIHRvIHplcm8gaGVyZS4gT25seSBzaHJpbmtlciBjYW4gcHV0XFxuIDI2MDpcXHRcXHQgKiBsYXN0IHJlZmVyZW5jZS5cXG4gMjYxOlxcdFxcdCAqL1xcbiAyNjI6XFx0XFx0QlVHX09OKGF0b21pY19kZWNfYW5kX3Rlc3QoXFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCkpO1xcbiAyNjM6XFx0fVxcbiAyNjQ6XFx0XFxuIDI2NTpcXHRzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIDI2NjpcXHR7XFxuIDI2NzpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU8pKVxcbiAyNjg6XFx0XFx0XFx0cmV0dXJuIGh1Z2VfemVyb19mb2xpbztcXG4gMjY5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxOTo1MDoyMi43ODUwMTM4NjZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDczMjc4MTk5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gd2VsbC12ZXJzZWQgaW4ga2VybmVsIGludGVybmFsczpcblxuKipEaXZpbmcgaW50byB0aGUgVEhQIEluaXRpYWxpemF0aW9uKipcblxuUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYHRocF9zaHJpbmtlcl9pbml0YC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBzb21ldGhpbmcgcG90ZW50aWFsbHkgY3JpdGljYWwsIGVzcGVjaWFsbHkgc2luY2UgaXQncyBpbnZvbHZlZCBpbiBib290LXRpbWUgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBjaGFuZ2luZyAqZXhhY3RseSogd2l0aGluIHRoYXQgZnVuY3Rpb24uIExldCdzIGdldCB0aGUgY29udGV4dCwgYW5kIGxldCdzIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNpbmNlIGB0aHBfc2hyaW5rZXJfaW5pdGAgaGFuZGxlcyB0aGUgaW5pdGlhbGl6YXRpb24sIGl0J3MgcHJldHR5IHNhZmUgdG8gYXNzdW1lIGl0J3MgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBJIG5lZWQgdG8gcmV2aWV3IHdoYXQgdGhlIGZ1bmN0aW9uIGlzIGN1cnJlbnRseSBkb2luZywgd2hhdCB0aGUgcGF0Y2ggbW9kaWZpZXMsIGFuZCBhbnkgcmVsYXRlZCBmdW5jdGlvbnMuIExldCdzIHNlZSB3aGF0J3MgYmVpbmcgdHdlYWtlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjczOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTk6NTA6MzMuNTE3Nzk4ODM3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNTkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdlX21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk1MDpcXHRpbnQgZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gOTUxOlxcdHtcXG4gOTUyOlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuIDk1MzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gOTU0OlxcdFxcdHJldHVybiBmb2xpb19tZW1jZ19saXN0X2xydV9hbGxvYyhmb2xpbywgXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgR0ZQX0tFUk5FTCk7XFxuIDk1NTpcXHR9XFxuIDk1NjpcXHRcXG4gOTU3OlxcdHN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXFxuIDk1ODpcXHR7XFxuIDk1OTpcXHRcXHRkZWZlcnJlZF9zcGxpdF9zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfFxcbiA5NjA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFNIUklOS0VSX01FTUNHX0FXQVJFLFxcbiA5NjE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcXCJ0aHAtZGVmZXJyZWRfc3BsaXRcXFwiKTtcXG4gOTYyOlxcdFxcdGlmICghZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpXFxuIDk2MzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gOTY0OlxcdFxcbiA5NjU6XFx0XFx0aWYgKGxpc3RfbHJ1X2luaXRfbWVtY2dfa2V5KFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsXFxuIDk2NjpcXHRcXHRcXHRcXHRcXHQgICAgZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIsXFxuIDk2NzpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmRlZmVycmVkX3NwbGl0X2tleSkpIHtcXG4gOTY4OlxcdFxcdFxcdHNocmlua2VyX2ZyZWUoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpO1xcbiA5Njk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDk3MDpcXHRcXHR9XFxuIDk3MTpcXHRcXG4gOTcyOlxcdFxcdGRlZmVycmVkX3NwbGl0X3Nocmlua2VyLVxcdTAwM2Vjb3VudF9vYmplY3RzID0gZGVmZXJyZWRfc3BsaXRfY291bnQ7XFxuIDk3MzpcXHRcXHRkZWZlcnJlZF9zcGxpdF9zaHJpbmtlci1cXHUwMDNlc2Nhbl9vYmplY3RzID0gZGVmZXJyZWRfc3BsaXRfc2NhbjtcXG4gOTc0OlxcdFxcdHNocmlua2VyX3JlZ2lzdGVyKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcXG4gOTc1OlxcdFxcbiA5NzY6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPKSkge1xcbiA5Nzc6XFx0XFx0XFx0LypcXG4gOTc4OlxcdFxcdFxcdCAqIEJ1bXAgdGhlIHJlZmVyZW5jZSBvZiB0aGUgaHVnZV96ZXJvX2ZvbGlvIGFuZCBkbyBub3RcXG4gOTc5OlxcdFxcdFxcdCAqIGluaXRpYWxpemUgdGhlIHNocmlua2VyLlxcbiA5ODA6XFx0XFx0XFx0ICpcXG4gOTgxOlxcdFxcdFxcdCAqIGh1Z2VfemVyb19mb2xpbyB3aWxsIGFsd2F5cyBiZSBOVUxMIG9uIGZhaWx1cmUuIFdlIGFzc3VtZVxcbiA5ODI6XFx0XFx0XFx0ICogdGhhdCBnZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBtb3N0IGxpa2VseSBub3QgZmFpbCBhc1xcbiA5ODM6XFx0XFx0XFx0ICogdGhwX3Nocmlua2VyX2luaXQoKSBpcyBpbnZva2VkIGVhcmx5IG9uIGR1cmluZyBib290LlxcbiA5ODQ6XFx0XFx0XFx0ICovXFxuIDk4NTpcXHRcXHRcXHRpZiAoIWdldF9odWdlX3plcm9fZm9saW8oKSkge1xcbiA5ODY6XFx0XFx0XFx0XFx0cHJfd2FybihcXFwiQWxsb2NhdGluZyBwZXJzaXN0ZW50IGh1Z2UgemVybyBmb2xpbyBmYWlsZWRcXFxcblxcXCIpO1xcbiA5ODc6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDk4ODpcXHRcXHRcXHR9XFxuIDk4OTpcXHRcXG4gOTkwOlxcdFxcdFxcdC8qIFNldCB1cCBkdXJpbmcgZWFybHkgYm9vdDsgbm8gZXhwbGljaXQgVExCIGZsdXNoIGlzIG5lZWRlZCBoZXJlLiAqL1xcbiA5OTE6XFx0XFx0XFx0c2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChmb2xpb19hZGRyZXNzKGh1Z2VfemVyb19mb2xpbyksXFxuIDk5MjpcXHRcXHRcXHRcXHRcXHRcXHQgIEhQQUdFX1BNRF9OUik7XFxuIDk5MzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gOTk0OlxcdFxcdH1cXG4gOTk1OlxcdFxcbiA5OTY6XFx0XFx0aHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyID0gc2hyaW5rZXJfYWxsb2MoMCwgXFxcInRocC16ZXJvXFxcIik7XFxuIDk5NzpcXHRcXHRpZiAoIWh1Z2VfemVyb19mb2xpb19zaHJpbmtlcikge1xcbiA5OTg6XFx0XFx0XFx0c2hyaW5rZXJfZnJlZShkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcik7XFxuIDk5OTpcXHRcXHRcXHRsaXN0X2xydV9kZXN0cm95KFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxOTo1MDozMy41MTgzMDc3NDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTk1MjU4NDIxMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGZ1bmN0aW9uLiBCYXNlZCBvbiB0aGUgY3VycmVudCBjb2RlLCBpdCBsb29rcyBsaWtlIGl0J3MgKmV4Y2x1c2l2ZWx5KiBjYWxsZWQgZnJvbSBgdGhwX3Nocmlua2VyX2luaXRgLiBOb3csIHRoYXQncyBhIHByZXR0eSBzcGVjaWZpYyBkZXBlbmRlbmN5IHdoZW4geW91IGNvbnNpZGVyIHRoYXQgaXQncyBvbmx5IGNhbGxlZCB3aGVuIGBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9gIGlzIGVuYWJsZWQuIE15IGZpcnN0IGluc3RpbmN0IGhlcmUgaXMgdG8gcXVlc3Rpb24gdGhpcy4gSXMgdGhpcyAqcmVhbGx5KiB0aGUgb25seSBwbGFjZSB3aGVyZSBpdCdzIHVzZWQ/IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhpcy4gSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgdGhlcmUgYXJlbid0IG90aGVyIGNhbGwgc2l0ZXMuIExldCBtZSBydW4gYSBxdWljayBzZWFyY2ggdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MTUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE5OjUwOjUzLjA0NDE1MzA2NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc0OTUyODY3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaD0xNj1pbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpO1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjE3OmludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjE4OiNkZWZpbmUgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtMTktYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKTtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYz0zNTg9aW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKVxcbi0tXFxuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jLTM2Ny1cXG5hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmM6MzY4OmludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jLTM2OS17XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg9OTE9aW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6OTI6aW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjkzOiNkZWZpbmUgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTk0LWJvb2wga2VybmVsX3BhZ2VfcHJlc2VudChzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI2NTc9aW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjY0LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjY2NTppbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjY2Ni17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaD0zNz1zdGF0aWMgaW5saW5lIGludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtNDMtLyoqXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg6NDQ6ICogc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCAtIG1ha2UgZGlyZWN0LW1hcCBtYXBwaW5ncyByZWFkLW9ubHlcXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC00NS0gKiBAYWRkcjogc3RhcnQgYWRkcmVzcyBpbiB0aGUgZGlyZWN0IG1hcFxcbi0tXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtNTItICovXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg6NTM6c3RhdGljIGlubGluZSBpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLFxcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTU0LVxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg9Njk9c3RhdGljIGlubGluZSBib29sIGNhbl9zZXRfZGlyZWN0X21hcCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtNzUtXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg6NzY6I2lmbmRlZiBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg6Nzc6c3RhdGljIGlubGluZSBpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLFxcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTc4LVxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtODItXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg6ODM6I2RlZmluZSBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hcXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC04NC0jZW5kaWZcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9OTU3PXN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTk5MC1cXHRcXHQvKiBTZXQgdXAgZHVyaW5nIGVhcmx5IGJvb3Q7IG5vIGV4cGxpY2l0IFRMQiBmbHVzaCBpcyBuZWVkZWQgaGVyZS4gKi9cXG5tbS9odWdlX21lbW9yeS5jOjk5MTpcXHRcXHRzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGZvbGlvX2FkZHJlc3MoaHVnZV96ZXJvX2ZvbGlvKSxcXG5tbS9odWdlX21lbW9yeS5jLTk5Mi1cXHRcXHRcXHRcXHRcXHQgIEhQQUdFX1BNRF9OUik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE5OjUwOjU4Ljc5MzY5MjgzM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjc1Njc5NjQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEFuYWx5c2lzOiBIdWdlIFplcm8gRm9saW8gUmVhZC1Pbmx5IFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoYCwgYW5kIHRoZSBvbmx5IHBsYWNlIGl0J3MgY2FsbGVkIGlzIHdpdGhpbiBgdGhwX3Nocmlua2VyX2luaXRgLiAgQW5kICp0aGF0KiBpcyBhbiBgX19pbml0YCBmdW5jdGlvbiwgd2hpY2ggaXMgb25seSBleGVjdXRlZCBkdXJpbmcgYm9vdCBhbmQgdGhlbiBkaXNjYXJkZWQuIFRoaXMgbWVhbnMgaXQncyB1bnJlYWNoYWJsZSBhZnRlciB0aGUga2VybmVsIGlzIHVwIGFuZCBydW5uaW5nIOKAkyBhIGtleSBwb2ludC5cblxuSSBpbml0aWFsbHkgY29uc2lkZXJlZCB3aGV0aGVyIHRoZXJlIHdhcyBzb21lIHNpZGUgZWZmZWN0LCBzb21ldGhpbmcgKmVsc2UqIHRoZSBmdXp6ZXIgY291bGQgdHJpZ2dlci4gVGhlIGNoYW5nZSBtYWtlcyB0aGUgaHVnZSB6ZXJvIGZvbGlvIHJlYWQtb25seSBpbiB0aGUgZGlyZWN0IG1hcC4gTXkgZmlyc3QgdGhvdWdodCB3YXMsIFwiQ291bGQgYSB3cml0ZSB0byBpdCBub3cgY2F1c2UgYSBjcmFzaCB0aGUgZnV6emVyIGNvdWxkIGRldGVjdD9cIiAgWWVzLCBpdCB3b3VsZCwgYnV0Li4uIHRoZSBodWdlIHplcm8gZm9saW8gaXMgKnN1cHBvc2VkKiB0byBiZSByZWFkLW9ubHkgYW55d2F5ISBUaGlzIHBhdGNoIGlzIGhhcmRlbmluZywgcHJldmVudGluZyBhY2NpZGVudGFsIG9yIG1hbGljaW91cyB3cml0ZXMgdG8gaXQgYW5kIHR1cm5pbmcgdGhlbSBpbnRvIGNyYXNoZXMuIEdvb2QgZm9yIHNlY3VyaXR5LCBidXQgYSBjcmFzaCB3b3VsZG4ndCBpbmRpY2F0ZSBzb21ldGhpbmcgbmV3IGlzIGZ1enphYmxlLlxuXG5TbywgdGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlICpuZXcqLCByZWFjaGFibGUgY29kZSBwYXRocyBwZXIgc2UuICBJdCBjaGFuZ2VzIG1lbW9yeSBwcm90ZWN0aW9uLiBJZiBXb3J0aEZ1enppbmcgd2VyZSB0cnVlLCBJJ2QgaGF2ZSB0byBpZGVudGlmeSB3aGF0IHRvIGZvY3VzIG9uLiBCdXQgdGhlcmUncyBubyBzcGVjaWZpYyBmdW5jdGlvbiB0byB0YXJnZXQgYmVjYXVzZSB0aGUgcHJvdGVjdGlvbiBhcHBsaWVzIGdsb2JhbGx5IHRvIHRoZSBodWdlIHplcm8gZm9saW8uIEFueSBjb2RlIHRoYXQgZGVhbHMgd2l0aCBUSFAgY291bGQgdGhlb3JldGljYWxseSBpbnRlcmFjdCB3aXRoIGl0LCBidXQgSSBjYW4ndCBwaW5wb2ludCBhIHNwZWNpZmljIGVudHJ5IHBvaW50IHRoYXQncyBuZXdseSBleHBvc2VkLlxuXG5UaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIFRoaXMgY29kZSwgdGhlIG5ldyBmdW5jdGlvbiBhbmQgdGhlIGNhbGwgdG8gaXQsIGlzIG9ubHkgZXhlY3V0ZWQgZHVyaW5nIGJvb3QgYW5kIGlzIG5vdCByZWFjaGFibGUgZHVyaW5nIHRoZSBmdXp6aW5nIHBoYXNlLlxuXG5FdmVuIGlmIEkgKmNvdWxkKiB0cmlnZ2VyIGEgd3JpdGUgdG8gdGhlIGZvbGlvICphZnRlciogYm9vdCwgdGhlIHBhdGNoIHdvdWxkIG9ubHkgY2hhbmdlIGFuIGV4aXN0aW5nLCBwb3NzaWJseSBlcnJvbmVvdXMsIGJlaGF2aW9yIGludG8gYSBjcmFzaCwgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgbmV3IGZ1bmN0aW9uYWxpdHkuIFNvLCBiYXNlZCBvbiB0aGUgcHJvbXB0J3MgaW5zdHJ1Y3Rpb25zLCBhbmQgZ2l2ZW4gdGhhdCB0aGUgYWRkZWQgY29kZSBpcyBpbmFjY2Vzc2libGUgYWZ0ZXIgYm9vdCwgSSBjYW5ub3QgcHJvdmlkZSBhbnkgbWVhbmluZ2Z1bCBgRm9jdXNTeW1ib2xzYC5cblxuSSByZWNoZWNrZWQgdGhlIGNvZGUgYW5kIGNvbmZpcm1lZCB0aGF0IGBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoYCBpc24ndCBleHBvcnRlZCBhbmQgaXNuJ3QgY2FsbGVkIGFueXdoZXJlIGVsc2UuIEl0J3Mgc3RyaWN0bHkgYSBib290LXRpbWUgaGFyZGVuaW5nIG1lYXN1cmUuXG5cbkkgd2lsbCBmb3JtdWxhdGUgdGhlIHJlYXNvbmluZyBhczogVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGFuZCBjYWxscyBpdCBmcm9tIGB0aHBfc2hyaW5rZXJfaW5pdGAsIHdoaWNoIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uIGV4ZWN1dGVkIG9ubHkgb25jZSBkdXJpbmcgZWFybHkga2VybmVsIGJvb3QuIFNpbmNlIHRoaXMgY29kZSBjYW5ub3QgYmUgdHJpZ2dlcmVkIG9yIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgZHVyaW5nIHRoZSBmdXp6aW5nIHBoYXNlLCBpdCBpcyBub3QgcG9zc2libGUgdG8gZnV6eiB0aGlzIGNoYW5nZS4gV29ydGhGdXp6aW5nID0gZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNTgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE5OjUxOjExLjU1MDQ5MzIzMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQzNTg3MDU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9ODI0PWNvbmZpZyBBUkNIX1dBTlRTX1RIUF9TV0FQXFxuLS1cXG5tbS9LY29uZmlnLTgyNi1cXG5tbS9LY29uZmlnOjgyNzpjb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cXG5tbS9LY29uZmlnLTgyOC1cXHRib29sIFxcXCJBbGxvY2F0ZSBhIFBNRCBzaXplZCBmb2xpbyBmb3IgemVyb2luZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTk6NTE6MTQuOTg2MzcxNjYyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5ODY2NDU0ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBJJ20gZGVlcCBpbiB0aGUgY29kZTpcblxuKipUaGlua2luZyBUaHJvdWdoIFRoaXMgQm9vdC1UaW1lIEZsYWcqKlxuXG5SaWdodCwgaXQncyBjb25maXJtZWQuICpUaGF0KiBjb25kaXRpb24gaXMgdHJ1ZS4gQnV0IGhhbmcgb24uLi4gdGhpcyBjb2RlLCB0aGlzIGNydWNpYWwgcGllY2UsIGl0IG9ubHkgcnVucyBkdXJpbmcgdGhlIGJvb3Qgc2VxdWVuY2UuIFRoYXQncyB0aGUga2V5LiBUaGF0IGNoYW5nZXMgZXZlcnl0aGluZyBpbiB0aGUgY29udGV4dCBvZiBteSB1bmRlcnN0YW5kaW5nLlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBpcyBvbmx5IGV4ZWN1dGVkIGR1cmluZyBib290IEkgc2hvdWxkIGNhbGwgc2V0LXJlc3VsdHMgd2l0aCBXb3J0aEZ1enppbmc9ZmFsc2UuIEdvdCBpdC4gTm8gbmVlZCB0byBtdWRkeSB0aGUgd2F0ZXJzIG9yIGNvbXBsaWNhdGUgdGhpbmdzIGR1cmluZyB0aGUgXCJub3JtYWxcIiBydW50aW1lLiBDbGVhciBhbmQgY29uY2lzZSwgZXhhY3RseSBhcyBpdCBzaG91bGQgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODc0LCJPdXRwdXRUb2tlbnMiOjExOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE5OjUxOjIyLjk3MzAyMDM2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAgYW5kIGNhbGxzIGl0IGZyb20gYHRocF9zaHJpbmtlcl9pbml0YCwgd2hpY2ggaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24uIFRoaXMgY29kZSBpcyBleGVjdXRlZCBleGFjdGx5IG9uY2UgZHVyaW5nIGVhcmx5IGtlcm5lbCBib290IHRvIGFwcGx5IG1lbW9yeSBwcm90ZWN0aW9ucyB0byB0aGUgaHVnZSB6ZXJvIGZvbGlvLiBTaW5jZSB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBjYW5ub3QgYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIG9yIGV4ZWN1dGVkIGR1cmluZyB0aGUgcG9zdC1ib290IGZ1enppbmcgcGhhc2UsIHRoaXMgcGF0Y2ggY2Fubm90IGJlIGFjdGl2ZWx5IGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGFuZCBjYWxscyBpdCBmcm9tIGB0aHBfc2hyaW5rZXJfaW5pdGAsIHdoaWNoIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLiBUaGlzIGNvZGUgaXMgZXhlY3V0ZWQgZXhhY3RseSBvbmNlIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdCB0byBhcHBseSBtZW1vcnkgcHJvdGVjdGlvbnMgdG8gdGhlIGh1Z2UgemVybyBmb2xpby4gU2luY2UgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgY2Fubm90IGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSBvciBleGVjdXRlZCBkdXJpbmcgdGhlIHBvc3QtYm9vdCBmdXp6aW5nIHBoYXNlLCB0aGlzIHBhdGNoIGNhbm5vdCBiZSBhY3RpdmVseSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowg8hms[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-06 19:20:35 +0000 UTC FinishedAt: 2026-07-06 19:51:24 +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+CgkJCTx0ZD4yMDI2LzA3LzA2IDE5OjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGFuZCBjYWxscyBpdCBmcm9tIGB0aHBfc2hyaW5rZXJfaW5pdGAsIHdoaWNoIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLiBUaGlzIGNvZGUgaXMgZXhlY3V0ZWQgZXhhY3RseSBvbmNlIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdCB0byBhcHBseSBtZW1vcnkgcHJvdGVjdGlvbnMgdG8gdGhlIGh1Z2UgemVybyBmb2xpby4gU2luY2UgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgY2Fubm90IGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSBvciBleGVjdXRlZCBkdXJpbmcgdGhlIHBvc3QtYm9vdCBmdXp6aW5nIHBoYXNlLCB0aGlzIHBhdGNoIGNhbm5vdCBiZSBhY3RpdmVseSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE5OjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOGQ4M2IzMmY0ZmU0YWNjZGRkYzZiMjNhNDYyYmZmY2FlN2Q4NmJjYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMTk6NDg6NDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxuaW5kZXggOTBmNjFiMTcyNzVlMWIuLjcwODMyNjAzMDNjM2NkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oXG5AQCAtMTQsNiAmIzQzOzE0LDggQEAgaW50IHNldF9tZW1vcnlfdmFsaWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGludCBlbmFibGUpO1xuIGludCBzZXRfZGlyZWN0X21hcF9pbnZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UpO1xuIGludCBzZXRfZGlyZWN0X21hcF9kZWZhdWx0X25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UpO1xuIGludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBuciwgYm9vbCB2YWxpZCk7XG4mIzQzO2ludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuJiM0MzsjZGVmaW5lIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2ggc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaFxuIGJvb2wga2VybmVsX3BhZ2VfcHJlc2VudChzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gXG4gaW50IHNldF9tZW1vcnlfZW5jcnlwdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMgYi9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmNcbmluZGV4IGJiZTk4YWM5YWQ4YzY3Li4xYTY3NjkwNzM1NThkMyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jXG5AQCAtMzY1LDYgJiM0MzszNjUsMTYgQEAgaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKVxuIFx0cmV0dXJuIHNldF9tZW1vcnlfdmFsaWQoYWRkciwgbnIsIHZhbGlkKTtcbiB9XG4gXG4mIzQzO2ludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWNhbl9zZXRfZGlyZWN0X21hcCgpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB1cGRhdGVfcmFuZ2VfcHJvdCgodW5zaWduZWQgbG9uZylhZGRyLCBQQUdFX1NJWkUgKiBucl9wYWdlcyxcbiYjNDM7XHRcdFx0XHQgX19wZ3Byb3QoUFRFX1JET05MWSksXG4mIzQzO1x0XHRcdFx0IF9fcGdwcm90KFBURV9XUklURSkpO1xuJiM0Mzt9XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DXG4gLypcbiAgKiBUaGlzIGlzIC0gYXBhcnQgZnJvbSB0aGUgcmV0dXJuIHZhbHVlIC0gZG9pbmcgdGhlIHNhbWVcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcbmluZGV4IDQzNjJjMjZhYTk5MmRiLi5iZDM4MTdlMDYwNTJjMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oXG5AQCAtODksNiAmIzQzOzg5LDggQEAgaW50IHNldF9wYWdlc19ydyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzKTtcbiBpbnQgc2V0X2RpcmVjdF9tYXBfaW52YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlKTtcbiBpbnQgc2V0X2RpcmVjdF9tYXBfZGVmYXVsdF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlKTtcbiBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpO1xuJiM0MztpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiYjNDM7I2RlZmluZSBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hcbiBib29sIGtlcm5lbF9wYWdlX3ByZXNlbnQoc3RydWN0IHBhZ2UgKnBhZ2UpO1xuIFxuIGV4dGVybiBpbnQga2VybmVsX3NldF90b19yZWFkb25seTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuaW5kZXggZDAyM2E0MGExZTAzNDUuLjU5ODdmNGM4NGY2ZmU5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuQEAgLTI2NjIsNiAmIzQzOzI2NjIsMjEgQEAgaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKVxuIFx0cmV0dXJuIF9fc2V0X3BhZ2VzX25wKHBhZ2UsIG5yKTtcbiB9XG4gXG4mIzQzO2ludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRlbXBhZGRyID0gKHVuc2lnbmVkIGxvbmcpYWRkcjtcbiYjNDM7XHRzdHJ1Y3QgY3BhX2RhdGEgY3BhID0ge1xuJiM0MztcdFx0LnZhZGRyID0gXHUwMDI2dGVtcGFkZHIsXG4mIzQzO1x0XHQucGdkID0gTlVMTCxcbiYjNDM7XHRcdC5udW1wYWdlcyA9IG5yX3BhZ2VzLFxuJiM0MztcdFx0Lm1hc2tfc2V0ID0gX19wZ3Byb3QoMCksXG4mIzQzO1x0XHQubWFza19jbHIgPSBfX3BncHJvdChfUEFHRV9SVyB8IF9QQUdFX0RJUlRZKSxcbiYjNDM7XHRcdC5mbGFncyA9IENQQV9OT19DSEVDS19BTElBUyxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbiYjNDM7fVxuJiM0MztcbiAjaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQ1xuIHZvaWQgX19rZXJuZWxfbWFwX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMsIGludCBlbmFibGUpXG4ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oIGIvaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmhcbmluZGV4IDMwMzBkOTI0NWY1YWM4Li5hOTA1MDc0ZmIyMWRlMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaFxuQEAgLTQwLDYgJiM0Mzs0MCwyMiBAQCBzdGF0aWMgaW5saW5lIGludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCAtIG1ha2UgZGlyZWN0LW1hcCBtYXBwaW5ncyByZWFkLW9ubHlcbiYjNDM7ICogQGFkZHI6IHN0YXJ0IGFkZHJlc3MgaW4gdGhlIGRpcmVjdCBtYXBcbiYjNDM7ICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgcGFnZXMgc3RhcnRpbmcgYXQgQGFkZHJcbiYjNDM7ICpcbiYjNDM7ICogTWFrZSB0aGUgZGlyZWN0LW1hcCBtYXBwaW5ncyBmb3IgQG5yX3BhZ2VzIHBhZ2VzIHN0YXJ0aW5nIGF0IEBhZGRyXG4mIzQzOyAqIHJlYWQtb25seSwgd2l0aG91dCBmbHVzaGluZyBUTEJzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciB3aGVuIHVuc3VwcG9ydGVkLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsXG4mIzQzO1x0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbiBcdHJldHVybiB0cnVlO1xuQEAgLTU2LDYgJiM0Mzs3MiwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3NldF9kaXJlY3RfbWFwKHZvaWQpXG4gfVxuICNkZWZpbmUgY2FuX3NldF9kaXJlY3RfbWFwIGNhbl9zZXRfZGlyZWN0X21hcFxuICNlbmRpZlxuJiM0MztcbiYjNDM7I2lmbmRlZiBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkcixcbiYjNDM7XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNkZWZpbmUgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXG4mIzQzOyNlbmRpZlxuICNlbmRpZiAvKiBDT05GSUdfQVJDSF9IQVNfU0VUX0RJUkVDVF9NQVAgKi9cbiBcbiAjaWZkZWYgQ09ORklHX1g4Nl82NFxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCBjMDg5MmNjNTMzYTlmYy4uM2VmNTZjYWRhMTA4ZDUgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtNDEsNiAmIzQzOzQxLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZ2FsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZ2FsbG9jX3RhZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZXdhbGsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdGxiLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG5AQCAtOTgxLDggJiM0Mzs5ODIsMTQgQEAgc3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcbiBcdFx0ICogdGhhdCBnZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBtb3N0IGxpa2VseSBub3QgZmFpbCBhc1xuIFx0XHQgKiB0aHBfc2hyaW5rZXJfaW5pdCgpIGlzIGludm9rZWQgZWFybHkgb24gZHVyaW5nIGJvb3QuXG4gXHRcdCAqL1xuLVx0XHRpZiAoIWdldF9odWdlX3plcm9fZm9saW8oKSlcbiYjNDM7XHRcdGlmICghZ2V0X2h1Z2VfemVyb19mb2xpbygpKSB7XG4gXHRcdFx0cHJfd2FybihcJiMzNDtBbGxvY2F0aW5nIHBlcnNpc3RlbnQgaHVnZSB6ZXJvIGZvbGlvIGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIFNldCB1cCBkdXJpbmcgZWFybHkgYm9vdDsgbm8gZXhwbGljaXQgVExCIGZsdXNoIGlzIG5lZWRlZCBoZXJlLiAqL1xuJiM0MztcdFx0c2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChmb2xpb19hZGRyZXNzKGh1Z2VfemVyb19mb2xpbyksXG4mIzQzO1x0XHRcdFx0XHQgIEhQQUdFX1BNRF9OUik7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE5OjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGFuZCBjYWxscyBpdCBmcm9tIGB0aHBfc2hyaW5rZXJfaW5pdGAsIHdoaWNoIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLiBUaGlzIGNvZGUgaXMgZXhlY3V0ZWQgZXhhY3RseSBvbmNlIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdCB0byBhcHBseSBtZW1vcnkgcHJvdGVjdGlvbnMgdG8gdGhlIGh1Z2UgemVybyBmb2xpby4gU2luY2UgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgY2Fubm90IGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSBvciBleGVjdXRlZCBkdXJpbmcgdGhlIHBvc3QtYm9vdCBmdXp6aW5nIHBoYXNlLCB0aGlzIHBhdGNoIGNhbm5vdCBiZSBhY3RpdmVseSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ZDgzYjMyZjRmZTRhY2NkZGRjNmIyM2E0NjJiZmZjYWU3ZDg2YmNiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgNiAxOTo0ODo0MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgKaW5kZXggOTBmNjFiMTcyNzVlMWIuLjcwODMyNjAzMDNjM2NkIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaApAQCAtMTQsNiAmIzQzOzE0LDggQEAgaW50IHNldF9tZW1vcnlfdmFsaWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGludCBlbmFibGUpOwogaW50IHNldF9kaXJlY3RfbWFwX2ludmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSk7CiBpbnQgc2V0X2RpcmVjdF9tYXBfZGVmYXVsdF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlKTsKIGludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBuciwgYm9vbCB2YWxpZCk7CiYjNDM7aW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7CiYjNDM7I2RlZmluZSBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2gKIGJvb2wga2VybmVsX3BhZ2VfcHJlc2VudChzdHJ1Y3QgcGFnZSAqcGFnZSk7CiAKIGludCBzZXRfbWVtb3J5X2VuY3J5cHRlZCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMgYi9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMKaW5kZXggYmJlOThhYzlhZDhjNjcuLjFhNjc2OTA3MzU1OGQzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jCkBAIC0zNjUsNiAmIzQzOzM2NSwxNiBAQCBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpCiAJcmV0dXJuIHNldF9tZW1vcnlfdmFsaWQoYWRkciwgbnIsIHZhbGlkKTsKIH0KIAomIzQzO2ludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiYjNDM7ewomIzQzOwlpZiAoIWNhbl9zZXRfZGlyZWN0X21hcCgpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB1cGRhdGVfcmFuZ2VfcHJvdCgodW5zaWduZWQgbG9uZylhZGRyLCBQQUdFX1NJWkUgKiBucl9wYWdlcywKJiM0MzsJCQkJIF9fcGdwcm90KFBURV9SRE9OTFkpLAomIzQzOwkJCQkgX19wZ3Byb3QoUFRFX1dSSVRFKSk7CiYjNDM7fQomIzQzOwogI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKIC8qCiAgKiBUaGlzIGlzIC0gYXBhcnQgZnJvbSB0aGUgcmV0dXJuIHZhbHVlIC0gZG9pbmcgdGhlIHNhbWUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaAppbmRleCA0MzYyYzI2YWE5OTJkYi4uYmQzODE3ZTA2MDUyYzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgKQEAgLTg5LDYgJiM0Mzs4OSw4IEBAIGludCBzZXRfcGFnZXNfcncoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcyk7CiBpbnQgc2V0X2RpcmVjdF9tYXBfaW52YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlKTsKIGludCBzZXRfZGlyZWN0X21hcF9kZWZhdWx0X25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UpOwogaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKTsKJiM0MztpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKJiM0MzsjZGVmaW5lIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2ggc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaAogYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKTsKIAogZXh0ZXJuIGludCBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMKaW5kZXggZDAyM2E0MGExZTAzNDUuLjU5ODdmNGM4NGY2ZmU5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMKQEAgLTI2NjIsNiAmIzQzOzI2NjIsMjEgQEAgaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKQogCXJldHVybiBfX3NldF9wYWdlc19ucChwYWdlLCBucik7CiB9CiAKJiM0MztpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyB0ZW1wYWRkciA9ICh1bnNpZ25lZCBsb25nKWFkZHI7CiYjNDM7CXN0cnVjdCBjcGFfZGF0YSBjcGEgPSB7CiYjNDM7CQkudmFkZHIgPSAmYW1wO3RlbXBhZGRyLAomIzQzOwkJLnBnZCA9IE5VTEwsCiYjNDM7CQkubnVtcGFnZXMgPSBucl9wYWdlcywKJiM0MzsJCS5tYXNrX3NldCA9IF9fcGdwcm90KDApLAomIzQzOwkJLm1hc2tfY2xyID0gX19wZ3Byb3QoX1BBR0VfUlcgfCBfUEFHRV9ESVJUWSksCiYjNDM7CQkuZmxhZ3MgPSBDUEFfTk9fQ0hFQ0tfQUxJQVMsCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscigmYW1wO2NwYSwgMSk7CiYjNDM7fQomIzQzOwogI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKIHZvaWQgX19rZXJuZWxfbWFwX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMsIGludCBlbmFibGUpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaCBiL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oCmluZGV4IDMwMzBkOTI0NWY1YWM4Li5hOTA1MDc0ZmIyMWRlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgKQEAgLTQwLDYgJiM0Mzs0MCwyMiBAQCBzdGF0aWMgaW5saW5lIGludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLAogCXJldHVybiAwOwogfQogCiYjNDM7LyoqCiYjNDM7ICogc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCAtIG1ha2UgZGlyZWN0LW1hcCBtYXBwaW5ncyByZWFkLW9ubHkKJiM0MzsgKiBAYWRkcjogc3RhcnQgYWRkcmVzcyBpbiB0aGUgZGlyZWN0IG1hcAomIzQzOyAqIEBucl9wYWdlczogbnVtYmVyIG9mIHBhZ2VzIHN0YXJ0aW5nIGF0IEBhZGRyCiYjNDM7ICoKJiM0MzsgKiBNYWtlIHRoZSBkaXJlY3QtbWFwIG1hcHBpbmdzIGZvciBAbnJfcGFnZXMgcGFnZXMgc3RhcnRpbmcgYXQgQGFkZHIKJiM0MzsgKiByZWFkLW9ubHksIHdpdGhvdXQgZmx1c2hpbmcgVExCcy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIHdoZW4gdW5zdXBwb3J0ZWQsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsCiYjNDM7CQkJCQkgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKQogewogCXJldHVybiB0cnVlOwpAQCAtNTYsNiAmIzQzOzcyLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fc2V0X2RpcmVjdF9tYXAodm9pZCkKIH0KICNkZWZpbmUgY2FuX3NldF9kaXJlY3RfbWFwIGNhbl9zZXRfZGlyZWN0X21hcAogI2VuZGlmCiYjNDM7CiYjNDM7I2lmbmRlZiBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLAomIzQzOwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2gKJiM0MzsjZW5kaWYKICNlbmRpZiAvKiBDT05GSUdfQVJDSF9IQVNfU0VUX0RJUkVDVF9NQVAgKi8KIAogI2lmZGVmIENPTkZJR19YODZfNjQKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IGMwODkyY2M1MzNhOWZjLi4zZWY1NmNhZGExMDhkNSAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC00MSw2ICYjNDM7NDEsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BnYWxsb2MuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wZ2FsbG9jX3RhZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2V3YWxrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NldF9tZW1vcnkuaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS90bGIuaCZndDsKICNpbmNsdWRlICYjMzQ7aW50ZXJuYWwuaCYjMzQ7CkBAIC05ODEsOCAmIzQzOzk4MiwxNCBAQCBzdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKQogCQkgKiB0aGF0IGdldF9odWdlX3plcm9fZm9saW8oKSB3aWxsIG1vc3QgbGlrZWx5IG5vdCBmYWlsIGFzCiAJCSAqIHRocF9zaHJpbmtlcl9pbml0KCkgaXMgaW52b2tlZCBlYXJseSBvbiBkdXJpbmcgYm9vdC4KIAkJICovCi0JCWlmICghZ2V0X2h1Z2VfemVyb19mb2xpbygpKQomIzQzOwkJaWYgKCFnZXRfaHVnZV96ZXJvX2ZvbGlvKCkpIHsKIAkJCXByX3dhcm4oJiMzNDtBbGxvY2F0aW5nIHBlcnNpc3RlbnQgaHVnZSB6ZXJvIGZvbGlvIGZhaWxlZFxuJiMzNDspOwomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogU2V0IHVwIGR1cmluZyBlYXJseSBib290OyBubyBleHBsaWNpdCBUTEIgZmx1c2ggaXMgbmVlZGVkIGhlcmUuICovCiYjNDM7CQlzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGZvbGlvX2FkZHJlc3MoaHVnZV96ZXJvX2ZvbGlvKSwKJiM0MzsJCQkJCSAgSFBBR0VfUE1EX05SKTsKIAkJcmV0dXJuIDA7CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE5OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NjAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBQYXRjaCBmb3IgUmVhZC1Pbmx5IEh1Z2UgWmVybyBGb2xpbyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgaW50cm9kdWNpbmcgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGFjcm9zcyBhIGZldyBhcmNoaXRlY3R1cmVzLCBzcGVjaWZpY2FsbHkgQVJNNjQgYW5kIHg4Niwgd2l0aCBzdXBwb3J0aW5nIGhlYWRlcnMgaW4gdGhlIGBpbmNsdWRlYCBkaXJlY3RvcnkuIEl0JiMzOTtzIGFsc28gdG91Y2hpbmcgYG1tL2h1Z2VfbWVtb3J5LmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7V2hhdCYjMzk7cyB0aGlzIG5ldyBmdW5jdGlvbiBkb2luZz8mIzM0OwoKUmlnaHQsIGl0IGxvb2tzIGxpa2UgdGhpcyBuZXcgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCB3aXRoaW4gYHRocF9zaHJpbmtlcl9pbml0KClgLCBhbmQgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIHdpdGggdGhlIGFkZHJlc3Mgb2YgdGhlIGBodWdlX3plcm9fZm9saW9gIGFuZCBgSFBBR0VfUE1EX05SYC4gQWgsIGFuZCB0aGVyZSBpdCBpczogaXQmIzM5O3MgbWFraW5nIHRoZSBodWdlIHplcm8gZm9saW8gcmVhZC1vbmx5IGluIHRoZSBkaXJlY3QgbWFwLiBOb3csICp0aGF0JiMzOTtzKiBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCBhbnkgYm9vdC10aW1lIGNoYW5nZXMuCgpIYW5nIG9uLi4uIGB0aHBfc2hyaW5rZXJfaW5pdCgpYCBpcyBhbiBgX19pbml0YCBmdW5jdGlvbi4gVGhhdCBtZWFucyBpdCYjMzk7cyBydW5uaW5nIGR1cmluZyBib290LiBPa2F5LCBzbyB0aGlzIHJlYWQtb25seSBjaGFuZ2UgaXMgaGFwcGVuaW5nIG9uY2UsIHZlcnkgZWFybHkgb24uIFRoZXJlIHNob3VsZG4mIzM5O3QgYmUgYW55IHVzZXJzcGFjZSBpbnRlcmFjdGlvbiBkaXJlY3RseSB0cmlnZ2VyaW5nIHRoaXMsIHdoaWNoIG1ha2VzIHRoaXMgY2hhbmdlIGEgbGl0dGxlIGxlc3MgaW1tZWRpYXRlbHkgY29uY2VybmluZywgYnV0IEkgc3RpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuIFRoZSBjb21tZW50IG9uIHRoZSBmb2xpbyBhZGRyZXNzIGRvZXMgbWVudGlvbiBzb21ldGhpbmcgYWJvdXQgZmFpbHVyZSwgc28gbWF5YmUgaXQmIzM5O3Mgbm90IGFsd2F5cyBkdXJpbmcgYm9vdC4KCk5vdywgd2h5IG1ha2UgdGhlIGh1Z2UgemVybyBmb2xpbyByZWFkLW9ubHk/IElzIHRoZXJlIGEgc2VjdXJpdHkgY29uY2Vybj8gUGVyZm9ybWFuY2U/IE15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlIHdoYXQgaXMgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZT8gQXJlIHRoZXJlIGZvbGxvdyB1cCBjb21taXRzPyBJcyB0aGlzIGEgY29tcGxldGUgc29sdXRpb24/CgpPa2F5LCBsZXQgbWUgY2hlY2sgd2hlcmUgYHRocF9zaHJpbmtlcl9pbml0YCBpcyBjYWxsZWQuIEl0JiMzOTtzIGFuIGBpbml0Y2FsbGAsIHNvIGxldCYjMzk7cyBsb29rIGF0IGBtbS9odWdlX21lbW9yeS5jYCBhZ2Fpbi4gSSBuZWVkIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBicm9hZGVyIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRoYXQgY2FsbHMgdGhpcyBmdW5jdGlvbiB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYW5kIHBvdGVudGlhbCByaXNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aHBfc2hyaW5rZXJfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz05NTA9aW50IGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZV9tZW1vcnkuYy05NTYtXG5tbS9odWdlX21lbW9yeS5jOjk1NzpzdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxubW0vaHVnZV9tZW1vcnkuYy05NTgte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtOTgyLVx0XHQgKiB0aGF0IGdldF9odWdlX3plcm9fZm9saW8oKSB3aWxsIG1vc3QgbGlrZWx5IG5vdCBmYWlsIGFzXG5tbS9odWdlX21lbW9yeS5jOjk4MzpcdFx0ICogdGhwX3Nocmlua2VyX2luaXQoKSBpcyBpbnZva2VkIGVhcmx5IG9uIGR1cmluZyBib290LlxubW0vaHVnZV9tZW1vcnkuYy05ODQtXHRcdCAqL1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTAxNz1zdGF0aWMgaW50IF9faW5pdCBodWdlcGFnZV9pbml0KHZvaWQpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMDM5LVxubW0vaHVnZV9tZW1vcnkuYzoxMDQwOlx0ZXJyID0gdGhwX3Nocmlua2VyX2luaXQoKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTA0MS1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY3MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipBbmFseXppbmcgdGhlIEh1Z2UgUGFnZSBJbml0aWFsaXphdGlvbiBTZXF1ZW5jZSoqCgpSaWdodCwgc28gYHRocF9zaHJpbmtlcl9pbml0YCBpcyBpbnZva2VkIGR1cmluZyBzeXN0ZW0gaW5pdGlhbGl6YXRpb24sIHNwZWNpZmljYWxseSBieSBgaHVnZXBhZ2VfaW5pdGAuIEFuZCBgaHVnZXBhZ2VfaW5pdGAgaXRzZWxmIGlzIGZsYWdnZWQgYXMgYW4gYF9faW5pdGAgZnVuY3Rpb24sIHNvIGl0JiMzOTtzIG9ubHkgY2FsbGVkIGR1cmluZyBrZXJuZWwgaW5pdGlhbGl6YXRpb24uIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVyZSYjMzk7cyBhIHVzZXItc3BhY2UgcGF0aHdheSB0byB0cmlnZ2VyIHRoYXQgaW5pdGlhbGl6YXRpb24uIE5vLCBiZWNhdXNlIGl0JiMzOTtzIHRpZWQgdG8gYW4gaW5pdGNhbGwuIFRoaXMgaXMgZ29vZCB0byBrbm93LCBiZWNhdXNlIGlmIHRoZXJlIHdlcmUgYSB1c2VyLXNwYWNlIGVxdWl2YWxlbnQgaXQgd291bGQgYmUgYSBwb3RlbnRpYWwgYXR0YWNrIHZlY3RvciBvciBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgYW4gZXllIG9uLgoKTm93LCB0aGlzIGZ1bmN0aW9uLCBgdGhwX3Nocmlua2VyX2luaXRgLCBpcyB3aGVyZSBgaHVnZV96ZXJvX2ZvbGlvYCBnZXRzIGFsbG9jYXRlZC4gSG1tLi4uIEkgd29uZGVyIGlmIHRoYXQgbWVtb3J5IGlzIGV2ZXIgZnJlZWQgYW5kIHRoZW4gcmVhbGxvY2F0ZWQgbGF0ZXI/IFRoYXQgd291bGQgaW5mbHVlbmNlIGhvdyBpdCYjMzk7cyB1c2VkIGVsc2V3aGVyZS4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgYW5kIHNlZSBob3cgYGdldF9odWdlX3plcm9fZm9saW9gIGhhbmRsZXMgdGhpbmdzLCB0byB1bmRlcnN0YW5kIGl0cyBsaWZlY3ljbGUuIFRoYXQgZnVuY3Rpb24gd2lsbCB0ZWxsIG1lIHRoZSBzdG9yeSBvZiBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIGFuZCByZS1hbGxvY2F0aW9uIGlmIHRoZXJlIGlzIGFueS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxOTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfaHVnZV96ZXJvX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTExNT11bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjI0LVxubW0vaHVnZV9tZW1vcnkuYzoyMjU6c3RhdGljIGJvb2wgZ2V0X2h1Z2VfemVyb19mb2xpbyh2b2lkKVxubW0vaHVnZV9tZW1vcnkuYy0yMjYte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjU2PXN0YXRpYyB2b2lkIHB1dF9odWdlX3plcm9fZm9saW8odm9pZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI2NC1cbm1tL2h1Z2VfbWVtb3J5LmM6MjY1OnN0cnVjdCBmb2xpbyAqbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL2h1Z2VfbWVtb3J5LmMtMjY2LXtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI3Mi1cbm1tL2h1Z2VfbWVtb3J5LmM6MjczOlx0aWYgKCFnZXRfaHVnZV96ZXJvX2ZvbGlvKCkpXG5tbS9odWdlX21lbW9yeS5jLTI3NC1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz05NTc9c3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTk4MS1cdFx0ICogaHVnZV96ZXJvX2ZvbGlvIHdpbGwgYWx3YXlzIGJlIE5VTEwgb24gZmFpbHVyZS4gV2UgYXNzdW1lXG5tbS9odWdlX21lbW9yeS5jOjk4MjpcdFx0ICogdGhhdCBnZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBtb3N0IGxpa2VseSBub3QgZmFpbCBhc1xubW0vaHVnZV9tZW1vcnkuYy05ODMtXHRcdCAqIHRocF9zaHJpbmtlcl9pbml0KCkgaXMgaW52b2tlZCBlYXJseSBvbiBkdXJpbmcgYm9vdC5cbm1tL2h1Z2VfbWVtb3J5LmMtOTg0LVx0XHQgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6OTg1Olx0XHRpZiAoIWdldF9odWdlX3plcm9fZm9saW8oKSkge1xubW0vaHVnZV9tZW1vcnkuYy05ODYtXHRcdFx0cHJfd2FybihcJiMzNDtBbGxvY2F0aW5nIHBlcnNpc3RlbnQgaHVnZSB6ZXJvIGZvbGlvIGZhaWxlZFxcblwmIzM0Oyk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xNDgzPXZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xNTA1LVx0XHRcdHJldHVybiBWTV9GQVVMVF9PT007XG5tbS9odWdlX21lbW9yeS5jOjE1MDY6XHRcdHplcm9fZm9saW8gPSBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKHZtYS1cdTAwM2V2bV9tbSk7XG5tbS9odWdlX21lbW9yeS5jLTE1MDctXHRcdGlmICh1bmxpa2VseSghemVyb19mb2xpbykpIHtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE4NzE9aW50IGNvcHlfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xOTM0LVx0XHQvKlxubW0vaHVnZV9tZW1vcnkuYzoxOTM1Olx0XHQgKiBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBuZXZlciBhbGxvY2F0ZSBhIG5ld1xubW0vaHVnZV9tZW1vcnkuYy0xOTM2LVx0XHQgKiBmb2xpbyBoZXJlLCBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgYSB6ZXJvIHBhZ2UgdG9cbi0tXG5tbS9odWdlX21lbW9yeS5jLTE5MzgtXHRcdCAqL1xubW0vaHVnZV9tZW1vcnkuYzoxOTM5Olx0XHRtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKGRzdF9tbSk7XG5tbS9odWdlX21lbW9yeS5jLTE5NDAtXHRcdGdvdG8gb3V0X3plcm9fcGFnZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxOTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzcxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgYGdldF9odWdlX3plcm9fZm9saW9gIEZ1bmN0aW9uIENhbGwqKgoKSG1tLCBzbyBgZ2V0X2h1Z2VfemVyb19mb2xpb2AgbWlnaHQgbm90IGJlIGNhbGxlZCBpbW1lZGlhdGVseSwgZGVwZW5kaW5nIG9uIHRoZSBwZXJzaXN0ZW5jZSBvZiB0aGUgaHVnZSB6ZXJvIGZvbGlvLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdyDigJMgaXQgZ2l2ZXMgdXMgc29tZSBmbGV4aWJpbGl0eS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGdldF9odWdlX3plcm9fZm9saW9gIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCBkb2VzLCBob3cgaXQgd29ya3MsIGFuZCB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgYXJlLiBLbm93aW5nIHRoaXMgd2lsbCBjbGFyaWZ5IHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0ICppcyogY2FsbGVkLCBhbmQgd2hldGhlciB0aGUgZGVsYXllZCBjYWxsIGludHJvZHVjZXMgYW55IHJpc2tzIG9yIG9wcG9ydHVuaXRpZXMgcmVnYXJkaW5nIHJlc291cmNlIG1hbmFnZW1lbnQgb3IgcGVyZm9ybWFuY2UuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMjA6XHRcdFx0cmV0dXJuIChzbWFwcyB8fCBpbl9wZikgPyBvcmRlcnMgOiAwO1xuIDIyMTpcdFxuIDIyMjpcdFx0cmV0dXJuIG9yZGVycztcbiAyMjM6XHR9XG4gMjI0Olx0XG4gMjI1Olx0c3RhdGljIGJvb2wgZ2V0X2h1Z2VfemVyb19mb2xpbyh2b2lkKVxuIDIyNjpcdHtcbiAyMjc6XHRcdHN0cnVjdCBmb2xpbyAqemVyb19mb2xpbztcbiAyMjg6XHRyZXRyeTpcbiAyMjk6XHRcdGlmIChsaWtlbHkoYXRvbWljX2luY19ub3RfemVybyhcdTAwMjZodWdlX3plcm9fcmVmY291bnQpKSlcbiAyMzA6XHRcdFx0cmV0dXJuIHRydWU7XG4gMjMxOlx0XG4gMjMyOlx0XHR6ZXJvX2ZvbGlvID0gZm9saW9fYWxsb2MoKEdGUF9UUkFOU0hVR0UgfCBfX0dGUF9aRVJPIHwgX19HRlBfWkVST1RBR1MpIFx1MDAyNlxuIDIzMzpcdFx0XHRcdFx0IH5fX0dGUF9NT1ZBQkxFLFxuIDIzNDpcdFx0XHRcdEhQQUdFX1BNRF9PUkRFUik7XG4gMjM1Olx0XHRpZiAoIXplcm9fZm9saW8pIHtcbiAyMzY6XHRcdFx0Y291bnRfdm1fZXZlbnQoVEhQX1pFUk9fUEFHRV9BTExPQ19GQUlMRUQpO1xuIDIzNzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMjM4Olx0XHR9XG4gMjM5Olx0XHQvKiBFbnN1cmUgemVybyBmb2xpbyB3b24mIzM5O3QgaGF2ZSBsYXJnZV9ybWFwcGFibGUgZmxhZyBzZXQuICovXG4gMjQwOlx0XHRmb2xpb19jbGVhcl9sYXJnZV9ybWFwcGFibGUoemVyb19mb2xpbyk7XG4gMjQxOlx0XHRwcmVlbXB0X2Rpc2FibGUoKTtcbiAyNDI6XHRcdGlmIChjbXB4Y2hnKFx1MDAyNmh1Z2VfemVyb19mb2xpbywgTlVMTCwgemVyb19mb2xpbykpIHtcbiAyNDM6XHRcdFx0cHJlZW1wdF9lbmFibGUoKTtcbiAyNDQ6XHRcdFx0Zm9saW9fcHV0KHplcm9fZm9saW8pO1xuIDI0NTpcdFx0XHRnb3RvIHJldHJ5O1xuIDI0NjpcdFx0fVxuIDI0NzpcdFx0V1JJVEVfT05DRShodWdlX3plcm9fcGZuLCBmb2xpb19wZm4oemVyb19mb2xpbykpO1xuIDI0ODpcdFxuIDI0OTpcdFx0LyogV2UgdGFrZSBhZGRpdGlvbmFsIHJlZmVyZW5jZSBoZXJlLiBJdCB3aWxsIGJlIHB1dCBiYWNrIGJ5IHNocmlua2VyICovXG4gMjUwOlx0XHRhdG9taWNfc2V0KFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCwgMik7XG4gMjUxOlx0XHRwcmVlbXB0X2VuYWJsZSgpO1xuIDI1MjpcdFx0Y291bnRfdm1fZXZlbnQoVEhQX1pFUk9fUEFHRV9BTExPQyk7XG4gMjUzOlx0XHRyZXR1cm4gdHJ1ZTtcbiAyNTQ6XHR9XG4gMjU1Olx0XG4gMjU2Olx0c3RhdGljIHZvaWQgcHV0X2h1Z2VfemVyb19mb2xpbyh2b2lkKVxuIDI1NzpcdHtcbiAyNTg6XHRcdC8qXG4gMjU5Olx0XHQgKiBDb3VudGVyIHNob3VsZCBuZXZlciBnbyB0byB6ZXJvIGhlcmUuIE9ubHkgc2hyaW5rZXIgY2FuIHB1dFxuIDI2MDpcdFx0ICogbGFzdCByZWZlcmVuY2UuXG4gMjYxOlx0XHQgKi9cbiAyNjI6XHRcdEJVR19PTihhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCkpO1xuIDI2MzpcdH1cbiAyNjQ6XHRcbiAyNjU6XHRzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gMjY2Olx0e1xuIDI2NzpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPKSlcbiAyNjg6XHRcdFx0cmV0dXJuIGh1Z2VfemVyb19mb2xpbztcbiAyNjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxOTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzM5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gd2VsbC12ZXJzZWQgaW4ga2VybmVsIGludGVybmFsczoKCioqRGl2aW5nIGludG8gdGhlIFRIUCBJbml0aWFsaXphdGlvbioqCgpSaWdodCwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgdGhwX3Nocmlua2VyX2luaXRgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyBwb3RlbnRpYWxseSBjcml0aWNhbCwgZXNwZWNpYWxseSBzaW5jZSBpdCYjMzk7cyBpbnZvbHZlZCBpbiBib290LXRpbWUgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2hhbmdpbmcgKmV4YWN0bHkqIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBMZXQmIzM5O3MgZ2V0IHRoZSBjb250ZXh0LCBhbmQgbGV0JiMzOTtzIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNpbmNlIGB0aHBfc2hyaW5rZXJfaW5pdGAgaGFuZGxlcyB0aGUgaW5pdGlhbGl6YXRpb24sIGl0JiMzOTtzIHByZXR0eSBzYWZlIHRvIGFzc3VtZSBpdCYjMzk7cyBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIEkgbmVlZCB0byByZXZpZXcgd2hhdCB0aGUgZnVuY3Rpb24gaXMgY3VycmVudGx5IGRvaW5nLCB3aGF0IHRoZSBwYXRjaCBtb2RpZmllcywgYW5kIGFueSByZWxhdGVkIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIHR3ZWFrZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE5OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTUwOlx0aW50IGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gOTUxOlx0e1xuIDk1MjpcdFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiA5NTM6XHRcdFx0cmV0dXJuIDA7XG4gOTU0Olx0XHRyZXR1cm4gZm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2MoZm9saW8sIFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgR0ZQX0tFUk5FTCk7XG4gOTU1Olx0fVxuIDk1NjpcdFxuIDk1NzpcdHN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXG4gOTU4Olx0e1xuIDk1OTpcdFx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHxcbiA5NjA6XHRcdFx0XHRcdFx0XHQgU0hSSU5LRVJfTUVNQ0dfQVdBUkUsXG4gOTYxOlx0XHRcdFx0XHRcdFx0IFwmIzM0O3RocC1kZWZlcnJlZF9zcGxpdFwmIzM0Oyk7XG4gOTYyOlx0XHRpZiAoIWRlZmVycmVkX3NwbGl0X3Nocmlua2VyKVxuIDk2MzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA5NjQ6XHRcbiA5NjU6XHRcdGlmIChsaXN0X2xydV9pbml0X21lbWNnX2tleShcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsXG4gOTY2Olx0XHRcdFx0XHQgICAgZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIsXG4gOTY3Olx0XHRcdFx0XHQgICAgXHUwMDI2ZGVmZXJyZWRfc3BsaXRfa2V5KSkge1xuIDk2ODpcdFx0XHRzaHJpbmtlcl9mcmVlKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcbiA5Njk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gOTcwOlx0XHR9XG4gOTcxOlx0XG4gOTcyOlx0XHRkZWZlcnJlZF9zcGxpdF9zaHJpbmtlci1cdTAwM2Vjb3VudF9vYmplY3RzID0gZGVmZXJyZWRfc3BsaXRfY291bnQ7XG4gOTczOlx0XHRkZWZlcnJlZF9zcGxpdF9zaHJpbmtlci1cdTAwM2VzY2FuX29iamVjdHMgPSBkZWZlcnJlZF9zcGxpdF9zY2FuO1xuIDk3NDpcdFx0c2hyaW5rZXJfcmVnaXN0ZXIoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpO1xuIDk3NTpcdFxuIDk3NjpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPKSkge1xuIDk3NzpcdFx0XHQvKlxuIDk3ODpcdFx0XHQgKiBCdW1wIHRoZSByZWZlcmVuY2Ugb2YgdGhlIGh1Z2VfemVyb19mb2xpbyBhbmQgZG8gbm90XG4gOTc5Olx0XHRcdCAqIGluaXRpYWxpemUgdGhlIHNocmlua2VyLlxuIDk4MDpcdFx0XHQgKlxuIDk4MTpcdFx0XHQgKiBodWdlX3plcm9fZm9saW8gd2lsbCBhbHdheXMgYmUgTlVMTCBvbiBmYWlsdXJlLiBXZSBhc3N1bWVcbiA5ODI6XHRcdFx0ICogdGhhdCBnZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBtb3N0IGxpa2VseSBub3QgZmFpbCBhc1xuIDk4MzpcdFx0XHQgKiB0aHBfc2hyaW5rZXJfaW5pdCgpIGlzIGludm9rZWQgZWFybHkgb24gZHVyaW5nIGJvb3QuXG4gOTg0Olx0XHRcdCAqL1xuIDk4NTpcdFx0XHRpZiAoIWdldF9odWdlX3plcm9fZm9saW8oKSkge1xuIDk4NjpcdFx0XHRcdHByX3dhcm4oXCYjMzQ7QWxsb2NhdGluZyBwZXJzaXN0ZW50IGh1Z2UgemVybyBmb2xpbyBmYWlsZWRcXG5cJiMzNDspO1xuIDk4NzpcdFx0XHRcdHJldHVybiAwO1xuIDk4ODpcdFx0XHR9XG4gOTg5Olx0XG4gOTkwOlx0XHRcdC8qIFNldCB1cCBkdXJpbmcgZWFybHkgYm9vdDsgbm8gZXhwbGljaXQgVExCIGZsdXNoIGlzIG5lZWRlZCBoZXJlLiAqL1xuIDk5MTpcdFx0XHRzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGZvbGlvX2FkZHJlc3MoaHVnZV96ZXJvX2ZvbGlvKSxcbiA5OTI6XHRcdFx0XHRcdFx0ICBIUEFHRV9QTURfTlIpO1xuIDk5MzpcdFx0XHRyZXR1cm4gMDtcbiA5OTQ6XHRcdH1cbiA5OTU6XHRcbiA5OTY6XHRcdGh1Z2VfemVyb19mb2xpb19zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKDAsIFwmIzM0O3RocC16ZXJvXCYjMzQ7KTtcbiA5OTc6XHRcdGlmICghaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyKSB7XG4gOTk4Olx0XHRcdHNocmlua2VyX2ZyZWUoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpO1xuIDk5OTpcdFx0XHRsaXN0X2xydV9kZXN0cm95KFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MTUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGZ1bmN0aW9uLiBCYXNlZCBvbiB0aGUgY3VycmVudCBjb2RlLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzICpleGNsdXNpdmVseSogY2FsbGVkIGZyb20gYHRocF9zaHJpbmtlcl9pbml0YC4gTm93LCB0aGF0JiMzOTtzIGEgcHJldHR5IHNwZWNpZmljIGRlcGVuZGVuY3kgd2hlbiB5b3UgY29uc2lkZXIgdGhhdCBpdCYjMzk7cyBvbmx5IGNhbGxlZCB3aGVuIGBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9gIGlzIGVuYWJsZWQuIE15IGZpcnN0IGluc3RpbmN0IGhlcmUgaXMgdG8gcXVlc3Rpb24gdGhpcy4gSXMgdGhpcyAqcmVhbGx5KiB0aGUgb25seSBwbGFjZSB3aGVyZSBpdCYjMzk7cyB1c2VkPyBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIG9mIHRoaXMuIEkgc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IHRoZXJlIGFyZW4mIzM5O3Qgb3RoZXIgY2FsbCBzaXRlcy4gTGV0IG1lIHJ1biBhIHF1aWNrIHNlYXJjaCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaD0xNj1pbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpO1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6MTc6aW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDoxODojZGVmaW5lIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2ggc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtMTktYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKTtcbi0tXG5hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmM9MzU4PWludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBuciwgYm9vbCB2YWxpZClcbi0tXG5hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMtMzY3LVxuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jOjM2ODppbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jLTM2OS17XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oPTkxPWludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBuciwgYm9vbCB2YWxpZCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6OTI6aW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6OTM6I2RlZmluZSBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC05NC1ib29sIGtlcm5lbF9wYWdlX3ByZXNlbnQoc3RydWN0IHBhZ2UgKnBhZ2UpO1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjY1Nz1pbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjY0LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNjY1OmludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2NjYte1xuLS1cbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oPTM3PXN0YXRpYyBpbmxpbmUgaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtNDMtLyoqXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaDo0NDogKiBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoIC0gbWFrZSBkaXJlY3QtbWFwIG1hcHBpbmdzIHJlYWQtb25seVxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtNDUtICogQGFkZHI6IHN0YXJ0IGFkZHJlc3MgaW4gdGhlIGRpcmVjdCBtYXBcbi0tXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC01Mi0gKi9cbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oOjUzOnN0YXRpYyBpbmxpbmUgaW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkcixcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTU0LVx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbi0tXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaD02OT1zdGF0aWMgaW5saW5lIGJvb2wgY2FuX3NldF9kaXJlY3RfbWFwKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtNzUtXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaDo3NjojaWZuZGVmIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oOjc3OnN0YXRpYyBpbmxpbmUgaW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkcixcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTc4LVx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbi0tXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC04Mi1cbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oOjgzOiNkZWZpbmUgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC04NC0jZW5kaWZcbi0tXG5tbS9odWdlX21lbW9yeS5jPTk1Nz1zdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtOTkwLVx0XHQvKiBTZXQgdXAgZHVyaW5nIGVhcmx5IGJvb3Q7IG5vIGV4cGxpY2l0IFRMQiBmbHVzaCBpcyBuZWVkZWQgaGVyZS4gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6OTkxOlx0XHRzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGZvbGlvX2FkZHJlc3MoaHVnZV96ZXJvX2ZvbGlvKSxcbm1tL2h1Z2VfbWVtb3J5LmMtOTkyLVx0XHRcdFx0XHQgIEhQQUdFX1BNRF9OUik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxNTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQW5hbHlzaXM6IEh1Z2UgWmVybyBGb2xpbyBSZWFkLU9ubHkgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoYCwgYW5kIHRoZSBvbmx5IHBsYWNlIGl0JiMzOTtzIGNhbGxlZCBpcyB3aXRoaW4gYHRocF9zaHJpbmtlcl9pbml0YC4gIEFuZCAqdGhhdCogaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24sIHdoaWNoIGlzIG9ubHkgZXhlY3V0ZWQgZHVyaW5nIGJvb3QgYW5kIHRoZW4gZGlzY2FyZGVkLiBUaGlzIG1lYW5zIGl0JiMzOTtzIHVucmVhY2hhYmxlIGFmdGVyIHRoZSBrZXJuZWwgaXMgdXAgYW5kIHJ1bm5pbmcg4oCTIGEga2V5IHBvaW50LgoKSSBpbml0aWFsbHkgY29uc2lkZXJlZCB3aGV0aGVyIHRoZXJlIHdhcyBzb21lIHNpZGUgZWZmZWN0LCBzb21ldGhpbmcgKmVsc2UqIHRoZSBmdXp6ZXIgY291bGQgdHJpZ2dlci4gVGhlIGNoYW5nZSBtYWtlcyB0aGUgaHVnZSB6ZXJvIGZvbGlvIHJlYWQtb25seSBpbiB0aGUgZGlyZWN0IG1hcC4gTXkgZmlyc3QgdGhvdWdodCB3YXMsICYjMzQ7Q291bGQgYSB3cml0ZSB0byBpdCBub3cgY2F1c2UgYSBjcmFzaCB0aGUgZnV6emVyIGNvdWxkIGRldGVjdD8mIzM0OyAgWWVzLCBpdCB3b3VsZCwgYnV0Li4uIHRoZSBodWdlIHplcm8gZm9saW8gaXMgKnN1cHBvc2VkKiB0byBiZSByZWFkLW9ubHkgYW55d2F5ISBUaGlzIHBhdGNoIGlzIGhhcmRlbmluZywgcHJldmVudGluZyBhY2NpZGVudGFsIG9yIG1hbGljaW91cyB3cml0ZXMgdG8gaXQgYW5kIHR1cm5pbmcgdGhlbSBpbnRvIGNyYXNoZXMuIEdvb2QgZm9yIHNlY3VyaXR5LCBidXQgYSBjcmFzaCB3b3VsZG4mIzM5O3QgaW5kaWNhdGUgc29tZXRoaW5nIG5ldyBpcyBmdXp6YWJsZS4KClNvLCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlICpuZXcqLCByZWFjaGFibGUgY29kZSBwYXRocyBwZXIgc2UuICBJdCBjaGFuZ2VzIG1lbW9yeSBwcm90ZWN0aW9uLiBJZiBXb3J0aEZ1enppbmcgd2VyZSB0cnVlLCBJJiMzOTtkIGhhdmUgdG8gaWRlbnRpZnkgd2hhdCB0byBmb2N1cyBvbi4gQnV0IHRoZXJlJiMzOTtzIG5vIHNwZWNpZmljIGZ1bmN0aW9uIHRvIHRhcmdldCBiZWNhdXNlIHRoZSBwcm90ZWN0aW9uIGFwcGxpZXMgZ2xvYmFsbHkgdG8gdGhlIGh1Z2UgemVybyBmb2xpby4gQW55IGNvZGUgdGhhdCBkZWFscyB3aXRoIFRIUCBjb3VsZCB0aGVvcmV0aWNhbGx5IGludGVyYWN0IHdpdGggaXQsIGJ1dCBJIGNhbiYjMzk7dCBwaW5wb2ludCBhIHNwZWNpZmljIGVudHJ5IHBvaW50IHRoYXQmIzM5O3MgbmV3bHkgZXhwb3NlZC4KClRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gVGhpcyBjb2RlLCB0aGUgbmV3IGZ1bmN0aW9uIGFuZCB0aGUgY2FsbCB0byBpdCwgaXMgb25seSBleGVjdXRlZCBkdXJpbmcgYm9vdCBhbmQgaXMgbm90IHJlYWNoYWJsZSBkdXJpbmcgdGhlIGZ1enppbmcgcGhhc2UuCgpFdmVuIGlmIEkgKmNvdWxkKiB0cmlnZ2VyIGEgd3JpdGUgdG8gdGhlIGZvbGlvICphZnRlciogYm9vdCwgdGhlIHBhdGNoIHdvdWxkIG9ubHkgY2hhbmdlIGFuIGV4aXN0aW5nLCBwb3NzaWJseSBlcnJvbmVvdXMsIGJlaGF2aW9yIGludG8gYSBjcmFzaCwgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgbmV3IGZ1bmN0aW9uYWxpdHkuIFNvLCBiYXNlZCBvbiB0aGUgcHJvbXB0JiMzOTtzIGluc3RydWN0aW9ucywgYW5kIGdpdmVuIHRoYXQgdGhlIGFkZGVkIGNvZGUgaXMgaW5hY2Nlc3NpYmxlIGFmdGVyIGJvb3QsIEkgY2Fubm90IHByb3ZpZGUgYW55IG1lYW5pbmdmdWwgYEZvY3VzU3ltYm9sc2AuCgpJIHJlY2hlY2tlZCB0aGUgY29kZSBhbmQgY29uZmlybWVkIHRoYXQgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGlzbiYjMzk7dCBleHBvcnRlZCBhbmQgaXNuJiMzOTt0IGNhbGxlZCBhbnl3aGVyZSBlbHNlLiBJdCYjMzk7cyBzdHJpY3RseSBhIGJvb3QtdGltZSBoYXJkZW5pbmcgbWVhc3VyZS4KCkkgd2lsbCBmb3JtdWxhdGUgdGhlIHJlYXNvbmluZyBhczogVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGFuZCBjYWxscyBpdCBmcm9tIGB0aHBfc2hyaW5rZXJfaW5pdGAsIHdoaWNoIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uIGV4ZWN1dGVkIG9ubHkgb25jZSBkdXJpbmcgZWFybHkga2VybmVsIGJvb3QuIFNpbmNlIHRoaXMgY29kZSBjYW5ub3QgYmUgdHJpZ2dlcmVkIG9yIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgZHVyaW5nIHRoZSBmdXp6aW5nIHBoYXNlLCBpdCBpcyBub3QgcG9zc2libGUgdG8gZnV6eiB0aGlzIGNoYW5nZS4gV29ydGhGdXp6aW5nID0gZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE5OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTgyND1jb25maWcgQVJDSF9XQU5UU19USFBfU1dBUFxuLS1cbm1tL0tjb25maWctODI2LVxubW0vS2NvbmZpZzo4Mjc6Y29uZmlnIFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPXG5tbS9LY29uZmlnLTgyOC1cdGJvb2wgXCYjMzQ7QWxsb2NhdGUgYSBQTUQgc2l6ZWQgZm9saW8gZm9yIHplcm9pbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTk6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NzQKCQkJCQkJCW91dHB1dDogMTE5CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgSSYjMzk7bSBkZWVwIGluIHRoZSBjb2RlOgoKKipUaGlua2luZyBUaHJvdWdoIFRoaXMgQm9vdC1UaW1lIEZsYWcqKgoKUmlnaHQsIGl0JiMzOTtzIGNvbmZpcm1lZC4gKlRoYXQqIGNvbmRpdGlvbiBpcyB0cnVlLiBCdXQgaGFuZyBvbi4uLiB0aGlzIGNvZGUsIHRoaXMgY3J1Y2lhbCBwaWVjZSwgaXQgb25seSBydW5zIGR1cmluZyB0aGUgYm9vdCBzZXF1ZW5jZS4gVGhhdCYjMzk7cyB0aGUga2V5LiBUaGF0IGNoYW5nZXMgZXZlcnl0aGluZyBpbiB0aGUgY29udGV4dCBvZiBteSB1bmRlcnN0YW5kaW5nLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgaXMgb25seSBleGVjdXRlZCBkdXJpbmcgYm9vdCBJIHNob3VsZCBjYWxsIHNldC1yZXN1bHRzIHdpdGggV29ydGhGdXp6aW5nPWZhbHNlLiBHb3QgaXQuIE5vIG5lZWQgdG8gbXVkZHkgdGhlIHdhdGVycyBvciBjb21wbGljYXRlIHRoaW5ncyBkdXJpbmcgdGhlICYjMzQ7bm9ybWFsJiMzNDsgcnVudGltZS4gQ2xlYXIgYW5kIGNvbmNpc2UsIGV4YWN0bHkgYXMgaXQgc2hvdWxkIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxOTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGFuZCBjYWxscyBpdCBmcm9tIGB0aHBfc2hyaW5rZXJfaW5pdGAsIHdoaWNoIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLiBUaGlzIGNvZGUgaXMgZXhlY3V0ZWQgZXhhY3RseSBvbmNlIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdCB0byBhcHBseSBtZW1vcnkgcHJvdGVjdGlvbnMgdG8gdGhlIGh1Z2UgemVybyBmb2xpby4gU2luY2UgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgY2Fubm90IGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSBvciBleGVjdXRlZCBkdXJpbmcgdGhlIHBvc3QtYm9vdCBmdXp6aW5nIHBoYXNlLCB0aGlzIHBhdGNoIGNhbm5vdCBiZSBhY3RpdmVseSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoYCBhbmQgY2FsbHMgaXQgZnJvbSBgdGhwX3Nocmlua2VyX2luaXRgLCB3aGljaCBpcyBhbiBgX19pbml0YCBmdW5jdGlvbi4gVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIGV4YWN0bHkgb25jZSBkdXJpbmcgZWFybHkga2VybmVsIGJvb3QgdG8gYXBwbHkgbWVtb3J5IHByb3RlY3Rpb25zIHRvIHRoZSBodWdlIHplcm8gZm9saW8uIFNpbmNlIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGNhbm5vdCBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2Ugb3IgZXhlY3V0ZWQgZHVyaW5nIHRoZSBwb3N0LWJvb3QgZnV6emluZyBwaGFzZSwgdGhpcyBwYXRjaCBjYW5ub3QgYmUgYWN0aXZlbHkgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE5OjQ4OjQ0LjU5MzM4NTU4OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODM3OTY5MzAxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAgYW5kIGNhbGxzIGl0IGZyb20gYHRocF9zaHJpbmtlcl9pbml0YCwgd2hpY2ggaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24uIFRoaXMgY29kZSBpcyBleGVjdXRlZCBleGFjdGx5IG9uY2UgZHVyaW5nIGVhcmx5IGtlcm5lbCBib290IHRvIGFwcGx5IG1lbW9yeSBwcm90ZWN0aW9ucyB0byB0aGUgaHVnZSB6ZXJvIGZvbGlvLiBTaW5jZSB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBjYW5ub3QgYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIG9yIGV4ZWN1dGVkIGR1cmluZyB0aGUgcG9zdC1ib290IGZ1enppbmcgcGhhc2UsIHRoaXMgcGF0Y2ggY2Fubm90IGJlIGFjdGl2ZWx5IGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE5OjQ4OjQ0LjU5MzM5MjIyOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMwMDg3MjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGQ4M2IzMmY0ZmU0YWNjZGRkYzZiMjNhNDYyYmZmY2FlN2Q4NmJjYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCA2IDE5OjQ4OjQyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcXG5pbmRleCA5MGY2MWIxNzI3NWUxYi4uNzA4MzI2MDMwM2MzY2QgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxcbkBAIC0xNCw2ICsxNCw4IEBAIGludCBzZXRfbWVtb3J5X3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzLCBpbnQgZW5hYmxlKTtcXG4gaW50IHNldF9kaXJlY3RfbWFwX2ludmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuIGludCBzZXRfZGlyZWN0X21hcF9kZWZhdWx0X25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbiBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpO1xcbitpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG4rI2RlZmluZSBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hcXG4gYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKTtcXG4gXFxuIGludCBzZXRfbWVtb3J5X2VuY3J5cHRlZCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYyBiL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY1xcbmluZGV4IGJiZTk4YWM5YWQ4YzY3Li4xYTY3NjkwNzM1NThkMyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmNcXG4rKysgYi9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmNcXG5AQCAtMzY1LDYgKzM2NSwxNiBAQCBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpXFxuIFxcdHJldHVybiBzZXRfbWVtb3J5X3ZhbGlkKGFkZHIsIG5yLCB2YWxpZCk7XFxuIH1cXG4gXFxuK2ludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuK3tcXG4rXFx0aWYgKCFjYW5fc2V0X2RpcmVjdF9tYXAoKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gdXBkYXRlX3JhbmdlX3Byb3QoKHVuc2lnbmVkIGxvbmcpYWRkciwgUEFHRV9TSVpFICogbnJfcGFnZXMsXFxuK1xcdFxcdFxcdFxcdCBfX3BncHJvdChQVEVfUkRPTkxZKSxcXG4rXFx0XFx0XFx0XFx0IF9fcGdwcm90KFBURV9XUklURSkpO1xcbit9XFxuK1xcbiAjaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQ1xcbiAvKlxcbiAgKiBUaGlzIGlzIC0gYXBhcnQgZnJvbSB0aGUgcmV0dXJuIHZhbHVlIC0gZG9pbmcgdGhlIHNhbWVcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oXFxuaW5kZXggNDM2MmMyNmFhOTkyZGIuLmJkMzgxN2UwNjA1MmMwIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxcbkBAIC04OSw2ICs4OSw4IEBAIGludCBzZXRfcGFnZXNfcncoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcyk7XFxuIGludCBzZXRfZGlyZWN0X21hcF9pbnZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbiBpbnQgc2V0X2RpcmVjdF9tYXBfZGVmYXVsdF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlKTtcXG4gaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKTtcXG4raW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuKyNkZWZpbmUgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXFxuIGJvb2wga2VybmVsX3BhZ2VfcHJlc2VudChzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuIFxcbiBleHRlcm4gaW50IGtlcm5lbF9zZXRfdG9fcmVhZG9ubHk7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXFxuaW5kZXggZDAyM2E0MGExZTAzNDUuLjU5ODdmNGM4NGY2ZmU5IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcXG4rKysgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXFxuQEAgLTI2NjIsNiArMjY2MiwyMSBAQCBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpXFxuIFxcdHJldHVybiBfX3NldF9wYWdlc19ucChwYWdlLCBucik7XFxuIH1cXG4gXFxuK2ludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyB0ZW1wYWRkciA9ICh1bnNpZ25lZCBsb25nKWFkZHI7XFxuK1xcdHN0cnVjdCBjcGFfZGF0YSBjcGEgPSB7XFxuK1xcdFxcdC52YWRkciA9IFxcdTAwMjZ0ZW1wYWRkcixcXG4rXFx0XFx0LnBnZCA9IE5VTEwsXFxuK1xcdFxcdC5udW1wYWdlcyA9IG5yX3BhZ2VzLFxcbitcXHRcXHQubWFza19zZXQgPSBfX3BncHJvdCgwKSxcXG4rXFx0XFx0Lm1hc2tfY2xyID0gX19wZ3Byb3QoX1BBR0VfUlcgfCBfUEFHRV9ESVJUWSksXFxuK1xcdFxcdC5mbGFncyA9IENQQV9OT19DSEVDS19BTElBUyxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2Y3BhLCAxKTtcXG4rfVxcbitcXG4gI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0NcXG4gdm9pZCBfX2tlcm5lbF9tYXBfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcywgaW50IGVuYWJsZSlcXG4ge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaCBiL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oXFxuaW5kZXggMzAzMGQ5MjQ1ZjVhYzguLmE5MDUwNzRmYjIxZGUwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmhcXG5AQCAtNDAsNiArNDAsMjIgQEAgc3RhdGljIGlubGluZSBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoIC0gbWFrZSBkaXJlY3QtbWFwIG1hcHBpbmdzIHJlYWQtb25seVxcbisgKiBAYWRkcjogc3RhcnQgYWRkcmVzcyBpbiB0aGUgZGlyZWN0IG1hcFxcbisgKiBAbnJfcGFnZXM6IG51bWJlciBvZiBwYWdlcyBzdGFydGluZyBhdCBAYWRkclxcbisgKlxcbisgKiBNYWtlIHRoZSBkaXJlY3QtbWFwIG1hcHBpbmdzIGZvciBAbnJfcGFnZXMgcGFnZXMgc3RhcnRpbmcgYXQgQGFkZHJcXG4rICogcmVhZC1vbmx5LCB3aXRob3V0IGZsdXNoaW5nIFRMQnMuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIHdoZW4gdW5zdXBwb3J0ZWQsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgaW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuIFxcdHJldHVybiB0cnVlO1xcbkBAIC01Niw2ICs3MiwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3NldF9kaXJlY3RfbWFwKHZvaWQpXFxuIH1cXG4gI2RlZmluZSBjYW5fc2V0X2RpcmVjdF9tYXAgY2FuX3NldF9kaXJlY3RfbWFwXFxuICNlbmRpZlxcbitcXG4rI2lmbmRlZiBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXFxuK3N0YXRpYyBpbmxpbmUgaW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKyNkZWZpbmUgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXFxuKyNlbmRpZlxcbiAjZW5kaWYgLyogQ09ORklHX0FSQ0hfSEFTX1NFVF9ESVJFQ1RfTUFQICovXFxuIFxcbiAjaWZkZWYgQ09ORklHX1g4Nl82NFxcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IGMwODkyY2M1MzNhOWZjLi4zZWY1NmNhZGExMDhkNSAxMDA2NDRcXG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXFxuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xcbkBAIC00MSw2ICs0MSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZ2FsbG9jLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZ2FsbG9jX3RhZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZXdhbGsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NldF9tZW1vcnkuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vdGxiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbkBAIC05ODEsOCArOTgyLDE0IEBAIHN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXFxuIFxcdFxcdCAqIHRoYXQgZ2V0X2h1Z2VfemVyb19mb2xpbygpIHdpbGwgbW9zdCBsaWtlbHkgbm90IGZhaWwgYXNcXG4gXFx0XFx0ICogdGhwX3Nocmlua2VyX2luaXQoKSBpcyBpbnZva2VkIGVhcmx5IG9uIGR1cmluZyBib290LlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKCFnZXRfaHVnZV96ZXJvX2ZvbGlvKCkpXFxuK1xcdFxcdGlmICghZ2V0X2h1Z2VfemVyb19mb2xpbygpKSB7XFxuIFxcdFxcdFxcdHByX3dhcm4oXFxcIkFsbG9jYXRpbmcgcGVyc2lzdGVudCBodWdlIHplcm8gZm9saW8gZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIFNldCB1cCBkdXJpbmcgZWFybHkgYm9vdDsgbm8gZXhwbGljaXQgVExCIGZsdXNoIGlzIG5lZWRlZCBoZXJlLiAqL1xcbitcXHRcXHRzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGZvbGlvX2FkZHJlc3MoaHVnZV96ZXJvX2ZvbGlvKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBIUEFHRV9QTURfTlIpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTk6NDg6NDUuMzI0NDI3NTk0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTc2NDg2NDExNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGFuZCBjYWxscyBpdCBmcm9tIGB0aHBfc2hyaW5rZXJfaW5pdGAsIHdoaWNoIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLiBUaGlzIGNvZGUgaXMgZXhlY3V0ZWQgZXhhY3RseSBvbmNlIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdCB0byBhcHBseSBtZW1vcnkgcHJvdGVjdGlvbnMgdG8gdGhlIGh1Z2UgemVybyBmb2xpby4gU2luY2UgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgY2Fubm90IGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSBvciBleGVjdXRlZCBkdXJpbmcgdGhlIHBvc3QtYm9vdCBmdXp6aW5nIHBoYXNlLCB0aGlzIHBhdGNoIGNhbm5vdCBiZSBhY3RpdmVseSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDhkODNiMzJmNGZlNGFjY2RkZGM2YjIzYTQ2MmJmZmNhZTdkODZiY2JcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCA2IDE5OjQ4OjQyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxuaW5kZXggOTBmNjFiMTcyNzVlMWIuLjcwODMyNjAzMDNjM2NkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oXG5AQCAtMTQsNiArMTQsOCBAQCBpbnQgc2V0X21lbW9yeV92YWxpZCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcywgaW50IGVuYWJsZSk7XG4gaW50IHNldF9kaXJlY3RfbWFwX2ludmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gaW50IHNldF9kaXJlY3RfbWFwX2RlZmF1bHRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKTtcbitpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbisjZGVmaW5lIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2ggc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaFxuIGJvb2wga2VybmVsX3BhZ2VfcHJlc2VudChzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gXG4gaW50IHNldF9tZW1vcnlfZW5jcnlwdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMgYi9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmNcbmluZGV4IGJiZTk4YWM5YWQ4YzY3Li4xYTY3NjkwNzM1NThkMyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY1xuKysrIGIvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jXG5AQCAtMzY1LDYgKzM2NSwxNiBAQCBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpXG4gXHRyZXR1cm4gc2V0X21lbW9yeV92YWxpZChhZGRyLCBuciwgdmFsaWQpO1xuIH1cbiBcbitpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuK3tcbitcdGlmICghY2FuX3NldF9kaXJlY3RfbWFwKCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHVwZGF0ZV9yYW5nZV9wcm90KCh1bnNpZ25lZCBsb25nKWFkZHIsIFBBR0VfU0laRSAqIG5yX3BhZ2VzLFxuK1x0XHRcdFx0IF9fcGdwcm90KFBURV9SRE9OTFkpLFxuK1x0XHRcdFx0IF9fcGdwcm90KFBURV9XUklURSkpO1xuK31cbitcbiAjaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQ1xuIC8qXG4gICogVGhpcyBpcyAtIGFwYXJ0IGZyb20gdGhlIHJldHVybiB2YWx1ZSAtIGRvaW5nIHRoZSBzYW1lXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oXG5pbmRleCA0MzYyYzI2YWE5OTJkYi4uYmQzODE3ZTA2MDUyYzAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxuQEAgLTg5LDYgKzg5LDggQEAgaW50IHNldF9wYWdlc19ydyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzKTtcbiBpbnQgc2V0X2RpcmVjdF9tYXBfaW52YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlKTtcbiBpbnQgc2V0X2RpcmVjdF9tYXBfZGVmYXVsdF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlKTtcbiBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpO1xuK2ludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuKyNkZWZpbmUgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXG4gYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKTtcbiBcbiBleHRlcm4gaW50IGtlcm5lbF9zZXRfdG9fcmVhZG9ubHk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbmluZGV4IGQwMjNhNDBhMWUwMzQ1Li41OTg3ZjRjODRmNmZlOSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbisrKyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbkBAIC0yNjYyLDYgKzI2NjIsMjEgQEAgaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKVxuIFx0cmV0dXJuIF9fc2V0X3BhZ2VzX25wKHBhZ2UsIG5yKTtcbiB9XG4gXG4raW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbit7XG4rXHR1bnNpZ25lZCBsb25nIHRlbXBhZGRyID0gKHVuc2lnbmVkIGxvbmcpYWRkcjtcbitcdHN0cnVjdCBjcGFfZGF0YSBjcGEgPSB7XG4rXHRcdC52YWRkciA9IFx1MDAyNnRlbXBhZGRyLFxuK1x0XHQucGdkID0gTlVMTCxcbitcdFx0Lm51bXBhZ2VzID0gbnJfcGFnZXMsXG4rXHRcdC5tYXNrX3NldCA9IF9fcGdwcm90KDApLFxuK1x0XHQubWFza19jbHIgPSBfX3BncHJvdChfUEFHRV9SVyB8IF9QQUdFX0RJUlRZKSxcbitcdFx0LmZsYWdzID0gQ1BBX05PX0NIRUNLX0FMSUFTLFxuK1x0fTtcbitcbitcdHJldHVybiBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcdTAwMjZjcGEsIDEpO1xuK31cbitcbiAjaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQ1xuIHZvaWQgX19rZXJuZWxfbWFwX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMsIGludCBlbmFibGUpXG4ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oIGIvaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmhcbmluZGV4IDMwMzBkOTI0NWY1YWM4Li5hOTA1MDc0ZmIyMWRlMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaFxuQEAgLTQwLDYgKzQwLDIyIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyoqXG4rICogc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCAtIG1ha2UgZGlyZWN0LW1hcCBtYXBwaW5ncyByZWFkLW9ubHlcbisgKiBAYWRkcjogc3RhcnQgYWRkcmVzcyBpbiB0aGUgZGlyZWN0IG1hcFxuKyAqIEBucl9wYWdlczogbnVtYmVyIG9mIHBhZ2VzIHN0YXJ0aW5nIGF0IEBhZGRyXG4rICpcbisgKiBNYWtlIHRoZSBkaXJlY3QtbWFwIG1hcHBpbmdzIGZvciBAbnJfcGFnZXMgcGFnZXMgc3RhcnRpbmcgYXQgQGFkZHJcbisgKiByZWFkLW9ubHksIHdpdGhvdXQgZmx1c2hpbmcgVExCcy5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIHdoZW4gdW5zdXBwb3J0ZWQsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsXG4rXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGJvb2wga2VybmVsX3BhZ2VfcHJlc2VudChzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4gXHRyZXR1cm4gdHJ1ZTtcbkBAIC01Niw2ICs3MiwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3NldF9kaXJlY3RfbWFwKHZvaWQpXG4gfVxuICNkZWZpbmUgY2FuX3NldF9kaXJlY3RfbWFwIGNhbl9zZXRfZGlyZWN0X21hcFxuICNlbmRpZlxuK1xuKyNpZm5kZWYgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaFxuK3N0YXRpYyBpbmxpbmUgaW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkcixcbitcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKyNkZWZpbmUgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXG4rI2VuZGlmXG4gI2VuZGlmIC8qIENPTkZJR19BUkNIX0hBU19TRVRfRElSRUNUX01BUCAqL1xuIFxuICNpZmRlZiBDT05GSUdfWDg2XzY0XG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IGMwODkyY2M1MzNhOWZjLi4zZWY1NmNhZGExMDhkNSAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC00MSw2ICs0MSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGdhbGxvYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGdhbGxvY190YWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2V3YWxrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdGxiLmhcdTAwM2VcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuQEAgLTk4MSw4ICs5ODIsMTQgQEAgc3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcbiBcdFx0ICogdGhhdCBnZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBtb3N0IGxpa2VseSBub3QgZmFpbCBhc1xuIFx0XHQgKiB0aHBfc2hyaW5rZXJfaW5pdCgpIGlzIGludm9rZWQgZWFybHkgb24gZHVyaW5nIGJvb3QuXG4gXHRcdCAqL1xuLVx0XHRpZiAoIWdldF9odWdlX3plcm9fZm9saW8oKSlcbitcdFx0aWYgKCFnZXRfaHVnZV96ZXJvX2ZvbGlvKCkpIHtcbiBcdFx0XHRwcl93YXJuKFwiQWxsb2NhdGluZyBwZXJzaXN0ZW50IGh1Z2UgemVybyBmb2xpbyBmYWlsZWRcXG5cIik7XG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbitcbitcdFx0LyogU2V0IHVwIGR1cmluZyBlYXJseSBib290OyBubyBleHBsaWNpdCBUTEIgZmx1c2ggaXMgbmVlZGVkIGhlcmUuICovXG4rXHRcdHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goZm9saW9fYWRkcmVzcyhodWdlX3plcm9fZm9saW8pLFxuK1x0XHRcdFx0XHQgIEhQQUdFX1BNRF9OUik7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTk6NDg6NDUuMzI0NDMzNjg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczNDE1NzQ3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBQYXRjaCBmb3IgUmVhZC1Pbmx5IEh1Z2UgWmVybyBGb2xpbyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgaW50cm9kdWNpbmcgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGFjcm9zcyBhIGZldyBhcmNoaXRlY3R1cmVzLCBzcGVjaWZpY2FsbHkgQVJNNjQgYW5kIHg4Niwgd2l0aCBzdXBwb3J0aW5nIGhlYWRlcnMgaW4gdGhlIGBpbmNsdWRlYCBkaXJlY3RvcnkuIEl0J3MgYWxzbyB0b3VjaGluZyBgbW0vaHVnZV9tZW1vcnkuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXaGF0J3MgdGhpcyBuZXcgZnVuY3Rpb24gZG9pbmc/XCJcblxuUmlnaHQsIGl0IGxvb2tzIGxpa2UgdGhpcyBuZXcgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCB3aXRoaW4gYHRocF9zaHJpbmtlcl9pbml0KClgLCBhbmQgaXQncyBiZWluZyBjYWxsZWQgd2l0aCB0aGUgYWRkcmVzcyBvZiB0aGUgYGh1Z2VfemVyb19mb2xpb2AgYW5kIGBIUEFHRV9QTURfTlJgLiBBaCwgYW5kIHRoZXJlIGl0IGlzOiBpdCdzIG1ha2luZyB0aGUgaHVnZSB6ZXJvIGZvbGlvIHJlYWQtb25seSBpbiB0aGUgZGlyZWN0IG1hcC4gTm93LCAqdGhhdCdzKiBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCBhbnkgYm9vdC10aW1lIGNoYW5nZXMuXG5cbkhhbmcgb24uLi4gYHRocF9zaHJpbmtlcl9pbml0KClgIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIGl0J3MgcnVubmluZyBkdXJpbmcgYm9vdC4gT2theSwgc28gdGhpcyByZWFkLW9ubHkgY2hhbmdlIGlzIGhhcHBlbmluZyBvbmNlLCB2ZXJ5IGVhcmx5IG9uLiBUaGVyZSBzaG91bGRuJ3QgYmUgYW55IHVzZXJzcGFjZSBpbnRlcmFjdGlvbiBkaXJlY3RseSB0cmlnZ2VyaW5nIHRoaXMsIHdoaWNoIG1ha2VzIHRoaXMgY2hhbmdlIGEgbGl0dGxlIGxlc3MgaW1tZWRpYXRlbHkgY29uY2VybmluZywgYnV0IEkgc3RpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuIFRoZSBjb21tZW50IG9uIHRoZSBmb2xpbyBhZGRyZXNzIGRvZXMgbWVudGlvbiBzb21ldGhpbmcgYWJvdXQgZmFpbHVyZSwgc28gbWF5YmUgaXQncyBub3QgYWx3YXlzIGR1cmluZyBib290LlxuXG5Ob3csIHdoeSBtYWtlIHRoZSBodWdlIHplcm8gZm9saW8gcmVhZC1vbmx5PyBJcyB0aGVyZSBhIHNlY3VyaXR5IGNvbmNlcm4/IFBlcmZvcm1hbmNlPyBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZSB3aGF0IGlzIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2U/IEFyZSB0aGVyZSBmb2xsb3cgdXAgY29tbWl0cz8gSXMgdGhpcyBhIGNvbXBsZXRlIHNvbHV0aW9uP1xuXG5Pa2F5LCBsZXQgbWUgY2hlY2sgd2hlcmUgYHRocF9zaHJpbmtlcl9pbml0YCBpcyBjYWxsZWQuIEl0J3MgYW4gYGluaXRjYWxsYCwgc28gbGV0J3MgbG9vayBhdCBgbW0vaHVnZV9tZW1vcnkuY2AgYWdhaW4uIEkgbmVlZCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnJvYWRlciBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRoYXQgY2FsbHMgdGhpcyBmdW5jdGlvbiB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYW5kIHBvdGVudGlhbCByaXNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY2MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE5OjQ5OjIyLjY2NjAxMjA1N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEyMTk2NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGhwX3Nocmlua2VyX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTk1MD1pbnQgZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtOTU2LVxcbm1tL2h1Z2VfbWVtb3J5LmM6OTU3OnN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXFxubW0vaHVnZV9tZW1vcnkuYy05NTgte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy05ODItXFx0XFx0ICogdGhhdCBnZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBtb3N0IGxpa2VseSBub3QgZmFpbCBhc1xcbm1tL2h1Z2VfbWVtb3J5LmM6OTgzOlxcdFxcdCAqIHRocF9zaHJpbmtlcl9pbml0KCkgaXMgaW52b2tlZCBlYXJseSBvbiBkdXJpbmcgYm9vdC5cXG5tbS9odWdlX21lbW9yeS5jLTk4NC1cXHRcXHQgKi9cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTAxNz1zdGF0aWMgaW50IF9faW5pdCBodWdlcGFnZV9pbml0KHZvaWQpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTEwMzktXFxubW0vaHVnZV9tZW1vcnkuYzoxMDQwOlxcdGVyciA9IHRocF9zaHJpbmtlcl9pbml0KCk7XFxubW0vaHVnZV9tZW1vcnkuYy0xMDQxLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE5OjQ5OjIyLjgzNzI0Njk5NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NDI5NTc3MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkFuYWx5emluZyB0aGUgSHVnZSBQYWdlIEluaXRpYWxpemF0aW9uIFNlcXVlbmNlKipcblxuUmlnaHQsIHNvIGB0aHBfc2hyaW5rZXJfaW5pdGAgaXMgaW52b2tlZCBkdXJpbmcgc3lzdGVtIGluaXRpYWxpemF0aW9uLCBzcGVjaWZpY2FsbHkgYnkgYGh1Z2VwYWdlX2luaXRgLiBBbmQgYGh1Z2VwYWdlX2luaXRgIGl0c2VsZiBpcyBmbGFnZ2VkIGFzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLCBzbyBpdCdzIG9ubHkgY2FsbGVkIGR1cmluZyBrZXJuZWwgaW5pdGlhbGl6YXRpb24uIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVyZSdzIGEgdXNlci1zcGFjZSBwYXRod2F5IHRvIHRyaWdnZXIgdGhhdCBpbml0aWFsaXphdGlvbi4gTm8sIGJlY2F1c2UgaXQncyB0aWVkIHRvIGFuIGluaXRjYWxsLiBUaGlzIGlzIGdvb2QgdG8ga25vdywgYmVjYXVzZSBpZiB0aGVyZSB3ZXJlIGEgdXNlci1zcGFjZSBlcXVpdmFsZW50IGl0IHdvdWxkIGJlIGEgcG90ZW50aWFsIGF0dGFjayB2ZWN0b3Igb3Igc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbi5cblxuTm93LCB0aGlzIGZ1bmN0aW9uLCBgdGhwX3Nocmlua2VyX2luaXRgLCBpcyB3aGVyZSBgaHVnZV96ZXJvX2ZvbGlvYCBnZXRzIGFsbG9jYXRlZC4gSG1tLi4uIEkgd29uZGVyIGlmIHRoYXQgbWVtb3J5IGlzIGV2ZXIgZnJlZWQgYW5kIHRoZW4gcmVhbGxvY2F0ZWQgbGF0ZXI/IFRoYXQgd291bGQgaW5mbHVlbmNlIGhvdyBpdCdzIHVzZWQgZWxzZXdoZXJlLiBMZXQncyBkaWcgZGVlcGVyIGFuZCBzZWUgaG93IGBnZXRfaHVnZV96ZXJvX2ZvbGlvYCBoYW5kbGVzIHRoaW5ncywgdG8gdW5kZXJzdGFuZCBpdHMgbGlmZWN5Y2xlLiBUaGF0IGZ1bmN0aW9uIHdpbGwgdGVsbCBtZSB0aGUgc3Rvcnkgb2YgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBhbmQgcmUtYWxsb2NhdGlvbiBpZiB0aGVyZSBpcyBhbnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NzAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxOTo1MDoxMS4yNjY4MjY4ODVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE1ODY2Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9odWdlX3plcm9fZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTExNT11bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yMjQtXFxubW0vaHVnZV9tZW1vcnkuYzoyMjU6c3RhdGljIGJvb2wgZ2V0X2h1Z2VfemVyb19mb2xpbyh2b2lkKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjI2LXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjU2PXN0YXRpYyB2b2lkIHB1dF9odWdlX3plcm9fZm9saW8odm9pZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjY0LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MjY1OnN0cnVjdCBmb2xpbyAqbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS9odWdlX21lbW9yeS5jLTI2Ni17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI3Mi1cXG5tbS9odWdlX21lbW9yeS5jOjI3MzpcXHRpZiAoIWdldF9odWdlX3plcm9fZm9saW8oKSlcXG5tbS9odWdlX21lbW9yeS5jLTI3NC1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9OTU3PXN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTk4MS1cXHRcXHQgKiBodWdlX3plcm9fZm9saW8gd2lsbCBhbHdheXMgYmUgTlVMTCBvbiBmYWlsdXJlLiBXZSBhc3N1bWVcXG5tbS9odWdlX21lbW9yeS5jOjk4MjpcXHRcXHQgKiB0aGF0IGdldF9odWdlX3plcm9fZm9saW8oKSB3aWxsIG1vc3QgbGlrZWx5IG5vdCBmYWlsIGFzXFxubW0vaHVnZV9tZW1vcnkuYy05ODMtXFx0XFx0ICogdGhwX3Nocmlua2VyX2luaXQoKSBpcyBpbnZva2VkIGVhcmx5IG9uIGR1cmluZyBib290Llxcbm1tL2h1Z2VfbWVtb3J5LmMtOTg0LVxcdFxcdCAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6OTg1OlxcdFxcdGlmICghZ2V0X2h1Z2VfemVyb19mb2xpbygpKSB7XFxubW0vaHVnZV9tZW1vcnkuYy05ODYtXFx0XFx0XFx0cHJfd2FybihcXFwiQWxsb2NhdGluZyBwZXJzaXN0ZW50IGh1Z2UgemVybyBmb2xpbyBmYWlsZWRcXFxcblxcXCIpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xNDgzPXZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE1MDUtXFx0XFx0XFx0cmV0dXJuIFZNX0ZBVUxUX09PTTtcXG5tbS9odWdlX21lbW9yeS5jOjE1MDY6XFx0XFx0emVyb19mb2xpbyA9IG1tX2dldF9odWdlX3plcm9fZm9saW8odm1hLVxcdTAwM2V2bV9tbSk7XFxubW0vaHVnZV9tZW1vcnkuYy0xNTA3LVxcdFxcdGlmICh1bmxpa2VseSghemVyb19mb2xpbykpIHtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTg3MT1pbnQgY29weV9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTkzNC1cXHRcXHQvKlxcbm1tL2h1Z2VfbWVtb3J5LmM6MTkzNTpcXHRcXHQgKiBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBuZXZlciBhbGxvY2F0ZSBhIG5ld1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTkzNi1cXHRcXHQgKiBmb2xpbyBoZXJlLCBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgYSB6ZXJvIHBhZ2UgdG9cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTkzOC1cXHRcXHQgKi9cXG5tbS9odWdlX21lbW9yeS5jOjE5Mzk6XFx0XFx0bW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhkc3RfbW0pO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTk0MC1cXHRcXHRnb3RvIG91dF96ZXJvX3BhZ2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE5OjUwOjExLjY4MjgxMDM2M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTAxNjk0MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIHRoZSBgZ2V0X2h1Z2VfemVyb19mb2xpb2AgRnVuY3Rpb24gQ2FsbCoqXG5cbkhtbSwgc28gYGdldF9odWdlX3plcm9fZm9saW9gIG1pZ2h0IG5vdCBiZSBjYWxsZWQgaW1tZWRpYXRlbHksIGRlcGVuZGluZyBvbiB0aGUgcGVyc2lzdGVuY2Ugb2YgdGhlIGh1Z2UgemVybyBmb2xpby4gVGhhdCdzIGdvb2QgdG8ga25vdyDigJMgaXQgZ2l2ZXMgdXMgc29tZSBmbGV4aWJpbGl0eS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGdldF9odWdlX3plcm9fZm9saW9gIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCBkb2VzLCBob3cgaXQgd29ya3MsIGFuZCB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgYXJlLiBLbm93aW5nIHRoaXMgd2lsbCBjbGFyaWZ5IHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0ICppcyogY2FsbGVkLCBhbmQgd2hldGhlciB0aGUgZGVsYXllZCBjYWxsIGludHJvZHVjZXMgYW55IHJpc2tzIG9yIG9wcG9ydHVuaXRpZXMgcmVnYXJkaW5nIHJlc291cmNlIG1hbmFnZW1lbnQgb3IgcGVyZm9ybWFuY2UuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NzEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxOTo1MDoyMi43ODQ1MDc2NzZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDMzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMjA6XFx0XFx0XFx0cmV0dXJuIChzbWFwcyB8fCBpbl9wZikgPyBvcmRlcnMgOiAwO1xcbiAyMjE6XFx0XFxuIDIyMjpcXHRcXHRyZXR1cm4gb3JkZXJzO1xcbiAyMjM6XFx0fVxcbiAyMjQ6XFx0XFxuIDIyNTpcXHRzdGF0aWMgYm9vbCBnZXRfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXFxuIDIyNjpcXHR7XFxuIDIyNzpcXHRcXHRzdHJ1Y3QgZm9saW8gKnplcm9fZm9saW87XFxuIDIyODpcXHRyZXRyeTpcXG4gMjI5OlxcdFxcdGlmIChsaWtlbHkoYXRvbWljX2luY19ub3RfemVybyhcXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50KSkpXFxuIDIzMDpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjMxOlxcdFxcbiAyMzI6XFx0XFx0emVyb19mb2xpbyA9IGZvbGlvX2FsbG9jKChHRlBfVFJBTlNIVUdFIHwgX19HRlBfWkVSTyB8IF9fR0ZQX1pFUk9UQUdTKSBcXHUwMDI2XFxuIDIzMzpcXHRcXHRcXHRcXHRcXHQgfl9fR0ZQX01PVkFCTEUsXFxuIDIzNDpcXHRcXHRcXHRcXHRIUEFHRV9QTURfT1JERVIpO1xcbiAyMzU6XFx0XFx0aWYgKCF6ZXJvX2ZvbGlvKSB7XFxuIDIzNjpcXHRcXHRcXHRjb3VudF92bV9ldmVudChUSFBfWkVST19QQUdFX0FMTE9DX0ZBSUxFRCk7XFxuIDIzNzpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDIzODpcXHRcXHR9XFxuIDIzOTpcXHRcXHQvKiBFbnN1cmUgemVybyBmb2xpbyB3b24ndCBoYXZlIGxhcmdlX3JtYXBwYWJsZSBmbGFnIHNldC4gKi9cXG4gMjQwOlxcdFxcdGZvbGlvX2NsZWFyX2xhcmdlX3JtYXBwYWJsZSh6ZXJvX2ZvbGlvKTtcXG4gMjQxOlxcdFxcdHByZWVtcHRfZGlzYWJsZSgpO1xcbiAyNDI6XFx0XFx0aWYgKGNtcHhjaGcoXFx1MDAyNmh1Z2VfemVyb19mb2xpbywgTlVMTCwgemVyb19mb2xpbykpIHtcXG4gMjQzOlxcdFxcdFxcdHByZWVtcHRfZW5hYmxlKCk7XFxuIDI0NDpcXHRcXHRcXHRmb2xpb19wdXQoemVyb19mb2xpbyk7XFxuIDI0NTpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbiAyNDY6XFx0XFx0fVxcbiAyNDc6XFx0XFx0V1JJVEVfT05DRShodWdlX3plcm9fcGZuLCBmb2xpb19wZm4oemVyb19mb2xpbykpO1xcbiAyNDg6XFx0XFxuIDI0OTpcXHRcXHQvKiBXZSB0YWtlIGFkZGl0aW9uYWwgcmVmZXJlbmNlIGhlcmUuIEl0IHdpbGwgYmUgcHV0IGJhY2sgYnkgc2hyaW5rZXIgKi9cXG4gMjUwOlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCwgMik7XFxuIDI1MTpcXHRcXHRwcmVlbXB0X2VuYWJsZSgpO1xcbiAyNTI6XFx0XFx0Y291bnRfdm1fZXZlbnQoVEhQX1pFUk9fUEFHRV9BTExPQyk7XFxuIDI1MzpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjU0OlxcdH1cXG4gMjU1OlxcdFxcbiAyNTY6XFx0c3RhdGljIHZvaWQgcHV0X2h1Z2VfemVyb19mb2xpbyh2b2lkKVxcbiAyNTc6XFx0e1xcbiAyNTg6XFx0XFx0LypcXG4gMjU5OlxcdFxcdCAqIENvdW50ZXIgc2hvdWxkIG5ldmVyIGdvIHRvIHplcm8gaGVyZS4gT25seSBzaHJpbmtlciBjYW4gcHV0XFxuIDI2MDpcXHRcXHQgKiBsYXN0IHJlZmVyZW5jZS5cXG4gMjYxOlxcdFxcdCAqL1xcbiAyNjI6XFx0XFx0QlVHX09OKGF0b21pY19kZWNfYW5kX3Rlc3QoXFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCkpO1xcbiAyNjM6XFx0fVxcbiAyNjQ6XFx0XFxuIDI2NTpcXHRzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIDI2NjpcXHR7XFxuIDI2NzpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU8pKVxcbiAyNjg6XFx0XFx0XFx0cmV0dXJuIGh1Z2VfemVyb19mb2xpbztcXG4gMjY5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxOTo1MDoyMi43ODUwMTM4NjZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDczMjc4MTk5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gd2VsbC12ZXJzZWQgaW4ga2VybmVsIGludGVybmFsczpcblxuKipEaXZpbmcgaW50byB0aGUgVEhQIEluaXRpYWxpemF0aW9uKipcblxuUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYHRocF9zaHJpbmtlcl9pbml0YC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBzb21ldGhpbmcgcG90ZW50aWFsbHkgY3JpdGljYWwsIGVzcGVjaWFsbHkgc2luY2UgaXQncyBpbnZvbHZlZCBpbiBib290LXRpbWUgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBjaGFuZ2luZyAqZXhhY3RseSogd2l0aGluIHRoYXQgZnVuY3Rpb24uIExldCdzIGdldCB0aGUgY29udGV4dCwgYW5kIGxldCdzIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNpbmNlIGB0aHBfc2hyaW5rZXJfaW5pdGAgaGFuZGxlcyB0aGUgaW5pdGlhbGl6YXRpb24sIGl0J3MgcHJldHR5IHNhZmUgdG8gYXNzdW1lIGl0J3MgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBJIG5lZWQgdG8gcmV2aWV3IHdoYXQgdGhlIGZ1bmN0aW9uIGlzIGN1cnJlbnRseSBkb2luZywgd2hhdCB0aGUgcGF0Y2ggbW9kaWZpZXMsIGFuZCBhbnkgcmVsYXRlZCBmdW5jdGlvbnMuIExldCdzIHNlZSB3aGF0J3MgYmVpbmcgdHdlYWtlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjczOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTk6NTA6MzMuNTE3Nzk4ODM3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNTkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdlX21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk1MDpcXHRpbnQgZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gOTUxOlxcdHtcXG4gOTUyOlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuIDk1MzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gOTU0OlxcdFxcdHJldHVybiBmb2xpb19tZW1jZ19saXN0X2xydV9hbGxvYyhmb2xpbywgXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgR0ZQX0tFUk5FTCk7XFxuIDk1NTpcXHR9XFxuIDk1NjpcXHRcXG4gOTU3OlxcdHN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXFxuIDk1ODpcXHR7XFxuIDk1OTpcXHRcXHRkZWZlcnJlZF9zcGxpdF9zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfFxcbiA5NjA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFNIUklOS0VSX01FTUNHX0FXQVJFLFxcbiA5NjE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcXCJ0aHAtZGVmZXJyZWRfc3BsaXRcXFwiKTtcXG4gOTYyOlxcdFxcdGlmICghZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpXFxuIDk2MzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gOTY0OlxcdFxcbiA5NjU6XFx0XFx0aWYgKGxpc3RfbHJ1X2luaXRfbWVtY2dfa2V5KFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsXFxuIDk2NjpcXHRcXHRcXHRcXHRcXHQgICAgZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIsXFxuIDk2NzpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmRlZmVycmVkX3NwbGl0X2tleSkpIHtcXG4gOTY4OlxcdFxcdFxcdHNocmlua2VyX2ZyZWUoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpO1xcbiA5Njk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDk3MDpcXHRcXHR9XFxuIDk3MTpcXHRcXG4gOTcyOlxcdFxcdGRlZmVycmVkX3NwbGl0X3Nocmlua2VyLVxcdTAwM2Vjb3VudF9vYmplY3RzID0gZGVmZXJyZWRfc3BsaXRfY291bnQ7XFxuIDk3MzpcXHRcXHRkZWZlcnJlZF9zcGxpdF9zaHJpbmtlci1cXHUwMDNlc2Nhbl9vYmplY3RzID0gZGVmZXJyZWRfc3BsaXRfc2NhbjtcXG4gOTc0OlxcdFxcdHNocmlua2VyX3JlZ2lzdGVyKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcXG4gOTc1OlxcdFxcbiA5NzY6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPKSkge1xcbiA5Nzc6XFx0XFx0XFx0LypcXG4gOTc4OlxcdFxcdFxcdCAqIEJ1bXAgdGhlIHJlZmVyZW5jZSBvZiB0aGUgaHVnZV96ZXJvX2ZvbGlvIGFuZCBkbyBub3RcXG4gOTc5OlxcdFxcdFxcdCAqIGluaXRpYWxpemUgdGhlIHNocmlua2VyLlxcbiA5ODA6XFx0XFx0XFx0ICpcXG4gOTgxOlxcdFxcdFxcdCAqIGh1Z2VfemVyb19mb2xpbyB3aWxsIGFsd2F5cyBiZSBOVUxMIG9uIGZhaWx1cmUuIFdlIGFzc3VtZVxcbiA5ODI6XFx0XFx0XFx0ICogdGhhdCBnZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBtb3N0IGxpa2VseSBub3QgZmFpbCBhc1xcbiA5ODM6XFx0XFx0XFx0ICogdGhwX3Nocmlua2VyX2luaXQoKSBpcyBpbnZva2VkIGVhcmx5IG9uIGR1cmluZyBib290LlxcbiA5ODQ6XFx0XFx0XFx0ICovXFxuIDk4NTpcXHRcXHRcXHRpZiAoIWdldF9odWdlX3plcm9fZm9saW8oKSkge1xcbiA5ODY6XFx0XFx0XFx0XFx0cHJfd2FybihcXFwiQWxsb2NhdGluZyBwZXJzaXN0ZW50IGh1Z2UgemVybyBmb2xpbyBmYWlsZWRcXFxcblxcXCIpO1xcbiA5ODc6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDk4ODpcXHRcXHRcXHR9XFxuIDk4OTpcXHRcXG4gOTkwOlxcdFxcdFxcdC8qIFNldCB1cCBkdXJpbmcgZWFybHkgYm9vdDsgbm8gZXhwbGljaXQgVExCIGZsdXNoIGlzIG5lZWRlZCBoZXJlLiAqL1xcbiA5OTE6XFx0XFx0XFx0c2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChmb2xpb19hZGRyZXNzKGh1Z2VfemVyb19mb2xpbyksXFxuIDk5MjpcXHRcXHRcXHRcXHRcXHRcXHQgIEhQQUdFX1BNRF9OUik7XFxuIDk5MzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gOTk0OlxcdFxcdH1cXG4gOTk1OlxcdFxcbiA5OTY6XFx0XFx0aHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyID0gc2hyaW5rZXJfYWxsb2MoMCwgXFxcInRocC16ZXJvXFxcIik7XFxuIDk5NzpcXHRcXHRpZiAoIWh1Z2VfemVyb19mb2xpb19zaHJpbmtlcikge1xcbiA5OTg6XFx0XFx0XFx0c2hyaW5rZXJfZnJlZShkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcik7XFxuIDk5OTpcXHRcXHRcXHRsaXN0X2xydV9kZXN0cm95KFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxOTo1MDozMy41MTgzMDc3NDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTk1MjU4NDIxMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGZ1bmN0aW9uLiBCYXNlZCBvbiB0aGUgY3VycmVudCBjb2RlLCBpdCBsb29rcyBsaWtlIGl0J3MgKmV4Y2x1c2l2ZWx5KiBjYWxsZWQgZnJvbSBgdGhwX3Nocmlua2VyX2luaXRgLiBOb3csIHRoYXQncyBhIHByZXR0eSBzcGVjaWZpYyBkZXBlbmRlbmN5IHdoZW4geW91IGNvbnNpZGVyIHRoYXQgaXQncyBvbmx5IGNhbGxlZCB3aGVuIGBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9gIGlzIGVuYWJsZWQuIE15IGZpcnN0IGluc3RpbmN0IGhlcmUgaXMgdG8gcXVlc3Rpb24gdGhpcy4gSXMgdGhpcyAqcmVhbGx5KiB0aGUgb25seSBwbGFjZSB3aGVyZSBpdCdzIHVzZWQ/IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhpcy4gSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgdGhlcmUgYXJlbid0IG90aGVyIGNhbGwgc2l0ZXMuIExldCBtZSBydW4gYSBxdWljayBzZWFyY2ggdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MTUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE5OjUwOjUzLjA0NDE1MzA2NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc0OTUyODY3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaD0xNj1pbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpO1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjE3OmludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjE4OiNkZWZpbmUgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtMTktYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKTtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYz0zNTg9aW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKVxcbi0tXFxuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jLTM2Ny1cXG5hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmM6MzY4OmludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jLTM2OS17XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg9OTE9aW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6OTI6aW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjkzOiNkZWZpbmUgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTk0LWJvb2wga2VybmVsX3BhZ2VfcHJlc2VudChzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI2NTc9aW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjY0LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjY2NTppbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjY2Ni17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaD0zNz1zdGF0aWMgaW5saW5lIGludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtNDMtLyoqXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg6NDQ6ICogc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCAtIG1ha2UgZGlyZWN0LW1hcCBtYXBwaW5ncyByZWFkLW9ubHlcXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC00NS0gKiBAYWRkcjogc3RhcnQgYWRkcmVzcyBpbiB0aGUgZGlyZWN0IG1hcFxcbi0tXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtNTItICovXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg6NTM6c3RhdGljIGlubGluZSBpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLFxcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTU0LVxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg9Njk9c3RhdGljIGlubGluZSBib29sIGNhbl9zZXRfZGlyZWN0X21hcCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtNzUtXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg6NzY6I2lmbmRlZiBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg6Nzc6c3RhdGljIGlubGluZSBpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLFxcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTc4LVxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtODItXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg6ODM6I2RlZmluZSBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hcXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC04NC0jZW5kaWZcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9OTU3PXN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTk5MC1cXHRcXHQvKiBTZXQgdXAgZHVyaW5nIGVhcmx5IGJvb3Q7IG5vIGV4cGxpY2l0IFRMQiBmbHVzaCBpcyBuZWVkZWQgaGVyZS4gKi9cXG5tbS9odWdlX21lbW9yeS5jOjk5MTpcXHRcXHRzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGZvbGlvX2FkZHJlc3MoaHVnZV96ZXJvX2ZvbGlvKSxcXG5tbS9odWdlX21lbW9yeS5jLTk5Mi1cXHRcXHRcXHRcXHRcXHQgIEhQQUdFX1BNRF9OUik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE5OjUwOjU4Ljc5MzY5MjgzM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjc1Njc5NjQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEFuYWx5c2lzOiBIdWdlIFplcm8gRm9saW8gUmVhZC1Pbmx5IFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoYCwgYW5kIHRoZSBvbmx5IHBsYWNlIGl0J3MgY2FsbGVkIGlzIHdpdGhpbiBgdGhwX3Nocmlua2VyX2luaXRgLiAgQW5kICp0aGF0KiBpcyBhbiBgX19pbml0YCBmdW5jdGlvbiwgd2hpY2ggaXMgb25seSBleGVjdXRlZCBkdXJpbmcgYm9vdCBhbmQgdGhlbiBkaXNjYXJkZWQuIFRoaXMgbWVhbnMgaXQncyB1bnJlYWNoYWJsZSBhZnRlciB0aGUga2VybmVsIGlzIHVwIGFuZCBydW5uaW5nIOKAkyBhIGtleSBwb2ludC5cblxuSSBpbml0aWFsbHkgY29uc2lkZXJlZCB3aGV0aGVyIHRoZXJlIHdhcyBzb21lIHNpZGUgZWZmZWN0LCBzb21ldGhpbmcgKmVsc2UqIHRoZSBmdXp6ZXIgY291bGQgdHJpZ2dlci4gVGhlIGNoYW5nZSBtYWtlcyB0aGUgaHVnZSB6ZXJvIGZvbGlvIHJlYWQtb25seSBpbiB0aGUgZGlyZWN0IG1hcC4gTXkgZmlyc3QgdGhvdWdodCB3YXMsIFwiQ291bGQgYSB3cml0ZSB0byBpdCBub3cgY2F1c2UgYSBjcmFzaCB0aGUgZnV6emVyIGNvdWxkIGRldGVjdD9cIiAgWWVzLCBpdCB3b3VsZCwgYnV0Li4uIHRoZSBodWdlIHplcm8gZm9saW8gaXMgKnN1cHBvc2VkKiB0byBiZSByZWFkLW9ubHkgYW55d2F5ISBUaGlzIHBhdGNoIGlzIGhhcmRlbmluZywgcHJldmVudGluZyBhY2NpZGVudGFsIG9yIG1hbGljaW91cyB3cml0ZXMgdG8gaXQgYW5kIHR1cm5pbmcgdGhlbSBpbnRvIGNyYXNoZXMuIEdvb2QgZm9yIHNlY3VyaXR5LCBidXQgYSBjcmFzaCB3b3VsZG4ndCBpbmRpY2F0ZSBzb21ldGhpbmcgbmV3IGlzIGZ1enphYmxlLlxuXG5TbywgdGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlICpuZXcqLCByZWFjaGFibGUgY29kZSBwYXRocyBwZXIgc2UuICBJdCBjaGFuZ2VzIG1lbW9yeSBwcm90ZWN0aW9uLiBJZiBXb3J0aEZ1enppbmcgd2VyZSB0cnVlLCBJJ2QgaGF2ZSB0byBpZGVudGlmeSB3aGF0IHRvIGZvY3VzIG9uLiBCdXQgdGhlcmUncyBubyBzcGVjaWZpYyBmdW5jdGlvbiB0byB0YXJnZXQgYmVjYXVzZSB0aGUgcHJvdGVjdGlvbiBhcHBsaWVzIGdsb2JhbGx5IHRvIHRoZSBodWdlIHplcm8gZm9saW8uIEFueSBjb2RlIHRoYXQgZGVhbHMgd2l0aCBUSFAgY291bGQgdGhlb3JldGljYWxseSBpbnRlcmFjdCB3aXRoIGl0LCBidXQgSSBjYW4ndCBwaW5wb2ludCBhIHNwZWNpZmljIGVudHJ5IHBvaW50IHRoYXQncyBuZXdseSBleHBvc2VkLlxuXG5UaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIFRoaXMgY29kZSwgdGhlIG5ldyBmdW5jdGlvbiBhbmQgdGhlIGNhbGwgdG8gaXQsIGlzIG9ubHkgZXhlY3V0ZWQgZHVyaW5nIGJvb3QgYW5kIGlzIG5vdCByZWFjaGFibGUgZHVyaW5nIHRoZSBmdXp6aW5nIHBoYXNlLlxuXG5FdmVuIGlmIEkgKmNvdWxkKiB0cmlnZ2VyIGEgd3JpdGUgdG8gdGhlIGZvbGlvICphZnRlciogYm9vdCwgdGhlIHBhdGNoIHdvdWxkIG9ubHkgY2hhbmdlIGFuIGV4aXN0aW5nLCBwb3NzaWJseSBlcnJvbmVvdXMsIGJlaGF2aW9yIGludG8gYSBjcmFzaCwgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgbmV3IGZ1bmN0aW9uYWxpdHkuIFNvLCBiYXNlZCBvbiB0aGUgcHJvbXB0J3MgaW5zdHJ1Y3Rpb25zLCBhbmQgZ2l2ZW4gdGhhdCB0aGUgYWRkZWQgY29kZSBpcyBpbmFjY2Vzc2libGUgYWZ0ZXIgYm9vdCwgSSBjYW5ub3QgcHJvdmlkZSBhbnkgbWVhbmluZ2Z1bCBgRm9jdXNTeW1ib2xzYC5cblxuSSByZWNoZWNrZWQgdGhlIGNvZGUgYW5kIGNvbmZpcm1lZCB0aGF0IGBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoYCBpc24ndCBleHBvcnRlZCBhbmQgaXNuJ3QgY2FsbGVkIGFueXdoZXJlIGVsc2UuIEl0J3Mgc3RyaWN0bHkgYSBib290LXRpbWUgaGFyZGVuaW5nIG1lYXN1cmUuXG5cbkkgd2lsbCBmb3JtdWxhdGUgdGhlIHJlYXNvbmluZyBhczogVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGFuZCBjYWxscyBpdCBmcm9tIGB0aHBfc2hyaW5rZXJfaW5pdGAsIHdoaWNoIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uIGV4ZWN1dGVkIG9ubHkgb25jZSBkdXJpbmcgZWFybHkga2VybmVsIGJvb3QuIFNpbmNlIHRoaXMgY29kZSBjYW5ub3QgYmUgdHJpZ2dlcmVkIG9yIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgZHVyaW5nIHRoZSBmdXp6aW5nIHBoYXNlLCBpdCBpcyBub3QgcG9zc2libGUgdG8gZnV6eiB0aGlzIGNoYW5nZS4gV29ydGhGdXp6aW5nID0gZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNTgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE5OjUxOjExLjU1MDQ5MzIzMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQzNTg3MDU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9ODI0PWNvbmZpZyBBUkNIX1dBTlRTX1RIUF9TV0FQXFxuLS1cXG5tbS9LY29uZmlnLTgyNi1cXG5tbS9LY29uZmlnOjgyNzpjb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cXG5tbS9LY29uZmlnLTgyOC1cXHRib29sIFxcXCJBbGxvY2F0ZSBhIFBNRCBzaXplZCBmb2xpbyBmb3IgemVyb2luZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTk6NTE6MTQuOTg2MzcxNjYyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5ODY2NDU0ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBJJ20gZGVlcCBpbiB0aGUgY29kZTpcblxuKipUaGlua2luZyBUaHJvdWdoIFRoaXMgQm9vdC1UaW1lIEZsYWcqKlxuXG5SaWdodCwgaXQncyBjb25maXJtZWQuICpUaGF0KiBjb25kaXRpb24gaXMgdHJ1ZS4gQnV0IGhhbmcgb24uLi4gdGhpcyBjb2RlLCB0aGlzIGNydWNpYWwgcGllY2UsIGl0IG9ubHkgcnVucyBkdXJpbmcgdGhlIGJvb3Qgc2VxdWVuY2UuIFRoYXQncyB0aGUga2V5LiBUaGF0IGNoYW5nZXMgZXZlcnl0aGluZyBpbiB0aGUgY29udGV4dCBvZiBteSB1bmRlcnN0YW5kaW5nLlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBpcyBvbmx5IGV4ZWN1dGVkIGR1cmluZyBib290IEkgc2hvdWxkIGNhbGwgc2V0LXJlc3VsdHMgd2l0aCBXb3J0aEZ1enppbmc9ZmFsc2UuIEdvdCBpdC4gTm8gbmVlZCB0byBtdWRkeSB0aGUgd2F0ZXJzIG9yIGNvbXBsaWNhdGUgdGhpbmdzIGR1cmluZyB0aGUgXCJub3JtYWxcIiBydW50aW1lLiBDbGVhciBhbmQgY29uY2lzZSwgZXhhY3RseSBhcyBpdCBzaG91bGQgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODc0LCJPdXRwdXRUb2tlbnMiOjExOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE5OjUxOjIyLjk3MzAyMDM2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAgYW5kIGNhbGxzIGl0IGZyb20gYHRocF9zaHJpbmtlcl9pbml0YCwgd2hpY2ggaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24uIFRoaXMgY29kZSBpcyBleGVjdXRlZCBleGFjdGx5IG9uY2UgZHVyaW5nIGVhcmx5IGtlcm5lbCBib290IHRvIGFwcGx5IG1lbW9yeSBwcm90ZWN0aW9ucyB0byB0aGUgaHVnZSB6ZXJvIGZvbGlvLiBTaW5jZSB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBjYW5ub3QgYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIG9yIGV4ZWN1dGVkIGR1cmluZyB0aGUgcG9zdC1ib290IGZ1enppbmcgcGhhc2UsIHRoaXMgcGF0Y2ggY2Fubm90IGJlIGFjdGl2ZWx5IGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGFuZCBjYWxscyBpdCBmcm9tIGB0aHBfc2hyaW5rZXJfaW5pdGAsIHdoaWNoIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLiBUaGlzIGNvZGUgaXMgZXhlY3V0ZWQgZXhhY3RseSBvbmNlIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdCB0byBhcHBseSBtZW1vcnkgcHJvdGVjdGlvbnMgdG8gdGhlIGh1Z2UgemVybyBmb2xpby4gU2luY2UgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgY2Fubm90IGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSBvciBleGVjdXRlZCBkdXJpbmcgdGhlIHBvc3QtYm9vdCBmdXp6aW5nIHBoYXNlLCB0aGlzIHBhdGNoIGNhbm5vdCBiZSBhY3RpdmVseSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowg8hms[1] Phase: Running StartedAt: 2026-07-06 19:52:16 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg8hms[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-06 19:52:16 +0000 UTC FinishedAt: 2026-07-06 19:52:31 +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,}