Name: series-workflow82nnt Phase: Failed StartedAt: 2026-08-04 16:29:04 +0000 UTC FinishedAt: 2026-08-04 17:12:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow82nnt[0] Phase: Succeeded StartedAt: 2026-08-04 16:29:04 +0000 UTC FinishedAt: 2026-08-04 17:11:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow82nnt[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 16:29:04 +0000 UTC FinishedAt: 2026-08-04 17:11:28 +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+CgkJCTx0ZD4yMDI2LzA4LzA0IDE3OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyBhbmQgYmVuY2htYXJrcyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxNzoxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg0Y2E0NWRlMDhiNmZhNTU1OWI1YjFhOWNmOTQ3ZWY2MGQxZjNmNjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDE3OjExOjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuaW5kZXggNTVkMzk0NDM4NzA1YS4uZTRkOGNiZDUxZDcxNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG5AQCAtOTY2LDYgJiM0Mzs5NjYsNyBAQCAkKE9VVFBVVCkvYmVuY2hfcmluZ2J1ZnMubzogJChPVVRQVVQpL3JpbmdidWZfYmVuY2guc2tlbC5oIFxcXG4gJChPVVRQVVQpL2JlbmNoX2Jsb29tX2ZpbHRlcl9tYXAubzogJChPVVRQVVQpL2Jsb29tX2ZpbHRlcl9iZW5jaC5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfYnBmX2xvb3AubzogJChPVVRQVVQpL2JwZl9sb29wX2JlbmNoLnNrZWwuaFxuICQoT1VUUFVUKS9iZW5jaF9zdHJuY21wLm86ICQoT1VUUFVUKS9zdHJuY21wX2JlbmNoLnNrZWwuaFxuJiM0MzskKE9VVFBVVCkvYmVuY2hfdHJhY2luZ19tdWx0aV9hdHRhY2gubzogJChPVVRQVVQpL3RyYWNpbmdfbXVsdGlfYmVuY2guc2tlbC5oXG4gJChPVVRQVVQpL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLm86ICQoT1VUUFVUKS9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZV9iZW5jaC5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfbG9jYWxfc3RvcmFnZS5vOiAkKE9VVFBVVCkvbG9jYWxfc3RvcmFnZV9iZW5jaC5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfbG9jYWxfc3RvcmFnZV9yY3VfdGFza3NfdHJhY2UubzogJChPVVRQVVQpL2xvY2FsX3N0b3JhZ2VfcmN1X3Rhc2tzX3RyYWNlX2JlbmNoLnNrZWwuaFxuQEAgLTk5MSw2ICYjNDM7OTkyLDcgQEAgJChPVVRQVVQpL2JlbmNoOiAkKE9VVFBVVCkvYmVuY2gubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2Jsb29tX2ZpbHRlcl9tYXAubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2JwZl9sb29wLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9zdHJuY21wLm8gXFxcbiYjNDM7XHRcdCAkKE9VVFBVVCkvYmVuY2hfdHJhY2luZ19tdWx0aV9hdHRhY2gubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9sb2NhbF9zdG9yYWdlLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9sb2NhbF9zdG9yYWdlX3JjdV90YXNrc190cmFjZS5vIFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xuaW5kZXggM2Q5ZDJjZDc3NjRiZC4uNWNlMzE0NTk4MzVjZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xuQEAgLTU0NSw2ICYjNDM7NTQ1LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF90cmlnX3Vwcm9iZV9tdWx0aV9ub3A1O1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfdHJpZ191cmV0cHJvYmVfbXVsdGlfbm9wNTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX3RyaWdfdXNkdF9ub3A7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF90cmlnX3VzZHRfbm9wNTtcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaDtcbiAjZW5kaWZcbiBcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX3JiX2xpYmJwZjtcbkBAIC02MjgsNiAmIzQzOzYyOSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmVuY2ggKmJlbmNoc1tdID0ge1xuIFx0XHUwMDI2YmVuY2hfdHJpZ191cmV0cHJvYmVfbXVsdGlfbm9wNSxcbiBcdFx1MDAyNmJlbmNoX3RyaWdfdXNkdF9ub3AsXG4gXHRcdTAwMjZiZW5jaF90cmlnX3VzZHRfbm9wNSxcbiYjNDM7XHRcdTAwMjZiZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaCxcbiAjZW5kaWZcbiBcdC8qIHJpbmdidWYvcGVyZmJ1ZiBiZW5jaG1hcmtzICovXG4gXHRcdTAwMjZiZW5jaF9yYl9saWJicGYsXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzM4OWQxNzQyZGRjYlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaC5jXG5AQCAtMCwwICYjNDM7MSwxNzcgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzZWFyY2guaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtiZW5jaC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Rlc3RpbmdfaGVscGVycy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3RyYWNlX2hlbHBlcnMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt0cmFjaW5nX211bHRpX2JlbmNoLnNrZWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDticGYvbGliYnBmX2ludGVybmFsLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgY29tcGFyZShjb25zdCB2b2lkICpwcGEsIGNvbnN0IHZvaWQgKnBwYilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGNoYXIgKnBhID0gKihjb25zdCBjaGFyICoqKXBwYTtcbiYjNDM7XHRjb25zdCBjaGFyICpwYiA9ICooY29uc3QgY2hhciAqKilwcGI7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzdHJjbXAocGEsIHBiKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGRlc3Ryb3lfZnJlZV9ub3Aodm9pZCAqcHRyKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRyYWNpbmdfbXVsdGlfYXR0YWNoX3NldHVwKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfdHJhY2luZ19tdWx0aV9vcHRzLCBvcHRzKTtcbiYjNDM7XHRzdHJ1Y3QgdHJhY2luZ19tdWx0aV9iZW5jaCAqc2tlbCA9IE5VTEw7XG4mIzQzO1x0bG9uZyBhdHRhY2hfc3RhcnRfbnMsIGF0dGFjaF9lbmRfbnM7XG4mIzQzO1x0bG9uZyBkZXRhY2hfc3RhcnRfbnMsIGRldGFjaF9lbmRfbnM7XG4mIzQzO1x0ZG91YmxlIGF0dGFjaF9kZWx0YSwgZGV0YWNoX2RlbHRhO1xuJiM0MztcdHN0cnVjdCBicGZfbGluayAqbGluayA9IE5VTEw7XG4mIzQzO1x0c2l6ZV90IGksIGNhcCA9IDAsIGNudCA9IDA7XG4mIzQzO1x0c3RydWN0IGtzeW1zICprc3ltcyA9IE5VTEw7XG4mIzQzO1x0dm9pZCAqcm9vdCA9IE5VTEw7XG4mIzQzO1x0dm9pZCAqZHVwcyA9IE5VTEw7XG4mIzQzO1x0X191MzIgKmlkcyA9IE5VTEw7XG4mIzQzO1x0X191MzIgbnIsIHR5cGVfaWQ7XG4mIzQzO1x0c3RydWN0IGJ0ZiAqYnRmO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHNldHVwX2xpYmJwZigpO1xuJiM0MztcbiYjNDM7XHRidGYgPSBidGZfX2xvYWRfdm1saW51eF9idGYoKTtcbiYjNDM7XHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGJ0Zik7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0YnRmID0gTlVMTDtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtmYWlsZWQgdG8gbG9hZCB2bWxpbnV4IEJURjogJXNcXG5cJiMzNDssIHN0cmVycm9yKC1lcnIpKTtcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNrZWwgPSB0cmFjaW5nX211bHRpX2JlbmNoX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0ZXJyID0gbGliYnBmX2dldF9lcnJvcihza2VsKTtcbiYjNDM7XHRpZiAoIXNrZWwpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtmYWlsZWQgdG8gb3BlbiBhbmQgbG9hZCBza2VsZXRvbjogJXNcXG5cJiMzNDssIHN0cmVycm9yKC1lcnIpKTtcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9nZXRfa3N5bXMoXHUwMDI2a3N5bXMsIHRydWUpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtmYWlsZWQgdG8gZ2V0IGtlcm5lbCBzeW1ib2xzOiAlc1xcblwmIzM0Oywgc3RyZXJyb3IoLWVycikpO1xuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogR2V0IGFsbCBmdHJhY2UgJiMzOTtzYWZlJiMzOTsgc3ltYm9scy4uICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mga3N5bXMtXHUwMDNlZmlsdGVyZWRfY250OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKCF0c2VhcmNoKFx1MDAyNmtzeW1zLVx1MDAzZWZpbHRlcmVkX3N5bXNbaV0sIFx1MDAyNnJvb3QsIGNvbXBhcmUpKSB7XG4mIzQzO1x0XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtmYWlsZWQgdG8gaW5kZXggZnRyYWNlIHN5bWJvbHNcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENvbGxlY3QgbmFtZXMgdGhhdCBhcmUgbm90IHVuaXF1ZSBpbiBrYWxsc3ltcy4gVGhlIGtlcm5lbCByZXNvbHZlcyBhXG4mIzQzO1x0ICogdHJhY2luZy1tdWx0aSBCVEYgaWQgdG8gYW4gYWRkcmVzcyB3aXRoIGthbGxzeW1zX2xvb2t1cF9uYW1lKCksIHdoaWNoXG4mIzQzO1x0ICogcmV0dXJucyB0aGUgZmlyc3Qgc3ltYm9sIG9mIHRoYXQgbmFtZS4gRm9yIGEgZHVwbGljYXRlIG5hbWUgdGhhdCBtYXlcbiYjNDM7XHQgKiBiZSBhIGRpZmZlcmVudCAobm9uLWZ0cmFjZS1hYmxlKSBpbnN0YW5jZSB0aGFuIHRoZSBmdHJhY2UtYWJsZSBvbmUgaW5cbiYjNDM7XHQgKiBhdmFpbGFibGVfZmlsdGVyX2Z1bmN0aW9ucywgc28gYXR0YWNoaW5nIHRvIGl0IGJ5IEJURiBpZCBmYWlscyB3aXRoXG4mIzQzO1x0ICogLUVOT0VOVCAoZS5nLiB0X3N0YXJ0L3RfbmV4dC90X3N0b3ApLiBrc3ltcy1cdTAwM2VzeW1zIGlzIHNvcnRlZCBieSBuYW1lLFxuJiM0MztcdCAqIHNvIGVxdWFsIG5hbWVzIGFyZSBhZGphY2VudC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBrc3ltcy1cdTAwM2VzeW1fY250OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHN0cmNtcChrc3ltcy1cdTAwM2VzeW1zW2ldLm5hbWUsIGtzeW1zLVx1MDAzZXN5bXNbaSAtIDFdLm5hbWUpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmICghdHNlYXJjaChcdTAwMjZrc3ltcy1cdTAwM2VzeW1zW2ldLm5hbWUsIFx1MDAyNmR1cHMsIGNvbXBhcmUpKSB7XG4mIzQzO1x0XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtmYWlsZWQgdG8gaW5kZXggZHVwbGljYXRlIGtlcm5lbCBzeW1ib2xzXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogLi5hbmQgZmlsdGVyIHRoZW0gdGhyb3VnaCBCVEYgYW5kIGJ0Zl90eXBlX2lzX3RyYWNlYWJsZV9mdW5jLiAqL1xuJiM0MztcdG5yID0gYnRmX190eXBlX2NudChidGYpO1xuJiM0MztcdGZvciAodHlwZV9pZCA9IDE7IHR5cGVfaWQgXHUwMDNjIG5yOyB0eXBlX2lkJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0eXBlO1xuJiM0MztcdFx0Y29uc3QgY2hhciAqc3RyO1xuJiM0MztcbiYjNDM7XHRcdHR5cGUgPSBidGZfX3R5cGVfYnlfaWQoYnRmLCB0eXBlX2lkKTtcbiYjNDM7XHRcdGlmICghdHlwZSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKEJURl9JTkZPX0tJTkQodHlwZS1cdTAwM2VpbmZvKSAhPSBCVEZfS0lORF9GVU5DKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRzdHIgPSBidGZfX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdHlwZS1cdTAwM2VuYW1lX29mZik7XG4mIzQzO1x0XHRpZiAoIXN0cilcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCF0ZmluZChcdTAwMjZzdHIsIFx1MDAyNnJvb3QsIGNvbXBhcmUpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBTa2lwIG5hbWVzIHRoYXQgYXJlIG5vdCB1bmlxdWUgaW4ga2FsbHN5bXMsIHNlZSBhYm92ZS4gKi9cbiYjNDM7XHRcdGlmICh0ZmluZChcdTAwMjZzdHIsIFx1MDAyNmR1cHMsIGNvbXBhcmUpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWJ0Zl90eXBlX2lzX3RyYWNlYWJsZV9mdW5jKGJ0ZiwgdHlwZSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IGxpYmJwZl9lbnN1cmVfbWVtKCh2b2lkICoqKVx1MDAyNmlkcywgXHUwMDI2Y2FwLCBzaXplb2YoKmlkcyksIGNudCAmIzQzOyAxKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSBCVEYgSUQgYXJyYXk6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHN0cmVycm9yKC1lcnIpKTtcbiYjNDM7XHRcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlkc1tjbnQmIzQzOyYjNDM7XSA9IHR5cGVfaWQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvcHRzLmlkcyA9IGlkcztcbiYjNDM7XHRvcHRzLmNudCA9IGNudDtcbiYjNDM7XG4mIzQzO1x0YXR0YWNoX3N0YXJ0X25zID0gZ2V0X3RpbWVfbnMoKTtcbiYjNDM7XHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF90cmFjaW5nX211bHRpKHNrZWwtXHUwMDNlcHJvZ3MuYmVuY2gsIE5VTEwsIFx1MDAyNm9wdHMpO1xuJiM0MztcdGF0dGFjaF9lbmRfbnMgPSBnZXRfdGltZV9ucygpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGxpbmspO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGxpbmsgPSBOVUxMO1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2ZhaWxlZCB0byBhdHRhY2ggdHJhY2luZyBtdWx0aSBsaW5rOiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0c3RyZXJyb3IoLWVycikpO1xuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGV0YWNoX3N0YXJ0X25zID0gZ2V0X3RpbWVfbnMoKTtcbiYjNDM7XHRlcnIgPSBicGZfbGlua19fZGVzdHJveShsaW5rKTtcbiYjNDM7XHRkZXRhY2hfZW5kX25zID0gZ2V0X3RpbWVfbnMoKTtcbiYjNDM7XHRsaW5rID0gTlVMTDtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ZmFpbGVkIHRvIGRldGFjaCB0cmFjaW5nIG11bHRpIGxpbms6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRzdHJlcnJvcigtZXJyKSk7XG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRhdHRhY2hfZGVsdGEgPSAoYXR0YWNoX2VuZF9ucyAtIGF0dGFjaF9zdGFydF9ucykgLyAxMDAwMDAwMDAwLjA7XG4mIzQzO1x0ZGV0YWNoX2RlbHRhID0gKGRldGFjaF9lbmRfbnMgLSBkZXRhY2hfc3RhcnRfbnMpIC8gMTAwMDAwMDAwMC4wO1xuJiM0MztcbiYjNDM7XHRwcmludGYoXCYjMzQ7JXM6IGZvdW5kICV6dSBmdW5jdGlvbnNcXG5cJiMzNDssIGJlbmNoLVx1MDAzZW5hbWUsIGNudCk7XG4mIzQzO1x0cHJpbnRmKFwmIzM0OyVzOiBhdHRhY2hlZCBpbiAlNy4zbGZzXFxuXCYjMzQ7LCBiZW5jaC1cdTAwM2VuYW1lLCBhdHRhY2hfZGVsdGEpO1xuJiM0MztcdHByaW50ZihcJiMzNDslczogZGV0YWNoZWQgaW4gJTcuM2xmc1xcblwmIzM0OywgYmVuY2gtXHUwMDNlbmFtZSwgZGV0YWNoX2RlbHRhKTtcbiYjNDM7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0YnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XG4mIzQzO1x0dHJhY2luZ19tdWx0aV9iZW5jaF9fZGVzdHJveShza2VsKTtcbiYjNDM7XHR0ZGVzdHJveShyb290LCB0ZGVzdHJveV9mcmVlX25vcCk7XG4mIzQzO1x0dGRlc3Ryb3koZHVwcywgdGRlc3Ryb3lfZnJlZV9ub3ApO1xuJiM0MztcdGZyZWVfa2FsbHN5bXNfbG9jYWwoa3N5bXMpO1xuJiM0MztcdGZyZWUoaWRzKTtcbiYjNDM7XHRidGZfX2ZyZWUoYnRmKTtcbiYjNDM7XG4mIzQzO1x0ZXhpdChlcnIgPyAxIDogMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaCA9IHtcbiYjNDM7XHQubmFtZSA9IFwmIzM0O3RyYWNpbmctbXVsdGktYXR0YWNoXCYjMzQ7LFxuJiM0MztcdC5zZXR1cCA9IHRyYWNpbmdfbXVsdGlfYXR0YWNoX3NldHVwLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuY1xuaW5kZXggMGFhOTUzMmEwNWNmZS4uZmQ0ZjI1NmQyZTBhNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19tdWx0aS5jXG5AQCAtMywxNCAmIzQzOzMsMTIgQEBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NicGYvYnRmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzZWFyY2guaFx1MDAzZVxuLSNpbmNsdWRlIFwmIzM0O2JwZi9saWJicGZfaW50ZXJuYWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3RyYWNpbmdfbXVsdGkuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dHJhY2luZ19tdWx0aV9tb2R1bGUuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dHJhY2luZ19tdWx0aV9pbnRlcnNlY3Quc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dHJhY2luZ19tdWx0aV9zZXNzaW9uLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3RyYWNpbmdfbXVsdGlfZmFpbC5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt0cmFjaW5nX211bHRpX3ZlcmlmaWVyLnNrZWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O3RyYWNpbmdfbXVsdGlfYmVuY2guc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dHJhY2luZ19tdWx0aV9yb2xsYmFjay5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt0cmFjZV9oZWxwZXJzLmhcJiMzNDtcbiBcbkBAIC02NjIsMTI5ICYjNDM7NjYwLDYgQEAgc3RhdGljIHZvaWQgdGVzdF9hdHRhY2hfYXBpX2ZhaWxzKHZvaWQpXG4gXHRmcmVlKGlkczIpO1xuIH1cbiBcbi12b2lkIHNlcmlhbF90ZXN0X3RyYWNpbmdfbXVsdGlfYmVuY2hfYXR0YWNoKHZvaWQpXG4te1xuLVx0TElCQlBGX09QVFMoYnBmX3RyYWNpbmdfbXVsdGlfb3B0cywgb3B0cyk7XG4tXHRzdHJ1Y3QgdHJhY2luZ19tdWx0aV9iZW5jaCAqc2tlbCA9IE5VTEw7XG4tXHRsb25nIGF0dGFjaF9zdGFydF9ucywgYXR0YWNoX2VuZF9ucztcbi1cdGxvbmcgZGV0YWNoX3N0YXJ0X25zLCBkZXRhY2hfZW5kX25zO1xuLVx0ZG91YmxlIGF0dGFjaF9kZWx0YSwgZGV0YWNoX2RlbHRhO1xuLVx0c3RydWN0IGJwZl9saW5rICpsaW5rID0gTlVMTDtcbi1cdHNpemVfdCBpLCBjYXAgPSAwLCBjbnQgPSAwO1xuLVx0c3RydWN0IGtzeW1zICprc3ltcyA9IE5VTEw7XG4tXHR2b2lkICpyb290ID0gTlVMTDtcbi1cdHZvaWQgKmR1cHMgPSBOVUxMO1xuLVx0X191MzIgKmlkcyA9IE5VTEw7XG4tXHRfX3UzMiBuciwgdHlwZV9pZDtcbi1cdHN0cnVjdCBidGYgKmJ0Zjtcbi1cdGludCBlcnI7XG4tXG4tI2lmbmRlZiBfX3g4Nl82NF9fXG4tXHR0ZXN0X19za2lwKCk7XG4tXHRyZXR1cm47XG4tI2VuZGlmXG4tXG4tXHRidGYgPSBidGZfX2xvYWRfdm1saW51eF9idGYoKTtcbi1cdGlmICghQVNTRVJUX09LX1BUUihidGYsIFwmIzM0O2J0Zl9fbG9hZF92bWxpbnV4X2J0ZlwmIzM0OykpXG4tXHRcdHJldHVybjtcbi1cbi1cdHNrZWwgPSB0cmFjaW5nX211bHRpX2JlbmNoX19vcGVuX2FuZF9sb2FkKCk7XG4tXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7dHJhY2luZ19tdWx0aV9iZW5jaF9fb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4tXHRcdGdvdG8gY2xlYW51cDtcbi1cbi1cdGlmICghQVNTRVJUX09LKGJwZl9nZXRfa3N5bXMoXHUwMDI2a3N5bXMsIHRydWUpLCBcJiMzNDtnZXRfc3ltc1wmIzM0OykpXG4tXHRcdGdvdG8gY2xlYW51cDtcbi1cbi1cdC8qIEdldCBhbGwgZnRyYWNlICYjMzk7c2FmZSYjMzk7IHN5bWJvbHMuLiAqL1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mga3N5bXMtXHUwMDNlZmlsdGVyZWRfY250OyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAoIXRzZWFyY2goXHUwMDI2a3N5bXMtXHUwMDNlZmlsdGVyZWRfc3ltc1tpXSwgXHUwMDI2cm9vdCwgY29tcGFyZSkpIHtcbi1cdFx0XHRBU1NFUlRfRkFJTChcJiMzNDt0c2VhcmNoIGZhaWxlZFwmIzM0Oyk7XG4tXHRcdFx0Z290byBjbGVhbnVwO1xuLVx0XHR9XG4tXHR9XG4tXG4tXHQvKlxuLVx0ICogQ29sbGVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdW5pcXVlIGluIGthbGxzeW1zLiBUaGUga2VybmVsIHJlc29sdmVzIGFcbi1cdCAqIHRyYWNpbmctbXVsdGkgQlRGIGlkIHRvIGFuIGFkZHJlc3Mgd2l0aCBrYWxsc3ltc19sb29rdXBfbmFtZSgpLCB3aGljaFxuLVx0ICogcmV0dXJucyB0aGUgZmlyc3Qgc3ltYm9sIG9mIHRoYXQgbmFtZS4gRm9yIGEgZHVwbGljYXRlIG5hbWUgdGhhdCBtYXlcbi1cdCAqIGJlIGEgZGlmZmVyZW50IChub24tZnRyYWNlLWFibGUpIGluc3RhbmNlIHRoYW4gdGhlIGZ0cmFjZS1hYmxlIG9uZSBpblxuLVx0ICogYXZhaWxhYmxlX2ZpbHRlcl9mdW5jdGlvbnMsIHNvIGF0dGFjaGluZyB0byBpdCBieSBCVEYgaWQgZmFpbHMgd2l0aFxuLVx0ICogLUVOT0VOVCAoZS5nLiB0X3N0YXJ0L3RfbmV4dC90X3N0b3ApLiBrc3ltcy1cdTAwM2VzeW1zIGlzIHNvcnRlZCBieSBuYW1lLFxuLVx0ICogc28gZXF1YWwgbmFtZXMgYXJlIGFkamFjZW50LlxuLVx0ICovXG4tXHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBrc3ltcy1cdTAwM2VzeW1fY250OyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAoc3RyY21wKGtzeW1zLVx1MDAzZXN5bXNbaV0ubmFtZSwga3N5bXMtXHUwMDNlc3ltc1tpIC0gMV0ubmFtZSkpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGlmICghdHNlYXJjaChcdTAwMjZrc3ltcy1cdTAwM2VzeW1zW2ldLm5hbWUsIFx1MDAyNmR1cHMsIGNvbXBhcmUpKSB7XG4tXHRcdFx0QVNTRVJUX0ZBSUwoXCYjMzQ7dHNlYXJjaCBmYWlsZWRcJiMzNDspO1xuLVx0XHRcdGdvdG8gY2xlYW51cDtcbi1cdFx0fVxuLVx0fVxuLVxuLVx0LyogLi5hbmQgZmlsdGVyIHRoZW0gdGhyb3VnaCBCVEYgYW5kIGJ0Zl90eXBlX2lzX3RyYWNlYWJsZV9mdW5jLiAqL1xuLVx0bnIgPSBidGZfX3R5cGVfY250KGJ0Zik7XG4tXHRmb3IgKHR5cGVfaWQgPSAxOyB0eXBlX2lkIFx1MDAzYyBucjsgdHlwZV9pZCYjNDM7JiM0MzspIHtcbi1cdFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0eXBlO1xuLVx0XHRjb25zdCBjaGFyICpzdHI7XG4tXG4tXHRcdHR5cGUgPSBidGZfX3R5cGVfYnlfaWQoYnRmLCB0eXBlX2lkKTtcbi1cdFx0aWYgKCF0eXBlKVxuLVx0XHRcdGJyZWFrO1xuLVxuLVx0XHRpZiAoQlRGX0lORk9fS0lORCh0eXBlLVx1MDAzZWluZm8pICE9IEJURl9LSU5EX0ZVTkMpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdHN0ciA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQoYnRmLCB0eXBlLVx1MDAzZW5hbWVfb2ZmKTtcbi1cdFx0aWYgKCFzdHIpXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRcdGlmICghdGZpbmQoXHUwMDI2c3RyLCBcdTAwMjZyb290LCBjb21wYXJlKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0LyogU2tpcCBuYW1lcyB0aGF0IGFyZSBub3QgdW5pcXVlIGluIGthbGxzeW1zLCBzZWUgYWJvdmUuICovXG4tXHRcdGlmICh0ZmluZChcdTAwMjZzdHIsIFx1MDAyNmR1cHMsIGNvbXBhcmUpKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRpZiAoIWJ0Zl90eXBlX2lzX3RyYWNlYWJsZV9mdW5jKGJ0ZiwgdHlwZSkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGVyciA9IGxpYmJwZl9lbnN1cmVfbWVtKCh2b2lkICoqKSBcdTAwMjZpZHMsIFx1MDAyNmNhcCwgc2l6ZW9mKCppZHMpLCBjbnQgJiM0MzsgMSk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0Z290byBjbGVhbnVwO1xuLVxuLVx0XHRpZHNbY250JiM0MzsmIzQzO10gPSB0eXBlX2lkO1xuLVx0fVxuLVxuLVx0b3B0cy5pZHMgPSBpZHM7XG4tXHRvcHRzLmNudCA9IGNudDtcbi1cbi1cdGF0dGFjaF9zdGFydF9ucyA9IGdldF90aW1lX25zKCk7XG4tXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF90cmFjaW5nX211bHRpKHNrZWwtXHUwMDNlcHJvZ3MuYmVuY2gsIE5VTEwsIFx1MDAyNm9wdHMpO1xuLVx0YXR0YWNoX2VuZF9ucyA9IGdldF90aW1lX25zKCk7XG4tXG4tXHRpZiAoIUFTU0VSVF9PS19QVFIobGluaywgXCYjMzQ7YnBmX3Byb2dyYW1fX2F0dGFjaF90cmFjaW5nX211bHRpXCYjMzQ7KSlcbi1cdFx0Z290byBjbGVhbnVwO1xuLVxuLVx0ZGV0YWNoX3N0YXJ0X25zID0gZ2V0X3RpbWVfbnMoKTtcbi1cdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuLVx0ZGV0YWNoX2VuZF9ucyA9IGdldF90aW1lX25zKCk7XG4tXG4tXHRhdHRhY2hfZGVsdGEgPSAoYXR0YWNoX2VuZF9ucyAtIGF0dGFjaF9zdGFydF9ucykgLyAxMDAwMDAwMDAwLjA7XG4tXHRkZXRhY2hfZGVsdGEgPSAoZGV0YWNoX2VuZF9ucyAtIGRldGFjaF9zdGFydF9ucykgLyAxMDAwMDAwMDAwLjA7XG4tXG4tXHRwcmludGYoXCYjMzQ7JXM6IGZvdW5kICVsdSBmdW5jdGlvbnNcXG5cJiMzNDssIF9fZnVuY19fLCBjbnQpO1xuLVx0cHJpbnRmKFwmIzM0OyVzOiBhdHRhY2hlZCBpbiAlNy4zbGZzXFxuXCYjMzQ7LCBfX2Z1bmNfXywgYXR0YWNoX2RlbHRhKTtcbi1cdHByaW50ZihcJiMzNDslczogZGV0YWNoZWQgaW4gJTcuM2xmc1xcblwmIzM0OywgX19mdW5jX18sIGRldGFjaF9kZWx0YSk7XG4tXG4tY2xlYW51cDpcbi1cdHRyYWNpbmdfbXVsdGlfYmVuY2hfX2Rlc3Ryb3koc2tlbCk7XG4tXHR0ZGVzdHJveShyb290LCB0ZGVzdHJveV9mcmVlX25vcCk7XG4tXHR0ZGVzdHJveShkdXBzLCB0ZGVzdHJveV9mcmVlX25vcCk7XG4tXHRmcmVlX2thbGxzeW1zX2xvY2FsKGtzeW1zKTtcbi1cdGZyZWUoaWRzKTtcbi1cdGJ0Zl9fZnJlZShidGYpO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCB0cmFjaW5nX211bHRpX3JvbGxiYWNrX3J1bihzdHJ1Y3QgdHJhY2luZ19tdWx0aV9yb2xsYmFjayAqc2tlbClcbiB7XG4gXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE3OjExPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgYW5kIGJlbmNobWFya3MgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NGNhNDVkZTA4YjZmYTU1NTliNWIxYTljZjk0N2VmNjBkMWYzZjY5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgNCAxNzoxMTowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZQppbmRleCA1NWQzOTQ0Mzg3MDVhLi5lNGQ4Y2JkNTFkNzE0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlCkBAIC05NjYsNiAmIzQzOzk2Niw3IEBAICQoT1VUUFVUKS9iZW5jaF9yaW5nYnVmcy5vOiAkKE9VVFBVVCkvcmluZ2J1Zl9iZW5jaC5za2VsLmggXAogJChPVVRQVVQpL2JlbmNoX2Jsb29tX2ZpbHRlcl9tYXAubzogJChPVVRQVVQpL2Jsb29tX2ZpbHRlcl9iZW5jaC5za2VsLmgKICQoT1VUUFVUKS9iZW5jaF9icGZfbG9vcC5vOiAkKE9VVFBVVCkvYnBmX2xvb3BfYmVuY2guc2tlbC5oCiAkKE9VVFBVVCkvYmVuY2hfc3RybmNtcC5vOiAkKE9VVFBVVCkvc3RybmNtcF9iZW5jaC5za2VsLmgKJiM0MzskKE9VVFBVVCkvYmVuY2hfdHJhY2luZ19tdWx0aV9hdHRhY2gubzogJChPVVRQVVQpL3RyYWNpbmdfbXVsdGlfYmVuY2guc2tlbC5oCiAkKE9VVFBVVCkvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUubzogJChPVVRQVVQpL2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlX2JlbmNoLnNrZWwuaAogJChPVVRQVVQpL2JlbmNoX2xvY2FsX3N0b3JhZ2UubzogJChPVVRQVVQpL2xvY2FsX3N0b3JhZ2VfYmVuY2guc2tlbC5oCiAkKE9VVFBVVCkvYmVuY2hfbG9jYWxfc3RvcmFnZV9yY3VfdGFza3NfdHJhY2UubzogJChPVVRQVVQpL2xvY2FsX3N0b3JhZ2VfcmN1X3Rhc2tzX3RyYWNlX2JlbmNoLnNrZWwuaApAQCAtOTkxLDYgJiM0Mzs5OTIsNyBAQCAkKE9VVFBVVCkvYmVuY2g6ICQoT1VUUFVUKS9iZW5jaC5vIFwKIAkJICQoT1VUUFVUKS9iZW5jaF9ibG9vbV9maWx0ZXJfbWFwLm8gXAogCQkgJChPVVRQVVQpL2JlbmNoX2JwZl9sb29wLm8gXAogCQkgJChPVVRQVVQpL2JlbmNoX3N0cm5jbXAubyBcCiYjNDM7CQkgJChPVVRQVVQpL2JlbmNoX3RyYWNpbmdfbXVsdGlfYXR0YWNoLm8gXAogCQkgJChPVVRQVVQpL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLm8gXAogCQkgJChPVVRQVVQpL2JlbmNoX2xvY2FsX3N0b3JhZ2UubyBcCiAJCSAkKE9VVFBVVCkvYmVuY2hfbG9jYWxfc3RvcmFnZV9yY3VfdGFza3NfdHJhY2UubyBcCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jCmluZGV4IDNkOWQyY2Q3NzY0YmQuLjVjZTMxNDU5ODM1Y2UgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jCkBAIC01NDUsNiAmIzQzOzU0NSw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfdHJpZ191cHJvYmVfbXVsdGlfbm9wNTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfdHJpZ191cmV0cHJvYmVfbXVsdGlfbm9wNTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfdHJpZ191c2R0X25vcDsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfdHJpZ191c2R0X25vcDU7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaDsKICNlbmRpZgogCiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX3JiX2xpYmJwZjsKQEAgLTYyOCw2ICYjNDM7NjI5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiZW5jaCAqYmVuY2hzW10gPSB7CiAJJmFtcDtiZW5jaF90cmlnX3VyZXRwcm9iZV9tdWx0aV9ub3A1LAogCSZhbXA7YmVuY2hfdHJpZ191c2R0X25vcCwKIAkmYW1wO2JlbmNoX3RyaWdfdXNkdF9ub3A1LAomIzQzOwkmYW1wO2JlbmNoX3RyYWNpbmdfbXVsdGlfYXR0YWNoLAogI2VuZGlmCiAJLyogcmluZ2J1Zi9wZXJmYnVmIGJlbmNobWFya3MgKi8KIAkmYW1wO2JlbmNoX3JiX2xpYmJwZiwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfdHJhY2luZ19tdWx0aV9hdHRhY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfdHJhY2luZ19tdWx0aV9hdHRhY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi43Mzg5ZDE3NDJkZGNiCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaC5jCkBAIC0wLDAgJiM0MzsxLDE3NyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRQomIzQzOyNpbmNsdWRlICZsdDtzZWFyY2guaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9idGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JlbmNoLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdGluZ19oZWxwZXJzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dHJhY2VfaGVscGVycy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3RyYWNpbmdfbXVsdGlfYmVuY2guc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZi9saWJicGZfaW50ZXJuYWwuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIGludCBjb21wYXJlKGNvbnN0IHZvaWQgKnBwYSwgY29uc3Qgdm9pZCAqcHBiKQomIzQzO3sKJiM0MzsJY29uc3QgY2hhciAqcGEgPSAqKGNvbnN0IGNoYXIgKiopcHBhOwomIzQzOwljb25zdCBjaGFyICpwYiA9ICooY29uc3QgY2hhciAqKilwcGI7CiYjNDM7CiYjNDM7CXJldHVybiBzdHJjbXAocGEsIHBiKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGRlc3Ryb3lfZnJlZV9ub3Aodm9pZCAqcHRyKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdHJhY2luZ19tdWx0aV9hdHRhY2hfc2V0dXAodm9pZCkKJiM0Mzt7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90cmFjaW5nX211bHRpX29wdHMsIG9wdHMpOwomIzQzOwlzdHJ1Y3QgdHJhY2luZ19tdWx0aV9iZW5jaCAqc2tlbCA9IE5VTEw7CiYjNDM7CWxvbmcgYXR0YWNoX3N0YXJ0X25zLCBhdHRhY2hfZW5kX25zOwomIzQzOwlsb25nIGRldGFjaF9zdGFydF9ucywgZGV0YWNoX2VuZF9uczsKJiM0MzsJZG91YmxlIGF0dGFjaF9kZWx0YSwgZGV0YWNoX2RlbHRhOwomIzQzOwlzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBOVUxMOwomIzQzOwlzaXplX3QgaSwgY2FwID0gMCwgY250ID0gMDsKJiM0MzsJc3RydWN0IGtzeW1zICprc3ltcyA9IE5VTEw7CiYjNDM7CXZvaWQgKnJvb3QgPSBOVUxMOwomIzQzOwl2b2lkICpkdXBzID0gTlVMTDsKJiM0MzsJX191MzIgKmlkcyA9IE5VTEw7CiYjNDM7CV9fdTMyIG5yLCB0eXBlX2lkOwomIzQzOwlzdHJ1Y3QgYnRmICpidGY7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXNldHVwX2xpYmJwZigpOwomIzQzOwomIzQzOwlidGYgPSBidGZfX2xvYWRfdm1saW51eF9idGYoKTsKJiM0MzsJZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlidGYgPSBOVUxMOwomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZmFpbGVkIHRvIGxvYWQgdm1saW51eCBCVEY6ICVzXG4mIzM0Oywgc3RyZXJyb3IoLWVycikpOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNrZWwgPSB0cmFjaW5nX211bHRpX2JlbmNoX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWVyciA9IGxpYmJwZl9nZXRfZXJyb3Ioc2tlbCk7CiYjNDM7CWlmICghc2tlbCkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZmFpbGVkIHRvIG9wZW4gYW5kIGxvYWQgc2tlbGV0b246ICVzXG4mIzM0Oywgc3RyZXJyb3IoLWVycikpOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9nZXRfa3N5bXMoJmFtcDtrc3ltcywgdHJ1ZSk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O2ZhaWxlZCB0byBnZXQga2VybmVsIHN5bWJvbHM6ICVzXG4mIzM0Oywgc3RyZXJyb3IoLWVycikpOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEdldCBhbGwgZnRyYWNlICYjMzk7c2FmZSYjMzk7IHN5bWJvbHMuLiAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsga3N5bXMtJmd0O2ZpbHRlcmVkX2NudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICghdHNlYXJjaCgmYW1wO2tzeW1zLSZndDtmaWx0ZXJlZF9zeW1zW2ldLCAmYW1wO3Jvb3QsIGNvbXBhcmUpKSB7CiYjNDM7CQkJZXJyID0gLUVOT01FTTsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtmYWlsZWQgdG8gaW5kZXggZnRyYWNlIHN5bWJvbHNcbiYjMzQ7KTsKJiM0MzsJCQlnb3RvIGNsZWFudXA7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQ29sbGVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdW5pcXVlIGluIGthbGxzeW1zLiBUaGUga2VybmVsIHJlc29sdmVzIGEKJiM0MzsJICogdHJhY2luZy1tdWx0aSBCVEYgaWQgdG8gYW4gYWRkcmVzcyB3aXRoIGthbGxzeW1zX2xvb2t1cF9uYW1lKCksIHdoaWNoCiYjNDM7CSAqIHJldHVybnMgdGhlIGZpcnN0IHN5bWJvbCBvZiB0aGF0IG5hbWUuIEZvciBhIGR1cGxpY2F0ZSBuYW1lIHRoYXQgbWF5CiYjNDM7CSAqIGJlIGEgZGlmZmVyZW50IChub24tZnRyYWNlLWFibGUpIGluc3RhbmNlIHRoYW4gdGhlIGZ0cmFjZS1hYmxlIG9uZSBpbgomIzQzOwkgKiBhdmFpbGFibGVfZmlsdGVyX2Z1bmN0aW9ucywgc28gYXR0YWNoaW5nIHRvIGl0IGJ5IEJURiBpZCBmYWlscyB3aXRoCiYjNDM7CSAqIC1FTk9FTlQgKGUuZy4gdF9zdGFydC90X25leHQvdF9zdG9wKS4ga3N5bXMtJmd0O3N5bXMgaXMgc29ydGVkIGJ5IG5hbWUsCiYjNDM7CSAqIHNvIGVxdWFsIG5hbWVzIGFyZSBhZGphY2VudC4KJiM0MzsJICovCiYjNDM7CWZvciAoaSA9IDE7IGkgJmx0OyBrc3ltcy0mZ3Q7c3ltX2NudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChzdHJjbXAoa3N5bXMtJmd0O3N5bXNbaV0ubmFtZSwga3N5bXMtJmd0O3N5bXNbaSAtIDFdLm5hbWUpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKCF0c2VhcmNoKCZhbXA7a3N5bXMtJmd0O3N5bXNbaV0ubmFtZSwgJmFtcDtkdXBzLCBjb21wYXJlKSkgewomIzQzOwkJCWVyciA9IC1FTk9NRU07CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZmFpbGVkIHRvIGluZGV4IGR1cGxpY2F0ZSBrZXJuZWwgc3ltYm9sc1xuJiMzNDspOwomIzQzOwkJCWdvdG8gY2xlYW51cDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKiAuLmFuZCBmaWx0ZXIgdGhlbSB0aHJvdWdoIEJURiBhbmQgYnRmX3R5cGVfaXNfdHJhY2VhYmxlX2Z1bmMuICovCiYjNDM7CW5yID0gYnRmX190eXBlX2NudChidGYpOwomIzQzOwlmb3IgKHR5cGVfaWQgPSAxOyB0eXBlX2lkICZsdDsgbnI7IHR5cGVfaWQmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnR5cGU7CiYjNDM7CQljb25zdCBjaGFyICpzdHI7CiYjNDM7CiYjNDM7CQl0eXBlID0gYnRmX190eXBlX2J5X2lkKGJ0ZiwgdHlwZV9pZCk7CiYjNDM7CQlpZiAoIXR5cGUpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlpZiAoQlRGX0lORk9fS0lORCh0eXBlLSZndDtpbmZvKSAhPSBCVEZfS0lORF9GVU5DKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJc3RyID0gYnRmX19uYW1lX2J5X29mZnNldChidGYsIHR5cGUtJmd0O25hbWVfb2ZmKTsKJiM0MzsJCWlmICghc3RyKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJaWYgKCF0ZmluZCgmYW1wO3N0ciwgJmFtcDtyb290LCBjb21wYXJlKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qIFNraXAgbmFtZXMgdGhhdCBhcmUgbm90IHVuaXF1ZSBpbiBrYWxsc3ltcywgc2VlIGFib3ZlLiAqLwomIzQzOwkJaWYgKHRmaW5kKCZhbXA7c3RyLCAmYW1wO2R1cHMsIGNvbXBhcmUpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJaWYgKCFidGZfdHlwZV9pc190cmFjZWFibGVfZnVuYyhidGYsIHR5cGUpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZXJyID0gbGliYnBmX2Vuc3VyZV9tZW0oKHZvaWQgKiopJmFtcDtpZHMsICZhbXA7Y2FwLCBzaXplb2YoKmlkcyksIGNudCAmIzQzOyAxKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgQlRGIElEIGFycmF5OiAlc1xuJiMzNDssCiYjNDM7CQkJCXN0cmVycm9yKC1lcnIpKTsKJiM0MzsJCQlnb3RvIGNsZWFudXA7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZHNbY250JiM0MzsmIzQzO10gPSB0eXBlX2lkOwomIzQzOwl9CiYjNDM7CiYjNDM7CW9wdHMuaWRzID0gaWRzOwomIzQzOwlvcHRzLmNudCA9IGNudDsKJiM0MzsKJiM0MzsJYXR0YWNoX3N0YXJ0X25zID0gZ2V0X3RpbWVfbnMoKTsKJiM0MzsJbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfdHJhY2luZ19tdWx0aShza2VsLSZndDtwcm9ncy5iZW5jaCwgTlVMTCwgJmFtcDtvcHRzKTsKJiM0MzsJYXR0YWNoX2VuZF9ucyA9IGdldF90aW1lX25zKCk7CiYjNDM7CiYjNDM7CWVyciA9IGxpYmJwZl9nZXRfZXJyb3IobGluayk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWxpbmsgPSBOVUxMOwomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZmFpbGVkIHRvIGF0dGFjaCB0cmFjaW5nIG11bHRpIGxpbms6ICVzXG4mIzM0OywKJiM0MzsJCQlzdHJlcnJvcigtZXJyKSk7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGV0YWNoX3N0YXJ0X25zID0gZ2V0X3RpbWVfbnMoKTsKJiM0MzsJZXJyID0gYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7CiYjNDM7CWRldGFjaF9lbmRfbnMgPSBnZXRfdGltZV9ucygpOwomIzQzOwlsaW5rID0gTlVMTDsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZmFpbGVkIHRvIGRldGFjaCB0cmFjaW5nIG11bHRpIGxpbms6ICVzXG4mIzM0OywKJiM0MzsJCQlzdHJlcnJvcigtZXJyKSk7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYXR0YWNoX2RlbHRhID0gKGF0dGFjaF9lbmRfbnMgLSBhdHRhY2hfc3RhcnRfbnMpIC8gMTAwMDAwMDAwMC4wOwomIzQzOwlkZXRhY2hfZGVsdGEgPSAoZGV0YWNoX2VuZF9ucyAtIGRldGFjaF9zdGFydF9ucykgLyAxMDAwMDAwMDAwLjA7CiYjNDM7CiYjNDM7CXByaW50ZigmIzM0OyVzOiBmb3VuZCAlenUgZnVuY3Rpb25zXG4mIzM0OywgYmVuY2gtJmd0O25hbWUsIGNudCk7CiYjNDM7CXByaW50ZigmIzM0OyVzOiBhdHRhY2hlZCBpbiAlNy4zbGZzXG4mIzM0OywgYmVuY2gtJmd0O25hbWUsIGF0dGFjaF9kZWx0YSk7CiYjNDM7CXByaW50ZigmIzM0OyVzOiBkZXRhY2hlZCBpbiAlNy4zbGZzXG4mIzM0OywgYmVuY2gtJmd0O25hbWUsIGRldGFjaF9kZWx0YSk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7CiYjNDM7CXRyYWNpbmdfbXVsdGlfYmVuY2hfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7CXRkZXN0cm95KHJvb3QsIHRkZXN0cm95X2ZyZWVfbm9wKTsKJiM0MzsJdGRlc3Ryb3koZHVwcywgdGRlc3Ryb3lfZnJlZV9ub3ApOwomIzQzOwlmcmVlX2thbGxzeW1zX2xvY2FsKGtzeW1zKTsKJiM0MzsJZnJlZShpZHMpOwomIzQzOwlidGZfX2ZyZWUoYnRmKTsKJiM0MzsKJiM0MzsJZXhpdChlcnIgPyAxIDogMCk7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaCA9IHsKJiM0MzsJLm5hbWUgPSAmIzM0O3RyYWNpbmctbXVsdGktYXR0YWNoJiMzNDssCiYjNDM7CS5zZXR1cCA9IHRyYWNpbmdfbXVsdGlfYXR0YWNoX3NldHVwLAomIzQzO307CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX211bHRpLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX211bHRpLmMKaW5kZXggMGFhOTUzMmEwNWNmZS4uZmQ0ZjI1NmQyZTBhNyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19tdWx0aS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuYwpAQCAtMywxNCAmIzQzOzMsMTIgQEAKICNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YnBmL2J0Zi5oJmd0OwogI2luY2x1ZGUgJmx0O3NlYXJjaC5oJmd0OwotI2luY2x1ZGUgJiMzNDticGYvbGliYnBmX2ludGVybmFsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0cmFjaW5nX211bHRpLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3RyYWNpbmdfbXVsdGlfbW9kdWxlLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3RyYWNpbmdfbXVsdGlfaW50ZXJzZWN0LnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3RyYWNpbmdfbXVsdGlfc2Vzc2lvbi5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0cmFjaW5nX211bHRpX2ZhaWwuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dHJhY2luZ19tdWx0aV92ZXJpZmllci5za2VsLmgmIzM0OwotI2luY2x1ZGUgJiMzNDt0cmFjaW5nX211bHRpX2JlbmNoLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3RyYWNpbmdfbXVsdGlfcm9sbGJhY2suc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dHJhY2VfaGVscGVycy5oJiMzNDsKIApAQCAtNjYyLDEyOSAmIzQzOzY2MCw2IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXR0YWNoX2FwaV9mYWlscyh2b2lkKQogCWZyZWUoaWRzMik7CiB9CiAKLXZvaWQgc2VyaWFsX3Rlc3RfdHJhY2luZ19tdWx0aV9iZW5jaF9hdHRhY2godm9pZCkKLXsKLQlMSUJCUEZfT1BUUyhicGZfdHJhY2luZ19tdWx0aV9vcHRzLCBvcHRzKTsKLQlzdHJ1Y3QgdHJhY2luZ19tdWx0aV9iZW5jaCAqc2tlbCA9IE5VTEw7Ci0JbG9uZyBhdHRhY2hfc3RhcnRfbnMsIGF0dGFjaF9lbmRfbnM7Ci0JbG9uZyBkZXRhY2hfc3RhcnRfbnMsIGRldGFjaF9lbmRfbnM7Ci0JZG91YmxlIGF0dGFjaF9kZWx0YSwgZGV0YWNoX2RlbHRhOwotCXN0cnVjdCBicGZfbGluayAqbGluayA9IE5VTEw7Ci0Jc2l6ZV90IGksIGNhcCA9IDAsIGNudCA9IDA7Ci0Jc3RydWN0IGtzeW1zICprc3ltcyA9IE5VTEw7Ci0Jdm9pZCAqcm9vdCA9IE5VTEw7Ci0Jdm9pZCAqZHVwcyA9IE5VTEw7Ci0JX191MzIgKmlkcyA9IE5VTEw7Ci0JX191MzIgbnIsIHR5cGVfaWQ7Ci0Jc3RydWN0IGJ0ZiAqYnRmOwotCWludCBlcnI7Ci0KLSNpZm5kZWYgX194ODZfNjRfXwotCXRlc3RfX3NraXAoKTsKLQlyZXR1cm47Ci0jZW5kaWYKLQotCWJ0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpOwotCWlmICghQVNTRVJUX09LX1BUUihidGYsICYjMzQ7YnRmX19sb2FkX3ZtbGludXhfYnRmJiMzNDspKQotCQlyZXR1cm47Ci0KLQlza2VsID0gdHJhY2luZ19tdWx0aV9iZW5jaF9fb3Blbl9hbmRfbG9hZCgpOwotCWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3RyYWNpbmdfbXVsdGlfYmVuY2hfX29wZW5fYW5kX2xvYWQmIzM0OykpCi0JCWdvdG8gY2xlYW51cDsKLQotCWlmICghQVNTRVJUX09LKGJwZl9nZXRfa3N5bXMoJmFtcDtrc3ltcywgdHJ1ZSksICYjMzQ7Z2V0X3N5bXMmIzM0OykpCi0JCWdvdG8gY2xlYW51cDsKLQotCS8qIEdldCBhbGwgZnRyYWNlICYjMzk7c2FmZSYjMzk7IHN5bWJvbHMuLiAqLwotCWZvciAoaSA9IDA7IGkgJmx0OyBrc3ltcy0mZ3Q7ZmlsdGVyZWRfY250OyBpJiM0MzsmIzQzOykgewotCQlpZiAoIXRzZWFyY2goJmFtcDtrc3ltcy0mZ3Q7ZmlsdGVyZWRfc3ltc1tpXSwgJmFtcDtyb290LCBjb21wYXJlKSkgewotCQkJQVNTRVJUX0ZBSUwoJiMzNDt0c2VhcmNoIGZhaWxlZCYjMzQ7KTsKLQkJCWdvdG8gY2xlYW51cDsKLQkJfQotCX0KLQotCS8qCi0JICogQ29sbGVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdW5pcXVlIGluIGthbGxzeW1zLiBUaGUga2VybmVsIHJlc29sdmVzIGEKLQkgKiB0cmFjaW5nLW11bHRpIEJURiBpZCB0byBhbiBhZGRyZXNzIHdpdGgga2FsbHN5bXNfbG9va3VwX25hbWUoKSwgd2hpY2gKLQkgKiByZXR1cm5zIHRoZSBmaXJzdCBzeW1ib2wgb2YgdGhhdCBuYW1lLiBGb3IgYSBkdXBsaWNhdGUgbmFtZSB0aGF0IG1heQotCSAqIGJlIGEgZGlmZmVyZW50IChub24tZnRyYWNlLWFibGUpIGluc3RhbmNlIHRoYW4gdGhlIGZ0cmFjZS1hYmxlIG9uZSBpbgotCSAqIGF2YWlsYWJsZV9maWx0ZXJfZnVuY3Rpb25zLCBzbyBhdHRhY2hpbmcgdG8gaXQgYnkgQlRGIGlkIGZhaWxzIHdpdGgKLQkgKiAtRU5PRU5UIChlLmcuIHRfc3RhcnQvdF9uZXh0L3Rfc3RvcCkuIGtzeW1zLSZndDtzeW1zIGlzIHNvcnRlZCBieSBuYW1lLAotCSAqIHNvIGVxdWFsIG5hbWVzIGFyZSBhZGphY2VudC4KLQkgKi8KLQlmb3IgKGkgPSAxOyBpICZsdDsga3N5bXMtJmd0O3N5bV9jbnQ7IGkmIzQzOyYjNDM7KSB7Ci0JCWlmIChzdHJjbXAoa3N5bXMtJmd0O3N5bXNbaV0ubmFtZSwga3N5bXMtJmd0O3N5bXNbaSAtIDFdLm5hbWUpKQotCQkJY29udGludWU7Ci0JCWlmICghdHNlYXJjaCgmYW1wO2tzeW1zLSZndDtzeW1zW2ldLm5hbWUsICZhbXA7ZHVwcywgY29tcGFyZSkpIHsKLQkJCUFTU0VSVF9GQUlMKCYjMzQ7dHNlYXJjaCBmYWlsZWQmIzM0Oyk7Ci0JCQlnb3RvIGNsZWFudXA7Ci0JCX0KLQl9Ci0KLQkvKiAuLmFuZCBmaWx0ZXIgdGhlbSB0aHJvdWdoIEJURiBhbmQgYnRmX3R5cGVfaXNfdHJhY2VhYmxlX2Z1bmMuICovCi0JbnIgPSBidGZfX3R5cGVfY250KGJ0Zik7Ci0JZm9yICh0eXBlX2lkID0gMTsgdHlwZV9pZCAmbHQ7IG5yOyB0eXBlX2lkJiM0MzsmIzQzOykgewotCQljb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnR5cGU7Ci0JCWNvbnN0IGNoYXIgKnN0cjsKLQotCQl0eXBlID0gYnRmX190eXBlX2J5X2lkKGJ0ZiwgdHlwZV9pZCk7Ci0JCWlmICghdHlwZSkKLQkJCWJyZWFrOwotCi0JCWlmIChCVEZfSU5GT19LSU5EKHR5cGUtJmd0O2luZm8pICE9IEJURl9LSU5EX0ZVTkMpCi0JCQljb250aW51ZTsKLQotCQlzdHIgPSBidGZfX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdHlwZS0mZ3Q7bmFtZV9vZmYpOwotCQlpZiAoIXN0cikKLQkJCWJyZWFrOwotCi0JCWlmICghdGZpbmQoJmFtcDtzdHIsICZhbXA7cm9vdCwgY29tcGFyZSkpCi0JCQljb250aW51ZTsKLQotCQkvKiBTa2lwIG5hbWVzIHRoYXQgYXJlIG5vdCB1bmlxdWUgaW4ga2FsbHN5bXMsIHNlZSBhYm92ZS4gKi8KLQkJaWYgKHRmaW5kKCZhbXA7c3RyLCAmYW1wO2R1cHMsIGNvbXBhcmUpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCFidGZfdHlwZV9pc190cmFjZWFibGVfZnVuYyhidGYsIHR5cGUpKQotCQkJY29udGludWU7Ci0KLQkJZXJyID0gbGliYnBmX2Vuc3VyZV9tZW0oKHZvaWQgKiopICZhbXA7aWRzLCAmYW1wO2NhcCwgc2l6ZW9mKCppZHMpLCBjbnQgJiM0MzsgMSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGNsZWFudXA7Ci0KLQkJaWRzW2NudCYjNDM7JiM0MztdID0gdHlwZV9pZDsKLQl9Ci0KLQlvcHRzLmlkcyA9IGlkczsKLQlvcHRzLmNudCA9IGNudDsKLQotCWF0dGFjaF9zdGFydF9ucyA9IGdldF90aW1lX25zKCk7Ci0JbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfdHJhY2luZ19tdWx0aShza2VsLSZndDtwcm9ncy5iZW5jaCwgTlVMTCwgJmFtcDtvcHRzKTsKLQlhdHRhY2hfZW5kX25zID0gZ2V0X3RpbWVfbnMoKTsKLQotCWlmICghQVNTRVJUX09LX1BUUihsaW5rLCAmIzM0O2JwZl9wcm9ncmFtX19hdHRhY2hfdHJhY2luZ19tdWx0aSYjMzQ7KSkKLQkJZ290byBjbGVhbnVwOwotCi0JZGV0YWNoX3N0YXJ0X25zID0gZ2V0X3RpbWVfbnMoKTsKLQlicGZfbGlua19fZGVzdHJveShsaW5rKTsKLQlkZXRhY2hfZW5kX25zID0gZ2V0X3RpbWVfbnMoKTsKLQotCWF0dGFjaF9kZWx0YSA9IChhdHRhY2hfZW5kX25zIC0gYXR0YWNoX3N0YXJ0X25zKSAvIDEwMDAwMDAwMDAuMDsKLQlkZXRhY2hfZGVsdGEgPSAoZGV0YWNoX2VuZF9ucyAtIGRldGFjaF9zdGFydF9ucykgLyAxMDAwMDAwMDAwLjA7Ci0KLQlwcmludGYoJiMzNDslczogZm91bmQgJWx1IGZ1bmN0aW9uc1xuJiMzNDssIF9fZnVuY19fLCBjbnQpOwotCXByaW50ZigmIzM0OyVzOiBhdHRhY2hlZCBpbiAlNy4zbGZzXG4mIzM0OywgX19mdW5jX18sIGF0dGFjaF9kZWx0YSk7Ci0JcHJpbnRmKCYjMzQ7JXM6IGRldGFjaGVkIGluICU3LjNsZnNcbiYjMzQ7LCBfX2Z1bmNfXywgZGV0YWNoX2RlbHRhKTsKLQotY2xlYW51cDoKLQl0cmFjaW5nX211bHRpX2JlbmNoX19kZXN0cm95KHNrZWwpOwotCXRkZXN0cm95KHJvb3QsIHRkZXN0cm95X2ZyZWVfbm9wKTsKLQl0ZGVzdHJveShkdXBzLCB0ZGVzdHJveV9mcmVlX25vcCk7Ci0JZnJlZV9rYWxsc3ltc19sb2NhbChrc3ltcyk7Ci0JZnJlZShpZHMpOwotCWJ0Zl9fZnJlZShidGYpOwotfQotCiBzdGF0aWMgdm9pZCB0cmFjaW5nX211bHRpX3JvbGxiYWNrX3J1bihzdHJ1Y3QgdHJhY2luZ19tdWx0aV9yb2xsYmFjayAqc2tlbCkKIHsKIAlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxNzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjQ3CgkJCQkJCQlvdXRwdXQ6IDcxCgkJCQkJCQl0aG91Z2h0czogMjQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJQRiBTZWxmdGVzdC9CZW5jaG1hcmsgUmVmYWN0b3IgLSBObyBGdXp6aW5nIE5lZWRlZCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHNpbXBseSByZWZhY3RvcmluZyBhIGJlbmNobWFyayB0ZXN0IHdpdGhpbiB0aGUgQlBGIHNlbGYtdGVzdHMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgbW92aW5nIGB0cmFjaW5nX211bHRpLmNgIGZyb20gYHByb2dfdGVzdHNgIGludG8gYSBuZXcgYGJlbmNoc2AgZGlyZWN0b3J5IGFuZCB1cGRhdGluZyB0aGUgY29ycmVzcG9uZGluZyBgTWFrZWZpbGVgIGFuZCBgYmVuY2guY2AgZmlsZXMuIFRoaXMgaXMgcHVyZWx5IGEgcmVvcmdhbml6YXRpb24gb2YgdGhlIEJQRiB0ZXN0IHN1aXRlLCByZWFsbHksIGFuZCBub3QgdG91Y2hpbmcgYW55IGNvcmUga2VybmVsIGNvbXBvbmVudHMuIEl0JiMzOTtzIGEgY2xlYW4gc2VwYXJhdGlvbiBiZXR3ZWVuIGZ1bmN0aW9uYWwgdGVzdHMgYW5kIHBlcmZvcm1hbmNlIGJlbmNobWFya3Mgbm93LgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBpbmRlZWQgdGhlIGNhc2UuIEkmIzM5O2xsIHF1aWNrbHkgbG9vayBhdCB0aGUgZGlmZiBmb3I6CgoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZWAKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY2AKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX3RyYWNpbmdfbXVsdGlfYXR0YWNoLmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19tdWx0aS5jYAoKWWVwLCBubyBhY3R1YWwga2VybmVsIGNvZGUgaXMgYmVpbmcgbW9kaWZpZWQgaGVyZS4gVGhpcyBpcyBwdXJlbHkgaW50ZXJuYWwgdG8gdGhlIHRlc3QgYW5kIGJlbmNobWFyayBpbmZyYXN0cnVjdHVyZS4KClRoZXJlZm9yZSwgY29uc2lkZXJpbmcgdGhpcyBpcyBvbmx5IGEgc2VsZi10ZXN0L2JlbmNobWFyayBtb2RpZmljYXRpb24gYW5kIGRvZXNuJiMzOTt0IGltcGFjdCBhbnkgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIEkmIzM5O20gZ29pbmcgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBObyBmdXp6aW5nIG5lZWRlZCBmb3IgdGhpcyBvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTc6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgYW5kIGJlbmNobWFya3MgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyBhbmQgYmVuY2htYXJrcyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE3OjExOjEwLjEzODU1OTc5OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MTgyNDMxMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyBhbmQgYmVuY2htYXJrcyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTc6MTE6MTAuMTM4NTc5OTQ4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM1NTc3MDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODRjYTQ1ZGUwOGI2ZmE1NTU5YjViMWE5Y2Y5NDdlZjYwZDFmM2Y2OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyA0IDE3OjExOjA4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxcbmluZGV4IDU1ZDM5NDQzODcwNWEuLmU0ZDhjYmQ1MWQ3MTQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXFxuQEAgLTk2Niw2ICs5NjYsNyBAQCAkKE9VVFBVVCkvYmVuY2hfcmluZ2J1ZnMubzogJChPVVRQVVQpL3JpbmdidWZfYmVuY2guc2tlbC5oIFxcXFxcXG4gJChPVVRQVVQpL2JlbmNoX2Jsb29tX2ZpbHRlcl9tYXAubzogJChPVVRQVVQpL2Jsb29tX2ZpbHRlcl9iZW5jaC5za2VsLmhcXG4gJChPVVRQVVQpL2JlbmNoX2JwZl9sb29wLm86ICQoT1VUUFVUKS9icGZfbG9vcF9iZW5jaC5za2VsLmhcXG4gJChPVVRQVVQpL2JlbmNoX3N0cm5jbXAubzogJChPVVRQVVQpL3N0cm5jbXBfYmVuY2guc2tlbC5oXFxuKyQoT1VUUFVUKS9iZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaC5vOiAkKE9VVFBVVCkvdHJhY2luZ19tdWx0aV9iZW5jaC5za2VsLmhcXG4gJChPVVRQVVQpL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLm86ICQoT1VUUFVUKS9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZV9iZW5jaC5za2VsLmhcXG4gJChPVVRQVVQpL2JlbmNoX2xvY2FsX3N0b3JhZ2UubzogJChPVVRQVVQpL2xvY2FsX3N0b3JhZ2VfYmVuY2guc2tlbC5oXFxuICQoT1VUUFVUKS9iZW5jaF9sb2NhbF9zdG9yYWdlX3JjdV90YXNrc190cmFjZS5vOiAkKE9VVFBVVCkvbG9jYWxfc3RvcmFnZV9yY3VfdGFza3NfdHJhY2VfYmVuY2guc2tlbC5oXFxuQEAgLTk5MSw2ICs5OTIsNyBAQCAkKE9VVFBVVCkvYmVuY2g6ICQoT1VUUFVUKS9iZW5jaC5vIFxcXFxcXG4gXFx0XFx0ICQoT1VUUFVUKS9iZW5jaF9ibG9vbV9maWx0ZXJfbWFwLm8gXFxcXFxcbiBcXHRcXHQgJChPVVRQVVQpL2JlbmNoX2JwZl9sb29wLm8gXFxcXFxcbiBcXHRcXHQgJChPVVRQVVQpL2JlbmNoX3N0cm5jbXAubyBcXFxcXFxuK1xcdFxcdCAkKE9VVFBVVCkvYmVuY2hfdHJhY2luZ19tdWx0aV9hdHRhY2gubyBcXFxcXFxuIFxcdFxcdCAkKE9VVFBVVCkvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUubyBcXFxcXFxuIFxcdFxcdCAkKE9VVFBVVCkvYmVuY2hfbG9jYWxfc3RvcmFnZS5vIFxcXFxcXG4gXFx0XFx0ICQoT1VUUFVUKS9iZW5jaF9sb2NhbF9zdG9yYWdlX3JjdV90YXNrc190cmFjZS5vIFxcXFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xcbmluZGV4IDNkOWQyY2Q3NzY0YmQuLjVjZTMxNDU5ODM1Y2UgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xcbkBAIC01NDUsNiArNTQ1LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF90cmlnX3Vwcm9iZV9tdWx0aV9ub3A1O1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX3RyaWdfdXJldHByb2JlX211bHRpX25vcDU7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfdHJpZ191c2R0X25vcDtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF90cmlnX3VzZHRfbm9wNTtcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaDtcXG4gI2VuZGlmXFxuIFxcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX3JiX2xpYmJwZjtcXG5AQCAtNjI4LDYgKzYyOSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmVuY2ggKmJlbmNoc1tdID0ge1xcbiBcXHRcXHUwMDI2YmVuY2hfdHJpZ191cmV0cHJvYmVfbXVsdGlfbm9wNSxcXG4gXFx0XFx1MDAyNmJlbmNoX3RyaWdfdXNkdF9ub3AsXFxuIFxcdFxcdTAwMjZiZW5jaF90cmlnX3VzZHRfbm9wNSxcXG4rXFx0XFx1MDAyNmJlbmNoX3RyYWNpbmdfbXVsdGlfYXR0YWNoLFxcbiAjZW5kaWZcXG4gXFx0LyogcmluZ2J1Zi9wZXJmYnVmIGJlbmNobWFya3MgKi9cXG4gXFx0XFx1MDAyNmJlbmNoX3JiX2xpYmJwZixcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi43Mzg5ZDE3NDJkZGNiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfdHJhY2luZ19tdWx0aV9hdHRhY2guY1xcbkBAIC0wLDAgKzEsMTc3IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcXG4rI2luY2x1ZGUgXFx1MDAzY3NlYXJjaC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2J0Zi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYmVuY2guaFxcXCJcXG4rI2luY2x1ZGUgXFxcInRlc3RpbmdfaGVscGVycy5oXFxcIlxcbisjaW5jbHVkZSBcXFwidHJhY2VfaGVscGVycy5oXFxcIlxcbisjaW5jbHVkZSBcXFwidHJhY2luZ19tdWx0aV9iZW5jaC5za2VsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJicGYvbGliYnBmX2ludGVybmFsLmhcXFwiXFxuK1xcbitzdGF0aWMgaW50IGNvbXBhcmUoY29uc3Qgdm9pZCAqcHBhLCBjb25zdCB2b2lkICpwcGIpXFxuK3tcXG4rXFx0Y29uc3QgY2hhciAqcGEgPSAqKGNvbnN0IGNoYXIgKiopcHBhO1xcbitcXHRjb25zdCBjaGFyICpwYiA9ICooY29uc3QgY2hhciAqKilwcGI7XFxuK1xcbitcXHRyZXR1cm4gc3RyY21wKHBhLCBwYik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRkZXN0cm95X2ZyZWVfbm9wKHZvaWQgKnB0cilcXG4re1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0cmFjaW5nX211bHRpX2F0dGFjaF9zZXR1cCh2b2lkKVxcbit7XFxuK1xcdExJQkJQRl9PUFRTKGJwZl90cmFjaW5nX211bHRpX29wdHMsIG9wdHMpO1xcbitcXHRzdHJ1Y3QgdHJhY2luZ19tdWx0aV9iZW5jaCAqc2tlbCA9IE5VTEw7XFxuK1xcdGxvbmcgYXR0YWNoX3N0YXJ0X25zLCBhdHRhY2hfZW5kX25zO1xcbitcXHRsb25nIGRldGFjaF9zdGFydF9ucywgZGV0YWNoX2VuZF9ucztcXG4rXFx0ZG91YmxlIGF0dGFjaF9kZWx0YSwgZGV0YWNoX2RlbHRhO1xcbitcXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBOVUxMO1xcbitcXHRzaXplX3QgaSwgY2FwID0gMCwgY250ID0gMDtcXG4rXFx0c3RydWN0IGtzeW1zICprc3ltcyA9IE5VTEw7XFxuK1xcdHZvaWQgKnJvb3QgPSBOVUxMO1xcbitcXHR2b2lkICpkdXBzID0gTlVMTDtcXG4rXFx0X191MzIgKmlkcyA9IE5VTEw7XFxuK1xcdF9fdTMyIG5yLCB0eXBlX2lkO1xcbitcXHRzdHJ1Y3QgYnRmICpidGY7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRzZXR1cF9saWJicGYoKTtcXG4rXFxuK1xcdGJ0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpO1xcbitcXHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGJ0Zik7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0YnRmID0gTlVMTDtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJmYWlsZWQgdG8gbG9hZCB2bWxpbnV4IEJURjogJXNcXFxcblxcXCIsIHN0cmVycm9yKC1lcnIpKTtcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHR9XFxuK1xcbitcXHRza2VsID0gdHJhY2luZ19tdWx0aV9iZW5jaF9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKHNrZWwpO1xcbitcXHRpZiAoIXNrZWwpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJmYWlsZWQgdG8gb3BlbiBhbmQgbG9hZCBza2VsZXRvbjogJXNcXFxcblxcXCIsIHN0cmVycm9yKC1lcnIpKTtcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBicGZfZ2V0X2tzeW1zKFxcdTAwMjZrc3ltcywgdHJ1ZSk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJmYWlsZWQgdG8gZ2V0IGtlcm5lbCBzeW1ib2xzOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IoLWVycikpO1xcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEdldCBhbGwgZnRyYWNlICdzYWZlJyBzeW1ib2xzLi4gKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGtzeW1zLVxcdTAwM2VmaWx0ZXJlZF9jbnQ7IGkrKykge1xcbitcXHRcXHRpZiAoIXRzZWFyY2goXFx1MDAyNmtzeW1zLVxcdTAwM2VmaWx0ZXJlZF9zeW1zW2ldLCBcXHUwMDI2cm9vdCwgY29tcGFyZSkpIHtcXG4rXFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJmYWlsZWQgdG8gaW5kZXggZnRyYWNlIHN5bWJvbHNcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogQ29sbGVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdW5pcXVlIGluIGthbGxzeW1zLiBUaGUga2VybmVsIHJlc29sdmVzIGFcXG4rXFx0ICogdHJhY2luZy1tdWx0aSBCVEYgaWQgdG8gYW4gYWRkcmVzcyB3aXRoIGthbGxzeW1zX2xvb2t1cF9uYW1lKCksIHdoaWNoXFxuK1xcdCAqIHJldHVybnMgdGhlIGZpcnN0IHN5bWJvbCBvZiB0aGF0IG5hbWUuIEZvciBhIGR1cGxpY2F0ZSBuYW1lIHRoYXQgbWF5XFxuK1xcdCAqIGJlIGEgZGlmZmVyZW50IChub24tZnRyYWNlLWFibGUpIGluc3RhbmNlIHRoYW4gdGhlIGZ0cmFjZS1hYmxlIG9uZSBpblxcbitcXHQgKiBhdmFpbGFibGVfZmlsdGVyX2Z1bmN0aW9ucywgc28gYXR0YWNoaW5nIHRvIGl0IGJ5IEJURiBpZCBmYWlscyB3aXRoXFxuK1xcdCAqIC1FTk9FTlQgKGUuZy4gdF9zdGFydC90X25leHQvdF9zdG9wKS4ga3N5bXMtXFx1MDAzZXN5bXMgaXMgc29ydGVkIGJ5IG5hbWUsXFxuK1xcdCAqIHNvIGVxdWFsIG5hbWVzIGFyZSBhZGphY2VudC5cXG4rXFx0ICovXFxuK1xcdGZvciAoaSA9IDE7IGkgXFx1MDAzYyBrc3ltcy1cXHUwMDNlc3ltX2NudDsgaSsrKSB7XFxuK1xcdFxcdGlmIChzdHJjbXAoa3N5bXMtXFx1MDAzZXN5bXNbaV0ubmFtZSwga3N5bXMtXFx1MDAzZXN5bXNbaSAtIDFdLm5hbWUpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKCF0c2VhcmNoKFxcdTAwMjZrc3ltcy1cXHUwMDNlc3ltc1tpXS5uYW1lLCBcXHUwMDI2ZHVwcywgY29tcGFyZSkpIHtcXG4rXFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJmYWlsZWQgdG8gaW5kZXggZHVwbGljYXRlIGtlcm5lbCBzeW1ib2xzXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdC8qIC4uYW5kIGZpbHRlciB0aGVtIHRocm91Z2ggQlRGIGFuZCBidGZfdHlwZV9pc190cmFjZWFibGVfZnVuYy4gKi9cXG4rXFx0bnIgPSBidGZfX3R5cGVfY250KGJ0Zik7XFxuK1xcdGZvciAodHlwZV9pZCA9IDE7IHR5cGVfaWQgXFx1MDAzYyBucjsgdHlwZV9pZCsrKSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdHlwZTtcXG4rXFx0XFx0Y29uc3QgY2hhciAqc3RyO1xcbitcXG4rXFx0XFx0dHlwZSA9IGJ0Zl9fdHlwZV9ieV9pZChidGYsIHR5cGVfaWQpO1xcbitcXHRcXHRpZiAoIXR5cGUpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0aWYgKEJURl9JTkZPX0tJTkQodHlwZS1cXHUwMDNlaW5mbykgIT0gQlRGX0tJTkRfRlVOQylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRzdHIgPSBidGZfX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdHlwZS1cXHUwMDNlbmFtZV9vZmYpO1xcbitcXHRcXHRpZiAoIXN0cilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRpZiAoIXRmaW5kKFxcdTAwMjZzdHIsIFxcdTAwMjZyb290LCBjb21wYXJlKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHQvKiBTa2lwIG5hbWVzIHRoYXQgYXJlIG5vdCB1bmlxdWUgaW4ga2FsbHN5bXMsIHNlZSBhYm92ZS4gKi9cXG4rXFx0XFx0aWYgKHRmaW5kKFxcdTAwMjZzdHIsIFxcdTAwMjZkdXBzLCBjb21wYXJlKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRpZiAoIWJ0Zl90eXBlX2lzX3RyYWNlYWJsZV9mdW5jKGJ0ZiwgdHlwZSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0ZXJyID0gbGliYnBmX2Vuc3VyZV9tZW0oKHZvaWQgKiopXFx1MDAyNmlkcywgXFx1MDAyNmNhcCwgc2l6ZW9mKCppZHMpLCBjbnQgKyAxKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcImZhaWxlZCB0byBhbGxvY2F0ZSBCVEYgSUQgYXJyYXk6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRzdHJlcnJvcigtZXJyKSk7XFxuK1xcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWRzW2NudCsrXSA9IHR5cGVfaWQ7XFxuK1xcdH1cXG4rXFxuK1xcdG9wdHMuaWRzID0gaWRzO1xcbitcXHRvcHRzLmNudCA9IGNudDtcXG4rXFxuK1xcdGF0dGFjaF9zdGFydF9ucyA9IGdldF90aW1lX25zKCk7XFxuK1xcdGxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX3RyYWNpbmdfbXVsdGkoc2tlbC1cXHUwMDNlcHJvZ3MuYmVuY2gsIE5VTEwsIFxcdTAwMjZvcHRzKTtcXG4rXFx0YXR0YWNoX2VuZF9ucyA9IGdldF90aW1lX25zKCk7XFxuK1xcbitcXHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGxpbmspO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGxpbmsgPSBOVUxMO1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcImZhaWxlZCB0byBhdHRhY2ggdHJhY2luZyBtdWx0aSBsaW5rOiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0c3RyZXJyb3IoLWVycikpO1xcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdH1cXG4rXFxuK1xcdGRldGFjaF9zdGFydF9ucyA9IGdldF90aW1lX25zKCk7XFxuK1xcdGVyciA9IGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xcbitcXHRkZXRhY2hfZW5kX25zID0gZ2V0X3RpbWVfbnMoKTtcXG4rXFx0bGluayA9IE5VTEw7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJmYWlsZWQgdG8gZGV0YWNoIHRyYWNpbmcgbXVsdGkgbGluazogJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHN0cmVycm9yKC1lcnIpKTtcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHR9XFxuK1xcbitcXHRhdHRhY2hfZGVsdGEgPSAoYXR0YWNoX2VuZF9ucyAtIGF0dGFjaF9zdGFydF9ucykgLyAxMDAwMDAwMDAwLjA7XFxuK1xcdGRldGFjaF9kZWx0YSA9IChkZXRhY2hfZW5kX25zIC0gZGV0YWNoX3N0YXJ0X25zKSAvIDEwMDAwMDAwMDAuMDtcXG4rXFxuK1xcdHByaW50ZihcXFwiJXM6IGZvdW5kICV6dSBmdW5jdGlvbnNcXFxcblxcXCIsIGJlbmNoLVxcdTAwM2VuYW1lLCBjbnQpO1xcbitcXHRwcmludGYoXFxcIiVzOiBhdHRhY2hlZCBpbiAlNy4zbGZzXFxcXG5cXFwiLCBiZW5jaC1cXHUwMDNlbmFtZSwgYXR0YWNoX2RlbHRhKTtcXG4rXFx0cHJpbnRmKFxcXCIlczogZGV0YWNoZWQgaW4gJTcuM2xmc1xcXFxuXFxcIiwgYmVuY2gtXFx1MDAzZW5hbWUsIGRldGFjaF9kZWx0YSk7XFxuK1xcbitjbGVhbnVwOlxcbitcXHRicGZfbGlua19fZGVzdHJveShsaW5rKTtcXG4rXFx0dHJhY2luZ19tdWx0aV9iZW5jaF9fZGVzdHJveShza2VsKTtcXG4rXFx0dGRlc3Ryb3kocm9vdCwgdGRlc3Ryb3lfZnJlZV9ub3ApO1xcbitcXHR0ZGVzdHJveShkdXBzLCB0ZGVzdHJveV9mcmVlX25vcCk7XFxuK1xcdGZyZWVfa2FsbHN5bXNfbG9jYWwoa3N5bXMpO1xcbitcXHRmcmVlKGlkcyk7XFxuK1xcdGJ0Zl9fZnJlZShidGYpO1xcbitcXG4rXFx0ZXhpdChlcnIgPyAxIDogMCk7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaCA9IHtcXG4rXFx0Lm5hbWUgPSBcXFwidHJhY2luZy1tdWx0aS1hdHRhY2hcXFwiLFxcbitcXHQuc2V0dXAgPSB0cmFjaW5nX211bHRpX2F0dGFjaF9zZXR1cCxcXG4rfTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19tdWx0aS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19tdWx0aS5jXFxuaW5kZXggMGFhOTUzMmEwNWNmZS4uZmQ0ZjI1NmQyZTBhNyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX211bHRpLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX211bHRpLmNcXG5AQCAtMywxNCArMywxMiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYnBmL2J0Zi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc2VhcmNoLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcXCJicGYvbGliYnBmX2ludGVybmFsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ0cmFjaW5nX211bHRpLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRyYWNpbmdfbXVsdGlfbW9kdWxlLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRyYWNpbmdfbXVsdGlfaW50ZXJzZWN0LnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRyYWNpbmdfbXVsdGlfc2Vzc2lvbi5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ0cmFjaW5nX211bHRpX2ZhaWwuc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidHJhY2luZ19tdWx0aV92ZXJpZmllci5za2VsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJ0cmFjaW5nX211bHRpX2JlbmNoLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRyYWNpbmdfbXVsdGlfcm9sbGJhY2suc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidHJhY2VfaGVscGVycy5oXFxcIlxcbiBcXG5AQCAtNjYyLDEyOSArNjYwLDYgQEAgc3RhdGljIHZvaWQgdGVzdF9hdHRhY2hfYXBpX2ZhaWxzKHZvaWQpXFxuIFxcdGZyZWUoaWRzMik7XFxuIH1cXG4gXFxuLXZvaWQgc2VyaWFsX3Rlc3RfdHJhY2luZ19tdWx0aV9iZW5jaF9hdHRhY2godm9pZClcXG4te1xcbi1cXHRMSUJCUEZfT1BUUyhicGZfdHJhY2luZ19tdWx0aV9vcHRzLCBvcHRzKTtcXG4tXFx0c3RydWN0IHRyYWNpbmdfbXVsdGlfYmVuY2ggKnNrZWwgPSBOVUxMO1xcbi1cXHRsb25nIGF0dGFjaF9zdGFydF9ucywgYXR0YWNoX2VuZF9ucztcXG4tXFx0bG9uZyBkZXRhY2hfc3RhcnRfbnMsIGRldGFjaF9lbmRfbnM7XFxuLVxcdGRvdWJsZSBhdHRhY2hfZGVsdGEsIGRldGFjaF9kZWx0YTtcXG4tXFx0c3RydWN0IGJwZl9saW5rICpsaW5rID0gTlVMTDtcXG4tXFx0c2l6ZV90IGksIGNhcCA9IDAsIGNudCA9IDA7XFxuLVxcdHN0cnVjdCBrc3ltcyAqa3N5bXMgPSBOVUxMO1xcbi1cXHR2b2lkICpyb290ID0gTlVMTDtcXG4tXFx0dm9pZCAqZHVwcyA9IE5VTEw7XFxuLVxcdF9fdTMyICppZHMgPSBOVUxMO1xcbi1cXHRfX3UzMiBuciwgdHlwZV9pZDtcXG4tXFx0c3RydWN0IGJ0ZiAqYnRmO1xcbi1cXHRpbnQgZXJyO1xcbi1cXG4tI2lmbmRlZiBfX3g4Nl82NF9fXFxuLVxcdHRlc3RfX3NraXAoKTtcXG4tXFx0cmV0dXJuO1xcbi0jZW5kaWZcXG4tXFxuLVxcdGJ0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpO1xcbi1cXHRpZiAoIUFTU0VSVF9PS19QVFIoYnRmLCBcXFwiYnRmX19sb2FkX3ZtbGludXhfYnRmXFxcIikpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdHNrZWwgPSB0cmFjaW5nX211bHRpX2JlbmNoX19vcGVuX2FuZF9sb2FkKCk7XFxuLVxcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwidHJhY2luZ19tdWx0aV9iZW5jaF9fb3Blbl9hbmRfbG9hZFxcXCIpKVxcbi1cXHRcXHRnb3RvIGNsZWFudXA7XFxuLVxcbi1cXHRpZiAoIUFTU0VSVF9PSyhicGZfZ2V0X2tzeW1zKFxcdTAwMjZrc3ltcywgdHJ1ZSksIFxcXCJnZXRfc3ltc1xcXCIpKVxcbi1cXHRcXHRnb3RvIGNsZWFudXA7XFxuLVxcbi1cXHQvKiBHZXQgYWxsIGZ0cmFjZSAnc2FmZScgc3ltYm9scy4uICovXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBrc3ltcy1cXHUwMDNlZmlsdGVyZWRfY250OyBpKyspIHtcXG4tXFx0XFx0aWYgKCF0c2VhcmNoKFxcdTAwMjZrc3ltcy1cXHUwMDNlZmlsdGVyZWRfc3ltc1tpXSwgXFx1MDAyNnJvb3QsIGNvbXBhcmUpKSB7XFxuLVxcdFxcdFxcdEFTU0VSVF9GQUlMKFxcXCJ0c2VhcmNoIGZhaWxlZFxcXCIpO1xcbi1cXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbi1cXG4tXFx0LypcXG4tXFx0ICogQ29sbGVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdW5pcXVlIGluIGthbGxzeW1zLiBUaGUga2VybmVsIHJlc29sdmVzIGFcXG4tXFx0ICogdHJhY2luZy1tdWx0aSBCVEYgaWQgdG8gYW4gYWRkcmVzcyB3aXRoIGthbGxzeW1zX2xvb2t1cF9uYW1lKCksIHdoaWNoXFxuLVxcdCAqIHJldHVybnMgdGhlIGZpcnN0IHN5bWJvbCBvZiB0aGF0IG5hbWUuIEZvciBhIGR1cGxpY2F0ZSBuYW1lIHRoYXQgbWF5XFxuLVxcdCAqIGJlIGEgZGlmZmVyZW50IChub24tZnRyYWNlLWFibGUpIGluc3RhbmNlIHRoYW4gdGhlIGZ0cmFjZS1hYmxlIG9uZSBpblxcbi1cXHQgKiBhdmFpbGFibGVfZmlsdGVyX2Z1bmN0aW9ucywgc28gYXR0YWNoaW5nIHRvIGl0IGJ5IEJURiBpZCBmYWlscyB3aXRoXFxuLVxcdCAqIC1FTk9FTlQgKGUuZy4gdF9zdGFydC90X25leHQvdF9zdG9wKS4ga3N5bXMtXFx1MDAzZXN5bXMgaXMgc29ydGVkIGJ5IG5hbWUsXFxuLVxcdCAqIHNvIGVxdWFsIG5hbWVzIGFyZSBhZGphY2VudC5cXG4tXFx0ICovXFxuLVxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYyBrc3ltcy1cXHUwMDNlc3ltX2NudDsgaSsrKSB7XFxuLVxcdFxcdGlmIChzdHJjbXAoa3N5bXMtXFx1MDAzZXN5bXNbaV0ubmFtZSwga3N5bXMtXFx1MDAzZXN5bXNbaSAtIDFdLm5hbWUpKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0aWYgKCF0c2VhcmNoKFxcdTAwMjZrc3ltcy1cXHUwMDNlc3ltc1tpXS5uYW1lLCBcXHUwMDI2ZHVwcywgY29tcGFyZSkpIHtcXG4tXFx0XFx0XFx0QVNTRVJUX0ZBSUwoXFxcInRzZWFyY2ggZmFpbGVkXFxcIik7XFxuLVxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcbi1cXHQvKiAuLmFuZCBmaWx0ZXIgdGhlbSB0aHJvdWdoIEJURiBhbmQgYnRmX3R5cGVfaXNfdHJhY2VhYmxlX2Z1bmMuICovXFxuLVxcdG5yID0gYnRmX190eXBlX2NudChidGYpO1xcbi1cXHRmb3IgKHR5cGVfaWQgPSAxOyB0eXBlX2lkIFxcdTAwM2MgbnI7IHR5cGVfaWQrKykge1xcbi1cXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnR5cGU7XFxuLVxcdFxcdGNvbnN0IGNoYXIgKnN0cjtcXG4tXFxuLVxcdFxcdHR5cGUgPSBidGZfX3R5cGVfYnlfaWQoYnRmLCB0eXBlX2lkKTtcXG4tXFx0XFx0aWYgKCF0eXBlKVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFxuLVxcdFxcdGlmIChCVEZfSU5GT19LSU5EKHR5cGUtXFx1MDAzZWluZm8pICE9IEJURl9LSU5EX0ZVTkMpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0c3RyID0gYnRmX19uYW1lX2J5X29mZnNldChidGYsIHR5cGUtXFx1MDAzZW5hbWVfb2ZmKTtcXG4tXFx0XFx0aWYgKCFzdHIpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXG4tXFx0XFx0aWYgKCF0ZmluZChcXHUwMDI2c3RyLCBcXHUwMDI2cm9vdCwgY29tcGFyZSkpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0LyogU2tpcCBuYW1lcyB0aGF0IGFyZSBub3QgdW5pcXVlIGluIGthbGxzeW1zLCBzZWUgYWJvdmUuICovXFxuLVxcdFxcdGlmICh0ZmluZChcXHUwMDI2c3RyLCBcXHUwMDI2ZHVwcywgY29tcGFyZSkpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0aWYgKCFidGZfdHlwZV9pc190cmFjZWFibGVfZnVuYyhidGYsIHR5cGUpKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdGVyciA9IGxpYmJwZl9lbnN1cmVfbWVtKCh2b2lkICoqKSBcXHUwMDI2aWRzLCBcXHUwMDI2Y2FwLCBzaXplb2YoKmlkcyksIGNudCArIDEpO1xcbi1cXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuLVxcbi1cXHRcXHRpZHNbY250KytdID0gdHlwZV9pZDtcXG4tXFx0fVxcbi1cXG4tXFx0b3B0cy5pZHMgPSBpZHM7XFxuLVxcdG9wdHMuY250ID0gY250O1xcbi1cXG4tXFx0YXR0YWNoX3N0YXJ0X25zID0gZ2V0X3RpbWVfbnMoKTtcXG4tXFx0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfdHJhY2luZ19tdWx0aShza2VsLVxcdTAwM2Vwcm9ncy5iZW5jaCwgTlVMTCwgXFx1MDAyNm9wdHMpO1xcbi1cXHRhdHRhY2hfZW5kX25zID0gZ2V0X3RpbWVfbnMoKTtcXG4tXFxuLVxcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcXFwiYnBmX3Byb2dyYW1fX2F0dGFjaF90cmFjaW5nX211bHRpXFxcIikpXFxuLVxcdFxcdGdvdG8gY2xlYW51cDtcXG4tXFxuLVxcdGRldGFjaF9zdGFydF9ucyA9IGdldF90aW1lX25zKCk7XFxuLVxcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xcbi1cXHRkZXRhY2hfZW5kX25zID0gZ2V0X3RpbWVfbnMoKTtcXG4tXFxuLVxcdGF0dGFjaF9kZWx0YSA9IChhdHRhY2hfZW5kX25zIC0gYXR0YWNoX3N0YXJ0X25zKSAvIDEwMDAwMDAwMDAuMDtcXG4tXFx0ZGV0YWNoX2RlbHRhID0gKGRldGFjaF9lbmRfbnMgLSBkZXRhY2hfc3RhcnRfbnMpIC8gMTAwMDAwMDAwMC4wO1xcbi1cXG4tXFx0cHJpbnRmKFxcXCIlczogZm91bmQgJWx1IGZ1bmN0aW9uc1xcXFxuXFxcIiwgX19mdW5jX18sIGNudCk7XFxuLVxcdHByaW50ZihcXFwiJXM6IGF0dGFjaGVkIGluICU3LjNsZnNcXFxcblxcXCIsIF9fZnVuY19fLCBhdHRhY2hfZGVsdGEpO1xcbi1cXHRwcmludGYoXFxcIiVzOiBkZXRhY2hlZCBpbiAlNy4zbGZzXFxcXG5cXFwiLCBfX2Z1bmNfXywgZGV0YWNoX2RlbHRhKTtcXG4tXFxuLWNsZWFudXA6XFxuLVxcdHRyYWNpbmdfbXVsdGlfYmVuY2hfX2Rlc3Ryb3koc2tlbCk7XFxuLVxcdHRkZXN0cm95KHJvb3QsIHRkZXN0cm95X2ZyZWVfbm9wKTtcXG4tXFx0dGRlc3Ryb3koZHVwcywgdGRlc3Ryb3lfZnJlZV9ub3ApO1xcbi1cXHRmcmVlX2thbGxzeW1zX2xvY2FsKGtzeW1zKTtcXG4tXFx0ZnJlZShpZHMpO1xcbi1cXHRidGZfX2ZyZWUoYnRmKTtcXG4tfVxcbi1cXG4gc3RhdGljIHZvaWQgdHJhY2luZ19tdWx0aV9yb2xsYmFja19ydW4oc3RydWN0IHRyYWNpbmdfbXVsdGlfcm9sbGJhY2sgKnNrZWwpXFxuIHtcXG4gXFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTc6MTE6MTEuNjc1MTUwNDczWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTg4MTY0MjM1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzIGFuZCBiZW5jaG1hcmtzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NGNhNDVkZTA4YjZmYTU1NTliNWIxYTljZjk0N2VmNjBkMWYzZjY5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAxNzoxMTowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuaW5kZXggNTVkMzk0NDM4NzA1YS4uZTRkOGNiZDUxZDcxNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG5AQCAtOTY2LDYgKzk2Niw3IEBAICQoT1VUUFVUKS9iZW5jaF9yaW5nYnVmcy5vOiAkKE9VVFBVVCkvcmluZ2J1Zl9iZW5jaC5za2VsLmggXFxcbiAkKE9VVFBVVCkvYmVuY2hfYmxvb21fZmlsdGVyX21hcC5vOiAkKE9VVFBVVCkvYmxvb21fZmlsdGVyX2JlbmNoLnNrZWwuaFxuICQoT1VUUFVUKS9iZW5jaF9icGZfbG9vcC5vOiAkKE9VVFBVVCkvYnBmX2xvb3BfYmVuY2guc2tlbC5oXG4gJChPVVRQVVQpL2JlbmNoX3N0cm5jbXAubzogJChPVVRQVVQpL3N0cm5jbXBfYmVuY2guc2tlbC5oXG4rJChPVVRQVVQpL2JlbmNoX3RyYWNpbmdfbXVsdGlfYXR0YWNoLm86ICQoT1VUUFVUKS90cmFjaW5nX211bHRpX2JlbmNoLnNrZWwuaFxuICQoT1VUUFVUKS9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5vOiAkKE9VVFBVVCkvYnBmX2hhc2htYXBfZnVsbF91cGRhdGVfYmVuY2guc2tlbC5oXG4gJChPVVRQVVQpL2JlbmNoX2xvY2FsX3N0b3JhZ2UubzogJChPVVRQVVQpL2xvY2FsX3N0b3JhZ2VfYmVuY2guc2tlbC5oXG4gJChPVVRQVVQpL2JlbmNoX2xvY2FsX3N0b3JhZ2VfcmN1X3Rhc2tzX3RyYWNlLm86ICQoT1VUUFVUKS9sb2NhbF9zdG9yYWdlX3JjdV90YXNrc190cmFjZV9iZW5jaC5za2VsLmhcbkBAIC05OTEsNiArOTkyLDcgQEAgJChPVVRQVVQpL2JlbmNoOiAkKE9VVFBVVCkvYmVuY2gubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2Jsb29tX2ZpbHRlcl9tYXAubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2JwZl9sb29wLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9zdHJuY21wLm8gXFxcbitcdFx0ICQoT1VUUFVUKS9iZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaC5vIFxcXG4gXHRcdCAkKE9VVFBVVCkvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2xvY2FsX3N0b3JhZ2UubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2xvY2FsX3N0b3JhZ2VfcmN1X3Rhc2tzX3RyYWNlLm8gXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXG5pbmRleCAzZDlkMmNkNzc2NGJkLi41Y2UzMTQ1OTgzNWNlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXG5AQCAtNTQ1LDYgKzU0NSw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfdHJpZ191cHJvYmVfbXVsdGlfbm9wNTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX3RyaWdfdXJldHByb2JlX211bHRpX25vcDU7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF90cmlnX3VzZHRfbm9wO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfdHJpZ191c2R0X25vcDU7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaDtcbiAjZW5kaWZcbiBcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX3JiX2xpYmJwZjtcbkBAIC02MjgsNiArNjI5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiZW5jaCAqYmVuY2hzW10gPSB7XG4gXHRcdTAwMjZiZW5jaF90cmlnX3VyZXRwcm9iZV9tdWx0aV9ub3A1LFxuIFx0XHUwMDI2YmVuY2hfdHJpZ191c2R0X25vcCxcbiBcdFx1MDAyNmJlbmNoX3RyaWdfdXNkdF9ub3A1LFxuK1x0XHUwMDI2YmVuY2hfdHJhY2luZ19tdWx0aV9hdHRhY2gsXG4gI2VuZGlmXG4gXHQvKiByaW5nYnVmL3BlcmZidWYgYmVuY2htYXJrcyAqL1xuIFx0XHUwMDI2YmVuY2hfcmJfbGliYnBmLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfdHJhY2luZ19tdWx0aV9hdHRhY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfdHJhY2luZ19tdWx0aV9hdHRhY2guY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjczODlkMTc0MmRkY2Jcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfdHJhY2luZ19tdWx0aV9hdHRhY2guY1xuQEAgLTAsMCArMSwxNzcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcbisjaW5jbHVkZSBcdTAwM2NzZWFyY2guaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYmVuY2guaFwiXG4rI2luY2x1ZGUgXCJ0ZXN0aW5nX2hlbHBlcnMuaFwiXG4rI2luY2x1ZGUgXCJ0cmFjZV9oZWxwZXJzLmhcIlxuKyNpbmNsdWRlIFwidHJhY2luZ19tdWx0aV9iZW5jaC5za2VsLmhcIlxuKyNpbmNsdWRlIFwiYnBmL2xpYmJwZl9pbnRlcm5hbC5oXCJcbitcbitzdGF0aWMgaW50IGNvbXBhcmUoY29uc3Qgdm9pZCAqcHBhLCBjb25zdCB2b2lkICpwcGIpXG4re1xuK1x0Y29uc3QgY2hhciAqcGEgPSAqKGNvbnN0IGNoYXIgKiopcHBhO1xuK1x0Y29uc3QgY2hhciAqcGIgPSAqKGNvbnN0IGNoYXIgKiopcHBiO1xuK1xuK1x0cmV0dXJuIHN0cmNtcChwYSwgcGIpO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZGVzdHJveV9mcmVlX25vcCh2b2lkICpwdHIpXG4re1xuK31cbitcbitzdGF0aWMgdm9pZCB0cmFjaW5nX211bHRpX2F0dGFjaF9zZXR1cCh2b2lkKVxuK3tcbitcdExJQkJQRl9PUFRTKGJwZl90cmFjaW5nX211bHRpX29wdHMsIG9wdHMpO1xuK1x0c3RydWN0IHRyYWNpbmdfbXVsdGlfYmVuY2ggKnNrZWwgPSBOVUxMO1xuK1x0bG9uZyBhdHRhY2hfc3RhcnRfbnMsIGF0dGFjaF9lbmRfbnM7XG4rXHRsb25nIGRldGFjaF9zdGFydF9ucywgZGV0YWNoX2VuZF9ucztcbitcdGRvdWJsZSBhdHRhY2hfZGVsdGEsIGRldGFjaF9kZWx0YTtcbitcdHN0cnVjdCBicGZfbGluayAqbGluayA9IE5VTEw7XG4rXHRzaXplX3QgaSwgY2FwID0gMCwgY250ID0gMDtcbitcdHN0cnVjdCBrc3ltcyAqa3N5bXMgPSBOVUxMO1xuK1x0dm9pZCAqcm9vdCA9IE5VTEw7XG4rXHR2b2lkICpkdXBzID0gTlVMTDtcbitcdF9fdTMyICppZHMgPSBOVUxMO1xuK1x0X191MzIgbnIsIHR5cGVfaWQ7XG4rXHRzdHJ1Y3QgYnRmICpidGY7XG4rXHRpbnQgZXJyO1xuK1xuK1x0c2V0dXBfbGliYnBmKCk7XG4rXG4rXHRidGYgPSBidGZfX2xvYWRfdm1saW51eF9idGYoKTtcbitcdGVyciA9IGxpYmJwZl9nZXRfZXJyb3IoYnRmKTtcbitcdGlmIChlcnIpIHtcbitcdFx0YnRmID0gTlVMTDtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiZmFpbGVkIHRvIGxvYWQgdm1saW51eCBCVEY6ICVzXFxuXCIsIHN0cmVycm9yKC1lcnIpKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0c2tlbCA9IHRyYWNpbmdfbXVsdGlfYmVuY2hfX29wZW5fYW5kX2xvYWQoKTtcbitcdGVyciA9IGxpYmJwZl9nZXRfZXJyb3Ioc2tlbCk7XG4rXHRpZiAoIXNrZWwpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiZmFpbGVkIHRvIG9wZW4gYW5kIGxvYWQgc2tlbGV0b246ICVzXFxuXCIsIHN0cmVycm9yKC1lcnIpKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0ZXJyID0gYnBmX2dldF9rc3ltcyhcdTAwMjZrc3ltcywgdHJ1ZSk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcImZhaWxlZCB0byBnZXQga2VybmVsIHN5bWJvbHM6ICVzXFxuXCIsIHN0cmVycm9yKC1lcnIpKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0LyogR2V0IGFsbCBmdHJhY2UgJ3NhZmUnIHN5bWJvbHMuLiAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mga3N5bXMtXHUwMDNlZmlsdGVyZWRfY250OyBpKyspIHtcbitcdFx0aWYgKCF0c2VhcmNoKFx1MDAyNmtzeW1zLVx1MDAzZWZpbHRlcmVkX3N5bXNbaV0sIFx1MDAyNnJvb3QsIGNvbXBhcmUpKSB7XG4rXHRcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJmYWlsZWQgdG8gaW5kZXggZnRyYWNlIHN5bWJvbHNcXG5cIik7XG4rXHRcdFx0Z290byBjbGVhbnVwO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogQ29sbGVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdW5pcXVlIGluIGthbGxzeW1zLiBUaGUga2VybmVsIHJlc29sdmVzIGFcbitcdCAqIHRyYWNpbmctbXVsdGkgQlRGIGlkIHRvIGFuIGFkZHJlc3Mgd2l0aCBrYWxsc3ltc19sb29rdXBfbmFtZSgpLCB3aGljaFxuK1x0ICogcmV0dXJucyB0aGUgZmlyc3Qgc3ltYm9sIG9mIHRoYXQgbmFtZS4gRm9yIGEgZHVwbGljYXRlIG5hbWUgdGhhdCBtYXlcbitcdCAqIGJlIGEgZGlmZmVyZW50IChub24tZnRyYWNlLWFibGUpIGluc3RhbmNlIHRoYW4gdGhlIGZ0cmFjZS1hYmxlIG9uZSBpblxuK1x0ICogYXZhaWxhYmxlX2ZpbHRlcl9mdW5jdGlvbnMsIHNvIGF0dGFjaGluZyB0byBpdCBieSBCVEYgaWQgZmFpbHMgd2l0aFxuK1x0ICogLUVOT0VOVCAoZS5nLiB0X3N0YXJ0L3RfbmV4dC90X3N0b3ApLiBrc3ltcy1cdTAwM2VzeW1zIGlzIHNvcnRlZCBieSBuYW1lLFxuK1x0ICogc28gZXF1YWwgbmFtZXMgYXJlIGFkamFjZW50LlxuK1x0ICovXG4rXHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBrc3ltcy1cdTAwM2VzeW1fY250OyBpKyspIHtcbitcdFx0aWYgKHN0cmNtcChrc3ltcy1cdTAwM2VzeW1zW2ldLm5hbWUsIGtzeW1zLVx1MDAzZXN5bXNbaSAtIDFdLm5hbWUpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoIXRzZWFyY2goXHUwMDI2a3N5bXMtXHUwMDNlc3ltc1tpXS5uYW1lLCBcdTAwMjZkdXBzLCBjb21wYXJlKSkge1xuK1x0XHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiZmFpbGVkIHRvIGluZGV4IGR1cGxpY2F0ZSBrZXJuZWwgc3ltYm9sc1xcblwiKTtcbitcdFx0XHRnb3RvIGNsZWFudXA7XG4rXHRcdH1cbitcdH1cbitcbitcdC8qIC4uYW5kIGZpbHRlciB0aGVtIHRocm91Z2ggQlRGIGFuZCBidGZfdHlwZV9pc190cmFjZWFibGVfZnVuYy4gKi9cbitcdG5yID0gYnRmX190eXBlX2NudChidGYpO1xuK1x0Zm9yICh0eXBlX2lkID0gMTsgdHlwZV9pZCBcdTAwM2MgbnI7IHR5cGVfaWQrKykge1xuK1x0XHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnR5cGU7XG4rXHRcdGNvbnN0IGNoYXIgKnN0cjtcbitcbitcdFx0dHlwZSA9IGJ0Zl9fdHlwZV9ieV9pZChidGYsIHR5cGVfaWQpO1xuK1x0XHRpZiAoIXR5cGUpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdGlmIChCVEZfSU5GT19LSU5EKHR5cGUtXHUwMDNlaW5mbykgIT0gQlRGX0tJTkRfRlVOQylcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c3RyID0gYnRmX19uYW1lX2J5X29mZnNldChidGYsIHR5cGUtXHUwMDNlbmFtZV9vZmYpO1xuK1x0XHRpZiAoIXN0cilcbitcdFx0XHRicmVhaztcbitcbitcdFx0aWYgKCF0ZmluZChcdTAwMjZzdHIsIFx1MDAyNnJvb3QsIGNvbXBhcmUpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKiBTa2lwIG5hbWVzIHRoYXQgYXJlIG5vdCB1bmlxdWUgaW4ga2FsbHN5bXMsIHNlZSBhYm92ZS4gKi9cbitcdFx0aWYgKHRmaW5kKFx1MDAyNnN0ciwgXHUwMDI2ZHVwcywgY29tcGFyZSkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGlmICghYnRmX3R5cGVfaXNfdHJhY2VhYmxlX2Z1bmMoYnRmLCB0eXBlKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0ZXJyID0gbGliYnBmX2Vuc3VyZV9tZW0oKHZvaWQgKiopXHUwMDI2aWRzLCBcdTAwMjZjYXAsIHNpemVvZigqaWRzKSwgY250ICsgMSk7XG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJmYWlsZWQgdG8gYWxsb2NhdGUgQlRGIElEIGFycmF5OiAlc1xcblwiLFxuK1x0XHRcdFx0c3RyZXJyb3IoLWVycikpO1xuK1x0XHRcdGdvdG8gY2xlYW51cDtcbitcdFx0fVxuK1xuK1x0XHRpZHNbY250KytdID0gdHlwZV9pZDtcbitcdH1cbitcbitcdG9wdHMuaWRzID0gaWRzO1xuK1x0b3B0cy5jbnQgPSBjbnQ7XG4rXG4rXHRhdHRhY2hfc3RhcnRfbnMgPSBnZXRfdGltZV9ucygpO1xuK1x0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfdHJhY2luZ19tdWx0aShza2VsLVx1MDAzZXByb2dzLmJlbmNoLCBOVUxMLCBcdTAwMjZvcHRzKTtcbitcdGF0dGFjaF9lbmRfbnMgPSBnZXRfdGltZV9ucygpO1xuK1xuK1x0ZXJyID0gbGliYnBmX2dldF9lcnJvcihsaW5rKTtcbitcdGlmIChlcnIpIHtcbitcdFx0bGluayA9IE5VTEw7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcImZhaWxlZCB0byBhdHRhY2ggdHJhY2luZyBtdWx0aSBsaW5rOiAlc1xcblwiLFxuK1x0XHRcdHN0cmVycm9yKC1lcnIpKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0ZGV0YWNoX3N0YXJ0X25zID0gZ2V0X3RpbWVfbnMoKTtcbitcdGVyciA9IGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuK1x0ZGV0YWNoX2VuZF9ucyA9IGdldF90aW1lX25zKCk7XG4rXHRsaW5rID0gTlVMTDtcbitcdGlmIChlcnIpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiZmFpbGVkIHRvIGRldGFjaCB0cmFjaW5nIG11bHRpIGxpbms6ICVzXFxuXCIsXG4rXHRcdFx0c3RyZXJyb3IoLWVycikpO1xuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXG4rXHRhdHRhY2hfZGVsdGEgPSAoYXR0YWNoX2VuZF9ucyAtIGF0dGFjaF9zdGFydF9ucykgLyAxMDAwMDAwMDAwLjA7XG4rXHRkZXRhY2hfZGVsdGEgPSAoZGV0YWNoX2VuZF9ucyAtIGRldGFjaF9zdGFydF9ucykgLyAxMDAwMDAwMDAwLjA7XG4rXG4rXHRwcmludGYoXCIlczogZm91bmQgJXp1IGZ1bmN0aW9uc1xcblwiLCBiZW5jaC1cdTAwM2VuYW1lLCBjbnQpO1xuK1x0cHJpbnRmKFwiJXM6IGF0dGFjaGVkIGluICU3LjNsZnNcXG5cIiwgYmVuY2gtXHUwMDNlbmFtZSwgYXR0YWNoX2RlbHRhKTtcbitcdHByaW50ZihcIiVzOiBkZXRhY2hlZCBpbiAlNy4zbGZzXFxuXCIsIGJlbmNoLVx1MDAzZW5hbWUsIGRldGFjaF9kZWx0YSk7XG4rXG4rY2xlYW51cDpcbitcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuK1x0dHJhY2luZ19tdWx0aV9iZW5jaF9fZGVzdHJveShza2VsKTtcbitcdHRkZXN0cm95KHJvb3QsIHRkZXN0cm95X2ZyZWVfbm9wKTtcbitcdHRkZXN0cm95KGR1cHMsIHRkZXN0cm95X2ZyZWVfbm9wKTtcbitcdGZyZWVfa2FsbHN5bXNfbG9jYWwoa3N5bXMpO1xuK1x0ZnJlZShpZHMpO1xuK1x0YnRmX19mcmVlKGJ0Zik7XG4rXG4rXHRleGl0KGVyciA/IDEgOiAwKTtcbit9XG4rXG4rY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX3RyYWNpbmdfbXVsdGlfYXR0YWNoID0ge1xuK1x0Lm5hbWUgPSBcInRyYWNpbmctbXVsdGktYXR0YWNoXCIsXG4rXHQuc2V0dXAgPSB0cmFjaW5nX211bHRpX2F0dGFjaF9zZXR1cCxcbit9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuY1xuaW5kZXggMGFhOTUzMmEwNWNmZS4uZmQ0ZjI1NmQyZTBhNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19tdWx0aS5jXG5AQCAtMywxNCArMywxMiBAQFxuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3NlYXJjaC5oXHUwMDNlXG4tI2luY2x1ZGUgXCJicGYvbGliYnBmX2ludGVybmFsLmhcIlxuICNpbmNsdWRlIFwidHJhY2luZ19tdWx0aS5za2VsLmhcIlxuICNpbmNsdWRlIFwidHJhY2luZ19tdWx0aV9tb2R1bGUuc2tlbC5oXCJcbiAjaW5jbHVkZSBcInRyYWNpbmdfbXVsdGlfaW50ZXJzZWN0LnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ0cmFjaW5nX211bHRpX3Nlc3Npb24uc2tlbC5oXCJcbiAjaW5jbHVkZSBcInRyYWNpbmdfbXVsdGlfZmFpbC5za2VsLmhcIlxuICNpbmNsdWRlIFwidHJhY2luZ19tdWx0aV92ZXJpZmllci5za2VsLmhcIlxuLSNpbmNsdWRlIFwidHJhY2luZ19tdWx0aV9iZW5jaC5za2VsLmhcIlxuICNpbmNsdWRlIFwidHJhY2luZ19tdWx0aV9yb2xsYmFjay5za2VsLmhcIlxuICNpbmNsdWRlIFwidHJhY2VfaGVscGVycy5oXCJcbiBcbkBAIC02NjIsMTI5ICs2NjAsNiBAQCBzdGF0aWMgdm9pZCB0ZXN0X2F0dGFjaF9hcGlfZmFpbHModm9pZClcbiBcdGZyZWUoaWRzMik7XG4gfVxuIFxuLXZvaWQgc2VyaWFsX3Rlc3RfdHJhY2luZ19tdWx0aV9iZW5jaF9hdHRhY2godm9pZClcbi17XG4tXHRMSUJCUEZfT1BUUyhicGZfdHJhY2luZ19tdWx0aV9vcHRzLCBvcHRzKTtcbi1cdHN0cnVjdCB0cmFjaW5nX211bHRpX2JlbmNoICpza2VsID0gTlVMTDtcbi1cdGxvbmcgYXR0YWNoX3N0YXJ0X25zLCBhdHRhY2hfZW5kX25zO1xuLVx0bG9uZyBkZXRhY2hfc3RhcnRfbnMsIGRldGFjaF9lbmRfbnM7XG4tXHRkb3VibGUgYXR0YWNoX2RlbHRhLCBkZXRhY2hfZGVsdGE7XG4tXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBOVUxMO1xuLVx0c2l6ZV90IGksIGNhcCA9IDAsIGNudCA9IDA7XG4tXHRzdHJ1Y3Qga3N5bXMgKmtzeW1zID0gTlVMTDtcbi1cdHZvaWQgKnJvb3QgPSBOVUxMO1xuLVx0dm9pZCAqZHVwcyA9IE5VTEw7XG4tXHRfX3UzMiAqaWRzID0gTlVMTDtcbi1cdF9fdTMyIG5yLCB0eXBlX2lkO1xuLVx0c3RydWN0IGJ0ZiAqYnRmO1xuLVx0aW50IGVycjtcbi1cbi0jaWZuZGVmIF9feDg2XzY0X19cbi1cdHRlc3RfX3NraXAoKTtcbi1cdHJldHVybjtcbi0jZW5kaWZcbi1cbi1cdGJ0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpO1xuLVx0aWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgXCJidGZfX2xvYWRfdm1saW51eF9idGZcIikpXG4tXHRcdHJldHVybjtcbi1cbi1cdHNrZWwgPSB0cmFjaW5nX211bHRpX2JlbmNoX19vcGVuX2FuZF9sb2FkKCk7XG4tXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJ0cmFjaW5nX211bHRpX2JlbmNoX19vcGVuX2FuZF9sb2FkXCIpKVxuLVx0XHRnb3RvIGNsZWFudXA7XG4tXG4tXHRpZiAoIUFTU0VSVF9PSyhicGZfZ2V0X2tzeW1zKFx1MDAyNmtzeW1zLCB0cnVlKSwgXCJnZXRfc3ltc1wiKSlcbi1cdFx0Z290byBjbGVhbnVwO1xuLVxuLVx0LyogR2V0IGFsbCBmdHJhY2UgJ3NhZmUnIHN5bWJvbHMuLiAqL1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mga3N5bXMtXHUwMDNlZmlsdGVyZWRfY250OyBpKyspIHtcbi1cdFx0aWYgKCF0c2VhcmNoKFx1MDAyNmtzeW1zLVx1MDAzZWZpbHRlcmVkX3N5bXNbaV0sIFx1MDAyNnJvb3QsIGNvbXBhcmUpKSB7XG4tXHRcdFx0QVNTRVJUX0ZBSUwoXCJ0c2VhcmNoIGZhaWxlZFwiKTtcbi1cdFx0XHRnb3RvIGNsZWFudXA7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdC8qXG4tXHQgKiBDb2xsZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB1bmlxdWUgaW4ga2FsbHN5bXMuIFRoZSBrZXJuZWwgcmVzb2x2ZXMgYVxuLVx0ICogdHJhY2luZy1tdWx0aSBCVEYgaWQgdG8gYW4gYWRkcmVzcyB3aXRoIGthbGxzeW1zX2xvb2t1cF9uYW1lKCksIHdoaWNoXG4tXHQgKiByZXR1cm5zIHRoZSBmaXJzdCBzeW1ib2wgb2YgdGhhdCBuYW1lLiBGb3IgYSBkdXBsaWNhdGUgbmFtZSB0aGF0IG1heVxuLVx0ICogYmUgYSBkaWZmZXJlbnQgKG5vbi1mdHJhY2UtYWJsZSkgaW5zdGFuY2UgdGhhbiB0aGUgZnRyYWNlLWFibGUgb25lIGluXG4tXHQgKiBhdmFpbGFibGVfZmlsdGVyX2Z1bmN0aW9ucywgc28gYXR0YWNoaW5nIHRvIGl0IGJ5IEJURiBpZCBmYWlscyB3aXRoXG4tXHQgKiAtRU5PRU5UIChlLmcuIHRfc3RhcnQvdF9uZXh0L3Rfc3RvcCkuIGtzeW1zLVx1MDAzZXN5bXMgaXMgc29ydGVkIGJ5IG5hbWUsXG4tXHQgKiBzbyBlcXVhbCBuYW1lcyBhcmUgYWRqYWNlbnQuXG4tXHQgKi9cbi1cdGZvciAoaSA9IDE7IGkgXHUwMDNjIGtzeW1zLVx1MDAzZXN5bV9jbnQ7IGkrKykge1xuLVx0XHRpZiAoc3RyY21wKGtzeW1zLVx1MDAzZXN5bXNbaV0ubmFtZSwga3N5bXMtXHUwMDNlc3ltc1tpIC0gMV0ubmFtZSkpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGlmICghdHNlYXJjaChcdTAwMjZrc3ltcy1cdTAwM2VzeW1zW2ldLm5hbWUsIFx1MDAyNmR1cHMsIGNvbXBhcmUpKSB7XG4tXHRcdFx0QVNTRVJUX0ZBSUwoXCJ0c2VhcmNoIGZhaWxlZFwiKTtcbi1cdFx0XHRnb3RvIGNsZWFudXA7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdC8qIC4uYW5kIGZpbHRlciB0aGVtIHRocm91Z2ggQlRGIGFuZCBidGZfdHlwZV9pc190cmFjZWFibGVfZnVuYy4gKi9cbi1cdG5yID0gYnRmX190eXBlX2NudChidGYpO1xuLVx0Zm9yICh0eXBlX2lkID0gMTsgdHlwZV9pZCBcdTAwM2MgbnI7IHR5cGVfaWQrKykge1xuLVx0XHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnR5cGU7XG4tXHRcdGNvbnN0IGNoYXIgKnN0cjtcbi1cbi1cdFx0dHlwZSA9IGJ0Zl9fdHlwZV9ieV9pZChidGYsIHR5cGVfaWQpO1xuLVx0XHRpZiAoIXR5cGUpXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRcdGlmIChCVEZfSU5GT19LSU5EKHR5cGUtXHUwMDNlaW5mbykgIT0gQlRGX0tJTkRfRlVOQylcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0c3RyID0gYnRmX19uYW1lX2J5X29mZnNldChidGYsIHR5cGUtXHUwMDNlbmFtZV9vZmYpO1xuLVx0XHRpZiAoIXN0cilcbi1cdFx0XHRicmVhaztcbi1cbi1cdFx0aWYgKCF0ZmluZChcdTAwMjZzdHIsIFx1MDAyNnJvb3QsIGNvbXBhcmUpKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHQvKiBTa2lwIG5hbWVzIHRoYXQgYXJlIG5vdCB1bmlxdWUgaW4ga2FsbHN5bXMsIHNlZSBhYm92ZS4gKi9cbi1cdFx0aWYgKHRmaW5kKFx1MDAyNnN0ciwgXHUwMDI2ZHVwcywgY29tcGFyZSkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGlmICghYnRmX3R5cGVfaXNfdHJhY2VhYmxlX2Z1bmMoYnRmLCB0eXBlKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0ZXJyID0gbGliYnBmX2Vuc3VyZV9tZW0oKHZvaWQgKiopIFx1MDAyNmlkcywgXHUwMDI2Y2FwLCBzaXplb2YoKmlkcyksIGNudCArIDEpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gY2xlYW51cDtcbi1cbi1cdFx0aWRzW2NudCsrXSA9IHR5cGVfaWQ7XG4tXHR9XG4tXG4tXHRvcHRzLmlkcyA9IGlkcztcbi1cdG9wdHMuY250ID0gY250O1xuLVxuLVx0YXR0YWNoX3N0YXJ0X25zID0gZ2V0X3RpbWVfbnMoKTtcbi1cdGxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX3RyYWNpbmdfbXVsdGkoc2tlbC1cdTAwM2Vwcm9ncy5iZW5jaCwgTlVMTCwgXHUwMDI2b3B0cyk7XG4tXHRhdHRhY2hfZW5kX25zID0gZ2V0X3RpbWVfbnMoKTtcbi1cbi1cdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcImJwZl9wcm9ncmFtX19hdHRhY2hfdHJhY2luZ19tdWx0aVwiKSlcbi1cdFx0Z290byBjbGVhbnVwO1xuLVxuLVx0ZGV0YWNoX3N0YXJ0X25zID0gZ2V0X3RpbWVfbnMoKTtcbi1cdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuLVx0ZGV0YWNoX2VuZF9ucyA9IGdldF90aW1lX25zKCk7XG4tXG4tXHRhdHRhY2hfZGVsdGEgPSAoYXR0YWNoX2VuZF9ucyAtIGF0dGFjaF9zdGFydF9ucykgLyAxMDAwMDAwMDAwLjA7XG4tXHRkZXRhY2hfZGVsdGEgPSAoZGV0YWNoX2VuZF9ucyAtIGRldGFjaF9zdGFydF9ucykgLyAxMDAwMDAwMDAwLjA7XG4tXG4tXHRwcmludGYoXCIlczogZm91bmQgJWx1IGZ1bmN0aW9uc1xcblwiLCBfX2Z1bmNfXywgY250KTtcbi1cdHByaW50ZihcIiVzOiBhdHRhY2hlZCBpbiAlNy4zbGZzXFxuXCIsIF9fZnVuY19fLCBhdHRhY2hfZGVsdGEpO1xuLVx0cHJpbnRmKFwiJXM6IGRldGFjaGVkIGluICU3LjNsZnNcXG5cIiwgX19mdW5jX18sIGRldGFjaF9kZWx0YSk7XG4tXG4tY2xlYW51cDpcbi1cdHRyYWNpbmdfbXVsdGlfYmVuY2hfX2Rlc3Ryb3koc2tlbCk7XG4tXHR0ZGVzdHJveShyb290LCB0ZGVzdHJveV9mcmVlX25vcCk7XG4tXHR0ZGVzdHJveShkdXBzLCB0ZGVzdHJveV9mcmVlX25vcCk7XG4tXHRmcmVlX2thbGxzeW1zX2xvY2FsKGtzeW1zKTtcbi1cdGZyZWUoaWRzKTtcbi1cdGJ0Zl9fZnJlZShidGYpO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCB0cmFjaW5nX211bHRpX3JvbGxiYWNrX3J1bihzdHJ1Y3QgdHJhY2luZ19tdWx0aV9yb2xsYmFjayAqc2tlbClcbiB7XG4gXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTc6MTE6MTEuNjc1MTU0MjUzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg4MTU5NDM4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipCUEYgU2VsZnRlc3QvQmVuY2htYXJrIFJlZmFjdG9yIC0gTm8gRnV6emluZyBOZWVkZWQqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHNpbXBseSByZWZhY3RvcmluZyBhIGJlbmNobWFyayB0ZXN0IHdpdGhpbiB0aGUgQlBGIHNlbGYtdGVzdHMuIFNwZWNpZmljYWxseSwgaXQncyBtb3ZpbmcgYHRyYWNpbmdfbXVsdGkuY2AgZnJvbSBgcHJvZ190ZXN0c2AgaW50byBhIG5ldyBgYmVuY2hzYCBkaXJlY3RvcnkgYW5kIHVwZGF0aW5nIHRoZSBjb3JyZXNwb25kaW5nIGBNYWtlZmlsZWAgYW5kIGBiZW5jaC5jYCBmaWxlcy4gVGhpcyBpcyBwdXJlbHkgYSByZW9yZ2FuaXphdGlvbiBvZiB0aGUgQlBGIHRlc3Qgc3VpdGUsIHJlYWxseSwgYW5kIG5vdCB0b3VjaGluZyBhbnkgY29yZSBrZXJuZWwgY29tcG9uZW50cy4gSXQncyBhIGNsZWFuIHNlcGFyYXRpb24gYmV0d2VlbiBmdW5jdGlvbmFsIHRlc3RzIGFuZCBwZXJmb3JtYW5jZSBiZW5jaG1hcmtzIG5vdy5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBpbmRlZWQgdGhlIGNhc2UuIEknbGwgcXVpY2tseSBsb29rIGF0IHRoZSBkaWZmIGZvcjpcblxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX3RyYWNpbmdfbXVsdGlfYXR0YWNoLmNgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuY2BcblxuWWVwLCBubyBhY3R1YWwga2VybmVsIGNvZGUgaXMgYmVpbmcgbW9kaWZpZWQgaGVyZS4gVGhpcyBpcyBwdXJlbHkgaW50ZXJuYWwgdG8gdGhlIHRlc3QgYW5kIGJlbmNobWFyayBpbmZyYXN0cnVjdHVyZS5cblxuVGhlcmVmb3JlLCBjb25zaWRlcmluZyB0aGlzIGlzIG9ubHkgYSBzZWxmLXRlc3QvYmVuY2htYXJrIG1vZGlmaWNhdGlvbiBhbmQgZG9lc24ndCBpbXBhY3QgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCBJJ20gZ29pbmcgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBObyBmdXp6aW5nIG5lZWRlZCBmb3IgdGhpcyBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NDcsIk91dHB1dFRva2VucyI6NzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxNzoxMToxNy41NTY3NTI4MDZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyBhbmQgYmVuY2htYXJrcyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzIGFuZCBiZW5jaG1hcmtzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow82nnt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 16:29:04 +0000 UTC FinishedAt: 2026-08-04 17:11:18 +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+CgkJCTx0ZD4yMDI2LzA4LzA0IDE3OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyBhbmQgYmVuY2htYXJrcyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxNzoxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg0Y2E0NWRlMDhiNmZhNTU1OWI1YjFhOWNmOTQ3ZWY2MGQxZjNmNjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDE3OjExOjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuaW5kZXggNTVkMzk0NDM4NzA1YS4uZTRkOGNiZDUxZDcxNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG5AQCAtOTY2LDYgJiM0Mzs5NjYsNyBAQCAkKE9VVFBVVCkvYmVuY2hfcmluZ2J1ZnMubzogJChPVVRQVVQpL3JpbmdidWZfYmVuY2guc2tlbC5oIFxcXG4gJChPVVRQVVQpL2JlbmNoX2Jsb29tX2ZpbHRlcl9tYXAubzogJChPVVRQVVQpL2Jsb29tX2ZpbHRlcl9iZW5jaC5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfYnBmX2xvb3AubzogJChPVVRQVVQpL2JwZl9sb29wX2JlbmNoLnNrZWwuaFxuICQoT1VUUFVUKS9iZW5jaF9zdHJuY21wLm86ICQoT1VUUFVUKS9zdHJuY21wX2JlbmNoLnNrZWwuaFxuJiM0MzskKE9VVFBVVCkvYmVuY2hfdHJhY2luZ19tdWx0aV9hdHRhY2gubzogJChPVVRQVVQpL3RyYWNpbmdfbXVsdGlfYmVuY2guc2tlbC5oXG4gJChPVVRQVVQpL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLm86ICQoT1VUUFVUKS9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZV9iZW5jaC5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfbG9jYWxfc3RvcmFnZS5vOiAkKE9VVFBVVCkvbG9jYWxfc3RvcmFnZV9iZW5jaC5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfbG9jYWxfc3RvcmFnZV9yY3VfdGFza3NfdHJhY2UubzogJChPVVRQVVQpL2xvY2FsX3N0b3JhZ2VfcmN1X3Rhc2tzX3RyYWNlX2JlbmNoLnNrZWwuaFxuQEAgLTk5MSw2ICYjNDM7OTkyLDcgQEAgJChPVVRQVVQpL2JlbmNoOiAkKE9VVFBVVCkvYmVuY2gubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2Jsb29tX2ZpbHRlcl9tYXAubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2JwZl9sb29wLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9zdHJuY21wLm8gXFxcbiYjNDM7XHRcdCAkKE9VVFBVVCkvYmVuY2hfdHJhY2luZ19tdWx0aV9hdHRhY2gubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9sb2NhbF9zdG9yYWdlLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9sb2NhbF9zdG9yYWdlX3JjdV90YXNrc190cmFjZS5vIFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xuaW5kZXggM2Q5ZDJjZDc3NjRiZC4uNWNlMzE0NTk4MzVjZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xuQEAgLTU0NSw2ICYjNDM7NTQ1LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF90cmlnX3Vwcm9iZV9tdWx0aV9ub3A1O1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfdHJpZ191cmV0cHJvYmVfbXVsdGlfbm9wNTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX3RyaWdfdXNkdF9ub3A7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF90cmlnX3VzZHRfbm9wNTtcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaDtcbiAjZW5kaWZcbiBcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX3JiX2xpYmJwZjtcbkBAIC02MjgsNiAmIzQzOzYyOSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmVuY2ggKmJlbmNoc1tdID0ge1xuIFx0XHUwMDI2YmVuY2hfdHJpZ191cmV0cHJvYmVfbXVsdGlfbm9wNSxcbiBcdFx1MDAyNmJlbmNoX3RyaWdfdXNkdF9ub3AsXG4gXHRcdTAwMjZiZW5jaF90cmlnX3VzZHRfbm9wNSxcbiYjNDM7XHRcdTAwMjZiZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaCxcbiAjZW5kaWZcbiBcdC8qIHJpbmdidWYvcGVyZmJ1ZiBiZW5jaG1hcmtzICovXG4gXHRcdTAwMjZiZW5jaF9yYl9saWJicGYsXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzM4OWQxNzQyZGRjYlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaC5jXG5AQCAtMCwwICYjNDM7MSwxNzcgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzZWFyY2guaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtiZW5jaC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Rlc3RpbmdfaGVscGVycy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3RyYWNlX2hlbHBlcnMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt0cmFjaW5nX211bHRpX2JlbmNoLnNrZWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDticGYvbGliYnBmX2ludGVybmFsLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgY29tcGFyZShjb25zdCB2b2lkICpwcGEsIGNvbnN0IHZvaWQgKnBwYilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGNoYXIgKnBhID0gKihjb25zdCBjaGFyICoqKXBwYTtcbiYjNDM7XHRjb25zdCBjaGFyICpwYiA9ICooY29uc3QgY2hhciAqKilwcGI7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzdHJjbXAocGEsIHBiKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGRlc3Ryb3lfZnJlZV9ub3Aodm9pZCAqcHRyKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRyYWNpbmdfbXVsdGlfYXR0YWNoX3NldHVwKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfdHJhY2luZ19tdWx0aV9vcHRzLCBvcHRzKTtcbiYjNDM7XHRzdHJ1Y3QgdHJhY2luZ19tdWx0aV9iZW5jaCAqc2tlbCA9IE5VTEw7XG4mIzQzO1x0bG9uZyBhdHRhY2hfc3RhcnRfbnMsIGF0dGFjaF9lbmRfbnM7XG4mIzQzO1x0bG9uZyBkZXRhY2hfc3RhcnRfbnMsIGRldGFjaF9lbmRfbnM7XG4mIzQzO1x0ZG91YmxlIGF0dGFjaF9kZWx0YSwgZGV0YWNoX2RlbHRhO1xuJiM0MztcdHN0cnVjdCBicGZfbGluayAqbGluayA9IE5VTEw7XG4mIzQzO1x0c2l6ZV90IGksIGNhcCA9IDAsIGNudCA9IDA7XG4mIzQzO1x0c3RydWN0IGtzeW1zICprc3ltcyA9IE5VTEw7XG4mIzQzO1x0dm9pZCAqcm9vdCA9IE5VTEw7XG4mIzQzO1x0dm9pZCAqZHVwcyA9IE5VTEw7XG4mIzQzO1x0X191MzIgKmlkcyA9IE5VTEw7XG4mIzQzO1x0X191MzIgbnIsIHR5cGVfaWQ7XG4mIzQzO1x0c3RydWN0IGJ0ZiAqYnRmO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHNldHVwX2xpYmJwZigpO1xuJiM0MztcbiYjNDM7XHRidGYgPSBidGZfX2xvYWRfdm1saW51eF9idGYoKTtcbiYjNDM7XHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGJ0Zik7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0YnRmID0gTlVMTDtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtmYWlsZWQgdG8gbG9hZCB2bWxpbnV4IEJURjogJXNcXG5cJiMzNDssIHN0cmVycm9yKC1lcnIpKTtcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNrZWwgPSB0cmFjaW5nX211bHRpX2JlbmNoX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0ZXJyID0gbGliYnBmX2dldF9lcnJvcihza2VsKTtcbiYjNDM7XHRpZiAoIXNrZWwpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtmYWlsZWQgdG8gb3BlbiBhbmQgbG9hZCBza2VsZXRvbjogJXNcXG5cJiMzNDssIHN0cmVycm9yKC1lcnIpKTtcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9nZXRfa3N5bXMoXHUwMDI2a3N5bXMsIHRydWUpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtmYWlsZWQgdG8gZ2V0IGtlcm5lbCBzeW1ib2xzOiAlc1xcblwmIzM0Oywgc3RyZXJyb3IoLWVycikpO1xuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogR2V0IGFsbCBmdHJhY2UgJiMzOTtzYWZlJiMzOTsgc3ltYm9scy4uICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mga3N5bXMtXHUwMDNlZmlsdGVyZWRfY250OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKCF0c2VhcmNoKFx1MDAyNmtzeW1zLVx1MDAzZWZpbHRlcmVkX3N5bXNbaV0sIFx1MDAyNnJvb3QsIGNvbXBhcmUpKSB7XG4mIzQzO1x0XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtmYWlsZWQgdG8gaW5kZXggZnRyYWNlIHN5bWJvbHNcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENvbGxlY3QgbmFtZXMgdGhhdCBhcmUgbm90IHVuaXF1ZSBpbiBrYWxsc3ltcy4gVGhlIGtlcm5lbCByZXNvbHZlcyBhXG4mIzQzO1x0ICogdHJhY2luZy1tdWx0aSBCVEYgaWQgdG8gYW4gYWRkcmVzcyB3aXRoIGthbGxzeW1zX2xvb2t1cF9uYW1lKCksIHdoaWNoXG4mIzQzO1x0ICogcmV0dXJucyB0aGUgZmlyc3Qgc3ltYm9sIG9mIHRoYXQgbmFtZS4gRm9yIGEgZHVwbGljYXRlIG5hbWUgdGhhdCBtYXlcbiYjNDM7XHQgKiBiZSBhIGRpZmZlcmVudCAobm9uLWZ0cmFjZS1hYmxlKSBpbnN0YW5jZSB0aGFuIHRoZSBmdHJhY2UtYWJsZSBvbmUgaW5cbiYjNDM7XHQgKiBhdmFpbGFibGVfZmlsdGVyX2Z1bmN0aW9ucywgc28gYXR0YWNoaW5nIHRvIGl0IGJ5IEJURiBpZCBmYWlscyB3aXRoXG4mIzQzO1x0ICogLUVOT0VOVCAoZS5nLiB0X3N0YXJ0L3RfbmV4dC90X3N0b3ApLiBrc3ltcy1cdTAwM2VzeW1zIGlzIHNvcnRlZCBieSBuYW1lLFxuJiM0MztcdCAqIHNvIGVxdWFsIG5hbWVzIGFyZSBhZGphY2VudC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBrc3ltcy1cdTAwM2VzeW1fY250OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHN0cmNtcChrc3ltcy1cdTAwM2VzeW1zW2ldLm5hbWUsIGtzeW1zLVx1MDAzZXN5bXNbaSAtIDFdLm5hbWUpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmICghdHNlYXJjaChcdTAwMjZrc3ltcy1cdTAwM2VzeW1zW2ldLm5hbWUsIFx1MDAyNmR1cHMsIGNvbXBhcmUpKSB7XG4mIzQzO1x0XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtmYWlsZWQgdG8gaW5kZXggZHVwbGljYXRlIGtlcm5lbCBzeW1ib2xzXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogLi5hbmQgZmlsdGVyIHRoZW0gdGhyb3VnaCBCVEYgYW5kIGJ0Zl90eXBlX2lzX3RyYWNlYWJsZV9mdW5jLiAqL1xuJiM0MztcdG5yID0gYnRmX190eXBlX2NudChidGYpO1xuJiM0MztcdGZvciAodHlwZV9pZCA9IDE7IHR5cGVfaWQgXHUwMDNjIG5yOyB0eXBlX2lkJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0eXBlO1xuJiM0MztcdFx0Y29uc3QgY2hhciAqc3RyO1xuJiM0MztcbiYjNDM7XHRcdHR5cGUgPSBidGZfX3R5cGVfYnlfaWQoYnRmLCB0eXBlX2lkKTtcbiYjNDM7XHRcdGlmICghdHlwZSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKEJURl9JTkZPX0tJTkQodHlwZS1cdTAwM2VpbmZvKSAhPSBCVEZfS0lORF9GVU5DKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRzdHIgPSBidGZfX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdHlwZS1cdTAwM2VuYW1lX29mZik7XG4mIzQzO1x0XHRpZiAoIXN0cilcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCF0ZmluZChcdTAwMjZzdHIsIFx1MDAyNnJvb3QsIGNvbXBhcmUpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBTa2lwIG5hbWVzIHRoYXQgYXJlIG5vdCB1bmlxdWUgaW4ga2FsbHN5bXMsIHNlZSBhYm92ZS4gKi9cbiYjNDM7XHRcdGlmICh0ZmluZChcdTAwMjZzdHIsIFx1MDAyNmR1cHMsIGNvbXBhcmUpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWJ0Zl90eXBlX2lzX3RyYWNlYWJsZV9mdW5jKGJ0ZiwgdHlwZSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IGxpYmJwZl9lbnN1cmVfbWVtKCh2b2lkICoqKVx1MDAyNmlkcywgXHUwMDI2Y2FwLCBzaXplb2YoKmlkcyksIGNudCAmIzQzOyAxKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSBCVEYgSUQgYXJyYXk6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHN0cmVycm9yKC1lcnIpKTtcbiYjNDM7XHRcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlkc1tjbnQmIzQzOyYjNDM7XSA9IHR5cGVfaWQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvcHRzLmlkcyA9IGlkcztcbiYjNDM7XHRvcHRzLmNudCA9IGNudDtcbiYjNDM7XG4mIzQzO1x0YXR0YWNoX3N0YXJ0X25zID0gZ2V0X3RpbWVfbnMoKTtcbiYjNDM7XHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF90cmFjaW5nX211bHRpKHNrZWwtXHUwMDNlcHJvZ3MuYmVuY2gsIE5VTEwsIFx1MDAyNm9wdHMpO1xuJiM0MztcdGF0dGFjaF9lbmRfbnMgPSBnZXRfdGltZV9ucygpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGxpbmspO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGxpbmsgPSBOVUxMO1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2ZhaWxlZCB0byBhdHRhY2ggdHJhY2luZyBtdWx0aSBsaW5rOiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0c3RyZXJyb3IoLWVycikpO1xuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGV0YWNoX3N0YXJ0X25zID0gZ2V0X3RpbWVfbnMoKTtcbiYjNDM7XHRlcnIgPSBicGZfbGlua19fZGVzdHJveShsaW5rKTtcbiYjNDM7XHRkZXRhY2hfZW5kX25zID0gZ2V0X3RpbWVfbnMoKTtcbiYjNDM7XHRsaW5rID0gTlVMTDtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ZmFpbGVkIHRvIGRldGFjaCB0cmFjaW5nIG11bHRpIGxpbms6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRzdHJlcnJvcigtZXJyKSk7XG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRhdHRhY2hfZGVsdGEgPSAoYXR0YWNoX2VuZF9ucyAtIGF0dGFjaF9zdGFydF9ucykgLyAxMDAwMDAwMDAwLjA7XG4mIzQzO1x0ZGV0YWNoX2RlbHRhID0gKGRldGFjaF9lbmRfbnMgLSBkZXRhY2hfc3RhcnRfbnMpIC8gMTAwMDAwMDAwMC4wO1xuJiM0MztcbiYjNDM7XHRwcmludGYoXCYjMzQ7JXM6IGZvdW5kICV6dSBmdW5jdGlvbnNcXG5cJiMzNDssIGJlbmNoLVx1MDAzZW5hbWUsIGNudCk7XG4mIzQzO1x0cHJpbnRmKFwmIzM0OyVzOiBhdHRhY2hlZCBpbiAlNy4zbGZzXFxuXCYjMzQ7LCBiZW5jaC1cdTAwM2VuYW1lLCBhdHRhY2hfZGVsdGEpO1xuJiM0MztcdHByaW50ZihcJiMzNDslczogZGV0YWNoZWQgaW4gJTcuM2xmc1xcblwmIzM0OywgYmVuY2gtXHUwMDNlbmFtZSwgZGV0YWNoX2RlbHRhKTtcbiYjNDM7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0YnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XG4mIzQzO1x0dHJhY2luZ19tdWx0aV9iZW5jaF9fZGVzdHJveShza2VsKTtcbiYjNDM7XHR0ZGVzdHJveShyb290LCB0ZGVzdHJveV9mcmVlX25vcCk7XG4mIzQzO1x0dGRlc3Ryb3koZHVwcywgdGRlc3Ryb3lfZnJlZV9ub3ApO1xuJiM0MztcdGZyZWVfa2FsbHN5bXNfbG9jYWwoa3N5bXMpO1xuJiM0MztcdGZyZWUoaWRzKTtcbiYjNDM7XHRidGZfX2ZyZWUoYnRmKTtcbiYjNDM7XG4mIzQzO1x0ZXhpdChlcnIgPyAxIDogMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaCA9IHtcbiYjNDM7XHQubmFtZSA9IFwmIzM0O3RyYWNpbmctbXVsdGktYXR0YWNoXCYjMzQ7LFxuJiM0MztcdC5zZXR1cCA9IHRyYWNpbmdfbXVsdGlfYXR0YWNoX3NldHVwLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuY1xuaW5kZXggMGFhOTUzMmEwNWNmZS4uZmQ0ZjI1NmQyZTBhNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19tdWx0aS5jXG5AQCAtMywxNCAmIzQzOzMsMTIgQEBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NicGYvYnRmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzZWFyY2guaFx1MDAzZVxuLSNpbmNsdWRlIFwmIzM0O2JwZi9saWJicGZfaW50ZXJuYWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3RyYWNpbmdfbXVsdGkuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dHJhY2luZ19tdWx0aV9tb2R1bGUuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dHJhY2luZ19tdWx0aV9pbnRlcnNlY3Quc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dHJhY2luZ19tdWx0aV9zZXNzaW9uLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3RyYWNpbmdfbXVsdGlfZmFpbC5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt0cmFjaW5nX211bHRpX3ZlcmlmaWVyLnNrZWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O3RyYWNpbmdfbXVsdGlfYmVuY2guc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dHJhY2luZ19tdWx0aV9yb2xsYmFjay5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt0cmFjZV9oZWxwZXJzLmhcJiMzNDtcbiBcbkBAIC02NjIsMTI5ICYjNDM7NjYwLDYgQEAgc3RhdGljIHZvaWQgdGVzdF9hdHRhY2hfYXBpX2ZhaWxzKHZvaWQpXG4gXHRmcmVlKGlkczIpO1xuIH1cbiBcbi12b2lkIHNlcmlhbF90ZXN0X3RyYWNpbmdfbXVsdGlfYmVuY2hfYXR0YWNoKHZvaWQpXG4te1xuLVx0TElCQlBGX09QVFMoYnBmX3RyYWNpbmdfbXVsdGlfb3B0cywgb3B0cyk7XG4tXHRzdHJ1Y3QgdHJhY2luZ19tdWx0aV9iZW5jaCAqc2tlbCA9IE5VTEw7XG4tXHRsb25nIGF0dGFjaF9zdGFydF9ucywgYXR0YWNoX2VuZF9ucztcbi1cdGxvbmcgZGV0YWNoX3N0YXJ0X25zLCBkZXRhY2hfZW5kX25zO1xuLVx0ZG91YmxlIGF0dGFjaF9kZWx0YSwgZGV0YWNoX2RlbHRhO1xuLVx0c3RydWN0IGJwZl9saW5rICpsaW5rID0gTlVMTDtcbi1cdHNpemVfdCBpLCBjYXAgPSAwLCBjbnQgPSAwO1xuLVx0c3RydWN0IGtzeW1zICprc3ltcyA9IE5VTEw7XG4tXHR2b2lkICpyb290ID0gTlVMTDtcbi1cdHZvaWQgKmR1cHMgPSBOVUxMO1xuLVx0X191MzIgKmlkcyA9IE5VTEw7XG4tXHRfX3UzMiBuciwgdHlwZV9pZDtcbi1cdHN0cnVjdCBidGYgKmJ0Zjtcbi1cdGludCBlcnI7XG4tXG4tI2lmbmRlZiBfX3g4Nl82NF9fXG4tXHR0ZXN0X19za2lwKCk7XG4tXHRyZXR1cm47XG4tI2VuZGlmXG4tXG4tXHRidGYgPSBidGZfX2xvYWRfdm1saW51eF9idGYoKTtcbi1cdGlmICghQVNTRVJUX09LX1BUUihidGYsIFwmIzM0O2J0Zl9fbG9hZF92bWxpbnV4X2J0ZlwmIzM0OykpXG4tXHRcdHJldHVybjtcbi1cbi1cdHNrZWwgPSB0cmFjaW5nX211bHRpX2JlbmNoX19vcGVuX2FuZF9sb2FkKCk7XG4tXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7dHJhY2luZ19tdWx0aV9iZW5jaF9fb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4tXHRcdGdvdG8gY2xlYW51cDtcbi1cbi1cdGlmICghQVNTRVJUX09LKGJwZl9nZXRfa3N5bXMoXHUwMDI2a3N5bXMsIHRydWUpLCBcJiMzNDtnZXRfc3ltc1wmIzM0OykpXG4tXHRcdGdvdG8gY2xlYW51cDtcbi1cbi1cdC8qIEdldCBhbGwgZnRyYWNlICYjMzk7c2FmZSYjMzk7IHN5bWJvbHMuLiAqL1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mga3N5bXMtXHUwMDNlZmlsdGVyZWRfY250OyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAoIXRzZWFyY2goXHUwMDI2a3N5bXMtXHUwMDNlZmlsdGVyZWRfc3ltc1tpXSwgXHUwMDI2cm9vdCwgY29tcGFyZSkpIHtcbi1cdFx0XHRBU1NFUlRfRkFJTChcJiMzNDt0c2VhcmNoIGZhaWxlZFwmIzM0Oyk7XG4tXHRcdFx0Z290byBjbGVhbnVwO1xuLVx0XHR9XG4tXHR9XG4tXG4tXHQvKlxuLVx0ICogQ29sbGVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdW5pcXVlIGluIGthbGxzeW1zLiBUaGUga2VybmVsIHJlc29sdmVzIGFcbi1cdCAqIHRyYWNpbmctbXVsdGkgQlRGIGlkIHRvIGFuIGFkZHJlc3Mgd2l0aCBrYWxsc3ltc19sb29rdXBfbmFtZSgpLCB3aGljaFxuLVx0ICogcmV0dXJucyB0aGUgZmlyc3Qgc3ltYm9sIG9mIHRoYXQgbmFtZS4gRm9yIGEgZHVwbGljYXRlIG5hbWUgdGhhdCBtYXlcbi1cdCAqIGJlIGEgZGlmZmVyZW50IChub24tZnRyYWNlLWFibGUpIGluc3RhbmNlIHRoYW4gdGhlIGZ0cmFjZS1hYmxlIG9uZSBpblxuLVx0ICogYXZhaWxhYmxlX2ZpbHRlcl9mdW5jdGlvbnMsIHNvIGF0dGFjaGluZyB0byBpdCBieSBCVEYgaWQgZmFpbHMgd2l0aFxuLVx0ICogLUVOT0VOVCAoZS5nLiB0X3N0YXJ0L3RfbmV4dC90X3N0b3ApLiBrc3ltcy1cdTAwM2VzeW1zIGlzIHNvcnRlZCBieSBuYW1lLFxuLVx0ICogc28gZXF1YWwgbmFtZXMgYXJlIGFkamFjZW50LlxuLVx0ICovXG4tXHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBrc3ltcy1cdTAwM2VzeW1fY250OyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAoc3RyY21wKGtzeW1zLVx1MDAzZXN5bXNbaV0ubmFtZSwga3N5bXMtXHUwMDNlc3ltc1tpIC0gMV0ubmFtZSkpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGlmICghdHNlYXJjaChcdTAwMjZrc3ltcy1cdTAwM2VzeW1zW2ldLm5hbWUsIFx1MDAyNmR1cHMsIGNvbXBhcmUpKSB7XG4tXHRcdFx0QVNTRVJUX0ZBSUwoXCYjMzQ7dHNlYXJjaCBmYWlsZWRcJiMzNDspO1xuLVx0XHRcdGdvdG8gY2xlYW51cDtcbi1cdFx0fVxuLVx0fVxuLVxuLVx0LyogLi5hbmQgZmlsdGVyIHRoZW0gdGhyb3VnaCBCVEYgYW5kIGJ0Zl90eXBlX2lzX3RyYWNlYWJsZV9mdW5jLiAqL1xuLVx0bnIgPSBidGZfX3R5cGVfY250KGJ0Zik7XG4tXHRmb3IgKHR5cGVfaWQgPSAxOyB0eXBlX2lkIFx1MDAzYyBucjsgdHlwZV9pZCYjNDM7JiM0MzspIHtcbi1cdFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0eXBlO1xuLVx0XHRjb25zdCBjaGFyICpzdHI7XG4tXG4tXHRcdHR5cGUgPSBidGZfX3R5cGVfYnlfaWQoYnRmLCB0eXBlX2lkKTtcbi1cdFx0aWYgKCF0eXBlKVxuLVx0XHRcdGJyZWFrO1xuLVxuLVx0XHRpZiAoQlRGX0lORk9fS0lORCh0eXBlLVx1MDAzZWluZm8pICE9IEJURl9LSU5EX0ZVTkMpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdHN0ciA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQoYnRmLCB0eXBlLVx1MDAzZW5hbWVfb2ZmKTtcbi1cdFx0aWYgKCFzdHIpXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRcdGlmICghdGZpbmQoXHUwMDI2c3RyLCBcdTAwMjZyb290LCBjb21wYXJlKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0LyogU2tpcCBuYW1lcyB0aGF0IGFyZSBub3QgdW5pcXVlIGluIGthbGxzeW1zLCBzZWUgYWJvdmUuICovXG4tXHRcdGlmICh0ZmluZChcdTAwMjZzdHIsIFx1MDAyNmR1cHMsIGNvbXBhcmUpKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRpZiAoIWJ0Zl90eXBlX2lzX3RyYWNlYWJsZV9mdW5jKGJ0ZiwgdHlwZSkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGVyciA9IGxpYmJwZl9lbnN1cmVfbWVtKCh2b2lkICoqKSBcdTAwMjZpZHMsIFx1MDAyNmNhcCwgc2l6ZW9mKCppZHMpLCBjbnQgJiM0MzsgMSk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0Z290byBjbGVhbnVwO1xuLVxuLVx0XHRpZHNbY250JiM0MzsmIzQzO10gPSB0eXBlX2lkO1xuLVx0fVxuLVxuLVx0b3B0cy5pZHMgPSBpZHM7XG4tXHRvcHRzLmNudCA9IGNudDtcbi1cbi1cdGF0dGFjaF9zdGFydF9ucyA9IGdldF90aW1lX25zKCk7XG4tXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF90cmFjaW5nX211bHRpKHNrZWwtXHUwMDNlcHJvZ3MuYmVuY2gsIE5VTEwsIFx1MDAyNm9wdHMpO1xuLVx0YXR0YWNoX2VuZF9ucyA9IGdldF90aW1lX25zKCk7XG4tXG4tXHRpZiAoIUFTU0VSVF9PS19QVFIobGluaywgXCYjMzQ7YnBmX3Byb2dyYW1fX2F0dGFjaF90cmFjaW5nX211bHRpXCYjMzQ7KSlcbi1cdFx0Z290byBjbGVhbnVwO1xuLVxuLVx0ZGV0YWNoX3N0YXJ0X25zID0gZ2V0X3RpbWVfbnMoKTtcbi1cdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuLVx0ZGV0YWNoX2VuZF9ucyA9IGdldF90aW1lX25zKCk7XG4tXG4tXHRhdHRhY2hfZGVsdGEgPSAoYXR0YWNoX2VuZF9ucyAtIGF0dGFjaF9zdGFydF9ucykgLyAxMDAwMDAwMDAwLjA7XG4tXHRkZXRhY2hfZGVsdGEgPSAoZGV0YWNoX2VuZF9ucyAtIGRldGFjaF9zdGFydF9ucykgLyAxMDAwMDAwMDAwLjA7XG4tXG4tXHRwcmludGYoXCYjMzQ7JXM6IGZvdW5kICVsdSBmdW5jdGlvbnNcXG5cJiMzNDssIF9fZnVuY19fLCBjbnQpO1xuLVx0cHJpbnRmKFwmIzM0OyVzOiBhdHRhY2hlZCBpbiAlNy4zbGZzXFxuXCYjMzQ7LCBfX2Z1bmNfXywgYXR0YWNoX2RlbHRhKTtcbi1cdHByaW50ZihcJiMzNDslczogZGV0YWNoZWQgaW4gJTcuM2xmc1xcblwmIzM0OywgX19mdW5jX18sIGRldGFjaF9kZWx0YSk7XG4tXG4tY2xlYW51cDpcbi1cdHRyYWNpbmdfbXVsdGlfYmVuY2hfX2Rlc3Ryb3koc2tlbCk7XG4tXHR0ZGVzdHJveShyb290LCB0ZGVzdHJveV9mcmVlX25vcCk7XG4tXHR0ZGVzdHJveShkdXBzLCB0ZGVzdHJveV9mcmVlX25vcCk7XG4tXHRmcmVlX2thbGxzeW1zX2xvY2FsKGtzeW1zKTtcbi1cdGZyZWUoaWRzKTtcbi1cdGJ0Zl9fZnJlZShidGYpO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCB0cmFjaW5nX211bHRpX3JvbGxiYWNrX3J1bihzdHJ1Y3QgdHJhY2luZ19tdWx0aV9yb2xsYmFjayAqc2tlbClcbiB7XG4gXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE3OjExPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgYW5kIGJlbmNobWFya3MgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NGNhNDVkZTA4YjZmYTU1NTliNWIxYTljZjk0N2VmNjBkMWYzZjY5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgNCAxNzoxMTowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZQppbmRleCA1NWQzOTQ0Mzg3MDVhLi5lNGQ4Y2JkNTFkNzE0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlCkBAIC05NjYsNiAmIzQzOzk2Niw3IEBAICQoT1VUUFVUKS9iZW5jaF9yaW5nYnVmcy5vOiAkKE9VVFBVVCkvcmluZ2J1Zl9iZW5jaC5za2VsLmggXAogJChPVVRQVVQpL2JlbmNoX2Jsb29tX2ZpbHRlcl9tYXAubzogJChPVVRQVVQpL2Jsb29tX2ZpbHRlcl9iZW5jaC5za2VsLmgKICQoT1VUUFVUKS9iZW5jaF9icGZfbG9vcC5vOiAkKE9VVFBVVCkvYnBmX2xvb3BfYmVuY2guc2tlbC5oCiAkKE9VVFBVVCkvYmVuY2hfc3RybmNtcC5vOiAkKE9VVFBVVCkvc3RybmNtcF9iZW5jaC5za2VsLmgKJiM0MzskKE9VVFBVVCkvYmVuY2hfdHJhY2luZ19tdWx0aV9hdHRhY2gubzogJChPVVRQVVQpL3RyYWNpbmdfbXVsdGlfYmVuY2guc2tlbC5oCiAkKE9VVFBVVCkvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUubzogJChPVVRQVVQpL2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlX2JlbmNoLnNrZWwuaAogJChPVVRQVVQpL2JlbmNoX2xvY2FsX3N0b3JhZ2UubzogJChPVVRQVVQpL2xvY2FsX3N0b3JhZ2VfYmVuY2guc2tlbC5oCiAkKE9VVFBVVCkvYmVuY2hfbG9jYWxfc3RvcmFnZV9yY3VfdGFza3NfdHJhY2UubzogJChPVVRQVVQpL2xvY2FsX3N0b3JhZ2VfcmN1X3Rhc2tzX3RyYWNlX2JlbmNoLnNrZWwuaApAQCAtOTkxLDYgJiM0Mzs5OTIsNyBAQCAkKE9VVFBVVCkvYmVuY2g6ICQoT1VUUFVUKS9iZW5jaC5vIFwKIAkJICQoT1VUUFVUKS9iZW5jaF9ibG9vbV9maWx0ZXJfbWFwLm8gXAogCQkgJChPVVRQVVQpL2JlbmNoX2JwZl9sb29wLm8gXAogCQkgJChPVVRQVVQpL2JlbmNoX3N0cm5jbXAubyBcCiYjNDM7CQkgJChPVVRQVVQpL2JlbmNoX3RyYWNpbmdfbXVsdGlfYXR0YWNoLm8gXAogCQkgJChPVVRQVVQpL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLm8gXAogCQkgJChPVVRQVVQpL2JlbmNoX2xvY2FsX3N0b3JhZ2UubyBcCiAJCSAkKE9VVFBVVCkvYmVuY2hfbG9jYWxfc3RvcmFnZV9yY3VfdGFza3NfdHJhY2UubyBcCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jCmluZGV4IDNkOWQyY2Q3NzY0YmQuLjVjZTMxNDU5ODM1Y2UgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jCkBAIC01NDUsNiAmIzQzOzU0NSw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfdHJpZ191cHJvYmVfbXVsdGlfbm9wNTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfdHJpZ191cmV0cHJvYmVfbXVsdGlfbm9wNTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfdHJpZ191c2R0X25vcDsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfdHJpZ191c2R0X25vcDU7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaDsKICNlbmRpZgogCiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX3JiX2xpYmJwZjsKQEAgLTYyOCw2ICYjNDM7NjI5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiZW5jaCAqYmVuY2hzW10gPSB7CiAJJmFtcDtiZW5jaF90cmlnX3VyZXRwcm9iZV9tdWx0aV9ub3A1LAogCSZhbXA7YmVuY2hfdHJpZ191c2R0X25vcCwKIAkmYW1wO2JlbmNoX3RyaWdfdXNkdF9ub3A1LAomIzQzOwkmYW1wO2JlbmNoX3RyYWNpbmdfbXVsdGlfYXR0YWNoLAogI2VuZGlmCiAJLyogcmluZ2J1Zi9wZXJmYnVmIGJlbmNobWFya3MgKi8KIAkmYW1wO2JlbmNoX3JiX2xpYmJwZiwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfdHJhY2luZ19tdWx0aV9hdHRhY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfdHJhY2luZ19tdWx0aV9hdHRhY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi43Mzg5ZDE3NDJkZGNiCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaC5jCkBAIC0wLDAgJiM0MzsxLDE3NyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRQomIzQzOyNpbmNsdWRlICZsdDtzZWFyY2guaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9idGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JlbmNoLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdGluZ19oZWxwZXJzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dHJhY2VfaGVscGVycy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3RyYWNpbmdfbXVsdGlfYmVuY2guc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZi9saWJicGZfaW50ZXJuYWwuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIGludCBjb21wYXJlKGNvbnN0IHZvaWQgKnBwYSwgY29uc3Qgdm9pZCAqcHBiKQomIzQzO3sKJiM0MzsJY29uc3QgY2hhciAqcGEgPSAqKGNvbnN0IGNoYXIgKiopcHBhOwomIzQzOwljb25zdCBjaGFyICpwYiA9ICooY29uc3QgY2hhciAqKilwcGI7CiYjNDM7CiYjNDM7CXJldHVybiBzdHJjbXAocGEsIHBiKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGRlc3Ryb3lfZnJlZV9ub3Aodm9pZCAqcHRyKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdHJhY2luZ19tdWx0aV9hdHRhY2hfc2V0dXAodm9pZCkKJiM0Mzt7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90cmFjaW5nX211bHRpX29wdHMsIG9wdHMpOwomIzQzOwlzdHJ1Y3QgdHJhY2luZ19tdWx0aV9iZW5jaCAqc2tlbCA9IE5VTEw7CiYjNDM7CWxvbmcgYXR0YWNoX3N0YXJ0X25zLCBhdHRhY2hfZW5kX25zOwomIzQzOwlsb25nIGRldGFjaF9zdGFydF9ucywgZGV0YWNoX2VuZF9uczsKJiM0MzsJZG91YmxlIGF0dGFjaF9kZWx0YSwgZGV0YWNoX2RlbHRhOwomIzQzOwlzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBOVUxMOwomIzQzOwlzaXplX3QgaSwgY2FwID0gMCwgY250ID0gMDsKJiM0MzsJc3RydWN0IGtzeW1zICprc3ltcyA9IE5VTEw7CiYjNDM7CXZvaWQgKnJvb3QgPSBOVUxMOwomIzQzOwl2b2lkICpkdXBzID0gTlVMTDsKJiM0MzsJX191MzIgKmlkcyA9IE5VTEw7CiYjNDM7CV9fdTMyIG5yLCB0eXBlX2lkOwomIzQzOwlzdHJ1Y3QgYnRmICpidGY7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXNldHVwX2xpYmJwZigpOwomIzQzOwomIzQzOwlidGYgPSBidGZfX2xvYWRfdm1saW51eF9idGYoKTsKJiM0MzsJZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlidGYgPSBOVUxMOwomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZmFpbGVkIHRvIGxvYWQgdm1saW51eCBCVEY6ICVzXG4mIzM0Oywgc3RyZXJyb3IoLWVycikpOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNrZWwgPSB0cmFjaW5nX211bHRpX2JlbmNoX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWVyciA9IGxpYmJwZl9nZXRfZXJyb3Ioc2tlbCk7CiYjNDM7CWlmICghc2tlbCkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZmFpbGVkIHRvIG9wZW4gYW5kIGxvYWQgc2tlbGV0b246ICVzXG4mIzM0Oywgc3RyZXJyb3IoLWVycikpOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9nZXRfa3N5bXMoJmFtcDtrc3ltcywgdHJ1ZSk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O2ZhaWxlZCB0byBnZXQga2VybmVsIHN5bWJvbHM6ICVzXG4mIzM0Oywgc3RyZXJyb3IoLWVycikpOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEdldCBhbGwgZnRyYWNlICYjMzk7c2FmZSYjMzk7IHN5bWJvbHMuLiAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsga3N5bXMtJmd0O2ZpbHRlcmVkX2NudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICghdHNlYXJjaCgmYW1wO2tzeW1zLSZndDtmaWx0ZXJlZF9zeW1zW2ldLCAmYW1wO3Jvb3QsIGNvbXBhcmUpKSB7CiYjNDM7CQkJZXJyID0gLUVOT01FTTsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtmYWlsZWQgdG8gaW5kZXggZnRyYWNlIHN5bWJvbHNcbiYjMzQ7KTsKJiM0MzsJCQlnb3RvIGNsZWFudXA7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQ29sbGVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdW5pcXVlIGluIGthbGxzeW1zLiBUaGUga2VybmVsIHJlc29sdmVzIGEKJiM0MzsJICogdHJhY2luZy1tdWx0aSBCVEYgaWQgdG8gYW4gYWRkcmVzcyB3aXRoIGthbGxzeW1zX2xvb2t1cF9uYW1lKCksIHdoaWNoCiYjNDM7CSAqIHJldHVybnMgdGhlIGZpcnN0IHN5bWJvbCBvZiB0aGF0IG5hbWUuIEZvciBhIGR1cGxpY2F0ZSBuYW1lIHRoYXQgbWF5CiYjNDM7CSAqIGJlIGEgZGlmZmVyZW50IChub24tZnRyYWNlLWFibGUpIGluc3RhbmNlIHRoYW4gdGhlIGZ0cmFjZS1hYmxlIG9uZSBpbgomIzQzOwkgKiBhdmFpbGFibGVfZmlsdGVyX2Z1bmN0aW9ucywgc28gYXR0YWNoaW5nIHRvIGl0IGJ5IEJURiBpZCBmYWlscyB3aXRoCiYjNDM7CSAqIC1FTk9FTlQgKGUuZy4gdF9zdGFydC90X25leHQvdF9zdG9wKS4ga3N5bXMtJmd0O3N5bXMgaXMgc29ydGVkIGJ5IG5hbWUsCiYjNDM7CSAqIHNvIGVxdWFsIG5hbWVzIGFyZSBhZGphY2VudC4KJiM0MzsJICovCiYjNDM7CWZvciAoaSA9IDE7IGkgJmx0OyBrc3ltcy0mZ3Q7c3ltX2NudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChzdHJjbXAoa3N5bXMtJmd0O3N5bXNbaV0ubmFtZSwga3N5bXMtJmd0O3N5bXNbaSAtIDFdLm5hbWUpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKCF0c2VhcmNoKCZhbXA7a3N5bXMtJmd0O3N5bXNbaV0ubmFtZSwgJmFtcDtkdXBzLCBjb21wYXJlKSkgewomIzQzOwkJCWVyciA9IC1FTk9NRU07CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZmFpbGVkIHRvIGluZGV4IGR1cGxpY2F0ZSBrZXJuZWwgc3ltYm9sc1xuJiMzNDspOwomIzQzOwkJCWdvdG8gY2xlYW51cDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKiAuLmFuZCBmaWx0ZXIgdGhlbSB0aHJvdWdoIEJURiBhbmQgYnRmX3R5cGVfaXNfdHJhY2VhYmxlX2Z1bmMuICovCiYjNDM7CW5yID0gYnRmX190eXBlX2NudChidGYpOwomIzQzOwlmb3IgKHR5cGVfaWQgPSAxOyB0eXBlX2lkICZsdDsgbnI7IHR5cGVfaWQmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnR5cGU7CiYjNDM7CQljb25zdCBjaGFyICpzdHI7CiYjNDM7CiYjNDM7CQl0eXBlID0gYnRmX190eXBlX2J5X2lkKGJ0ZiwgdHlwZV9pZCk7CiYjNDM7CQlpZiAoIXR5cGUpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlpZiAoQlRGX0lORk9fS0lORCh0eXBlLSZndDtpbmZvKSAhPSBCVEZfS0lORF9GVU5DKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJc3RyID0gYnRmX19uYW1lX2J5X29mZnNldChidGYsIHR5cGUtJmd0O25hbWVfb2ZmKTsKJiM0MzsJCWlmICghc3RyKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJaWYgKCF0ZmluZCgmYW1wO3N0ciwgJmFtcDtyb290LCBjb21wYXJlKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qIFNraXAgbmFtZXMgdGhhdCBhcmUgbm90IHVuaXF1ZSBpbiBrYWxsc3ltcywgc2VlIGFib3ZlLiAqLwomIzQzOwkJaWYgKHRmaW5kKCZhbXA7c3RyLCAmYW1wO2R1cHMsIGNvbXBhcmUpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJaWYgKCFidGZfdHlwZV9pc190cmFjZWFibGVfZnVuYyhidGYsIHR5cGUpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZXJyID0gbGliYnBmX2Vuc3VyZV9tZW0oKHZvaWQgKiopJmFtcDtpZHMsICZhbXA7Y2FwLCBzaXplb2YoKmlkcyksIGNudCAmIzQzOyAxKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgQlRGIElEIGFycmF5OiAlc1xuJiMzNDssCiYjNDM7CQkJCXN0cmVycm9yKC1lcnIpKTsKJiM0MzsJCQlnb3RvIGNsZWFudXA7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZHNbY250JiM0MzsmIzQzO10gPSB0eXBlX2lkOwomIzQzOwl9CiYjNDM7CiYjNDM7CW9wdHMuaWRzID0gaWRzOwomIzQzOwlvcHRzLmNudCA9IGNudDsKJiM0MzsKJiM0MzsJYXR0YWNoX3N0YXJ0X25zID0gZ2V0X3RpbWVfbnMoKTsKJiM0MzsJbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfdHJhY2luZ19tdWx0aShza2VsLSZndDtwcm9ncy5iZW5jaCwgTlVMTCwgJmFtcDtvcHRzKTsKJiM0MzsJYXR0YWNoX2VuZF9ucyA9IGdldF90aW1lX25zKCk7CiYjNDM7CiYjNDM7CWVyciA9IGxpYmJwZl9nZXRfZXJyb3IobGluayk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWxpbmsgPSBOVUxMOwomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZmFpbGVkIHRvIGF0dGFjaCB0cmFjaW5nIG11bHRpIGxpbms6ICVzXG4mIzM0OywKJiM0MzsJCQlzdHJlcnJvcigtZXJyKSk7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGV0YWNoX3N0YXJ0X25zID0gZ2V0X3RpbWVfbnMoKTsKJiM0MzsJZXJyID0gYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7CiYjNDM7CWRldGFjaF9lbmRfbnMgPSBnZXRfdGltZV9ucygpOwomIzQzOwlsaW5rID0gTlVMTDsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZmFpbGVkIHRvIGRldGFjaCB0cmFjaW5nIG11bHRpIGxpbms6ICVzXG4mIzM0OywKJiM0MzsJCQlzdHJlcnJvcigtZXJyKSk7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYXR0YWNoX2RlbHRhID0gKGF0dGFjaF9lbmRfbnMgLSBhdHRhY2hfc3RhcnRfbnMpIC8gMTAwMDAwMDAwMC4wOwomIzQzOwlkZXRhY2hfZGVsdGEgPSAoZGV0YWNoX2VuZF9ucyAtIGRldGFjaF9zdGFydF9ucykgLyAxMDAwMDAwMDAwLjA7CiYjNDM7CiYjNDM7CXByaW50ZigmIzM0OyVzOiBmb3VuZCAlenUgZnVuY3Rpb25zXG4mIzM0OywgYmVuY2gtJmd0O25hbWUsIGNudCk7CiYjNDM7CXByaW50ZigmIzM0OyVzOiBhdHRhY2hlZCBpbiAlNy4zbGZzXG4mIzM0OywgYmVuY2gtJmd0O25hbWUsIGF0dGFjaF9kZWx0YSk7CiYjNDM7CXByaW50ZigmIzM0OyVzOiBkZXRhY2hlZCBpbiAlNy4zbGZzXG4mIzM0OywgYmVuY2gtJmd0O25hbWUsIGRldGFjaF9kZWx0YSk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7CiYjNDM7CXRyYWNpbmdfbXVsdGlfYmVuY2hfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7CXRkZXN0cm95KHJvb3QsIHRkZXN0cm95X2ZyZWVfbm9wKTsKJiM0MzsJdGRlc3Ryb3koZHVwcywgdGRlc3Ryb3lfZnJlZV9ub3ApOwomIzQzOwlmcmVlX2thbGxzeW1zX2xvY2FsKGtzeW1zKTsKJiM0MzsJZnJlZShpZHMpOwomIzQzOwlidGZfX2ZyZWUoYnRmKTsKJiM0MzsKJiM0MzsJZXhpdChlcnIgPyAxIDogMCk7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaCA9IHsKJiM0MzsJLm5hbWUgPSAmIzM0O3RyYWNpbmctbXVsdGktYXR0YWNoJiMzNDssCiYjNDM7CS5zZXR1cCA9IHRyYWNpbmdfbXVsdGlfYXR0YWNoX3NldHVwLAomIzQzO307CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX211bHRpLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX211bHRpLmMKaW5kZXggMGFhOTUzMmEwNWNmZS4uZmQ0ZjI1NmQyZTBhNyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19tdWx0aS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuYwpAQCAtMywxNCAmIzQzOzMsMTIgQEAKICNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YnBmL2J0Zi5oJmd0OwogI2luY2x1ZGUgJmx0O3NlYXJjaC5oJmd0OwotI2luY2x1ZGUgJiMzNDticGYvbGliYnBmX2ludGVybmFsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0cmFjaW5nX211bHRpLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3RyYWNpbmdfbXVsdGlfbW9kdWxlLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3RyYWNpbmdfbXVsdGlfaW50ZXJzZWN0LnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3RyYWNpbmdfbXVsdGlfc2Vzc2lvbi5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0cmFjaW5nX211bHRpX2ZhaWwuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dHJhY2luZ19tdWx0aV92ZXJpZmllci5za2VsLmgmIzM0OwotI2luY2x1ZGUgJiMzNDt0cmFjaW5nX211bHRpX2JlbmNoLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3RyYWNpbmdfbXVsdGlfcm9sbGJhY2suc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dHJhY2VfaGVscGVycy5oJiMzNDsKIApAQCAtNjYyLDEyOSAmIzQzOzY2MCw2IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXR0YWNoX2FwaV9mYWlscyh2b2lkKQogCWZyZWUoaWRzMik7CiB9CiAKLXZvaWQgc2VyaWFsX3Rlc3RfdHJhY2luZ19tdWx0aV9iZW5jaF9hdHRhY2godm9pZCkKLXsKLQlMSUJCUEZfT1BUUyhicGZfdHJhY2luZ19tdWx0aV9vcHRzLCBvcHRzKTsKLQlzdHJ1Y3QgdHJhY2luZ19tdWx0aV9iZW5jaCAqc2tlbCA9IE5VTEw7Ci0JbG9uZyBhdHRhY2hfc3RhcnRfbnMsIGF0dGFjaF9lbmRfbnM7Ci0JbG9uZyBkZXRhY2hfc3RhcnRfbnMsIGRldGFjaF9lbmRfbnM7Ci0JZG91YmxlIGF0dGFjaF9kZWx0YSwgZGV0YWNoX2RlbHRhOwotCXN0cnVjdCBicGZfbGluayAqbGluayA9IE5VTEw7Ci0Jc2l6ZV90IGksIGNhcCA9IDAsIGNudCA9IDA7Ci0Jc3RydWN0IGtzeW1zICprc3ltcyA9IE5VTEw7Ci0Jdm9pZCAqcm9vdCA9IE5VTEw7Ci0Jdm9pZCAqZHVwcyA9IE5VTEw7Ci0JX191MzIgKmlkcyA9IE5VTEw7Ci0JX191MzIgbnIsIHR5cGVfaWQ7Ci0Jc3RydWN0IGJ0ZiAqYnRmOwotCWludCBlcnI7Ci0KLSNpZm5kZWYgX194ODZfNjRfXwotCXRlc3RfX3NraXAoKTsKLQlyZXR1cm47Ci0jZW5kaWYKLQotCWJ0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpOwotCWlmICghQVNTRVJUX09LX1BUUihidGYsICYjMzQ7YnRmX19sb2FkX3ZtbGludXhfYnRmJiMzNDspKQotCQlyZXR1cm47Ci0KLQlza2VsID0gdHJhY2luZ19tdWx0aV9iZW5jaF9fb3Blbl9hbmRfbG9hZCgpOwotCWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3RyYWNpbmdfbXVsdGlfYmVuY2hfX29wZW5fYW5kX2xvYWQmIzM0OykpCi0JCWdvdG8gY2xlYW51cDsKLQotCWlmICghQVNTRVJUX09LKGJwZl9nZXRfa3N5bXMoJmFtcDtrc3ltcywgdHJ1ZSksICYjMzQ7Z2V0X3N5bXMmIzM0OykpCi0JCWdvdG8gY2xlYW51cDsKLQotCS8qIEdldCBhbGwgZnRyYWNlICYjMzk7c2FmZSYjMzk7IHN5bWJvbHMuLiAqLwotCWZvciAoaSA9IDA7IGkgJmx0OyBrc3ltcy0mZ3Q7ZmlsdGVyZWRfY250OyBpJiM0MzsmIzQzOykgewotCQlpZiAoIXRzZWFyY2goJmFtcDtrc3ltcy0mZ3Q7ZmlsdGVyZWRfc3ltc1tpXSwgJmFtcDtyb290LCBjb21wYXJlKSkgewotCQkJQVNTRVJUX0ZBSUwoJiMzNDt0c2VhcmNoIGZhaWxlZCYjMzQ7KTsKLQkJCWdvdG8gY2xlYW51cDsKLQkJfQotCX0KLQotCS8qCi0JICogQ29sbGVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdW5pcXVlIGluIGthbGxzeW1zLiBUaGUga2VybmVsIHJlc29sdmVzIGEKLQkgKiB0cmFjaW5nLW11bHRpIEJURiBpZCB0byBhbiBhZGRyZXNzIHdpdGgga2FsbHN5bXNfbG9va3VwX25hbWUoKSwgd2hpY2gKLQkgKiByZXR1cm5zIHRoZSBmaXJzdCBzeW1ib2wgb2YgdGhhdCBuYW1lLiBGb3IgYSBkdXBsaWNhdGUgbmFtZSB0aGF0IG1heQotCSAqIGJlIGEgZGlmZmVyZW50IChub24tZnRyYWNlLWFibGUpIGluc3RhbmNlIHRoYW4gdGhlIGZ0cmFjZS1hYmxlIG9uZSBpbgotCSAqIGF2YWlsYWJsZV9maWx0ZXJfZnVuY3Rpb25zLCBzbyBhdHRhY2hpbmcgdG8gaXQgYnkgQlRGIGlkIGZhaWxzIHdpdGgKLQkgKiAtRU5PRU5UIChlLmcuIHRfc3RhcnQvdF9uZXh0L3Rfc3RvcCkuIGtzeW1zLSZndDtzeW1zIGlzIHNvcnRlZCBieSBuYW1lLAotCSAqIHNvIGVxdWFsIG5hbWVzIGFyZSBhZGphY2VudC4KLQkgKi8KLQlmb3IgKGkgPSAxOyBpICZsdDsga3N5bXMtJmd0O3N5bV9jbnQ7IGkmIzQzOyYjNDM7KSB7Ci0JCWlmIChzdHJjbXAoa3N5bXMtJmd0O3N5bXNbaV0ubmFtZSwga3N5bXMtJmd0O3N5bXNbaSAtIDFdLm5hbWUpKQotCQkJY29udGludWU7Ci0JCWlmICghdHNlYXJjaCgmYW1wO2tzeW1zLSZndDtzeW1zW2ldLm5hbWUsICZhbXA7ZHVwcywgY29tcGFyZSkpIHsKLQkJCUFTU0VSVF9GQUlMKCYjMzQ7dHNlYXJjaCBmYWlsZWQmIzM0Oyk7Ci0JCQlnb3RvIGNsZWFudXA7Ci0JCX0KLQl9Ci0KLQkvKiAuLmFuZCBmaWx0ZXIgdGhlbSB0aHJvdWdoIEJURiBhbmQgYnRmX3R5cGVfaXNfdHJhY2VhYmxlX2Z1bmMuICovCi0JbnIgPSBidGZfX3R5cGVfY250KGJ0Zik7Ci0JZm9yICh0eXBlX2lkID0gMTsgdHlwZV9pZCAmbHQ7IG5yOyB0eXBlX2lkJiM0MzsmIzQzOykgewotCQljb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnR5cGU7Ci0JCWNvbnN0IGNoYXIgKnN0cjsKLQotCQl0eXBlID0gYnRmX190eXBlX2J5X2lkKGJ0ZiwgdHlwZV9pZCk7Ci0JCWlmICghdHlwZSkKLQkJCWJyZWFrOwotCi0JCWlmIChCVEZfSU5GT19LSU5EKHR5cGUtJmd0O2luZm8pICE9IEJURl9LSU5EX0ZVTkMpCi0JCQljb250aW51ZTsKLQotCQlzdHIgPSBidGZfX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdHlwZS0mZ3Q7bmFtZV9vZmYpOwotCQlpZiAoIXN0cikKLQkJCWJyZWFrOwotCi0JCWlmICghdGZpbmQoJmFtcDtzdHIsICZhbXA7cm9vdCwgY29tcGFyZSkpCi0JCQljb250aW51ZTsKLQotCQkvKiBTa2lwIG5hbWVzIHRoYXQgYXJlIG5vdCB1bmlxdWUgaW4ga2FsbHN5bXMsIHNlZSBhYm92ZS4gKi8KLQkJaWYgKHRmaW5kKCZhbXA7c3RyLCAmYW1wO2R1cHMsIGNvbXBhcmUpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCFidGZfdHlwZV9pc190cmFjZWFibGVfZnVuYyhidGYsIHR5cGUpKQotCQkJY29udGludWU7Ci0KLQkJZXJyID0gbGliYnBmX2Vuc3VyZV9tZW0oKHZvaWQgKiopICZhbXA7aWRzLCAmYW1wO2NhcCwgc2l6ZW9mKCppZHMpLCBjbnQgJiM0MzsgMSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGNsZWFudXA7Ci0KLQkJaWRzW2NudCYjNDM7JiM0MztdID0gdHlwZV9pZDsKLQl9Ci0KLQlvcHRzLmlkcyA9IGlkczsKLQlvcHRzLmNudCA9IGNudDsKLQotCWF0dGFjaF9zdGFydF9ucyA9IGdldF90aW1lX25zKCk7Ci0JbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfdHJhY2luZ19tdWx0aShza2VsLSZndDtwcm9ncy5iZW5jaCwgTlVMTCwgJmFtcDtvcHRzKTsKLQlhdHRhY2hfZW5kX25zID0gZ2V0X3RpbWVfbnMoKTsKLQotCWlmICghQVNTRVJUX09LX1BUUihsaW5rLCAmIzM0O2JwZl9wcm9ncmFtX19hdHRhY2hfdHJhY2luZ19tdWx0aSYjMzQ7KSkKLQkJZ290byBjbGVhbnVwOwotCi0JZGV0YWNoX3N0YXJ0X25zID0gZ2V0X3RpbWVfbnMoKTsKLQlicGZfbGlua19fZGVzdHJveShsaW5rKTsKLQlkZXRhY2hfZW5kX25zID0gZ2V0X3RpbWVfbnMoKTsKLQotCWF0dGFjaF9kZWx0YSA9IChhdHRhY2hfZW5kX25zIC0gYXR0YWNoX3N0YXJ0X25zKSAvIDEwMDAwMDAwMDAuMDsKLQlkZXRhY2hfZGVsdGEgPSAoZGV0YWNoX2VuZF9ucyAtIGRldGFjaF9zdGFydF9ucykgLyAxMDAwMDAwMDAwLjA7Ci0KLQlwcmludGYoJiMzNDslczogZm91bmQgJWx1IGZ1bmN0aW9uc1xuJiMzNDssIF9fZnVuY19fLCBjbnQpOwotCXByaW50ZigmIzM0OyVzOiBhdHRhY2hlZCBpbiAlNy4zbGZzXG4mIzM0OywgX19mdW5jX18sIGF0dGFjaF9kZWx0YSk7Ci0JcHJpbnRmKCYjMzQ7JXM6IGRldGFjaGVkIGluICU3LjNsZnNcbiYjMzQ7LCBfX2Z1bmNfXywgZGV0YWNoX2RlbHRhKTsKLQotY2xlYW51cDoKLQl0cmFjaW5nX211bHRpX2JlbmNoX19kZXN0cm95KHNrZWwpOwotCXRkZXN0cm95KHJvb3QsIHRkZXN0cm95X2ZyZWVfbm9wKTsKLQl0ZGVzdHJveShkdXBzLCB0ZGVzdHJveV9mcmVlX25vcCk7Ci0JZnJlZV9rYWxsc3ltc19sb2NhbChrc3ltcyk7Ci0JZnJlZShpZHMpOwotCWJ0Zl9fZnJlZShidGYpOwotfQotCiBzdGF0aWMgdm9pZCB0cmFjaW5nX211bHRpX3JvbGxiYWNrX3J1bihzdHJ1Y3QgdHJhY2luZ19tdWx0aV9yb2xsYmFjayAqc2tlbCkKIHsKIAlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxNzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjQ3CgkJCQkJCQlvdXRwdXQ6IDcxCgkJCQkJCQl0aG91Z2h0czogMjQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJQRiBTZWxmdGVzdC9CZW5jaG1hcmsgUmVmYWN0b3IgLSBObyBGdXp6aW5nIE5lZWRlZCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHNpbXBseSByZWZhY3RvcmluZyBhIGJlbmNobWFyayB0ZXN0IHdpdGhpbiB0aGUgQlBGIHNlbGYtdGVzdHMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgbW92aW5nIGB0cmFjaW5nX211bHRpLmNgIGZyb20gYHByb2dfdGVzdHNgIGludG8gYSBuZXcgYGJlbmNoc2AgZGlyZWN0b3J5IGFuZCB1cGRhdGluZyB0aGUgY29ycmVzcG9uZGluZyBgTWFrZWZpbGVgIGFuZCBgYmVuY2guY2AgZmlsZXMuIFRoaXMgaXMgcHVyZWx5IGEgcmVvcmdhbml6YXRpb24gb2YgdGhlIEJQRiB0ZXN0IHN1aXRlLCByZWFsbHksIGFuZCBub3QgdG91Y2hpbmcgYW55IGNvcmUga2VybmVsIGNvbXBvbmVudHMuIEl0JiMzOTtzIGEgY2xlYW4gc2VwYXJhdGlvbiBiZXR3ZWVuIGZ1bmN0aW9uYWwgdGVzdHMgYW5kIHBlcmZvcm1hbmNlIGJlbmNobWFya3Mgbm93LgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBpbmRlZWQgdGhlIGNhc2UuIEkmIzM5O2xsIHF1aWNrbHkgbG9vayBhdCB0aGUgZGlmZiBmb3I6CgoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZWAKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY2AKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX3RyYWNpbmdfbXVsdGlfYXR0YWNoLmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19tdWx0aS5jYAoKWWVwLCBubyBhY3R1YWwga2VybmVsIGNvZGUgaXMgYmVpbmcgbW9kaWZpZWQgaGVyZS4gVGhpcyBpcyBwdXJlbHkgaW50ZXJuYWwgdG8gdGhlIHRlc3QgYW5kIGJlbmNobWFyayBpbmZyYXN0cnVjdHVyZS4KClRoZXJlZm9yZSwgY29uc2lkZXJpbmcgdGhpcyBpcyBvbmx5IGEgc2VsZi10ZXN0L2JlbmNobWFyayBtb2RpZmljYXRpb24gYW5kIGRvZXNuJiMzOTt0IGltcGFjdCBhbnkgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIEkmIzM5O20gZ29pbmcgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBObyBmdXp6aW5nIG5lZWRlZCBmb3IgdGhpcyBvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTc6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgYW5kIGJlbmNobWFya3MgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyBhbmQgYmVuY2htYXJrcyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE3OjExOjEwLjEzODU1OTc5OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MTgyNDMxMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyBhbmQgYmVuY2htYXJrcyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTc6MTE6MTAuMTM4NTc5OTQ4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM1NTc3MDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODRjYTQ1ZGUwOGI2ZmE1NTU5YjViMWE5Y2Y5NDdlZjYwZDFmM2Y2OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyA0IDE3OjExOjA4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxcbmluZGV4IDU1ZDM5NDQzODcwNWEuLmU0ZDhjYmQ1MWQ3MTQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXFxuQEAgLTk2Niw2ICs5NjYsNyBAQCAkKE9VVFBVVCkvYmVuY2hfcmluZ2J1ZnMubzogJChPVVRQVVQpL3JpbmdidWZfYmVuY2guc2tlbC5oIFxcXFxcXG4gJChPVVRQVVQpL2JlbmNoX2Jsb29tX2ZpbHRlcl9tYXAubzogJChPVVRQVVQpL2Jsb29tX2ZpbHRlcl9iZW5jaC5za2VsLmhcXG4gJChPVVRQVVQpL2JlbmNoX2JwZl9sb29wLm86ICQoT1VUUFVUKS9icGZfbG9vcF9iZW5jaC5za2VsLmhcXG4gJChPVVRQVVQpL2JlbmNoX3N0cm5jbXAubzogJChPVVRQVVQpL3N0cm5jbXBfYmVuY2guc2tlbC5oXFxuKyQoT1VUUFVUKS9iZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaC5vOiAkKE9VVFBVVCkvdHJhY2luZ19tdWx0aV9iZW5jaC5za2VsLmhcXG4gJChPVVRQVVQpL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLm86ICQoT1VUUFVUKS9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZV9iZW5jaC5za2VsLmhcXG4gJChPVVRQVVQpL2JlbmNoX2xvY2FsX3N0b3JhZ2UubzogJChPVVRQVVQpL2xvY2FsX3N0b3JhZ2VfYmVuY2guc2tlbC5oXFxuICQoT1VUUFVUKS9iZW5jaF9sb2NhbF9zdG9yYWdlX3JjdV90YXNrc190cmFjZS5vOiAkKE9VVFBVVCkvbG9jYWxfc3RvcmFnZV9yY3VfdGFza3NfdHJhY2VfYmVuY2guc2tlbC5oXFxuQEAgLTk5MSw2ICs5OTIsNyBAQCAkKE9VVFBVVCkvYmVuY2g6ICQoT1VUUFVUKS9iZW5jaC5vIFxcXFxcXG4gXFx0XFx0ICQoT1VUUFVUKS9iZW5jaF9ibG9vbV9maWx0ZXJfbWFwLm8gXFxcXFxcbiBcXHRcXHQgJChPVVRQVVQpL2JlbmNoX2JwZl9sb29wLm8gXFxcXFxcbiBcXHRcXHQgJChPVVRQVVQpL2JlbmNoX3N0cm5jbXAubyBcXFxcXFxuK1xcdFxcdCAkKE9VVFBVVCkvYmVuY2hfdHJhY2luZ19tdWx0aV9hdHRhY2gubyBcXFxcXFxuIFxcdFxcdCAkKE9VVFBVVCkvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUubyBcXFxcXFxuIFxcdFxcdCAkKE9VVFBVVCkvYmVuY2hfbG9jYWxfc3RvcmFnZS5vIFxcXFxcXG4gXFx0XFx0ICQoT1VUUFVUKS9iZW5jaF9sb2NhbF9zdG9yYWdlX3JjdV90YXNrc190cmFjZS5vIFxcXFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xcbmluZGV4IDNkOWQyY2Q3NzY0YmQuLjVjZTMxNDU5ODM1Y2UgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xcbkBAIC01NDUsNiArNTQ1LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF90cmlnX3Vwcm9iZV9tdWx0aV9ub3A1O1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX3RyaWdfdXJldHByb2JlX211bHRpX25vcDU7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfdHJpZ191c2R0X25vcDtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF90cmlnX3VzZHRfbm9wNTtcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaDtcXG4gI2VuZGlmXFxuIFxcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX3JiX2xpYmJwZjtcXG5AQCAtNjI4LDYgKzYyOSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmVuY2ggKmJlbmNoc1tdID0ge1xcbiBcXHRcXHUwMDI2YmVuY2hfdHJpZ191cmV0cHJvYmVfbXVsdGlfbm9wNSxcXG4gXFx0XFx1MDAyNmJlbmNoX3RyaWdfdXNkdF9ub3AsXFxuIFxcdFxcdTAwMjZiZW5jaF90cmlnX3VzZHRfbm9wNSxcXG4rXFx0XFx1MDAyNmJlbmNoX3RyYWNpbmdfbXVsdGlfYXR0YWNoLFxcbiAjZW5kaWZcXG4gXFx0LyogcmluZ2J1Zi9wZXJmYnVmIGJlbmNobWFya3MgKi9cXG4gXFx0XFx1MDAyNmJlbmNoX3JiX2xpYmJwZixcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi43Mzg5ZDE3NDJkZGNiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfdHJhY2luZ19tdWx0aV9hdHRhY2guY1xcbkBAIC0wLDAgKzEsMTc3IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcXG4rI2luY2x1ZGUgXFx1MDAzY3NlYXJjaC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2J0Zi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYmVuY2guaFxcXCJcXG4rI2luY2x1ZGUgXFxcInRlc3RpbmdfaGVscGVycy5oXFxcIlxcbisjaW5jbHVkZSBcXFwidHJhY2VfaGVscGVycy5oXFxcIlxcbisjaW5jbHVkZSBcXFwidHJhY2luZ19tdWx0aV9iZW5jaC5za2VsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJicGYvbGliYnBmX2ludGVybmFsLmhcXFwiXFxuK1xcbitzdGF0aWMgaW50IGNvbXBhcmUoY29uc3Qgdm9pZCAqcHBhLCBjb25zdCB2b2lkICpwcGIpXFxuK3tcXG4rXFx0Y29uc3QgY2hhciAqcGEgPSAqKGNvbnN0IGNoYXIgKiopcHBhO1xcbitcXHRjb25zdCBjaGFyICpwYiA9ICooY29uc3QgY2hhciAqKilwcGI7XFxuK1xcbitcXHRyZXR1cm4gc3RyY21wKHBhLCBwYik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRkZXN0cm95X2ZyZWVfbm9wKHZvaWQgKnB0cilcXG4re1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0cmFjaW5nX211bHRpX2F0dGFjaF9zZXR1cCh2b2lkKVxcbit7XFxuK1xcdExJQkJQRl9PUFRTKGJwZl90cmFjaW5nX211bHRpX29wdHMsIG9wdHMpO1xcbitcXHRzdHJ1Y3QgdHJhY2luZ19tdWx0aV9iZW5jaCAqc2tlbCA9IE5VTEw7XFxuK1xcdGxvbmcgYXR0YWNoX3N0YXJ0X25zLCBhdHRhY2hfZW5kX25zO1xcbitcXHRsb25nIGRldGFjaF9zdGFydF9ucywgZGV0YWNoX2VuZF9ucztcXG4rXFx0ZG91YmxlIGF0dGFjaF9kZWx0YSwgZGV0YWNoX2RlbHRhO1xcbitcXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBOVUxMO1xcbitcXHRzaXplX3QgaSwgY2FwID0gMCwgY250ID0gMDtcXG4rXFx0c3RydWN0IGtzeW1zICprc3ltcyA9IE5VTEw7XFxuK1xcdHZvaWQgKnJvb3QgPSBOVUxMO1xcbitcXHR2b2lkICpkdXBzID0gTlVMTDtcXG4rXFx0X191MzIgKmlkcyA9IE5VTEw7XFxuK1xcdF9fdTMyIG5yLCB0eXBlX2lkO1xcbitcXHRzdHJ1Y3QgYnRmICpidGY7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRzZXR1cF9saWJicGYoKTtcXG4rXFxuK1xcdGJ0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpO1xcbitcXHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGJ0Zik7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0YnRmID0gTlVMTDtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJmYWlsZWQgdG8gbG9hZCB2bWxpbnV4IEJURjogJXNcXFxcblxcXCIsIHN0cmVycm9yKC1lcnIpKTtcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHR9XFxuK1xcbitcXHRza2VsID0gdHJhY2luZ19tdWx0aV9iZW5jaF9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKHNrZWwpO1xcbitcXHRpZiAoIXNrZWwpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJmYWlsZWQgdG8gb3BlbiBhbmQgbG9hZCBza2VsZXRvbjogJXNcXFxcblxcXCIsIHN0cmVycm9yKC1lcnIpKTtcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBicGZfZ2V0X2tzeW1zKFxcdTAwMjZrc3ltcywgdHJ1ZSk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJmYWlsZWQgdG8gZ2V0IGtlcm5lbCBzeW1ib2xzOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IoLWVycikpO1xcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEdldCBhbGwgZnRyYWNlICdzYWZlJyBzeW1ib2xzLi4gKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGtzeW1zLVxcdTAwM2VmaWx0ZXJlZF9jbnQ7IGkrKykge1xcbitcXHRcXHRpZiAoIXRzZWFyY2goXFx1MDAyNmtzeW1zLVxcdTAwM2VmaWx0ZXJlZF9zeW1zW2ldLCBcXHUwMDI2cm9vdCwgY29tcGFyZSkpIHtcXG4rXFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJmYWlsZWQgdG8gaW5kZXggZnRyYWNlIHN5bWJvbHNcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogQ29sbGVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdW5pcXVlIGluIGthbGxzeW1zLiBUaGUga2VybmVsIHJlc29sdmVzIGFcXG4rXFx0ICogdHJhY2luZy1tdWx0aSBCVEYgaWQgdG8gYW4gYWRkcmVzcyB3aXRoIGthbGxzeW1zX2xvb2t1cF9uYW1lKCksIHdoaWNoXFxuK1xcdCAqIHJldHVybnMgdGhlIGZpcnN0IHN5bWJvbCBvZiB0aGF0IG5hbWUuIEZvciBhIGR1cGxpY2F0ZSBuYW1lIHRoYXQgbWF5XFxuK1xcdCAqIGJlIGEgZGlmZmVyZW50IChub24tZnRyYWNlLWFibGUpIGluc3RhbmNlIHRoYW4gdGhlIGZ0cmFjZS1hYmxlIG9uZSBpblxcbitcXHQgKiBhdmFpbGFibGVfZmlsdGVyX2Z1bmN0aW9ucywgc28gYXR0YWNoaW5nIHRvIGl0IGJ5IEJURiBpZCBmYWlscyB3aXRoXFxuK1xcdCAqIC1FTk9FTlQgKGUuZy4gdF9zdGFydC90X25leHQvdF9zdG9wKS4ga3N5bXMtXFx1MDAzZXN5bXMgaXMgc29ydGVkIGJ5IG5hbWUsXFxuK1xcdCAqIHNvIGVxdWFsIG5hbWVzIGFyZSBhZGphY2VudC5cXG4rXFx0ICovXFxuK1xcdGZvciAoaSA9IDE7IGkgXFx1MDAzYyBrc3ltcy1cXHUwMDNlc3ltX2NudDsgaSsrKSB7XFxuK1xcdFxcdGlmIChzdHJjbXAoa3N5bXMtXFx1MDAzZXN5bXNbaV0ubmFtZSwga3N5bXMtXFx1MDAzZXN5bXNbaSAtIDFdLm5hbWUpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKCF0c2VhcmNoKFxcdTAwMjZrc3ltcy1cXHUwMDNlc3ltc1tpXS5uYW1lLCBcXHUwMDI2ZHVwcywgY29tcGFyZSkpIHtcXG4rXFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJmYWlsZWQgdG8gaW5kZXggZHVwbGljYXRlIGtlcm5lbCBzeW1ib2xzXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdC8qIC4uYW5kIGZpbHRlciB0aGVtIHRocm91Z2ggQlRGIGFuZCBidGZfdHlwZV9pc190cmFjZWFibGVfZnVuYy4gKi9cXG4rXFx0bnIgPSBidGZfX3R5cGVfY250KGJ0Zik7XFxuK1xcdGZvciAodHlwZV9pZCA9IDE7IHR5cGVfaWQgXFx1MDAzYyBucjsgdHlwZV9pZCsrKSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdHlwZTtcXG4rXFx0XFx0Y29uc3QgY2hhciAqc3RyO1xcbitcXG4rXFx0XFx0dHlwZSA9IGJ0Zl9fdHlwZV9ieV9pZChidGYsIHR5cGVfaWQpO1xcbitcXHRcXHRpZiAoIXR5cGUpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0aWYgKEJURl9JTkZPX0tJTkQodHlwZS1cXHUwMDNlaW5mbykgIT0gQlRGX0tJTkRfRlVOQylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRzdHIgPSBidGZfX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdHlwZS1cXHUwMDNlbmFtZV9vZmYpO1xcbitcXHRcXHRpZiAoIXN0cilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRpZiAoIXRmaW5kKFxcdTAwMjZzdHIsIFxcdTAwMjZyb290LCBjb21wYXJlKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHQvKiBTa2lwIG5hbWVzIHRoYXQgYXJlIG5vdCB1bmlxdWUgaW4ga2FsbHN5bXMsIHNlZSBhYm92ZS4gKi9cXG4rXFx0XFx0aWYgKHRmaW5kKFxcdTAwMjZzdHIsIFxcdTAwMjZkdXBzLCBjb21wYXJlKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRpZiAoIWJ0Zl90eXBlX2lzX3RyYWNlYWJsZV9mdW5jKGJ0ZiwgdHlwZSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0ZXJyID0gbGliYnBmX2Vuc3VyZV9tZW0oKHZvaWQgKiopXFx1MDAyNmlkcywgXFx1MDAyNmNhcCwgc2l6ZW9mKCppZHMpLCBjbnQgKyAxKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcImZhaWxlZCB0byBhbGxvY2F0ZSBCVEYgSUQgYXJyYXk6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRzdHJlcnJvcigtZXJyKSk7XFxuK1xcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWRzW2NudCsrXSA9IHR5cGVfaWQ7XFxuK1xcdH1cXG4rXFxuK1xcdG9wdHMuaWRzID0gaWRzO1xcbitcXHRvcHRzLmNudCA9IGNudDtcXG4rXFxuK1xcdGF0dGFjaF9zdGFydF9ucyA9IGdldF90aW1lX25zKCk7XFxuK1xcdGxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX3RyYWNpbmdfbXVsdGkoc2tlbC1cXHUwMDNlcHJvZ3MuYmVuY2gsIE5VTEwsIFxcdTAwMjZvcHRzKTtcXG4rXFx0YXR0YWNoX2VuZF9ucyA9IGdldF90aW1lX25zKCk7XFxuK1xcbitcXHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGxpbmspO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGxpbmsgPSBOVUxMO1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcImZhaWxlZCB0byBhdHRhY2ggdHJhY2luZyBtdWx0aSBsaW5rOiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0c3RyZXJyb3IoLWVycikpO1xcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdH1cXG4rXFxuK1xcdGRldGFjaF9zdGFydF9ucyA9IGdldF90aW1lX25zKCk7XFxuK1xcdGVyciA9IGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xcbitcXHRkZXRhY2hfZW5kX25zID0gZ2V0X3RpbWVfbnMoKTtcXG4rXFx0bGluayA9IE5VTEw7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJmYWlsZWQgdG8gZGV0YWNoIHRyYWNpbmcgbXVsdGkgbGluazogJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHN0cmVycm9yKC1lcnIpKTtcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHR9XFxuK1xcbitcXHRhdHRhY2hfZGVsdGEgPSAoYXR0YWNoX2VuZF9ucyAtIGF0dGFjaF9zdGFydF9ucykgLyAxMDAwMDAwMDAwLjA7XFxuK1xcdGRldGFjaF9kZWx0YSA9IChkZXRhY2hfZW5kX25zIC0gZGV0YWNoX3N0YXJ0X25zKSAvIDEwMDAwMDAwMDAuMDtcXG4rXFxuK1xcdHByaW50ZihcXFwiJXM6IGZvdW5kICV6dSBmdW5jdGlvbnNcXFxcblxcXCIsIGJlbmNoLVxcdTAwM2VuYW1lLCBjbnQpO1xcbitcXHRwcmludGYoXFxcIiVzOiBhdHRhY2hlZCBpbiAlNy4zbGZzXFxcXG5cXFwiLCBiZW5jaC1cXHUwMDNlbmFtZSwgYXR0YWNoX2RlbHRhKTtcXG4rXFx0cHJpbnRmKFxcXCIlczogZGV0YWNoZWQgaW4gJTcuM2xmc1xcXFxuXFxcIiwgYmVuY2gtXFx1MDAzZW5hbWUsIGRldGFjaF9kZWx0YSk7XFxuK1xcbitjbGVhbnVwOlxcbitcXHRicGZfbGlua19fZGVzdHJveShsaW5rKTtcXG4rXFx0dHJhY2luZ19tdWx0aV9iZW5jaF9fZGVzdHJveShza2VsKTtcXG4rXFx0dGRlc3Ryb3kocm9vdCwgdGRlc3Ryb3lfZnJlZV9ub3ApO1xcbitcXHR0ZGVzdHJveShkdXBzLCB0ZGVzdHJveV9mcmVlX25vcCk7XFxuK1xcdGZyZWVfa2FsbHN5bXNfbG9jYWwoa3N5bXMpO1xcbitcXHRmcmVlKGlkcyk7XFxuK1xcdGJ0Zl9fZnJlZShidGYpO1xcbitcXG4rXFx0ZXhpdChlcnIgPyAxIDogMCk7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaCA9IHtcXG4rXFx0Lm5hbWUgPSBcXFwidHJhY2luZy1tdWx0aS1hdHRhY2hcXFwiLFxcbitcXHQuc2V0dXAgPSB0cmFjaW5nX211bHRpX2F0dGFjaF9zZXR1cCxcXG4rfTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19tdWx0aS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19tdWx0aS5jXFxuaW5kZXggMGFhOTUzMmEwNWNmZS4uZmQ0ZjI1NmQyZTBhNyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX211bHRpLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX211bHRpLmNcXG5AQCAtMywxNCArMywxMiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYnBmL2J0Zi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc2VhcmNoLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcXCJicGYvbGliYnBmX2ludGVybmFsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ0cmFjaW5nX211bHRpLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRyYWNpbmdfbXVsdGlfbW9kdWxlLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRyYWNpbmdfbXVsdGlfaW50ZXJzZWN0LnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRyYWNpbmdfbXVsdGlfc2Vzc2lvbi5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ0cmFjaW5nX211bHRpX2ZhaWwuc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidHJhY2luZ19tdWx0aV92ZXJpZmllci5za2VsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJ0cmFjaW5nX211bHRpX2JlbmNoLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRyYWNpbmdfbXVsdGlfcm9sbGJhY2suc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidHJhY2VfaGVscGVycy5oXFxcIlxcbiBcXG5AQCAtNjYyLDEyOSArNjYwLDYgQEAgc3RhdGljIHZvaWQgdGVzdF9hdHRhY2hfYXBpX2ZhaWxzKHZvaWQpXFxuIFxcdGZyZWUoaWRzMik7XFxuIH1cXG4gXFxuLXZvaWQgc2VyaWFsX3Rlc3RfdHJhY2luZ19tdWx0aV9iZW5jaF9hdHRhY2godm9pZClcXG4te1xcbi1cXHRMSUJCUEZfT1BUUyhicGZfdHJhY2luZ19tdWx0aV9vcHRzLCBvcHRzKTtcXG4tXFx0c3RydWN0IHRyYWNpbmdfbXVsdGlfYmVuY2ggKnNrZWwgPSBOVUxMO1xcbi1cXHRsb25nIGF0dGFjaF9zdGFydF9ucywgYXR0YWNoX2VuZF9ucztcXG4tXFx0bG9uZyBkZXRhY2hfc3RhcnRfbnMsIGRldGFjaF9lbmRfbnM7XFxuLVxcdGRvdWJsZSBhdHRhY2hfZGVsdGEsIGRldGFjaF9kZWx0YTtcXG4tXFx0c3RydWN0IGJwZl9saW5rICpsaW5rID0gTlVMTDtcXG4tXFx0c2l6ZV90IGksIGNhcCA9IDAsIGNudCA9IDA7XFxuLVxcdHN0cnVjdCBrc3ltcyAqa3N5bXMgPSBOVUxMO1xcbi1cXHR2b2lkICpyb290ID0gTlVMTDtcXG4tXFx0dm9pZCAqZHVwcyA9IE5VTEw7XFxuLVxcdF9fdTMyICppZHMgPSBOVUxMO1xcbi1cXHRfX3UzMiBuciwgdHlwZV9pZDtcXG4tXFx0c3RydWN0IGJ0ZiAqYnRmO1xcbi1cXHRpbnQgZXJyO1xcbi1cXG4tI2lmbmRlZiBfX3g4Nl82NF9fXFxuLVxcdHRlc3RfX3NraXAoKTtcXG4tXFx0cmV0dXJuO1xcbi0jZW5kaWZcXG4tXFxuLVxcdGJ0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpO1xcbi1cXHRpZiAoIUFTU0VSVF9PS19QVFIoYnRmLCBcXFwiYnRmX19sb2FkX3ZtbGludXhfYnRmXFxcIikpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdHNrZWwgPSB0cmFjaW5nX211bHRpX2JlbmNoX19vcGVuX2FuZF9sb2FkKCk7XFxuLVxcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwidHJhY2luZ19tdWx0aV9iZW5jaF9fb3Blbl9hbmRfbG9hZFxcXCIpKVxcbi1cXHRcXHRnb3RvIGNsZWFudXA7XFxuLVxcbi1cXHRpZiAoIUFTU0VSVF9PSyhicGZfZ2V0X2tzeW1zKFxcdTAwMjZrc3ltcywgdHJ1ZSksIFxcXCJnZXRfc3ltc1xcXCIpKVxcbi1cXHRcXHRnb3RvIGNsZWFudXA7XFxuLVxcbi1cXHQvKiBHZXQgYWxsIGZ0cmFjZSAnc2FmZScgc3ltYm9scy4uICovXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBrc3ltcy1cXHUwMDNlZmlsdGVyZWRfY250OyBpKyspIHtcXG4tXFx0XFx0aWYgKCF0c2VhcmNoKFxcdTAwMjZrc3ltcy1cXHUwMDNlZmlsdGVyZWRfc3ltc1tpXSwgXFx1MDAyNnJvb3QsIGNvbXBhcmUpKSB7XFxuLVxcdFxcdFxcdEFTU0VSVF9GQUlMKFxcXCJ0c2VhcmNoIGZhaWxlZFxcXCIpO1xcbi1cXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbi1cXG4tXFx0LypcXG4tXFx0ICogQ29sbGVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdW5pcXVlIGluIGthbGxzeW1zLiBUaGUga2VybmVsIHJlc29sdmVzIGFcXG4tXFx0ICogdHJhY2luZy1tdWx0aSBCVEYgaWQgdG8gYW4gYWRkcmVzcyB3aXRoIGthbGxzeW1zX2xvb2t1cF9uYW1lKCksIHdoaWNoXFxuLVxcdCAqIHJldHVybnMgdGhlIGZpcnN0IHN5bWJvbCBvZiB0aGF0IG5hbWUuIEZvciBhIGR1cGxpY2F0ZSBuYW1lIHRoYXQgbWF5XFxuLVxcdCAqIGJlIGEgZGlmZmVyZW50IChub24tZnRyYWNlLWFibGUpIGluc3RhbmNlIHRoYW4gdGhlIGZ0cmFjZS1hYmxlIG9uZSBpblxcbi1cXHQgKiBhdmFpbGFibGVfZmlsdGVyX2Z1bmN0aW9ucywgc28gYXR0YWNoaW5nIHRvIGl0IGJ5IEJURiBpZCBmYWlscyB3aXRoXFxuLVxcdCAqIC1FTk9FTlQgKGUuZy4gdF9zdGFydC90X25leHQvdF9zdG9wKS4ga3N5bXMtXFx1MDAzZXN5bXMgaXMgc29ydGVkIGJ5IG5hbWUsXFxuLVxcdCAqIHNvIGVxdWFsIG5hbWVzIGFyZSBhZGphY2VudC5cXG4tXFx0ICovXFxuLVxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYyBrc3ltcy1cXHUwMDNlc3ltX2NudDsgaSsrKSB7XFxuLVxcdFxcdGlmIChzdHJjbXAoa3N5bXMtXFx1MDAzZXN5bXNbaV0ubmFtZSwga3N5bXMtXFx1MDAzZXN5bXNbaSAtIDFdLm5hbWUpKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0aWYgKCF0c2VhcmNoKFxcdTAwMjZrc3ltcy1cXHUwMDNlc3ltc1tpXS5uYW1lLCBcXHUwMDI2ZHVwcywgY29tcGFyZSkpIHtcXG4tXFx0XFx0XFx0QVNTRVJUX0ZBSUwoXFxcInRzZWFyY2ggZmFpbGVkXFxcIik7XFxuLVxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcbi1cXHQvKiAuLmFuZCBmaWx0ZXIgdGhlbSB0aHJvdWdoIEJURiBhbmQgYnRmX3R5cGVfaXNfdHJhY2VhYmxlX2Z1bmMuICovXFxuLVxcdG5yID0gYnRmX190eXBlX2NudChidGYpO1xcbi1cXHRmb3IgKHR5cGVfaWQgPSAxOyB0eXBlX2lkIFxcdTAwM2MgbnI7IHR5cGVfaWQrKykge1xcbi1cXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnR5cGU7XFxuLVxcdFxcdGNvbnN0IGNoYXIgKnN0cjtcXG4tXFxuLVxcdFxcdHR5cGUgPSBidGZfX3R5cGVfYnlfaWQoYnRmLCB0eXBlX2lkKTtcXG4tXFx0XFx0aWYgKCF0eXBlKVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFxuLVxcdFxcdGlmIChCVEZfSU5GT19LSU5EKHR5cGUtXFx1MDAzZWluZm8pICE9IEJURl9LSU5EX0ZVTkMpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0c3RyID0gYnRmX19uYW1lX2J5X29mZnNldChidGYsIHR5cGUtXFx1MDAzZW5hbWVfb2ZmKTtcXG4tXFx0XFx0aWYgKCFzdHIpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXG4tXFx0XFx0aWYgKCF0ZmluZChcXHUwMDI2c3RyLCBcXHUwMDI2cm9vdCwgY29tcGFyZSkpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0LyogU2tpcCBuYW1lcyB0aGF0IGFyZSBub3QgdW5pcXVlIGluIGthbGxzeW1zLCBzZWUgYWJvdmUuICovXFxuLVxcdFxcdGlmICh0ZmluZChcXHUwMDI2c3RyLCBcXHUwMDI2ZHVwcywgY29tcGFyZSkpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0aWYgKCFidGZfdHlwZV9pc190cmFjZWFibGVfZnVuYyhidGYsIHR5cGUpKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdGVyciA9IGxpYmJwZl9lbnN1cmVfbWVtKCh2b2lkICoqKSBcXHUwMDI2aWRzLCBcXHUwMDI2Y2FwLCBzaXplb2YoKmlkcyksIGNudCArIDEpO1xcbi1cXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuLVxcbi1cXHRcXHRpZHNbY250KytdID0gdHlwZV9pZDtcXG4tXFx0fVxcbi1cXG4tXFx0b3B0cy5pZHMgPSBpZHM7XFxuLVxcdG9wdHMuY250ID0gY250O1xcbi1cXG4tXFx0YXR0YWNoX3N0YXJ0X25zID0gZ2V0X3RpbWVfbnMoKTtcXG4tXFx0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfdHJhY2luZ19tdWx0aShza2VsLVxcdTAwM2Vwcm9ncy5iZW5jaCwgTlVMTCwgXFx1MDAyNm9wdHMpO1xcbi1cXHRhdHRhY2hfZW5kX25zID0gZ2V0X3RpbWVfbnMoKTtcXG4tXFxuLVxcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcXFwiYnBmX3Byb2dyYW1fX2F0dGFjaF90cmFjaW5nX211bHRpXFxcIikpXFxuLVxcdFxcdGdvdG8gY2xlYW51cDtcXG4tXFxuLVxcdGRldGFjaF9zdGFydF9ucyA9IGdldF90aW1lX25zKCk7XFxuLVxcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xcbi1cXHRkZXRhY2hfZW5kX25zID0gZ2V0X3RpbWVfbnMoKTtcXG4tXFxuLVxcdGF0dGFjaF9kZWx0YSA9IChhdHRhY2hfZW5kX25zIC0gYXR0YWNoX3N0YXJ0X25zKSAvIDEwMDAwMDAwMDAuMDtcXG4tXFx0ZGV0YWNoX2RlbHRhID0gKGRldGFjaF9lbmRfbnMgLSBkZXRhY2hfc3RhcnRfbnMpIC8gMTAwMDAwMDAwMC4wO1xcbi1cXG4tXFx0cHJpbnRmKFxcXCIlczogZm91bmQgJWx1IGZ1bmN0aW9uc1xcXFxuXFxcIiwgX19mdW5jX18sIGNudCk7XFxuLVxcdHByaW50ZihcXFwiJXM6IGF0dGFjaGVkIGluICU3LjNsZnNcXFxcblxcXCIsIF9fZnVuY19fLCBhdHRhY2hfZGVsdGEpO1xcbi1cXHRwcmludGYoXFxcIiVzOiBkZXRhY2hlZCBpbiAlNy4zbGZzXFxcXG5cXFwiLCBfX2Z1bmNfXywgZGV0YWNoX2RlbHRhKTtcXG4tXFxuLWNsZWFudXA6XFxuLVxcdHRyYWNpbmdfbXVsdGlfYmVuY2hfX2Rlc3Ryb3koc2tlbCk7XFxuLVxcdHRkZXN0cm95KHJvb3QsIHRkZXN0cm95X2ZyZWVfbm9wKTtcXG4tXFx0dGRlc3Ryb3koZHVwcywgdGRlc3Ryb3lfZnJlZV9ub3ApO1xcbi1cXHRmcmVlX2thbGxzeW1zX2xvY2FsKGtzeW1zKTtcXG4tXFx0ZnJlZShpZHMpO1xcbi1cXHRidGZfX2ZyZWUoYnRmKTtcXG4tfVxcbi1cXG4gc3RhdGljIHZvaWQgdHJhY2luZ19tdWx0aV9yb2xsYmFja19ydW4oc3RydWN0IHRyYWNpbmdfbXVsdGlfcm9sbGJhY2sgKnNrZWwpXFxuIHtcXG4gXFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTc6MTE6MTEuNjc1MTUwNDczWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTg4MTY0MjM1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzIGFuZCBiZW5jaG1hcmtzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NGNhNDVkZTA4YjZmYTU1NTliNWIxYTljZjk0N2VmNjBkMWYzZjY5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAxNzoxMTowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuaW5kZXggNTVkMzk0NDM4NzA1YS4uZTRkOGNiZDUxZDcxNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG5AQCAtOTY2LDYgKzk2Niw3IEBAICQoT1VUUFVUKS9iZW5jaF9yaW5nYnVmcy5vOiAkKE9VVFBVVCkvcmluZ2J1Zl9iZW5jaC5za2VsLmggXFxcbiAkKE9VVFBVVCkvYmVuY2hfYmxvb21fZmlsdGVyX21hcC5vOiAkKE9VVFBVVCkvYmxvb21fZmlsdGVyX2JlbmNoLnNrZWwuaFxuICQoT1VUUFVUKS9iZW5jaF9icGZfbG9vcC5vOiAkKE9VVFBVVCkvYnBmX2xvb3BfYmVuY2guc2tlbC5oXG4gJChPVVRQVVQpL2JlbmNoX3N0cm5jbXAubzogJChPVVRQVVQpL3N0cm5jbXBfYmVuY2guc2tlbC5oXG4rJChPVVRQVVQpL2JlbmNoX3RyYWNpbmdfbXVsdGlfYXR0YWNoLm86ICQoT1VUUFVUKS90cmFjaW5nX211bHRpX2JlbmNoLnNrZWwuaFxuICQoT1VUUFVUKS9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5vOiAkKE9VVFBVVCkvYnBmX2hhc2htYXBfZnVsbF91cGRhdGVfYmVuY2guc2tlbC5oXG4gJChPVVRQVVQpL2JlbmNoX2xvY2FsX3N0b3JhZ2UubzogJChPVVRQVVQpL2xvY2FsX3N0b3JhZ2VfYmVuY2guc2tlbC5oXG4gJChPVVRQVVQpL2JlbmNoX2xvY2FsX3N0b3JhZ2VfcmN1X3Rhc2tzX3RyYWNlLm86ICQoT1VUUFVUKS9sb2NhbF9zdG9yYWdlX3JjdV90YXNrc190cmFjZV9iZW5jaC5za2VsLmhcbkBAIC05OTEsNiArOTkyLDcgQEAgJChPVVRQVVQpL2JlbmNoOiAkKE9VVFBVVCkvYmVuY2gubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2Jsb29tX2ZpbHRlcl9tYXAubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2JwZl9sb29wLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9zdHJuY21wLm8gXFxcbitcdFx0ICQoT1VUUFVUKS9iZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaC5vIFxcXG4gXHRcdCAkKE9VVFBVVCkvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2xvY2FsX3N0b3JhZ2UubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2xvY2FsX3N0b3JhZ2VfcmN1X3Rhc2tzX3RyYWNlLm8gXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXG5pbmRleCAzZDlkMmNkNzc2NGJkLi41Y2UzMTQ1OTgzNWNlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXG5AQCAtNTQ1LDYgKzU0NSw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfdHJpZ191cHJvYmVfbXVsdGlfbm9wNTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX3RyaWdfdXJldHByb2JlX211bHRpX25vcDU7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF90cmlnX3VzZHRfbm9wO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfdHJpZ191c2R0X25vcDU7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF90cmFjaW5nX211bHRpX2F0dGFjaDtcbiAjZW5kaWZcbiBcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX3JiX2xpYmJwZjtcbkBAIC02MjgsNiArNjI5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiZW5jaCAqYmVuY2hzW10gPSB7XG4gXHRcdTAwMjZiZW5jaF90cmlnX3VyZXRwcm9iZV9tdWx0aV9ub3A1LFxuIFx0XHUwMDI2YmVuY2hfdHJpZ191c2R0X25vcCxcbiBcdFx1MDAyNmJlbmNoX3RyaWdfdXNkdF9ub3A1LFxuK1x0XHUwMDI2YmVuY2hfdHJhY2luZ19tdWx0aV9hdHRhY2gsXG4gI2VuZGlmXG4gXHQvKiByaW5nYnVmL3BlcmZidWYgYmVuY2htYXJrcyAqL1xuIFx0XHUwMDI2YmVuY2hfcmJfbGliYnBmLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfdHJhY2luZ19tdWx0aV9hdHRhY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfdHJhY2luZ19tdWx0aV9hdHRhY2guY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjczODlkMTc0MmRkY2Jcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfdHJhY2luZ19tdWx0aV9hdHRhY2guY1xuQEAgLTAsMCArMSwxNzcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcbisjaW5jbHVkZSBcdTAwM2NzZWFyY2guaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYmVuY2guaFwiXG4rI2luY2x1ZGUgXCJ0ZXN0aW5nX2hlbHBlcnMuaFwiXG4rI2luY2x1ZGUgXCJ0cmFjZV9oZWxwZXJzLmhcIlxuKyNpbmNsdWRlIFwidHJhY2luZ19tdWx0aV9iZW5jaC5za2VsLmhcIlxuKyNpbmNsdWRlIFwiYnBmL2xpYmJwZl9pbnRlcm5hbC5oXCJcbitcbitzdGF0aWMgaW50IGNvbXBhcmUoY29uc3Qgdm9pZCAqcHBhLCBjb25zdCB2b2lkICpwcGIpXG4re1xuK1x0Y29uc3QgY2hhciAqcGEgPSAqKGNvbnN0IGNoYXIgKiopcHBhO1xuK1x0Y29uc3QgY2hhciAqcGIgPSAqKGNvbnN0IGNoYXIgKiopcHBiO1xuK1xuK1x0cmV0dXJuIHN0cmNtcChwYSwgcGIpO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZGVzdHJveV9mcmVlX25vcCh2b2lkICpwdHIpXG4re1xuK31cbitcbitzdGF0aWMgdm9pZCB0cmFjaW5nX211bHRpX2F0dGFjaF9zZXR1cCh2b2lkKVxuK3tcbitcdExJQkJQRl9PUFRTKGJwZl90cmFjaW5nX211bHRpX29wdHMsIG9wdHMpO1xuK1x0c3RydWN0IHRyYWNpbmdfbXVsdGlfYmVuY2ggKnNrZWwgPSBOVUxMO1xuK1x0bG9uZyBhdHRhY2hfc3RhcnRfbnMsIGF0dGFjaF9lbmRfbnM7XG4rXHRsb25nIGRldGFjaF9zdGFydF9ucywgZGV0YWNoX2VuZF9ucztcbitcdGRvdWJsZSBhdHRhY2hfZGVsdGEsIGRldGFjaF9kZWx0YTtcbitcdHN0cnVjdCBicGZfbGluayAqbGluayA9IE5VTEw7XG4rXHRzaXplX3QgaSwgY2FwID0gMCwgY250ID0gMDtcbitcdHN0cnVjdCBrc3ltcyAqa3N5bXMgPSBOVUxMO1xuK1x0dm9pZCAqcm9vdCA9IE5VTEw7XG4rXHR2b2lkICpkdXBzID0gTlVMTDtcbitcdF9fdTMyICppZHMgPSBOVUxMO1xuK1x0X191MzIgbnIsIHR5cGVfaWQ7XG4rXHRzdHJ1Y3QgYnRmICpidGY7XG4rXHRpbnQgZXJyO1xuK1xuK1x0c2V0dXBfbGliYnBmKCk7XG4rXG4rXHRidGYgPSBidGZfX2xvYWRfdm1saW51eF9idGYoKTtcbitcdGVyciA9IGxpYmJwZl9nZXRfZXJyb3IoYnRmKTtcbitcdGlmIChlcnIpIHtcbitcdFx0YnRmID0gTlVMTDtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiZmFpbGVkIHRvIGxvYWQgdm1saW51eCBCVEY6ICVzXFxuXCIsIHN0cmVycm9yKC1lcnIpKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0c2tlbCA9IHRyYWNpbmdfbXVsdGlfYmVuY2hfX29wZW5fYW5kX2xvYWQoKTtcbitcdGVyciA9IGxpYmJwZl9nZXRfZXJyb3Ioc2tlbCk7XG4rXHRpZiAoIXNrZWwpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiZmFpbGVkIHRvIG9wZW4gYW5kIGxvYWQgc2tlbGV0b246ICVzXFxuXCIsIHN0cmVycm9yKC1lcnIpKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0ZXJyID0gYnBmX2dldF9rc3ltcyhcdTAwMjZrc3ltcywgdHJ1ZSk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcImZhaWxlZCB0byBnZXQga2VybmVsIHN5bWJvbHM6ICVzXFxuXCIsIHN0cmVycm9yKC1lcnIpKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0LyogR2V0IGFsbCBmdHJhY2UgJ3NhZmUnIHN5bWJvbHMuLiAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mga3N5bXMtXHUwMDNlZmlsdGVyZWRfY250OyBpKyspIHtcbitcdFx0aWYgKCF0c2VhcmNoKFx1MDAyNmtzeW1zLVx1MDAzZWZpbHRlcmVkX3N5bXNbaV0sIFx1MDAyNnJvb3QsIGNvbXBhcmUpKSB7XG4rXHRcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJmYWlsZWQgdG8gaW5kZXggZnRyYWNlIHN5bWJvbHNcXG5cIik7XG4rXHRcdFx0Z290byBjbGVhbnVwO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogQ29sbGVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdW5pcXVlIGluIGthbGxzeW1zLiBUaGUga2VybmVsIHJlc29sdmVzIGFcbitcdCAqIHRyYWNpbmctbXVsdGkgQlRGIGlkIHRvIGFuIGFkZHJlc3Mgd2l0aCBrYWxsc3ltc19sb29rdXBfbmFtZSgpLCB3aGljaFxuK1x0ICogcmV0dXJucyB0aGUgZmlyc3Qgc3ltYm9sIG9mIHRoYXQgbmFtZS4gRm9yIGEgZHVwbGljYXRlIG5hbWUgdGhhdCBtYXlcbitcdCAqIGJlIGEgZGlmZmVyZW50IChub24tZnRyYWNlLWFibGUpIGluc3RhbmNlIHRoYW4gdGhlIGZ0cmFjZS1hYmxlIG9uZSBpblxuK1x0ICogYXZhaWxhYmxlX2ZpbHRlcl9mdW5jdGlvbnMsIHNvIGF0dGFjaGluZyB0byBpdCBieSBCVEYgaWQgZmFpbHMgd2l0aFxuK1x0ICogLUVOT0VOVCAoZS5nLiB0X3N0YXJ0L3RfbmV4dC90X3N0b3ApLiBrc3ltcy1cdTAwM2VzeW1zIGlzIHNvcnRlZCBieSBuYW1lLFxuK1x0ICogc28gZXF1YWwgbmFtZXMgYXJlIGFkamFjZW50LlxuK1x0ICovXG4rXHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBrc3ltcy1cdTAwM2VzeW1fY250OyBpKyspIHtcbitcdFx0aWYgKHN0cmNtcChrc3ltcy1cdTAwM2VzeW1zW2ldLm5hbWUsIGtzeW1zLVx1MDAzZXN5bXNbaSAtIDFdLm5hbWUpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoIXRzZWFyY2goXHUwMDI2a3N5bXMtXHUwMDNlc3ltc1tpXS5uYW1lLCBcdTAwMjZkdXBzLCBjb21wYXJlKSkge1xuK1x0XHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiZmFpbGVkIHRvIGluZGV4IGR1cGxpY2F0ZSBrZXJuZWwgc3ltYm9sc1xcblwiKTtcbitcdFx0XHRnb3RvIGNsZWFudXA7XG4rXHRcdH1cbitcdH1cbitcbitcdC8qIC4uYW5kIGZpbHRlciB0aGVtIHRocm91Z2ggQlRGIGFuZCBidGZfdHlwZV9pc190cmFjZWFibGVfZnVuYy4gKi9cbitcdG5yID0gYnRmX190eXBlX2NudChidGYpO1xuK1x0Zm9yICh0eXBlX2lkID0gMTsgdHlwZV9pZCBcdTAwM2MgbnI7IHR5cGVfaWQrKykge1xuK1x0XHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnR5cGU7XG4rXHRcdGNvbnN0IGNoYXIgKnN0cjtcbitcbitcdFx0dHlwZSA9IGJ0Zl9fdHlwZV9ieV9pZChidGYsIHR5cGVfaWQpO1xuK1x0XHRpZiAoIXR5cGUpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdGlmIChCVEZfSU5GT19LSU5EKHR5cGUtXHUwMDNlaW5mbykgIT0gQlRGX0tJTkRfRlVOQylcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c3RyID0gYnRmX19uYW1lX2J5X29mZnNldChidGYsIHR5cGUtXHUwMDNlbmFtZV9vZmYpO1xuK1x0XHRpZiAoIXN0cilcbitcdFx0XHRicmVhaztcbitcbitcdFx0aWYgKCF0ZmluZChcdTAwMjZzdHIsIFx1MDAyNnJvb3QsIGNvbXBhcmUpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKiBTa2lwIG5hbWVzIHRoYXQgYXJlIG5vdCB1bmlxdWUgaW4ga2FsbHN5bXMsIHNlZSBhYm92ZS4gKi9cbitcdFx0aWYgKHRmaW5kKFx1MDAyNnN0ciwgXHUwMDI2ZHVwcywgY29tcGFyZSkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGlmICghYnRmX3R5cGVfaXNfdHJhY2VhYmxlX2Z1bmMoYnRmLCB0eXBlKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0ZXJyID0gbGliYnBmX2Vuc3VyZV9tZW0oKHZvaWQgKiopXHUwMDI2aWRzLCBcdTAwMjZjYXAsIHNpemVvZigqaWRzKSwgY250ICsgMSk7XG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJmYWlsZWQgdG8gYWxsb2NhdGUgQlRGIElEIGFycmF5OiAlc1xcblwiLFxuK1x0XHRcdFx0c3RyZXJyb3IoLWVycikpO1xuK1x0XHRcdGdvdG8gY2xlYW51cDtcbitcdFx0fVxuK1xuK1x0XHRpZHNbY250KytdID0gdHlwZV9pZDtcbitcdH1cbitcbitcdG9wdHMuaWRzID0gaWRzO1xuK1x0b3B0cy5jbnQgPSBjbnQ7XG4rXG4rXHRhdHRhY2hfc3RhcnRfbnMgPSBnZXRfdGltZV9ucygpO1xuK1x0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfdHJhY2luZ19tdWx0aShza2VsLVx1MDAzZXByb2dzLmJlbmNoLCBOVUxMLCBcdTAwMjZvcHRzKTtcbitcdGF0dGFjaF9lbmRfbnMgPSBnZXRfdGltZV9ucygpO1xuK1xuK1x0ZXJyID0gbGliYnBmX2dldF9lcnJvcihsaW5rKTtcbitcdGlmIChlcnIpIHtcbitcdFx0bGluayA9IE5VTEw7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcImZhaWxlZCB0byBhdHRhY2ggdHJhY2luZyBtdWx0aSBsaW5rOiAlc1xcblwiLFxuK1x0XHRcdHN0cmVycm9yKC1lcnIpKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0ZGV0YWNoX3N0YXJ0X25zID0gZ2V0X3RpbWVfbnMoKTtcbitcdGVyciA9IGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuK1x0ZGV0YWNoX2VuZF9ucyA9IGdldF90aW1lX25zKCk7XG4rXHRsaW5rID0gTlVMTDtcbitcdGlmIChlcnIpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiZmFpbGVkIHRvIGRldGFjaCB0cmFjaW5nIG11bHRpIGxpbms6ICVzXFxuXCIsXG4rXHRcdFx0c3RyZXJyb3IoLWVycikpO1xuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXG4rXHRhdHRhY2hfZGVsdGEgPSAoYXR0YWNoX2VuZF9ucyAtIGF0dGFjaF9zdGFydF9ucykgLyAxMDAwMDAwMDAwLjA7XG4rXHRkZXRhY2hfZGVsdGEgPSAoZGV0YWNoX2VuZF9ucyAtIGRldGFjaF9zdGFydF9ucykgLyAxMDAwMDAwMDAwLjA7XG4rXG4rXHRwcmludGYoXCIlczogZm91bmQgJXp1IGZ1bmN0aW9uc1xcblwiLCBiZW5jaC1cdTAwM2VuYW1lLCBjbnQpO1xuK1x0cHJpbnRmKFwiJXM6IGF0dGFjaGVkIGluICU3LjNsZnNcXG5cIiwgYmVuY2gtXHUwMDNlbmFtZSwgYXR0YWNoX2RlbHRhKTtcbitcdHByaW50ZihcIiVzOiBkZXRhY2hlZCBpbiAlNy4zbGZzXFxuXCIsIGJlbmNoLVx1MDAzZW5hbWUsIGRldGFjaF9kZWx0YSk7XG4rXG4rY2xlYW51cDpcbitcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuK1x0dHJhY2luZ19tdWx0aV9iZW5jaF9fZGVzdHJveShza2VsKTtcbitcdHRkZXN0cm95KHJvb3QsIHRkZXN0cm95X2ZyZWVfbm9wKTtcbitcdHRkZXN0cm95KGR1cHMsIHRkZXN0cm95X2ZyZWVfbm9wKTtcbitcdGZyZWVfa2FsbHN5bXNfbG9jYWwoa3N5bXMpO1xuK1x0ZnJlZShpZHMpO1xuK1x0YnRmX19mcmVlKGJ0Zik7XG4rXG4rXHRleGl0KGVyciA/IDEgOiAwKTtcbit9XG4rXG4rY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX3RyYWNpbmdfbXVsdGlfYXR0YWNoID0ge1xuK1x0Lm5hbWUgPSBcInRyYWNpbmctbXVsdGktYXR0YWNoXCIsXG4rXHQuc2V0dXAgPSB0cmFjaW5nX211bHRpX2F0dGFjaF9zZXR1cCxcbit9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuY1xuaW5kZXggMGFhOTUzMmEwNWNmZS4uZmQ0ZjI1NmQyZTBhNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19tdWx0aS5jXG5AQCAtMywxNCArMywxMiBAQFxuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3NlYXJjaC5oXHUwMDNlXG4tI2luY2x1ZGUgXCJicGYvbGliYnBmX2ludGVybmFsLmhcIlxuICNpbmNsdWRlIFwidHJhY2luZ19tdWx0aS5za2VsLmhcIlxuICNpbmNsdWRlIFwidHJhY2luZ19tdWx0aV9tb2R1bGUuc2tlbC5oXCJcbiAjaW5jbHVkZSBcInRyYWNpbmdfbXVsdGlfaW50ZXJzZWN0LnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ0cmFjaW5nX211bHRpX3Nlc3Npb24uc2tlbC5oXCJcbiAjaW5jbHVkZSBcInRyYWNpbmdfbXVsdGlfZmFpbC5za2VsLmhcIlxuICNpbmNsdWRlIFwidHJhY2luZ19tdWx0aV92ZXJpZmllci5za2VsLmhcIlxuLSNpbmNsdWRlIFwidHJhY2luZ19tdWx0aV9iZW5jaC5za2VsLmhcIlxuICNpbmNsdWRlIFwidHJhY2luZ19tdWx0aV9yb2xsYmFjay5za2VsLmhcIlxuICNpbmNsdWRlIFwidHJhY2VfaGVscGVycy5oXCJcbiBcbkBAIC02NjIsMTI5ICs2NjAsNiBAQCBzdGF0aWMgdm9pZCB0ZXN0X2F0dGFjaF9hcGlfZmFpbHModm9pZClcbiBcdGZyZWUoaWRzMik7XG4gfVxuIFxuLXZvaWQgc2VyaWFsX3Rlc3RfdHJhY2luZ19tdWx0aV9iZW5jaF9hdHRhY2godm9pZClcbi17XG4tXHRMSUJCUEZfT1BUUyhicGZfdHJhY2luZ19tdWx0aV9vcHRzLCBvcHRzKTtcbi1cdHN0cnVjdCB0cmFjaW5nX211bHRpX2JlbmNoICpza2VsID0gTlVMTDtcbi1cdGxvbmcgYXR0YWNoX3N0YXJ0X25zLCBhdHRhY2hfZW5kX25zO1xuLVx0bG9uZyBkZXRhY2hfc3RhcnRfbnMsIGRldGFjaF9lbmRfbnM7XG4tXHRkb3VibGUgYXR0YWNoX2RlbHRhLCBkZXRhY2hfZGVsdGE7XG4tXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBOVUxMO1xuLVx0c2l6ZV90IGksIGNhcCA9IDAsIGNudCA9IDA7XG4tXHRzdHJ1Y3Qga3N5bXMgKmtzeW1zID0gTlVMTDtcbi1cdHZvaWQgKnJvb3QgPSBOVUxMO1xuLVx0dm9pZCAqZHVwcyA9IE5VTEw7XG4tXHRfX3UzMiAqaWRzID0gTlVMTDtcbi1cdF9fdTMyIG5yLCB0eXBlX2lkO1xuLVx0c3RydWN0IGJ0ZiAqYnRmO1xuLVx0aW50IGVycjtcbi1cbi0jaWZuZGVmIF9feDg2XzY0X19cbi1cdHRlc3RfX3NraXAoKTtcbi1cdHJldHVybjtcbi0jZW5kaWZcbi1cbi1cdGJ0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpO1xuLVx0aWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgXCJidGZfX2xvYWRfdm1saW51eF9idGZcIikpXG4tXHRcdHJldHVybjtcbi1cbi1cdHNrZWwgPSB0cmFjaW5nX211bHRpX2JlbmNoX19vcGVuX2FuZF9sb2FkKCk7XG4tXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJ0cmFjaW5nX211bHRpX2JlbmNoX19vcGVuX2FuZF9sb2FkXCIpKVxuLVx0XHRnb3RvIGNsZWFudXA7XG4tXG4tXHRpZiAoIUFTU0VSVF9PSyhicGZfZ2V0X2tzeW1zKFx1MDAyNmtzeW1zLCB0cnVlKSwgXCJnZXRfc3ltc1wiKSlcbi1cdFx0Z290byBjbGVhbnVwO1xuLVxuLVx0LyogR2V0IGFsbCBmdHJhY2UgJ3NhZmUnIHN5bWJvbHMuLiAqL1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mga3N5bXMtXHUwMDNlZmlsdGVyZWRfY250OyBpKyspIHtcbi1cdFx0aWYgKCF0c2VhcmNoKFx1MDAyNmtzeW1zLVx1MDAzZWZpbHRlcmVkX3N5bXNbaV0sIFx1MDAyNnJvb3QsIGNvbXBhcmUpKSB7XG4tXHRcdFx0QVNTRVJUX0ZBSUwoXCJ0c2VhcmNoIGZhaWxlZFwiKTtcbi1cdFx0XHRnb3RvIGNsZWFudXA7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdC8qXG4tXHQgKiBDb2xsZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB1bmlxdWUgaW4ga2FsbHN5bXMuIFRoZSBrZXJuZWwgcmVzb2x2ZXMgYVxuLVx0ICogdHJhY2luZy1tdWx0aSBCVEYgaWQgdG8gYW4gYWRkcmVzcyB3aXRoIGthbGxzeW1zX2xvb2t1cF9uYW1lKCksIHdoaWNoXG4tXHQgKiByZXR1cm5zIHRoZSBmaXJzdCBzeW1ib2wgb2YgdGhhdCBuYW1lLiBGb3IgYSBkdXBsaWNhdGUgbmFtZSB0aGF0IG1heVxuLVx0ICogYmUgYSBkaWZmZXJlbnQgKG5vbi1mdHJhY2UtYWJsZSkgaW5zdGFuY2UgdGhhbiB0aGUgZnRyYWNlLWFibGUgb25lIGluXG4tXHQgKiBhdmFpbGFibGVfZmlsdGVyX2Z1bmN0aW9ucywgc28gYXR0YWNoaW5nIHRvIGl0IGJ5IEJURiBpZCBmYWlscyB3aXRoXG4tXHQgKiAtRU5PRU5UIChlLmcuIHRfc3RhcnQvdF9uZXh0L3Rfc3RvcCkuIGtzeW1zLVx1MDAzZXN5bXMgaXMgc29ydGVkIGJ5IG5hbWUsXG4tXHQgKiBzbyBlcXVhbCBuYW1lcyBhcmUgYWRqYWNlbnQuXG4tXHQgKi9cbi1cdGZvciAoaSA9IDE7IGkgXHUwMDNjIGtzeW1zLVx1MDAzZXN5bV9jbnQ7IGkrKykge1xuLVx0XHRpZiAoc3RyY21wKGtzeW1zLVx1MDAzZXN5bXNbaV0ubmFtZSwga3N5bXMtXHUwMDNlc3ltc1tpIC0gMV0ubmFtZSkpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGlmICghdHNlYXJjaChcdTAwMjZrc3ltcy1cdTAwM2VzeW1zW2ldLm5hbWUsIFx1MDAyNmR1cHMsIGNvbXBhcmUpKSB7XG4tXHRcdFx0QVNTRVJUX0ZBSUwoXCJ0c2VhcmNoIGZhaWxlZFwiKTtcbi1cdFx0XHRnb3RvIGNsZWFudXA7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdC8qIC4uYW5kIGZpbHRlciB0aGVtIHRocm91Z2ggQlRGIGFuZCBidGZfdHlwZV9pc190cmFjZWFibGVfZnVuYy4gKi9cbi1cdG5yID0gYnRmX190eXBlX2NudChidGYpO1xuLVx0Zm9yICh0eXBlX2lkID0gMTsgdHlwZV9pZCBcdTAwM2MgbnI7IHR5cGVfaWQrKykge1xuLVx0XHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnR5cGU7XG4tXHRcdGNvbnN0IGNoYXIgKnN0cjtcbi1cbi1cdFx0dHlwZSA9IGJ0Zl9fdHlwZV9ieV9pZChidGYsIHR5cGVfaWQpO1xuLVx0XHRpZiAoIXR5cGUpXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRcdGlmIChCVEZfSU5GT19LSU5EKHR5cGUtXHUwMDNlaW5mbykgIT0gQlRGX0tJTkRfRlVOQylcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0c3RyID0gYnRmX19uYW1lX2J5X29mZnNldChidGYsIHR5cGUtXHUwMDNlbmFtZV9vZmYpO1xuLVx0XHRpZiAoIXN0cilcbi1cdFx0XHRicmVhaztcbi1cbi1cdFx0aWYgKCF0ZmluZChcdTAwMjZzdHIsIFx1MDAyNnJvb3QsIGNvbXBhcmUpKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHQvKiBTa2lwIG5hbWVzIHRoYXQgYXJlIG5vdCB1bmlxdWUgaW4ga2FsbHN5bXMsIHNlZSBhYm92ZS4gKi9cbi1cdFx0aWYgKHRmaW5kKFx1MDAyNnN0ciwgXHUwMDI2ZHVwcywgY29tcGFyZSkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGlmICghYnRmX3R5cGVfaXNfdHJhY2VhYmxlX2Z1bmMoYnRmLCB0eXBlKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0ZXJyID0gbGliYnBmX2Vuc3VyZV9tZW0oKHZvaWQgKiopIFx1MDAyNmlkcywgXHUwMDI2Y2FwLCBzaXplb2YoKmlkcyksIGNudCArIDEpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gY2xlYW51cDtcbi1cbi1cdFx0aWRzW2NudCsrXSA9IHR5cGVfaWQ7XG4tXHR9XG4tXG4tXHRvcHRzLmlkcyA9IGlkcztcbi1cdG9wdHMuY250ID0gY250O1xuLVxuLVx0YXR0YWNoX3N0YXJ0X25zID0gZ2V0X3RpbWVfbnMoKTtcbi1cdGxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX3RyYWNpbmdfbXVsdGkoc2tlbC1cdTAwM2Vwcm9ncy5iZW5jaCwgTlVMTCwgXHUwMDI2b3B0cyk7XG4tXHRhdHRhY2hfZW5kX25zID0gZ2V0X3RpbWVfbnMoKTtcbi1cbi1cdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcImJwZl9wcm9ncmFtX19hdHRhY2hfdHJhY2luZ19tdWx0aVwiKSlcbi1cdFx0Z290byBjbGVhbnVwO1xuLVxuLVx0ZGV0YWNoX3N0YXJ0X25zID0gZ2V0X3RpbWVfbnMoKTtcbi1cdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuLVx0ZGV0YWNoX2VuZF9ucyA9IGdldF90aW1lX25zKCk7XG4tXG4tXHRhdHRhY2hfZGVsdGEgPSAoYXR0YWNoX2VuZF9ucyAtIGF0dGFjaF9zdGFydF9ucykgLyAxMDAwMDAwMDAwLjA7XG4tXHRkZXRhY2hfZGVsdGEgPSAoZGV0YWNoX2VuZF9ucyAtIGRldGFjaF9zdGFydF9ucykgLyAxMDAwMDAwMDAwLjA7XG4tXG4tXHRwcmludGYoXCIlczogZm91bmQgJWx1IGZ1bmN0aW9uc1xcblwiLCBfX2Z1bmNfXywgY250KTtcbi1cdHByaW50ZihcIiVzOiBhdHRhY2hlZCBpbiAlNy4zbGZzXFxuXCIsIF9fZnVuY19fLCBhdHRhY2hfZGVsdGEpO1xuLVx0cHJpbnRmKFwiJXM6IGRldGFjaGVkIGluICU3LjNsZnNcXG5cIiwgX19mdW5jX18sIGRldGFjaF9kZWx0YSk7XG4tXG4tY2xlYW51cDpcbi1cdHRyYWNpbmdfbXVsdGlfYmVuY2hfX2Rlc3Ryb3koc2tlbCk7XG4tXHR0ZGVzdHJveShyb290LCB0ZGVzdHJveV9mcmVlX25vcCk7XG4tXHR0ZGVzdHJveShkdXBzLCB0ZGVzdHJveV9mcmVlX25vcCk7XG4tXHRmcmVlX2thbGxzeW1zX2xvY2FsKGtzeW1zKTtcbi1cdGZyZWUoaWRzKTtcbi1cdGJ0Zl9fZnJlZShidGYpO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCB0cmFjaW5nX211bHRpX3JvbGxiYWNrX3J1bihzdHJ1Y3QgdHJhY2luZ19tdWx0aV9yb2xsYmFjayAqc2tlbClcbiB7XG4gXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTc6MTE6MTEuNjc1MTU0MjUzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg4MTU5NDM4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipCUEYgU2VsZnRlc3QvQmVuY2htYXJrIFJlZmFjdG9yIC0gTm8gRnV6emluZyBOZWVkZWQqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHNpbXBseSByZWZhY3RvcmluZyBhIGJlbmNobWFyayB0ZXN0IHdpdGhpbiB0aGUgQlBGIHNlbGYtdGVzdHMuIFNwZWNpZmljYWxseSwgaXQncyBtb3ZpbmcgYHRyYWNpbmdfbXVsdGkuY2AgZnJvbSBgcHJvZ190ZXN0c2AgaW50byBhIG5ldyBgYmVuY2hzYCBkaXJlY3RvcnkgYW5kIHVwZGF0aW5nIHRoZSBjb3JyZXNwb25kaW5nIGBNYWtlZmlsZWAgYW5kIGBiZW5jaC5jYCBmaWxlcy4gVGhpcyBpcyBwdXJlbHkgYSByZW9yZ2FuaXphdGlvbiBvZiB0aGUgQlBGIHRlc3Qgc3VpdGUsIHJlYWxseSwgYW5kIG5vdCB0b3VjaGluZyBhbnkgY29yZSBrZXJuZWwgY29tcG9uZW50cy4gSXQncyBhIGNsZWFuIHNlcGFyYXRpb24gYmV0d2VlbiBmdW5jdGlvbmFsIHRlc3RzIGFuZCBwZXJmb3JtYW5jZSBiZW5jaG1hcmtzIG5vdy5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBpbmRlZWQgdGhlIGNhc2UuIEknbGwgcXVpY2tseSBsb29rIGF0IHRoZSBkaWZmIGZvcjpcblxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX3RyYWNpbmdfbXVsdGlfYXR0YWNoLmNgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuY2BcblxuWWVwLCBubyBhY3R1YWwga2VybmVsIGNvZGUgaXMgYmVpbmcgbW9kaWZpZWQgaGVyZS4gVGhpcyBpcyBwdXJlbHkgaW50ZXJuYWwgdG8gdGhlIHRlc3QgYW5kIGJlbmNobWFyayBpbmZyYXN0cnVjdHVyZS5cblxuVGhlcmVmb3JlLCBjb25zaWRlcmluZyB0aGlzIGlzIG9ubHkgYSBzZWxmLXRlc3QvYmVuY2htYXJrIG1vZGlmaWNhdGlvbiBhbmQgZG9lc24ndCBpbXBhY3QgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCBJJ20gZ29pbmcgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBObyBmdXp6aW5nIG5lZWRlZCBmb3IgdGhpcyBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NDcsIk91dHB1dFRva2VucyI6NzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxNzoxMToxNy41NTY3NTI4MDZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyBhbmQgYmVuY2htYXJrcyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzIGFuZCBiZW5jaG1hcmtzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow82nnt[1] Phase: Running StartedAt: 2026-08-04 17:11:28 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow82nnt[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-04 17:11:28 +0000 UTC FinishedAt: 2026-08-04 17:11:50 +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,}