Name: series-workflowpww96 Phase: Failed StartedAt: 2026-08-21 14:54:30 +0000 UTC FinishedAt: 2026-08-21 14:57:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpww96[0] Phase: Succeeded StartedAt: 2026-08-21 14:54:30 +0000 UTC FinishedAt: 2026-08-21 14:57:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpww96[0].run-triage Phase: Succeeded StartedAt: 2026-08-21 14:54:30 +0000 UTC FinishedAt: 2026-08-21 14:57:15 +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+CgkJCTx0ZD4yMDI2LzA4LzIxIDE0OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBjaGFuZ2VzIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIHRvIGluY2x1ZGUgR0ZQX0tFUk5FTF9BQ0NPVU5UIGFjcm9zcyB2YXJpb3VzIG5ldGZpbHRlciBtb2R1bGVzLiBUaGlzIGlzIGEgbWVjaGFuaWNhbCBjaGFuZ2UgZm9yIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBhbmQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLiBUaGVyZWZvcmUsIGl0IGlzIG5vdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNDo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGZjZjdmOTNhYzFmNTJjYWNlZWM5YWFjMzIwMmVhMzkwODZiY2Y0Y2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxNDo1NjoxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuY1xuaW5kZXggMGJmNTQxOTM2ZjYwMS4uNjRiOGY2Zjk4MjExOSAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmNcbkBAIC0xMzA0LDcgJiM0MzsxMzA0LDcgQEAgaW50IGVidF9yZWdpc3Rlcl90ZW1wbGF0ZShjb25zdCBzdHJ1Y3QgZWJ0X3RhYmxlICp0LCBpbnQgKCp0YWJsZV9pbml0KShzdHJ1Y3QgbmVcbiBcdFx0fVxuIFx0fVxuIFxuLVx0dG1wbCA9IGt6YWxsb2Nfb2JqKCp0bXBsKTtcbiYjNDM7XHR0bXBsID0ga3phbGxvY19vYmooKnRtcGwsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIXRtcGwpIHtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmVidF9tdXRleCk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmNcbmluZGV4IGFjN2ZlYmNlMDc0ZjEuLmUxNTJjZjM1ZDg1OTYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmNcbkBAIC0yMTcsNyAmIzQzOzIxNyw3IEBAIGluaXRfbWFwX2lwKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGJpdG1hcF9pcCAqbWFwLFxuIFx0ICAgIHUzMiBmaXJzdF9pcCwgdTMyIGxhc3RfaXAsXG4gXHQgICAgdTMyIGVsZW1lbnRzLCB1MzIgaG9zdHMsIHU4IG5ldG1hc2spXG4ge1xuLVx0bWFwLVx1MDAzZW1lbWJlcnMgPSBiaXRtYXBfemFsbG9jKGVsZW1lbnRzLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcbiYjNDM7XHRtYXAtXHUwMDNlbWVtYmVycyA9IGJpdG1hcF96YWxsb2MoZWxlbWVudHMsIEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX05PV0FSTik7XG4gXHRpZiAoIW1hcC1cdTAwM2VtZW1iZXJzKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRtYXAtXHUwMDNlZmlyc3RfaXAgPSBmaXJzdF9pcDtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jXG5pbmRleCA1OTIxZmQ5ZDJkY2EwLi5hMTE3OTM1MjIyMGE0IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jXG5AQCAtMzAwLDcgJiM0MzszMDAsNyBAQCBzdGF0aWMgYm9vbFxuIGluaXRfbWFwX2lwbWFjKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGJpdG1hcF9pcG1hYyAqbWFwLFxuIFx0ICAgICAgIHUzMiBmaXJzdF9pcCwgdTMyIGxhc3RfaXAsIHUzMiBlbGVtZW50cylcbiB7XG4tXHRtYXAtXHUwMDNlbWVtYmVycyA9IGJpdG1hcF96YWxsb2MoZWxlbWVudHMsIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xuJiM0MztcdG1hcC1cdTAwM2VtZW1iZXJzID0gYml0bWFwX3phbGxvYyhlbGVtZW50cywgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKTtcbiBcdGlmICghbWFwLVx1MDAzZW1lbWJlcnMpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdG1hcC1cdTAwM2VmaXJzdF9pcCA9IGZpcnN0X2lwO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jXG5pbmRleCBjYTg3NWM5ODI0MjQ1Li4wYTAwMjdjZGIxOTM3IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuY1xuQEAgLTIzMSw3ICYjNDM7MjMxLDcgQEAgc3RhdGljIGJvb2xcbiBpbml0X21hcF9wb3J0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGJpdG1hcF9wb3J0ICptYXAsXG4gXHQgICAgICB1MTYgZmlyc3RfcG9ydCwgdTE2IGxhc3RfcG9ydClcbiB7XG4tXHRtYXAtXHUwMDNlbWVtYmVycyA9IGJpdG1hcF96YWxsb2MobWFwLVx1MDAzZWVsZW1lbnRzLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcbiYjNDM7XHRtYXAtXHUwMDNlbWVtYmVycyA9IGJpdG1hcF96YWxsb2MobWFwLVx1MDAzZWVsZW1lbnRzLCBHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9OT1dBUk4pO1xuIFx0aWYgKCFtYXAtXHUwMDNlbWVtYmVycylcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0bWFwLVx1MDAzZWZpcnN0X3BvcnQgPSBmaXJzdF9wb3J0O1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1xuaW5kZXggMGE4NmExNzBiYTkwNi4uMjhhYzhjYmEzZDY4YyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jXG5AQCAtMTA4NSw3ICYjNDM7MTA4NSw3IEBAIHN0YXRpYyBpbnQgaXBfc2V0X2NyZWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuIFx0LyogRmlyc3QsIGFuZCB3aXRob3V0IGFueSBsb2NrcywgYWxsb2NhdGUgYW5kIGluaXRpYWxpemVcbiBcdCAqIGEgbm9ybWFsIGJhc2Ugc2V0IHN0cnVjdHVyZS5cbiBcdCAqL1xuLVx0c2V0ID0ga3phbGxvY19vYmooKnNldCk7XG4mIzQzO1x0c2V0ID0ga3phbGxvY19vYmooKnNldCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghc2V0KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbkBAIC0xMTQzLDcgJiM0MzsxMTQzLDcgQEAgc3RhdGljIGludCBpcF9zZXRfY3JlYXRlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4gXHRcdFx0LyogV3JhcGFyb3VuZCAqL1xuIFx0XHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdFx0bGlzdCA9IGt2emFsbG9jX29ianMoc3RydWN0IGlwX3NldCAqLCBpKTtcbiYjNDM7XHRcdGxpc3QgPSBrdnphbGxvY19vYmpzKHN0cnVjdCBpcF9zZXQgKiwgaSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdFx0aWYgKCFsaXN0KVxuIFx0XHRcdGdvdG8gY2xlYW51cDtcbiBcdFx0LyogbmZubCBtdXRleCBpcyBoZWxkLCBib3RoIGxpc3RzIGFyZSB2YWxpZCAqL1xuQEAgLTIzOTcsNyAmIzQzOzIzOTcsOCBAQCBpcF9zZXRfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0aWYgKGluc3QtXHUwMDNlaXBfc2V0X21heCBcdTAwM2U9IElQU0VUX0lOVkFMSURfSUQpXG4gXHRcdGluc3QtXHUwMDNlaXBfc2V0X21heCA9IElQU0VUX0lOVkFMSURfSUQgLSAxO1xuIFxuLVx0bGlzdCA9IGt2emFsbG9jX29ianMoc3RydWN0IGlwX3NldCAqLCBpbnN0LVx1MDAzZWlwX3NldF9tYXgpO1xuJiM0MztcdGxpc3QgPSBrdnphbGxvY19vYmpzKHN0cnVjdCBpcF9zZXQgKiwgaW5zdC1cdTAwM2VpcF9zZXRfbWF4LFxuJiM0MztcdFx0XHQgICAgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWxpc3QpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0aW5zdC1cdTAwM2Vpc19kZWxldGVkID0gZmFsc2U7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbmluZGV4IDgwY2E1MjNmMzA0YmIuLjM5ZGVjOTI4NTA1MmEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXG5AQCAtNzY4LDcgJiM0Mzs3NjgsNyBAQCBtdHlwZV9yZXNpemUoc3RydWN0IGlwX3NldCAqc2V0LCBib29sIHJldHJpZWQpXG4gXHRpbnQgcmV0O1xuIFxuICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbi1cdHRtcCA9IGttYWxsb2MoZHNpemUsIEdGUF9LRVJORUwpO1xuJiM0MztcdHRtcCA9IGttYWxsb2MoZHNpemUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIXRtcClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gI2VuZGlmXG5AQCAtMTc1NCw3ICYjNDM7MTc1NCw3IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcbiBcdFx0c2l6ZW9mKHN0cnVjdCBJUFNFVF9UT0tFTihIVFlQRSwgNikpIDpcbiBcdFx0c2l6ZW9mKHN0cnVjdCBJUFNFVF9UT0tFTihIVFlQRSwgNCkpO1xuICNlbmRpZlxuLVx0aCA9IGt6YWxsb2MoaHNpemUsIEdGUF9LRVJORUwpO1xuJiM0MztcdGggPSBremFsbG9jKGhzaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFoKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0xNzc0LDcgJiM0MzsxNzc0LDcgQEAgSVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX3NldCAqc2V0LFxuIFx0XHRnb3RvIGZyZWVfdDtcbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdG5ldHMgPSBremFsbG9jX29iaigqbmV0cyk7XG4mIzQzO1x0XHRuZXRzID0ga3phbGxvY19vYmooKm5ldHMsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRcdGlmICghbmV0cykge1xuIFx0XHRcdHdoaWxlIChpIFx1MDAzZSAwKVxuIFx0XHRcdFx0a2ZyZWUocmN1X2RlcmVmZXJlbmNlX3JhdyhoLVx1MDAzZXJuZXRzWy0taV0pKTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1xuaW5kZXggZjA3MDA4ODc0MmQ2MC4uNzUwZmUzODI2MWMzNyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNcbkBAIC02MDAsNyAmIzQzOzYwMCw3IEBAIGluaXRfbGlzdF9zZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsIHUzMiBzaXplKVxuIHtcbiBcdHN0cnVjdCBsaXN0X3NldCAqbWFwO1xuIFxuLVx0bWFwID0ga3phbGxvY19vYmooKm1hcCk7XG4mIzQzO1x0bWFwID0ga3phbGxvY19vYmooKm1hcCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbWFwKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmNcbmluZGV4IDg1NDg3ZjkyYWY1MDYuLmIwOWMxNzZhNTIxZDEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jXG5AQCAtNjkxLDcgJiM0Mzs2OTEsNyBAQCBzdHJ1Y3QgbmZfY29ubmNvdW50X2RhdGEgKm5mX2Nvbm5jb3VudF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGtleWxlblxuIFx0ICAgIGtleWxlbiA9PSAwKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiBcbi1cdGRhdGEgPSBrdnphbGxvY19vYmooKmRhdGEpO1xuJiM0MztcdGRhdGEgPSBrdnphbGxvY19vYmooKmRhdGEsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWRhdGEpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmNcbmluZGV4IGI0MDg1YWYzYWQxY2UuLmZlNTI1YjMyNGFmNDEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmNcbkBAIC05Myw3ICYjNDM7OTMsNyBAQCBpbnQgbmZfY3RfYWRkX2hlbHBlcihzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IGNoYXIgKm5hbWUsIHU4IGZhbWlseSxcbiBcdGlmICghaGVscGVyKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFoZWxwKSB7XG4gXHRcdG5mX2Nvbm50cmFja19oZWxwZXJfcHV0KGhlbHBlcik7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY1xuaW5kZXggZjRmMmQ4MjE5MmQ1NC4uZDg4YTEwMjMwODYyZSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXG5AQCAtMTAwOSw3ICYjNDM7MTAwOSw3IEBAIHN0YXRpYyBpbnQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0KVxuIFx0QlVJTERfQlVHX09OKEFSUkFZX1NJWkUobmZfY3Rfc3lzY3RsX3RhYmxlKSAhPSBORl9TWVNDVExfQ1RfTEFTVF9TWVNDVEwpO1xuIFxuIFx0dGFibGUgPSBrbWVtZHVwKG5mX2N0X3N5c2N0bF90YWJsZSwgc2l6ZW9mKG5mX2N0X3N5c2N0bF90YWJsZSksXG4tXHRcdFx0R0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRcdEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIXRhYmxlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmNcbmluZGV4IDRlMWVlZjFiYTBmMTUuLjQwYzZmY2UxNGE2M2YgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuY1xuQEAgLTczLDcgJiM0Mzs3Myw3IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBuZl9sd3R1bm5lbF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRpZiAoIW5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSkge1xuIFx0XHR0YWJsZSA9IGttZW1kdXAobmZfbHd0dW5uZWxfc3lzY3RsX3RhYmxlLFxuIFx0XHRcdFx0c2l6ZW9mKG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZSksXG4tXHRcdFx0XHRHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdFx0XHRHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0XHRpZiAoIXRhYmxlKVxuIFx0XHRcdGdvdG8gZXJyX2FsbG9jO1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jXG5pbmRleCBmNGQ4MDY1NGRmZTZhLi5mMWQzNjQ5ZTNmYzYyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9sb2cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9sb2cuY1xuQEAgLTQ5Myw3ICYjNDM7NDkzLDcgQEAgc3RhdGljIGludCBuZXRmaWx0ZXJfbG9nX3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiBcdGlmICghbmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKSB7XG4gXHRcdHRhYmxlID0ga21lbWR1cChuZl9sb2dfc3lzY3RsX3RhYmxlLFxuIFx0XHRcdFx0IHNpemVvZihuZl9sb2dfc3lzY3RsX3RhYmxlKSxcbi1cdFx0XHRcdCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdFx0XHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdFx0aWYgKCF0YWJsZSlcbiBcdFx0XHRnb3RvIGVycl9hbGxvYztcbiBcdH0gZWxzZSB7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXG5pbmRleCA4YWMzMjZlMWViNWJhLi4wOWNjNWI4ZmQ2YWYxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNcbkBAIC0xMjA0LDE0ICYjNDM7MTIwNCwxNSBAQCBpbnQgbmZfbmF0X3JlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLFxuIFx0aWYgKCFuYXRfcHJvdG9fbmV0LVx1MDAzZW5hdF9ob29rX29wcykge1xuIFx0XHRXQVJOX09OKG5hdF9wcm90b19uZXQtXHUwMDNldXNlcnMgIT0gMCk7XG4gXG4tXHRcdG5hdF9vcHMgPSBrbWVtZHVwX2FycmF5KG9yaWdfbmF0X29wcywgb3BzX2NvdW50LCBzaXplb2YoKm9yaWdfbmF0X29wcyksIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0bmF0X29wcyA9IGttZW1kdXBfYXJyYXkob3JpZ19uYXRfb3BzLCBvcHNfY291bnQsIHNpemVvZigqb3JpZ19uYXRfb3BzKSxcbiYjNDM7XHRcdFx0XHRcdEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRcdGlmICghbmF0X29wcykge1xuIFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZuZl9uYXRfcHJvdG9fbXV0ZXgpO1xuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0XHR9XG4gXG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9wc19jb3VudDsgaSYjNDM7JiM0MzspIHtcbi1cdFx0XHRwcml2ID0ga3phbGxvY19vYmooKnByaXYpO1xuJiM0MztcdFx0XHRwcml2ID0ga3phbGxvY19vYmooKnByaXYsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRcdFx0aWYgKHByaXYpIHtcbiBcdFx0XHRcdG5hdF9vcHNbaV0ucHJpdiA9IHByaXY7XG4gXHRcdFx0XHRjb250aW51ZTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfc3lucHJveHlfY29yZS5jXG5pbmRleCBhY2QzNjA1MTU5NzJmLi45ZmM5NTliYTIwMzAwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfc3lucHJveHlfY29yZS5jXG5AQCAtMzM2LDcgJiM0MzszMzYsNyBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgc3lucHJveHlfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0c3RydWN0IG5mX2Nvbm4gKmN0O1xuIFx0aW50IGVyciA9IC1FTk9NRU07XG4gXG4tXHRjdCA9IG5mX2N0X3RtcGxfYWxsb2MobmV0LCBcdTAwMjZuZl9jdF96b25lX2RmbHQsIEdGUF9LRVJORUwpO1xuJiM0MztcdGN0ID0gbmZfY3RfdG1wbF9hbGxvYyhuZXQsIFx1MDAyNm5mX2N0X3pvbmVfZGZsdCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghY3QpXG4gXHRcdGdvdG8gZXJyMTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19hY2N0LmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19hY2N0LmNcbmluZGV4IDhmZjFlMGFkNWNiMGQuLjFhMzY2ZmJkODEzMzIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19hY2N0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2FjY3QuY1xuQEAgLTExMiw3ICYjNDM7MTEyLDcgQEAgc3RhdGljIGludCBuZm5sX2FjY3RfbmV3KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4gXHRcdHNpemUgJiM0Mzs9IHNpemVvZih1NjQpO1xuIFx0fVxuIFxuLVx0bmZhY2N0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5mX2FjY3QpICYjNDM7IHNpemUsIEdGUF9LRVJORUwpO1xuJiM0MztcdG5mYWNjdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuZl9hY2N0KSAmIzQzOyBzaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKG5mYWNjdCA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuY1xuaW5kZXggNWI2YTA5ZjQ2OTAzZi4uYTA5YjJmZGJmOWI0ZSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbkBAIC0zMzUsNyAmIzQzOzMzNSw4IEBAIHN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X2FsbChzdHJ1Y3QgbmxhdHRyICp0YltdLFxuIFx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICpwb2xpY3k7XG4gXHRpbnQgaSwgcmV0ID0gMDtcbiBcbi1cdG5ld19wb2xpY3kgPSBrbWFsbG9jX29ianMoKm5ld19wb2xpY3ksIGhlbHBlci1cdTAwM2VleHBlY3RfY2xhc3NfbWF4ICYjNDM7IDEpO1xuJiM0MztcdG5ld19wb2xpY3kgPSBrbWFsbG9jX29ianMoKm5ld19wb2xpY3ksIGhlbHBlci1cdTAwM2VleHBlY3RfY2xhc3NfbWF4ICYjNDM7IDEsXG4mIzQzO1x0XHRcdFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFuZXdfcG9saWN5KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0dGltZW91dC5jXG5pbmRleCA2NmMyMDE2ZjYwNDlkLi42YjRhZGFhZjYxYWYwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0dGltZW91dC5jXG5AQCAtNzEsNyAmIzQzOzcxLDggQEAgY3RubF90aW1lb3V0X3BhcnNlX3BvbGljeSh2b2lkICp0aW1lb3V0LFxuIFx0c3RydWN0IG5sYXR0ciAqKnRiO1xuIFx0aW50IHJldCA9IDA7XG4gXG4tXHR0YiA9IGt6YWxsb2Nfb2JqcygqdGIsIGw0cHJvdG8tXHUwMDNlY3RubF90aW1lb3V0Lm5sYXR0cl9tYXggJiM0MzsgMSk7XG4mIzQzO1x0dGIgPSBremFsbG9jX29ianMoKnRiLCBsNHByb3RvLVx1MDAzZWN0bmxfdGltZW91dC5ubGF0dHJfbWF4ICYjNDM7IDEsXG4mIzQzO1x0XHRcdCAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcbiBcdGlmICghdGIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTE1MCwxNCAmIzQzOzE1MSwxNSBAQCBzdGF0aWMgaW50IGN0dGltZW91dF9uZXdfdGltZW91dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRnb3RvIGVycl9wcm90b19wdXQ7XG4gXHR9XG4gXG4tXHR0aW1lb3V0ID0ga3phbGxvYyhzaXplb2YoKnRpbWVvdXQpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHR0aW1lb3V0ID0ga3phbGxvYyhzaXplb2YoKnRpbWVvdXQpLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKHRpbWVvdXQgPT0gTlVMTCkge1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIGVycl9wcm90b19wdXQ7XG4gXHR9XG4gXG4gXHR0aW1lb3V0LVx1MDAzZXRpbWVvdXQgPSBremFsbG9jKHNpemVvZigqdGltZW91dC1cdTAwM2V0aW1lb3V0KSAmIzQzO1xuLVx0XHRcdFx0ICAgbDRwcm90by1cdTAwM2VjdG5sX3RpbWVvdXQub2JqX3NpemUsIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0XHRcdCAgIGw0cHJvdG8tXHUwMDNlY3RubF90aW1lb3V0Lm9ial9zaXplLFxuJiM0MztcdFx0XHRcdCAgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIXRpbWVvdXQtXHUwMDNldGltZW91dCkge1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIGVycjtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19vc2YuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX29zZi5jXG5pbmRleCA5MjAwMjA3OWY4ZWFiLi5lNDgzNWIwZjRiYjFhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfb3NmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX29zZi5jXG5AQCAtMzI1LDcgJiM0MzszMjUsNyBAQCBzdGF0aWMgaW50IG5mbmxfb3NmX2FkZF9jYWxsYmFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ICAgICFtZW1jaHIoZi1cdTAwM2V2ZXJzaW9uLCAwLCBNQVhHRU5SRUxFTikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0a2YgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbmZfb3NmX2Zpbmdlcik7XG4mIzQzO1x0a2YgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbmZfb3NmX2ZpbmdlciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICgha2YpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jXG5pbmRleCA5ZGJmMTI3ZGY5YzgxLi44OTc2MDg3NDMzNmMzIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xuQEAgLTM2NSw3ICYjNDM7MzY1LDcgQEAgc3RhdGljIGJvb2wgbmZ0X2N0X3RtcGxfYWxsb2NfcGNwdSh2b2lkKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0dG1wID0gbmZfY3RfdG1wbF9hbGxvYyhcdTAwMjZpbml0X25ldCwgXHUwMDI2em9uZSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHR0bXAgPSBuZl9jdF90bXBsX2FsbG9jKFx1MDAyNmluaXRfbmV0LCBcdTAwMjZ6b25lLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0XHRpZiAoIXRtcCkge1xuIFx0XHRcdG5mdF9jdF90bXBsX3B1dF9wY3B1KCk7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTg0OCw3ICYjNDM7ODQ4LDggQEAgbmZ0X2N0X3RpbWVvdXRfcGFyc2VfcG9saWN5KHZvaWQgKnRpbWVvdXRzLFxuIFx0c3RydWN0IG5sYXR0ciAqKnRiO1xuIFx0aW50IHJldCA9IDA7XG4gXG4tXHR0YiA9IGt6YWxsb2Nfb2JqcygqdGIsIGw0cHJvdG8tXHUwMDNlY3RubF90aW1lb3V0Lm5sYXR0cl9tYXggJiM0MzsgMSk7XG4mIzQzO1x0dGIgPSBremFsbG9jX29ianMoKnRiLCBsNHByb3RvLVx1MDAzZWN0bmxfdGltZW91dC5ubGF0dHJfbWF4ICYjNDM7IDEsXG4mIzQzO1x0XHRcdCAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcbiBcdGlmICghdGIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTkzNCw3ICYjNDM7OTM1LDcgQEAgc3RhdGljIGludCBuZnRfY3RfdGltZW91dF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0fVxuIFxuIFx0dGltZW91dCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuZl9jdF90aW1lb3V0KSAmIzQzO1xuLVx0XHRcdCAgbDRwcm90by1cdTAwM2VjdG5sX3RpbWVvdXQub2JqX3NpemUsIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0XHQgIGw0cHJvdG8tXHUwMDNlY3RubF90aW1lb3V0Lm9ial9zaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKHRpbWVvdXQgPT0gTlVMTCkge1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIGVycl9wcm90b19wdXQ7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jIGIvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jXG5pbmRleCA5NzhiYjBjMDExMDY4Li4zNjE3YmI2NjA5NGQ0IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmNcbkBAIC0yMjk4LDcgJiM0MzsyMjk4LDcgQEAgc3RhdGljIGludCBuZnRfcGlwYXBvX2luaXQoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbiBcdGlmIChmaWVsZF9jb3VudCBcdTAwM2UgTkZUX1BJUEFQT19NQVhfRklFTERTKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdG0gPSBrbWFsbG9jX2ZsZXgoKm0sIGYsIGZpZWxkX2NvdW50KTtcbiYjNDM7XHRtID0ga21hbGxvY19mbGV4KCptLCBmLCBmaWVsZF9jb3VudCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9DVC5jIGIvbmV0L25ldGZpbHRlci94dF9DVC5jXG5pbmRleCBlNzg2NjBkZmRmNGI2Li4yMDViYzZkZDk4MTI1IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9DVC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X0NULmNcbkBAIC05MSw3ICYjNDM7OTEsNyBAQCB4dF9jdF9zZXRfaGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3QgY2hhciAqaGVscGVyX25hbWUsXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFx0fVxuIFxuLVx0aGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRoZWxwID0gbmZfY3RfaGVscGVyX2V4dF9hZGQoY3QsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoaGVscCA9PSBOVUxMKSB7XG4gXHRcdG5mX2Nvbm50cmFja19oZWxwZXJfcHV0KGhlbHBlcik7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTE4Miw3ICYjNDM7MTgyLDcgQEAgc3RhdGljIGludCB4dF9jdF90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcixcbiBcdGlmIChpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBYVF9DVF9aT05FX01BUkspXG4gXHRcdHpvbmUuZmxhZ3MgfD0gTkZfQ1RfRkxBR19NQVJLO1xuIFxuLVx0Y3QgPSBuZl9jdF90bXBsX2FsbG9jKHBhci1cdTAwM2VuZXQsIFx1MDAyNnpvbmUsIEdGUF9LRVJORUwpO1xuJiM0MztcdGN0ID0gbmZfY3RfdG1wbF9hbGxvYyhwYXItXHUwMDNlbmV0LCBcdTAwMjZ6b25lLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFjdCkge1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIGVycjI7XG5AQCAtMTkwLDcgJiM0MzsxOTAsNyBAQCBzdGF0aWMgaW50IHh0X2N0X3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyLFxuIFxuIFx0aWYgKChpbmZvLVx1MDAzZWN0X2V2ZW50cyB8fCBpbmZvLVx1MDAzZWV4cF9ldmVudHMpIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFuZl9jdF9lY2FjaGVfZXh0X2FkZChjdCwgaW5mby1cdTAwM2VjdF9ldmVudHMsIGluZm8tXHUwMDNlZXhwX2V2ZW50cyxcbi1cdFx0XHRcdCAgR0ZQX0tFUk5FTCkpIHtcbiYjNDM7XHRcdFx0XHQgIEdGUF9LRVJORUxfQUNDT1VOVCkpIHtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBlcnIzO1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXG5pbmRleCBiZmNmMmQ0NGU5M2RiLi43OTZiMGQ0NjFjM2QwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY1xuQEAgLTE1MCw3ICYjNDM7MTUwLDcgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbylcbiB7XG4gXHRpbnQgcmV0O1xuIFxuLVx0aW5mby1cdTAwM2V0aW1lciA9IGt6YWxsb2Nfb2JqKCppbmZvLVx1MDAzZXRpbWVyKTtcbiYjNDM7XHRpbmZvLVx1MDAzZXRpbWVyID0ga3phbGxvY19vYmooKmluZm8tXHUwMDNldGltZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWluZm8tXHUwMDNldGltZXIpIHtcbiBcdFx0cmV0ID0gLUVOT01FTTtcbiBcdFx0Z290byBvdXQ7XG5AQCAtMTYxLDcgJiM0MzsxNjEsNyBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jcmVhdGUoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvKVxuIFx0XHRnb3RvIG91dF9mcmVlX3RpbWVyO1xuIFxuIFx0c3lzZnNfYXR0cl9pbml0KFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyKTtcbi1cdGluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUgPSBrc3RyZHVwKGluZm8tXHUwMDNlbGFiZWwsIEdGUF9LRVJORUwpO1xuJiM0MztcdGluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUgPSBrc3RyZHVwKGluZm8tXHUwMDNlbGFiZWwsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUpIHtcbiBcdFx0cmV0ID0gLUVOT01FTTtcbiBcdFx0Z290byBvdXRfZnJlZV90aW1lcjtcbkBAIC0xOTksNyAmIzQzOzE5OSw3IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdGluZm8tXHUwMDNldGltZXIgPSBrbWFsbG9jX29iaigqaW5mby1cdTAwM2V0aW1lcik7XG4mIzQzO1x0aW5mby1cdTAwM2V0aW1lciA9IGttYWxsb2Nfb2JqKCppbmZvLVx1MDAzZXRpbWVyLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFpbmZvLVx1MDAzZXRpbWVyKSB7XG4gXHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdGdvdG8gb3V0O1xuQEAgLTIxMCw3ICYjNDM7MjEwLDcgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlX3YxKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbylcbiBcdFx0Z290byBvdXRfZnJlZV90aW1lcjtcbiBcbiBcdHN5c2ZzX2F0dHJfaW5pdChcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0cik7XG4tXHRpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0ci5uYW1lID0ga3N0cmR1cChpbmZvLVx1MDAzZWxhYmVsLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0ci5uYW1lID0ga3N0cmR1cChpbmZvLVx1MDAzZWxhYmVsLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0ci5uYW1lKSB7XG4gXHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdGdvdG8gb3V0X2ZyZWVfdGltZXI7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9MRUQuYyBiL25ldC9uZXRmaWx0ZXIveHRfTEVELmNcbmluZGV4IGNhYWFmNGQyYzU4NDIuLjNjYmI4ZDYxZDQxNzUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X0xFRC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X0xFRC5jXG5AQCAtMTExLDExICYjNDM7MTExLDEyIEBAIHN0YXRpYyBpbnQgbGVkX3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxuIFx0fVxuIFxuIFx0ZXJyID0gLUVOT01FTTtcbi1cdGxlZGludGVybmFsID0ga3phbGxvY19vYmooc3RydWN0IHh0X2xlZF9pbmZvX2ludGVybmFsKTtcbiYjNDM7XHRsZWRpbnRlcm5hbCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB4dF9sZWRfaW5mb19pbnRlcm5hbCxcbiYjNDM7XHRcdFx0XHQgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWxlZGludGVybmFsKVxuIFx0XHRnb3RvIGV4aXRfbXV0ZXhfb25seTtcbiBcbi1cdGxlZGludGVybmFsLVx1MDAzZXRyaWdnZXJfaWQgPSBrc3RyZHVwKGxlZGluZm8tXHUwMDNlaWQsIEdGUF9LRVJORUwpO1xuJiM0MztcdGxlZGludGVybmFsLVx1MDAzZXRyaWdnZXJfaWQgPSBrc3RyZHVwKGxlZGluZm8tXHUwMDNlaWQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWxlZGludGVybmFsLVx1MDAzZXRyaWdnZXJfaWQpXG4gXHRcdGdvdG8gZXhpdF9pbnRlcm5hbF9hbGxvYztcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X1JBVEVFU1QuYyBiL25ldC9uZXRmaWx0ZXIveHRfUkFURUVTVC5jXG5pbmRleCA5MTI3MGQ0NjdmZmRmLi4yZjZiNTEyYjcxZTgwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9SQVRFRVNULmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfUkFURUVTVC5jXG5AQCAtMTM5LDcgJiM0MzsxMzksNyBAQCBzdGF0aWMgaW50IHh0X3JhdGVlc3RfdGdfY2hlY2tlbnRyeShjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcbiBcdH1cbiBcbiBcdHJldCA9IC1FTk9NRU07XG4tXHRlc3QgPSBremFsbG9jX29iaigqZXN0KTtcbiYjNDM7XHRlc3QgPSBremFsbG9jX29iaigqZXN0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFlc3QpXG4gXHRcdGdvdG8gZXJyMTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jIGIvbmV0L25ldGZpbHRlci94dF9URUUuY1xuaW5kZXggNWQzNGNlYjg5M2VkYS4uNDhiNDEwNGYwODU5OCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfVEVFLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfVEVFLmNcbkBAIC0xMDYsNyAmIzQzOzEwNiw3IEBAIHN0YXRpYyBpbnQgdGVlX3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxuIFx0XHRpZiAoaW5mby1cdTAwM2VvaWZbc2l6ZW9mKGluZm8tXHUwMDNlb2lmKS0xXSAhPSAmIzM5O1xcMCYjMzk7KVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0XHRwcml2ID0ga3phbGxvY19vYmooKnByaXYpO1xuJiM0MztcdFx0cHJpdiA9IGt6YWxsb2Nfb2JqKCpwcml2LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0XHRpZiAocHJpdiA9PSBOVUxMKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jXG5pbmRleCA5YWYwZmE4OTVmNzMwLi5iNDVmMDZiMDZjMjZkIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuY1xuQEAgLTMxOSw3ICYjNDM7MzE5LDcgQEAgc3RhdGljIGludCBodGFibGVfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGhhc2hsaW1pdF9jZmczICpjZmcsXG4gXHRoaW5mby1cdTAwM2Vjb3VudCA9IDA7XG4gXHRoaW5mby1cdTAwM2VmYW1pbHkgPSBmYW1pbHk7XG4gXHRoaW5mby1cdTAwM2VybmRfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbi1cdGhpbmZvLVx1MDAzZW5hbWUgPSBrc3RyZHVwKG5hbWUsIEdGUF9LRVJORUwpO1xuJiM0MztcdGhpbmZvLVx1MDAzZW5hbWUgPSBrc3RyZHVwKG5hbWUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWhpbmZvLVx1MDAzZW5hbWUpIHtcbiBcdFx0a3ZmcmVlKGhpbmZvKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9saW1pdC5jIGIvbmV0L25ldGZpbHRlci94dF9saW1pdC5jXG5pbmRleCA4N2Q3NGRhMTRjMGI3Li5hZDQ4YjY4NzliMTMwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9saW1pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmNcbkBAIC0xMTUsNyAmIzQzOzExNSw3IEBAIHN0YXRpYyBpbnQgbGltaXRfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXHRcdHJldHVybiAtRVJBTkdFO1xuIFx0fVxuIFxuLVx0cHJpdiA9IGttYWxsb2Nfb2JqKCpwcml2KTtcbiYjNDM7XHRwcml2ID0ga21hbGxvY19vYmooKnByaXYsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAocHJpdiA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmNcbmluZGV4IGIwNWM1YzhkYWM3OGIuLmUyMWVjMTUyZDE2YTcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfcXVvdGEuY1xuQEAgLTUwLDcgJiM0Mzs1MCw3IEBAIHN0YXRpYyBpbnQgcXVvdGFfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXHRpZiAocS1cdTAwM2VmbGFncyBcdTAwMjYgflhUX1FVT1RBX01BU0spXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0cS1cdTAwM2VtYXN0ZXIgPSBrbWFsbG9jX29iaigqcS1cdTAwM2VtYXN0ZXIpO1xuJiM0MztcdHEtXHUwMDNlbWFzdGVyID0ga21hbGxvY19vYmooKnEtXHUwMDNlbWFzdGVyLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKHEtXHUwMDNlbWFzdGVyID09IE5VTEwpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jXG5pbmRleCBkMzQ4MzFjZTNhZGZiLi41NWYxZjJkODk5NTJkIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9yZWNlbnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9yZWNlbnQuY1xuQEAgLTM5MSw3ICYjNDM7MzkxLDggQEAgc3RhdGljIGludCByZWNlbnRfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0dCA9IGt2emFsbG9jX2ZsZXgoKnQsIGlwaGFzaCwgaXBfbGlzdF9oYXNoX3NpemUpO1xuJiM0MztcdHQgPSBrdnphbGxvY19mbGV4KCp0LCBpcGhhc2gsIGlwX2xpc3RfaGFzaF9zaXplLFxuJiM0MztcdFx0XHQgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAodCA9PSBOVUxMKSB7XG4gXHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdGdvdG8gb3V0O1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5jXG5pbmRleCAzMzRlMDk3NzFhYmY5Li4xZmZjNTlkOTBiYjBhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9zdGF0aXN0aWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9zdGF0aXN0aWMuY1xuQEAgLTU4LDcgJiM0Mzs1OCw3IEBAIHN0YXRpYyBpbnQgc3RhdGlzdGljX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFx0ICAgIGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IH5YVF9TVEFUSVNUSUNfTUFTSylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpbmZvLVx1MDAzZW1hc3RlciA9IGt6YWxsb2Nfb2JqKCppbmZvLVx1MDAzZW1hc3Rlcik7XG4mIzQzO1x0aW5mby1cdTAwM2VtYXN0ZXIgPSBremFsbG9jX29iaigqaW5mby1cdTAwM2VtYXN0ZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoaW5mby1cdTAwM2VtYXN0ZXIgPT0gTlVMTClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRhdG9taWNfc2V0KFx1MDAyNmluZm8tXHUwMDNlbWFzdGVyLVx1MDAzZWNvdW50LCBpbmZvLVx1MDAzZXUubnRoLmNvdW50KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3N0cmluZy5jIGIvbmV0L25ldGZpbHRlci94dF9zdHJpbmcuY1xuaW5kZXggOGNlMjViYzliMjc3NS4uNTJjMWRlYjAyY2RjNiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfc3RyaW5nLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfc3RyaW5nLmNcbkBAIC01NCw3ICYjNDM7NTQsNyBAQCBzdGF0aWMgaW50IHN0cmluZ19tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcdGlmIChjb25mLVx1MDAzZXUudjEuZmxhZ3MgXHUwMDI2IFhUX1NUUklOR19GTEFHX0lHTk9SRUNBU0UpXG4gXHRcdGZsYWdzIHw9IFRTX0lHTk9SRUNBU0U7XG4gXHR0c19jb25mID0gdGV4dHNlYXJjaF9wcmVwYXJlKGNvbmYtXHUwMDNlYWxnbywgY29uZi1cdTAwM2VwYXR0ZXJuLCBjb25mLVx1MDAzZXBhdGxlbixcbi1cdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCwgZmxhZ3MpO1xuJiM0MztcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTF9BQ0NPVU5ULCBmbGFncyk7XG4gXHRpZiAoSVNfRVJSKHRzX2NvbmYpKVxuIFx0XHRyZXR1cm4gUFRSX0VSUih0c19jb25mKTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNDo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBjaGFuZ2VzIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIHRvIGluY2x1ZGUgR0ZQX0tFUk5FTF9BQ0NPVU5UIGFjcm9zcyB2YXJpb3VzIG5ldGZpbHRlciBtb2R1bGVzLiBUaGlzIGlzIGEgbWVjaGFuaWNhbCBjaGFuZ2UgZm9yIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBhbmQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLiBUaGVyZWZvcmUsIGl0IGlzIG5vdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZjZjdmOTNhYzFmNTJjYWNlZWM5YWFjMzIwMmVhMzkwODZiY2Y0Y2UKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyMSAxNDo1NjoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCmluZGV4IDBiZjU0MTkzNmY2MDEuLjY0YjhmNmY5ODIxMTkgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYwpAQCAtMTMwNCw3ICYjNDM7MTMwNCw3IEBAIGludCBlYnRfcmVnaXN0ZXJfdGVtcGxhdGUoY29uc3Qgc3RydWN0IGVidF90YWJsZSAqdCwgaW50ICgqdGFibGVfaW5pdCkoc3RydWN0IG5lCiAJCX0KIAl9CiAKLQl0bXBsID0ga3phbGxvY19vYmooKnRtcGwpOwomIzQzOwl0bXBsID0ga3phbGxvY19vYmooKnRtcGwsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCF0bXBsKSB7CiAJCW11dGV4X3VubG9jaygmYW1wO2VidF9tdXRleCk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYwppbmRleCBhYzdmZWJjZTA3NGYxLi5lMTUyY2YzNWQ4NTk2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYwpAQCAtMjE3LDcgJiM0MzsyMTcsNyBAQCBpbml0X21hcF9pcChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBiaXRtYXBfaXAgKm1hcCwKIAkgICAgdTMyIGZpcnN0X2lwLCB1MzIgbGFzdF9pcCwKIAkgICAgdTMyIGVsZW1lbnRzLCB1MzIgaG9zdHMsIHU4IG5ldG1hc2spCiB7Ci0JbWFwLSZndDttZW1iZXJzID0gYml0bWFwX3phbGxvYyhlbGVtZW50cywgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7CiYjNDM7CW1hcC0mZ3Q7bWVtYmVycyA9IGJpdG1hcF96YWxsb2MoZWxlbWVudHMsIEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX05PV0FSTik7CiAJaWYgKCFtYXAtJmd0O21lbWJlcnMpCiAJCXJldHVybiBmYWxzZTsKIAltYXAtJmd0O2ZpcnN0X2lwID0gZmlyc3RfaXA7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jCmluZGV4IDU5MjFmZDlkMmRjYTAuLmExMTc5MzUyMjIwYTQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jCkBAIC0zMDAsNyAmIzQzOzMwMCw3IEBAIHN0YXRpYyBib29sCiBpbml0X21hcF9pcG1hYyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBiaXRtYXBfaXBtYWMgKm1hcCwKIAkgICAgICAgdTMyIGZpcnN0X2lwLCB1MzIgbGFzdF9pcCwgdTMyIGVsZW1lbnRzKQogewotCW1hcC0mZ3Q7bWVtYmVycyA9IGJpdG1hcF96YWxsb2MoZWxlbWVudHMsIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pOwomIzQzOwltYXAtJmd0O21lbWJlcnMgPSBiaXRtYXBfemFsbG9jKGVsZW1lbnRzLCBHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9OT1dBUk4pOwogCWlmICghbWFwLSZndDttZW1iZXJzKQogCQlyZXR1cm4gZmFsc2U7CiAJbWFwLSZndDtmaXJzdF9pcCA9IGZpcnN0X2lwOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmMKaW5kZXggY2E4NzVjOTgyNDI0NS4uMGEwMDI3Y2RiMTkzNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jCkBAIC0yMzEsNyAmIzQzOzIzMSw3IEBAIHN0YXRpYyBib29sCiBpbml0X21hcF9wb3J0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGJpdG1hcF9wb3J0ICptYXAsCiAJICAgICAgdTE2IGZpcnN0X3BvcnQsIHUxNiBsYXN0X3BvcnQpCiB7Ci0JbWFwLSZndDttZW1iZXJzID0gYml0bWFwX3phbGxvYyhtYXAtJmd0O2VsZW1lbnRzLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTsKJiM0MzsJbWFwLSZndDttZW1iZXJzID0gYml0bWFwX3phbGxvYyhtYXAtJmd0O2VsZW1lbnRzLCBHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9OT1dBUk4pOwogCWlmICghbWFwLSZndDttZW1iZXJzKQogCQlyZXR1cm4gZmFsc2U7CiAJbWFwLSZndDtmaXJzdF9wb3J0ID0gZmlyc3RfcG9ydDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYwppbmRleCAwYTg2YTE3MGJhOTA2Li4yOGFjOGNiYTNkNjhjIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jCkBAIC0xMDg1LDcgJiM0MzsxMDg1LDcgQEAgc3RhdGljIGludCBpcF9zZXRfY3JlYXRlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sCiAJLyogRmlyc3QsIGFuZCB3aXRob3V0IGFueSBsb2NrcywgYWxsb2NhdGUgYW5kIGluaXRpYWxpemUKIAkgKiBhIG5vcm1hbCBiYXNlIHNldCBzdHJ1Y3R1cmUuCiAJICovCi0Jc2V0ID0ga3phbGxvY19vYmooKnNldCk7CiYjNDM7CXNldCA9IGt6YWxsb2Nfb2JqKCpzZXQsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFzZXQpCiAJCXJldHVybiAtRU5PTUVNOwogCXNwaW5fbG9ja19pbml0KCZhbXA7c2V0LSZndDtsb2NrKTsKQEAgLTExNDMsNyAmIzQzOzExNDMsNyBAQCBzdGF0aWMgaW50IGlwX3NldF9jcmVhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbywKIAkJCS8qIFdyYXBhcm91bmQgKi8KIAkJCWdvdG8gY2xlYW51cDsKIAotCQlsaXN0ID0ga3Z6YWxsb2Nfb2JqcyhzdHJ1Y3QgaXBfc2V0ICosIGkpOwomIzQzOwkJbGlzdCA9IGt2emFsbG9jX29ianMoc3RydWN0IGlwX3NldCAqLCBpLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCQlpZiAoIWxpc3QpCiAJCQlnb3RvIGNsZWFudXA7CiAJCS8qIG5mbmwgbXV0ZXggaXMgaGVsZCwgYm90aCBsaXN0cyBhcmUgdmFsaWQgKi8KQEAgLTIzOTcsNyAmIzQzOzIzOTcsOCBAQCBpcF9zZXRfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogCWlmIChpbnN0LSZndDtpcF9zZXRfbWF4ICZndDs9IElQU0VUX0lOVkFMSURfSUQpCiAJCWluc3QtJmd0O2lwX3NldF9tYXggPSBJUFNFVF9JTlZBTElEX0lEIC0gMTsKIAotCWxpc3QgPSBrdnphbGxvY19vYmpzKHN0cnVjdCBpcF9zZXQgKiwgaW5zdC0mZ3Q7aXBfc2V0X21heCk7CiYjNDM7CWxpc3QgPSBrdnphbGxvY19vYmpzKHN0cnVjdCBpcF9zZXQgKiwgaW5zdC0mZ3Q7aXBfc2V0X21heCwKJiM0MzsJCQkgICAgIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFsaXN0KQogCQlyZXR1cm4gLUVOT01FTTsKIAlpbnN0LSZndDtpc19kZWxldGVkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaAppbmRleCA4MGNhNTIzZjMwNGJiLi4zOWRlYzkyODUwNTJhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgKQEAgLTc2OCw3ICYjNDM7NzY4LDcgQEAgbXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKQogCWludCByZXQ7CiAKICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKLQl0bXAgPSBrbWFsbG9jKGRzaXplLCBHRlBfS0VSTkVMKTsKJiM0MzsJdG1wID0ga21hbGxvYyhkc2l6ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIXRtcCkKIAkJcmV0dXJuIC1FTk9NRU07CiAjZW5kaWYKQEAgLTE3NTQsNyAmIzQzOzE3NTQsNyBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsCiAJCXNpemVvZihzdHJ1Y3QgSVBTRVRfVE9LRU4oSFRZUEUsIDYpKSA6CiAJCXNpemVvZihzdHJ1Y3QgSVBTRVRfVE9LRU4oSFRZUEUsIDQpKTsKICNlbmRpZgotCWggPSBremFsbG9jKGhzaXplLCBHRlBfS0VSTkVMKTsKJiM0MzsJaCA9IGt6YWxsb2MoaHNpemUsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFoKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTc3NCw3ICYjNDM7MTc3NCw3IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCwKIAkJZ290byBmcmVlX3Q7CiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTCiAJZm9yIChpID0gMDsgaSAmbHQ7IElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspIHsKLQkJbmV0cyA9IGt6YWxsb2Nfb2JqKCpuZXRzKTsKJiM0MzsJCW5ldHMgPSBremFsbG9jX29iaigqbmV0cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAkJaWYgKCFuZXRzKSB7CiAJCQl3aGlsZSAoaSAmZ3Q7IDApCiAJCQkJa2ZyZWUocmN1X2RlcmVmZXJlbmNlX3JhdyhoLSZndDtybmV0c1stLWldKSk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYwppbmRleCBmMDcwMDg4NzQyZDYwLi43NTBmZTM4MjYxYzM3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMKQEAgLTYwMCw3ICYjNDM7NjAwLDcgQEAgaW5pdF9saXN0X3NldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCwgdTMyIHNpemUpCiB7CiAJc3RydWN0IGxpc3Rfc2V0ICptYXA7CiAKLQltYXAgPSBremFsbG9jX29iaigqbWFwKTsKJiM0MzsJbWFwID0ga3phbGxvY19vYmooKm1hcCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIW1hcCkKIAkJcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYwppbmRleCA4NTQ4N2Y5MmFmNTA2Li5iMDljMTc2YTUyMWQxIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMKQEAgLTY5MSw3ICYjNDM7NjkxLDcgQEAgc3RydWN0IG5mX2Nvbm5jb3VudF9kYXRhICpuZl9jb25uY291bnRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBrZXlsZW4KIAkgICAga2V5bGVuID09IDApCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCi0JZGF0YSA9IGt2emFsbG9jX29iaigqZGF0YSk7CiYjNDM7CWRhdGEgPSBrdnphbGxvY19vYmooKmRhdGEsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFkYXRhKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYwppbmRleCBiNDA4NWFmM2FkMWNlLi5mZTUyNWIzMjRhZjQxIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYwpAQCAtOTMsNyAmIzQzOzkzLDcgQEAgaW50IG5mX2N0X2FkZF9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBjaGFyICpuYW1lLCB1OCBmYW1pbHksCiAJaWYgKCFoZWxwZXIpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfS0VSTkVMKTsKJiM0MzsJaGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghaGVscCkgewogCQluZl9jb25udHJhY2tfaGVscGVyX3B1dChoZWxwZXIpOwogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwppbmRleCBmNGYyZDgyMTkyZDU0Li5kODhhMTAyMzA4NjJlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCkBAIC0xMDA5LDcgJiM0MzsxMDA5LDcgQEAgc3RhdGljIGludCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQpCiAJQlVJTERfQlVHX09OKEFSUkFZX1NJWkUobmZfY3Rfc3lzY3RsX3RhYmxlKSAhPSBORl9TWVNDVExfQ1RfTEFTVF9TWVNDVEwpOwogCiAJdGFibGUgPSBrbWVtZHVwKG5mX2N0X3N5c2N0bF90YWJsZSwgc2l6ZW9mKG5mX2N0X3N5c2N0bF90YWJsZSksCi0JCQlHRlBfS0VSTkVMKTsKJiM0MzsJCQlHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghdGFibGUpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmMKaW5kZXggNGUxZWVmMWJhMGYxNS4uNDBjNmZjZTE0YTYzZiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9ob29rc19sd3R1bm5lbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuYwpAQCAtNzMsNyAmIzQzOzczLDcgQEAgc3RhdGljIGludCBfX25ldF9pbml0IG5mX2x3dHVubmVsX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIAlpZiAoIW5ldF9lcShuZXQsICZhbXA7aW5pdF9uZXQpKSB7CiAJCXRhYmxlID0ga21lbWR1cChuZl9sd3R1bm5lbF9zeXNjdGxfdGFibGUsCiAJCQkJc2l6ZW9mKG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZSksCi0JCQkJR0ZQX0tFUk5FTCk7CiYjNDM7CQkJCUdGUF9LRVJORUxfQUNDT1VOVCk7CiAJCWlmICghdGFibGUpCiAJCQlnb3RvIGVycl9hbGxvYzsKIAl9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jIGIvbmV0L25ldGZpbHRlci9uZl9sb2cuYwppbmRleCBmNGQ4MDY1NGRmZTZhLi5mMWQzNjQ5ZTNmYzYyIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmMKQEAgLTQ5Myw3ICYjNDM7NDkzLDcgQEAgc3RhdGljIGludCBuZXRmaWx0ZXJfbG9nX3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIAlpZiAoIW5ldF9lcShuZXQsICZhbXA7aW5pdF9uZXQpKSB7CiAJCXRhYmxlID0ga21lbWR1cChuZl9sb2dfc3lzY3RsX3RhYmxlLAogCQkJCSBzaXplb2YobmZfbG9nX3N5c2N0bF90YWJsZSksCi0JCQkJIEdGUF9LRVJORUwpOwomIzQzOwkJCQkgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAkJaWYgKCF0YWJsZSkKIAkJCWdvdG8gZXJyX2FsbG9jOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKaW5kZXggOGFjMzI2ZTFlYjViYS4uMDljYzViOGZkNmFmMSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYwpAQCAtMTIwNCwxNCAmIzQzOzEyMDQsMTUgQEAgaW50IG5mX25hdF9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywKIAlpZiAoIW5hdF9wcm90b19uZXQtJmd0O25hdF9ob29rX29wcykgewogCQlXQVJOX09OKG5hdF9wcm90b19uZXQtJmd0O3VzZXJzICE9IDApOwogCi0JCW5hdF9vcHMgPSBrbWVtZHVwX2FycmF5KG9yaWdfbmF0X29wcywgb3BzX2NvdW50LCBzaXplb2YoKm9yaWdfbmF0X29wcyksIEdGUF9LRVJORUwpOwomIzQzOwkJbmF0X29wcyA9IGttZW1kdXBfYXJyYXkob3JpZ19uYXRfb3BzLCBvcHNfY291bnQsIHNpemVvZigqb3JpZ19uYXRfb3BzKSwKJiM0MzsJCQkJCUdGUF9LRVJORUxfQUNDT1VOVCk7CiAJCWlmICghbmF0X29wcykgewogCQkJbXV0ZXhfdW5sb2NrKCZhbXA7bmZfbmF0X3Byb3RvX211dGV4KTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAKIAkJZm9yIChpID0gMDsgaSAmbHQ7IG9wc19jb3VudDsgaSYjNDM7JiM0MzspIHsKLQkJCXByaXYgPSBremFsbG9jX29iaigqcHJpdik7CiYjNDM7CQkJcHJpdiA9IGt6YWxsb2Nfb2JqKCpwcml2LCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCQkJaWYgKHByaXYpIHsKIAkJCQluYXRfb3BzW2ldLnByaXYgPSBwcml2OwogCQkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYwppbmRleCBhY2QzNjA1MTU5NzJmLi45ZmM5NTliYTIwMzAwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYwpAQCAtMzM2LDcgJiM0MzszMzYsNyBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgc3lucHJveHlfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogCXN0cnVjdCBuZl9jb25uICpjdDsKIAlpbnQgZXJyID0gLUVOT01FTTsKIAotCWN0ID0gbmZfY3RfdG1wbF9hbGxvYyhuZXQsICZhbXA7bmZfY3Rfem9uZV9kZmx0LCBHRlBfS0VSTkVMKTsKJiM0MzsJY3QgPSBuZl9jdF90bXBsX2FsbG9jKG5ldCwgJmFtcDtuZl9jdF96b25lX2RmbHQsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFjdCkKIAkJZ290byBlcnIxOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19hY2N0LmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19hY2N0LmMKaW5kZXggOGZmMWUwYWQ1Y2IwZC4uMWEzNjZmYmQ4MTMzMiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfYWNjdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2FjY3QuYwpAQCAtMTEyLDcgJiM0MzsxMTIsNyBAQCBzdGF0aWMgaW50IG5mbmxfYWNjdF9uZXcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbywKIAkJc2l6ZSAmIzQzOz0gc2l6ZW9mKHU2NCk7CiAJfQogCi0JbmZhY2N0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5mX2FjY3QpICYjNDM7IHNpemUsIEdGUF9LRVJORUwpOwomIzQzOwluZmFjY3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmZfYWNjdCkgJiM0Mzsgc2l6ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAobmZhY2N0ID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYwppbmRleCA1YjZhMDlmNDY5MDNmLi5hMDliMmZkYmY5YjRlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMKQEAgLTMzNSw3ICYjNDM7MzM1LDggQEAgc3RhdGljIGludCBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfYWxsKHN0cnVjdCBubGF0dHIgKnRiW10sCiAJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICpwb2xpY3k7CiAJaW50IGksIHJldCA9IDA7CiAKLQluZXdfcG9saWN5ID0ga21hbGxvY19vYmpzKCpuZXdfcG9saWN5LCBoZWxwZXItJmd0O2V4cGVjdF9jbGFzc19tYXggJiM0MzsgMSk7CiYjNDM7CW5ld19wb2xpY3kgPSBrbWFsbG9jX29ianMoKm5ld19wb2xpY3ksIGhlbHBlci0mZ3Q7ZXhwZWN0X2NsYXNzX21heCAmIzQzOyAxLAomIzQzOwkJCQkgIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFuZXdfcG9saWN5KQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuYwppbmRleCA2NmMyMDE2ZjYwNDlkLi42YjRhZGFhZjYxYWYwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuYwpAQCAtNzEsNyAmIzQzOzcxLDggQEAgY3RubF90aW1lb3V0X3BhcnNlX3BvbGljeSh2b2lkICp0aW1lb3V0LAogCXN0cnVjdCBubGF0dHIgKip0YjsKIAlpbnQgcmV0ID0gMDsKIAotCXRiID0ga3phbGxvY19vYmpzKCp0YiwgbDRwcm90by0mZ3Q7Y3RubF90aW1lb3V0Lm5sYXR0cl9tYXggJiM0MzsgMSk7CiYjNDM7CXRiID0ga3phbGxvY19vYmpzKCp0YiwgbDRwcm90by0mZ3Q7Y3RubF90aW1lb3V0Lm5sYXR0cl9tYXggJiM0MzsgMSwKJiM0MzsJCQkgIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAKIAlpZiAoIXRiKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE1MCwxNCAmIzQzOzE1MSwxNSBAQCBzdGF0aWMgaW50IGN0dGltZW91dF9uZXdfdGltZW91dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlnb3RvIGVycl9wcm90b19wdXQ7CiAJfQogCi0JdGltZW91dCA9IGt6YWxsb2Moc2l6ZW9mKCp0aW1lb3V0KSwgR0ZQX0tFUk5FTCk7CiYjNDM7CXRpbWVvdXQgPSBremFsbG9jKHNpemVvZigqdGltZW91dCksIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKHRpbWVvdXQgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9wcm90b19wdXQ7CiAJfQogCiAJdGltZW91dC0mZ3Q7dGltZW91dCA9IGt6YWxsb2Moc2l6ZW9mKCp0aW1lb3V0LSZndDt0aW1lb3V0KSAmIzQzOwotCQkJCSAgIGw0cHJvdG8tJmd0O2N0bmxfdGltZW91dC5vYmpfc2l6ZSwgR0ZQX0tFUk5FTCk7CiYjNDM7CQkJCSAgIGw0cHJvdG8tJmd0O2N0bmxfdGltZW91dC5vYmpfc2l6ZSwKJiM0MzsJCQkJICAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIXRpbWVvdXQtJmd0O3RpbWVvdXQpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnI7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19vc2YuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX29zZi5jCmluZGV4IDkyMDAyMDc5ZjhlYWIuLmU0ODM1YjBmNGJiMWEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX29zZi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX29zZi5jCkBAIC0zMjUsNyAmIzQzOzMyNSw3IEBAIHN0YXRpYyBpbnQgbmZubF9vc2ZfYWRkX2NhbGxiYWNrKHN0cnVjdCBza19idWZmICpza2IsCiAJICAgICFtZW1jaHIoZi0mZ3Q7dmVyc2lvbiwgMCwgTUFYR0VOUkVMRU4pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWtmID0ga21hbGxvY19vYmooc3RydWN0IG5mX29zZl9maW5nZXIpOwomIzQzOwlrZiA9IGttYWxsb2Nfb2JqKHN0cnVjdCBuZl9vc2ZfZmluZ2VyLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICgha2YpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jIGIvbmV0L25ldGZpbHRlci9uZnRfY3QuYwppbmRleCA5ZGJmMTI3ZGY5YzgxLi44OTc2MDg3NDMzNmMzIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMKQEAgLTM2NSw3ICYjNDM7MzY1LDcgQEAgc3RhdGljIGJvb2wgbmZ0X2N0X3RtcGxfYWxsb2NfcGNwdSh2b2lkKQogCQlyZXR1cm4gdHJ1ZTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJdG1wID0gbmZfY3RfdG1wbF9hbGxvYygmYW1wO2luaXRfbmV0LCAmYW1wO3pvbmUsIEdGUF9LRVJORUwpOwomIzQzOwkJdG1wID0gbmZfY3RfdG1wbF9hbGxvYygmYW1wO2luaXRfbmV0LCAmYW1wO3pvbmUsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJCWlmICghdG1wKSB7CiAJCQluZnRfY3RfdG1wbF9wdXRfcGNwdSgpOwogCQkJcmV0dXJuIGZhbHNlOwpAQCAtODQ4LDcgJiM0Mzs4NDgsOCBAQCBuZnRfY3RfdGltZW91dF9wYXJzZV9wb2xpY3kodm9pZCAqdGltZW91dHMsCiAJc3RydWN0IG5sYXR0ciAqKnRiOwogCWludCByZXQgPSAwOwogCi0JdGIgPSBremFsbG9jX29ianMoKnRiLCBsNHByb3RvLSZndDtjdG5sX3RpbWVvdXQubmxhdHRyX21heCAmIzQzOyAxKTsKJiM0MzsJdGIgPSBremFsbG9jX29ianMoKnRiLCBsNHByb3RvLSZndDtjdG5sX3RpbWVvdXQubmxhdHRyX21heCAmIzQzOyAxLAomIzQzOwkJCSAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAogCWlmICghdGIpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtOTM0LDcgJiM0Mzs5MzUsNyBAQCBzdGF0aWMgaW50IG5mdF9jdF90aW1lb3V0X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAJfQogCiAJdGltZW91dCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuZl9jdF90aW1lb3V0KSAmIzQzOwotCQkJICBsNHByb3RvLSZndDtjdG5sX3RpbWVvdXQub2JqX3NpemUsIEdGUF9LRVJORUwpOwomIzQzOwkJCSAgbDRwcm90by0mZ3Q7Y3RubF90aW1lb3V0Lm9ial9zaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICh0aW1lb3V0ID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJfcHJvdG9fcHV0OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jIGIvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jCmluZGV4IDk3OGJiMGMwMTEwNjguLjM2MTdiYjY2MDk0ZDQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMKQEAgLTIyOTgsNyAmIzQzOzIyOTgsNyBAQCBzdGF0aWMgaW50IG5mdF9waXBhcG9faW5pdChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LAogCWlmIChmaWVsZF9jb3VudCAmZ3Q7IE5GVF9QSVBBUE9fTUFYX0ZJRUxEUykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltID0ga21hbGxvY19mbGV4KCptLCBmLCBmaWVsZF9jb3VudCk7CiYjNDM7CW0gPSBrbWFsbG9jX2ZsZXgoKm0sIGYsIGZpZWxkX2NvdW50LCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghbSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfQ1QuYyBiL25ldC9uZXRmaWx0ZXIveHRfQ1QuYwppbmRleCBlNzg2NjBkZmRmNGI2Li4yMDViYzZkZDk4MTI1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X0NULmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9DVC5jCkBAIC05MSw3ICYjNDM7OTEsNyBAQCB4dF9jdF9zZXRfaGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3QgY2hhciAqaGVscGVyX25hbWUsCiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0tFUk5FTCk7CiYjNDM7CWhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoaGVscCA9PSBOVUxMKSB7CiAJCW5mX2Nvbm50cmFja19oZWxwZXJfcHV0KGhlbHBlcik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTgyLDcgJiM0MzsxODIsNyBAQCBzdGF0aWMgaW50IHh0X2N0X3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyLAogCWlmIChpbmZvLSZndDtmbGFncyAmYW1wOyBYVF9DVF9aT05FX01BUkspCiAJCXpvbmUuZmxhZ3MgfD0gTkZfQ1RfRkxBR19NQVJLOwogCi0JY3QgPSBuZl9jdF90bXBsX2FsbG9jKHBhci0mZ3Q7bmV0LCAmYW1wO3pvbmUsIEdGUF9LRVJORUwpOwomIzQzOwljdCA9IG5mX2N0X3RtcGxfYWxsb2MocGFyLSZndDtuZXQsICZhbXA7em9uZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIWN0KSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyMjsKQEAgLTE5MCw3ICYjNDM7MTkwLDcgQEAgc3RhdGljIGludCB4dF9jdF90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhciwKIAogCWlmICgoaW5mby0mZ3Q7Y3RfZXZlbnRzIHx8IGluZm8tJmd0O2V4cF9ldmVudHMpICZhbXA7JmFtcDsKIAkgICAgIW5mX2N0X2VjYWNoZV9leHRfYWRkKGN0LCBpbmZvLSZndDtjdF9ldmVudHMsIGluZm8tJmd0O2V4cF9ldmVudHMsCi0JCQkJICBHRlBfS0VSTkVMKSkgewomIzQzOwkJCQkgIEdGUF9LRVJORUxfQUNDT1VOVCkpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnIzOwogCX0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jCmluZGV4IGJmY2YyZDQ0ZTkzZGIuLjc5NmIwZDQ2MWMzZDAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYwpAQCAtMTUwLDcgJiM0MzsxNTAsNyBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jcmVhdGUoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvKQogewogCWludCByZXQ7CiAKLQlpbmZvLSZndDt0aW1lciA9IGt6YWxsb2Nfb2JqKCppbmZvLSZndDt0aW1lcik7CiYjNDM7CWluZm8tJmd0O3RpbWVyID0ga3phbGxvY19vYmooKmluZm8tJmd0O3RpbWVyLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghaW5mby0mZ3Q7dGltZXIpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CkBAIC0xNjEsNyAmIzQzOzE2MSw3IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8gKmluZm8pCiAJCWdvdG8gb3V0X2ZyZWVfdGltZXI7CiAKIAlzeXNmc19hdHRyX2luaXQoJmFtcDtpbmZvLSZndDt0aW1lci0mZ3Q7YXR0ci5hdHRyKTsKLQlpbmZvLSZndDt0aW1lci0mZ3Q7YXR0ci5hdHRyLm5hbWUgPSBrc3RyZHVwKGluZm8tJmd0O2xhYmVsLCBHRlBfS0VSTkVMKTsKJiM0MzsJaW5mby0mZ3Q7dGltZXItJmd0O2F0dHIuYXR0ci5uYW1lID0ga3N0cmR1cChpbmZvLSZndDtsYWJlbCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIWluZm8tJmd0O3RpbWVyLSZndDthdHRyLmF0dHIubmFtZSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9mcmVlX3RpbWVyOwpAQCAtMTk5LDcgJiM0MzsxOTksNyBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxICppbmZvKQogewogCWludCByZXQ7CiAKLQlpbmZvLSZndDt0aW1lciA9IGttYWxsb2Nfb2JqKCppbmZvLSZndDt0aW1lcik7CiYjNDM7CWluZm8tJmd0O3RpbWVyID0ga21hbGxvY19vYmooKmluZm8tJmd0O3RpbWVyLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghaW5mby0mZ3Q7dGltZXIpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CkBAIC0yMTAsNyAmIzQzOzIxMCw3IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pCiAJCWdvdG8gb3V0X2ZyZWVfdGltZXI7CiAKIAlzeXNmc19hdHRyX2luaXQoJmFtcDtpbmZvLSZndDt0aW1lci0mZ3Q7YXR0ci5hdHRyKTsKLQlpbmZvLSZndDt0aW1lci0mZ3Q7YXR0ci5hdHRyLm5hbWUgPSBrc3RyZHVwKGluZm8tJmd0O2xhYmVsLCBHRlBfS0VSTkVMKTsKJiM0MzsJaW5mby0mZ3Q7dGltZXItJmd0O2F0dHIuYXR0ci5uYW1lID0ga3N0cmR1cChpbmZvLSZndDtsYWJlbCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIWluZm8tJmd0O3RpbWVyLSZndDthdHRyLmF0dHIubmFtZSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9mcmVlX3RpbWVyOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9MRUQuYyBiL25ldC9uZXRmaWx0ZXIveHRfTEVELmMKaW5kZXggY2FhYWY0ZDJjNTg0Mi4uM2NiYjhkNjFkNDE3NSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9MRUQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X0xFRC5jCkBAIC0xMTEsMTEgJiM0MzsxMTEsMTIgQEAgc3RhdGljIGludCBsZWRfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCiAJfQogCiAJZXJyID0gLUVOT01FTTsKLQlsZWRpbnRlcm5hbCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB4dF9sZWRfaW5mb19pbnRlcm5hbCk7CiYjNDM7CWxlZGludGVybmFsID0ga3phbGxvY19vYmooc3RydWN0IHh0X2xlZF9pbmZvX2ludGVybmFsLAomIzQzOwkJCQkgIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFsZWRpbnRlcm5hbCkKIAkJZ290byBleGl0X211dGV4X29ubHk7CiAKLQlsZWRpbnRlcm5hbC0mZ3Q7dHJpZ2dlcl9pZCA9IGtzdHJkdXAobGVkaW5mby0mZ3Q7aWQsIEdGUF9LRVJORUwpOwomIzQzOwlsZWRpbnRlcm5hbC0mZ3Q7dHJpZ2dlcl9pZCA9IGtzdHJkdXAobGVkaW5mby0mZ3Q7aWQsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFsZWRpbnRlcm5hbC0mZ3Q7dHJpZ2dlcl9pZCkKIAkJZ290byBleGl0X2ludGVybmFsX2FsbG9jOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X1JBVEVFU1QuYyBiL25ldC9uZXRmaWx0ZXIveHRfUkFURUVTVC5jCmluZGV4IDkxMjcwZDQ2N2ZmZGYuLjJmNmI1MTJiNzFlODAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfUkFURUVTVC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfUkFURUVTVC5jCkBAIC0xMzksNyAmIzQzOzEzOSw3IEBAIHN0YXRpYyBpbnQgeHRfcmF0ZWVzdF90Z19jaGVja2VudHJ5KGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQogCX0KIAogCXJldCA9IC1FTk9NRU07Ci0JZXN0ID0ga3phbGxvY19vYmooKmVzdCk7CiYjNDM7CWVzdCA9IGt6YWxsb2Nfb2JqKCplc3QsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFlc3QpCiAJCWdvdG8gZXJyMTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9URUUuYyBiL25ldC9uZXRmaWx0ZXIveHRfVEVFLmMKaW5kZXggNWQzNGNlYjg5M2VkYS4uNDhiNDEwNGYwODU5OCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9URUUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jCkBAIC0xMDYsNyAmIzQzOzEwNiw3IEBAIHN0YXRpYyBpbnQgdGVlX3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQogCQlpZiAoaW5mby0mZ3Q7b2lmW3NpemVvZihpbmZvLSZndDtvaWYpLTFdICE9ICYjMzk7XDAmIzM5OykKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCXByaXYgPSBremFsbG9jX29iaigqcHJpdik7CiYjNDM7CQlwcml2ID0ga3phbGxvY19vYmooKnByaXYsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJCWlmIChwcml2ID09IE5VTEwpCiAJCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuYyBiL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmMKaW5kZXggOWFmMGZhODk1ZjczMC4uYjQ1ZjA2YjA2YzI2ZCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jCkBAIC0zMTksNyAmIzQzOzMxOSw3IEBAIHN0YXRpYyBpbnQgaHRhYmxlX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBoYXNobGltaXRfY2ZnMyAqY2ZnLAogCWhpbmZvLSZndDtjb3VudCA9IDA7CiAJaGluZm8tJmd0O2ZhbWlseSA9IGZhbWlseTsKIAloaW5mby0mZ3Q7cm5kX2luaXRpYWxpemVkID0gZmFsc2U7Ci0JaGluZm8tJmd0O25hbWUgPSBrc3RyZHVwKG5hbWUsIEdGUF9LRVJORUwpOwomIzQzOwloaW5mby0mZ3Q7bmFtZSA9IGtzdHJkdXAobmFtZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIWhpbmZvLSZndDtuYW1lKSB7CiAJCWt2ZnJlZShoaW5mbyk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9saW1pdC5jIGIvbmV0L25ldGZpbHRlci94dF9saW1pdC5jCmluZGV4IDg3ZDc0ZGExNGMwYjcuLmFkNDhiNjg3OWIxMzAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfbGltaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMKQEAgLTExNSw3ICYjNDM7MTE1LDcgQEAgc3RhdGljIGludCBsaW1pdF9tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIAkJcmV0dXJuIC1FUkFOR0U7CiAJfQogCi0JcHJpdiA9IGttYWxsb2Nfb2JqKCpwcml2KTsKJiM0MzsJcHJpdiA9IGttYWxsb2Nfb2JqKCpwcml2LCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmIChwcml2ID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmMKaW5kZXggYjA1YzVjOGRhYzc4Yi4uZTIxZWMxNTJkMTZhNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9xdW90YS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfcXVvdGEuYwpAQCAtNTAsNyAmIzQzOzUwLDcgQEAgc3RhdGljIGludCBxdW90YV9tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIAlpZiAocS0mZ3Q7ZmxhZ3MgJmFtcDsgflhUX1FVT1RBX01BU0spCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcS0mZ3Q7bWFzdGVyID0ga21hbGxvY19vYmooKnEtJmd0O21hc3Rlcik7CiYjNDM7CXEtJmd0O21hc3RlciA9IGttYWxsb2Nfb2JqKCpxLSZndDttYXN0ZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKHEtJmd0O21hc3RlciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9yZWNlbnQuYyBiL25ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmMKaW5kZXggZDM0ODMxY2UzYWRmYi4uNTVmMWYyZDg5OTUyZCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9yZWNlbnQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jCkBAIC0zOTEsNyAmIzQzOzM5MSw4IEBAIHN0YXRpYyBpbnQgcmVjZW50X210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyLAogCQlnb3RvIG91dDsKIAl9CiAKLQl0ID0ga3Z6YWxsb2NfZmxleCgqdCwgaXBoYXNoLCBpcF9saXN0X2hhc2hfc2l6ZSk7CiYjNDM7CXQgPSBrdnphbGxvY19mbGV4KCp0LCBpcGhhc2gsIGlwX2xpc3RfaGFzaF9zaXplLAomIzQzOwkJCSAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAodCA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9zdGF0aXN0aWMuYyBiL25ldC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmMKaW5kZXggMzM0ZTA5NzcxYWJmOS4uMWZmYzU5ZDkwYmIwYSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9zdGF0aXN0aWMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5jCkBAIC01OCw3ICYjNDM7NTgsNyBAQCBzdGF0aWMgaW50IHN0YXRpc3RpY19tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIAkgICAgaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgflhUX1NUQVRJU1RJQ19NQVNLKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWluZm8tJmd0O21hc3RlciA9IGt6YWxsb2Nfb2JqKCppbmZvLSZndDttYXN0ZXIpOwomIzQzOwlpbmZvLSZndDttYXN0ZXIgPSBremFsbG9jX29iaigqaW5mby0mZ3Q7bWFzdGVyLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmIChpbmZvLSZndDttYXN0ZXIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJYXRvbWljX3NldCgmYW1wO2luZm8tJmd0O21hc3Rlci0mZ3Q7Y291bnQsIGluZm8tJmd0O3UubnRoLmNvdW50KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfc3RyaW5nLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3N0cmluZy5jCmluZGV4IDhjZTI1YmM5YjI3NzUuLjUyYzFkZWIwMmNkYzYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfc3RyaW5nLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9zdHJpbmcuYwpAQCAtNTQsNyAmIzQzOzU0LDcgQEAgc3RhdGljIGludCBzdHJpbmdfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiAJaWYgKGNvbmYtJmd0O3UudjEuZmxhZ3MgJmFtcDsgWFRfU1RSSU5HX0ZMQUdfSUdOT1JFQ0FTRSkKIAkJZmxhZ3MgfD0gVFNfSUdOT1JFQ0FTRTsKIAl0c19jb25mID0gdGV4dHNlYXJjaF9wcmVwYXJlKGNvbmYtJmd0O2FsZ28sIGNvbmYtJmd0O3BhdHRlcm4sIGNvbmYtJmd0O3BhdGxlbiwKLQkJCQkgICAgIEdGUF9LRVJORUwsIGZsYWdzKTsKJiM0MzsJCQkJICAgICBHRlBfS0VSTkVMX0FDQ09VTlQsIGZsYWdzKTsKIAlpZiAoSVNfRVJSKHRzX2NvbmYpKQogCQlyZXR1cm4gUFRSX0VSUih0c19jb25mKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDcwNAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDI1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXRmaWx0ZXIgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyBzd2l0Y2hpbmcgbmV0ZmlsdGVyJiMzOTtzIG1lbW9yeSBhbGxvY2F0aW9ucyBmcm9tIHBsYWluIGBHRlBfS0VSTkVMYCB0byBgR0ZQX0tFUk5FTF9BQ0NPVU5UYC4gVGhpcyBpcyBiYXNpY2FsbHkgYSBtZWNoYW5pY2FsIGNoYW5nZSwganVzdCBhZGRpbmcgYWNjb3VudGluZyB0byB0aGVzZSBhbGxvY2F0aW9ucy4gTXkgZmlyc3QgdGhvdWdodCBpczogZG9lcyB0aGlzICphY3R1YWxseSogY2hhbmdlIGFueXRoaW5nIGZyb20gYSBmdW5jdGlvbmFsIHBlcnNwZWN0aXZlPyBNZW1vcnkgYWNjb3VudGluZywgYnkgaXRzZWxmLCBkb2VzbiYjMzk7dCBhbHRlciB0aGUga2VybmVsJiMzOTtzIGV4ZWN1dGlvbiBmbG93LiBUaGUgb25seSBzaWRlIGVmZmVjdCBpcyBpdCBtYXkgdHJpZ2dlciBPT00gZXJyb3JzIG9yIGNncm91cCBsaW1pdHMgaWYgbWVtb3J5IGNvbnN0cmFpbnRzIGFyZSBoaXQuCgpCdXQsIHNob3VsZCBJIGJvdGhlciBmdXp6aW5nIHRoaXM/IE5vcm1hbGx5LCBhZGRpbmcgYEdGUF9LRVJORUxfQUNDT1VOVGAgaXMgYSBnb29kIHRoaW5nIGZvciBzZWN1cml0eSBhbmQgYWNjb3VudGluZy4gSXQgaGVscHMgcHJldmVudCB1bnByaXZpbGVnZWQgdXNlcnMgZnJvbSBob2dnaW5nIG1lbW9yeSB3aXRob3V0IGl0IGJlaW5nIHByb3Blcmx5IHRyYWNrZWQgYnkgdGhlaXIgY2dyb3VwLiBObyBuZXcgbG9naWMgaXMgYmVpbmcgaW50cm9kdWNlZCwgaXQgaXMgb25seSBhIGNoYW5nZSBpbiB0aGUgR0ZQIGZsYWdzLgoKSGFuZyBvbiwgbGV0JiMzOTtzIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBwYXRjaCBpdHNlbGYuCgpgYGBjCi0JdG1wbCA9IGt6YWxsb2Nfb2JqKCp0bXBsKTsKJiM0MzsJdG1wbCA9IGt6YWxsb2Nfb2JqKCp0bXBsLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwpgYGAKCldhaXQsIGBremFsbG9jX29iamA/IFRoYXQgZG9lc24mIzM5O3QgbG9vayBmYW1pbGlhci4gYGt6YWxsb2Nfb2JqYCBpc24mIzM5O3QgYSBzdGFuZGFyZCBrZXJuZWwgbWFjcm8sIGlzIGl0PyBCZXR0ZXIgY2hlY2sgaWYgdGhpcyBpcyBldmVuIHNvbWV0aGluZyB0aGF0IGV4aXN0cyBpbiB0aGUga2VybmVsLiBJJiMzOTttIGdvaW5nIHRvIHJ1biBhIGBncmVwcGVyYCBzZWFyY2ggdG8gc2VlIGlmIGBremFsbG9jX29iamAgaXMgZGVmaW5lZCBhbnl3aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtremFsbG9jX29iaiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzkyNzMgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3Q9MTAzPWxpc3Q6XG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMTQtXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0OjExNTogICAgICAgICAgZ3JvY2sgPSBremFsbG9jX29iaigqZ3JvY2spO1xuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMTYtICAgICAgICAgIGlmICghZ3JvY2spXG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMjUtXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0OjEyNjogICAgICAgICAgZGltaXRyaSA9IGt6YWxsb2Nfb2JqKCpkaW1pdHJpKTtcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTI3LSAgICAgICAgICBpZiAoIWRpbWl0cmkpXG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0PTQ1PWEgbWVzc2FnZSBhbmQgYSBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgQVBJIGFuZCByZXR1cm4gaW1tZWRpYXRlbHkpLlxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdC04OS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdDo5MDpcdFx0ZGNfc3luYyA9IGt6YWxsb2Nfb2JqKCpkY19zeW5jKTtcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdDo5MTpcdFx0ZGNfYXN5bmMgPSBremFsbG9jX29iaigqZGNfYXN5bmMpO1xuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0LTkyLVxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdD0yNj1FeGFtcGxlOlxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdC00NC1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdDo0NTpcdFx0bXlfZmggPSBremFsbG9jX29iaigqbXlfZmgpO1xuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0LTQ2LVxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTkzOD1UaGUga2VybmVsIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZ2VuZXJhbCBwdXJwb3NlIG1lbW9yeSBhbGxvY2F0b3JzOlxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTM5OmttYWxsb2MoKSwga3phbGxvYygpLCBrbWFsbG9jX29ianMoKSwga3phbGxvY19vYmpzKCksIHZtYWxsb2MoKSwgYW5kXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDAtdnphbGxvYygpLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgZnVydGhlciBpbmZvcm1hdGlvblxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk2ND1UaGUgcHJlZmVycmVkIGZvcm0gZm9yIGFsbG9jYXRpbmcgYSB6ZXJvZWQgYXJyYXkgaXMgdGhlIGZvbGxvd2luZzpcbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjctXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5Njg6XHRwID0ga3phbGxvY19vYmpzKCpwLCBuLCAuLi4pO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTY5LVxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdD0zOTg9YmVjb21lLCByZXNwZWN0aXZlbHk6OlxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDAtXHRwdHIgPSBrbWFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDE6XHRwdHIgPSBremFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDItXHRwdHIgPSBrbWFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMzpcdHB0ciA9IGt6YWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDA0LVx0cHRyID0ga21hbGxvY19mbGV4KCpwdHIsIGZsZXhfbWVtYmVyLCBjb3VudCBbLCBnZnBdICk7XG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTIwOD10byBkZXRhaWxzIGV4cGxhaW5lZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb24uXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTI2OC0gICAgICAgICAgICAgIC8qIGFsbG9jYXRlIGEgY2hpcC1zcGVjaWZpYyBkYXRhIHdpdGggemVybyBmaWxsZWQgKi9cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDoyNjk6ICAgICAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTI3MC0gICAgICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTYyMz1BZnRlciBhbGxvY2F0aW5nIGEgY2FyZCBpbnN0YW5jZSB2aWEgOmM6ZnVuYzpgc25kX2NhcmRfbmV3KClgXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTYzMC0gIC4uLi4uXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6NjMxOiAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC02MzItXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTY5OD1kZXN0cnVjdG9yIGFuZCBQQ0kgZW50cmllcy4gRXhhbXBsZSBjb2RlIGlzIHNob3duIGZpcnN0LCBiZWxvdzo6XG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTc0OS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDo3NTA6ICAgICAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTc1MS0gICAgICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpIHtcbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9MzgyMz1jaGlwIGRhdGEgaW5kaXZpZHVhbGx5Ojpcbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzgzNS0gICAgICAgICAgLi4uLlxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjM4MzY6ICAgICAgICAgIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzgzNy0gICAgICAgICAgLi4uLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dD03OTQ9aW50IG15X29wZW4oc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0LTgwMS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dDo4MDI6XHRteV9maCA9IGt6YWxsb2Nfb2JqKCpteV9maCk7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQtODAzLVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jPTY0PW1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmNjRfRWhkciAqaGRyLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxuLS1cbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTk1LVx0bnN5bXMgPSBzeW10YWItXHUwMDNlc2hfc2l6ZSAvIHNpemVvZihFbGY2NF9TeW0pO1xuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmM6OTY6XHRjaGFpbnMgPSBremFsbG9jX29ianMoc3RydWN0IGdvdF9lbnRyeSwgbnN5bXMpO1xuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMtOTctXHRpZiAoIWNoYWlucykge1xuLS1cbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmM9MzkwPXJlZ2lzdGVyX2NwdXModm9pZClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTM5NC1cdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jOjM5NTpcdFx0c3RydWN0IGNwdSAqcCA9IGt6YWxsb2Nfb2JqKCpwKTtcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmMtMzk2LVx0XHRpZiAoIXApXG4tLVxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jPTExMjA9c3RhdGljIGludCBqaXRfcHJlcGFyZV9maW5hbF9tZW1fYWxsb2Moc3RydWN0IGppdF9jb250ZXh0ICpjdHgpXG4tLVxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jLTExMzEtXHRpZiAoY3R4LVx1MDAzZW5lZWRfZXh0cmFfcGFzcykge1xuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jOjExMzI6XHRcdGN0eC1cdTAwM2VqaXRfZGF0YSA9IGt6YWxsb2Nfb2JqKCpjdHgtXHUwMDNlaml0X2RhdGEpO1xuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jLTExMzMtXHRcdGlmICghY3R4LVx1MDAzZWppdF9kYXRhKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYz0yMjA9bG9jb21vX2luaXRfb25lX2NoaWxkKHN0cnVjdCBsb2NvbW8gKmxjaGlwLCBzdHJ1Y3QgbG9jb21vX2Rldl9pbmZvICppbmZvKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0yMjQtXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM6MjI1Olx0ZGV2ID0ga3phbGxvY19vYmooc3RydWN0IGxvY29tb19kZXYpO1xuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTIyNi1cdGlmICghZGV2KSB7XG4tLVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jPTM1Nj1fX2xvY29tb19wcm9iZShzdHJ1Y3QgZGV2aWNlICptZSwgc3RydWN0IHJlc291cmNlICptZW0sIGludCBpcnEpXG4tLVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTM2Mi1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYzozNjM6XHRsY2hpcCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb2NvbW8pO1xuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTM2NC1cdGlmICghbGNoaXApXG4tLVxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jPTczMz1zYTExMTFfaW5pdF9vbmVfY2hpbGQoc3RydWN0IHNhMTExMSAqc2FjaGlwLCBzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCxcbi0tXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtNzM5LVxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jOjc0MDpcdGRldiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBzYTExMTFfZGV2KTtcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYy03NDEtXHRpZiAoIWRldikge1xuLS1cbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jPTE3OD1zdGF0aWMgaW50IHNjb29wX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmMtMTg3LVxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmM6MTg4Olx0ZGV2cHRyID0ga3phbGxvY19vYmooc3RydWN0IHNjb29wX2Rldik7XG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYy0xODktXHRpZiAoIWRldnB0cilcbi0tXG5hcmNoL2FybS9rZXJuZWwvc21wLmM9MTA4PXN0YXRpYyBpbnQgc2Vjb25kYXJ5X2JpZ2xpdHRsZV9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUpXG4tLVxuYXJjaC9hcm0va2VybmVsL3NtcC5jLTExMC1cdGlmICghY3B1X3Z0YWJsZVtjcHVdKVxuYXJjaC9hcm0va2VybmVsL3NtcC5jOjExMTpcdFx0Y3B1X3Z0YWJsZVtjcHVdID0ga3phbGxvY19vYmooKmNwdV92dGFibGVbY3B1XSk7XG5hcmNoL2FybS9rZXJuZWwvc21wLmMtMTEyLVxuLS1cbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmM9MTY5PXN0YXRpYyBpbnQgX19pbml0IHZkc29faW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmMtMTgxLVx0LyogQWxsb2NhdGUgdGhlIFZEU08gdGV4dCBwYWdlbGlzdCAqL1xuYXJjaC9hcm0va2VybmVsL3Zkc28uYzoxODI6XHR2ZHNvX3RleHRfcGFnZWxpc3QgPSBremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdGV4dF9wYWdlcyk7XG5hcmNoL2FybS9rZXJuZWwvdmRzby5jLTE4My1cdGlmICh2ZHNvX3RleHRfcGFnZWxpc3QgPT0gTlVMTClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jPTI2MT1pbnQgX19pbml0IGRjMjEyODVfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYy0yNjQtXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jOjI2NTpcdHJlcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcmVzb3VyY2UsIDIpO1xuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYy0yNjYtXHRpZiAoIXJlcykge1xuLS1cbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmM9Njk9c3RhdGljIGludCBfX2luaXQgZWJzYTI4NV9sZWRzX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jLTg2LVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYzo4NzpcdFx0bGVkID0ga3phbGxvY19vYmooKmxlZCk7XG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jLTg4LVx0XHRpZiAoIWxlZClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmM9NzIwPXN0YXRpYyBpbnQgX19pbml0IG5ldHdpbmRlcl9sZWRzX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmMtNzI5LVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jOjczMDpcdFx0bGVkID0ga3phbGxvY19vYmooKmxlZCk7XG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmMtNzMxLVx0XHRpZiAoIWxlZClcbi0tXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM9NDczPXN0YXRpYyBpbnQgaW14X21tZGNfcGVyZl9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHZvaWQgX19pb21lbSAqbW1kY19iYXNlLFxuLS1cbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYy00NzktXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM6NDgwOlx0cG11X21tZGMgPSBremFsbG9jX29iaigqcG11X21tZGMpO1xuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jLTQ4MS1cdGlmICghcG11X21tZGMpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM9MTE0PXN0YXRpYyB2b2lkIF9faW5pdCBpMmNfcXVpcmsodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMtMTI5LVxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jOjEzMDpcdFx0bmV3X2NvbXBhdCA9IGt6YWxsb2Nfb2JqKCpuZXdfY29tcGF0KTtcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYy0xMzEtXG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYz0xNjM9c3RhdGljIHZvaWQgX19pbml0IGFybWFkYV8zNzVfMzgwX2NvaGVyZW5jeV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYy0xODctXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jOjE4ODpcdFx0cCA9IGt6YWxsb2Nfb2JqKCpwKTtcbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmMtMTg5LVx0XHRwLVx1MDAzZW5hbWUgPSBrc3RyZHVwKFwmIzM0O2FybSxpby1jb2hlcmVudFwmIzM0OywgR0ZQX0tFUk5FTCk7XG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYz0xNDg9c3RhdGljIGludCBfX2luaXQgbXZlYnVfc29jX2RldmljZSh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmMtMTU2LVxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYzoxNTc6XHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmMtMTU4LVx0aWYgKCFzb2NfZGV2X2F0dHIpXG4tLVxuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYz0zODA9c3RhdGljIHZvaWQgX19pbml0IG14c19tYWNoaW5lX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jLTM4OS1cbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmM6MzkwOlx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jLTM5MS1cdGlmICghc29jX2Rldl9hdHRyKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmM9Mjk0PXN0YXRpYyBpbnQgX19pbml0IG9tYXAxX3N5c3RlbV9kbWFfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmMtMzIxLVxuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYzozMjI6XHRkID0ga3phbGxvY19vYmooKmQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYy0zMjMtXHRpZiAoIWQpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmM9MjkyPXN0YXRpYyB2b2lkIG9tYXBfbWNic3BfcmVnaXN0ZXJfYm9hcmRfY2ZnKHN0cnVjdCByZXNvdXJjZSAqcmVzLCBpbnQgcmVzX2NvdW50LFxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYy0yOTYtXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmM6Mjk3Olx0b21hcF9tY2JzcF9kZXZpY2VzID0ga3phbGxvY19vYmpzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgc2l6ZSk7XG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMtMjk4LVx0aWYgKCFvbWFwX21jYnNwX2RldmljZXMpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmM9NTE9c3RhdGljIGludCBfX2luaXQgb21hcDFfZG1fdGltZXJfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYy0xMjctXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmM6MTI4Olx0XHRwZGF0YSA9IGt6YWxsb2Nfb2JqKCpwZGF0YSk7XG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmMtMTI5LVx0XHRpZiAoIXBkYXRhKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmM9MjMwPXZvaWQgb21hcDJ4eHhfY2xrdF92cHNfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jLTIzOS1cbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jOjI0MDpcdGh3ID0ga3phbGxvY19vYmooKmh3KTtcbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jLTI0MS1cdGlmICghaHcpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jPTc4Nj12b2lkIF9faW5pdCBvbWFwX3NvY19kZXZpY2VfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYy03OTAtXG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmM6NzkxOlx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMtNzkyLVx0aWYgKCFzb2NfZGV2X2F0dHIpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jPTEzMT1zdGF0aWMgaW50IG9tYXBfZGV2aWNlX2J1aWxkX2Zyb21fZHQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmMtMTU4LVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jOjE1OTpcdGh3bW9kcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3Qgb21hcF9od21vZCAqLCBvaF9jbnQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jLTE2MC1cdGlmICghaHdtb2RzKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM9MzM4MT1zdGF0aWMgaW50IG9tYXBfaHdtb2RfYWxsb2NhdGVfbW9kdWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG9tYXBfaHdtb2QgKm9oLFxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTMzOTQtXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozMzk1Olx0c3lzYyA9IGt6YWxsb2Nfb2JqKCpzeXNjKTtcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTMzOTYtXHRpZiAoIXN5c2MpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzQyNC1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNm9oLVx1MDAzZXNsYXZlX3BvcnRzKSkge1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzQyNTpcdFx0b2kgPSBremFsbG9jX29iaigqb2kpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzQyNi1cdFx0aWYgKCFvaSlcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYz0zNTEzPWludCBvbWFwX2h3bW9kX2luaXRfbW9kdWxlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTI3LVx0aWYgKCFvaCkge1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzUyODpcdFx0b2ggPSBremFsbG9jX29iaigqb2gpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzUyOS1cdFx0aWYgKCFvaClcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTM4LVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzUzOTpcdFx0b2gtXHUwMDNlY2xhc3MgPSBremFsbG9jX29iaigqb2gtXHUwMDNlY2xhc3MpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzU0MC1cdFx0aWYgKCFvaC1cdTAwM2VjbGFzcykge1xuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYz0zNzk9c3RhdGljIGludCBfX2luaXQgYW14M19pZGxlX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpjcHVfbm9kZSwgaW50IGNwdSlcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmMtNDEyLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jOjQxMzpcdGlkbGVfc3RhdGVzID0ga3phbGxvY19vYmpzKCppZGxlX3N0YXRlcywgc3RhdGVfY291bnQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jLTQxNC1cdGlmICghaWRsZV9zdGF0ZXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYz0zMD1zdGF0aWMgdm9pZCBfX2luaXQgc3Jfc2V0X252YWx1ZXMoc3RydWN0IG9tYXBfdm9sdF9kYXRhICp2b2x0X2RhdGEsXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYy00MS1cbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmM6NDI6XHRudmFsdWVfdGFibGUgPSBremFsbG9jX29ianMoKm52YWx1ZV90YWJsZSwgY291bnQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYy00My1cdGlmICghbnZhbHVlX3RhYmxlKVxuLS1cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYz0xMzk9c3RhdGljIGludCBfX2luaXQgcGNpZV9zZXR1cChzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTE3MS1cdCAqL1xuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jOjE3MjpcdHJlcyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByZXNvdXJjZSk7XG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtMTczLVx0aWYgKCFyZXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jPTQ2Nj1zdGF0aWMgaW50IF9faW5pdCBwY2lfc2V0dXAoc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKVxuLS1cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy00OTItXHQgKi9cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYzo0OTM6XHRyZXMgPSBremFsbG9jX29iaihzdHJ1Y3QgcmVzb3VyY2UpO1xuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTQ5NC1cdGlmICghcmVzKVxuLS1cbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmM9Njg5PXN0YXRpYyBzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKl9faW5pdCBlY2FyZF9hbGxvY19jYXJkKGludCB0eXBlLCBpbnQgc2xvdClcbi0tXG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jLTY5NC1cbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmM6Njk1Olx0ZWMgPSBremFsbG9jX29iaihlY2FyZF90KTtcbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmMtNjk2LVx0aWYgKCFlYykge1xuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM9OTM9aW50IF9faW5pdCBzYTExeHhfY2xrX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEwOS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM6MTEwOlx0aHcgPSBremFsbG9jX29iaigqaHcpO1xuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMTEtXHRpZiAoIWh3KVxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTMxLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYzoxMzI6XHRodyA9IGt6YWxsb2Nfb2JqKCpodyk7XG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEzMy1cdGlmICghaHcpXG4tLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jPTMxNz1pbnQgX19pbml0IHNhMTF4MF9yZWdpc3Rlcl9maXhlZF9yZWd1bGF0b3IoaW50IG4sXG4tLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jLTMyMy1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYzozMjQ6XHRjZmctXHUwMDNlaW5pdF9kYXRhID0gaWQgPSBremFsbG9jX29iaigqY2ZnLVx1MDAzZWluaXRfZGF0YSk7XG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmMtMzI1LVx0aWYgKCFjZmctXHUwMDNlaW5pdF9kYXRhKVxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmM9MjI1PXN0YXRpYyBpbnQgbmVwb25zZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KVxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMtMjc4LVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYzoyNzk6XHRkID0ga3phbGxvY19vYmooKmQpO1xuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYy0yODAtXHRpZiAoIWQpIHtcbi0tXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYz0xNDE9c3RhdGljIGludCBfX2luaXQgcmNhcl9nZW4yX3JlZ3VsYXRvcl9xdWlyayh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jLTE2Ni1cbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jOjE2NzpcdFx0cXVpcmsgPSBremFsbG9jX29iaigqcXVpcmspO1xuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmMtMTY4LVx0XHRpZiAoIXF1aXJrKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9MzkzPXN0YXRpYyBpbnQgdmVfc3BjX3BvcHVsYXRlX29wcHModWludDMyX3QgY2x1c3Rlcilcbi0tXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy0zOTctXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYzozOTg6XHRvcHBzID0ga3phbGxvY19vYmpzKCpvcHBzLCBNQVhfT1BQUyk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy0zOTktXHRpZiAoIW9wcHMpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9NDQyPWludCBfX2luaXQgdmVfc3BjX2luaXQodm9pZCBfX2lvbWVtICpiYXNlYWRkciwgdTMyIGExNV9jbHVzaWQsIGludCBpcnEpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNDQ0LVx0aW50IHJldDtcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jOjQ0NTpcdGluZm8gPSBremFsbG9jX29iaigqaW5mbyk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy00NDYtXHRpZiAoIWluZm8pXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9NTIzPXN0YXRpYyBzdHJ1Y3QgY2xrICp2ZV9zcGNfY2xrX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmNwdV9kZXYpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNTI3LVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM6NTI4Olx0c3BjID0ga3phbGxvY19vYmooKnNwYyk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy01MjktXHRpZiAoIXNwYylcbi0tXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYz0xMjM9c3RhdGljIHZvaWQgX19pbml0IHZlcnNhdGlsZV9kdF9wY2lfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jLTE0NC1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jOjE0NTpcdG5ld3Byb3AgPSBremFsbG9jX29iaigqbmV3cHJvcCk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYy0xNDYtXHRpZiAoIW5ld3Byb3ApXG4tLVxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jPTEwNT1zdGF0aWMgdm9pZCBfX2luaXQgenlucV9pbml0X21hY2hpbmUodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmMtMTEwLVxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jOjExMTpcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jLTExMi1cdGlmICghc29jX2Rldl9hdHRyKVxuLS1cbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmM9NTAzPXN0YXRpYyBfX2luaXQgaW50IGwyeDBfcG11X2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jLTUwOS1cbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmM6NTEwOlx0bDJ4MF9wbXUgPSBremFsbG9jX29iaigqbDJ4MF9wbXUpO1xuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYy01MTEtXHRpZiAoIWwyeDBfcG11KSB7XG4tLVxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYz0zMTU9c3RhdGljIGludCBfX2luaXQgX191bmlwaGllcl9jYWNoZV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4tLVxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYy0zNDQtXG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jOjM0NTpcdGRhdGEgPSBremFsbG9jX29iaigqZGF0YSk7XG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jLTM0Ni1cdGlmICghZGF0YSlcbi0tXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jPTUzMz1zdGF0aWMgdm9pZCAqX19kbWFfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqaGFuZGxlLFxuLS1cbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtNTYwLVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYzo1NjE6XHRidWYgPSBremFsbG9jX29iaigqYnVmLFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy01NjItXHRcdFx0ICBnZnAgXHUwMDI2IH4oX19HRlBfRE1BIHwgX19HRlBfRE1BMzIgfCBfX0dGUF9ISUdITUVNKSk7XG4tLVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYz0xNDg3PWFybV9pb21tdV9jcmVhdGVfbWFwcGluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYmFzZSwgdTY0IHNpemUpXG4tLVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy0xNTA2LVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYzoxNTA3Olx0bWFwcGluZyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkbWFfaW9tbXVfbWFwcGluZyk7XG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTE1MDgtXHRpZiAoIW1hcHBpbmcpXG4tLVxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jPTMxNj1pbnQgX19pbml0IGFyY2hfeGVuX3VucG9wdWxhdGVkX2luaXQoc3RydWN0IHJlc291cmNlICoqcmVzKVxuLS1cbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zNDMtXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmM6MzQ0Olx0cmVncyA9IGt6YWxsb2Nfb2JqcygqcmVncywgbnJfcmVnKTtcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zNDUtXHRpZiAoIXJlZ3MpIHtcbi0tXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzg3LVxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jOjM4ODpcdFx0dG1wX3JlcyA9IGt6YWxsb2Nfb2JqKCp0bXBfcmVzKTtcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zODktXHRcdGlmICghdG1wX3Jlcykge1xuLS1cbmFyY2gvYXJtL3hlbi9wMm0uYz0xNTA9Ym9vbCBfX3NldF9waHlzX3RvX21hY2hpbmVfbXVsdGkodW5zaWduZWQgbG9uZyBwZm4sXG4tLVxuYXJjaC9hcm0veGVuL3AybS5jLTE3OC1cbmFyY2gvYXJtL3hlbi9wMm0uYzoxNzk6XHRwMm1fZW50cnkgPSBremFsbG9jX29iaigqcDJtX2VudHJ5LCBHRlBfTk9XQUlUKTtcbmFyY2gvYXJtL3hlbi9wMm0uYy0xODAtXHRpZiAoIXAybV9lbnRyeSlcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmM9Njg9c3RhdGljIGludCBfX2luaXQgX192ZHNvX2luaXQoZW51bSB2ZHNvX2FiaSBhYmkpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jLTgzLVxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jOjg0Olx0dmRzb19wYWdlbGlzdCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX2luZm9bYWJpXS52ZHNvX3BhZ2VzKTtcbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYy04NS1cdGlmICh2ZHNvX3BhZ2VsaXN0ID09IE5VTEwpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmM9NDgwPXN0YXRpYyBpbnQgc2hhcmVfcGZuX2h5cCh1NjQgcGZuKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTQ5Mi1cbmFyY2gvYXJtNjQva3ZtL21tdS5jOjQ5MzpcdHRoaXMgPSBremFsbG9jX29iaigqdGhpcyk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYy00OTQtXHRpZiAoIXRoaXMpIHtcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz05ODE9aW50IGt2bV9pbml0X3N0YWdlMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1bnNpZ25lZCBsb25nIHR5cGUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTAwNy1cbmFyY2gvYXJtNjQva3ZtL21tdS5jOjEwMDg6XHRwZ3QgPSBremFsbG9jX29iaigqcGd0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMTAwOS1cdGlmICghcGd0KVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jPTExODA9aW50IHRvcHVwX2h5cF9tZW1jYWNoZShzdHJ1Y3Qga3ZtX2h5cF9tZW1jYWNoZSAqbWMsIHVuc2lnbmVkIGxvbmcgbWluX3BhZ2VzKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExODUtXHRpZiAoIW1jLVx1MDAzZW1hcHBpbmcpIHtcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjExODY6XHRcdG1jLVx1MDAzZW1hcHBpbmcgPSBremFsbG9jX29iaihzdHJ1Y3QgcGt2bV9tYXBwaW5nLFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTE4Ny1cdFx0XHRcdFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jPTI1MTA9aW50IF9faW5pdCBrdm1fbW11X2luaXQodTMyIGh5cF92YV9iaXRzKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI1NDMtXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoyNTQ0Olx0aHlwX3BndGFibGUgPSBremFsbG9jX29iaigqaHlwX3BndGFibGUpO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMjU0NS1cdGlmICghaHlwX3BndGFibGUpIHtcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xMzI4PWludCBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTMzMy1cdGlmICghdmNwdS1cdTAwM2VhcmNoLnZuY3JfdGxiKSB7XG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxMzM0Olx0XHRzdHJ1Y3Qgdm5jcl90bGIgKnZ0ID0ga3phbGxvY19vYmooKnZjcHUtXHUwMDNlYXJjaC52bmNyX3RsYixcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzMzUtXHRcdFx0XHRcdFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE3OTM9aW50IGt2bV9pbml0X252X3N5c3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE4MDItXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxODAzOlx0a3ZtLVx1MDAzZWFyY2guc3lzcmVnX21hc2tzID0ga3phbGxvY19vYmooKihrdm0tXHUwMDNlYXJjaC5zeXNyZWdfbWFza3MpLFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTgwNC1cdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jPTExNj1zdGF0aWMgc3RydWN0IGt2bV9wdGR1bXBfZ3Vlc3Rfc3RhdGUgKmt2bV9wdGR1bXBfcGFyc2VyX2NyZWF0ZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11KVxuLS1cbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jLTEyMS1cbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jOjEyMjpcdHN0ID0ga3phbGxvY19vYmooc3RydWN0IGt2bV9wdGR1bXBfZ3Vlc3Rfc3RhdGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYy0xMjMtXHRpZiAoIXN0KVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9MjA3PXN0YXRpYyBpbnQga3ZtX3ZnaWNfZGlzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IG5yX3NwaXMpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0yMTMtXHRkaXN0LVx1MDAzZWFjdGl2ZV9zcGlzID0gKGF0b21pY190KUFUT01JQ19JTklUKDApO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzoyMTQ6XHRkaXN0LVx1MDAzZXNwaXMgPSBremFsbG9jX29ianMoc3RydWN0IHZnaWNfaXJxLCBucl9zcGlzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0yMTUtXHRpZiAoIWRpc3QtXHUwMDNlc3Bpcylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jPTMxNj1zdGF0aWMgaW50IHZnaWNfYWxsb2NhdGVfcHJpdmF0ZV9pcnFzX2xvY2tlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB0eXBlKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMzMxLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzozMzI6XHR2Z2ljX2NwdS1cdTAwM2Vwcml2YXRlX2lycXMgPSBremFsbG9jX29ianMoc3RydWN0IHZnaWNfaXJxLFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0zMzMtXHRcdFx0XHRcdCAgICAgIG51bV9wcml2YXRlX2lycXMsXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmM9MTQyPWludCBrdm1fdmdpY19zZXR1cF9kZWZhdWx0X2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYy0xNDgtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYzoxNDk6XHRlbnRyaWVzID0ga3phbGxvY19vYmpzKCplbnRyaWVzLCBuciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jLTE1MC1cdGlmICghZW50cmllcylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9NzY9c3RhdGljIHN0cnVjdCB2Z2ljX2lycSAqdmdpY19hZGRfbHBpKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGludGlkLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy04Ny1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzo4ODpcdGlycSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB2Z2ljX2lycSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy04OS1cdGlmICghaXJxKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz05NzE9c3RhdGljIGludCB2Z2ljX2l0c19hbGxvY19jb2xsZWN0aW9uKHN0cnVjdCB2Z2ljX2l0cyAqaXRzLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy05NzYtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6OTc3Olx0Y29sbGVjdGlvbiA9IGt6YWxsb2Nfb2JqKCpjb2xsZWN0aW9uLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTk3OC1cdGlmICghY29sbGVjdGlvbilcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTAxNT1zdGF0aWMgc3RydWN0IGl0c19pdGUgKnZnaWNfaXRzX2FsbG9jX2l0ZShzdHJ1Y3QgaXRzX2RldmljZSAqZGV2aWNlLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMDIwLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjEwMjE6XHRpdGUgPSBremFsbG9jX29iaigqaXRlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTEwMjItXHRpZiAoIWl0ZSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTE0Mj1zdGF0aWMgc3RydWN0IGl0c19kZXZpY2UgKnZnaWNfaXRzX2FsbG9jX2RldmljZShzdHJ1Y3QgdmdpY19pdHMgKml0cyxcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTE0Ny1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzoxMTQ4Olx0ZGV2aWNlID0ga3phbGxvY19vYmooKmRldmljZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMTQ5LVx0aWYgKCFkZXZpY2UpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTE4NTU9c3RhdGljIGludCB2Z2ljX2l0c19jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTE4NjItXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6MTg2MzpcdGl0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB2Z2ljX2l0cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xODY0LVx0aWYgKCFpdHMpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYz04ODY9c3RhdGljIGludCB2Z2ljX3YzX2FsbG9jX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCB1aW50MzJfdCBpbmRleCxcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTkzMS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM6OTMyOlx0cmRyZWcgPSBremFsbG9jX29iaigqcmRyZWcsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTkzMy1cdGlmICghcmRyZWcpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmM9MjQyPWludCB2Z2ljX3Y0X2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jLTI1OC1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jOjI1OTpcdGRpc3QtXHUwMDNlaXRzX3ZtLnZwZXMgPSBremFsbG9jX29ianMoKmRpc3QtXHUwMDNlaXRzX3ZtLnZwZXMsIG5yX3ZjcHVzLFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmMtMjYwLVx0XHRcdFx0XHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yMDgwPXN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjEwMS1cdGlmICghaml0X2RhdGEpIHtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjIxMDI6XHRcdGppdF9kYXRhID0ga3phbGxvY19vYmooKmppdF9kYXRhKTtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIxMDMtXHRcdGlmICghaml0X2RhdGEpXG4tLVxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmM9MTc9c3RhdGljIGludCBfX2luaXQgdmRzb19pbml0KHZvaWQpXG4tLVxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmMtMjItXHR2ZHNvX3BhZ2VsaXN0ID1cbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jOjIzOlx0XHRremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdmRzb19wYWdlcyk7XG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYy0yNC1cdGlmICh1bmxpa2VseSh2ZHNvX3BhZ2VsaXN0ID09IE5VTEwpKSB7XG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM9NDY2PXN0YXRpYyBpbnQgX19pbml0IGFkZF9sZWdhY3lfaXNhX2lvKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDcyLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM6NDczOlx0cmFuZ2UgPSBremFsbG9jX29iaigqcmFuZ2UsIEdGUF9BVE9NSUMpO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDc0LVx0aWYgKCFyYW5nZSlcbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jPTQ1PXN0YXRpYyBpbnQgX19pbml0IGluaXRfdmRzbyh2b2lkKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmMtNTUtXHR2ZHNvX2luZm8uY29kZV9tYXBwaW5nLnBhZ2VzID1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmM6NTY6XHRcdGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX2luZm8uc2l6ZSAvIFBBR0VfU0laRSk7XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jLTU3LVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYz02MTQ9c3RhdGljIGludCBrdm1fZWlvaW50Y19jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTYyNC1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYzo2MjU6XHRzID0ga3phbGxvY19vYmooc3RydWN0IGxvb25nYXJjaF9laW9pbnRjKTtcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy02MjYtXHRpZiAoIXMpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM9Mzk0PXN0YXRpYyBpbnQga3ZtX2lwaV9jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtNDExLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM6NDEyOlx0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb29uZ2FyY2hfaXBpKTtcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTQxMy1cdGlmICghcylcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTk5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUga3phbGxvY19vYmogTWFjcm8qKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgdGhpcyBga3phbGxvY19vYmpgIG1hY3JvLCBhbmQgaXQmIzM5O3MgcmluZ2luZyBhIGJlbGwuIEl0IHNlZW1zIGxpa2Ugc29tZXRoaW5nIGZhaXJseSByZWNlbnQsIG1heWJlIGEgbmV3IGFkZGl0aW9uIHRvIHRoZSBrZXJuZWwsIG9yIHBvdGVudGlhbGx5IGEgc2lkZSBlZmZlY3Qgb2Ygc29tZSBzeXprYWxsZXIgd29yayBJJiMzOTt2ZSBzZWVuLiBObywgd2FpdCwgY2hlY2tpbmcgYERvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3RgIGFuZCBgRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0YCBzaG93cyBpdCYjMzk7cyBhIGRpcmVjdCByZXBsYWNlbWVudCBmb3IgdXNpbmcgYGt6YWxsb2Moc2l6ZW9mKCpwdHIpLCAuLi4pYC4gSW50ZXJlc3RpbmcuIEkmIzM5O20gbm90aW5nIGEgY2hhbmdlIGluIGEgcGF0Y2ggdGhhdCYjMzk7cyBzdWJzdGl0dXRpbmcgYGt6YWxsb2Nfb2JqKCp0bXBsKWAgd2l0aCBga3phbGxvY19vYmooKnRtcGwsIEdGUF9LRVJORUxfQUNDT1VOVClgLiBUaGF0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgYWRkaW5nIGEgc2Vjb25kIGFyZ3VtZW50LiBXYWl0LCBub3cgSSYjMzk7bSBzZWNvbmQtZ3Vlc3NpbmcgbXlzZWxmLiBEb2VzIGBremFsbG9jX29iamAgYWN0dWFsbHkgdGFrZSBvbmUgb3IgdHdvIGFyZ3VtZW50cz8gSSBiZXR0ZXIgY2hlY2sgdGhlIGRlZmluaXRpb24gdG8gYmUgc3VyZS4gVGltZSB0byBoZWFkIG92ZXIgdG8gYGluY2x1ZGUvbGludXgvc2xhYi5oYCBhbmQgdGFrZSBhIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTQ6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBremFsbG9jX29iaiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NsYWIuaD0xMDcwPXZvaWQgKmttYWxsb2Nfbm9sb2NrKHNpemVfdCBzaXplLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBub2RlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTUxLS8qIEFsbCBremFsbG9jIGFsaWFzZXMgZm9yIGttYWxsb2NfKG9ianxvYmpzfGZsZXgpLiAqL1xuaW5jbHVkZS9saW51eC9zbGFiLmg6MTE1MjojZGVmaW5lIGt6YWxsb2Nfb2JqKFAsIC4uLikgXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNTMtXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIDEpXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTU0OiNkZWZpbmUga3phbGxvY19vYmpzKFAsIENPVU5ULCAuLi4pIFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTU1LVx0X19hbGxvY19vYmpzKGt6YWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCBDT1VOVClcbi0tXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaD0yMDA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaGVhZl9zaXplKHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcbi0tXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMTAtXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaDoyMTE6I2RlZmluZSBremFsbG9jX29iaihQLCAuLi4pIFxcXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMTItXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIDEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTQ6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI5MDYKCQkJCQkJCW91dHB1dDogODIKCQkJCQkJCXRob3VnaHRzOiAxODM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBOZXRmaWx0ZXIgTWVtb3J5IEFjY291bnRpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCB5ZWFoLCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgcHJpbWFyeSB0aGluZyBoYXBwZW5pbmcgaGVyZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGBHRlBfS0VSTkVMX0FDQ09VTlRgIGFjcm9zcyBhIGJ1bmNoIG9mIG1lbW9yeSBhbGxvY2F0aW9ucyB3aXRoaW4gbmV0ZmlsdGVyLCByZXBsYWNpbmcgdGhlIG1vcmUgZ2VuZXJpYyBgR0ZQX0tFUk5FTGAgb3IgYEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk5gLiAgYGt6YWxsb2Nfb2JqYCB0YWtlcyBgUGAgYW5kIG9wdGlvbmFsIGBfX1ZBX0FSR1NfX2AgZm9yIEdGUCBmbGFncy4KCk15IGluaXRpYWwgdGhvdWdodCBpcywgZG9lcyB0aGlzIGFmZmVjdCB0aGUgYWN0dWFsICpmdW5jdGlvbmFsaXR5Kj8gIE5vLCBtZW1vcnkgYWNjb3VudGluZyBmdW5kYW1lbnRhbGx5IGRvZXNuJiMzOTt0IGNoYW5nZSB0aGUgZXhlY3V0aW9uIGZsb3cuICBJdCYjMzk7cyBhYm91dCB0cmFja2luZyB3aGVyZSB0aGUgbWVtb3J5IGlzIGdvaW5nLCBub3QgaG93IHRoZSBjb2RlIGFjdHVhbGx5ICp3b3JrcyosIGFzaWRlIGZyb20gcG90ZW50aWFsbHkgdHJpZ2dlcmluZyBPT00gY29uZGl0aW9ucyBvciBjZ3JvdXAgbGltaXRzIGlmIHRoZXkgYXJlIGV4Y2VlZGVkLgoKVGhlIHR5cGljYWwgcmVhc29uIHRvIGFkZCB0aGlzIGtpbmQgb2YgYWNjb3VudGluZyBpcyBzZWN1cml0eSBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudDogcHJldmVudGluZyB1bnByaXZpbGVnZWQgdXNlcnMgZnJvbSBob2dnaW5nIG1lbW9yeSBhbmQgbWFraW5nIHN1cmUgdXNhZ2UgaXMgdHJhY2tlZCBhZ2FpbnN0IGNncm91cHMuICBCdXQgZG9lcyBpdCAqaW50cm9kdWNlKiBhbnkgbmV3IGxvZ2ljPyBOb3BlLCBpdCYjMzk7cyBqdXN0IGEgR0ZQIGZsYWcgY2hhbmdlLiBMZXQmIzM5O3MgbWFrZSBzdXJlLCB0aG91Z2gsIGFuZCBsb29rIGF0IHRoZSBhY3R1YWwgY29kZSBjaGFuZ2VzLiBJJiMzOTttIHNjYW5uaW5nIHRocm91Z2ggdGhlIGRpZmYuCgpZZXMsIEkmIzM5O20gc2VlaW5nIGEgcGF0dGVybiwgZXZlcnl3aGVyZS4gRXZlcnkgaW5zdGFuY2Ugb2YgYEdGUF9LRVJORUxgIGlzIGJlaW5nIHJlcGxhY2VkIHdpdGggYEdGUF9LRVJORUxfQUNDT1VOVGAuIEV2ZW4gd2hlcmUgYEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk5gIGlzIHNwZWNpZmllZCwgaXQgaXMgYmVpbmcgY29udmVydGVkIHRvIGBHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9OT1dBUk5gLiAgVGhlcmUgYXJlIG5vIG90aGVyIGNvZGUgY2hhbmdlcy4gIFRoZSBmdW5jdGlvbmFsIGJlaGF2aW9yIG9mIHRoZSBuZXRmaWx0ZXIgY29tcG9uZW50cyByZW1haW5zIHRoZSBzYW1lLiBUaGUgc2FtZSBvYmplY3RzIGFyZSBhbGxvY2F0ZWQgYW5kIHRoZSBzYW1lIGNvZGUgaXMgdXNlZCB0byByZWFkLCBtYW5pcHVsYXRlIGFuZCBtYW5hZ2UgdGhvc2Ugb2JqZWN0cy4KCkdpdmVuIHRoZSBwcm9tcHQsIGxldCYjMzk7cyBzZWUsIHNob3VsZCBJIGZ1enogaXQ/IFNpbmNlIHRoaXMgaXMgYSBwdXJlbHkgbWVjaGFuaWNhbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzLCBpdCBpcyB2ZXJ5IHVubGlrZWx5IHRvIGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcyB0aGF0IGZ1enppbmcgY291bGQgZmluZC4gSSYjMzk7bSBtYWtpbmcgYSBjaGFuZ2UgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4gSW4gdGhpcyBjYXNlLCBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuCgpJIGFtIG1ha2luZyBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjaGFuZ2VzIGluIHRoZSBwYXRjaC4gSSYjMzk7bSByZXZpZXdpbmcgdGhlIHByb3ZpZGVkIGRpZmZzIGFnYWluIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gbG9naWMgY2hhbmdlcyBoaWRkZW4uCgpPa2F5LCBJJiMzOTt2ZSBjaGVja2VkLiBUaGlzIGlzIGV4Y2x1c2l2ZWx5IGEgY2hhbmdlIHRvIHRoZSBHRlAgZmxhZ3MuICBJdCYjMzk7cyBub3Qgd29ydGggZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNDo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgY2hhbmdlcyBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyB0byBpbmNsdWRlIEdGUF9LRVJORUxfQUNDT1VOVCBhY3Jvc3MgdmFyaW91cyBuZXRmaWx0ZXIgbW9kdWxlcy4gVGhpcyBpcyBhIG1lY2hhbmljYWwgY2hhbmdlIGZvciBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgYW5kIGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbC4gVGhlcmVmb3JlLCBpdCBpcyBub3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgY2hhbmdlcyBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyB0byBpbmNsdWRlIEdGUF9LRVJORUxfQUNDT1VOVCBhY3Jvc3MgdmFyaW91cyBuZXRmaWx0ZXIgbW9kdWxlcy4gVGhpcyBpcyBhIG1lY2hhbmljYWwgY2hhbmdlIGZvciBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgYW5kIGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbC4gVGhlcmVmb3JlLCBpdCBpcyBub3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTQ6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE0OjU2OjIwLjM5ODIwOTc5OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MTY5ODY4MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBjaGFuZ2VzIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIHRvIGluY2x1ZGUgR0ZQX0tFUk5FTF9BQ0NPVU5UIGFjcm9zcyB2YXJpb3VzIG5ldGZpbHRlciBtb2R1bGVzLiBUaGlzIGlzIGEgbWVjaGFuaWNhbCBjaGFuZ2UgZm9yIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBhbmQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLiBUaGVyZWZvcmUsIGl0IGlzIG5vdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTQ6NTY6MjAuMzk4MjE1OTA5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU3Mzg1MDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZmNmN2Y5M2FjMWY1MmNhY2VlYzlhYWMzMjAyZWEzOTA4NmJjZjRjZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxNDo1NjoxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuY1xcbmluZGV4IDBiZjU0MTkzNmY2MDEuLjY0YjhmNmY5ODIxMTkgMTAwNjQ0XFxuLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuY1xcbisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmNcXG5AQCAtMTMwNCw3ICsxMzA0LDcgQEAgaW50IGVidF9yZWdpc3Rlcl90ZW1wbGF0ZShjb25zdCBzdHJ1Y3QgZWJ0X3RhYmxlICp0LCBpbnQgKCp0YWJsZV9pbml0KShzdHJ1Y3QgbmVcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHR0bXBsID0ga3phbGxvY19vYmooKnRtcGwpO1xcbitcXHR0bXBsID0ga3phbGxvY19vYmooKnRtcGwsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICghdG1wbCkge1xcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmVidF9tdXRleCk7XFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jXFxuaW5kZXggYWM3ZmViY2UwNzRmMS4uZTE1MmNmMzVkODU5NiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jXFxuQEAgLTIxNyw3ICsyMTcsNyBAQCBpbml0X21hcF9pcChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBiaXRtYXBfaXAgKm1hcCxcXG4gXFx0ICAgIHUzMiBmaXJzdF9pcCwgdTMyIGxhc3RfaXAsXFxuIFxcdCAgICB1MzIgZWxlbWVudHMsIHUzMiBob3N0cywgdTggbmV0bWFzaylcXG4ge1xcbi1cXHRtYXAtXFx1MDAzZW1lbWJlcnMgPSBiaXRtYXBfemFsbG9jKGVsZW1lbnRzLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcXG4rXFx0bWFwLVxcdTAwM2VtZW1iZXJzID0gYml0bWFwX3phbGxvYyhlbGVtZW50cywgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKTtcXG4gXFx0aWYgKCFtYXAtXFx1MDAzZW1lbWJlcnMpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0bWFwLVxcdTAwM2VmaXJzdF9pcCA9IGZpcnN0X2lwO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jXFxuaW5kZXggNTkyMWZkOWQyZGNhMC4uYTExNzkzNTIyMjBhNCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jXFxuQEAgLTMwMCw3ICszMDAsNyBAQCBzdGF0aWMgYm9vbFxcbiBpbml0X21hcF9pcG1hYyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBiaXRtYXBfaXBtYWMgKm1hcCxcXG4gXFx0ICAgICAgIHUzMiBmaXJzdF9pcCwgdTMyIGxhc3RfaXAsIHUzMiBlbGVtZW50cylcXG4ge1xcbi1cXHRtYXAtXFx1MDAzZW1lbWJlcnMgPSBiaXRtYXBfemFsbG9jKGVsZW1lbnRzLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcXG4rXFx0bWFwLVxcdTAwM2VtZW1iZXJzID0gYml0bWFwX3phbGxvYyhlbGVtZW50cywgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKTtcXG4gXFx0aWYgKCFtYXAtXFx1MDAzZW1lbWJlcnMpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0bWFwLVxcdTAwM2VmaXJzdF9pcCA9IGZpcnN0X2lwO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuY1xcbmluZGV4IGNhODc1Yzk4MjQyNDUuLjBhMDAyN2NkYjE5MzcgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmNcXG5AQCAtMjMxLDcgKzIzMSw3IEBAIHN0YXRpYyBib29sXFxuIGluaXRfbWFwX3BvcnQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgYml0bWFwX3BvcnQgKm1hcCxcXG4gXFx0ICAgICAgdTE2IGZpcnN0X3BvcnQsIHUxNiBsYXN0X3BvcnQpXFxuIHtcXG4tXFx0bWFwLVxcdTAwM2VtZW1iZXJzID0gYml0bWFwX3phbGxvYyhtYXAtXFx1MDAzZWVsZW1lbnRzLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcXG4rXFx0bWFwLVxcdTAwM2VtZW1iZXJzID0gYml0bWFwX3phbGxvYyhtYXAtXFx1MDAzZWVsZW1lbnRzLCBHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9OT1dBUk4pO1xcbiBcXHRpZiAoIW1hcC1cXHUwMDNlbWVtYmVycylcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHRtYXAtXFx1MDAzZWZpcnN0X3BvcnQgPSBmaXJzdF9wb3J0O1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcXG5pbmRleCAwYTg2YTE3MGJhOTA2Li4yOGFjOGNiYTNkNjhjIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1xcbkBAIC0xMDg1LDcgKzEwODUsNyBAQCBzdGF0aWMgaW50IGlwX3NldF9jcmVhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG4gXFx0LyogRmlyc3QsIGFuZCB3aXRob3V0IGFueSBsb2NrcywgYWxsb2NhdGUgYW5kIGluaXRpYWxpemVcXG4gXFx0ICogYSBub3JtYWwgYmFzZSBzZXQgc3RydWN0dXJlLlxcbiBcXHQgKi9cXG4tXFx0c2V0ID0ga3phbGxvY19vYmooKnNldCk7XFxuK1xcdHNldCA9IGt6YWxsb2Nfb2JqKCpzZXQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICghc2V0KVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnNldC1cXHUwMDNlbG9jayk7XFxuQEAgLTExNDMsNyArMTE0Myw3IEBAIHN0YXRpYyBpbnQgaXBfc2V0X2NyZWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbiBcXHRcXHRcXHQvKiBXcmFwYXJvdW5kICovXFxuIFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuLVxcdFxcdGxpc3QgPSBrdnphbGxvY19vYmpzKHN0cnVjdCBpcF9zZXQgKiwgaSk7XFxuK1xcdFxcdGxpc3QgPSBrdnphbGxvY19vYmpzKHN0cnVjdCBpcF9zZXQgKiwgaSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0XFx0aWYgKCFsaXN0KVxcbiBcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcdFxcdC8qIG5mbmwgbXV0ZXggaXMgaGVsZCwgYm90aCBsaXN0cyBhcmUgdmFsaWQgKi9cXG5AQCAtMjM5Nyw3ICsyMzk3LDggQEAgaXBfc2V0X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4gXFx0aWYgKGluc3QtXFx1MDAzZWlwX3NldF9tYXggXFx1MDAzZT0gSVBTRVRfSU5WQUxJRF9JRClcXG4gXFx0XFx0aW5zdC1cXHUwMDNlaXBfc2V0X21heCA9IElQU0VUX0lOVkFMSURfSUQgLSAxO1xcbiBcXG4tXFx0bGlzdCA9IGt2emFsbG9jX29ianMoc3RydWN0IGlwX3NldCAqLCBpbnN0LVxcdTAwM2VpcF9zZXRfbWF4KTtcXG4rXFx0bGlzdCA9IGt2emFsbG9jX29ianMoc3RydWN0IGlwX3NldCAqLCBpbnN0LVxcdTAwM2VpcF9zZXRfbWF4LFxcbitcXHRcXHRcXHQgICAgIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICghbGlzdClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdGluc3QtXFx1MDAzZWlzX2RlbGV0ZWQgPSBmYWxzZTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcXG5pbmRleCA4MGNhNTIzZjMwNGJiLi4zOWRlYzkyODUwNTJhIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXFxuQEAgLTc2OCw3ICs3NjgsNyBAQCBtdHlwZV9yZXNpemUoc3RydWN0IGlwX3NldCAqc2V0LCBib29sIHJldHJpZWQpXFxuIFxcdGludCByZXQ7XFxuIFxcbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuLVxcdHRtcCA9IGttYWxsb2MoZHNpemUsIEdGUF9LRVJORUwpO1xcbitcXHR0bXAgPSBrbWFsbG9jKGRzaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIXRtcClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuICNlbmRpZlxcbkBAIC0xNzU0LDcgKzE3NTQsNyBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXFxuIFxcdFxcdHNpemVvZihzdHJ1Y3QgSVBTRVRfVE9LRU4oSFRZUEUsIDYpKSA6XFxuIFxcdFxcdHNpemVvZihzdHJ1Y3QgSVBTRVRfVE9LRU4oSFRZUEUsIDQpKTtcXG4gI2VuZGlmXFxuLVxcdGggPSBremFsbG9jKGhzaXplLCBHRlBfS0VSTkVMKTtcXG4rXFx0aCA9IGt6YWxsb2MoaHNpemUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICghaClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC0xNzc0LDcgKzE3NzQsNyBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXFxuIFxcdFxcdGdvdG8gZnJlZV90O1xcbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkrKykge1xcbi1cXHRcXHRuZXRzID0ga3phbGxvY19vYmooKm5ldHMpO1xcbitcXHRcXHRuZXRzID0ga3phbGxvY19vYmooKm5ldHMsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdFxcdGlmICghbmV0cykge1xcbiBcXHRcXHRcXHR3aGlsZSAoaSBcXHUwMDNlIDApXFxuIFxcdFxcdFxcdFxcdGtmcmVlKHJjdV9kZXJlZmVyZW5jZV9yYXcoaC1cXHUwMDNlcm5ldHNbLS1pXSkpO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1xcbmluZGV4IGYwNzAwODg3NDJkNjAuLjc1MGZlMzgyNjFjMzcgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNcXG5AQCAtNjAwLDcgKzYwMCw3IEBAIGluaXRfbGlzdF9zZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsIHUzMiBzaXplKVxcbiB7XFxuIFxcdHN0cnVjdCBsaXN0X3NldCAqbWFwO1xcbiBcXG4tXFx0bWFwID0ga3phbGxvY19vYmooKm1hcCk7XFxuK1xcdG1hcCA9IGt6YWxsb2Nfb2JqKCptYXAsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICghbWFwKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuY1xcbmluZGV4IDg1NDg3ZjkyYWY1MDYuLmIwOWMxNzZhNTIxZDEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmNcXG5AQCAtNjkxLDcgKzY5MSw3IEBAIHN0cnVjdCBuZl9jb25uY291bnRfZGF0YSAqbmZfY29ubmNvdW50X2luaXQoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQga2V5bGVuXFxuIFxcdCAgICBrZXlsZW4gPT0gMClcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuIFxcbi1cXHRkYXRhID0ga3Z6YWxsb2Nfb2JqKCpkYXRhKTtcXG4rXFx0ZGF0YSA9IGt2emFsbG9jX29iaigqZGF0YSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKCFkYXRhKVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmNcXG5pbmRleCBiNDA4NWFmM2FkMWNlLi5mZTUyNWIzMjRhZjQxIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmNcXG5AQCAtOTMsNyArOTMsNyBAQCBpbnQgbmZfY3RfYWRkX2hlbHBlcihzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IGNoYXIgKm5hbWUsIHU4IGZhbWlseSxcXG4gXFx0aWYgKCFoZWxwZXIpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0aGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfS0VSTkVMKTtcXG4rXFx0aGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIWhlbHApIHtcXG4gXFx0XFx0bmZfY29ubnRyYWNrX2hlbHBlcl9wdXQoaGVscGVyKTtcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY1xcbmluZGV4IGY0ZjJkODIxOTJkNTQuLmQ4OGExMDIzMDg2MmUgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXFxuQEAgLTEwMDksNyArMTAwOSw3IEBAIHN0YXRpYyBpbnQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0KVxcbiBcXHRCVUlMRF9CVUdfT04oQVJSQVlfU0laRShuZl9jdF9zeXNjdGxfdGFibGUpICE9IE5GX1NZU0NUTF9DVF9MQVNUX1NZU0NUTCk7XFxuIFxcbiBcXHR0YWJsZSA9IGttZW1kdXAobmZfY3Rfc3lzY3RsX3RhYmxlLCBzaXplb2YobmZfY3Rfc3lzY3RsX3RhYmxlKSxcXG4tXFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuK1xcdFxcdFxcdEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICghdGFibGUpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9ob29rc19sd3R1bm5lbC5jIGIvbmV0L25ldGZpbHRlci9uZl9ob29rc19sd3R1bm5lbC5jXFxuaW5kZXggNGUxZWVmMWJhMGYxNS4uNDBjNmZjZTE0YTYzZiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmNcXG5AQCAtNzMsNyArNzMsNyBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgbmZfbHd0dW5uZWxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbiBcXHRpZiAoIW5ldF9lcShuZXQsIFxcdTAwMjZpbml0X25ldCkpIHtcXG4gXFx0XFx0dGFibGUgPSBrbWVtZHVwKG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZSxcXG4gXFx0XFx0XFx0XFx0c2l6ZW9mKG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZSksXFxuLVxcdFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbitcXHRcXHRcXHRcXHRHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRcXHRpZiAoIXRhYmxlKVxcbiBcXHRcXHRcXHRnb3RvIGVycl9hbGxvYztcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jIGIvbmV0L25ldGZpbHRlci9uZl9sb2cuY1xcbmluZGV4IGY0ZDgwNjU0ZGZlNmEuLmYxZDM2NDllM2ZjNjIgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9sb2cuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmNcXG5AQCAtNDkzLDcgKzQ5Myw3IEBAIHN0YXRpYyBpbnQgbmV0ZmlsdGVyX2xvZ19zeXNjdGxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuIFxcdGlmICghbmV0X2VxKG5ldCwgXFx1MDAyNmluaXRfbmV0KSkge1xcbiBcXHRcXHR0YWJsZSA9IGttZW1kdXAobmZfbG9nX3N5c2N0bF90YWJsZSxcXG4gXFx0XFx0XFx0XFx0IHNpemVvZihuZl9sb2dfc3lzY3RsX3RhYmxlKSxcXG4tXFx0XFx0XFx0XFx0IEdGUF9LRVJORUwpO1xcbitcXHRcXHRcXHRcXHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0XFx0aWYgKCF0YWJsZSlcXG4gXFx0XFx0XFx0Z290byBlcnJfYWxsb2M7XFxuIFxcdH0gZWxzZSB7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xcbmluZGV4IDhhYzMyNmUxZWI1YmEuLjA5Y2M1YjhmZDZhZjEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXFxuQEAgLTEyMDQsMTQgKzEyMDQsMTUgQEAgaW50IG5mX25hdF9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcXG4gXFx0aWYgKCFuYXRfcHJvdG9fbmV0LVxcdTAwM2VuYXRfaG9va19vcHMpIHtcXG4gXFx0XFx0V0FSTl9PTihuYXRfcHJvdG9fbmV0LVxcdTAwM2V1c2VycyAhPSAwKTtcXG4gXFxuLVxcdFxcdG5hdF9vcHMgPSBrbWVtZHVwX2FycmF5KG9yaWdfbmF0X29wcywgb3BzX2NvdW50LCBzaXplb2YoKm9yaWdfbmF0X29wcyksIEdGUF9LRVJORUwpO1xcbitcXHRcXHRuYXRfb3BzID0ga21lbWR1cF9hcnJheShvcmlnX25hdF9vcHMsIG9wc19jb3VudCwgc2l6ZW9mKCpvcmlnX25hdF9vcHMpLFxcbitcXHRcXHRcXHRcXHRcXHRHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRcXHRpZiAoIW5hdF9vcHMpIHtcXG4gXFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuZl9uYXRfcHJvdG9fbXV0ZXgpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG9wc19jb3VudDsgaSsrKSB7XFxuLVxcdFxcdFxcdHByaXYgPSBremFsbG9jX29iaigqcHJpdik7XFxuK1xcdFxcdFxcdHByaXYgPSBremFsbG9jX29iaigqcHJpdiwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0XFx0XFx0aWYgKHByaXYpIHtcXG4gXFx0XFx0XFx0XFx0bmF0X29wc1tpXS5wcml2ID0gcHJpdjtcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfc3lucHJveHlfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmNcXG5pbmRleCBhY2QzNjA1MTU5NzJmLi45ZmM5NTliYTIwMzAwIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfc3lucHJveHlfY29yZS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmNcXG5AQCAtMzM2LDcgKzMzNiw3IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBzeW5wcm94eV9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuIFxcdHN0cnVjdCBuZl9jb25uICpjdDtcXG4gXFx0aW50IGVyciA9IC1FTk9NRU07XFxuIFxcbi1cXHRjdCA9IG5mX2N0X3RtcGxfYWxsb2MobmV0LCBcXHUwMDI2bmZfY3Rfem9uZV9kZmx0LCBHRlBfS0VSTkVMKTtcXG4rXFx0Y3QgPSBuZl9jdF90bXBsX2FsbG9jKG5ldCwgXFx1MDAyNm5mX2N0X3pvbmVfZGZsdCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKCFjdClcXG4gXFx0XFx0Z290byBlcnIxO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfYWNjdC5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfYWNjdC5jXFxuaW5kZXggOGZmMWUwYWQ1Y2IwZC4uMWEzNjZmYmQ4MTMzMiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19hY2N0LmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19hY2N0LmNcXG5AQCAtMTEyLDcgKzExMiw3IEBAIHN0YXRpYyBpbnQgbmZubF9hY2N0X25ldyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbiBcXHRcXHRzaXplICs9IHNpemVvZih1NjQpO1xcbiBcXHR9XFxuIFxcbi1cXHRuZmFjY3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmZfYWNjdCkgKyBzaXplLCBHRlBfS0VSTkVMKTtcXG4rXFx0bmZhY2N0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5mX2FjY3QpICsgc2l6ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKG5mYWNjdCA9PSBOVUxMKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jXFxuaW5kZXggNWI2YTA5ZjQ2OTAzZi4uYTA5YjJmZGJmOWI0ZSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuY1xcbkBAIC0zMzUsNyArMzM1LDggQEAgc3RhdGljIGludCBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfYWxsKHN0cnVjdCBubGF0dHIgKnRiW10sXFxuIFxcdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSAqcG9saWN5O1xcbiBcXHRpbnQgaSwgcmV0ID0gMDtcXG4gXFxuLVxcdG5ld19wb2xpY3kgPSBrbWFsbG9jX29ianMoKm5ld19wb2xpY3ksIGhlbHBlci1cXHUwMDNlZXhwZWN0X2NsYXNzX21heCArIDEpO1xcbitcXHRuZXdfcG9saWN5ID0ga21hbGxvY19vYmpzKCpuZXdfcG9saWN5LCBoZWxwZXItXFx1MDAzZWV4cGVjdF9jbGFzc19tYXggKyAxLFxcbitcXHRcXHRcXHRcXHQgIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICghbmV3X3BvbGljeSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0dGltZW91dC5jXFxuaW5kZXggNjZjMjAxNmY2MDQ5ZC4uNmI0YWRhYWY2MWFmMCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0dGltZW91dC5jXFxuQEAgLTcxLDcgKzcxLDggQEAgY3RubF90aW1lb3V0X3BhcnNlX3BvbGljeSh2b2lkICp0aW1lb3V0LFxcbiBcXHRzdHJ1Y3QgbmxhdHRyICoqdGI7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXG4tXFx0dGIgPSBremFsbG9jX29ianMoKnRiLCBsNHByb3RvLVxcdTAwM2VjdG5sX3RpbWVvdXQubmxhdHRyX21heCArIDEpO1xcbitcXHR0YiA9IGt6YWxsb2Nfb2JqcygqdGIsIGw0cHJvdG8tXFx1MDAzZWN0bmxfdGltZW91dC5ubGF0dHJfbWF4ICsgMSxcXG4rXFx0XFx0XFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXG4gXFx0aWYgKCF0YilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuQEAgLTE1MCwxNCArMTUxLDE1IEBAIHN0YXRpYyBpbnQgY3R0aW1lb3V0X25ld190aW1lb3V0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdGdvdG8gZXJyX3Byb3RvX3B1dDtcXG4gXFx0fVxcbiBcXG4tXFx0dGltZW91dCA9IGt6YWxsb2Moc2l6ZW9mKCp0aW1lb3V0KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdHRpbWVvdXQgPSBremFsbG9jKHNpemVvZigqdGltZW91dCksIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICh0aW1lb3V0ID09IE5VTEwpIHtcXG4gXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gXFx0XFx0Z290byBlcnJfcHJvdG9fcHV0O1xcbiBcXHR9XFxuIFxcbiBcXHR0aW1lb3V0LVxcdTAwM2V0aW1lb3V0ID0ga3phbGxvYyhzaXplb2YoKnRpbWVvdXQtXFx1MDAzZXRpbWVvdXQpICtcXG4tXFx0XFx0XFx0XFx0ICAgbDRwcm90by1cXHUwMDNlY3RubF90aW1lb3V0Lm9ial9zaXplLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0XFx0XFx0ICAgbDRwcm90by1cXHUwMDNlY3RubF90aW1lb3V0Lm9ial9zaXplLFxcbitcXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIXRpbWVvdXQtXFx1MDAzZXRpbWVvdXQpIHtcXG4gXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gXFx0XFx0Z290byBlcnI7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX29zZi5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfb3NmLmNcXG5pbmRleCA5MjAwMjA3OWY4ZWFiLi5lNDgzNWIwZjRiYjFhIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX29zZi5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfb3NmLmNcXG5AQCAtMzI1LDcgKzMyNSw3IEBAIHN0YXRpYyBpbnQgbmZubF9vc2ZfYWRkX2NhbGxiYWNrKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdCAgICAhbWVtY2hyKGYtXFx1MDAzZXZlcnNpb24sIDAsIE1BWEdFTlJFTEVOKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRrZiA9IGttYWxsb2Nfb2JqKHN0cnVjdCBuZl9vc2ZfZmluZ2VyKTtcXG4rXFx0a2YgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbmZfb3NmX2ZpbmdlciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKCFrZilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jIGIvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xcbmluZGV4IDlkYmYxMjdkZjljODEuLjg5NzYwODc0MzM2YzMgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNcXG5AQCAtMzY1LDcgKzM2NSw3IEBAIHN0YXRpYyBib29sIG5mdF9jdF90bXBsX2FsbG9jX3BjcHUodm9pZClcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuLVxcdFxcdHRtcCA9IG5mX2N0X3RtcGxfYWxsb2MoXFx1MDAyNmluaXRfbmV0LCBcXHUwMDI2em9uZSwgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdHRtcCA9IG5mX2N0X3RtcGxfYWxsb2MoXFx1MDAyNmluaXRfbmV0LCBcXHUwMDI2em9uZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0XFx0aWYgKCF0bXApIHtcXG4gXFx0XFx0XFx0bmZ0X2N0X3RtcGxfcHV0X3BjcHUoKTtcXG4gXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbkBAIC04NDgsNyArODQ4LDggQEAgbmZ0X2N0X3RpbWVvdXRfcGFyc2VfcG9saWN5KHZvaWQgKnRpbWVvdXRzLFxcbiBcXHRzdHJ1Y3QgbmxhdHRyICoqdGI7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXG4tXFx0dGIgPSBremFsbG9jX29ianMoKnRiLCBsNHByb3RvLVxcdTAwM2VjdG5sX3RpbWVvdXQubmxhdHRyX21heCArIDEpO1xcbitcXHR0YiA9IGt6YWxsb2Nfb2JqcygqdGIsIGw0cHJvdG8tXFx1MDAzZWN0bmxfdGltZW91dC5ubGF0dHJfbWF4ICsgMSxcXG4rXFx0XFx0XFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXG4gXFx0aWYgKCF0YilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuQEAgLTkzNCw3ICs5MzUsNyBAQCBzdGF0aWMgaW50IG5mdF9jdF90aW1lb3V0X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuIFxcdH1cXG4gXFxuIFxcdHRpbWVvdXQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmZfY3RfdGltZW91dCkgK1xcbi1cXHRcXHRcXHQgIGw0cHJvdG8tXFx1MDAzZWN0bmxfdGltZW91dC5vYmpfc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdFxcdCAgbDRwcm90by1cXHUwMDNlY3RubF90aW1lb3V0Lm9ial9zaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAodGltZW91dCA9PSBOVUxMKSB7XFxuIFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIFxcdFxcdGdvdG8gZXJyX3Byb3RvX3B1dDtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jIGIvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jXFxuaW5kZXggOTc4YmIwYzAxMTA2OC4uMzYxN2JiNjYwOTRkNCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmNcXG5AQCAtMjI5OCw3ICsyMjk4LDcgQEAgc3RhdGljIGludCBuZnRfcGlwYXBvX2luaXQoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4gXFx0aWYgKGZpZWxkX2NvdW50IFxcdTAwM2UgTkZUX1BJUEFQT19NQVhfRklFTERTKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdG0gPSBrbWFsbG9jX2ZsZXgoKm0sIGYsIGZpZWxkX2NvdW50KTtcXG4rXFx0bSA9IGttYWxsb2NfZmxleCgqbSwgZiwgZmllbGRfY291bnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICghbSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0NULmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0NULmNcXG5pbmRleCBlNzg2NjBkZmRmNGI2Li4yMDViYzZkZDk4MTI1IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfQ1QuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfQ1QuY1xcbkBAIC05MSw3ICs5MSw3IEBAIHh0X2N0X3NldF9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBjaGFyICpoZWxwZXJfbmFtZSxcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIFxcdH1cXG4gXFxuLVxcdGhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0tFUk5FTCk7XFxuK1xcdGhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKGhlbHAgPT0gTlVMTCkge1xcbiBcXHRcXHRuZl9jb25udHJhY2tfaGVscGVyX3B1dChoZWxwZXIpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5AQCAtMTgyLDcgKzE4Miw3IEBAIHN0YXRpYyBpbnQgeHRfY3RfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIsXFxuIFxcdGlmIChpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhUX0NUX1pPTkVfTUFSSylcXG4gXFx0XFx0em9uZS5mbGFncyB8PSBORl9DVF9GTEFHX01BUks7XFxuIFxcbi1cXHRjdCA9IG5mX2N0X3RtcGxfYWxsb2MocGFyLVxcdTAwM2VuZXQsIFxcdTAwMjZ6b25lLCBHRlBfS0VSTkVMKTtcXG4rXFx0Y3QgPSBuZl9jdF90bXBsX2FsbG9jKHBhci1cXHUwMDNlbmV0LCBcXHUwMDI2em9uZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKCFjdCkge1xcbiBcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiBcXHRcXHRnb3RvIGVycjI7XFxuQEAgLTE5MCw3ICsxOTAsNyBAQCBzdGF0aWMgaW50IHh0X2N0X3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyLFxcbiBcXG4gXFx0aWYgKChpbmZvLVxcdTAwM2VjdF9ldmVudHMgfHwgaW5mby1cXHUwMDNlZXhwX2V2ZW50cykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICFuZl9jdF9lY2FjaGVfZXh0X2FkZChjdCwgaW5mby1cXHUwMDNlY3RfZXZlbnRzLCBpbmZvLVxcdTAwM2VleHBfZXZlbnRzLFxcbi1cXHRcXHRcXHRcXHQgIEdGUF9LRVJORUwpKSB7XFxuK1xcdFxcdFxcdFxcdCAgR0ZQX0tFUk5FTF9BQ0NPVU5UKSkge1xcbiBcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiBcXHRcXHRnb3RvIGVycjM7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyBiL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcXG5pbmRleCBiZmNmMmQ0NGU5M2RiLi43OTZiMGQ0NjFjM2QwIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXFxuQEAgLTE1MCw3ICsxNTAsNyBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jcmVhdGUoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRpbmZvLVxcdTAwM2V0aW1lciA9IGt6YWxsb2Nfb2JqKCppbmZvLVxcdTAwM2V0aW1lcik7XFxuK1xcdGluZm8tXFx1MDAzZXRpbWVyID0ga3phbGxvY19vYmooKmluZm8tXFx1MDAzZXRpbWVyLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIWluZm8tXFx1MDAzZXRpbWVyKSB7XFxuIFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIFxcdFxcdGdvdG8gb3V0O1xcbkBAIC0xNjEsNyArMTYxLDcgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbylcXG4gXFx0XFx0Z290byBvdXRfZnJlZV90aW1lcjtcXG4gXFxuIFxcdHN5c2ZzX2F0dHJfaW5pdChcXHUwMDI2aW5mby1cXHUwMDNldGltZXItXFx1MDAzZWF0dHIuYXR0cik7XFxuLVxcdGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIubmFtZSA9IGtzdHJkdXAoaW5mby1cXHUwMDNlbGFiZWwsIEdGUF9LRVJORUwpO1xcbitcXHRpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyLm5hbWUgPSBrc3RyZHVwKGluZm8tXFx1MDAzZWxhYmVsLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIWluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIubmFtZSkge1xcbiBcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiBcXHRcXHRnb3RvIG91dF9mcmVlX3RpbWVyO1xcbkBAIC0xOTksNyArMTk5LDcgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlX3YxKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbylcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0aW5mby1cXHUwMDNldGltZXIgPSBrbWFsbG9jX29iaigqaW5mby1cXHUwMDNldGltZXIpO1xcbitcXHRpbmZvLVxcdTAwM2V0aW1lciA9IGttYWxsb2Nfb2JqKCppbmZvLVxcdTAwM2V0aW1lciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKCFpbmZvLVxcdTAwM2V0aW1lcikge1xcbiBcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtMjEwLDcgKzIxMCw3IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pXFxuIFxcdFxcdGdvdG8gb3V0X2ZyZWVfdGltZXI7XFxuIFxcbiBcXHRzeXNmc19hdHRyX2luaXQoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIpO1xcbi1cXHRpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyLm5hbWUgPSBrc3RyZHVwKGluZm8tXFx1MDAzZWxhYmVsLCBHRlBfS0VSTkVMKTtcXG4rXFx0aW5mby1cXHUwMDNldGltZXItXFx1MDAzZWF0dHIuYXR0ci5uYW1lID0ga3N0cmR1cChpbmZvLVxcdTAwM2VsYWJlbCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKCFpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyLm5hbWUpIHtcXG4gXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gXFx0XFx0Z290byBvdXRfZnJlZV90aW1lcjtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9MRUQuYyBiL25ldC9uZXRmaWx0ZXIveHRfTEVELmNcXG5pbmRleCBjYWFhZjRkMmM1ODQyLi4zY2JiOGQ2MWQ0MTc1IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfTEVELmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0xFRC5jXFxuQEAgLTExMSwxMSArMTExLDEyIEBAIHN0YXRpYyBpbnQgbGVkX3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxcbiBcXHR9XFxuIFxcbiBcXHRlcnIgPSAtRU5PTUVNO1xcbi1cXHRsZWRpbnRlcm5hbCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB4dF9sZWRfaW5mb19pbnRlcm5hbCk7XFxuK1xcdGxlZGludGVybmFsID0ga3phbGxvY19vYmooc3RydWN0IHh0X2xlZF9pbmZvX2ludGVybmFsLFxcbitcXHRcXHRcXHRcXHQgIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICghbGVkaW50ZXJuYWwpXFxuIFxcdFxcdGdvdG8gZXhpdF9tdXRleF9vbmx5O1xcbiBcXG4tXFx0bGVkaW50ZXJuYWwtXFx1MDAzZXRyaWdnZXJfaWQgPSBrc3RyZHVwKGxlZGluZm8tXFx1MDAzZWlkLCBHRlBfS0VSTkVMKTtcXG4rXFx0bGVkaW50ZXJuYWwtXFx1MDAzZXRyaWdnZXJfaWQgPSBrc3RyZHVwKGxlZGluZm8tXFx1MDAzZWlkLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIWxlZGludGVybmFsLVxcdTAwM2V0cmlnZ2VyX2lkKVxcbiBcXHRcXHRnb3RvIGV4aXRfaW50ZXJuYWxfYWxsb2M7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X1JBVEVFU1QuYyBiL25ldC9uZXRmaWx0ZXIveHRfUkFURUVTVC5jXFxuaW5kZXggOTEyNzBkNDY3ZmZkZi4uMmY2YjUxMmI3MWU4MCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X1JBVEVFU1QuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfUkFURUVTVC5jXFxuQEAgLTEzOSw3ICsxMzksNyBAQCBzdGF0aWMgaW50IHh0X3JhdGVlc3RfdGdfY2hlY2tlbnRyeShjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcXG4gXFx0fVxcbiBcXG4gXFx0cmV0ID0gLUVOT01FTTtcXG4tXFx0ZXN0ID0ga3phbGxvY19vYmooKmVzdCk7XFxuK1xcdGVzdCA9IGt6YWxsb2Nfb2JqKCplc3QsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICghZXN0KVxcbiBcXHRcXHRnb3RvIGVycjE7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jIGIvbmV0L25ldGZpbHRlci94dF9URUUuY1xcbmluZGV4IDVkMzRjZWI4OTNlZGEuLjQ4YjQxMDRmMDg1OTggMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9URUUuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfVEVFLmNcXG5AQCAtMTA2LDcgKzEwNiw3IEBAIHN0YXRpYyBpbnQgdGVlX3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxcbiBcXHRcXHRpZiAoaW5mby1cXHUwMDNlb2lmW3NpemVvZihpbmZvLVxcdTAwM2VvaWYpLTFdICE9ICdcXFxcMCcpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0XFx0cHJpdiA9IGt6YWxsb2Nfb2JqKCpwcml2KTtcXG4rXFx0XFx0cHJpdiA9IGt6YWxsb2Nfb2JqKCpwcml2LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRcXHRpZiAocHJpdiA9PSBOVUxMKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jXFxuaW5kZXggOWFmMGZhODk1ZjczMC4uYjQ1ZjA2YjA2YzI2ZCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuY1xcbkBAIC0zMTksNyArMzE5LDcgQEAgc3RhdGljIGludCBodGFibGVfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGhhc2hsaW1pdF9jZmczICpjZmcsXFxuIFxcdGhpbmZvLVxcdTAwM2Vjb3VudCA9IDA7XFxuIFxcdGhpbmZvLVxcdTAwM2VmYW1pbHkgPSBmYW1pbHk7XFxuIFxcdGhpbmZvLVxcdTAwM2VybmRfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcXG4tXFx0aGluZm8tXFx1MDAzZW5hbWUgPSBrc3RyZHVwKG5hbWUsIEdGUF9LRVJORUwpO1xcbitcXHRoaW5mby1cXHUwMDNlbmFtZSA9IGtzdHJkdXAobmFtZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKCFoaW5mby1cXHUwMDNlbmFtZSkge1xcbiBcXHRcXHRrdmZyZWUoaGluZm8pO1xcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9saW1pdC5jIGIvbmV0L25ldGZpbHRlci94dF9saW1pdC5jXFxuaW5kZXggODdkNzRkYTE0YzBiNy4uYWQ0OGI2ODc5YjEzMCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmNcXG5AQCAtMTE1LDcgKzExNSw3IEBAIHN0YXRpYyBpbnQgbGltaXRfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXFxuIFxcdFxcdHJldHVybiAtRVJBTkdFO1xcbiBcXHR9XFxuIFxcbi1cXHRwcml2ID0ga21hbGxvY19vYmooKnByaXYpO1xcbitcXHRwcml2ID0ga21hbGxvY19vYmooKnByaXYsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmIChwcml2ID09IE5VTEwpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9xdW90YS5jIGIvbmV0L25ldGZpbHRlci94dF9xdW90YS5jXFxuaW5kZXggYjA1YzVjOGRhYzc4Yi4uZTIxZWMxNTJkMTZhNyAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmNcXG5AQCAtNTAsNyArNTAsNyBAQCBzdGF0aWMgaW50IHF1b3RhX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxcbiBcXHRpZiAocS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB+WFRfUVVPVEFfTUFTSylcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRxLVxcdTAwM2VtYXN0ZXIgPSBrbWFsbG9jX29iaigqcS1cXHUwMDNlbWFzdGVyKTtcXG4rXFx0cS1cXHUwMDNlbWFzdGVyID0ga21hbGxvY19vYmooKnEtXFx1MDAzZW1hc3RlciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKHEtXFx1MDAzZW1hc3RlciA9PSBOVUxMKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jXFxuaW5kZXggZDM0ODMxY2UzYWRmYi4uNTVmMWYyZDg5OTUyZCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci94dF9yZWNlbnQuY1xcbkBAIC0zOTEsNyArMzkxLDggQEAgc3RhdGljIGludCByZWNlbnRfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIsXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbi1cXHR0ID0ga3Z6YWxsb2NfZmxleCgqdCwgaXBoYXNoLCBpcF9saXN0X2hhc2hfc2l6ZSk7XFxuK1xcdHQgPSBrdnphbGxvY19mbGV4KCp0LCBpcGhhc2gsIGlwX2xpc3RfaGFzaF9zaXplLFxcbitcXHRcXHRcXHQgIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICh0ID09IE5VTEwpIHtcXG4gXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5jXFxuaW5kZXggMzM0ZTA5NzcxYWJmOS4uMWZmYzU5ZDkwYmIwYSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5jXFxuKysrIGIvbmV0L25ldGZpbHRlci94dF9zdGF0aXN0aWMuY1xcbkBAIC01OCw3ICs1OCw3IEBAIHN0YXRpYyBpbnQgc3RhdGlzdGljX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxcbiBcXHQgICAgaW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB+WFRfU1RBVElTVElDX01BU0spXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0aW5mby1cXHUwMDNlbWFzdGVyID0ga3phbGxvY19vYmooKmluZm8tXFx1MDAzZW1hc3Rlcik7XFxuK1xcdGluZm8tXFx1MDAzZW1hc3RlciA9IGt6YWxsb2Nfb2JqKCppbmZvLVxcdTAwM2VtYXN0ZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmIChpbmZvLVxcdTAwM2VtYXN0ZXIgPT0gTlVMTClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdGF0b21pY19zZXQoXFx1MDAyNmluZm8tXFx1MDAzZW1hc3Rlci1cXHUwMDNlY291bnQsIGluZm8tXFx1MDAzZXUubnRoLmNvdW50KTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9zdHJpbmcuYyBiL25ldC9uZXRmaWx0ZXIveHRfc3RyaW5nLmNcXG5pbmRleCA4Y2UyNWJjOWIyNzc1Li41MmMxZGViMDJjZGM2IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfc3RyaW5nLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3N0cmluZy5jXFxuQEAgLTU0LDcgKzU0LDcgQEAgc3RhdGljIGludCBzdHJpbmdfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXFxuIFxcdGlmIChjb25mLVxcdTAwM2V1LnYxLmZsYWdzIFxcdTAwMjYgWFRfU1RSSU5HX0ZMQUdfSUdOT1JFQ0FTRSlcXG4gXFx0XFx0ZmxhZ3MgfD0gVFNfSUdOT1JFQ0FTRTtcXG4gXFx0dHNfY29uZiA9IHRleHRzZWFyY2hfcHJlcGFyZShjb25mLVxcdTAwM2VhbGdvLCBjb25mLVxcdTAwM2VwYXR0ZXJuLCBjb25mLVxcdTAwM2VwYXRsZW4sXFxuLVxcdFxcdFxcdFxcdCAgICAgR0ZQX0tFUk5FTCwgZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUxfQUNDT1VOVCwgZmxhZ3MpO1xcbiBcXHRpZiAoSVNfRVJSKHRzX2NvbmYpKVxcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUih0c19jb25mKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE0OjU2OjIyLjI1NjcwMDI5N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQyMzExMzYwMjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGNoYW5nZXMgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MgdG8gaW5jbHVkZSBHRlBfS0VSTkVMX0FDQ09VTlQgYWNyb3NzIHZhcmlvdXMgbmV0ZmlsdGVyIG1vZHVsZXMuIFRoaXMgaXMgYSBtZWNoYW5pY2FsIGNoYW5nZSBmb3IgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nIGFuZCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuIFRoZXJlZm9yZSwgaXQgaXMgbm90IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmY2Y3ZjkzYWMxZjUyY2FjZWVjOWFhYzMyMDJlYTM5MDg2YmNmNGNlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMTQ6NTY6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuY1xuaW5kZXggMGJmNTQxOTM2ZjYwMS4uNjRiOGY2Zjk4MjExOSAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmNcbisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmNcbkBAIC0xMzA0LDcgKzEzMDQsNyBAQCBpbnQgZWJ0X3JlZ2lzdGVyX3RlbXBsYXRlKGNvbnN0IHN0cnVjdCBlYnRfdGFibGUgKnQsIGludCAoKnRhYmxlX2luaXQpKHN0cnVjdCBuZVxuIFx0XHR9XG4gXHR9XG4gXG4tXHR0bXBsID0ga3phbGxvY19vYmooKnRtcGwpO1xuK1x0dG1wbCA9IGt6YWxsb2Nfb2JqKCp0bXBsLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCF0bXBsKSB7XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZlYnRfbXV0ZXgpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jXG5pbmRleCBhYzdmZWJjZTA3NGYxLi5lMTUyY2YzNWQ4NTk2IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jXG5AQCAtMjE3LDcgKzIxNyw3IEBAIGluaXRfbWFwX2lwKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGJpdG1hcF9pcCAqbWFwLFxuIFx0ICAgIHUzMiBmaXJzdF9pcCwgdTMyIGxhc3RfaXAsXG4gXHQgICAgdTMyIGVsZW1lbnRzLCB1MzIgaG9zdHMsIHU4IG5ldG1hc2spXG4ge1xuLVx0bWFwLVx1MDAzZW1lbWJlcnMgPSBiaXRtYXBfemFsbG9jKGVsZW1lbnRzLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcbitcdG1hcC1cdTAwM2VtZW1iZXJzID0gYml0bWFwX3phbGxvYyhlbGVtZW50cywgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKTtcbiBcdGlmICghbWFwLVx1MDAzZW1lbWJlcnMpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdG1hcC1cdTAwM2VmaXJzdF9pcCA9IGZpcnN0X2lwO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmNcbmluZGV4IDU5MjFmZDlkMmRjYTAuLmExMTc5MzUyMjIwYTQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmNcbkBAIC0zMDAsNyArMzAwLDcgQEAgc3RhdGljIGJvb2xcbiBpbml0X21hcF9pcG1hYyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBiaXRtYXBfaXBtYWMgKm1hcCxcbiBcdCAgICAgICB1MzIgZmlyc3RfaXAsIHUzMiBsYXN0X2lwLCB1MzIgZWxlbWVudHMpXG4ge1xuLVx0bWFwLVx1MDAzZW1lbWJlcnMgPSBiaXRtYXBfemFsbG9jKGVsZW1lbnRzLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcbitcdG1hcC1cdTAwM2VtZW1iZXJzID0gYml0bWFwX3phbGxvYyhlbGVtZW50cywgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKTtcbiBcdGlmICghbWFwLVx1MDAzZW1lbWJlcnMpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdG1hcC1cdTAwM2VmaXJzdF9pcCA9IGZpcnN0X2lwO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jXG5pbmRleCBjYTg3NWM5ODI0MjQ1Li4wYTAwMjdjZGIxOTM3IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuY1xuQEAgLTIzMSw3ICsyMzEsNyBAQCBzdGF0aWMgYm9vbFxuIGluaXRfbWFwX3BvcnQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgYml0bWFwX3BvcnQgKm1hcCxcbiBcdCAgICAgIHUxNiBmaXJzdF9wb3J0LCB1MTYgbGFzdF9wb3J0KVxuIHtcbi1cdG1hcC1cdTAwM2VtZW1iZXJzID0gYml0bWFwX3phbGxvYyhtYXAtXHUwMDNlZWxlbWVudHMsIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xuK1x0bWFwLVx1MDAzZW1lbWJlcnMgPSBiaXRtYXBfemFsbG9jKG1hcC1cdTAwM2VlbGVtZW50cywgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKTtcbiBcdGlmICghbWFwLVx1MDAzZW1lbWJlcnMpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdG1hcC1cdTAwM2VmaXJzdF9wb3J0ID0gZmlyc3RfcG9ydDtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcbmluZGV4IDBhODZhMTcwYmE5MDYuLjI4YWM4Y2JhM2Q2OGMgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1xuQEAgLTEwODUsNyArMTA4NSw3IEBAIHN0YXRpYyBpbnQgaXBfc2V0X2NyZWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuIFx0LyogRmlyc3QsIGFuZCB3aXRob3V0IGFueSBsb2NrcywgYWxsb2NhdGUgYW5kIGluaXRpYWxpemVcbiBcdCAqIGEgbm9ybWFsIGJhc2Ugc2V0IHN0cnVjdHVyZS5cbiBcdCAqL1xuLVx0c2V0ID0ga3phbGxvY19vYmooKnNldCk7XG4rXHRzZXQgPSBremFsbG9jX29iaigqc2V0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFzZXQpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2c2V0LVx1MDAzZWxvY2spO1xuQEAgLTExNDMsNyArMTE0Myw3IEBAIHN0YXRpYyBpbnQgaXBfc2V0X2NyZWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuIFx0XHRcdC8qIFdyYXBhcm91bmQgKi9cbiBcdFx0XHRnb3RvIGNsZWFudXA7XG4gXG4tXHRcdGxpc3QgPSBrdnphbGxvY19vYmpzKHN0cnVjdCBpcF9zZXQgKiwgaSk7XG4rXHRcdGxpc3QgPSBrdnphbGxvY19vYmpzKHN0cnVjdCBpcF9zZXQgKiwgaSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdFx0aWYgKCFsaXN0KVxuIFx0XHRcdGdvdG8gY2xlYW51cDtcbiBcdFx0LyogbmZubCBtdXRleCBpcyBoZWxkLCBib3RoIGxpc3RzIGFyZSB2YWxpZCAqL1xuQEAgLTIzOTcsNyArMjM5Nyw4IEBAIGlwX3NldF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRpZiAoaW5zdC1cdTAwM2VpcF9zZXRfbWF4IFx1MDAzZT0gSVBTRVRfSU5WQUxJRF9JRClcbiBcdFx0aW5zdC1cdTAwM2VpcF9zZXRfbWF4ID0gSVBTRVRfSU5WQUxJRF9JRCAtIDE7XG4gXG4tXHRsaXN0ID0ga3Z6YWxsb2Nfb2JqcyhzdHJ1Y3QgaXBfc2V0ICosIGluc3QtXHUwMDNlaXBfc2V0X21heCk7XG4rXHRsaXN0ID0ga3Z6YWxsb2Nfb2JqcyhzdHJ1Y3QgaXBfc2V0ICosIGluc3QtXHUwMDNlaXBfc2V0X21heCxcbitcdFx0XHQgICAgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWxpc3QpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0aW5zdC1cdTAwM2Vpc19kZWxldGVkID0gZmFsc2U7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbmluZGV4IDgwY2E1MjNmMzA0YmIuLjM5ZGVjOTI4NTA1MmEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXG5AQCAtNzY4LDcgKzc2OCw3IEBAIG10eXBlX3Jlc2l6ZShzdHJ1Y3QgaXBfc2V0ICpzZXQsIGJvb2wgcmV0cmllZClcbiBcdGludCByZXQ7XG4gXG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuLVx0dG1wID0ga21hbGxvYyhkc2l6ZSwgR0ZQX0tFUk5FTCk7XG4rXHR0bXAgPSBrbWFsbG9jKGRzaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCF0bXApXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuICNlbmRpZlxuQEAgLTE3NTQsNyArMTc1NCw3IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcbiBcdFx0c2l6ZW9mKHN0cnVjdCBJUFNFVF9UT0tFTihIVFlQRSwgNikpIDpcbiBcdFx0c2l6ZW9mKHN0cnVjdCBJUFNFVF9UT0tFTihIVFlQRSwgNCkpO1xuICNlbmRpZlxuLVx0aCA9IGt6YWxsb2MoaHNpemUsIEdGUF9LRVJORUwpO1xuK1x0aCA9IGt6YWxsb2MoaHNpemUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWgpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTE3NzQsNyArMTc3NCw3IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcbiBcdFx0Z290byBmcmVlX3Q7XG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpKyspIHtcbi1cdFx0bmV0cyA9IGt6YWxsb2Nfb2JqKCpuZXRzKTtcbitcdFx0bmV0cyA9IGt6YWxsb2Nfb2JqKCpuZXRzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0XHRpZiAoIW5ldHMpIHtcbiBcdFx0XHR3aGlsZSAoaSBcdTAwM2UgMClcbiBcdFx0XHRcdGtmcmVlKHJjdV9kZXJlZmVyZW5jZV9yYXcoaC1cdTAwM2VybmV0c1stLWldKSk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNcbmluZGV4IGYwNzAwODg3NDJkNjAuLjc1MGZlMzgyNjFjMzcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jXG5AQCAtNjAwLDcgKzYwMCw3IEBAIGluaXRfbGlzdF9zZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsIHUzMiBzaXplKVxuIHtcbiBcdHN0cnVjdCBsaXN0X3NldCAqbWFwO1xuIFxuLVx0bWFwID0ga3phbGxvY19vYmooKm1hcCk7XG4rXHRtYXAgPSBremFsbG9jX29iaigqbWFwLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFtYXApXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuY1xuaW5kZXggODU0ODdmOTJhZjUwNi4uYjA5YzE3NmE1MjFkMSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmNcbkBAIC02OTEsNyArNjkxLDcgQEAgc3RydWN0IG5mX2Nvbm5jb3VudF9kYXRhICpuZl9jb25uY291bnRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBrZXlsZW5cbiBcdCAgICBrZXlsZW4gPT0gMClcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXG4tXHRkYXRhID0ga3Z6YWxsb2Nfb2JqKCpkYXRhKTtcbitcdGRhdGEgPSBrdnphbGxvY19vYmooKmRhdGEsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWRhdGEpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmNcbmluZGV4IGI0MDg1YWYzYWQxY2UuLmZlNTI1YjMyNGFmNDEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmNcbkBAIC05Myw3ICs5Myw3IEBAIGludCBuZl9jdF9hZGRfaGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3QgY2hhciAqbmFtZSwgdTggZmFtaWx5LFxuIFx0aWYgKCFoZWxwZXIpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfS0VSTkVMKTtcbitcdGhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghaGVscCkge1xuIFx0XHRuZl9jb25udHJhY2tfaGVscGVyX3B1dChoZWxwZXIpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmNcbmluZGV4IGY0ZjJkODIxOTJkNTQuLmQ4OGExMDIzMDg2MmUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY1xuQEAgLTEwMDksNyArMTAwOSw3IEBAIHN0YXRpYyBpbnQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0KVxuIFx0QlVJTERfQlVHX09OKEFSUkFZX1NJWkUobmZfY3Rfc3lzY3RsX3RhYmxlKSAhPSBORl9TWVNDVExfQ1RfTEFTVF9TWVNDVEwpO1xuIFxuIFx0dGFibGUgPSBrbWVtZHVwKG5mX2N0X3N5c2N0bF90YWJsZSwgc2l6ZW9mKG5mX2N0X3N5c2N0bF90YWJsZSksXG4tXHRcdFx0R0ZQX0tFUk5FTCk7XG4rXHRcdFx0R0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghdGFibGUpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuYyBiL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuY1xuaW5kZXggNGUxZWVmMWJhMGYxNS4uNDBjNmZjZTE0YTYzZiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9ob29rc19sd3R1bm5lbC5jXG5AQCAtNzMsNyArNzMsNyBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgbmZfbHd0dW5uZWxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0aWYgKCFuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpIHtcbiBcdFx0dGFibGUgPSBrbWVtZHVwKG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZSxcbiBcdFx0XHRcdHNpemVvZihuZl9sd3R1bm5lbF9zeXNjdGxfdGFibGUpLFxuLVx0XHRcdFx0R0ZQX0tFUk5FTCk7XG4rXHRcdFx0XHRHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0XHRpZiAoIXRhYmxlKVxuIFx0XHRcdGdvdG8gZXJyX2FsbG9jO1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jXG5pbmRleCBmNGQ4MDY1NGRmZTZhLi5mMWQzNjQ5ZTNmYzYyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9sb2cuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9sb2cuY1xuQEAgLTQ5Myw3ICs0OTMsNyBAQCBzdGF0aWMgaW50IG5ldGZpbHRlcl9sb2dfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0aWYgKCFuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpIHtcbiBcdFx0dGFibGUgPSBrbWVtZHVwKG5mX2xvZ19zeXNjdGxfdGFibGUsXG4gXHRcdFx0XHQgc2l6ZW9mKG5mX2xvZ19zeXNjdGxfdGFibGUpLFxuLVx0XHRcdFx0IEdGUF9LRVJORUwpO1xuK1x0XHRcdFx0IEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRcdGlmICghdGFibGUpXG4gXHRcdFx0Z290byBlcnJfYWxsb2M7XG4gXHR9IGVsc2Uge1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xuaW5kZXggOGFjMzI2ZTFlYjViYS4uMDljYzViOGZkNmFmMSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXG5AQCAtMTIwNCwxNCArMTIwNCwxNSBAQCBpbnQgbmZfbmF0X3JlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLFxuIFx0aWYgKCFuYXRfcHJvdG9fbmV0LVx1MDAzZW5hdF9ob29rX29wcykge1xuIFx0XHRXQVJOX09OKG5hdF9wcm90b19uZXQtXHUwMDNldXNlcnMgIT0gMCk7XG4gXG4tXHRcdG5hdF9vcHMgPSBrbWVtZHVwX2FycmF5KG9yaWdfbmF0X29wcywgb3BzX2NvdW50LCBzaXplb2YoKm9yaWdfbmF0X29wcyksIEdGUF9LRVJORUwpO1xuK1x0XHRuYXRfb3BzID0ga21lbWR1cF9hcnJheShvcmlnX25hdF9vcHMsIG9wc19jb3VudCwgc2l6ZW9mKCpvcmlnX25hdF9vcHMpLFxuK1x0XHRcdFx0XHRHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0XHRpZiAoIW5hdF9vcHMpIHtcbiBcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bmZfbmF0X3Byb3RvX211dGV4KTtcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdFx0fVxuIFxuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBvcHNfY291bnQ7IGkrKykge1xuLVx0XHRcdHByaXYgPSBremFsbG9jX29iaigqcHJpdik7XG4rXHRcdFx0cHJpdiA9IGt6YWxsb2Nfb2JqKCpwcml2LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0XHRcdGlmIChwcml2KSB7XG4gXHRcdFx0XHRuYXRfb3BzW2ldLnByaXYgPSBwcml2O1xuIFx0XHRcdFx0Y29udGludWU7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuY1xuaW5kZXggYWNkMzYwNTE1OTcyZi4uOWZjOTU5YmEyMDMwMCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfc3lucHJveHlfY29yZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuY1xuQEAgLTMzNiw3ICszMzYsNyBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgc3lucHJveHlfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0c3RydWN0IG5mX2Nvbm4gKmN0O1xuIFx0aW50IGVyciA9IC1FTk9NRU07XG4gXG4tXHRjdCA9IG5mX2N0X3RtcGxfYWxsb2MobmV0LCBcdTAwMjZuZl9jdF96b25lX2RmbHQsIEdGUF9LRVJORUwpO1xuK1x0Y3QgPSBuZl9jdF90bXBsX2FsbG9jKG5ldCwgXHUwMDI2bmZfY3Rfem9uZV9kZmx0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFjdClcbiBcdFx0Z290byBlcnIxO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2FjY3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2FjY3QuY1xuaW5kZXggOGZmMWUwYWQ1Y2IwZC4uMWEzNjZmYmQ4MTMzMiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2FjY3QuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfYWNjdC5jXG5AQCAtMTEyLDcgKzExMiw3IEBAIHN0YXRpYyBpbnQgbmZubF9hY2N0X25ldyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuIFx0XHRzaXplICs9IHNpemVvZih1NjQpO1xuIFx0fVxuIFxuLVx0bmZhY2N0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5mX2FjY3QpICsgc2l6ZSwgR0ZQX0tFUk5FTCk7XG4rXHRuZmFjY3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmZfYWNjdCkgKyBzaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKG5mYWNjdCA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuY1xuaW5kZXggNWI2YTA5ZjQ2OTAzZi4uYTA5YjJmZGJmOWI0ZSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbkBAIC0zMzUsNyArMzM1LDggQEAgc3RhdGljIGludCBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfYWxsKHN0cnVjdCBubGF0dHIgKnRiW10sXG4gXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKnBvbGljeTtcbiBcdGludCBpLCByZXQgPSAwO1xuIFxuLVx0bmV3X3BvbGljeSA9IGttYWxsb2Nfb2JqcygqbmV3X3BvbGljeSwgaGVscGVyLVx1MDAzZWV4cGVjdF9jbGFzc19tYXggKyAxKTtcbitcdG5ld19wb2xpY3kgPSBrbWFsbG9jX29ianMoKm5ld19wb2xpY3ksIGhlbHBlci1cdTAwM2VleHBlY3RfY2xhc3NfbWF4ICsgMSxcbitcdFx0XHRcdCAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbmV3X3BvbGljeSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuY1xuaW5kZXggNjZjMjAxNmY2MDQ5ZC4uNmI0YWRhYWY2MWFmMCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0dGltZW91dC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuY1xuQEAgLTcxLDcgKzcxLDggQEAgY3RubF90aW1lb3V0X3BhcnNlX3BvbGljeSh2b2lkICp0aW1lb3V0LFxuIFx0c3RydWN0IG5sYXR0ciAqKnRiO1xuIFx0aW50IHJldCA9IDA7XG4gXG4tXHR0YiA9IGt6YWxsb2Nfb2JqcygqdGIsIGw0cHJvdG8tXHUwMDNlY3RubF90aW1lb3V0Lm5sYXR0cl9tYXggKyAxKTtcbitcdHRiID0ga3phbGxvY19vYmpzKCp0YiwgbDRwcm90by1cdTAwM2VjdG5sX3RpbWVvdXQubmxhdHRyX21heCArIDEsXG4rXHRcdFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFxuIFx0aWYgKCF0YilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMTUwLDE0ICsxNTEsMTUgQEAgc3RhdGljIGludCBjdHRpbWVvdXRfbmV3X3RpbWVvdXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0Z290byBlcnJfcHJvdG9fcHV0O1xuIFx0fVxuIFxuLVx0dGltZW91dCA9IGt6YWxsb2Moc2l6ZW9mKCp0aW1lb3V0KSwgR0ZQX0tFUk5FTCk7XG4rXHR0aW1lb3V0ID0ga3phbGxvYyhzaXplb2YoKnRpbWVvdXQpLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKHRpbWVvdXQgPT0gTlVMTCkge1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIGVycl9wcm90b19wdXQ7XG4gXHR9XG4gXG4gXHR0aW1lb3V0LVx1MDAzZXRpbWVvdXQgPSBremFsbG9jKHNpemVvZigqdGltZW91dC1cdTAwM2V0aW1lb3V0KSArXG4tXHRcdFx0XHQgICBsNHByb3RvLVx1MDAzZWN0bmxfdGltZW91dC5vYmpfc2l6ZSwgR0ZQX0tFUk5FTCk7XG4rXHRcdFx0XHQgICBsNHByb3RvLVx1MDAzZWN0bmxfdGltZW91dC5vYmpfc2l6ZSxcbitcdFx0XHRcdCAgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIXRpbWVvdXQtXHUwMDNldGltZW91dCkge1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIGVycjtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19vc2YuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX29zZi5jXG5pbmRleCA5MjAwMjA3OWY4ZWFiLi5lNDgzNWIwZjRiYjFhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfb3NmLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX29zZi5jXG5AQCAtMzI1LDcgKzMyNSw3IEBAIHN0YXRpYyBpbnQgbmZubF9vc2ZfYWRkX2NhbGxiYWNrKHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgICAgIW1lbWNocihmLVx1MDAzZXZlcnNpb24sIDAsIE1BWEdFTlJFTEVOKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRrZiA9IGttYWxsb2Nfb2JqKHN0cnVjdCBuZl9vc2ZfZmluZ2VyKTtcbitcdGtmID0ga21hbGxvY19vYmooc3RydWN0IG5mX29zZl9maW5nZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWtmKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jIGIvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xuaW5kZXggOWRiZjEyN2RmOWM4MS4uODk3NjA4NzQzMzZjMyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNcbkBAIC0zNjUsNyArMzY1LDcgQEAgc3RhdGljIGJvb2wgbmZ0X2N0X3RtcGxfYWxsb2NfcGNwdSh2b2lkKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0dG1wID0gbmZfY3RfdG1wbF9hbGxvYyhcdTAwMjZpbml0X25ldCwgXHUwMDI2em9uZSwgR0ZQX0tFUk5FTCk7XG4rXHRcdHRtcCA9IG5mX2N0X3RtcGxfYWxsb2MoXHUwMDI2aW5pdF9uZXQsIFx1MDAyNnpvbmUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRcdGlmICghdG1wKSB7XG4gXHRcdFx0bmZ0X2N0X3RtcGxfcHV0X3BjcHUoKTtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG5AQCAtODQ4LDcgKzg0OCw4IEBAIG5mdF9jdF90aW1lb3V0X3BhcnNlX3BvbGljeSh2b2lkICp0aW1lb3V0cyxcbiBcdHN0cnVjdCBubGF0dHIgKip0YjtcbiBcdGludCByZXQgPSAwO1xuIFxuLVx0dGIgPSBremFsbG9jX29ianMoKnRiLCBsNHByb3RvLVx1MDAzZWN0bmxfdGltZW91dC5ubGF0dHJfbWF4ICsgMSk7XG4rXHR0YiA9IGt6YWxsb2Nfb2JqcygqdGIsIGw0cHJvdG8tXHUwMDNlY3RubF90aW1lb3V0Lm5sYXR0cl9tYXggKyAxLFxuK1x0XHRcdCAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcbiBcdGlmICghdGIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTkzNCw3ICs5MzUsNyBAQCBzdGF0aWMgaW50IG5mdF9jdF90aW1lb3V0X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHR9XG4gXG4gXHR0aW1lb3V0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5mX2N0X3RpbWVvdXQpICtcbi1cdFx0XHQgIGw0cHJvdG8tXHUwMDNlY3RubF90aW1lb3V0Lm9ial9zaXplLCBHRlBfS0VSTkVMKTtcbitcdFx0XHQgIGw0cHJvdG8tXHUwMDNlY3RubF90aW1lb3V0Lm9ial9zaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKHRpbWVvdXQgPT0gTlVMTCkge1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIGVycl9wcm90b19wdXQ7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jIGIvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jXG5pbmRleCA5NzhiYjBjMDExMDY4Li4zNjE3YmI2NjA5NGQ0IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmNcbkBAIC0yMjk4LDcgKzIyOTgsNyBAQCBzdGF0aWMgaW50IG5mdF9waXBhcG9faW5pdChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuIFx0aWYgKGZpZWxkX2NvdW50IFx1MDAzZSBORlRfUElQQVBPX01BWF9GSUVMRFMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0bSA9IGttYWxsb2NfZmxleCgqbSwgZiwgZmllbGRfY291bnQpO1xuK1x0bSA9IGttYWxsb2NfZmxleCgqbSwgZiwgZmllbGRfY291bnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIW0pXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfQ1QuYyBiL25ldC9uZXRmaWx0ZXIveHRfQ1QuY1xuaW5kZXggZTc4NjYwZGZkZjRiNi4uMjA1YmM2ZGQ5ODEyNSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfQ1QuY1xuKysrIGIvbmV0L25ldGZpbHRlci94dF9DVC5jXG5AQCAtOTEsNyArOTEsNyBAQCB4dF9jdF9zZXRfaGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3QgY2hhciAqaGVscGVyX25hbWUsXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFx0fVxuIFxuLVx0aGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfS0VSTkVMKTtcbitcdGhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmIChoZWxwID09IE5VTEwpIHtcbiBcdFx0bmZfY29ubnRyYWNrX2hlbHBlcl9wdXQoaGVscGVyKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMTgyLDcgKzE4Miw3IEBAIHN0YXRpYyBpbnQgeHRfY3RfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIsXG4gXHRpZiAoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgWFRfQ1RfWk9ORV9NQVJLKVxuIFx0XHR6b25lLmZsYWdzIHw9IE5GX0NUX0ZMQUdfTUFSSztcbiBcbi1cdGN0ID0gbmZfY3RfdG1wbF9hbGxvYyhwYXItXHUwMDNlbmV0LCBcdTAwMjZ6b25lLCBHRlBfS0VSTkVMKTtcbitcdGN0ID0gbmZfY3RfdG1wbF9hbGxvYyhwYXItXHUwMDNlbmV0LCBcdTAwMjZ6b25lLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFjdCkge1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIGVycjI7XG5AQCAtMTkwLDcgKzE5MCw3IEBAIHN0YXRpYyBpbnQgeHRfY3RfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIsXG4gXG4gXHRpZiAoKGluZm8tXHUwMDNlY3RfZXZlbnRzIHx8IGluZm8tXHUwMDNlZXhwX2V2ZW50cykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIW5mX2N0X2VjYWNoZV9leHRfYWRkKGN0LCBpbmZvLVx1MDAzZWN0X2V2ZW50cywgaW5mby1cdTAwM2VleHBfZXZlbnRzLFxuLVx0XHRcdFx0ICBHRlBfS0VSTkVMKSkge1xuK1x0XHRcdFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpKSB7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gZXJyMztcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jIGIvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY1xuaW5kZXggYmZjZjJkNDRlOTNkYi4uNzk2YjBkNDYxYzNkMCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcbkBAIC0xNTAsNyArMTUwLDcgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbylcbiB7XG4gXHRpbnQgcmV0O1xuIFxuLVx0aW5mby1cdTAwM2V0aW1lciA9IGt6YWxsb2Nfb2JqKCppbmZvLVx1MDAzZXRpbWVyKTtcbitcdGluZm8tXHUwMDNldGltZXIgPSBremFsbG9jX29iaigqaW5mby1cdTAwM2V0aW1lciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghaW5mby1cdTAwM2V0aW1lcikge1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIG91dDtcbkBAIC0xNjEsNyArMTYxLDcgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbylcbiBcdFx0Z290byBvdXRfZnJlZV90aW1lcjtcbiBcbiBcdHN5c2ZzX2F0dHJfaW5pdChcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0cik7XG4tXHRpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0ci5uYW1lID0ga3N0cmR1cChpbmZvLVx1MDAzZWxhYmVsLCBHRlBfS0VSTkVMKTtcbitcdGluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUgPSBrc3RyZHVwKGluZm8tXHUwMDNlbGFiZWwsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUpIHtcbiBcdFx0cmV0ID0gLUVOT01FTTtcbiBcdFx0Z290byBvdXRfZnJlZV90aW1lcjtcbkBAIC0xOTksNyArMTk5LDcgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlX3YxKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbylcbiB7XG4gXHRpbnQgcmV0O1xuIFxuLVx0aW5mby1cdTAwM2V0aW1lciA9IGttYWxsb2Nfb2JqKCppbmZvLVx1MDAzZXRpbWVyKTtcbitcdGluZm8tXHUwMDNldGltZXIgPSBrbWFsbG9jX29iaigqaW5mby1cdTAwM2V0aW1lciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghaW5mby1cdTAwM2V0aW1lcikge1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIG91dDtcbkBAIC0yMTAsNyArMjEwLDcgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlX3YxKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbylcbiBcdFx0Z290byBvdXRfZnJlZV90aW1lcjtcbiBcbiBcdHN5c2ZzX2F0dHJfaW5pdChcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0cik7XG4tXHRpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0ci5uYW1lID0ga3N0cmR1cChpbmZvLVx1MDAzZWxhYmVsLCBHRlBfS0VSTkVMKTtcbitcdGluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUgPSBrc3RyZHVwKGluZm8tXHUwMDNlbGFiZWwsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUpIHtcbiBcdFx0cmV0ID0gLUVOT01FTTtcbiBcdFx0Z290byBvdXRfZnJlZV90aW1lcjtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0xFRC5jIGIvbmV0L25ldGZpbHRlci94dF9MRUQuY1xuaW5kZXggY2FhYWY0ZDJjNTg0Mi4uM2NiYjhkNjFkNDE3NSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfTEVELmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfTEVELmNcbkBAIC0xMTEsMTEgKzExMSwxMiBAQCBzdGF0aWMgaW50IGxlZF90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcbiBcdH1cbiBcbiBcdGVyciA9IC1FTk9NRU07XG4tXHRsZWRpbnRlcm5hbCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB4dF9sZWRfaW5mb19pbnRlcm5hbCk7XG4rXHRsZWRpbnRlcm5hbCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB4dF9sZWRfaW5mb19pbnRlcm5hbCxcbitcdFx0XHRcdCAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbGVkaW50ZXJuYWwpXG4gXHRcdGdvdG8gZXhpdF9tdXRleF9vbmx5O1xuIFxuLVx0bGVkaW50ZXJuYWwtXHUwMDNldHJpZ2dlcl9pZCA9IGtzdHJkdXAobGVkaW5mby1cdTAwM2VpZCwgR0ZQX0tFUk5FTCk7XG4rXHRsZWRpbnRlcm5hbC1cdTAwM2V0cmlnZ2VyX2lkID0ga3N0cmR1cChsZWRpbmZvLVx1MDAzZWlkLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFsZWRpbnRlcm5hbC1cdTAwM2V0cmlnZ2VyX2lkKVxuIFx0XHRnb3RvIGV4aXRfaW50ZXJuYWxfYWxsb2M7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9SQVRFRVNULmMgYi9uZXQvbmV0ZmlsdGVyL3h0X1JBVEVFU1QuY1xuaW5kZXggOTEyNzBkNDY3ZmZkZi4uMmY2YjUxMmI3MWU4MCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfUkFURUVTVC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X1JBVEVFU1QuY1xuQEAgLTEzOSw3ICsxMzksNyBAQCBzdGF0aWMgaW50IHh0X3JhdGVlc3RfdGdfY2hlY2tlbnRyeShjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcbiBcdH1cbiBcbiBcdHJldCA9IC1FTk9NRU07XG4tXHRlc3QgPSBremFsbG9jX29iaigqZXN0KTtcbitcdGVzdCA9IGt6YWxsb2Nfb2JqKCplc3QsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWVzdClcbiBcdFx0Z290byBlcnIxO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfVEVFLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jXG5pbmRleCA1ZDM0Y2ViODkzZWRhLi40OGI0MTA0ZjA4NTk4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9URUUuY1xuKysrIGIvbmV0L25ldGZpbHRlci94dF9URUUuY1xuQEAgLTEwNiw3ICsxMDYsNyBAQCBzdGF0aWMgaW50IHRlZV90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcbiBcdFx0aWYgKGluZm8tXHUwMDNlb2lmW3NpemVvZihpbmZvLVx1MDAzZW9pZiktMV0gIT0gJ1xcMCcpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRcdHByaXYgPSBremFsbG9jX29iaigqcHJpdik7XG4rXHRcdHByaXYgPSBremFsbG9jX29iaigqcHJpdiwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdFx0aWYgKHByaXYgPT0gTlVMTClcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jIGIvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuY1xuaW5kZXggOWFmMGZhODk1ZjczMC4uYjQ1ZjA2YjA2YzI2ZCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmNcbkBAIC0zMTksNyArMzE5LDcgQEAgc3RhdGljIGludCBodGFibGVfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGhhc2hsaW1pdF9jZmczICpjZmcsXG4gXHRoaW5mby1cdTAwM2Vjb3VudCA9IDA7XG4gXHRoaW5mby1cdTAwM2VmYW1pbHkgPSBmYW1pbHk7XG4gXHRoaW5mby1cdTAwM2VybmRfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbi1cdGhpbmZvLVx1MDAzZW5hbWUgPSBrc3RyZHVwKG5hbWUsIEdGUF9LRVJORUwpO1xuK1x0aGluZm8tXHUwMDNlbmFtZSA9IGtzdHJkdXAobmFtZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghaGluZm8tXHUwMDNlbmFtZSkge1xuIFx0XHRrdmZyZWUoaGluZm8pO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmNcbmluZGV4IDg3ZDc0ZGExNGMwYjcuLmFkNDhiNjg3OWIxMzAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfbGltaXQuY1xuQEAgLTExNSw3ICsxMTUsNyBAQCBzdGF0aWMgaW50IGxpbWl0X210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFx0XHRyZXR1cm4gLUVSQU5HRTtcbiBcdH1cbiBcbi1cdHByaXYgPSBrbWFsbG9jX29iaigqcHJpdik7XG4rXHRwcml2ID0ga21hbGxvY19vYmooKnByaXYsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAocHJpdiA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmNcbmluZGV4IGIwNWM1YzhkYWM3OGIuLmUyMWVjMTUyZDE2YTcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfcXVvdGEuY1xuQEAgLTUwLDcgKzUwLDcgQEAgc3RhdGljIGludCBxdW90YV9tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcdGlmIChxLVx1MDAzZWZsYWdzIFx1MDAyNiB+WFRfUVVPVEFfTUFTSylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRxLVx1MDAzZW1hc3RlciA9IGttYWxsb2Nfb2JqKCpxLVx1MDAzZW1hc3Rlcik7XG4rXHRxLVx1MDAzZW1hc3RlciA9IGttYWxsb2Nfb2JqKCpxLVx1MDAzZW1hc3RlciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmIChxLVx1MDAzZW1hc3RlciA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jIGIvbmV0L25ldGZpbHRlci94dF9yZWNlbnQuY1xuaW5kZXggZDM0ODMxY2UzYWRmYi4uNTVmMWYyZDg5OTUyZCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmNcbkBAIC0zOTEsNyArMzkxLDggQEAgc3RhdGljIGludCByZWNlbnRfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0dCA9IGt2emFsbG9jX2ZsZXgoKnQsIGlwaGFzaCwgaXBfbGlzdF9oYXNoX3NpemUpO1xuK1x0dCA9IGt2emFsbG9jX2ZsZXgoKnQsIGlwaGFzaCwgaXBfbGlzdF9oYXNoX3NpemUsXG4rXHRcdFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKHQgPT0gTlVMTCkge1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIG91dDtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5jIGIvbmV0L25ldGZpbHRlci94dF9zdGF0aXN0aWMuY1xuaW5kZXggMzM0ZTA5NzcxYWJmOS4uMWZmYzU5ZDkwYmIwYSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmNcbkBAIC01OCw3ICs1OCw3IEBAIHN0YXRpYyBpbnQgc3RhdGlzdGljX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFx0ICAgIGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IH5YVF9TVEFUSVNUSUNfTUFTSylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpbmZvLVx1MDAzZW1hc3RlciA9IGt6YWxsb2Nfb2JqKCppbmZvLVx1MDAzZW1hc3Rlcik7XG4rXHRpbmZvLVx1MDAzZW1hc3RlciA9IGt6YWxsb2Nfb2JqKCppbmZvLVx1MDAzZW1hc3RlciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmIChpbmZvLVx1MDAzZW1hc3RlciA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdGF0b21pY19zZXQoXHUwMDI2aW5mby1cdTAwM2VtYXN0ZXItXHUwMDNlY291bnQsIGluZm8tXHUwMDNldS5udGguY291bnQpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfc3RyaW5nLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3N0cmluZy5jXG5pbmRleCA4Y2UyNWJjOWIyNzc1Li41MmMxZGViMDJjZGM2IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9zdHJpbmcuY1xuKysrIGIvbmV0L25ldGZpbHRlci94dF9zdHJpbmcuY1xuQEAgLTU0LDcgKzU0LDcgQEAgc3RhdGljIGludCBzdHJpbmdfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXHRpZiAoY29uZi1cdTAwM2V1LnYxLmZsYWdzIFx1MDAyNiBYVF9TVFJJTkdfRkxBR19JR05PUkVDQVNFKVxuIFx0XHRmbGFncyB8PSBUU19JR05PUkVDQVNFO1xuIFx0dHNfY29uZiA9IHRleHRzZWFyY2hfcHJlcGFyZShjb25mLVx1MDAzZWFsZ28sIGNvbmYtXHUwMDNlcGF0dGVybiwgY29uZi1cdTAwM2VwYXRsZW4sXG4tXHRcdFx0XHQgICAgIEdGUF9LRVJORUwsIGZsYWdzKTtcbitcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTF9BQ0NPVU5ULCBmbGFncyk7XG4gXHRpZiAoSVNfRVJSKHRzX2NvbmYpKVxuIFx0XHRyZXR1cm4gUFRSX0VSUih0c19jb25mKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE0OjU2OjIyLjI1NjcxMTQ3N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjAxODU4ODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldGZpbHRlciBNZW1vcnkgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCdzIHN3aXRjaGluZyBuZXRmaWx0ZXIncyBtZW1vcnkgYWxsb2NhdGlvbnMgZnJvbSBwbGFpbiBgR0ZQX0tFUk5FTGAgdG8gYEdGUF9LRVJORUxfQUNDT1VOVGAuIFRoaXMgaXMgYmFzaWNhbGx5IGEgbWVjaGFuaWNhbCBjaGFuZ2UsIGp1c3QgYWRkaW5nIGFjY291bnRpbmcgdG8gdGhlc2UgYWxsb2NhdGlvbnMuIE15IGZpcnN0IHRob3VnaHQgaXM6IGRvZXMgdGhpcyAqYWN0dWFsbHkqIGNoYW5nZSBhbnl0aGluZyBmcm9tIGEgZnVuY3Rpb25hbCBwZXJzcGVjdGl2ZT8gTWVtb3J5IGFjY291bnRpbmcsIGJ5IGl0c2VsZiwgZG9lc24ndCBhbHRlciB0aGUga2VybmVsJ3MgZXhlY3V0aW9uIGZsb3cuIFRoZSBvbmx5IHNpZGUgZWZmZWN0IGlzIGl0IG1heSB0cmlnZ2VyIE9PTSBlcnJvcnMgb3IgY2dyb3VwIGxpbWl0cyBpZiBtZW1vcnkgY29uc3RyYWludHMgYXJlIGhpdC5cblxuQnV0LCBzaG91bGQgSSBib3RoZXIgZnV6emluZyB0aGlzPyBOb3JtYWxseSwgYWRkaW5nIGBHRlBfS0VSTkVMX0FDQ09VTlRgIGlzIGEgZ29vZCB0aGluZyBmb3Igc2VjdXJpdHkgYW5kIGFjY291bnRpbmcuIEl0IGhlbHBzIHByZXZlbnQgdW5wcml2aWxlZ2VkIHVzZXJzIGZyb20gaG9nZ2luZyBtZW1vcnkgd2l0aG91dCBpdCBiZWluZyBwcm9wZXJseSB0cmFja2VkIGJ5IHRoZWlyIGNncm91cC4gTm8gbmV3IGxvZ2ljIGlzIGJlaW5nIGludHJvZHVjZWQsIGl0IGlzIG9ubHkgYSBjaGFuZ2UgaW4gdGhlIEdGUCBmbGFncy5cblxuSGFuZyBvbiwgbGV0J3MgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi5cblxuYGBgY1xuLVx0dG1wbCA9IGt6YWxsb2Nfb2JqKCp0bXBsKTtcbitcdHRtcGwgPSBremFsbG9jX29iaigqdG1wbCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmBgYFxuXG5XYWl0LCBga3phbGxvY19vYmpgPyBUaGF0IGRvZXNuJ3QgbG9vayBmYW1pbGlhci4gYGt6YWxsb2Nfb2JqYCBpc24ndCBhIHN0YW5kYXJkIGtlcm5lbCBtYWNybywgaXMgaXQ/IEJldHRlciBjaGVjayBpZiB0aGlzIGlzIGV2ZW4gc29tZXRoaW5nIHRoYXQgZXhpc3RzIGluIHRoZSBrZXJuZWwuIEknbSBnb2luZyB0byBydW4gYSBgZ3JlcHBlcmAgc2VhcmNoIHRvIHNlZSBpZiBga3phbGxvY19vYmpgIGlzIGRlZmluZWQgYW55d2hlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzA0LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTQ6NTY6MzIuODU4NTc2MDk0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MTE2MjI4ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3phbGxvY19vYmpcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3OTI3MyBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdD0xMDM9bGlzdDpcXG4tLVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTE0LVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3Q6MTE1OiAgICAgICAgICBncm9jayA9IGt6YWxsb2Nfb2JqKCpncm9jayk7XFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMTYtICAgICAgICAgIGlmICghZ3JvY2spXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0LTEyNS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0OjEyNjogICAgICAgICAgZGltaXRyaSA9IGt6YWxsb2Nfb2JqKCpkaW1pdHJpKTtcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0LTEyNy0gICAgICAgICAgaWYgKCFkaW1pdHJpKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0PTQ1PWEgbWVzc2FnZSBhbmQgYSBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgQVBJIGFuZCByZXR1cm4gaW1tZWRpYXRlbHkpLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0LTg5LVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdDo5MDpcXHRcXHRkY19zeW5jID0ga3phbGxvY19vYmooKmRjX3N5bmMpO1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdDo5MTpcXHRcXHRkY19hc3luYyA9IGt6YWxsb2Nfb2JqKCpkY19hc3luYyk7XFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0LTkyLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0PTI2PUV4YW1wbGU6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWVkaWEvdjRsMi1maC5yc3QtNDQtXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0OjQ1OlxcdFxcdG15X2ZoID0ga3phbGxvY19vYmooKm15X2ZoKTtcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWVkaWEvdjRsMi1maC5yc3QtNDYtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05Mzg9VGhlIGtlcm5lbCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGdlbmVyYWwgcHVycG9zZSBtZW1vcnkgYWxsb2NhdG9yczpcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5Mzk6a21hbGxvYygpLCBremFsbG9jKCksIGttYWxsb2Nfb2JqcygpLCBremFsbG9jX29ianMoKSwgdm1hbGxvYygpLCBhbmRcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDAtdnphbGxvYygpLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgZnVydGhlciBpbmZvcm1hdGlvblxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTY0PVRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgYWxsb2NhdGluZyBhIHplcm9lZCBhcnJheSBpcyB0aGUgZm9sbG93aW5nOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTY3LVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk2ODpcXHRwID0ga3phbGxvY19vYmpzKCpwLCBuLCAuLi4pO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk2OS1cXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdD0zOTg9YmVjb21lLCByZXNwZWN0aXZlbHk6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMC1cXHRwdHIgPSBrbWFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6NDAxOlxcdHB0ciA9IGt6YWxsb2Nfb2JqKCpwdHIgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDItXFx0cHRyID0ga21hbGxvY19vYmpzKCpwdHIsIGNvdW50IFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6NDAzOlxcdHB0ciA9IGt6YWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwNC1cXHRwdHIgPSBrbWFsbG9jX2ZsZXgoKnB0ciwgZmxleF9tZW1iZXIsIGNvdW50IFssIGdmcF0gKTtcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD0yMDg9dG8gZGV0YWlscyBleHBsYWluZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9uLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTI2OC0gICAgICAgICAgICAgIC8qIGFsbG9jYXRlIGEgY2hpcC1zcGVjaWZpYyBkYXRhIHdpdGggemVybyBmaWxsZWQgKi9cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6MjY5OiAgICAgICAgICAgICAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMjcwLSAgICAgICAgICAgICAgaWYgKGNoaXAgPT0gTlVMTClcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD02MjM9QWZ0ZXIgYWxsb2NhdGluZyBhIGNhcmQgaW5zdGFuY2UgdmlhIDpjOmZ1bmM6YHNuZF9jYXJkX25ldygpYFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTYzMC0gIC4uLi4uXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjYzMTogIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTYzMi1cXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD02OTg9ZGVzdHJ1Y3RvciBhbmQgUENJIGVudHJpZXMuIEV4YW1wbGUgY29kZSBpcyBzaG93biBmaXJzdCwgYmVsb3c6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTc0OS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6NzUwOiAgICAgICAgICAgICAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtNzUxLSAgICAgICAgICAgICAgaWYgKGNoaXAgPT0gTlVMTCkge1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTM4MjM9Y2hpcCBkYXRhIGluZGl2aWR1YWxseTo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzgzNS0gICAgICAgICAgLi4uLlxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDozODM2OiAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0zODM3LSAgICAgICAgICAuLi4uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQ9Nzk0PWludCBteV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0LTgwMS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQ6ODAyOlxcdG15X2ZoID0ga3phbGxvY19vYmooKm15X2ZoKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQtODAzLVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmM9NjQ9bW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGY2NF9FaGRyICpoZHIsIEVsZjY0X1NoZHIgKnNlY2hkcnMsXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYy05NS1cXHRuc3ltcyA9IHN5bXRhYi1cXHUwMDNlc2hfc2l6ZSAvIHNpemVvZihFbGY2NF9TeW0pO1xcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jOjk2OlxcdGNoYWlucyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgZ290X2VudHJ5LCBuc3ltcyk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMtOTctXFx0aWYgKCFjaGFpbnMpIHtcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmM9MzkwPXJlZ2lzdGVyX2NwdXModm9pZClcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmMtMzk0LVxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYzozOTU6XFx0XFx0c3RydWN0IGNwdSAqcCA9IGt6YWxsb2Nfb2JqKCpwKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTM5Ni1cXHRcXHRpZiAoIXApXFxuLS1cXG5hcmNoL2FyYy9uZXQvYnBmX2ppdF9jb3JlLmM9MTEyMD1zdGF0aWMgaW50IGppdF9wcmVwYXJlX2ZpbmFsX21lbV9hbGxvYyhzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eClcXG4tLVxcbmFyY2gvYXJjL25ldC9icGZfaml0X2NvcmUuYy0xMTMxLVxcdGlmIChjdHgtXFx1MDAzZW5lZWRfZXh0cmFfcGFzcykge1xcbmFyY2gvYXJjL25ldC9icGZfaml0X2NvcmUuYzoxMTMyOlxcdFxcdGN0eC1cXHUwMDNlaml0X2RhdGEgPSBremFsbG9jX29iaigqY3R4LVxcdTAwM2VqaXRfZGF0YSk7XFxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jLTExMzMtXFx0XFx0aWYgKCFjdHgtXFx1MDAzZWppdF9kYXRhKVxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jPTIyMD1sb2NvbW9faW5pdF9vbmVfY2hpbGQoc3RydWN0IGxvY29tbyAqbGNoaXAsIHN0cnVjdCBsb2NvbW9fZGV2X2luZm8gKmluZm8pXFxuLS1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMjI0LVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYzoyMjU6XFx0ZGV2ID0ga3phbGxvY19vYmooc3RydWN0IGxvY29tb19kZXYpO1xcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0yMjYtXFx0aWYgKCFkZXYpIHtcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYz0zNTY9X19sb2NvbW9fcHJvYmUoc3RydWN0IGRldmljZSAqbWUsIHN0cnVjdCByZXNvdXJjZSAqbWVtLCBpbnQgaXJxKVxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTM2Mi1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM6MzYzOlxcdGxjaGlwID0ga3phbGxvY19vYmooc3RydWN0IGxvY29tbyk7XFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTM2NC1cXHRpZiAoIWxjaGlwKVxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jPTczMz1zYTExMTFfaW5pdF9vbmVfY2hpbGQoc3RydWN0IHNhMTExMSAqc2FjaGlwLCBzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCxcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYy03MzktXFxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jOjc0MDpcXHRkZXYgPSBremFsbG9jX29iaihzdHJ1Y3Qgc2ExMTExX2Rldik7XFxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jLTc0MS1cXHRpZiAoIWRldikge1xcbi0tXFxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmM9MTc4PXN0YXRpYyBpbnQgc2Nvb3BfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jLTE4Ny1cXG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYzoxODg6XFx0ZGV2cHRyID0ga3phbGxvY19vYmooc3RydWN0IHNjb29wX2Rldik7XFxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmMtMTg5LVxcdGlmICghZGV2cHRyKVxcbi0tXFxuYXJjaC9hcm0va2VybmVsL3NtcC5jPTEwOD1zdGF0aWMgaW50IHNlY29uZGFyeV9iaWdsaXR0bGVfcHJlcGFyZSh1bnNpZ25lZCBpbnQgY3B1KVxcbi0tXFxuYXJjaC9hcm0va2VybmVsL3NtcC5jLTExMC1cXHRpZiAoIWNwdV92dGFibGVbY3B1XSlcXG5hcmNoL2FybS9rZXJuZWwvc21wLmM6MTExOlxcdFxcdGNwdV92dGFibGVbY3B1XSA9IGt6YWxsb2Nfb2JqKCpjcHVfdnRhYmxlW2NwdV0pO1xcbmFyY2gvYXJtL2tlcm5lbC9zbXAuYy0xMTItXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvdmRzby5jPTE2OT1zdGF0aWMgaW50IF9faW5pdCB2ZHNvX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmMtMTgxLVxcdC8qIEFsbG9jYXRlIHRoZSBWRFNPIHRleHQgcGFnZWxpc3QgKi9cXG5hcmNoL2FybS9rZXJuZWwvdmRzby5jOjE4MjpcXHR2ZHNvX3RleHRfcGFnZWxpc3QgPSBremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdGV4dF9wYWdlcyk7XFxuYXJjaC9hcm0va2VybmVsL3Zkc28uYy0xODMtXFx0aWYgKHZkc29fdGV4dF9wYWdlbGlzdCA9PSBOVUxMKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYz0yNjE9aW50IF9faW5pdCBkYzIxMjg1X3NldHVwKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYy0yNjQtXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYzoyNjU6XFx0cmVzID0ga3phbGxvY19vYmpzKHN0cnVjdCByZXNvdXJjZSwgMik7XFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYy0yNjYtXFx0aWYgKCFyZXMpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmM9Njk9c3RhdGljIGludCBfX2luaXQgZWJzYTI4NV9sZWRzX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmMtODYtXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYzo4NzpcXHRcXHRsZWQgPSBremFsbG9jX29iaigqbGVkKTtcXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jLTg4LVxcdFxcdGlmICghbGVkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jPTcyMD1zdGF0aWMgaW50IF9faW5pdCBuZXR3aW5kZXJfbGVkc19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmMtNzI5LVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItaHcuYzo3MzA6XFx0XFx0bGVkID0ga3phbGxvY19vYmooKmxlZCk7XFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jLTczMS1cXHRcXHRpZiAoIWxlZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYz00NzM9c3RhdGljIGludCBpbXhfbW1kY19wZXJmX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgdm9pZCBfX2lvbWVtICptbWRjX2Jhc2UsXFxuLS1cXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmMtNDc5LVxcbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYzo0ODA6XFx0cG11X21tZGMgPSBremFsbG9jX29iaigqcG11X21tZGMpO1xcbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYy00ODEtXFx0aWYgKCFwbXVfbW1kYykge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jPTExND1zdGF0aWMgdm9pZCBfX2luaXQgaTJjX3F1aXJrKHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMtMTI5LVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYzoxMzA6XFx0XFx0bmV3X2NvbXBhdCA9IGt6YWxsb2Nfb2JqKCpuZXdfY29tcGF0KTtcXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMtMTMxLVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYz0xNjM9c3RhdGljIHZvaWQgX19pbml0IGFybWFkYV8zNzVfMzgwX2NvaGVyZW5jeV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXFxuLS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jLTE4Ny1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jOjE4ODpcXHRcXHRwID0ga3phbGxvY19vYmooKnApO1xcbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmMtMTg5LVxcdFxcdHAtXFx1MDAzZW5hbWUgPSBrc3RyZHVwKFxcXCJhcm0saW8tY29oZXJlbnRcXFwiLCBHRlBfS0VSTkVMKTtcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmM9MTQ4PXN0YXRpYyBpbnQgX19pbml0IG12ZWJ1X3NvY19kZXZpY2Uodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmMtMTU2LVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmM6MTU3OlxcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xcbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmMtMTU4LVxcdGlmICghc29jX2Rldl9hdHRyKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYz0zODA9c3RhdGljIHZvaWQgX19pbml0IG14c19tYWNoaW5lX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmMtMzg5LVxcbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmM6MzkwOlxcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xcbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmMtMzkxLVxcdGlmICghc29jX2Rldl9hdHRyKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYz0yOTQ9c3RhdGljIGludCBfX2luaXQgb21hcDFfc3lzdGVtX2RtYV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jLTMyMS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jOjMyMjpcXHRkID0ga3phbGxvY19vYmooKmQpO1xcbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmMtMzIzLVxcdGlmICghZCkge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jPTI5Mj1zdGF0aWMgdm9pZCBvbWFwX21jYnNwX3JlZ2lzdGVyX2JvYXJkX2NmZyhzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgaW50IHJlc19jb3VudCxcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYy0yOTYtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jOjI5NzpcXHRvbWFwX21jYnNwX2RldmljZXMgPSBremFsbG9jX29ianMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqLCBzaXplKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMtMjk4LVxcdGlmICghb21hcF9tY2JzcF9kZXZpY2VzKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmM9NTE9c3RhdGljIGludCBfX2luaXQgb21hcDFfZG1fdGltZXJfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lci5jLTEyNy1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmM6MTI4OlxcdFxcdHBkYXRhID0ga3phbGxvY19vYmooKnBkYXRhKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmMtMTI5LVxcdFxcdGlmICghcGRhdGEpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jPTIzMD12b2lkIG9tYXAyeHh4X2Nsa3RfdnBzX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jLTIzOS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQuYzoyNDA6XFx0aHcgPSBremFsbG9jX29iaigqaHcpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jLTI0MS1cXHRpZiAoIWh3KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jPTc4Nj12b2lkIF9faW5pdCBvbWFwX3NvY19kZXZpY2VfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jLTc5MC1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmM6NzkxOlxcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYy03OTItXFx0aWYgKCFzb2NfZGV2X2F0dHIpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmM9MTMxPXN0YXRpYyBpbnQgb21hcF9kZXZpY2VfYnVpbGRfZnJvbV9kdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jLTE1OC1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmM6MTU5OlxcdGh3bW9kcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3Qgb21hcF9od21vZCAqLCBvaF9jbnQpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9kZXZpY2UuYy0xNjAtXFx0aWYgKCFod21vZHMpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jPTMzODE9c3RhdGljIGludCBvbWFwX2h3bW9kX2FsbG9jYXRlX21vZHVsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvbWFwX2h3bW9kICpvaCxcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTMzOTQtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzM5NTpcXHRzeXNjID0ga3phbGxvY19vYmooKnN5c2MpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTMzOTYtXFx0aWYgKCFzeXNjKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzQyNC1cXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2b2gtXFx1MDAzZXNsYXZlX3BvcnRzKSkge1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jOjM0MjU6XFx0XFx0b2kgPSBremFsbG9jX29iaigqb2kpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM0MjYtXFx0XFx0aWYgKCFvaSlcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jPTM1MTM9aW50IG9tYXBfaHdtb2RfaW5pdF9tb2R1bGUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzUyNy1cXHRpZiAoIW9oKSB7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzUyODpcXHRcXHRvaCA9IGt6YWxsb2Nfb2JqKCpvaCk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzUyOS1cXHRcXHRpZiAoIW9oKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzUzOC1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozNTM5OlxcdFxcdG9oLVxcdTAwM2VjbGFzcyA9IGt6YWxsb2Nfb2JqKCpvaC1cXHUwMDNlY2xhc3MpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM1NDAtXFx0XFx0aWYgKCFvaC1cXHUwMDNlY2xhc3MpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYz0zNzk9c3RhdGljIGludCBfX2luaXQgYW14M19pZGxlX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpjcHVfbm9kZSwgaW50IGNwdSlcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYy00MTItXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jOjQxMzpcXHRpZGxlX3N0YXRlcyA9IGt6YWxsb2Nfb2JqcygqaWRsZV9zdGF0ZXMsIHN0YXRlX2NvdW50KTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmMtNDE0LVxcdGlmICghaWRsZV9zdGF0ZXMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyX2RldmljZS5jPTMwPXN0YXRpYyB2b2lkIF9faW5pdCBzcl9zZXRfbnZhbHVlcyhzdHJ1Y3Qgb21hcF92b2x0X2RhdGEgKnZvbHRfZGF0YSxcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmMtNDEtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYzo0MjpcXHRudmFsdWVfdGFibGUgPSBremFsbG9jX29ianMoKm52YWx1ZV90YWJsZSwgY291bnQpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmMtNDMtXFx0aWYgKCFudmFsdWVfdGFibGUpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmM9MTM5PXN0YXRpYyBpbnQgX19pbml0IHBjaWVfc2V0dXAoc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTE3MS1cXHQgKi9cXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmM6MTcyOlxcdHJlcyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByZXNvdXJjZSk7XFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTE3My1cXHRpZiAoIXJlcylcXG4tLVxcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYz00NjY9c3RhdGljIGludCBfX2luaXQgcGNpX3NldHVwKHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cylcXG4tLVxcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy00OTItXFx0ICovXFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jOjQ5MzpcXHRyZXMgPSBremFsbG9jX29iaihzdHJ1Y3QgcmVzb3VyY2UpO1xcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy00OTQtXFx0aWYgKCFyZXMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jPTY4OT1zdGF0aWMgc3RydWN0IGV4cGFuc2lvbl9jYXJkICpfX2luaXQgZWNhcmRfYWxsb2NfY2FyZChpbnQgdHlwZSwgaW50IHNsb3QpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jLTY5NC1cXG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jOjY5NTpcXHRlYyA9IGt6YWxsb2Nfb2JqKGVjYXJkX3QpO1xcbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmMtNjk2LVxcdGlmICghZWMpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM9OTM9aW50IF9faW5pdCBzYTExeHhfY2xrX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTA5LVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM6MTEwOlxcdGh3ID0ga3phbGxvY19vYmooKmh3KTtcXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTExMS1cXHRpZiAoIWh3KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMzEtXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYzoxMzI6XFx0aHcgPSBremFsbG9jX29iaigqaHcpO1xcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTMzLVxcdGlmICghaHcpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmM9MzE3PWludCBfX2luaXQgc2ExMXgwX3JlZ2lzdGVyX2ZpeGVkX3JlZ3VsYXRvcihpbnQgbixcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYy0zMjMtXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jOjMyNDpcXHRjZmctXFx1MDAzZWluaXRfZGF0YSA9IGlkID0ga3phbGxvY19vYmooKmNmZy1cXHUwMDNlaW5pdF9kYXRhKTtcXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmMtMzI1LVxcdGlmICghY2ZnLVxcdTAwM2Vpbml0X2RhdGEpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jPTIyNT1zdGF0aWMgaW50IG5lcG9uc2V0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldilcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMtMjc4LVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmM6Mjc5OlxcdGQgPSBremFsbG9jX29iaigqZCk7XFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYy0yODAtXFx0aWYgKCFkKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYz0xNDE9c3RhdGljIGludCBfX2luaXQgcmNhcl9nZW4yX3JlZ3VsYXRvcl9xdWlyayh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmMtMTY2LVxcbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jOjE2NzpcXHRcXHRxdWlyayA9IGt6YWxsb2Nfb2JqKCpxdWlyayk7XFxuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmMtMTY4LVxcdFxcdGlmICghcXVpcmspIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jPTM5Mz1zdGF0aWMgaW50IHZlX3NwY19wb3B1bGF0ZV9vcHBzKHVpbnQzMl90IGNsdXN0ZXIpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy0zOTctXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM6Mzk4OlxcdG9wcHMgPSBremFsbG9jX29ianMoKm9wcHMsIE1BWF9PUFBTKTtcXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy0zOTktXFx0aWYgKCFvcHBzKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9NDQyPWludCBfX2luaXQgdmVfc3BjX2luaXQodm9pZCBfX2lvbWVtICpiYXNlYWRkciwgdTMyIGExNV9jbHVzaWQsIGludCBpcnEpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy00NDQtXFx0aW50IHJldDtcXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYzo0NDU6XFx0aW5mbyA9IGt6YWxsb2Nfb2JqKCppbmZvKTtcXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy00NDYtXFx0aWYgKCFpbmZvKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9NTIzPXN0YXRpYyBzdHJ1Y3QgY2xrICp2ZV9zcGNfY2xrX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmNwdV9kZXYpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy01MjctXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM6NTI4OlxcdHNwYyA9IGt6YWxsb2Nfb2JqKCpzcGMpO1xcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTUyOS1cXHRpZiAoIXNwYylcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jPTEyMz1zdGF0aWMgdm9pZCBfX2luaXQgdmVyc2F0aWxlX2R0X3BjaV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYy0xNDQtXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlLmM6MTQ1OlxcdG5ld3Byb3AgPSBremFsbG9jX29iaigqbmV3cHJvcCk7XFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlLmMtMTQ2LVxcdGlmICghbmV3cHJvcClcXG4tLVxcbmFyY2gvYXJtL21hY2gtenlucS9jb21tb24uYz0xMDU9c3RhdGljIHZvaWQgX19pbml0IHp5bnFfaW5pdF9tYWNoaW5lKHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmMtMTEwLVxcbmFyY2gvYXJtL21hY2gtenlucS9jb21tb24uYzoxMTE6XFx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XFxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jLTExMi1cXHRpZiAoIXNvY19kZXZfYXR0cilcXG4tLVxcbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmM9NTAzPXN0YXRpYyBfX2luaXQgaW50IGwyeDBfcG11X2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmMtNTA5LVxcbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmM6NTEwOlxcdGwyeDBfcG11ID0ga3phbGxvY19vYmooKmwyeDBfcG11KTtcXG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jLTUxMS1cXHRpZiAoIWwyeDBfcG11KSB7XFxuLS1cXG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jPTMxNT1zdGF0aWMgaW50IF9faW5pdCBfX3VuaXBoaWVyX2NhY2hlX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCxcXG4tLVxcbmFyY2gvYXJtL21tL2NhY2hlLXVuaXBoaWVyLmMtMzQ0LVxcbmFyY2gvYXJtL21tL2NhY2hlLXVuaXBoaWVyLmM6MzQ1OlxcdGRhdGEgPSBremFsbG9jX29iaigqZGF0YSk7XFxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYy0zNDYtXFx0aWYgKCFkYXRhKVxcbi0tXFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYz01MzM9c3RhdGljIHZvaWQgKl9fZG1hX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmhhbmRsZSxcXG4tLVxcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtNTYwLVxcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmM6NTYxOlxcdGJ1ZiA9IGt6YWxsb2Nfb2JqKCpidWYsXFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy01NjItXFx0XFx0XFx0ICBnZnAgXFx1MDAyNiB+KF9fR0ZQX0RNQSB8IF9fR0ZQX0RNQTMyIHwgX19HRlBfSElHSE1FTSkpO1xcbi0tXFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYz0xNDg3PWFybV9pb21tdV9jcmVhdGVfbWFwcGluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYmFzZSwgdTY0IHNpemUpXFxuLS1cXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTE1MDYtXFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYzoxNTA3OlxcdG1hcHBpbmcgPSBremFsbG9jX29iaihzdHJ1Y3QgZG1hX2lvbW11X21hcHBpbmcpO1xcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtMTUwOC1cXHRpZiAoIW1hcHBpbmcpXFxuLS1cXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmM9MzE2PWludCBfX2luaXQgYXJjaF94ZW5fdW5wb3B1bGF0ZWRfaW5pdChzdHJ1Y3QgcmVzb3VyY2UgKipyZXMpXFxuLS1cXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzQzLVxcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYzozNDQ6XFx0cmVncyA9IGt6YWxsb2Nfb2JqcygqcmVncywgbnJfcmVnKTtcXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzQ1LVxcdGlmICghcmVncykge1xcbi0tXFxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jLTM4Ny1cXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmM6Mzg4OlxcdFxcdHRtcF9yZXMgPSBremFsbG9jX29iaigqdG1wX3Jlcyk7XFxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jLTM4OS1cXHRcXHRpZiAoIXRtcF9yZXMpIHtcXG4tLVxcbmFyY2gvYXJtL3hlbi9wMm0uYz0xNTA9Ym9vbCBfX3NldF9waHlzX3RvX21hY2hpbmVfbXVsdGkodW5zaWduZWQgbG9uZyBwZm4sXFxuLS1cXG5hcmNoL2FybS94ZW4vcDJtLmMtMTc4LVxcbmFyY2gvYXJtL3hlbi9wMm0uYzoxNzk6XFx0cDJtX2VudHJ5ID0ga3phbGxvY19vYmooKnAybV9lbnRyeSwgR0ZQX05PV0FJVCk7XFxuYXJjaC9hcm0veGVuL3AybS5jLTE4MC1cXHRpZiAoIXAybV9lbnRyeSlcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYz02OD1zdGF0aWMgaW50IF9faW5pdCBfX3Zkc29faW5pdChlbnVtIHZkc29fYWJpIGFiaSlcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYy04My1cXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmM6ODQ6XFx0dmRzb19wYWdlbGlzdCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX2luZm9bYWJpXS52ZHNvX3BhZ2VzKTtcXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmMtODUtXFx0aWYgKHZkc29fcGFnZWxpc3QgPT0gTlVMTClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTQ4MD1zdGF0aWMgaW50IHNoYXJlX3Bmbl9oeXAodTY0IHBmbilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTQ5Mi1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYzo0OTM6XFx0dGhpcyA9IGt6YWxsb2Nfb2JqKCp0aGlzKTtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy00OTQtXFx0aWYgKCF0aGlzKSB7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYz05ODE9aW50IGt2bV9pbml0X3N0YWdlMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMDA3LVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjEwMDg6XFx0cGd0ID0ga3phbGxvY19vYmooKnBndCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMDA5LVxcdGlmICghcGd0KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmM9MTE4MD1pbnQgdG9wdXBfaHlwX21lbWNhY2hlKHN0cnVjdCBrdm1faHlwX21lbWNhY2hlICptYywgdW5zaWduZWQgbG9uZyBtaW5fcGFnZXMpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMTg1LVxcdGlmICghbWMtXFx1MDAzZW1hcHBpbmcpIHtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMTg2OlxcdFxcdG1jLVxcdTAwM2VtYXBwaW5nID0ga3phbGxvY19vYmooc3RydWN0IHBrdm1fbWFwcGluZyxcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMTg3LVxcdFxcdFxcdFxcdFxcdCAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTI1MTA9aW50IF9faW5pdCBrdm1fbW11X2luaXQodTMyIGh5cF92YV9iaXRzKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMjU0My1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoyNTQ0OlxcdGh5cF9wZ3RhYmxlID0ga3phbGxvY19vYmooKmh5cF9wZ3RhYmxlKTtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNTQ1LVxcdGlmICghaHlwX3BndGFibGUpIHtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTEzMjg9aW50IGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzMzMtXFx0aWYgKCF2Y3B1LVxcdTAwM2VhcmNoLnZuY3JfdGxiKSB7XFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTMzNDpcXHRcXHRzdHJ1Y3Qgdm5jcl90bGIgKnZ0ID0ga3phbGxvY19vYmooKnZjcHUtXFx1MDAzZWFyY2gudm5jcl90bGIsXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTMzNS1cXHRcXHRcXHRcXHRcXHRcXHQgIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xNzkzPWludCBrdm1faW5pdF9udl9zeXNyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE4MDItXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTgwMzpcXHRrdm0tXFx1MDAzZWFyY2guc3lzcmVnX21hc2tzID0ga3phbGxvY19vYmooKihrdm0tXFx1MDAzZWFyY2guc3lzcmVnX21hc2tzKSxcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xODA0LVxcdFxcdFxcdFxcdFxcdCAgICAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jPTExNj1zdGF0aWMgc3RydWN0IGt2bV9wdGR1bXBfZ3Vlc3Rfc3RhdGUgKmt2bV9wdGR1bXBfcGFyc2VyX2NyZWF0ZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmMtMTIxLVxcbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jOjEyMjpcXHRzdCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBrdm1fcHRkdW1wX2d1ZXN0X3N0YXRlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jLTEyMy1cXHRpZiAoIXN0KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYz0yMDc9c3RhdGljIGludCBrdm1fdmdpY19kaXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgbnJfc3BpcylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMjEzLVxcdGRpc3QtXFx1MDAzZWFjdGl2ZV9zcGlzID0gKGF0b21pY190KUFUT01JQ19JTklUKDApO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM6MjE0OlxcdGRpc3QtXFx1MDAzZXNwaXMgPSBremFsbG9jX29ianMoc3RydWN0IHZnaWNfaXJxLCBucl9zcGlzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMjE1LVxcdGlmICghZGlzdC1cXHUwMDNlc3BpcylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9MzE2PXN0YXRpYyBpbnQgdmdpY19hbGxvY2F0ZV9wcml2YXRlX2lycXNfbG9ja2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHR5cGUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTMzMS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jOjMzMjpcXHR2Z2ljX2NwdS1cXHUwMDNlcHJpdmF0ZV9pcnFzID0ga3phbGxvY19vYmpzKHN0cnVjdCB2Z2ljX2lycSxcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTMzMy1cXHRcXHRcXHRcXHRcXHQgICAgICBudW1fcHJpdmF0ZV9pcnFzLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmM9MTQyPWludCBrdm1fdmdpY19zZXR1cF9kZWZhdWx0X2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jLTE0OC1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYzoxNDk6XFx0ZW50cmllcyA9IGt6YWxsb2Nfb2JqcygqZW50cmllcywgbnIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmMtMTUwLVxcdGlmICghZW50cmllcylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz03Nj1zdGF0aWMgc3RydWN0IHZnaWNfaXJxICp2Z2ljX2FkZF9scGkoc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW50aWQsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtODctXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjg4OlxcdGlycSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB2Z2ljX2lycSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtODktXFx0aWYgKCFpcnEpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9OTcxPXN0YXRpYyBpbnQgdmdpY19pdHNfYWxsb2NfY29sbGVjdGlvbihzdHJ1Y3QgdmdpY19pdHMgKml0cyxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy05NzYtXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjk3NzpcXHRjb2xsZWN0aW9uID0ga3phbGxvY19vYmooKmNvbGxlY3Rpb24sIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTk3OC1cXHRpZiAoIWNvbGxlY3Rpb24pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTAxNT1zdGF0aWMgc3RydWN0IGl0c19pdGUgKnZnaWNfaXRzX2FsbG9jX2l0ZShzdHJ1Y3QgaXRzX2RldmljZSAqZGV2aWNlLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTEwMjAtXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjEwMjE6XFx0aXRlID0ga3phbGxvY19vYmooKml0ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTAyMi1cXHRpZiAoIWl0ZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz0xMTQyPXN0YXRpYyBzdHJ1Y3QgaXRzX2RldmljZSAqdmdpY19pdHNfYWxsb2NfZGV2aWNlKHN0cnVjdCB2Z2ljX2l0cyAqaXRzLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTExNDctXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjExNDg6XFx0ZGV2aWNlID0ga3phbGxvY19vYmooKmRldmljZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTE0OS1cXHRpZiAoIWRldmljZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz0xODU1PXN0YXRpYyBpbnQgdmdpY19pdHNfY3JlYXRlKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHUzMiB0eXBlKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTE4NjItXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjE4NjM6XFx0aXRzID0ga3phbGxvY19vYmooc3RydWN0IHZnaWNfaXRzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xODY0LVxcdGlmICghaXRzKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYz04ODY9c3RhdGljIGludCB2Z2ljX3YzX2FsbG9jX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCB1aW50MzJfdCBpbmRleCxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMtOTMxLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM6OTMyOlxcdHJkcmVnID0ga3phbGxvY19vYmooKnJkcmVnLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMtOTMzLVxcdGlmICghcmRyZWcpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjQuYz0yNDI9aW50IHZnaWNfdjRfaW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjQuYy0yNTgtXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmM6MjU5OlxcdGRpc3QtXFx1MDAzZWl0c192bS52cGVzID0ga3phbGxvY19vYmpzKCpkaXN0LVxcdTAwM2VpdHNfdm0udnBlcywgbnJfdmNwdXMsXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmMtMjYwLVxcdFxcdFxcdFxcdFxcdCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MjA4MD1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjEwMS1cXHRpZiAoIWppdF9kYXRhKSB7XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MjEwMjpcXHRcXHRqaXRfZGF0YSA9IGt6YWxsb2Nfb2JqKCpqaXRfZGF0YSk7XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjEwMy1cXHRcXHRpZiAoIWppdF9kYXRhKVxcbi0tXFxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmM9MTc9c3RhdGljIGludCBfX2luaXQgdmRzb19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYy0yMi1cXHR2ZHNvX3BhZ2VsaXN0ID1cXG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYzoyMzpcXHRcXHRremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdmRzb19wYWdlcyk7XFxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmMtMjQtXFx0aWYgKHVubGlrZWx5KHZkc29fcGFnZWxpc3QgPT0gTlVMTCkpIHtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jPTQ2Nj1zdGF0aWMgaW50IF9faW5pdCBhZGRfbGVnYWN5X2lzYV9pbyhzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDcyLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjQ3MzpcXHRyYW5nZSA9IGt6YWxsb2Nfb2JqKCpyYW5nZSwgR0ZQX0FUT01JQyk7XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDc0LVxcdGlmICghcmFuZ2UpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jPTQ1PXN0YXRpYyBpbnQgX19pbml0IGluaXRfdmRzbyh2b2lkKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Zkc28uYy01NS1cXHR2ZHNvX2luZm8uY29kZV9tYXBwaW5nLnBhZ2VzID1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jOjU2OlxcdFxcdGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX2luZm8uc2l6ZSAvIFBBR0VfU0laRSk7XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Zkc28uYy01Ny1cXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYz02MTQ9c3RhdGljIGludCBrdm1fZWlvaW50Y19jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtNjI0LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYzo2MjU6XFx0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50Yyk7XFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTYyNi1cXHRpZiAoIXMpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYz0zOTQ9c3RhdGljIGludCBrdm1faXBpX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTQxMS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYzo0MTI6XFx0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb29uZ2FyY2hfaXBpKTtcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYy00MTMtXFx0aWYgKCFzKVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNDo1NjozNS41NzAyMTcwODlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzExNjg2MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUga3phbGxvY19vYmogTWFjcm8qKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIHRoaXMgYGt6YWxsb2Nfb2JqYCBtYWNybywgYW5kIGl0J3MgcmluZ2luZyBhIGJlbGwuIEl0IHNlZW1zIGxpa2Ugc29tZXRoaW5nIGZhaXJseSByZWNlbnQsIG1heWJlIGEgbmV3IGFkZGl0aW9uIHRvIHRoZSBrZXJuZWwsIG9yIHBvdGVudGlhbGx5IGEgc2lkZSBlZmZlY3Qgb2Ygc29tZSBzeXprYWxsZXIgd29yayBJJ3ZlIHNlZW4uIE5vLCB3YWl0LCBjaGVja2luZyBgRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdGAgYW5kIGBEb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3RgIHNob3dzIGl0J3MgYSBkaXJlY3QgcmVwbGFjZW1lbnQgZm9yIHVzaW5nIGBremFsbG9jKHNpemVvZigqcHRyKSwgLi4uKWAuIEludGVyZXN0aW5nLiBJJ20gbm90aW5nIGEgY2hhbmdlIGluIGEgcGF0Y2ggdGhhdCdzIHN1YnN0aXR1dGluZyBga3phbGxvY19vYmooKnRtcGwpYCB3aXRoIGBremFsbG9jX29iaigqdG1wbCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKWAuIFRoYXQgbG9va3MgbGlrZSB0aGV5J3JlIGFkZGluZyBhIHNlY29uZCBhcmd1bWVudC4gV2FpdCwgbm93IEknbSBzZWNvbmQtZ3Vlc3NpbmcgbXlzZWxmLiBEb2VzIGBremFsbG9jX29iamAgYWN0dWFsbHkgdGFrZSBvbmUgb3IgdHdvIGFyZ3VtZW50cz8gSSBiZXR0ZXIgY2hlY2sgdGhlIGRlZmluaXRpb24gdG8gYmUgc3VyZS4gVGltZSB0byBoZWFkIG92ZXIgdG8gYGluY2x1ZGUvbGludXgvc2xhYi5oYCBhbmQgdGFrZSBhIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTk5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE0OjU2OjQxLjI4MTkwNTUwOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTE5MDM5NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUga3phbGxvY19vYmpcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zbGFiLmg9MTA3MD12b2lkICprbWFsbG9jX25vbG9jayhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbm9kZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTUxLS8qIEFsbCBremFsbG9jIGFsaWFzZXMgZm9yIGttYWxsb2NfKG9ianxvYmpzfGZsZXgpLiAqL1xcbmluY2x1ZGUvbGludXgvc2xhYi5oOjExNTI6I2RlZmluZSBremFsbG9jX29iaihQLCAuLi4pIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTUzLVxcdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgMSlcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTU0OiNkZWZpbmUga3phbGxvY19vYmpzKFAsIENPVU5ULCAuLi4pIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTU1LVxcdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgQ09VTlQpXFxuLS1cXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaD0yMDA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaGVhZl9zaXplKHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcXG4tLVxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTIxMC1cXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaDoyMTE6I2RlZmluZSBremFsbG9jX29iaihQLCAuLi4pIFxcXFxcXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMTItXFx0X19hbGxvY19vYmpzKGt6YWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCAxKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNDo1Njo0My44MDA5NTEwMTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDc2NzA3MzEwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgTmV0ZmlsdGVyIE1lbW9yeSBBY2NvdW50aW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHllYWgsIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIHByaW1hcnkgdGhpbmcgaGFwcGVuaW5nIGhlcmUgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCBhY3Jvc3MgYSBidW5jaCBvZiBtZW1vcnkgYWxsb2NhdGlvbnMgd2l0aGluIG5ldGZpbHRlciwgcmVwbGFjaW5nIHRoZSBtb3JlIGdlbmVyaWMgYEdGUF9LRVJORUxgIG9yIGBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOYC4gIGBremFsbG9jX29iamAgdGFrZXMgYFBgIGFuZCBvcHRpb25hbCBgX19WQV9BUkdTX19gIGZvciBHRlAgZmxhZ3MuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgZG9lcyB0aGlzIGFmZmVjdCB0aGUgYWN0dWFsICpmdW5jdGlvbmFsaXR5Kj8gIE5vLCBtZW1vcnkgYWNjb3VudGluZyBmdW5kYW1lbnRhbGx5IGRvZXNuJ3QgY2hhbmdlIHRoZSBleGVjdXRpb24gZmxvdy4gIEl0J3MgYWJvdXQgdHJhY2tpbmcgd2hlcmUgdGhlIG1lbW9yeSBpcyBnb2luZywgbm90IGhvdyB0aGUgY29kZSBhY3R1YWxseSAqd29ya3MqLCBhc2lkZSBmcm9tIHBvdGVudGlhbGx5IHRyaWdnZXJpbmcgT09NIGNvbmRpdGlvbnMgb3IgY2dyb3VwIGxpbWl0cyBpZiB0aGV5IGFyZSBleGNlZWRlZC5cblxuVGhlIHR5cGljYWwgcmVhc29uIHRvIGFkZCB0aGlzIGtpbmQgb2YgYWNjb3VudGluZyBpcyBzZWN1cml0eSBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudDogcHJldmVudGluZyB1bnByaXZpbGVnZWQgdXNlcnMgZnJvbSBob2dnaW5nIG1lbW9yeSBhbmQgbWFraW5nIHN1cmUgdXNhZ2UgaXMgdHJhY2tlZCBhZ2FpbnN0IGNncm91cHMuICBCdXQgZG9lcyBpdCAqaW50cm9kdWNlKiBhbnkgbmV3IGxvZ2ljPyBOb3BlLCBpdCdzIGp1c3QgYSBHRlAgZmxhZyBjaGFuZ2UuIExldCdzIG1ha2Ugc3VyZSwgdGhvdWdoLCBhbmQgbG9vayBhdCB0aGUgYWN0dWFsIGNvZGUgY2hhbmdlcy4gSSdtIHNjYW5uaW5nIHRocm91Z2ggdGhlIGRpZmYuXG5cblllcywgSSdtIHNlZWluZyBhIHBhdHRlcm4sIGV2ZXJ5d2hlcmUuIEV2ZXJ5IGluc3RhbmNlIG9mIGBHRlBfS0VSTkVMYCBpcyBiZWluZyByZXBsYWNlZCB3aXRoIGBHRlBfS0VSTkVMX0FDQ09VTlRgLiBFdmVuIHdoZXJlIGBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOYCBpcyBzcGVjaWZpZWQsIGl0IGlzIGJlaW5nIGNvbnZlcnRlZCB0byBgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOYC4gIFRoZXJlIGFyZSBubyBvdGhlciBjb2RlIGNoYW5nZXMuICBUaGUgZnVuY3Rpb25hbCBiZWhhdmlvciBvZiB0aGUgbmV0ZmlsdGVyIGNvbXBvbmVudHMgcmVtYWlucyB0aGUgc2FtZS4gVGhlIHNhbWUgb2JqZWN0cyBhcmUgYWxsb2NhdGVkIGFuZCB0aGUgc2FtZSBjb2RlIGlzIHVzZWQgdG8gcmVhZCwgbWFuaXB1bGF0ZSBhbmQgbWFuYWdlIHRob3NlIG9iamVjdHMuXG5cbkdpdmVuIHRoZSBwcm9tcHQsIGxldCdzIHNlZSwgc2hvdWxkIEkgZnV6eiBpdD8gU2luY2UgdGhpcyBpcyBhIHB1cmVseSBtZWNoYW5pY2FsIGNoYW5nZSBpbiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MsIGl0IGlzIHZlcnkgdW5saWtlbHkgdG8gaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzIHRoYXQgZnV6emluZyBjb3VsZCBmaW5kLiBJJ20gbWFraW5nIGEgY2hhbmdlIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuIEluIHRoaXMgY2FzZSwgSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5JIGFtIG1ha2luZyBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjaGFuZ2VzIGluIHRoZSBwYXRjaC4gSSdtIHJldmlld2luZyB0aGUgcHJvdmlkZWQgZGlmZnMgYWdhaW4gdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBsb2dpYyBjaGFuZ2VzIGhpZGRlbi5cblxuT2theSwgSSd2ZSBjaGVja2VkLiBUaGlzIGlzIGV4Y2x1c2l2ZWx5IGEgY2hhbmdlIHRvIHRoZSBHRlAgZmxhZ3MuICBJdCdzIG5vdCB3b3J0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjkwNiwiT3V0cHV0VG9rZW5zIjo4MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTQ6NTc6MDQuNTY4MDI3MTEzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGNoYW5nZXMgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MgdG8gaW5jbHVkZSBHRlBfS0VSTkVMX0FDQ09VTlQgYWNyb3NzIHZhcmlvdXMgbmV0ZmlsdGVyIG1vZHVsZXMuIFRoaXMgaXMgYSBtZWNoYW5pY2FsIGNoYW5nZSBmb3IgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nIGFuZCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuIFRoZXJlZm9yZSwgaXQgaXMgbm90IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGNoYW5nZXMgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MgdG8gaW5jbHVkZSBHRlBfS0VSTkVMX0FDQ09VTlQgYWNyb3NzIHZhcmlvdXMgbmV0ZmlsdGVyIG1vZHVsZXMuIFRoaXMgaXMgYSBtZWNoYW5pY2FsIGNoYW5nZSBmb3IgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nIGFuZCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuIFRoZXJlZm9yZSwgaXQgaXMgbm90IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNDo1NzowNC41NjgwNjI3NTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowpww96[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-21 14:54:30 +0000 UTC FinishedAt: 2026-08-21 14:57:05 +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+CgkJCTx0ZD4yMDI2LzA4LzIxIDE0OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBjaGFuZ2VzIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIHRvIGluY2x1ZGUgR0ZQX0tFUk5FTF9BQ0NPVU5UIGFjcm9zcyB2YXJpb3VzIG5ldGZpbHRlciBtb2R1bGVzLiBUaGlzIGlzIGEgbWVjaGFuaWNhbCBjaGFuZ2UgZm9yIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBhbmQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLiBUaGVyZWZvcmUsIGl0IGlzIG5vdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNDo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGZjZjdmOTNhYzFmNTJjYWNlZWM5YWFjMzIwMmVhMzkwODZiY2Y0Y2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxNDo1NjoxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuY1xuaW5kZXggMGJmNTQxOTM2ZjYwMS4uNjRiOGY2Zjk4MjExOSAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmNcbkBAIC0xMzA0LDcgJiM0MzsxMzA0LDcgQEAgaW50IGVidF9yZWdpc3Rlcl90ZW1wbGF0ZShjb25zdCBzdHJ1Y3QgZWJ0X3RhYmxlICp0LCBpbnQgKCp0YWJsZV9pbml0KShzdHJ1Y3QgbmVcbiBcdFx0fVxuIFx0fVxuIFxuLVx0dG1wbCA9IGt6YWxsb2Nfb2JqKCp0bXBsKTtcbiYjNDM7XHR0bXBsID0ga3phbGxvY19vYmooKnRtcGwsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIXRtcGwpIHtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmVidF9tdXRleCk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmNcbmluZGV4IGFjN2ZlYmNlMDc0ZjEuLmUxNTJjZjM1ZDg1OTYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmNcbkBAIC0yMTcsNyAmIzQzOzIxNyw3IEBAIGluaXRfbWFwX2lwKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGJpdG1hcF9pcCAqbWFwLFxuIFx0ICAgIHUzMiBmaXJzdF9pcCwgdTMyIGxhc3RfaXAsXG4gXHQgICAgdTMyIGVsZW1lbnRzLCB1MzIgaG9zdHMsIHU4IG5ldG1hc2spXG4ge1xuLVx0bWFwLVx1MDAzZW1lbWJlcnMgPSBiaXRtYXBfemFsbG9jKGVsZW1lbnRzLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcbiYjNDM7XHRtYXAtXHUwMDNlbWVtYmVycyA9IGJpdG1hcF96YWxsb2MoZWxlbWVudHMsIEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX05PV0FSTik7XG4gXHRpZiAoIW1hcC1cdTAwM2VtZW1iZXJzKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRtYXAtXHUwMDNlZmlyc3RfaXAgPSBmaXJzdF9pcDtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jXG5pbmRleCA1OTIxZmQ5ZDJkY2EwLi5hMTE3OTM1MjIyMGE0IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jXG5AQCAtMzAwLDcgJiM0MzszMDAsNyBAQCBzdGF0aWMgYm9vbFxuIGluaXRfbWFwX2lwbWFjKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGJpdG1hcF9pcG1hYyAqbWFwLFxuIFx0ICAgICAgIHUzMiBmaXJzdF9pcCwgdTMyIGxhc3RfaXAsIHUzMiBlbGVtZW50cylcbiB7XG4tXHRtYXAtXHUwMDNlbWVtYmVycyA9IGJpdG1hcF96YWxsb2MoZWxlbWVudHMsIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xuJiM0MztcdG1hcC1cdTAwM2VtZW1iZXJzID0gYml0bWFwX3phbGxvYyhlbGVtZW50cywgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKTtcbiBcdGlmICghbWFwLVx1MDAzZW1lbWJlcnMpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdG1hcC1cdTAwM2VmaXJzdF9pcCA9IGZpcnN0X2lwO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jXG5pbmRleCBjYTg3NWM5ODI0MjQ1Li4wYTAwMjdjZGIxOTM3IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuY1xuQEAgLTIzMSw3ICYjNDM7MjMxLDcgQEAgc3RhdGljIGJvb2xcbiBpbml0X21hcF9wb3J0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGJpdG1hcF9wb3J0ICptYXAsXG4gXHQgICAgICB1MTYgZmlyc3RfcG9ydCwgdTE2IGxhc3RfcG9ydClcbiB7XG4tXHRtYXAtXHUwMDNlbWVtYmVycyA9IGJpdG1hcF96YWxsb2MobWFwLVx1MDAzZWVsZW1lbnRzLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcbiYjNDM7XHRtYXAtXHUwMDNlbWVtYmVycyA9IGJpdG1hcF96YWxsb2MobWFwLVx1MDAzZWVsZW1lbnRzLCBHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9OT1dBUk4pO1xuIFx0aWYgKCFtYXAtXHUwMDNlbWVtYmVycylcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0bWFwLVx1MDAzZWZpcnN0X3BvcnQgPSBmaXJzdF9wb3J0O1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1xuaW5kZXggMGE4NmExNzBiYTkwNi4uMjhhYzhjYmEzZDY4YyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jXG5AQCAtMTA4NSw3ICYjNDM7MTA4NSw3IEBAIHN0YXRpYyBpbnQgaXBfc2V0X2NyZWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuIFx0LyogRmlyc3QsIGFuZCB3aXRob3V0IGFueSBsb2NrcywgYWxsb2NhdGUgYW5kIGluaXRpYWxpemVcbiBcdCAqIGEgbm9ybWFsIGJhc2Ugc2V0IHN0cnVjdHVyZS5cbiBcdCAqL1xuLVx0c2V0ID0ga3phbGxvY19vYmooKnNldCk7XG4mIzQzO1x0c2V0ID0ga3phbGxvY19vYmooKnNldCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghc2V0KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbkBAIC0xMTQzLDcgJiM0MzsxMTQzLDcgQEAgc3RhdGljIGludCBpcF9zZXRfY3JlYXRlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4gXHRcdFx0LyogV3JhcGFyb3VuZCAqL1xuIFx0XHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdFx0bGlzdCA9IGt2emFsbG9jX29ianMoc3RydWN0IGlwX3NldCAqLCBpKTtcbiYjNDM7XHRcdGxpc3QgPSBrdnphbGxvY19vYmpzKHN0cnVjdCBpcF9zZXQgKiwgaSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdFx0aWYgKCFsaXN0KVxuIFx0XHRcdGdvdG8gY2xlYW51cDtcbiBcdFx0LyogbmZubCBtdXRleCBpcyBoZWxkLCBib3RoIGxpc3RzIGFyZSB2YWxpZCAqL1xuQEAgLTIzOTcsNyAmIzQzOzIzOTcsOCBAQCBpcF9zZXRfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0aWYgKGluc3QtXHUwMDNlaXBfc2V0X21heCBcdTAwM2U9IElQU0VUX0lOVkFMSURfSUQpXG4gXHRcdGluc3QtXHUwMDNlaXBfc2V0X21heCA9IElQU0VUX0lOVkFMSURfSUQgLSAxO1xuIFxuLVx0bGlzdCA9IGt2emFsbG9jX29ianMoc3RydWN0IGlwX3NldCAqLCBpbnN0LVx1MDAzZWlwX3NldF9tYXgpO1xuJiM0MztcdGxpc3QgPSBrdnphbGxvY19vYmpzKHN0cnVjdCBpcF9zZXQgKiwgaW5zdC1cdTAwM2VpcF9zZXRfbWF4LFxuJiM0MztcdFx0XHQgICAgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWxpc3QpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0aW5zdC1cdTAwM2Vpc19kZWxldGVkID0gZmFsc2U7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbmluZGV4IDgwY2E1MjNmMzA0YmIuLjM5ZGVjOTI4NTA1MmEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXG5AQCAtNzY4LDcgJiM0Mzs3NjgsNyBAQCBtdHlwZV9yZXNpemUoc3RydWN0IGlwX3NldCAqc2V0LCBib29sIHJldHJpZWQpXG4gXHRpbnQgcmV0O1xuIFxuICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbi1cdHRtcCA9IGttYWxsb2MoZHNpemUsIEdGUF9LRVJORUwpO1xuJiM0MztcdHRtcCA9IGttYWxsb2MoZHNpemUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIXRtcClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gI2VuZGlmXG5AQCAtMTc1NCw3ICYjNDM7MTc1NCw3IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcbiBcdFx0c2l6ZW9mKHN0cnVjdCBJUFNFVF9UT0tFTihIVFlQRSwgNikpIDpcbiBcdFx0c2l6ZW9mKHN0cnVjdCBJUFNFVF9UT0tFTihIVFlQRSwgNCkpO1xuICNlbmRpZlxuLVx0aCA9IGt6YWxsb2MoaHNpemUsIEdGUF9LRVJORUwpO1xuJiM0MztcdGggPSBremFsbG9jKGhzaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFoKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0xNzc0LDcgJiM0MzsxNzc0LDcgQEAgSVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX3NldCAqc2V0LFxuIFx0XHRnb3RvIGZyZWVfdDtcbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdG5ldHMgPSBremFsbG9jX29iaigqbmV0cyk7XG4mIzQzO1x0XHRuZXRzID0ga3phbGxvY19vYmooKm5ldHMsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRcdGlmICghbmV0cykge1xuIFx0XHRcdHdoaWxlIChpIFx1MDAzZSAwKVxuIFx0XHRcdFx0a2ZyZWUocmN1X2RlcmVmZXJlbmNlX3JhdyhoLVx1MDAzZXJuZXRzWy0taV0pKTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1xuaW5kZXggZjA3MDA4ODc0MmQ2MC4uNzUwZmUzODI2MWMzNyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNcbkBAIC02MDAsNyAmIzQzOzYwMCw3IEBAIGluaXRfbGlzdF9zZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsIHUzMiBzaXplKVxuIHtcbiBcdHN0cnVjdCBsaXN0X3NldCAqbWFwO1xuIFxuLVx0bWFwID0ga3phbGxvY19vYmooKm1hcCk7XG4mIzQzO1x0bWFwID0ga3phbGxvY19vYmooKm1hcCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbWFwKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmNcbmluZGV4IDg1NDg3ZjkyYWY1MDYuLmIwOWMxNzZhNTIxZDEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jXG5AQCAtNjkxLDcgJiM0Mzs2OTEsNyBAQCBzdHJ1Y3QgbmZfY29ubmNvdW50X2RhdGEgKm5mX2Nvbm5jb3VudF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGtleWxlblxuIFx0ICAgIGtleWxlbiA9PSAwKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiBcbi1cdGRhdGEgPSBrdnphbGxvY19vYmooKmRhdGEpO1xuJiM0MztcdGRhdGEgPSBrdnphbGxvY19vYmooKmRhdGEsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWRhdGEpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmNcbmluZGV4IGI0MDg1YWYzYWQxY2UuLmZlNTI1YjMyNGFmNDEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmNcbkBAIC05Myw3ICYjNDM7OTMsNyBAQCBpbnQgbmZfY3RfYWRkX2hlbHBlcihzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IGNoYXIgKm5hbWUsIHU4IGZhbWlseSxcbiBcdGlmICghaGVscGVyKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFoZWxwKSB7XG4gXHRcdG5mX2Nvbm50cmFja19oZWxwZXJfcHV0KGhlbHBlcik7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY1xuaW5kZXggZjRmMmQ4MjE5MmQ1NC4uZDg4YTEwMjMwODYyZSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXG5AQCAtMTAwOSw3ICYjNDM7MTAwOSw3IEBAIHN0YXRpYyBpbnQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0KVxuIFx0QlVJTERfQlVHX09OKEFSUkFZX1NJWkUobmZfY3Rfc3lzY3RsX3RhYmxlKSAhPSBORl9TWVNDVExfQ1RfTEFTVF9TWVNDVEwpO1xuIFxuIFx0dGFibGUgPSBrbWVtZHVwKG5mX2N0X3N5c2N0bF90YWJsZSwgc2l6ZW9mKG5mX2N0X3N5c2N0bF90YWJsZSksXG4tXHRcdFx0R0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRcdEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIXRhYmxlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmNcbmluZGV4IDRlMWVlZjFiYTBmMTUuLjQwYzZmY2UxNGE2M2YgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuY1xuQEAgLTczLDcgJiM0Mzs3Myw3IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBuZl9sd3R1bm5lbF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRpZiAoIW5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSkge1xuIFx0XHR0YWJsZSA9IGttZW1kdXAobmZfbHd0dW5uZWxfc3lzY3RsX3RhYmxlLFxuIFx0XHRcdFx0c2l6ZW9mKG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZSksXG4tXHRcdFx0XHRHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdFx0XHRHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0XHRpZiAoIXRhYmxlKVxuIFx0XHRcdGdvdG8gZXJyX2FsbG9jO1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jXG5pbmRleCBmNGQ4MDY1NGRmZTZhLi5mMWQzNjQ5ZTNmYzYyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9sb2cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9sb2cuY1xuQEAgLTQ5Myw3ICYjNDM7NDkzLDcgQEAgc3RhdGljIGludCBuZXRmaWx0ZXJfbG9nX3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiBcdGlmICghbmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKSB7XG4gXHRcdHRhYmxlID0ga21lbWR1cChuZl9sb2dfc3lzY3RsX3RhYmxlLFxuIFx0XHRcdFx0IHNpemVvZihuZl9sb2dfc3lzY3RsX3RhYmxlKSxcbi1cdFx0XHRcdCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdFx0XHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdFx0aWYgKCF0YWJsZSlcbiBcdFx0XHRnb3RvIGVycl9hbGxvYztcbiBcdH0gZWxzZSB7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXG5pbmRleCA4YWMzMjZlMWViNWJhLi4wOWNjNWI4ZmQ2YWYxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNcbkBAIC0xMjA0LDE0ICYjNDM7MTIwNCwxNSBAQCBpbnQgbmZfbmF0X3JlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLFxuIFx0aWYgKCFuYXRfcHJvdG9fbmV0LVx1MDAzZW5hdF9ob29rX29wcykge1xuIFx0XHRXQVJOX09OKG5hdF9wcm90b19uZXQtXHUwMDNldXNlcnMgIT0gMCk7XG4gXG4tXHRcdG5hdF9vcHMgPSBrbWVtZHVwX2FycmF5KG9yaWdfbmF0X29wcywgb3BzX2NvdW50LCBzaXplb2YoKm9yaWdfbmF0X29wcyksIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0bmF0X29wcyA9IGttZW1kdXBfYXJyYXkob3JpZ19uYXRfb3BzLCBvcHNfY291bnQsIHNpemVvZigqb3JpZ19uYXRfb3BzKSxcbiYjNDM7XHRcdFx0XHRcdEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRcdGlmICghbmF0X29wcykge1xuIFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZuZl9uYXRfcHJvdG9fbXV0ZXgpO1xuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0XHR9XG4gXG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9wc19jb3VudDsgaSYjNDM7JiM0MzspIHtcbi1cdFx0XHRwcml2ID0ga3phbGxvY19vYmooKnByaXYpO1xuJiM0MztcdFx0XHRwcml2ID0ga3phbGxvY19vYmooKnByaXYsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRcdFx0aWYgKHByaXYpIHtcbiBcdFx0XHRcdG5hdF9vcHNbaV0ucHJpdiA9IHByaXY7XG4gXHRcdFx0XHRjb250aW51ZTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfc3lucHJveHlfY29yZS5jXG5pbmRleCBhY2QzNjA1MTU5NzJmLi45ZmM5NTliYTIwMzAwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfc3lucHJveHlfY29yZS5jXG5AQCAtMzM2LDcgJiM0MzszMzYsNyBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgc3lucHJveHlfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0c3RydWN0IG5mX2Nvbm4gKmN0O1xuIFx0aW50IGVyciA9IC1FTk9NRU07XG4gXG4tXHRjdCA9IG5mX2N0X3RtcGxfYWxsb2MobmV0LCBcdTAwMjZuZl9jdF96b25lX2RmbHQsIEdGUF9LRVJORUwpO1xuJiM0MztcdGN0ID0gbmZfY3RfdG1wbF9hbGxvYyhuZXQsIFx1MDAyNm5mX2N0X3pvbmVfZGZsdCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghY3QpXG4gXHRcdGdvdG8gZXJyMTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19hY2N0LmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19hY2N0LmNcbmluZGV4IDhmZjFlMGFkNWNiMGQuLjFhMzY2ZmJkODEzMzIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19hY2N0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2FjY3QuY1xuQEAgLTExMiw3ICYjNDM7MTEyLDcgQEAgc3RhdGljIGludCBuZm5sX2FjY3RfbmV3KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4gXHRcdHNpemUgJiM0Mzs9IHNpemVvZih1NjQpO1xuIFx0fVxuIFxuLVx0bmZhY2N0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5mX2FjY3QpICYjNDM7IHNpemUsIEdGUF9LRVJORUwpO1xuJiM0MztcdG5mYWNjdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuZl9hY2N0KSAmIzQzOyBzaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKG5mYWNjdCA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuY1xuaW5kZXggNWI2YTA5ZjQ2OTAzZi4uYTA5YjJmZGJmOWI0ZSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbkBAIC0zMzUsNyAmIzQzOzMzNSw4IEBAIHN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X2FsbChzdHJ1Y3QgbmxhdHRyICp0YltdLFxuIFx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICpwb2xpY3k7XG4gXHRpbnQgaSwgcmV0ID0gMDtcbiBcbi1cdG5ld19wb2xpY3kgPSBrbWFsbG9jX29ianMoKm5ld19wb2xpY3ksIGhlbHBlci1cdTAwM2VleHBlY3RfY2xhc3NfbWF4ICYjNDM7IDEpO1xuJiM0MztcdG5ld19wb2xpY3kgPSBrbWFsbG9jX29ianMoKm5ld19wb2xpY3ksIGhlbHBlci1cdTAwM2VleHBlY3RfY2xhc3NfbWF4ICYjNDM7IDEsXG4mIzQzO1x0XHRcdFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFuZXdfcG9saWN5KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0dGltZW91dC5jXG5pbmRleCA2NmMyMDE2ZjYwNDlkLi42YjRhZGFhZjYxYWYwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0dGltZW91dC5jXG5AQCAtNzEsNyAmIzQzOzcxLDggQEAgY3RubF90aW1lb3V0X3BhcnNlX3BvbGljeSh2b2lkICp0aW1lb3V0LFxuIFx0c3RydWN0IG5sYXR0ciAqKnRiO1xuIFx0aW50IHJldCA9IDA7XG4gXG4tXHR0YiA9IGt6YWxsb2Nfb2JqcygqdGIsIGw0cHJvdG8tXHUwMDNlY3RubF90aW1lb3V0Lm5sYXR0cl9tYXggJiM0MzsgMSk7XG4mIzQzO1x0dGIgPSBremFsbG9jX29ianMoKnRiLCBsNHByb3RvLVx1MDAzZWN0bmxfdGltZW91dC5ubGF0dHJfbWF4ICYjNDM7IDEsXG4mIzQzO1x0XHRcdCAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcbiBcdGlmICghdGIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTE1MCwxNCAmIzQzOzE1MSwxNSBAQCBzdGF0aWMgaW50IGN0dGltZW91dF9uZXdfdGltZW91dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRnb3RvIGVycl9wcm90b19wdXQ7XG4gXHR9XG4gXG4tXHR0aW1lb3V0ID0ga3phbGxvYyhzaXplb2YoKnRpbWVvdXQpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHR0aW1lb3V0ID0ga3phbGxvYyhzaXplb2YoKnRpbWVvdXQpLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKHRpbWVvdXQgPT0gTlVMTCkge1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIGVycl9wcm90b19wdXQ7XG4gXHR9XG4gXG4gXHR0aW1lb3V0LVx1MDAzZXRpbWVvdXQgPSBremFsbG9jKHNpemVvZigqdGltZW91dC1cdTAwM2V0aW1lb3V0KSAmIzQzO1xuLVx0XHRcdFx0ICAgbDRwcm90by1cdTAwM2VjdG5sX3RpbWVvdXQub2JqX3NpemUsIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0XHRcdCAgIGw0cHJvdG8tXHUwMDNlY3RubF90aW1lb3V0Lm9ial9zaXplLFxuJiM0MztcdFx0XHRcdCAgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIXRpbWVvdXQtXHUwMDNldGltZW91dCkge1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIGVycjtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19vc2YuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX29zZi5jXG5pbmRleCA5MjAwMjA3OWY4ZWFiLi5lNDgzNWIwZjRiYjFhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfb3NmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX29zZi5jXG5AQCAtMzI1LDcgJiM0MzszMjUsNyBAQCBzdGF0aWMgaW50IG5mbmxfb3NmX2FkZF9jYWxsYmFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ICAgICFtZW1jaHIoZi1cdTAwM2V2ZXJzaW9uLCAwLCBNQVhHRU5SRUxFTikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0a2YgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbmZfb3NmX2Zpbmdlcik7XG4mIzQzO1x0a2YgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbmZfb3NmX2ZpbmdlciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICgha2YpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jXG5pbmRleCA5ZGJmMTI3ZGY5YzgxLi44OTc2MDg3NDMzNmMzIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xuQEAgLTM2NSw3ICYjNDM7MzY1LDcgQEAgc3RhdGljIGJvb2wgbmZ0X2N0X3RtcGxfYWxsb2NfcGNwdSh2b2lkKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0dG1wID0gbmZfY3RfdG1wbF9hbGxvYyhcdTAwMjZpbml0X25ldCwgXHUwMDI2em9uZSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHR0bXAgPSBuZl9jdF90bXBsX2FsbG9jKFx1MDAyNmluaXRfbmV0LCBcdTAwMjZ6b25lLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0XHRpZiAoIXRtcCkge1xuIFx0XHRcdG5mdF9jdF90bXBsX3B1dF9wY3B1KCk7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTg0OCw3ICYjNDM7ODQ4LDggQEAgbmZ0X2N0X3RpbWVvdXRfcGFyc2VfcG9saWN5KHZvaWQgKnRpbWVvdXRzLFxuIFx0c3RydWN0IG5sYXR0ciAqKnRiO1xuIFx0aW50IHJldCA9IDA7XG4gXG4tXHR0YiA9IGt6YWxsb2Nfb2JqcygqdGIsIGw0cHJvdG8tXHUwMDNlY3RubF90aW1lb3V0Lm5sYXR0cl9tYXggJiM0MzsgMSk7XG4mIzQzO1x0dGIgPSBremFsbG9jX29ianMoKnRiLCBsNHByb3RvLVx1MDAzZWN0bmxfdGltZW91dC5ubGF0dHJfbWF4ICYjNDM7IDEsXG4mIzQzO1x0XHRcdCAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcbiBcdGlmICghdGIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTkzNCw3ICYjNDM7OTM1LDcgQEAgc3RhdGljIGludCBuZnRfY3RfdGltZW91dF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0fVxuIFxuIFx0dGltZW91dCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuZl9jdF90aW1lb3V0KSAmIzQzO1xuLVx0XHRcdCAgbDRwcm90by1cdTAwM2VjdG5sX3RpbWVvdXQub2JqX3NpemUsIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0XHQgIGw0cHJvdG8tXHUwMDNlY3RubF90aW1lb3V0Lm9ial9zaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKHRpbWVvdXQgPT0gTlVMTCkge1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIGVycl9wcm90b19wdXQ7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jIGIvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jXG5pbmRleCA5NzhiYjBjMDExMDY4Li4zNjE3YmI2NjA5NGQ0IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmNcbkBAIC0yMjk4LDcgJiM0MzsyMjk4LDcgQEAgc3RhdGljIGludCBuZnRfcGlwYXBvX2luaXQoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbiBcdGlmIChmaWVsZF9jb3VudCBcdTAwM2UgTkZUX1BJUEFQT19NQVhfRklFTERTKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdG0gPSBrbWFsbG9jX2ZsZXgoKm0sIGYsIGZpZWxkX2NvdW50KTtcbiYjNDM7XHRtID0ga21hbGxvY19mbGV4KCptLCBmLCBmaWVsZF9jb3VudCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9DVC5jIGIvbmV0L25ldGZpbHRlci94dF9DVC5jXG5pbmRleCBlNzg2NjBkZmRmNGI2Li4yMDViYzZkZDk4MTI1IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9DVC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X0NULmNcbkBAIC05MSw3ICYjNDM7OTEsNyBAQCB4dF9jdF9zZXRfaGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3QgY2hhciAqaGVscGVyX25hbWUsXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFx0fVxuIFxuLVx0aGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRoZWxwID0gbmZfY3RfaGVscGVyX2V4dF9hZGQoY3QsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoaGVscCA9PSBOVUxMKSB7XG4gXHRcdG5mX2Nvbm50cmFja19oZWxwZXJfcHV0KGhlbHBlcik7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTE4Miw3ICYjNDM7MTgyLDcgQEAgc3RhdGljIGludCB4dF9jdF90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcixcbiBcdGlmIChpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBYVF9DVF9aT05FX01BUkspXG4gXHRcdHpvbmUuZmxhZ3MgfD0gTkZfQ1RfRkxBR19NQVJLO1xuIFxuLVx0Y3QgPSBuZl9jdF90bXBsX2FsbG9jKHBhci1cdTAwM2VuZXQsIFx1MDAyNnpvbmUsIEdGUF9LRVJORUwpO1xuJiM0MztcdGN0ID0gbmZfY3RfdG1wbF9hbGxvYyhwYXItXHUwMDNlbmV0LCBcdTAwMjZ6b25lLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFjdCkge1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIGVycjI7XG5AQCAtMTkwLDcgJiM0MzsxOTAsNyBAQCBzdGF0aWMgaW50IHh0X2N0X3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyLFxuIFxuIFx0aWYgKChpbmZvLVx1MDAzZWN0X2V2ZW50cyB8fCBpbmZvLVx1MDAzZWV4cF9ldmVudHMpIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFuZl9jdF9lY2FjaGVfZXh0X2FkZChjdCwgaW5mby1cdTAwM2VjdF9ldmVudHMsIGluZm8tXHUwMDNlZXhwX2V2ZW50cyxcbi1cdFx0XHRcdCAgR0ZQX0tFUk5FTCkpIHtcbiYjNDM7XHRcdFx0XHQgIEdGUF9LRVJORUxfQUNDT1VOVCkpIHtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBlcnIzO1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXG5pbmRleCBiZmNmMmQ0NGU5M2RiLi43OTZiMGQ0NjFjM2QwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY1xuQEAgLTE1MCw3ICYjNDM7MTUwLDcgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbylcbiB7XG4gXHRpbnQgcmV0O1xuIFxuLVx0aW5mby1cdTAwM2V0aW1lciA9IGt6YWxsb2Nfb2JqKCppbmZvLVx1MDAzZXRpbWVyKTtcbiYjNDM7XHRpbmZvLVx1MDAzZXRpbWVyID0ga3phbGxvY19vYmooKmluZm8tXHUwMDNldGltZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWluZm8tXHUwMDNldGltZXIpIHtcbiBcdFx0cmV0ID0gLUVOT01FTTtcbiBcdFx0Z290byBvdXQ7XG5AQCAtMTYxLDcgJiM0MzsxNjEsNyBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jcmVhdGUoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvKVxuIFx0XHRnb3RvIG91dF9mcmVlX3RpbWVyO1xuIFxuIFx0c3lzZnNfYXR0cl9pbml0KFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyKTtcbi1cdGluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUgPSBrc3RyZHVwKGluZm8tXHUwMDNlbGFiZWwsIEdGUF9LRVJORUwpO1xuJiM0MztcdGluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUgPSBrc3RyZHVwKGluZm8tXHUwMDNlbGFiZWwsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUpIHtcbiBcdFx0cmV0ID0gLUVOT01FTTtcbiBcdFx0Z290byBvdXRfZnJlZV90aW1lcjtcbkBAIC0xOTksNyAmIzQzOzE5OSw3IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdGluZm8tXHUwMDNldGltZXIgPSBrbWFsbG9jX29iaigqaW5mby1cdTAwM2V0aW1lcik7XG4mIzQzO1x0aW5mby1cdTAwM2V0aW1lciA9IGttYWxsb2Nfb2JqKCppbmZvLVx1MDAzZXRpbWVyLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFpbmZvLVx1MDAzZXRpbWVyKSB7XG4gXHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdGdvdG8gb3V0O1xuQEAgLTIxMCw3ICYjNDM7MjEwLDcgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlX3YxKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbylcbiBcdFx0Z290byBvdXRfZnJlZV90aW1lcjtcbiBcbiBcdHN5c2ZzX2F0dHJfaW5pdChcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0cik7XG4tXHRpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0ci5uYW1lID0ga3N0cmR1cChpbmZvLVx1MDAzZWxhYmVsLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0ci5uYW1lID0ga3N0cmR1cChpbmZvLVx1MDAzZWxhYmVsLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0ci5uYW1lKSB7XG4gXHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdGdvdG8gb3V0X2ZyZWVfdGltZXI7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9MRUQuYyBiL25ldC9uZXRmaWx0ZXIveHRfTEVELmNcbmluZGV4IGNhYWFmNGQyYzU4NDIuLjNjYmI4ZDYxZDQxNzUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X0xFRC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X0xFRC5jXG5AQCAtMTExLDExICYjNDM7MTExLDEyIEBAIHN0YXRpYyBpbnQgbGVkX3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxuIFx0fVxuIFxuIFx0ZXJyID0gLUVOT01FTTtcbi1cdGxlZGludGVybmFsID0ga3phbGxvY19vYmooc3RydWN0IHh0X2xlZF9pbmZvX2ludGVybmFsKTtcbiYjNDM7XHRsZWRpbnRlcm5hbCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB4dF9sZWRfaW5mb19pbnRlcm5hbCxcbiYjNDM7XHRcdFx0XHQgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWxlZGludGVybmFsKVxuIFx0XHRnb3RvIGV4aXRfbXV0ZXhfb25seTtcbiBcbi1cdGxlZGludGVybmFsLVx1MDAzZXRyaWdnZXJfaWQgPSBrc3RyZHVwKGxlZGluZm8tXHUwMDNlaWQsIEdGUF9LRVJORUwpO1xuJiM0MztcdGxlZGludGVybmFsLVx1MDAzZXRyaWdnZXJfaWQgPSBrc3RyZHVwKGxlZGluZm8tXHUwMDNlaWQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWxlZGludGVybmFsLVx1MDAzZXRyaWdnZXJfaWQpXG4gXHRcdGdvdG8gZXhpdF9pbnRlcm5hbF9hbGxvYztcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X1JBVEVFU1QuYyBiL25ldC9uZXRmaWx0ZXIveHRfUkFURUVTVC5jXG5pbmRleCA5MTI3MGQ0NjdmZmRmLi4yZjZiNTEyYjcxZTgwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9SQVRFRVNULmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfUkFURUVTVC5jXG5AQCAtMTM5LDcgJiM0MzsxMzksNyBAQCBzdGF0aWMgaW50IHh0X3JhdGVlc3RfdGdfY2hlY2tlbnRyeShjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcbiBcdH1cbiBcbiBcdHJldCA9IC1FTk9NRU07XG4tXHRlc3QgPSBremFsbG9jX29iaigqZXN0KTtcbiYjNDM7XHRlc3QgPSBremFsbG9jX29iaigqZXN0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFlc3QpXG4gXHRcdGdvdG8gZXJyMTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jIGIvbmV0L25ldGZpbHRlci94dF9URUUuY1xuaW5kZXggNWQzNGNlYjg5M2VkYS4uNDhiNDEwNGYwODU5OCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfVEVFLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfVEVFLmNcbkBAIC0xMDYsNyAmIzQzOzEwNiw3IEBAIHN0YXRpYyBpbnQgdGVlX3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxuIFx0XHRpZiAoaW5mby1cdTAwM2VvaWZbc2l6ZW9mKGluZm8tXHUwMDNlb2lmKS0xXSAhPSAmIzM5O1xcMCYjMzk7KVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0XHRwcml2ID0ga3phbGxvY19vYmooKnByaXYpO1xuJiM0MztcdFx0cHJpdiA9IGt6YWxsb2Nfb2JqKCpwcml2LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0XHRpZiAocHJpdiA9PSBOVUxMKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jXG5pbmRleCA5YWYwZmE4OTVmNzMwLi5iNDVmMDZiMDZjMjZkIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuY1xuQEAgLTMxOSw3ICYjNDM7MzE5LDcgQEAgc3RhdGljIGludCBodGFibGVfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGhhc2hsaW1pdF9jZmczICpjZmcsXG4gXHRoaW5mby1cdTAwM2Vjb3VudCA9IDA7XG4gXHRoaW5mby1cdTAwM2VmYW1pbHkgPSBmYW1pbHk7XG4gXHRoaW5mby1cdTAwM2VybmRfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbi1cdGhpbmZvLVx1MDAzZW5hbWUgPSBrc3RyZHVwKG5hbWUsIEdGUF9LRVJORUwpO1xuJiM0MztcdGhpbmZvLVx1MDAzZW5hbWUgPSBrc3RyZHVwKG5hbWUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWhpbmZvLVx1MDAzZW5hbWUpIHtcbiBcdFx0a3ZmcmVlKGhpbmZvKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9saW1pdC5jIGIvbmV0L25ldGZpbHRlci94dF9saW1pdC5jXG5pbmRleCA4N2Q3NGRhMTRjMGI3Li5hZDQ4YjY4NzliMTMwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9saW1pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmNcbkBAIC0xMTUsNyAmIzQzOzExNSw3IEBAIHN0YXRpYyBpbnQgbGltaXRfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXHRcdHJldHVybiAtRVJBTkdFO1xuIFx0fVxuIFxuLVx0cHJpdiA9IGttYWxsb2Nfb2JqKCpwcml2KTtcbiYjNDM7XHRwcml2ID0ga21hbGxvY19vYmooKnByaXYsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAocHJpdiA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmNcbmluZGV4IGIwNWM1YzhkYWM3OGIuLmUyMWVjMTUyZDE2YTcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfcXVvdGEuY1xuQEAgLTUwLDcgJiM0Mzs1MCw3IEBAIHN0YXRpYyBpbnQgcXVvdGFfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXHRpZiAocS1cdTAwM2VmbGFncyBcdTAwMjYgflhUX1FVT1RBX01BU0spXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0cS1cdTAwM2VtYXN0ZXIgPSBrbWFsbG9jX29iaigqcS1cdTAwM2VtYXN0ZXIpO1xuJiM0MztcdHEtXHUwMDNlbWFzdGVyID0ga21hbGxvY19vYmooKnEtXHUwMDNlbWFzdGVyLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKHEtXHUwMDNlbWFzdGVyID09IE5VTEwpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jXG5pbmRleCBkMzQ4MzFjZTNhZGZiLi41NWYxZjJkODk5NTJkIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9yZWNlbnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9yZWNlbnQuY1xuQEAgLTM5MSw3ICYjNDM7MzkxLDggQEAgc3RhdGljIGludCByZWNlbnRfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0dCA9IGt2emFsbG9jX2ZsZXgoKnQsIGlwaGFzaCwgaXBfbGlzdF9oYXNoX3NpemUpO1xuJiM0MztcdHQgPSBrdnphbGxvY19mbGV4KCp0LCBpcGhhc2gsIGlwX2xpc3RfaGFzaF9zaXplLFxuJiM0MztcdFx0XHQgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAodCA9PSBOVUxMKSB7XG4gXHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdGdvdG8gb3V0O1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5jXG5pbmRleCAzMzRlMDk3NzFhYmY5Li4xZmZjNTlkOTBiYjBhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9zdGF0aXN0aWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9zdGF0aXN0aWMuY1xuQEAgLTU4LDcgJiM0Mzs1OCw3IEBAIHN0YXRpYyBpbnQgc3RhdGlzdGljX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFx0ICAgIGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IH5YVF9TVEFUSVNUSUNfTUFTSylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpbmZvLVx1MDAzZW1hc3RlciA9IGt6YWxsb2Nfb2JqKCppbmZvLVx1MDAzZW1hc3Rlcik7XG4mIzQzO1x0aW5mby1cdTAwM2VtYXN0ZXIgPSBremFsbG9jX29iaigqaW5mby1cdTAwM2VtYXN0ZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoaW5mby1cdTAwM2VtYXN0ZXIgPT0gTlVMTClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRhdG9taWNfc2V0KFx1MDAyNmluZm8tXHUwMDNlbWFzdGVyLVx1MDAzZWNvdW50LCBpbmZvLVx1MDAzZXUubnRoLmNvdW50KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3N0cmluZy5jIGIvbmV0L25ldGZpbHRlci94dF9zdHJpbmcuY1xuaW5kZXggOGNlMjViYzliMjc3NS4uNTJjMWRlYjAyY2RjNiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfc3RyaW5nLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfc3RyaW5nLmNcbkBAIC01NCw3ICYjNDM7NTQsNyBAQCBzdGF0aWMgaW50IHN0cmluZ19tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcdGlmIChjb25mLVx1MDAzZXUudjEuZmxhZ3MgXHUwMDI2IFhUX1NUUklOR19GTEFHX0lHTk9SRUNBU0UpXG4gXHRcdGZsYWdzIHw9IFRTX0lHTk9SRUNBU0U7XG4gXHR0c19jb25mID0gdGV4dHNlYXJjaF9wcmVwYXJlKGNvbmYtXHUwMDNlYWxnbywgY29uZi1cdTAwM2VwYXR0ZXJuLCBjb25mLVx1MDAzZXBhdGxlbixcbi1cdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCwgZmxhZ3MpO1xuJiM0MztcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTF9BQ0NPVU5ULCBmbGFncyk7XG4gXHRpZiAoSVNfRVJSKHRzX2NvbmYpKVxuIFx0XHRyZXR1cm4gUFRSX0VSUih0c19jb25mKTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNDo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBjaGFuZ2VzIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIHRvIGluY2x1ZGUgR0ZQX0tFUk5FTF9BQ0NPVU5UIGFjcm9zcyB2YXJpb3VzIG5ldGZpbHRlciBtb2R1bGVzLiBUaGlzIGlzIGEgbWVjaGFuaWNhbCBjaGFuZ2UgZm9yIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBhbmQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLiBUaGVyZWZvcmUsIGl0IGlzIG5vdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZjZjdmOTNhYzFmNTJjYWNlZWM5YWFjMzIwMmVhMzkwODZiY2Y0Y2UKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyMSAxNDo1NjoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCmluZGV4IDBiZjU0MTkzNmY2MDEuLjY0YjhmNmY5ODIxMTkgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYwpAQCAtMTMwNCw3ICYjNDM7MTMwNCw3IEBAIGludCBlYnRfcmVnaXN0ZXJfdGVtcGxhdGUoY29uc3Qgc3RydWN0IGVidF90YWJsZSAqdCwgaW50ICgqdGFibGVfaW5pdCkoc3RydWN0IG5lCiAJCX0KIAl9CiAKLQl0bXBsID0ga3phbGxvY19vYmooKnRtcGwpOwomIzQzOwl0bXBsID0ga3phbGxvY19vYmooKnRtcGwsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCF0bXBsKSB7CiAJCW11dGV4X3VubG9jaygmYW1wO2VidF9tdXRleCk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYwppbmRleCBhYzdmZWJjZTA3NGYxLi5lMTUyY2YzNWQ4NTk2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYwpAQCAtMjE3LDcgJiM0MzsyMTcsNyBAQCBpbml0X21hcF9pcChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBiaXRtYXBfaXAgKm1hcCwKIAkgICAgdTMyIGZpcnN0X2lwLCB1MzIgbGFzdF9pcCwKIAkgICAgdTMyIGVsZW1lbnRzLCB1MzIgaG9zdHMsIHU4IG5ldG1hc2spCiB7Ci0JbWFwLSZndDttZW1iZXJzID0gYml0bWFwX3phbGxvYyhlbGVtZW50cywgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7CiYjNDM7CW1hcC0mZ3Q7bWVtYmVycyA9IGJpdG1hcF96YWxsb2MoZWxlbWVudHMsIEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX05PV0FSTik7CiAJaWYgKCFtYXAtJmd0O21lbWJlcnMpCiAJCXJldHVybiBmYWxzZTsKIAltYXAtJmd0O2ZpcnN0X2lwID0gZmlyc3RfaXA7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jCmluZGV4IDU5MjFmZDlkMmRjYTAuLmExMTc5MzUyMjIwYTQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jCkBAIC0zMDAsNyAmIzQzOzMwMCw3IEBAIHN0YXRpYyBib29sCiBpbml0X21hcF9pcG1hYyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBiaXRtYXBfaXBtYWMgKm1hcCwKIAkgICAgICAgdTMyIGZpcnN0X2lwLCB1MzIgbGFzdF9pcCwgdTMyIGVsZW1lbnRzKQogewotCW1hcC0mZ3Q7bWVtYmVycyA9IGJpdG1hcF96YWxsb2MoZWxlbWVudHMsIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pOwomIzQzOwltYXAtJmd0O21lbWJlcnMgPSBiaXRtYXBfemFsbG9jKGVsZW1lbnRzLCBHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9OT1dBUk4pOwogCWlmICghbWFwLSZndDttZW1iZXJzKQogCQlyZXR1cm4gZmFsc2U7CiAJbWFwLSZndDtmaXJzdF9pcCA9IGZpcnN0X2lwOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmMKaW5kZXggY2E4NzVjOTgyNDI0NS4uMGEwMDI3Y2RiMTkzNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jCkBAIC0yMzEsNyAmIzQzOzIzMSw3IEBAIHN0YXRpYyBib29sCiBpbml0X21hcF9wb3J0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGJpdG1hcF9wb3J0ICptYXAsCiAJICAgICAgdTE2IGZpcnN0X3BvcnQsIHUxNiBsYXN0X3BvcnQpCiB7Ci0JbWFwLSZndDttZW1iZXJzID0gYml0bWFwX3phbGxvYyhtYXAtJmd0O2VsZW1lbnRzLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTsKJiM0MzsJbWFwLSZndDttZW1iZXJzID0gYml0bWFwX3phbGxvYyhtYXAtJmd0O2VsZW1lbnRzLCBHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9OT1dBUk4pOwogCWlmICghbWFwLSZndDttZW1iZXJzKQogCQlyZXR1cm4gZmFsc2U7CiAJbWFwLSZndDtmaXJzdF9wb3J0ID0gZmlyc3RfcG9ydDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYwppbmRleCAwYTg2YTE3MGJhOTA2Li4yOGFjOGNiYTNkNjhjIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jCkBAIC0xMDg1LDcgJiM0MzsxMDg1LDcgQEAgc3RhdGljIGludCBpcF9zZXRfY3JlYXRlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sCiAJLyogRmlyc3QsIGFuZCB3aXRob3V0IGFueSBsb2NrcywgYWxsb2NhdGUgYW5kIGluaXRpYWxpemUKIAkgKiBhIG5vcm1hbCBiYXNlIHNldCBzdHJ1Y3R1cmUuCiAJICovCi0Jc2V0ID0ga3phbGxvY19vYmooKnNldCk7CiYjNDM7CXNldCA9IGt6YWxsb2Nfb2JqKCpzZXQsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFzZXQpCiAJCXJldHVybiAtRU5PTUVNOwogCXNwaW5fbG9ja19pbml0KCZhbXA7c2V0LSZndDtsb2NrKTsKQEAgLTExNDMsNyAmIzQzOzExNDMsNyBAQCBzdGF0aWMgaW50IGlwX3NldF9jcmVhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbywKIAkJCS8qIFdyYXBhcm91bmQgKi8KIAkJCWdvdG8gY2xlYW51cDsKIAotCQlsaXN0ID0ga3Z6YWxsb2Nfb2JqcyhzdHJ1Y3QgaXBfc2V0ICosIGkpOwomIzQzOwkJbGlzdCA9IGt2emFsbG9jX29ianMoc3RydWN0IGlwX3NldCAqLCBpLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCQlpZiAoIWxpc3QpCiAJCQlnb3RvIGNsZWFudXA7CiAJCS8qIG5mbmwgbXV0ZXggaXMgaGVsZCwgYm90aCBsaXN0cyBhcmUgdmFsaWQgKi8KQEAgLTIzOTcsNyAmIzQzOzIzOTcsOCBAQCBpcF9zZXRfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogCWlmIChpbnN0LSZndDtpcF9zZXRfbWF4ICZndDs9IElQU0VUX0lOVkFMSURfSUQpCiAJCWluc3QtJmd0O2lwX3NldF9tYXggPSBJUFNFVF9JTlZBTElEX0lEIC0gMTsKIAotCWxpc3QgPSBrdnphbGxvY19vYmpzKHN0cnVjdCBpcF9zZXQgKiwgaW5zdC0mZ3Q7aXBfc2V0X21heCk7CiYjNDM7CWxpc3QgPSBrdnphbGxvY19vYmpzKHN0cnVjdCBpcF9zZXQgKiwgaW5zdC0mZ3Q7aXBfc2V0X21heCwKJiM0MzsJCQkgICAgIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFsaXN0KQogCQlyZXR1cm4gLUVOT01FTTsKIAlpbnN0LSZndDtpc19kZWxldGVkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaAppbmRleCA4MGNhNTIzZjMwNGJiLi4zOWRlYzkyODUwNTJhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgKQEAgLTc2OCw3ICYjNDM7NzY4LDcgQEAgbXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKQogCWludCByZXQ7CiAKICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKLQl0bXAgPSBrbWFsbG9jKGRzaXplLCBHRlBfS0VSTkVMKTsKJiM0MzsJdG1wID0ga21hbGxvYyhkc2l6ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIXRtcCkKIAkJcmV0dXJuIC1FTk9NRU07CiAjZW5kaWYKQEAgLTE3NTQsNyAmIzQzOzE3NTQsNyBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsCiAJCXNpemVvZihzdHJ1Y3QgSVBTRVRfVE9LRU4oSFRZUEUsIDYpKSA6CiAJCXNpemVvZihzdHJ1Y3QgSVBTRVRfVE9LRU4oSFRZUEUsIDQpKTsKICNlbmRpZgotCWggPSBremFsbG9jKGhzaXplLCBHRlBfS0VSTkVMKTsKJiM0MzsJaCA9IGt6YWxsb2MoaHNpemUsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFoKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTc3NCw3ICYjNDM7MTc3NCw3IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCwKIAkJZ290byBmcmVlX3Q7CiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTCiAJZm9yIChpID0gMDsgaSAmbHQ7IElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspIHsKLQkJbmV0cyA9IGt6YWxsb2Nfb2JqKCpuZXRzKTsKJiM0MzsJCW5ldHMgPSBremFsbG9jX29iaigqbmV0cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAkJaWYgKCFuZXRzKSB7CiAJCQl3aGlsZSAoaSAmZ3Q7IDApCiAJCQkJa2ZyZWUocmN1X2RlcmVmZXJlbmNlX3JhdyhoLSZndDtybmV0c1stLWldKSk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYwppbmRleCBmMDcwMDg4NzQyZDYwLi43NTBmZTM4MjYxYzM3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMKQEAgLTYwMCw3ICYjNDM7NjAwLDcgQEAgaW5pdF9saXN0X3NldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCwgdTMyIHNpemUpCiB7CiAJc3RydWN0IGxpc3Rfc2V0ICptYXA7CiAKLQltYXAgPSBremFsbG9jX29iaigqbWFwKTsKJiM0MzsJbWFwID0ga3phbGxvY19vYmooKm1hcCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIW1hcCkKIAkJcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYwppbmRleCA4NTQ4N2Y5MmFmNTA2Li5iMDljMTc2YTUyMWQxIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMKQEAgLTY5MSw3ICYjNDM7NjkxLDcgQEAgc3RydWN0IG5mX2Nvbm5jb3VudF9kYXRhICpuZl9jb25uY291bnRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBrZXlsZW4KIAkgICAga2V5bGVuID09IDApCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCi0JZGF0YSA9IGt2emFsbG9jX29iaigqZGF0YSk7CiYjNDM7CWRhdGEgPSBrdnphbGxvY19vYmooKmRhdGEsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFkYXRhKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYwppbmRleCBiNDA4NWFmM2FkMWNlLi5mZTUyNWIzMjRhZjQxIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYwpAQCAtOTMsNyAmIzQzOzkzLDcgQEAgaW50IG5mX2N0X2FkZF9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBjaGFyICpuYW1lLCB1OCBmYW1pbHksCiAJaWYgKCFoZWxwZXIpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfS0VSTkVMKTsKJiM0MzsJaGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghaGVscCkgewogCQluZl9jb25udHJhY2tfaGVscGVyX3B1dChoZWxwZXIpOwogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwppbmRleCBmNGYyZDgyMTkyZDU0Li5kODhhMTAyMzA4NjJlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCkBAIC0xMDA5LDcgJiM0MzsxMDA5LDcgQEAgc3RhdGljIGludCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQpCiAJQlVJTERfQlVHX09OKEFSUkFZX1NJWkUobmZfY3Rfc3lzY3RsX3RhYmxlKSAhPSBORl9TWVNDVExfQ1RfTEFTVF9TWVNDVEwpOwogCiAJdGFibGUgPSBrbWVtZHVwKG5mX2N0X3N5c2N0bF90YWJsZSwgc2l6ZW9mKG5mX2N0X3N5c2N0bF90YWJsZSksCi0JCQlHRlBfS0VSTkVMKTsKJiM0MzsJCQlHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghdGFibGUpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmMKaW5kZXggNGUxZWVmMWJhMGYxNS4uNDBjNmZjZTE0YTYzZiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9ob29rc19sd3R1bm5lbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuYwpAQCAtNzMsNyAmIzQzOzczLDcgQEAgc3RhdGljIGludCBfX25ldF9pbml0IG5mX2x3dHVubmVsX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIAlpZiAoIW5ldF9lcShuZXQsICZhbXA7aW5pdF9uZXQpKSB7CiAJCXRhYmxlID0ga21lbWR1cChuZl9sd3R1bm5lbF9zeXNjdGxfdGFibGUsCiAJCQkJc2l6ZW9mKG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZSksCi0JCQkJR0ZQX0tFUk5FTCk7CiYjNDM7CQkJCUdGUF9LRVJORUxfQUNDT1VOVCk7CiAJCWlmICghdGFibGUpCiAJCQlnb3RvIGVycl9hbGxvYzsKIAl9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jIGIvbmV0L25ldGZpbHRlci9uZl9sb2cuYwppbmRleCBmNGQ4MDY1NGRmZTZhLi5mMWQzNjQ5ZTNmYzYyIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmMKQEAgLTQ5Myw3ICYjNDM7NDkzLDcgQEAgc3RhdGljIGludCBuZXRmaWx0ZXJfbG9nX3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIAlpZiAoIW5ldF9lcShuZXQsICZhbXA7aW5pdF9uZXQpKSB7CiAJCXRhYmxlID0ga21lbWR1cChuZl9sb2dfc3lzY3RsX3RhYmxlLAogCQkJCSBzaXplb2YobmZfbG9nX3N5c2N0bF90YWJsZSksCi0JCQkJIEdGUF9LRVJORUwpOwomIzQzOwkJCQkgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAkJaWYgKCF0YWJsZSkKIAkJCWdvdG8gZXJyX2FsbG9jOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKaW5kZXggOGFjMzI2ZTFlYjViYS4uMDljYzViOGZkNmFmMSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYwpAQCAtMTIwNCwxNCAmIzQzOzEyMDQsMTUgQEAgaW50IG5mX25hdF9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywKIAlpZiAoIW5hdF9wcm90b19uZXQtJmd0O25hdF9ob29rX29wcykgewogCQlXQVJOX09OKG5hdF9wcm90b19uZXQtJmd0O3VzZXJzICE9IDApOwogCi0JCW5hdF9vcHMgPSBrbWVtZHVwX2FycmF5KG9yaWdfbmF0X29wcywgb3BzX2NvdW50LCBzaXplb2YoKm9yaWdfbmF0X29wcyksIEdGUF9LRVJORUwpOwomIzQzOwkJbmF0X29wcyA9IGttZW1kdXBfYXJyYXkob3JpZ19uYXRfb3BzLCBvcHNfY291bnQsIHNpemVvZigqb3JpZ19uYXRfb3BzKSwKJiM0MzsJCQkJCUdGUF9LRVJORUxfQUNDT1VOVCk7CiAJCWlmICghbmF0X29wcykgewogCQkJbXV0ZXhfdW5sb2NrKCZhbXA7bmZfbmF0X3Byb3RvX211dGV4KTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAKIAkJZm9yIChpID0gMDsgaSAmbHQ7IG9wc19jb3VudDsgaSYjNDM7JiM0MzspIHsKLQkJCXByaXYgPSBremFsbG9jX29iaigqcHJpdik7CiYjNDM7CQkJcHJpdiA9IGt6YWxsb2Nfb2JqKCpwcml2LCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCQkJaWYgKHByaXYpIHsKIAkJCQluYXRfb3BzW2ldLnByaXYgPSBwcml2OwogCQkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYwppbmRleCBhY2QzNjA1MTU5NzJmLi45ZmM5NTliYTIwMzAwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYwpAQCAtMzM2LDcgJiM0MzszMzYsNyBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgc3lucHJveHlfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogCXN0cnVjdCBuZl9jb25uICpjdDsKIAlpbnQgZXJyID0gLUVOT01FTTsKIAotCWN0ID0gbmZfY3RfdG1wbF9hbGxvYyhuZXQsICZhbXA7bmZfY3Rfem9uZV9kZmx0LCBHRlBfS0VSTkVMKTsKJiM0MzsJY3QgPSBuZl9jdF90bXBsX2FsbG9jKG5ldCwgJmFtcDtuZl9jdF96b25lX2RmbHQsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFjdCkKIAkJZ290byBlcnIxOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19hY2N0LmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19hY2N0LmMKaW5kZXggOGZmMWUwYWQ1Y2IwZC4uMWEzNjZmYmQ4MTMzMiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfYWNjdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2FjY3QuYwpAQCAtMTEyLDcgJiM0MzsxMTIsNyBAQCBzdGF0aWMgaW50IG5mbmxfYWNjdF9uZXcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbywKIAkJc2l6ZSAmIzQzOz0gc2l6ZW9mKHU2NCk7CiAJfQogCi0JbmZhY2N0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5mX2FjY3QpICYjNDM7IHNpemUsIEdGUF9LRVJORUwpOwomIzQzOwluZmFjY3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmZfYWNjdCkgJiM0Mzsgc2l6ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAobmZhY2N0ID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYwppbmRleCA1YjZhMDlmNDY5MDNmLi5hMDliMmZkYmY5YjRlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMKQEAgLTMzNSw3ICYjNDM7MzM1LDggQEAgc3RhdGljIGludCBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfYWxsKHN0cnVjdCBubGF0dHIgKnRiW10sCiAJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICpwb2xpY3k7CiAJaW50IGksIHJldCA9IDA7CiAKLQluZXdfcG9saWN5ID0ga21hbGxvY19vYmpzKCpuZXdfcG9saWN5LCBoZWxwZXItJmd0O2V4cGVjdF9jbGFzc19tYXggJiM0MzsgMSk7CiYjNDM7CW5ld19wb2xpY3kgPSBrbWFsbG9jX29ianMoKm5ld19wb2xpY3ksIGhlbHBlci0mZ3Q7ZXhwZWN0X2NsYXNzX21heCAmIzQzOyAxLAomIzQzOwkJCQkgIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFuZXdfcG9saWN5KQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuYwppbmRleCA2NmMyMDE2ZjYwNDlkLi42YjRhZGFhZjYxYWYwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuYwpAQCAtNzEsNyAmIzQzOzcxLDggQEAgY3RubF90aW1lb3V0X3BhcnNlX3BvbGljeSh2b2lkICp0aW1lb3V0LAogCXN0cnVjdCBubGF0dHIgKip0YjsKIAlpbnQgcmV0ID0gMDsKIAotCXRiID0ga3phbGxvY19vYmpzKCp0YiwgbDRwcm90by0mZ3Q7Y3RubF90aW1lb3V0Lm5sYXR0cl9tYXggJiM0MzsgMSk7CiYjNDM7CXRiID0ga3phbGxvY19vYmpzKCp0YiwgbDRwcm90by0mZ3Q7Y3RubF90aW1lb3V0Lm5sYXR0cl9tYXggJiM0MzsgMSwKJiM0MzsJCQkgIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAKIAlpZiAoIXRiKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE1MCwxNCAmIzQzOzE1MSwxNSBAQCBzdGF0aWMgaW50IGN0dGltZW91dF9uZXdfdGltZW91dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlnb3RvIGVycl9wcm90b19wdXQ7CiAJfQogCi0JdGltZW91dCA9IGt6YWxsb2Moc2l6ZW9mKCp0aW1lb3V0KSwgR0ZQX0tFUk5FTCk7CiYjNDM7CXRpbWVvdXQgPSBremFsbG9jKHNpemVvZigqdGltZW91dCksIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKHRpbWVvdXQgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9wcm90b19wdXQ7CiAJfQogCiAJdGltZW91dC0mZ3Q7dGltZW91dCA9IGt6YWxsb2Moc2l6ZW9mKCp0aW1lb3V0LSZndDt0aW1lb3V0KSAmIzQzOwotCQkJCSAgIGw0cHJvdG8tJmd0O2N0bmxfdGltZW91dC5vYmpfc2l6ZSwgR0ZQX0tFUk5FTCk7CiYjNDM7CQkJCSAgIGw0cHJvdG8tJmd0O2N0bmxfdGltZW91dC5vYmpfc2l6ZSwKJiM0MzsJCQkJICAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIXRpbWVvdXQtJmd0O3RpbWVvdXQpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnI7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19vc2YuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX29zZi5jCmluZGV4IDkyMDAyMDc5ZjhlYWIuLmU0ODM1YjBmNGJiMWEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX29zZi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX29zZi5jCkBAIC0zMjUsNyAmIzQzOzMyNSw3IEBAIHN0YXRpYyBpbnQgbmZubF9vc2ZfYWRkX2NhbGxiYWNrKHN0cnVjdCBza19idWZmICpza2IsCiAJICAgICFtZW1jaHIoZi0mZ3Q7dmVyc2lvbiwgMCwgTUFYR0VOUkVMRU4pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWtmID0ga21hbGxvY19vYmooc3RydWN0IG5mX29zZl9maW5nZXIpOwomIzQzOwlrZiA9IGttYWxsb2Nfb2JqKHN0cnVjdCBuZl9vc2ZfZmluZ2VyLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICgha2YpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jIGIvbmV0L25ldGZpbHRlci9uZnRfY3QuYwppbmRleCA5ZGJmMTI3ZGY5YzgxLi44OTc2MDg3NDMzNmMzIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMKQEAgLTM2NSw3ICYjNDM7MzY1LDcgQEAgc3RhdGljIGJvb2wgbmZ0X2N0X3RtcGxfYWxsb2NfcGNwdSh2b2lkKQogCQlyZXR1cm4gdHJ1ZTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJdG1wID0gbmZfY3RfdG1wbF9hbGxvYygmYW1wO2luaXRfbmV0LCAmYW1wO3pvbmUsIEdGUF9LRVJORUwpOwomIzQzOwkJdG1wID0gbmZfY3RfdG1wbF9hbGxvYygmYW1wO2luaXRfbmV0LCAmYW1wO3pvbmUsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJCWlmICghdG1wKSB7CiAJCQluZnRfY3RfdG1wbF9wdXRfcGNwdSgpOwogCQkJcmV0dXJuIGZhbHNlOwpAQCAtODQ4LDcgJiM0Mzs4NDgsOCBAQCBuZnRfY3RfdGltZW91dF9wYXJzZV9wb2xpY3kodm9pZCAqdGltZW91dHMsCiAJc3RydWN0IG5sYXR0ciAqKnRiOwogCWludCByZXQgPSAwOwogCi0JdGIgPSBremFsbG9jX29ianMoKnRiLCBsNHByb3RvLSZndDtjdG5sX3RpbWVvdXQubmxhdHRyX21heCAmIzQzOyAxKTsKJiM0MzsJdGIgPSBremFsbG9jX29ianMoKnRiLCBsNHByb3RvLSZndDtjdG5sX3RpbWVvdXQubmxhdHRyX21heCAmIzQzOyAxLAomIzQzOwkJCSAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAogCWlmICghdGIpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtOTM0LDcgJiM0Mzs5MzUsNyBAQCBzdGF0aWMgaW50IG5mdF9jdF90aW1lb3V0X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAJfQogCiAJdGltZW91dCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuZl9jdF90aW1lb3V0KSAmIzQzOwotCQkJICBsNHByb3RvLSZndDtjdG5sX3RpbWVvdXQub2JqX3NpemUsIEdGUF9LRVJORUwpOwomIzQzOwkJCSAgbDRwcm90by0mZ3Q7Y3RubF90aW1lb3V0Lm9ial9zaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICh0aW1lb3V0ID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJfcHJvdG9fcHV0OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jIGIvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jCmluZGV4IDk3OGJiMGMwMTEwNjguLjM2MTdiYjY2MDk0ZDQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMKQEAgLTIyOTgsNyAmIzQzOzIyOTgsNyBAQCBzdGF0aWMgaW50IG5mdF9waXBhcG9faW5pdChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LAogCWlmIChmaWVsZF9jb3VudCAmZ3Q7IE5GVF9QSVBBUE9fTUFYX0ZJRUxEUykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltID0ga21hbGxvY19mbGV4KCptLCBmLCBmaWVsZF9jb3VudCk7CiYjNDM7CW0gPSBrbWFsbG9jX2ZsZXgoKm0sIGYsIGZpZWxkX2NvdW50LCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghbSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfQ1QuYyBiL25ldC9uZXRmaWx0ZXIveHRfQ1QuYwppbmRleCBlNzg2NjBkZmRmNGI2Li4yMDViYzZkZDk4MTI1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X0NULmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9DVC5jCkBAIC05MSw3ICYjNDM7OTEsNyBAQCB4dF9jdF9zZXRfaGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3QgY2hhciAqaGVscGVyX25hbWUsCiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0tFUk5FTCk7CiYjNDM7CWhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoaGVscCA9PSBOVUxMKSB7CiAJCW5mX2Nvbm50cmFja19oZWxwZXJfcHV0KGhlbHBlcik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTgyLDcgJiM0MzsxODIsNyBAQCBzdGF0aWMgaW50IHh0X2N0X3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyLAogCWlmIChpbmZvLSZndDtmbGFncyAmYW1wOyBYVF9DVF9aT05FX01BUkspCiAJCXpvbmUuZmxhZ3MgfD0gTkZfQ1RfRkxBR19NQVJLOwogCi0JY3QgPSBuZl9jdF90bXBsX2FsbG9jKHBhci0mZ3Q7bmV0LCAmYW1wO3pvbmUsIEdGUF9LRVJORUwpOwomIzQzOwljdCA9IG5mX2N0X3RtcGxfYWxsb2MocGFyLSZndDtuZXQsICZhbXA7em9uZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIWN0KSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyMjsKQEAgLTE5MCw3ICYjNDM7MTkwLDcgQEAgc3RhdGljIGludCB4dF9jdF90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhciwKIAogCWlmICgoaW5mby0mZ3Q7Y3RfZXZlbnRzIHx8IGluZm8tJmd0O2V4cF9ldmVudHMpICZhbXA7JmFtcDsKIAkgICAgIW5mX2N0X2VjYWNoZV9leHRfYWRkKGN0LCBpbmZvLSZndDtjdF9ldmVudHMsIGluZm8tJmd0O2V4cF9ldmVudHMsCi0JCQkJICBHRlBfS0VSTkVMKSkgewomIzQzOwkJCQkgIEdGUF9LRVJORUxfQUNDT1VOVCkpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnIzOwogCX0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jCmluZGV4IGJmY2YyZDQ0ZTkzZGIuLjc5NmIwZDQ2MWMzZDAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYwpAQCAtMTUwLDcgJiM0MzsxNTAsNyBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jcmVhdGUoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvKQogewogCWludCByZXQ7CiAKLQlpbmZvLSZndDt0aW1lciA9IGt6YWxsb2Nfb2JqKCppbmZvLSZndDt0aW1lcik7CiYjNDM7CWluZm8tJmd0O3RpbWVyID0ga3phbGxvY19vYmooKmluZm8tJmd0O3RpbWVyLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghaW5mby0mZ3Q7dGltZXIpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CkBAIC0xNjEsNyAmIzQzOzE2MSw3IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8gKmluZm8pCiAJCWdvdG8gb3V0X2ZyZWVfdGltZXI7CiAKIAlzeXNmc19hdHRyX2luaXQoJmFtcDtpbmZvLSZndDt0aW1lci0mZ3Q7YXR0ci5hdHRyKTsKLQlpbmZvLSZndDt0aW1lci0mZ3Q7YXR0ci5hdHRyLm5hbWUgPSBrc3RyZHVwKGluZm8tJmd0O2xhYmVsLCBHRlBfS0VSTkVMKTsKJiM0MzsJaW5mby0mZ3Q7dGltZXItJmd0O2F0dHIuYXR0ci5uYW1lID0ga3N0cmR1cChpbmZvLSZndDtsYWJlbCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIWluZm8tJmd0O3RpbWVyLSZndDthdHRyLmF0dHIubmFtZSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9mcmVlX3RpbWVyOwpAQCAtMTk5LDcgJiM0MzsxOTksNyBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxICppbmZvKQogewogCWludCByZXQ7CiAKLQlpbmZvLSZndDt0aW1lciA9IGttYWxsb2Nfb2JqKCppbmZvLSZndDt0aW1lcik7CiYjNDM7CWluZm8tJmd0O3RpbWVyID0ga21hbGxvY19vYmooKmluZm8tJmd0O3RpbWVyLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghaW5mby0mZ3Q7dGltZXIpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CkBAIC0yMTAsNyAmIzQzOzIxMCw3IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pCiAJCWdvdG8gb3V0X2ZyZWVfdGltZXI7CiAKIAlzeXNmc19hdHRyX2luaXQoJmFtcDtpbmZvLSZndDt0aW1lci0mZ3Q7YXR0ci5hdHRyKTsKLQlpbmZvLSZndDt0aW1lci0mZ3Q7YXR0ci5hdHRyLm5hbWUgPSBrc3RyZHVwKGluZm8tJmd0O2xhYmVsLCBHRlBfS0VSTkVMKTsKJiM0MzsJaW5mby0mZ3Q7dGltZXItJmd0O2F0dHIuYXR0ci5uYW1lID0ga3N0cmR1cChpbmZvLSZndDtsYWJlbCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIWluZm8tJmd0O3RpbWVyLSZndDthdHRyLmF0dHIubmFtZSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9mcmVlX3RpbWVyOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9MRUQuYyBiL25ldC9uZXRmaWx0ZXIveHRfTEVELmMKaW5kZXggY2FhYWY0ZDJjNTg0Mi4uM2NiYjhkNjFkNDE3NSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9MRUQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X0xFRC5jCkBAIC0xMTEsMTEgJiM0MzsxMTEsMTIgQEAgc3RhdGljIGludCBsZWRfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCiAJfQogCiAJZXJyID0gLUVOT01FTTsKLQlsZWRpbnRlcm5hbCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB4dF9sZWRfaW5mb19pbnRlcm5hbCk7CiYjNDM7CWxlZGludGVybmFsID0ga3phbGxvY19vYmooc3RydWN0IHh0X2xlZF9pbmZvX2ludGVybmFsLAomIzQzOwkJCQkgIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFsZWRpbnRlcm5hbCkKIAkJZ290byBleGl0X211dGV4X29ubHk7CiAKLQlsZWRpbnRlcm5hbC0mZ3Q7dHJpZ2dlcl9pZCA9IGtzdHJkdXAobGVkaW5mby0mZ3Q7aWQsIEdGUF9LRVJORUwpOwomIzQzOwlsZWRpbnRlcm5hbC0mZ3Q7dHJpZ2dlcl9pZCA9IGtzdHJkdXAobGVkaW5mby0mZ3Q7aWQsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFsZWRpbnRlcm5hbC0mZ3Q7dHJpZ2dlcl9pZCkKIAkJZ290byBleGl0X2ludGVybmFsX2FsbG9jOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X1JBVEVFU1QuYyBiL25ldC9uZXRmaWx0ZXIveHRfUkFURUVTVC5jCmluZGV4IDkxMjcwZDQ2N2ZmZGYuLjJmNmI1MTJiNzFlODAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfUkFURUVTVC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfUkFURUVTVC5jCkBAIC0xMzksNyAmIzQzOzEzOSw3IEBAIHN0YXRpYyBpbnQgeHRfcmF0ZWVzdF90Z19jaGVja2VudHJ5KGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQogCX0KIAogCXJldCA9IC1FTk9NRU07Ci0JZXN0ID0ga3phbGxvY19vYmooKmVzdCk7CiYjNDM7CWVzdCA9IGt6YWxsb2Nfb2JqKCplc3QsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFlc3QpCiAJCWdvdG8gZXJyMTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9URUUuYyBiL25ldC9uZXRmaWx0ZXIveHRfVEVFLmMKaW5kZXggNWQzNGNlYjg5M2VkYS4uNDhiNDEwNGYwODU5OCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9URUUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jCkBAIC0xMDYsNyAmIzQzOzEwNiw3IEBAIHN0YXRpYyBpbnQgdGVlX3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQogCQlpZiAoaW5mby0mZ3Q7b2lmW3NpemVvZihpbmZvLSZndDtvaWYpLTFdICE9ICYjMzk7XDAmIzM5OykKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCXByaXYgPSBremFsbG9jX29iaigqcHJpdik7CiYjNDM7CQlwcml2ID0ga3phbGxvY19vYmooKnByaXYsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJCWlmIChwcml2ID09IE5VTEwpCiAJCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuYyBiL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmMKaW5kZXggOWFmMGZhODk1ZjczMC4uYjQ1ZjA2YjA2YzI2ZCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jCkBAIC0zMTksNyAmIzQzOzMxOSw3IEBAIHN0YXRpYyBpbnQgaHRhYmxlX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBoYXNobGltaXRfY2ZnMyAqY2ZnLAogCWhpbmZvLSZndDtjb3VudCA9IDA7CiAJaGluZm8tJmd0O2ZhbWlseSA9IGZhbWlseTsKIAloaW5mby0mZ3Q7cm5kX2luaXRpYWxpemVkID0gZmFsc2U7Ci0JaGluZm8tJmd0O25hbWUgPSBrc3RyZHVwKG5hbWUsIEdGUF9LRVJORUwpOwomIzQzOwloaW5mby0mZ3Q7bmFtZSA9IGtzdHJkdXAobmFtZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIWhpbmZvLSZndDtuYW1lKSB7CiAJCWt2ZnJlZShoaW5mbyk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9saW1pdC5jIGIvbmV0L25ldGZpbHRlci94dF9saW1pdC5jCmluZGV4IDg3ZDc0ZGExNGMwYjcuLmFkNDhiNjg3OWIxMzAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfbGltaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMKQEAgLTExNSw3ICYjNDM7MTE1LDcgQEAgc3RhdGljIGludCBsaW1pdF9tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIAkJcmV0dXJuIC1FUkFOR0U7CiAJfQogCi0JcHJpdiA9IGttYWxsb2Nfb2JqKCpwcml2KTsKJiM0MzsJcHJpdiA9IGttYWxsb2Nfb2JqKCpwcml2LCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmIChwcml2ID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmMKaW5kZXggYjA1YzVjOGRhYzc4Yi4uZTIxZWMxNTJkMTZhNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9xdW90YS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfcXVvdGEuYwpAQCAtNTAsNyAmIzQzOzUwLDcgQEAgc3RhdGljIGludCBxdW90YV9tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIAlpZiAocS0mZ3Q7ZmxhZ3MgJmFtcDsgflhUX1FVT1RBX01BU0spCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcS0mZ3Q7bWFzdGVyID0ga21hbGxvY19vYmooKnEtJmd0O21hc3Rlcik7CiYjNDM7CXEtJmd0O21hc3RlciA9IGttYWxsb2Nfb2JqKCpxLSZndDttYXN0ZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKHEtJmd0O21hc3RlciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9yZWNlbnQuYyBiL25ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmMKaW5kZXggZDM0ODMxY2UzYWRmYi4uNTVmMWYyZDg5OTUyZCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9yZWNlbnQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jCkBAIC0zOTEsNyAmIzQzOzM5MSw4IEBAIHN0YXRpYyBpbnQgcmVjZW50X210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyLAogCQlnb3RvIG91dDsKIAl9CiAKLQl0ID0ga3Z6YWxsb2NfZmxleCgqdCwgaXBoYXNoLCBpcF9saXN0X2hhc2hfc2l6ZSk7CiYjNDM7CXQgPSBrdnphbGxvY19mbGV4KCp0LCBpcGhhc2gsIGlwX2xpc3RfaGFzaF9zaXplLAomIzQzOwkJCSAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAodCA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9zdGF0aXN0aWMuYyBiL25ldC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmMKaW5kZXggMzM0ZTA5NzcxYWJmOS4uMWZmYzU5ZDkwYmIwYSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9zdGF0aXN0aWMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5jCkBAIC01OCw3ICYjNDM7NTgsNyBAQCBzdGF0aWMgaW50IHN0YXRpc3RpY19tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIAkgICAgaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgflhUX1NUQVRJU1RJQ19NQVNLKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWluZm8tJmd0O21hc3RlciA9IGt6YWxsb2Nfb2JqKCppbmZvLSZndDttYXN0ZXIpOwomIzQzOwlpbmZvLSZndDttYXN0ZXIgPSBremFsbG9jX29iaigqaW5mby0mZ3Q7bWFzdGVyLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmIChpbmZvLSZndDttYXN0ZXIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJYXRvbWljX3NldCgmYW1wO2luZm8tJmd0O21hc3Rlci0mZ3Q7Y291bnQsIGluZm8tJmd0O3UubnRoLmNvdW50KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfc3RyaW5nLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3N0cmluZy5jCmluZGV4IDhjZTI1YmM5YjI3NzUuLjUyYzFkZWIwMmNkYzYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfc3RyaW5nLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9zdHJpbmcuYwpAQCAtNTQsNyAmIzQzOzU0LDcgQEAgc3RhdGljIGludCBzdHJpbmdfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiAJaWYgKGNvbmYtJmd0O3UudjEuZmxhZ3MgJmFtcDsgWFRfU1RSSU5HX0ZMQUdfSUdOT1JFQ0FTRSkKIAkJZmxhZ3MgfD0gVFNfSUdOT1JFQ0FTRTsKIAl0c19jb25mID0gdGV4dHNlYXJjaF9wcmVwYXJlKGNvbmYtJmd0O2FsZ28sIGNvbmYtJmd0O3BhdHRlcm4sIGNvbmYtJmd0O3BhdGxlbiwKLQkJCQkgICAgIEdGUF9LRVJORUwsIGZsYWdzKTsKJiM0MzsJCQkJICAgICBHRlBfS0VSTkVMX0FDQ09VTlQsIGZsYWdzKTsKIAlpZiAoSVNfRVJSKHRzX2NvbmYpKQogCQlyZXR1cm4gUFRSX0VSUih0c19jb25mKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDcwNAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDI1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXRmaWx0ZXIgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyBzd2l0Y2hpbmcgbmV0ZmlsdGVyJiMzOTtzIG1lbW9yeSBhbGxvY2F0aW9ucyBmcm9tIHBsYWluIGBHRlBfS0VSTkVMYCB0byBgR0ZQX0tFUk5FTF9BQ0NPVU5UYC4gVGhpcyBpcyBiYXNpY2FsbHkgYSBtZWNoYW5pY2FsIGNoYW5nZSwganVzdCBhZGRpbmcgYWNjb3VudGluZyB0byB0aGVzZSBhbGxvY2F0aW9ucy4gTXkgZmlyc3QgdGhvdWdodCBpczogZG9lcyB0aGlzICphY3R1YWxseSogY2hhbmdlIGFueXRoaW5nIGZyb20gYSBmdW5jdGlvbmFsIHBlcnNwZWN0aXZlPyBNZW1vcnkgYWNjb3VudGluZywgYnkgaXRzZWxmLCBkb2VzbiYjMzk7dCBhbHRlciB0aGUga2VybmVsJiMzOTtzIGV4ZWN1dGlvbiBmbG93LiBUaGUgb25seSBzaWRlIGVmZmVjdCBpcyBpdCBtYXkgdHJpZ2dlciBPT00gZXJyb3JzIG9yIGNncm91cCBsaW1pdHMgaWYgbWVtb3J5IGNvbnN0cmFpbnRzIGFyZSBoaXQuCgpCdXQsIHNob3VsZCBJIGJvdGhlciBmdXp6aW5nIHRoaXM/IE5vcm1hbGx5LCBhZGRpbmcgYEdGUF9LRVJORUxfQUNDT1VOVGAgaXMgYSBnb29kIHRoaW5nIGZvciBzZWN1cml0eSBhbmQgYWNjb3VudGluZy4gSXQgaGVscHMgcHJldmVudCB1bnByaXZpbGVnZWQgdXNlcnMgZnJvbSBob2dnaW5nIG1lbW9yeSB3aXRob3V0IGl0IGJlaW5nIHByb3Blcmx5IHRyYWNrZWQgYnkgdGhlaXIgY2dyb3VwLiBObyBuZXcgbG9naWMgaXMgYmVpbmcgaW50cm9kdWNlZCwgaXQgaXMgb25seSBhIGNoYW5nZSBpbiB0aGUgR0ZQIGZsYWdzLgoKSGFuZyBvbiwgbGV0JiMzOTtzIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBwYXRjaCBpdHNlbGYuCgpgYGBjCi0JdG1wbCA9IGt6YWxsb2Nfb2JqKCp0bXBsKTsKJiM0MzsJdG1wbCA9IGt6YWxsb2Nfb2JqKCp0bXBsLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwpgYGAKCldhaXQsIGBremFsbG9jX29iamA/IFRoYXQgZG9lc24mIzM5O3QgbG9vayBmYW1pbGlhci4gYGt6YWxsb2Nfb2JqYCBpc24mIzM5O3QgYSBzdGFuZGFyZCBrZXJuZWwgbWFjcm8sIGlzIGl0PyBCZXR0ZXIgY2hlY2sgaWYgdGhpcyBpcyBldmVuIHNvbWV0aGluZyB0aGF0IGV4aXN0cyBpbiB0aGUga2VybmVsLiBJJiMzOTttIGdvaW5nIHRvIHJ1biBhIGBncmVwcGVyYCBzZWFyY2ggdG8gc2VlIGlmIGBremFsbG9jX29iamAgaXMgZGVmaW5lZCBhbnl3aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtremFsbG9jX29iaiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzkyNzMgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3Q9MTAzPWxpc3Q6XG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMTQtXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0OjExNTogICAgICAgICAgZ3JvY2sgPSBremFsbG9jX29iaigqZ3JvY2spO1xuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMTYtICAgICAgICAgIGlmICghZ3JvY2spXG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMjUtXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0OjEyNjogICAgICAgICAgZGltaXRyaSA9IGt6YWxsb2Nfb2JqKCpkaW1pdHJpKTtcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTI3LSAgICAgICAgICBpZiAoIWRpbWl0cmkpXG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0PTQ1PWEgbWVzc2FnZSBhbmQgYSBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgQVBJIGFuZCByZXR1cm4gaW1tZWRpYXRlbHkpLlxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdC04OS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdDo5MDpcdFx0ZGNfc3luYyA9IGt6YWxsb2Nfb2JqKCpkY19zeW5jKTtcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdDo5MTpcdFx0ZGNfYXN5bmMgPSBremFsbG9jX29iaigqZGNfYXN5bmMpO1xuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0LTkyLVxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdD0yNj1FeGFtcGxlOlxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdC00NC1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdDo0NTpcdFx0bXlfZmggPSBremFsbG9jX29iaigqbXlfZmgpO1xuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0LTQ2LVxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTkzOD1UaGUga2VybmVsIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZ2VuZXJhbCBwdXJwb3NlIG1lbW9yeSBhbGxvY2F0b3JzOlxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTM5OmttYWxsb2MoKSwga3phbGxvYygpLCBrbWFsbG9jX29ianMoKSwga3phbGxvY19vYmpzKCksIHZtYWxsb2MoKSwgYW5kXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDAtdnphbGxvYygpLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgZnVydGhlciBpbmZvcm1hdGlvblxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk2ND1UaGUgcHJlZmVycmVkIGZvcm0gZm9yIGFsbG9jYXRpbmcgYSB6ZXJvZWQgYXJyYXkgaXMgdGhlIGZvbGxvd2luZzpcbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjctXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5Njg6XHRwID0ga3phbGxvY19vYmpzKCpwLCBuLCAuLi4pO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTY5LVxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdD0zOTg9YmVjb21lLCByZXNwZWN0aXZlbHk6OlxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDAtXHRwdHIgPSBrbWFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDE6XHRwdHIgPSBremFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDItXHRwdHIgPSBrbWFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMzpcdHB0ciA9IGt6YWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDA0LVx0cHRyID0ga21hbGxvY19mbGV4KCpwdHIsIGZsZXhfbWVtYmVyLCBjb3VudCBbLCBnZnBdICk7XG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTIwOD10byBkZXRhaWxzIGV4cGxhaW5lZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb24uXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTI2OC0gICAgICAgICAgICAgIC8qIGFsbG9jYXRlIGEgY2hpcC1zcGVjaWZpYyBkYXRhIHdpdGggemVybyBmaWxsZWQgKi9cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDoyNjk6ICAgICAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTI3MC0gICAgICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTYyMz1BZnRlciBhbGxvY2F0aW5nIGEgY2FyZCBpbnN0YW5jZSB2aWEgOmM6ZnVuYzpgc25kX2NhcmRfbmV3KClgXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTYzMC0gIC4uLi4uXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6NjMxOiAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC02MzItXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTY5OD1kZXN0cnVjdG9yIGFuZCBQQ0kgZW50cmllcy4gRXhhbXBsZSBjb2RlIGlzIHNob3duIGZpcnN0LCBiZWxvdzo6XG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTc0OS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDo3NTA6ICAgICAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTc1MS0gICAgICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpIHtcbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9MzgyMz1jaGlwIGRhdGEgaW5kaXZpZHVhbGx5Ojpcbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzgzNS0gICAgICAgICAgLi4uLlxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjM4MzY6ICAgICAgICAgIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzgzNy0gICAgICAgICAgLi4uLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dD03OTQ9aW50IG15X29wZW4oc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0LTgwMS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dDo4MDI6XHRteV9maCA9IGt6YWxsb2Nfb2JqKCpteV9maCk7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQtODAzLVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jPTY0PW1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmNjRfRWhkciAqaGRyLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxuLS1cbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTk1LVx0bnN5bXMgPSBzeW10YWItXHUwMDNlc2hfc2l6ZSAvIHNpemVvZihFbGY2NF9TeW0pO1xuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmM6OTY6XHRjaGFpbnMgPSBremFsbG9jX29ianMoc3RydWN0IGdvdF9lbnRyeSwgbnN5bXMpO1xuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMtOTctXHRpZiAoIWNoYWlucykge1xuLS1cbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmM9MzkwPXJlZ2lzdGVyX2NwdXModm9pZClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTM5NC1cdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jOjM5NTpcdFx0c3RydWN0IGNwdSAqcCA9IGt6YWxsb2Nfb2JqKCpwKTtcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmMtMzk2LVx0XHRpZiAoIXApXG4tLVxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jPTExMjA9c3RhdGljIGludCBqaXRfcHJlcGFyZV9maW5hbF9tZW1fYWxsb2Moc3RydWN0IGppdF9jb250ZXh0ICpjdHgpXG4tLVxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jLTExMzEtXHRpZiAoY3R4LVx1MDAzZW5lZWRfZXh0cmFfcGFzcykge1xuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jOjExMzI6XHRcdGN0eC1cdTAwM2VqaXRfZGF0YSA9IGt6YWxsb2Nfb2JqKCpjdHgtXHUwMDNlaml0X2RhdGEpO1xuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jLTExMzMtXHRcdGlmICghY3R4LVx1MDAzZWppdF9kYXRhKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYz0yMjA9bG9jb21vX2luaXRfb25lX2NoaWxkKHN0cnVjdCBsb2NvbW8gKmxjaGlwLCBzdHJ1Y3QgbG9jb21vX2Rldl9pbmZvICppbmZvKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0yMjQtXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM6MjI1Olx0ZGV2ID0ga3phbGxvY19vYmooc3RydWN0IGxvY29tb19kZXYpO1xuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTIyNi1cdGlmICghZGV2KSB7XG4tLVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jPTM1Nj1fX2xvY29tb19wcm9iZShzdHJ1Y3QgZGV2aWNlICptZSwgc3RydWN0IHJlc291cmNlICptZW0sIGludCBpcnEpXG4tLVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTM2Mi1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYzozNjM6XHRsY2hpcCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb2NvbW8pO1xuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTM2NC1cdGlmICghbGNoaXApXG4tLVxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jPTczMz1zYTExMTFfaW5pdF9vbmVfY2hpbGQoc3RydWN0IHNhMTExMSAqc2FjaGlwLCBzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCxcbi0tXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtNzM5LVxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jOjc0MDpcdGRldiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBzYTExMTFfZGV2KTtcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYy03NDEtXHRpZiAoIWRldikge1xuLS1cbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jPTE3OD1zdGF0aWMgaW50IHNjb29wX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmMtMTg3LVxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmM6MTg4Olx0ZGV2cHRyID0ga3phbGxvY19vYmooc3RydWN0IHNjb29wX2Rldik7XG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYy0xODktXHRpZiAoIWRldnB0cilcbi0tXG5hcmNoL2FybS9rZXJuZWwvc21wLmM9MTA4PXN0YXRpYyBpbnQgc2Vjb25kYXJ5X2JpZ2xpdHRsZV9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUpXG4tLVxuYXJjaC9hcm0va2VybmVsL3NtcC5jLTExMC1cdGlmICghY3B1X3Z0YWJsZVtjcHVdKVxuYXJjaC9hcm0va2VybmVsL3NtcC5jOjExMTpcdFx0Y3B1X3Z0YWJsZVtjcHVdID0ga3phbGxvY19vYmooKmNwdV92dGFibGVbY3B1XSk7XG5hcmNoL2FybS9rZXJuZWwvc21wLmMtMTEyLVxuLS1cbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmM9MTY5PXN0YXRpYyBpbnQgX19pbml0IHZkc29faW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmMtMTgxLVx0LyogQWxsb2NhdGUgdGhlIFZEU08gdGV4dCBwYWdlbGlzdCAqL1xuYXJjaC9hcm0va2VybmVsL3Zkc28uYzoxODI6XHR2ZHNvX3RleHRfcGFnZWxpc3QgPSBremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdGV4dF9wYWdlcyk7XG5hcmNoL2FybS9rZXJuZWwvdmRzby5jLTE4My1cdGlmICh2ZHNvX3RleHRfcGFnZWxpc3QgPT0gTlVMTClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jPTI2MT1pbnQgX19pbml0IGRjMjEyODVfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYy0yNjQtXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jOjI2NTpcdHJlcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcmVzb3VyY2UsIDIpO1xuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYy0yNjYtXHRpZiAoIXJlcykge1xuLS1cbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmM9Njk9c3RhdGljIGludCBfX2luaXQgZWJzYTI4NV9sZWRzX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jLTg2LVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYzo4NzpcdFx0bGVkID0ga3phbGxvY19vYmooKmxlZCk7XG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jLTg4LVx0XHRpZiAoIWxlZClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmM9NzIwPXN0YXRpYyBpbnQgX19pbml0IG5ldHdpbmRlcl9sZWRzX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmMtNzI5LVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jOjczMDpcdFx0bGVkID0ga3phbGxvY19vYmooKmxlZCk7XG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmMtNzMxLVx0XHRpZiAoIWxlZClcbi0tXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM9NDczPXN0YXRpYyBpbnQgaW14X21tZGNfcGVyZl9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHZvaWQgX19pb21lbSAqbW1kY19iYXNlLFxuLS1cbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYy00NzktXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM6NDgwOlx0cG11X21tZGMgPSBremFsbG9jX29iaigqcG11X21tZGMpO1xuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jLTQ4MS1cdGlmICghcG11X21tZGMpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM9MTE0PXN0YXRpYyB2b2lkIF9faW5pdCBpMmNfcXVpcmsodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMtMTI5LVxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jOjEzMDpcdFx0bmV3X2NvbXBhdCA9IGt6YWxsb2Nfb2JqKCpuZXdfY29tcGF0KTtcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYy0xMzEtXG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYz0xNjM9c3RhdGljIHZvaWQgX19pbml0IGFybWFkYV8zNzVfMzgwX2NvaGVyZW5jeV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYy0xODctXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jOjE4ODpcdFx0cCA9IGt6YWxsb2Nfb2JqKCpwKTtcbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmMtMTg5LVx0XHRwLVx1MDAzZW5hbWUgPSBrc3RyZHVwKFwmIzM0O2FybSxpby1jb2hlcmVudFwmIzM0OywgR0ZQX0tFUk5FTCk7XG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYz0xNDg9c3RhdGljIGludCBfX2luaXQgbXZlYnVfc29jX2RldmljZSh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmMtMTU2LVxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYzoxNTc6XHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmMtMTU4LVx0aWYgKCFzb2NfZGV2X2F0dHIpXG4tLVxuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYz0zODA9c3RhdGljIHZvaWQgX19pbml0IG14c19tYWNoaW5lX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jLTM4OS1cbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmM6MzkwOlx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jLTM5MS1cdGlmICghc29jX2Rldl9hdHRyKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmM9Mjk0PXN0YXRpYyBpbnQgX19pbml0IG9tYXAxX3N5c3RlbV9kbWFfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmMtMzIxLVxuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYzozMjI6XHRkID0ga3phbGxvY19vYmooKmQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYy0zMjMtXHRpZiAoIWQpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmM9MjkyPXN0YXRpYyB2b2lkIG9tYXBfbWNic3BfcmVnaXN0ZXJfYm9hcmRfY2ZnKHN0cnVjdCByZXNvdXJjZSAqcmVzLCBpbnQgcmVzX2NvdW50LFxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYy0yOTYtXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmM6Mjk3Olx0b21hcF9tY2JzcF9kZXZpY2VzID0ga3phbGxvY19vYmpzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgc2l6ZSk7XG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMtMjk4LVx0aWYgKCFvbWFwX21jYnNwX2RldmljZXMpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmM9NTE9c3RhdGljIGludCBfX2luaXQgb21hcDFfZG1fdGltZXJfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYy0xMjctXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmM6MTI4Olx0XHRwZGF0YSA9IGt6YWxsb2Nfb2JqKCpwZGF0YSk7XG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmMtMTI5LVx0XHRpZiAoIXBkYXRhKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmM9MjMwPXZvaWQgb21hcDJ4eHhfY2xrdF92cHNfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jLTIzOS1cbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jOjI0MDpcdGh3ID0ga3phbGxvY19vYmooKmh3KTtcbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jLTI0MS1cdGlmICghaHcpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jPTc4Nj12b2lkIF9faW5pdCBvbWFwX3NvY19kZXZpY2VfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYy03OTAtXG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmM6NzkxOlx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMtNzkyLVx0aWYgKCFzb2NfZGV2X2F0dHIpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jPTEzMT1zdGF0aWMgaW50IG9tYXBfZGV2aWNlX2J1aWxkX2Zyb21fZHQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmMtMTU4LVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jOjE1OTpcdGh3bW9kcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3Qgb21hcF9od21vZCAqLCBvaF9jbnQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jLTE2MC1cdGlmICghaHdtb2RzKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM9MzM4MT1zdGF0aWMgaW50IG9tYXBfaHdtb2RfYWxsb2NhdGVfbW9kdWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG9tYXBfaHdtb2QgKm9oLFxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTMzOTQtXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozMzk1Olx0c3lzYyA9IGt6YWxsb2Nfb2JqKCpzeXNjKTtcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTMzOTYtXHRpZiAoIXN5c2MpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzQyNC1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNm9oLVx1MDAzZXNsYXZlX3BvcnRzKSkge1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzQyNTpcdFx0b2kgPSBremFsbG9jX29iaigqb2kpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzQyNi1cdFx0aWYgKCFvaSlcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYz0zNTEzPWludCBvbWFwX2h3bW9kX2luaXRfbW9kdWxlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTI3LVx0aWYgKCFvaCkge1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzUyODpcdFx0b2ggPSBremFsbG9jX29iaigqb2gpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzUyOS1cdFx0aWYgKCFvaClcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTM4LVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzUzOTpcdFx0b2gtXHUwMDNlY2xhc3MgPSBremFsbG9jX29iaigqb2gtXHUwMDNlY2xhc3MpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzU0MC1cdFx0aWYgKCFvaC1cdTAwM2VjbGFzcykge1xuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYz0zNzk9c3RhdGljIGludCBfX2luaXQgYW14M19pZGxlX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpjcHVfbm9kZSwgaW50IGNwdSlcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmMtNDEyLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jOjQxMzpcdGlkbGVfc3RhdGVzID0ga3phbGxvY19vYmpzKCppZGxlX3N0YXRlcywgc3RhdGVfY291bnQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jLTQxNC1cdGlmICghaWRsZV9zdGF0ZXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYz0zMD1zdGF0aWMgdm9pZCBfX2luaXQgc3Jfc2V0X252YWx1ZXMoc3RydWN0IG9tYXBfdm9sdF9kYXRhICp2b2x0X2RhdGEsXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYy00MS1cbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmM6NDI6XHRudmFsdWVfdGFibGUgPSBremFsbG9jX29ianMoKm52YWx1ZV90YWJsZSwgY291bnQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYy00My1cdGlmICghbnZhbHVlX3RhYmxlKVxuLS1cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYz0xMzk9c3RhdGljIGludCBfX2luaXQgcGNpZV9zZXR1cChzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTE3MS1cdCAqL1xuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jOjE3MjpcdHJlcyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByZXNvdXJjZSk7XG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtMTczLVx0aWYgKCFyZXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jPTQ2Nj1zdGF0aWMgaW50IF9faW5pdCBwY2lfc2V0dXAoc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKVxuLS1cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy00OTItXHQgKi9cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYzo0OTM6XHRyZXMgPSBremFsbG9jX29iaihzdHJ1Y3QgcmVzb3VyY2UpO1xuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTQ5NC1cdGlmICghcmVzKVxuLS1cbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmM9Njg5PXN0YXRpYyBzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKl9faW5pdCBlY2FyZF9hbGxvY19jYXJkKGludCB0eXBlLCBpbnQgc2xvdClcbi0tXG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jLTY5NC1cbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmM6Njk1Olx0ZWMgPSBremFsbG9jX29iaihlY2FyZF90KTtcbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmMtNjk2LVx0aWYgKCFlYykge1xuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM9OTM9aW50IF9faW5pdCBzYTExeHhfY2xrX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEwOS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM6MTEwOlx0aHcgPSBremFsbG9jX29iaigqaHcpO1xuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMTEtXHRpZiAoIWh3KVxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTMxLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYzoxMzI6XHRodyA9IGt6YWxsb2Nfb2JqKCpodyk7XG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEzMy1cdGlmICghaHcpXG4tLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jPTMxNz1pbnQgX19pbml0IHNhMTF4MF9yZWdpc3Rlcl9maXhlZF9yZWd1bGF0b3IoaW50IG4sXG4tLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jLTMyMy1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYzozMjQ6XHRjZmctXHUwMDNlaW5pdF9kYXRhID0gaWQgPSBremFsbG9jX29iaigqY2ZnLVx1MDAzZWluaXRfZGF0YSk7XG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmMtMzI1LVx0aWYgKCFjZmctXHUwMDNlaW5pdF9kYXRhKVxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmM9MjI1PXN0YXRpYyBpbnQgbmVwb25zZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KVxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMtMjc4LVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYzoyNzk6XHRkID0ga3phbGxvY19vYmooKmQpO1xuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYy0yODAtXHRpZiAoIWQpIHtcbi0tXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYz0xNDE9c3RhdGljIGludCBfX2luaXQgcmNhcl9nZW4yX3JlZ3VsYXRvcl9xdWlyayh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jLTE2Ni1cbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jOjE2NzpcdFx0cXVpcmsgPSBremFsbG9jX29iaigqcXVpcmspO1xuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmMtMTY4LVx0XHRpZiAoIXF1aXJrKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9MzkzPXN0YXRpYyBpbnQgdmVfc3BjX3BvcHVsYXRlX29wcHModWludDMyX3QgY2x1c3Rlcilcbi0tXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy0zOTctXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYzozOTg6XHRvcHBzID0ga3phbGxvY19vYmpzKCpvcHBzLCBNQVhfT1BQUyk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy0zOTktXHRpZiAoIW9wcHMpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9NDQyPWludCBfX2luaXQgdmVfc3BjX2luaXQodm9pZCBfX2lvbWVtICpiYXNlYWRkciwgdTMyIGExNV9jbHVzaWQsIGludCBpcnEpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNDQ0LVx0aW50IHJldDtcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jOjQ0NTpcdGluZm8gPSBremFsbG9jX29iaigqaW5mbyk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy00NDYtXHRpZiAoIWluZm8pXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9NTIzPXN0YXRpYyBzdHJ1Y3QgY2xrICp2ZV9zcGNfY2xrX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmNwdV9kZXYpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNTI3LVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM6NTI4Olx0c3BjID0ga3phbGxvY19vYmooKnNwYyk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy01MjktXHRpZiAoIXNwYylcbi0tXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYz0xMjM9c3RhdGljIHZvaWQgX19pbml0IHZlcnNhdGlsZV9kdF9wY2lfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jLTE0NC1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jOjE0NTpcdG5ld3Byb3AgPSBremFsbG9jX29iaigqbmV3cHJvcCk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYy0xNDYtXHRpZiAoIW5ld3Byb3ApXG4tLVxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jPTEwNT1zdGF0aWMgdm9pZCBfX2luaXQgenlucV9pbml0X21hY2hpbmUodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmMtMTEwLVxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jOjExMTpcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jLTExMi1cdGlmICghc29jX2Rldl9hdHRyKVxuLS1cbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmM9NTAzPXN0YXRpYyBfX2luaXQgaW50IGwyeDBfcG11X2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jLTUwOS1cbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmM6NTEwOlx0bDJ4MF9wbXUgPSBremFsbG9jX29iaigqbDJ4MF9wbXUpO1xuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYy01MTEtXHRpZiAoIWwyeDBfcG11KSB7XG4tLVxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYz0zMTU9c3RhdGljIGludCBfX2luaXQgX191bmlwaGllcl9jYWNoZV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4tLVxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYy0zNDQtXG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jOjM0NTpcdGRhdGEgPSBremFsbG9jX29iaigqZGF0YSk7XG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jLTM0Ni1cdGlmICghZGF0YSlcbi0tXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jPTUzMz1zdGF0aWMgdm9pZCAqX19kbWFfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqaGFuZGxlLFxuLS1cbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtNTYwLVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYzo1NjE6XHRidWYgPSBremFsbG9jX29iaigqYnVmLFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy01NjItXHRcdFx0ICBnZnAgXHUwMDI2IH4oX19HRlBfRE1BIHwgX19HRlBfRE1BMzIgfCBfX0dGUF9ISUdITUVNKSk7XG4tLVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYz0xNDg3PWFybV9pb21tdV9jcmVhdGVfbWFwcGluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYmFzZSwgdTY0IHNpemUpXG4tLVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy0xNTA2LVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYzoxNTA3Olx0bWFwcGluZyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkbWFfaW9tbXVfbWFwcGluZyk7XG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTE1MDgtXHRpZiAoIW1hcHBpbmcpXG4tLVxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jPTMxNj1pbnQgX19pbml0IGFyY2hfeGVuX3VucG9wdWxhdGVkX2luaXQoc3RydWN0IHJlc291cmNlICoqcmVzKVxuLS1cbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zNDMtXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmM6MzQ0Olx0cmVncyA9IGt6YWxsb2Nfb2JqcygqcmVncywgbnJfcmVnKTtcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zNDUtXHRpZiAoIXJlZ3MpIHtcbi0tXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzg3LVxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jOjM4ODpcdFx0dG1wX3JlcyA9IGt6YWxsb2Nfb2JqKCp0bXBfcmVzKTtcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zODktXHRcdGlmICghdG1wX3Jlcykge1xuLS1cbmFyY2gvYXJtL3hlbi9wMm0uYz0xNTA9Ym9vbCBfX3NldF9waHlzX3RvX21hY2hpbmVfbXVsdGkodW5zaWduZWQgbG9uZyBwZm4sXG4tLVxuYXJjaC9hcm0veGVuL3AybS5jLTE3OC1cbmFyY2gvYXJtL3hlbi9wMm0uYzoxNzk6XHRwMm1fZW50cnkgPSBremFsbG9jX29iaigqcDJtX2VudHJ5LCBHRlBfTk9XQUlUKTtcbmFyY2gvYXJtL3hlbi9wMm0uYy0xODAtXHRpZiAoIXAybV9lbnRyeSlcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmM9Njg9c3RhdGljIGludCBfX2luaXQgX192ZHNvX2luaXQoZW51bSB2ZHNvX2FiaSBhYmkpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jLTgzLVxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jOjg0Olx0dmRzb19wYWdlbGlzdCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX2luZm9bYWJpXS52ZHNvX3BhZ2VzKTtcbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYy04NS1cdGlmICh2ZHNvX3BhZ2VsaXN0ID09IE5VTEwpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmM9NDgwPXN0YXRpYyBpbnQgc2hhcmVfcGZuX2h5cCh1NjQgcGZuKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTQ5Mi1cbmFyY2gvYXJtNjQva3ZtL21tdS5jOjQ5MzpcdHRoaXMgPSBremFsbG9jX29iaigqdGhpcyk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYy00OTQtXHRpZiAoIXRoaXMpIHtcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz05ODE9aW50IGt2bV9pbml0X3N0YWdlMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1bnNpZ25lZCBsb25nIHR5cGUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTAwNy1cbmFyY2gvYXJtNjQva3ZtL21tdS5jOjEwMDg6XHRwZ3QgPSBremFsbG9jX29iaigqcGd0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMTAwOS1cdGlmICghcGd0KVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jPTExODA9aW50IHRvcHVwX2h5cF9tZW1jYWNoZShzdHJ1Y3Qga3ZtX2h5cF9tZW1jYWNoZSAqbWMsIHVuc2lnbmVkIGxvbmcgbWluX3BhZ2VzKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExODUtXHRpZiAoIW1jLVx1MDAzZW1hcHBpbmcpIHtcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjExODY6XHRcdG1jLVx1MDAzZW1hcHBpbmcgPSBremFsbG9jX29iaihzdHJ1Y3QgcGt2bV9tYXBwaW5nLFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTE4Ny1cdFx0XHRcdFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jPTI1MTA9aW50IF9faW5pdCBrdm1fbW11X2luaXQodTMyIGh5cF92YV9iaXRzKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI1NDMtXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoyNTQ0Olx0aHlwX3BndGFibGUgPSBremFsbG9jX29iaigqaHlwX3BndGFibGUpO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMjU0NS1cdGlmICghaHlwX3BndGFibGUpIHtcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xMzI4PWludCBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTMzMy1cdGlmICghdmNwdS1cdTAwM2VhcmNoLnZuY3JfdGxiKSB7XG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxMzM0Olx0XHRzdHJ1Y3Qgdm5jcl90bGIgKnZ0ID0ga3phbGxvY19vYmooKnZjcHUtXHUwMDNlYXJjaC52bmNyX3RsYixcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzMzUtXHRcdFx0XHRcdFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE3OTM9aW50IGt2bV9pbml0X252X3N5c3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE4MDItXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxODAzOlx0a3ZtLVx1MDAzZWFyY2guc3lzcmVnX21hc2tzID0ga3phbGxvY19vYmooKihrdm0tXHUwMDNlYXJjaC5zeXNyZWdfbWFza3MpLFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTgwNC1cdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jPTExNj1zdGF0aWMgc3RydWN0IGt2bV9wdGR1bXBfZ3Vlc3Rfc3RhdGUgKmt2bV9wdGR1bXBfcGFyc2VyX2NyZWF0ZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11KVxuLS1cbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jLTEyMS1cbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jOjEyMjpcdHN0ID0ga3phbGxvY19vYmooc3RydWN0IGt2bV9wdGR1bXBfZ3Vlc3Rfc3RhdGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYy0xMjMtXHRpZiAoIXN0KVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9MjA3PXN0YXRpYyBpbnQga3ZtX3ZnaWNfZGlzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IG5yX3NwaXMpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0yMTMtXHRkaXN0LVx1MDAzZWFjdGl2ZV9zcGlzID0gKGF0b21pY190KUFUT01JQ19JTklUKDApO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzoyMTQ6XHRkaXN0LVx1MDAzZXNwaXMgPSBremFsbG9jX29ianMoc3RydWN0IHZnaWNfaXJxLCBucl9zcGlzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0yMTUtXHRpZiAoIWRpc3QtXHUwMDNlc3Bpcylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jPTMxNj1zdGF0aWMgaW50IHZnaWNfYWxsb2NhdGVfcHJpdmF0ZV9pcnFzX2xvY2tlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB0eXBlKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMzMxLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzozMzI6XHR2Z2ljX2NwdS1cdTAwM2Vwcml2YXRlX2lycXMgPSBremFsbG9jX29ianMoc3RydWN0IHZnaWNfaXJxLFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0zMzMtXHRcdFx0XHRcdCAgICAgIG51bV9wcml2YXRlX2lycXMsXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmM9MTQyPWludCBrdm1fdmdpY19zZXR1cF9kZWZhdWx0X2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYy0xNDgtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYzoxNDk6XHRlbnRyaWVzID0ga3phbGxvY19vYmpzKCplbnRyaWVzLCBuciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jLTE1MC1cdGlmICghZW50cmllcylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9NzY9c3RhdGljIHN0cnVjdCB2Z2ljX2lycSAqdmdpY19hZGRfbHBpKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGludGlkLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy04Ny1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzo4ODpcdGlycSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB2Z2ljX2lycSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy04OS1cdGlmICghaXJxKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz05NzE9c3RhdGljIGludCB2Z2ljX2l0c19hbGxvY19jb2xsZWN0aW9uKHN0cnVjdCB2Z2ljX2l0cyAqaXRzLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy05NzYtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6OTc3Olx0Y29sbGVjdGlvbiA9IGt6YWxsb2Nfb2JqKCpjb2xsZWN0aW9uLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTk3OC1cdGlmICghY29sbGVjdGlvbilcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTAxNT1zdGF0aWMgc3RydWN0IGl0c19pdGUgKnZnaWNfaXRzX2FsbG9jX2l0ZShzdHJ1Y3QgaXRzX2RldmljZSAqZGV2aWNlLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMDIwLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjEwMjE6XHRpdGUgPSBremFsbG9jX29iaigqaXRlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTEwMjItXHRpZiAoIWl0ZSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTE0Mj1zdGF0aWMgc3RydWN0IGl0c19kZXZpY2UgKnZnaWNfaXRzX2FsbG9jX2RldmljZShzdHJ1Y3QgdmdpY19pdHMgKml0cyxcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTE0Ny1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzoxMTQ4Olx0ZGV2aWNlID0ga3phbGxvY19vYmooKmRldmljZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMTQ5LVx0aWYgKCFkZXZpY2UpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTE4NTU9c3RhdGljIGludCB2Z2ljX2l0c19jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTE4NjItXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6MTg2MzpcdGl0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB2Z2ljX2l0cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xODY0LVx0aWYgKCFpdHMpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYz04ODY9c3RhdGljIGludCB2Z2ljX3YzX2FsbG9jX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCB1aW50MzJfdCBpbmRleCxcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTkzMS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM6OTMyOlx0cmRyZWcgPSBremFsbG9jX29iaigqcmRyZWcsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTkzMy1cdGlmICghcmRyZWcpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmM9MjQyPWludCB2Z2ljX3Y0X2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jLTI1OC1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jOjI1OTpcdGRpc3QtXHUwMDNlaXRzX3ZtLnZwZXMgPSBremFsbG9jX29ianMoKmRpc3QtXHUwMDNlaXRzX3ZtLnZwZXMsIG5yX3ZjcHVzLFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmMtMjYwLVx0XHRcdFx0XHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yMDgwPXN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjEwMS1cdGlmICghaml0X2RhdGEpIHtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjIxMDI6XHRcdGppdF9kYXRhID0ga3phbGxvY19vYmooKmppdF9kYXRhKTtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIxMDMtXHRcdGlmICghaml0X2RhdGEpXG4tLVxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmM9MTc9c3RhdGljIGludCBfX2luaXQgdmRzb19pbml0KHZvaWQpXG4tLVxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmMtMjItXHR2ZHNvX3BhZ2VsaXN0ID1cbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jOjIzOlx0XHRremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdmRzb19wYWdlcyk7XG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYy0yNC1cdGlmICh1bmxpa2VseSh2ZHNvX3BhZ2VsaXN0ID09IE5VTEwpKSB7XG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM9NDY2PXN0YXRpYyBpbnQgX19pbml0IGFkZF9sZWdhY3lfaXNhX2lvKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDcyLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM6NDczOlx0cmFuZ2UgPSBremFsbG9jX29iaigqcmFuZ2UsIEdGUF9BVE9NSUMpO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDc0LVx0aWYgKCFyYW5nZSlcbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jPTQ1PXN0YXRpYyBpbnQgX19pbml0IGluaXRfdmRzbyh2b2lkKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmMtNTUtXHR2ZHNvX2luZm8uY29kZV9tYXBwaW5nLnBhZ2VzID1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmM6NTY6XHRcdGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX2luZm8uc2l6ZSAvIFBBR0VfU0laRSk7XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jLTU3LVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYz02MTQ9c3RhdGljIGludCBrdm1fZWlvaW50Y19jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTYyNC1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYzo2MjU6XHRzID0ga3phbGxvY19vYmooc3RydWN0IGxvb25nYXJjaF9laW9pbnRjKTtcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy02MjYtXHRpZiAoIXMpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM9Mzk0PXN0YXRpYyBpbnQga3ZtX2lwaV9jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtNDExLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM6NDEyOlx0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb29uZ2FyY2hfaXBpKTtcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTQxMy1cdGlmICghcylcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTk5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUga3phbGxvY19vYmogTWFjcm8qKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgdGhpcyBga3phbGxvY19vYmpgIG1hY3JvLCBhbmQgaXQmIzM5O3MgcmluZ2luZyBhIGJlbGwuIEl0IHNlZW1zIGxpa2Ugc29tZXRoaW5nIGZhaXJseSByZWNlbnQsIG1heWJlIGEgbmV3IGFkZGl0aW9uIHRvIHRoZSBrZXJuZWwsIG9yIHBvdGVudGlhbGx5IGEgc2lkZSBlZmZlY3Qgb2Ygc29tZSBzeXprYWxsZXIgd29yayBJJiMzOTt2ZSBzZWVuLiBObywgd2FpdCwgY2hlY2tpbmcgYERvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3RgIGFuZCBgRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0YCBzaG93cyBpdCYjMzk7cyBhIGRpcmVjdCByZXBsYWNlbWVudCBmb3IgdXNpbmcgYGt6YWxsb2Moc2l6ZW9mKCpwdHIpLCAuLi4pYC4gSW50ZXJlc3RpbmcuIEkmIzM5O20gbm90aW5nIGEgY2hhbmdlIGluIGEgcGF0Y2ggdGhhdCYjMzk7cyBzdWJzdGl0dXRpbmcgYGt6YWxsb2Nfb2JqKCp0bXBsKWAgd2l0aCBga3phbGxvY19vYmooKnRtcGwsIEdGUF9LRVJORUxfQUNDT1VOVClgLiBUaGF0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgYWRkaW5nIGEgc2Vjb25kIGFyZ3VtZW50LiBXYWl0LCBub3cgSSYjMzk7bSBzZWNvbmQtZ3Vlc3NpbmcgbXlzZWxmLiBEb2VzIGBremFsbG9jX29iamAgYWN0dWFsbHkgdGFrZSBvbmUgb3IgdHdvIGFyZ3VtZW50cz8gSSBiZXR0ZXIgY2hlY2sgdGhlIGRlZmluaXRpb24gdG8gYmUgc3VyZS4gVGltZSB0byBoZWFkIG92ZXIgdG8gYGluY2x1ZGUvbGludXgvc2xhYi5oYCBhbmQgdGFrZSBhIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTQ6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBremFsbG9jX29iaiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NsYWIuaD0xMDcwPXZvaWQgKmttYWxsb2Nfbm9sb2NrKHNpemVfdCBzaXplLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBub2RlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTUxLS8qIEFsbCBremFsbG9jIGFsaWFzZXMgZm9yIGttYWxsb2NfKG9ianxvYmpzfGZsZXgpLiAqL1xuaW5jbHVkZS9saW51eC9zbGFiLmg6MTE1MjojZGVmaW5lIGt6YWxsb2Nfb2JqKFAsIC4uLikgXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNTMtXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIDEpXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTU0OiNkZWZpbmUga3phbGxvY19vYmpzKFAsIENPVU5ULCAuLi4pIFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTU1LVx0X19hbGxvY19vYmpzKGt6YWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCBDT1VOVClcbi0tXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaD0yMDA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaGVhZl9zaXplKHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcbi0tXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMTAtXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaDoyMTE6I2RlZmluZSBremFsbG9jX29iaihQLCAuLi4pIFxcXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMTItXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIDEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTQ6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI5MDYKCQkJCQkJCW91dHB1dDogODIKCQkJCQkJCXRob3VnaHRzOiAxODM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBOZXRmaWx0ZXIgTWVtb3J5IEFjY291bnRpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCB5ZWFoLCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgcHJpbWFyeSB0aGluZyBoYXBwZW5pbmcgaGVyZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGBHRlBfS0VSTkVMX0FDQ09VTlRgIGFjcm9zcyBhIGJ1bmNoIG9mIG1lbW9yeSBhbGxvY2F0aW9ucyB3aXRoaW4gbmV0ZmlsdGVyLCByZXBsYWNpbmcgdGhlIG1vcmUgZ2VuZXJpYyBgR0ZQX0tFUk5FTGAgb3IgYEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk5gLiAgYGt6YWxsb2Nfb2JqYCB0YWtlcyBgUGAgYW5kIG9wdGlvbmFsIGBfX1ZBX0FSR1NfX2AgZm9yIEdGUCBmbGFncy4KCk15IGluaXRpYWwgdGhvdWdodCBpcywgZG9lcyB0aGlzIGFmZmVjdCB0aGUgYWN0dWFsICpmdW5jdGlvbmFsaXR5Kj8gIE5vLCBtZW1vcnkgYWNjb3VudGluZyBmdW5kYW1lbnRhbGx5IGRvZXNuJiMzOTt0IGNoYW5nZSB0aGUgZXhlY3V0aW9uIGZsb3cuICBJdCYjMzk7cyBhYm91dCB0cmFja2luZyB3aGVyZSB0aGUgbWVtb3J5IGlzIGdvaW5nLCBub3QgaG93IHRoZSBjb2RlIGFjdHVhbGx5ICp3b3JrcyosIGFzaWRlIGZyb20gcG90ZW50aWFsbHkgdHJpZ2dlcmluZyBPT00gY29uZGl0aW9ucyBvciBjZ3JvdXAgbGltaXRzIGlmIHRoZXkgYXJlIGV4Y2VlZGVkLgoKVGhlIHR5cGljYWwgcmVhc29uIHRvIGFkZCB0aGlzIGtpbmQgb2YgYWNjb3VudGluZyBpcyBzZWN1cml0eSBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudDogcHJldmVudGluZyB1bnByaXZpbGVnZWQgdXNlcnMgZnJvbSBob2dnaW5nIG1lbW9yeSBhbmQgbWFraW5nIHN1cmUgdXNhZ2UgaXMgdHJhY2tlZCBhZ2FpbnN0IGNncm91cHMuICBCdXQgZG9lcyBpdCAqaW50cm9kdWNlKiBhbnkgbmV3IGxvZ2ljPyBOb3BlLCBpdCYjMzk7cyBqdXN0IGEgR0ZQIGZsYWcgY2hhbmdlLiBMZXQmIzM5O3MgbWFrZSBzdXJlLCB0aG91Z2gsIGFuZCBsb29rIGF0IHRoZSBhY3R1YWwgY29kZSBjaGFuZ2VzLiBJJiMzOTttIHNjYW5uaW5nIHRocm91Z2ggdGhlIGRpZmYuCgpZZXMsIEkmIzM5O20gc2VlaW5nIGEgcGF0dGVybiwgZXZlcnl3aGVyZS4gRXZlcnkgaW5zdGFuY2Ugb2YgYEdGUF9LRVJORUxgIGlzIGJlaW5nIHJlcGxhY2VkIHdpdGggYEdGUF9LRVJORUxfQUNDT1VOVGAuIEV2ZW4gd2hlcmUgYEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk5gIGlzIHNwZWNpZmllZCwgaXQgaXMgYmVpbmcgY29udmVydGVkIHRvIGBHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9OT1dBUk5gLiAgVGhlcmUgYXJlIG5vIG90aGVyIGNvZGUgY2hhbmdlcy4gIFRoZSBmdW5jdGlvbmFsIGJlaGF2aW9yIG9mIHRoZSBuZXRmaWx0ZXIgY29tcG9uZW50cyByZW1haW5zIHRoZSBzYW1lLiBUaGUgc2FtZSBvYmplY3RzIGFyZSBhbGxvY2F0ZWQgYW5kIHRoZSBzYW1lIGNvZGUgaXMgdXNlZCB0byByZWFkLCBtYW5pcHVsYXRlIGFuZCBtYW5hZ2UgdGhvc2Ugb2JqZWN0cy4KCkdpdmVuIHRoZSBwcm9tcHQsIGxldCYjMzk7cyBzZWUsIHNob3VsZCBJIGZ1enogaXQ/IFNpbmNlIHRoaXMgaXMgYSBwdXJlbHkgbWVjaGFuaWNhbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzLCBpdCBpcyB2ZXJ5IHVubGlrZWx5IHRvIGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcyB0aGF0IGZ1enppbmcgY291bGQgZmluZC4gSSYjMzk7bSBtYWtpbmcgYSBjaGFuZ2UgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4gSW4gdGhpcyBjYXNlLCBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuCgpJIGFtIG1ha2luZyBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjaGFuZ2VzIGluIHRoZSBwYXRjaC4gSSYjMzk7bSByZXZpZXdpbmcgdGhlIHByb3ZpZGVkIGRpZmZzIGFnYWluIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gbG9naWMgY2hhbmdlcyBoaWRkZW4uCgpPa2F5LCBJJiMzOTt2ZSBjaGVja2VkLiBUaGlzIGlzIGV4Y2x1c2l2ZWx5IGEgY2hhbmdlIHRvIHRoZSBHRlAgZmxhZ3MuICBJdCYjMzk7cyBub3Qgd29ydGggZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNDo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgY2hhbmdlcyBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyB0byBpbmNsdWRlIEdGUF9LRVJORUxfQUNDT1VOVCBhY3Jvc3MgdmFyaW91cyBuZXRmaWx0ZXIgbW9kdWxlcy4gVGhpcyBpcyBhIG1lY2hhbmljYWwgY2hhbmdlIGZvciBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgYW5kIGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbC4gVGhlcmVmb3JlLCBpdCBpcyBub3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgY2hhbmdlcyBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyB0byBpbmNsdWRlIEdGUF9LRVJORUxfQUNDT1VOVCBhY3Jvc3MgdmFyaW91cyBuZXRmaWx0ZXIgbW9kdWxlcy4gVGhpcyBpcyBhIG1lY2hhbmljYWwgY2hhbmdlIGZvciBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgYW5kIGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbC4gVGhlcmVmb3JlLCBpdCBpcyBub3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTQ6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE0OjU2OjIwLjM5ODIwOTc5OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MTY5ODY4MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBjaGFuZ2VzIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIHRvIGluY2x1ZGUgR0ZQX0tFUk5FTF9BQ0NPVU5UIGFjcm9zcyB2YXJpb3VzIG5ldGZpbHRlciBtb2R1bGVzLiBUaGlzIGlzIGEgbWVjaGFuaWNhbCBjaGFuZ2UgZm9yIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBhbmQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLiBUaGVyZWZvcmUsIGl0IGlzIG5vdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTQ6NTY6MjAuMzk4MjE1OTA5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU3Mzg1MDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZmNmN2Y5M2FjMWY1MmNhY2VlYzlhYWMzMjAyZWEzOTA4NmJjZjRjZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxNDo1NjoxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuY1xcbmluZGV4IDBiZjU0MTkzNmY2MDEuLjY0YjhmNmY5ODIxMTkgMTAwNjQ0XFxuLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuY1xcbisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmNcXG5AQCAtMTMwNCw3ICsxMzA0LDcgQEAgaW50IGVidF9yZWdpc3Rlcl90ZW1wbGF0ZShjb25zdCBzdHJ1Y3QgZWJ0X3RhYmxlICp0LCBpbnQgKCp0YWJsZV9pbml0KShzdHJ1Y3QgbmVcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHR0bXBsID0ga3phbGxvY19vYmooKnRtcGwpO1xcbitcXHR0bXBsID0ga3phbGxvY19vYmooKnRtcGwsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICghdG1wbCkge1xcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmVidF9tdXRleCk7XFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jXFxuaW5kZXggYWM3ZmViY2UwNzRmMS4uZTE1MmNmMzVkODU5NiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jXFxuQEAgLTIxNyw3ICsyMTcsNyBAQCBpbml0X21hcF9pcChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBiaXRtYXBfaXAgKm1hcCxcXG4gXFx0ICAgIHUzMiBmaXJzdF9pcCwgdTMyIGxhc3RfaXAsXFxuIFxcdCAgICB1MzIgZWxlbWVudHMsIHUzMiBob3N0cywgdTggbmV0bWFzaylcXG4ge1xcbi1cXHRtYXAtXFx1MDAzZW1lbWJlcnMgPSBiaXRtYXBfemFsbG9jKGVsZW1lbnRzLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcXG4rXFx0bWFwLVxcdTAwM2VtZW1iZXJzID0gYml0bWFwX3phbGxvYyhlbGVtZW50cywgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKTtcXG4gXFx0aWYgKCFtYXAtXFx1MDAzZW1lbWJlcnMpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0bWFwLVxcdTAwM2VmaXJzdF9pcCA9IGZpcnN0X2lwO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jXFxuaW5kZXggNTkyMWZkOWQyZGNhMC4uYTExNzkzNTIyMjBhNCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jXFxuQEAgLTMwMCw3ICszMDAsNyBAQCBzdGF0aWMgYm9vbFxcbiBpbml0X21hcF9pcG1hYyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBiaXRtYXBfaXBtYWMgKm1hcCxcXG4gXFx0ICAgICAgIHUzMiBmaXJzdF9pcCwgdTMyIGxhc3RfaXAsIHUzMiBlbGVtZW50cylcXG4ge1xcbi1cXHRtYXAtXFx1MDAzZW1lbWJlcnMgPSBiaXRtYXBfemFsbG9jKGVsZW1lbnRzLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcXG4rXFx0bWFwLVxcdTAwM2VtZW1iZXJzID0gYml0bWFwX3phbGxvYyhlbGVtZW50cywgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKTtcXG4gXFx0aWYgKCFtYXAtXFx1MDAzZW1lbWJlcnMpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0bWFwLVxcdTAwM2VmaXJzdF9pcCA9IGZpcnN0X2lwO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuY1xcbmluZGV4IGNhODc1Yzk4MjQyNDUuLjBhMDAyN2NkYjE5MzcgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmNcXG5AQCAtMjMxLDcgKzIzMSw3IEBAIHN0YXRpYyBib29sXFxuIGluaXRfbWFwX3BvcnQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgYml0bWFwX3BvcnQgKm1hcCxcXG4gXFx0ICAgICAgdTE2IGZpcnN0X3BvcnQsIHUxNiBsYXN0X3BvcnQpXFxuIHtcXG4tXFx0bWFwLVxcdTAwM2VtZW1iZXJzID0gYml0bWFwX3phbGxvYyhtYXAtXFx1MDAzZWVsZW1lbnRzLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcXG4rXFx0bWFwLVxcdTAwM2VtZW1iZXJzID0gYml0bWFwX3phbGxvYyhtYXAtXFx1MDAzZWVsZW1lbnRzLCBHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9OT1dBUk4pO1xcbiBcXHRpZiAoIW1hcC1cXHUwMDNlbWVtYmVycylcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHRtYXAtXFx1MDAzZWZpcnN0X3BvcnQgPSBmaXJzdF9wb3J0O1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcXG5pbmRleCAwYTg2YTE3MGJhOTA2Li4yOGFjOGNiYTNkNjhjIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1xcbkBAIC0xMDg1LDcgKzEwODUsNyBAQCBzdGF0aWMgaW50IGlwX3NldF9jcmVhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG4gXFx0LyogRmlyc3QsIGFuZCB3aXRob3V0IGFueSBsb2NrcywgYWxsb2NhdGUgYW5kIGluaXRpYWxpemVcXG4gXFx0ICogYSBub3JtYWwgYmFzZSBzZXQgc3RydWN0dXJlLlxcbiBcXHQgKi9cXG4tXFx0c2V0ID0ga3phbGxvY19vYmooKnNldCk7XFxuK1xcdHNldCA9IGt6YWxsb2Nfb2JqKCpzZXQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICghc2V0KVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnNldC1cXHUwMDNlbG9jayk7XFxuQEAgLTExNDMsNyArMTE0Myw3IEBAIHN0YXRpYyBpbnQgaXBfc2V0X2NyZWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbiBcXHRcXHRcXHQvKiBXcmFwYXJvdW5kICovXFxuIFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuLVxcdFxcdGxpc3QgPSBrdnphbGxvY19vYmpzKHN0cnVjdCBpcF9zZXQgKiwgaSk7XFxuK1xcdFxcdGxpc3QgPSBrdnphbGxvY19vYmpzKHN0cnVjdCBpcF9zZXQgKiwgaSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0XFx0aWYgKCFsaXN0KVxcbiBcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcdFxcdC8qIG5mbmwgbXV0ZXggaXMgaGVsZCwgYm90aCBsaXN0cyBhcmUgdmFsaWQgKi9cXG5AQCAtMjM5Nyw3ICsyMzk3LDggQEAgaXBfc2V0X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4gXFx0aWYgKGluc3QtXFx1MDAzZWlwX3NldF9tYXggXFx1MDAzZT0gSVBTRVRfSU5WQUxJRF9JRClcXG4gXFx0XFx0aW5zdC1cXHUwMDNlaXBfc2V0X21heCA9IElQU0VUX0lOVkFMSURfSUQgLSAxO1xcbiBcXG4tXFx0bGlzdCA9IGt2emFsbG9jX29ianMoc3RydWN0IGlwX3NldCAqLCBpbnN0LVxcdTAwM2VpcF9zZXRfbWF4KTtcXG4rXFx0bGlzdCA9IGt2emFsbG9jX29ianMoc3RydWN0IGlwX3NldCAqLCBpbnN0LVxcdTAwM2VpcF9zZXRfbWF4LFxcbitcXHRcXHRcXHQgICAgIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICghbGlzdClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdGluc3QtXFx1MDAzZWlzX2RlbGV0ZWQgPSBmYWxzZTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcXG5pbmRleCA4MGNhNTIzZjMwNGJiLi4zOWRlYzkyODUwNTJhIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXFxuQEAgLTc2OCw3ICs3NjgsNyBAQCBtdHlwZV9yZXNpemUoc3RydWN0IGlwX3NldCAqc2V0LCBib29sIHJldHJpZWQpXFxuIFxcdGludCByZXQ7XFxuIFxcbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuLVxcdHRtcCA9IGttYWxsb2MoZHNpemUsIEdGUF9LRVJORUwpO1xcbitcXHR0bXAgPSBrbWFsbG9jKGRzaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIXRtcClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuICNlbmRpZlxcbkBAIC0xNzU0LDcgKzE3NTQsNyBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXFxuIFxcdFxcdHNpemVvZihzdHJ1Y3QgSVBTRVRfVE9LRU4oSFRZUEUsIDYpKSA6XFxuIFxcdFxcdHNpemVvZihzdHJ1Y3QgSVBTRVRfVE9LRU4oSFRZUEUsIDQpKTtcXG4gI2VuZGlmXFxuLVxcdGggPSBremFsbG9jKGhzaXplLCBHRlBfS0VSTkVMKTtcXG4rXFx0aCA9IGt6YWxsb2MoaHNpemUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICghaClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC0xNzc0LDcgKzE3NzQsNyBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXFxuIFxcdFxcdGdvdG8gZnJlZV90O1xcbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkrKykge1xcbi1cXHRcXHRuZXRzID0ga3phbGxvY19vYmooKm5ldHMpO1xcbitcXHRcXHRuZXRzID0ga3phbGxvY19vYmooKm5ldHMsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdFxcdGlmICghbmV0cykge1xcbiBcXHRcXHRcXHR3aGlsZSAoaSBcXHUwMDNlIDApXFxuIFxcdFxcdFxcdFxcdGtmcmVlKHJjdV9kZXJlZmVyZW5jZV9yYXcoaC1cXHUwMDNlcm5ldHNbLS1pXSkpO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1xcbmluZGV4IGYwNzAwODg3NDJkNjAuLjc1MGZlMzgyNjFjMzcgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNcXG5AQCAtNjAwLDcgKzYwMCw3IEBAIGluaXRfbGlzdF9zZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsIHUzMiBzaXplKVxcbiB7XFxuIFxcdHN0cnVjdCBsaXN0X3NldCAqbWFwO1xcbiBcXG4tXFx0bWFwID0ga3phbGxvY19vYmooKm1hcCk7XFxuK1xcdG1hcCA9IGt6YWxsb2Nfb2JqKCptYXAsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICghbWFwKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuY1xcbmluZGV4IDg1NDg3ZjkyYWY1MDYuLmIwOWMxNzZhNTIxZDEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmNcXG5AQCAtNjkxLDcgKzY5MSw3IEBAIHN0cnVjdCBuZl9jb25uY291bnRfZGF0YSAqbmZfY29ubmNvdW50X2luaXQoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQga2V5bGVuXFxuIFxcdCAgICBrZXlsZW4gPT0gMClcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuIFxcbi1cXHRkYXRhID0ga3Z6YWxsb2Nfb2JqKCpkYXRhKTtcXG4rXFx0ZGF0YSA9IGt2emFsbG9jX29iaigqZGF0YSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKCFkYXRhKVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmNcXG5pbmRleCBiNDA4NWFmM2FkMWNlLi5mZTUyNWIzMjRhZjQxIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmNcXG5AQCAtOTMsNyArOTMsNyBAQCBpbnQgbmZfY3RfYWRkX2hlbHBlcihzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IGNoYXIgKm5hbWUsIHU4IGZhbWlseSxcXG4gXFx0aWYgKCFoZWxwZXIpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0aGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfS0VSTkVMKTtcXG4rXFx0aGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIWhlbHApIHtcXG4gXFx0XFx0bmZfY29ubnRyYWNrX2hlbHBlcl9wdXQoaGVscGVyKTtcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY1xcbmluZGV4IGY0ZjJkODIxOTJkNTQuLmQ4OGExMDIzMDg2MmUgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXFxuQEAgLTEwMDksNyArMTAwOSw3IEBAIHN0YXRpYyBpbnQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0KVxcbiBcXHRCVUlMRF9CVUdfT04oQVJSQVlfU0laRShuZl9jdF9zeXNjdGxfdGFibGUpICE9IE5GX1NZU0NUTF9DVF9MQVNUX1NZU0NUTCk7XFxuIFxcbiBcXHR0YWJsZSA9IGttZW1kdXAobmZfY3Rfc3lzY3RsX3RhYmxlLCBzaXplb2YobmZfY3Rfc3lzY3RsX3RhYmxlKSxcXG4tXFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuK1xcdFxcdFxcdEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICghdGFibGUpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9ob29rc19sd3R1bm5lbC5jIGIvbmV0L25ldGZpbHRlci9uZl9ob29rc19sd3R1bm5lbC5jXFxuaW5kZXggNGUxZWVmMWJhMGYxNS4uNDBjNmZjZTE0YTYzZiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmNcXG5AQCAtNzMsNyArNzMsNyBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgbmZfbHd0dW5uZWxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbiBcXHRpZiAoIW5ldF9lcShuZXQsIFxcdTAwMjZpbml0X25ldCkpIHtcXG4gXFx0XFx0dGFibGUgPSBrbWVtZHVwKG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZSxcXG4gXFx0XFx0XFx0XFx0c2l6ZW9mKG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZSksXFxuLVxcdFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbitcXHRcXHRcXHRcXHRHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRcXHRpZiAoIXRhYmxlKVxcbiBcXHRcXHRcXHRnb3RvIGVycl9hbGxvYztcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jIGIvbmV0L25ldGZpbHRlci9uZl9sb2cuY1xcbmluZGV4IGY0ZDgwNjU0ZGZlNmEuLmYxZDM2NDllM2ZjNjIgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9sb2cuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmNcXG5AQCAtNDkzLDcgKzQ5Myw3IEBAIHN0YXRpYyBpbnQgbmV0ZmlsdGVyX2xvZ19zeXNjdGxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuIFxcdGlmICghbmV0X2VxKG5ldCwgXFx1MDAyNmluaXRfbmV0KSkge1xcbiBcXHRcXHR0YWJsZSA9IGttZW1kdXAobmZfbG9nX3N5c2N0bF90YWJsZSxcXG4gXFx0XFx0XFx0XFx0IHNpemVvZihuZl9sb2dfc3lzY3RsX3RhYmxlKSxcXG4tXFx0XFx0XFx0XFx0IEdGUF9LRVJORUwpO1xcbitcXHRcXHRcXHRcXHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0XFx0aWYgKCF0YWJsZSlcXG4gXFx0XFx0XFx0Z290byBlcnJfYWxsb2M7XFxuIFxcdH0gZWxzZSB7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xcbmluZGV4IDhhYzMyNmUxZWI1YmEuLjA5Y2M1YjhmZDZhZjEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXFxuQEAgLTEyMDQsMTQgKzEyMDQsMTUgQEAgaW50IG5mX25hdF9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcXG4gXFx0aWYgKCFuYXRfcHJvdG9fbmV0LVxcdTAwM2VuYXRfaG9va19vcHMpIHtcXG4gXFx0XFx0V0FSTl9PTihuYXRfcHJvdG9fbmV0LVxcdTAwM2V1c2VycyAhPSAwKTtcXG4gXFxuLVxcdFxcdG5hdF9vcHMgPSBrbWVtZHVwX2FycmF5KG9yaWdfbmF0X29wcywgb3BzX2NvdW50LCBzaXplb2YoKm9yaWdfbmF0X29wcyksIEdGUF9LRVJORUwpO1xcbitcXHRcXHRuYXRfb3BzID0ga21lbWR1cF9hcnJheShvcmlnX25hdF9vcHMsIG9wc19jb3VudCwgc2l6ZW9mKCpvcmlnX25hdF9vcHMpLFxcbitcXHRcXHRcXHRcXHRcXHRHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRcXHRpZiAoIW5hdF9vcHMpIHtcXG4gXFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuZl9uYXRfcHJvdG9fbXV0ZXgpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG9wc19jb3VudDsgaSsrKSB7XFxuLVxcdFxcdFxcdHByaXYgPSBremFsbG9jX29iaigqcHJpdik7XFxuK1xcdFxcdFxcdHByaXYgPSBremFsbG9jX29iaigqcHJpdiwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0XFx0XFx0aWYgKHByaXYpIHtcXG4gXFx0XFx0XFx0XFx0bmF0X29wc1tpXS5wcml2ID0gcHJpdjtcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfc3lucHJveHlfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmNcXG5pbmRleCBhY2QzNjA1MTU5NzJmLi45ZmM5NTliYTIwMzAwIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfc3lucHJveHlfY29yZS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmNcXG5AQCAtMzM2LDcgKzMzNiw3IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBzeW5wcm94eV9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuIFxcdHN0cnVjdCBuZl9jb25uICpjdDtcXG4gXFx0aW50IGVyciA9IC1FTk9NRU07XFxuIFxcbi1cXHRjdCA9IG5mX2N0X3RtcGxfYWxsb2MobmV0LCBcXHUwMDI2bmZfY3Rfem9uZV9kZmx0LCBHRlBfS0VSTkVMKTtcXG4rXFx0Y3QgPSBuZl9jdF90bXBsX2FsbG9jKG5ldCwgXFx1MDAyNm5mX2N0X3pvbmVfZGZsdCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKCFjdClcXG4gXFx0XFx0Z290byBlcnIxO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfYWNjdC5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfYWNjdC5jXFxuaW5kZXggOGZmMWUwYWQ1Y2IwZC4uMWEzNjZmYmQ4MTMzMiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19hY2N0LmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19hY2N0LmNcXG5AQCAtMTEyLDcgKzExMiw3IEBAIHN0YXRpYyBpbnQgbmZubF9hY2N0X25ldyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbiBcXHRcXHRzaXplICs9IHNpemVvZih1NjQpO1xcbiBcXHR9XFxuIFxcbi1cXHRuZmFjY3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmZfYWNjdCkgKyBzaXplLCBHRlBfS0VSTkVMKTtcXG4rXFx0bmZhY2N0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5mX2FjY3QpICsgc2l6ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKG5mYWNjdCA9PSBOVUxMKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jXFxuaW5kZXggNWI2YTA5ZjQ2OTAzZi4uYTA5YjJmZGJmOWI0ZSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuY1xcbkBAIC0zMzUsNyArMzM1LDggQEAgc3RhdGljIGludCBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfYWxsKHN0cnVjdCBubGF0dHIgKnRiW10sXFxuIFxcdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSAqcG9saWN5O1xcbiBcXHRpbnQgaSwgcmV0ID0gMDtcXG4gXFxuLVxcdG5ld19wb2xpY3kgPSBrbWFsbG9jX29ianMoKm5ld19wb2xpY3ksIGhlbHBlci1cXHUwMDNlZXhwZWN0X2NsYXNzX21heCArIDEpO1xcbitcXHRuZXdfcG9saWN5ID0ga21hbGxvY19vYmpzKCpuZXdfcG9saWN5LCBoZWxwZXItXFx1MDAzZWV4cGVjdF9jbGFzc19tYXggKyAxLFxcbitcXHRcXHRcXHRcXHQgIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICghbmV3X3BvbGljeSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0dGltZW91dC5jXFxuaW5kZXggNjZjMjAxNmY2MDQ5ZC4uNmI0YWRhYWY2MWFmMCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0dGltZW91dC5jXFxuQEAgLTcxLDcgKzcxLDggQEAgY3RubF90aW1lb3V0X3BhcnNlX3BvbGljeSh2b2lkICp0aW1lb3V0LFxcbiBcXHRzdHJ1Y3QgbmxhdHRyICoqdGI7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXG4tXFx0dGIgPSBremFsbG9jX29ianMoKnRiLCBsNHByb3RvLVxcdTAwM2VjdG5sX3RpbWVvdXQubmxhdHRyX21heCArIDEpO1xcbitcXHR0YiA9IGt6YWxsb2Nfb2JqcygqdGIsIGw0cHJvdG8tXFx1MDAzZWN0bmxfdGltZW91dC5ubGF0dHJfbWF4ICsgMSxcXG4rXFx0XFx0XFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXG4gXFx0aWYgKCF0YilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuQEAgLTE1MCwxNCArMTUxLDE1IEBAIHN0YXRpYyBpbnQgY3R0aW1lb3V0X25ld190aW1lb3V0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdGdvdG8gZXJyX3Byb3RvX3B1dDtcXG4gXFx0fVxcbiBcXG4tXFx0dGltZW91dCA9IGt6YWxsb2Moc2l6ZW9mKCp0aW1lb3V0KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdHRpbWVvdXQgPSBremFsbG9jKHNpemVvZigqdGltZW91dCksIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICh0aW1lb3V0ID09IE5VTEwpIHtcXG4gXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gXFx0XFx0Z290byBlcnJfcHJvdG9fcHV0O1xcbiBcXHR9XFxuIFxcbiBcXHR0aW1lb3V0LVxcdTAwM2V0aW1lb3V0ID0ga3phbGxvYyhzaXplb2YoKnRpbWVvdXQtXFx1MDAzZXRpbWVvdXQpICtcXG4tXFx0XFx0XFx0XFx0ICAgbDRwcm90by1cXHUwMDNlY3RubF90aW1lb3V0Lm9ial9zaXplLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0XFx0XFx0ICAgbDRwcm90by1cXHUwMDNlY3RubF90aW1lb3V0Lm9ial9zaXplLFxcbitcXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIXRpbWVvdXQtXFx1MDAzZXRpbWVvdXQpIHtcXG4gXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gXFx0XFx0Z290byBlcnI7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX29zZi5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfb3NmLmNcXG5pbmRleCA5MjAwMjA3OWY4ZWFiLi5lNDgzNWIwZjRiYjFhIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX29zZi5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfb3NmLmNcXG5AQCAtMzI1LDcgKzMyNSw3IEBAIHN0YXRpYyBpbnQgbmZubF9vc2ZfYWRkX2NhbGxiYWNrKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdCAgICAhbWVtY2hyKGYtXFx1MDAzZXZlcnNpb24sIDAsIE1BWEdFTlJFTEVOKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRrZiA9IGttYWxsb2Nfb2JqKHN0cnVjdCBuZl9vc2ZfZmluZ2VyKTtcXG4rXFx0a2YgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbmZfb3NmX2ZpbmdlciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKCFrZilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jIGIvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xcbmluZGV4IDlkYmYxMjdkZjljODEuLjg5NzYwODc0MzM2YzMgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNcXG5AQCAtMzY1LDcgKzM2NSw3IEBAIHN0YXRpYyBib29sIG5mdF9jdF90bXBsX2FsbG9jX3BjcHUodm9pZClcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuLVxcdFxcdHRtcCA9IG5mX2N0X3RtcGxfYWxsb2MoXFx1MDAyNmluaXRfbmV0LCBcXHUwMDI2em9uZSwgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdHRtcCA9IG5mX2N0X3RtcGxfYWxsb2MoXFx1MDAyNmluaXRfbmV0LCBcXHUwMDI2em9uZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0XFx0aWYgKCF0bXApIHtcXG4gXFx0XFx0XFx0bmZ0X2N0X3RtcGxfcHV0X3BjcHUoKTtcXG4gXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbkBAIC04NDgsNyArODQ4LDggQEAgbmZ0X2N0X3RpbWVvdXRfcGFyc2VfcG9saWN5KHZvaWQgKnRpbWVvdXRzLFxcbiBcXHRzdHJ1Y3QgbmxhdHRyICoqdGI7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXG4tXFx0dGIgPSBremFsbG9jX29ianMoKnRiLCBsNHByb3RvLVxcdTAwM2VjdG5sX3RpbWVvdXQubmxhdHRyX21heCArIDEpO1xcbitcXHR0YiA9IGt6YWxsb2Nfb2JqcygqdGIsIGw0cHJvdG8tXFx1MDAzZWN0bmxfdGltZW91dC5ubGF0dHJfbWF4ICsgMSxcXG4rXFx0XFx0XFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXG4gXFx0aWYgKCF0YilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuQEAgLTkzNCw3ICs5MzUsNyBAQCBzdGF0aWMgaW50IG5mdF9jdF90aW1lb3V0X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuIFxcdH1cXG4gXFxuIFxcdHRpbWVvdXQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmZfY3RfdGltZW91dCkgK1xcbi1cXHRcXHRcXHQgIGw0cHJvdG8tXFx1MDAzZWN0bmxfdGltZW91dC5vYmpfc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdFxcdCAgbDRwcm90by1cXHUwMDNlY3RubF90aW1lb3V0Lm9ial9zaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAodGltZW91dCA9PSBOVUxMKSB7XFxuIFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIFxcdFxcdGdvdG8gZXJyX3Byb3RvX3B1dDtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jIGIvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jXFxuaW5kZXggOTc4YmIwYzAxMTA2OC4uMzYxN2JiNjYwOTRkNCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmNcXG5AQCAtMjI5OCw3ICsyMjk4LDcgQEAgc3RhdGljIGludCBuZnRfcGlwYXBvX2luaXQoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4gXFx0aWYgKGZpZWxkX2NvdW50IFxcdTAwM2UgTkZUX1BJUEFQT19NQVhfRklFTERTKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdG0gPSBrbWFsbG9jX2ZsZXgoKm0sIGYsIGZpZWxkX2NvdW50KTtcXG4rXFx0bSA9IGttYWxsb2NfZmxleCgqbSwgZiwgZmllbGRfY291bnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICghbSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0NULmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0NULmNcXG5pbmRleCBlNzg2NjBkZmRmNGI2Li4yMDViYzZkZDk4MTI1IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfQ1QuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfQ1QuY1xcbkBAIC05MSw3ICs5MSw3IEBAIHh0X2N0X3NldF9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBjaGFyICpoZWxwZXJfbmFtZSxcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIFxcdH1cXG4gXFxuLVxcdGhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0tFUk5FTCk7XFxuK1xcdGhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKGhlbHAgPT0gTlVMTCkge1xcbiBcXHRcXHRuZl9jb25udHJhY2tfaGVscGVyX3B1dChoZWxwZXIpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5AQCAtMTgyLDcgKzE4Miw3IEBAIHN0YXRpYyBpbnQgeHRfY3RfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIsXFxuIFxcdGlmIChpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhUX0NUX1pPTkVfTUFSSylcXG4gXFx0XFx0em9uZS5mbGFncyB8PSBORl9DVF9GTEFHX01BUks7XFxuIFxcbi1cXHRjdCA9IG5mX2N0X3RtcGxfYWxsb2MocGFyLVxcdTAwM2VuZXQsIFxcdTAwMjZ6b25lLCBHRlBfS0VSTkVMKTtcXG4rXFx0Y3QgPSBuZl9jdF90bXBsX2FsbG9jKHBhci1cXHUwMDNlbmV0LCBcXHUwMDI2em9uZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKCFjdCkge1xcbiBcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiBcXHRcXHRnb3RvIGVycjI7XFxuQEAgLTE5MCw3ICsxOTAsNyBAQCBzdGF0aWMgaW50IHh0X2N0X3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyLFxcbiBcXG4gXFx0aWYgKChpbmZvLVxcdTAwM2VjdF9ldmVudHMgfHwgaW5mby1cXHUwMDNlZXhwX2V2ZW50cykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICFuZl9jdF9lY2FjaGVfZXh0X2FkZChjdCwgaW5mby1cXHUwMDNlY3RfZXZlbnRzLCBpbmZvLVxcdTAwM2VleHBfZXZlbnRzLFxcbi1cXHRcXHRcXHRcXHQgIEdGUF9LRVJORUwpKSB7XFxuK1xcdFxcdFxcdFxcdCAgR0ZQX0tFUk5FTF9BQ0NPVU5UKSkge1xcbiBcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiBcXHRcXHRnb3RvIGVycjM7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyBiL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcXG5pbmRleCBiZmNmMmQ0NGU5M2RiLi43OTZiMGQ0NjFjM2QwIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXFxuQEAgLTE1MCw3ICsxNTAsNyBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jcmVhdGUoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRpbmZvLVxcdTAwM2V0aW1lciA9IGt6YWxsb2Nfb2JqKCppbmZvLVxcdTAwM2V0aW1lcik7XFxuK1xcdGluZm8tXFx1MDAzZXRpbWVyID0ga3phbGxvY19vYmooKmluZm8tXFx1MDAzZXRpbWVyLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIWluZm8tXFx1MDAzZXRpbWVyKSB7XFxuIFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIFxcdFxcdGdvdG8gb3V0O1xcbkBAIC0xNjEsNyArMTYxLDcgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbylcXG4gXFx0XFx0Z290byBvdXRfZnJlZV90aW1lcjtcXG4gXFxuIFxcdHN5c2ZzX2F0dHJfaW5pdChcXHUwMDI2aW5mby1cXHUwMDNldGltZXItXFx1MDAzZWF0dHIuYXR0cik7XFxuLVxcdGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIubmFtZSA9IGtzdHJkdXAoaW5mby1cXHUwMDNlbGFiZWwsIEdGUF9LRVJORUwpO1xcbitcXHRpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyLm5hbWUgPSBrc3RyZHVwKGluZm8tXFx1MDAzZWxhYmVsLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIWluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIubmFtZSkge1xcbiBcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiBcXHRcXHRnb3RvIG91dF9mcmVlX3RpbWVyO1xcbkBAIC0xOTksNyArMTk5LDcgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlX3YxKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbylcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0aW5mby1cXHUwMDNldGltZXIgPSBrbWFsbG9jX29iaigqaW5mby1cXHUwMDNldGltZXIpO1xcbitcXHRpbmZvLVxcdTAwM2V0aW1lciA9IGttYWxsb2Nfb2JqKCppbmZvLVxcdTAwM2V0aW1lciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKCFpbmZvLVxcdTAwM2V0aW1lcikge1xcbiBcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtMjEwLDcgKzIxMCw3IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pXFxuIFxcdFxcdGdvdG8gb3V0X2ZyZWVfdGltZXI7XFxuIFxcbiBcXHRzeXNmc19hdHRyX2luaXQoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIpO1xcbi1cXHRpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyLm5hbWUgPSBrc3RyZHVwKGluZm8tXFx1MDAzZWxhYmVsLCBHRlBfS0VSTkVMKTtcXG4rXFx0aW5mby1cXHUwMDNldGltZXItXFx1MDAzZWF0dHIuYXR0ci5uYW1lID0ga3N0cmR1cChpbmZvLVxcdTAwM2VsYWJlbCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKCFpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyLm5hbWUpIHtcXG4gXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gXFx0XFx0Z290byBvdXRfZnJlZV90aW1lcjtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9MRUQuYyBiL25ldC9uZXRmaWx0ZXIveHRfTEVELmNcXG5pbmRleCBjYWFhZjRkMmM1ODQyLi4zY2JiOGQ2MWQ0MTc1IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfTEVELmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0xFRC5jXFxuQEAgLTExMSwxMSArMTExLDEyIEBAIHN0YXRpYyBpbnQgbGVkX3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxcbiBcXHR9XFxuIFxcbiBcXHRlcnIgPSAtRU5PTUVNO1xcbi1cXHRsZWRpbnRlcm5hbCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB4dF9sZWRfaW5mb19pbnRlcm5hbCk7XFxuK1xcdGxlZGludGVybmFsID0ga3phbGxvY19vYmooc3RydWN0IHh0X2xlZF9pbmZvX2ludGVybmFsLFxcbitcXHRcXHRcXHRcXHQgIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICghbGVkaW50ZXJuYWwpXFxuIFxcdFxcdGdvdG8gZXhpdF9tdXRleF9vbmx5O1xcbiBcXG4tXFx0bGVkaW50ZXJuYWwtXFx1MDAzZXRyaWdnZXJfaWQgPSBrc3RyZHVwKGxlZGluZm8tXFx1MDAzZWlkLCBHRlBfS0VSTkVMKTtcXG4rXFx0bGVkaW50ZXJuYWwtXFx1MDAzZXRyaWdnZXJfaWQgPSBrc3RyZHVwKGxlZGluZm8tXFx1MDAzZWlkLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIWxlZGludGVybmFsLVxcdTAwM2V0cmlnZ2VyX2lkKVxcbiBcXHRcXHRnb3RvIGV4aXRfaW50ZXJuYWxfYWxsb2M7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X1JBVEVFU1QuYyBiL25ldC9uZXRmaWx0ZXIveHRfUkFURUVTVC5jXFxuaW5kZXggOTEyNzBkNDY3ZmZkZi4uMmY2YjUxMmI3MWU4MCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X1JBVEVFU1QuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfUkFURUVTVC5jXFxuQEAgLTEzOSw3ICsxMzksNyBAQCBzdGF0aWMgaW50IHh0X3JhdGVlc3RfdGdfY2hlY2tlbnRyeShjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcXG4gXFx0fVxcbiBcXG4gXFx0cmV0ID0gLUVOT01FTTtcXG4tXFx0ZXN0ID0ga3phbGxvY19vYmooKmVzdCk7XFxuK1xcdGVzdCA9IGt6YWxsb2Nfb2JqKCplc3QsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICghZXN0KVxcbiBcXHRcXHRnb3RvIGVycjE7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jIGIvbmV0L25ldGZpbHRlci94dF9URUUuY1xcbmluZGV4IDVkMzRjZWI4OTNlZGEuLjQ4YjQxMDRmMDg1OTggMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9URUUuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfVEVFLmNcXG5AQCAtMTA2LDcgKzEwNiw3IEBAIHN0YXRpYyBpbnQgdGVlX3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxcbiBcXHRcXHRpZiAoaW5mby1cXHUwMDNlb2lmW3NpemVvZihpbmZvLVxcdTAwM2VvaWYpLTFdICE9ICdcXFxcMCcpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0XFx0cHJpdiA9IGt6YWxsb2Nfb2JqKCpwcml2KTtcXG4rXFx0XFx0cHJpdiA9IGt6YWxsb2Nfb2JqKCpwcml2LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRcXHRpZiAocHJpdiA9PSBOVUxMKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jXFxuaW5kZXggOWFmMGZhODk1ZjczMC4uYjQ1ZjA2YjA2YzI2ZCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuY1xcbkBAIC0zMTksNyArMzE5LDcgQEAgc3RhdGljIGludCBodGFibGVfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGhhc2hsaW1pdF9jZmczICpjZmcsXFxuIFxcdGhpbmZvLVxcdTAwM2Vjb3VudCA9IDA7XFxuIFxcdGhpbmZvLVxcdTAwM2VmYW1pbHkgPSBmYW1pbHk7XFxuIFxcdGhpbmZvLVxcdTAwM2VybmRfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcXG4tXFx0aGluZm8tXFx1MDAzZW5hbWUgPSBrc3RyZHVwKG5hbWUsIEdGUF9LRVJORUwpO1xcbitcXHRoaW5mby1cXHUwMDNlbmFtZSA9IGtzdHJkdXAobmFtZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKCFoaW5mby1cXHUwMDNlbmFtZSkge1xcbiBcXHRcXHRrdmZyZWUoaGluZm8pO1xcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9saW1pdC5jIGIvbmV0L25ldGZpbHRlci94dF9saW1pdC5jXFxuaW5kZXggODdkNzRkYTE0YzBiNy4uYWQ0OGI2ODc5YjEzMCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmNcXG5AQCAtMTE1LDcgKzExNSw3IEBAIHN0YXRpYyBpbnQgbGltaXRfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXFxuIFxcdFxcdHJldHVybiAtRVJBTkdFO1xcbiBcXHR9XFxuIFxcbi1cXHRwcml2ID0ga21hbGxvY19vYmooKnByaXYpO1xcbitcXHRwcml2ID0ga21hbGxvY19vYmooKnByaXYsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmIChwcml2ID09IE5VTEwpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9xdW90YS5jIGIvbmV0L25ldGZpbHRlci94dF9xdW90YS5jXFxuaW5kZXggYjA1YzVjOGRhYzc4Yi4uZTIxZWMxNTJkMTZhNyAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmNcXG5AQCAtNTAsNyArNTAsNyBAQCBzdGF0aWMgaW50IHF1b3RhX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxcbiBcXHRpZiAocS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB+WFRfUVVPVEFfTUFTSylcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRxLVxcdTAwM2VtYXN0ZXIgPSBrbWFsbG9jX29iaigqcS1cXHUwMDNlbWFzdGVyKTtcXG4rXFx0cS1cXHUwMDNlbWFzdGVyID0ga21hbGxvY19vYmooKnEtXFx1MDAzZW1hc3RlciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKHEtXFx1MDAzZW1hc3RlciA9PSBOVUxMKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jXFxuaW5kZXggZDM0ODMxY2UzYWRmYi4uNTVmMWYyZDg5OTUyZCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci94dF9yZWNlbnQuY1xcbkBAIC0zOTEsNyArMzkxLDggQEAgc3RhdGljIGludCByZWNlbnRfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIsXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbi1cXHR0ID0ga3Z6YWxsb2NfZmxleCgqdCwgaXBoYXNoLCBpcF9saXN0X2hhc2hfc2l6ZSk7XFxuK1xcdHQgPSBrdnphbGxvY19mbGV4KCp0LCBpcGhhc2gsIGlwX2xpc3RfaGFzaF9zaXplLFxcbitcXHRcXHRcXHQgIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICh0ID09IE5VTEwpIHtcXG4gXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5jXFxuaW5kZXggMzM0ZTA5NzcxYWJmOS4uMWZmYzU5ZDkwYmIwYSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5jXFxuKysrIGIvbmV0L25ldGZpbHRlci94dF9zdGF0aXN0aWMuY1xcbkBAIC01OCw3ICs1OCw3IEBAIHN0YXRpYyBpbnQgc3RhdGlzdGljX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxcbiBcXHQgICAgaW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB+WFRfU1RBVElTVElDX01BU0spXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0aW5mby1cXHUwMDNlbWFzdGVyID0ga3phbGxvY19vYmooKmluZm8tXFx1MDAzZW1hc3Rlcik7XFxuK1xcdGluZm8tXFx1MDAzZW1hc3RlciA9IGt6YWxsb2Nfb2JqKCppbmZvLVxcdTAwM2VtYXN0ZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmIChpbmZvLVxcdTAwM2VtYXN0ZXIgPT0gTlVMTClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdGF0b21pY19zZXQoXFx1MDAyNmluZm8tXFx1MDAzZW1hc3Rlci1cXHUwMDNlY291bnQsIGluZm8tXFx1MDAzZXUubnRoLmNvdW50KTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9zdHJpbmcuYyBiL25ldC9uZXRmaWx0ZXIveHRfc3RyaW5nLmNcXG5pbmRleCA4Y2UyNWJjOWIyNzc1Li41MmMxZGViMDJjZGM2IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfc3RyaW5nLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3N0cmluZy5jXFxuQEAgLTU0LDcgKzU0LDcgQEAgc3RhdGljIGludCBzdHJpbmdfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXFxuIFxcdGlmIChjb25mLVxcdTAwM2V1LnYxLmZsYWdzIFxcdTAwMjYgWFRfU1RSSU5HX0ZMQUdfSUdOT1JFQ0FTRSlcXG4gXFx0XFx0ZmxhZ3MgfD0gVFNfSUdOT1JFQ0FTRTtcXG4gXFx0dHNfY29uZiA9IHRleHRzZWFyY2hfcHJlcGFyZShjb25mLVxcdTAwM2VhbGdvLCBjb25mLVxcdTAwM2VwYXR0ZXJuLCBjb25mLVxcdTAwM2VwYXRsZW4sXFxuLVxcdFxcdFxcdFxcdCAgICAgR0ZQX0tFUk5FTCwgZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUxfQUNDT1VOVCwgZmxhZ3MpO1xcbiBcXHRpZiAoSVNfRVJSKHRzX2NvbmYpKVxcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUih0c19jb25mKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE0OjU2OjIyLjI1NjcwMDI5N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQyMzExMzYwMjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGNoYW5nZXMgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MgdG8gaW5jbHVkZSBHRlBfS0VSTkVMX0FDQ09VTlQgYWNyb3NzIHZhcmlvdXMgbmV0ZmlsdGVyIG1vZHVsZXMuIFRoaXMgaXMgYSBtZWNoYW5pY2FsIGNoYW5nZSBmb3IgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nIGFuZCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuIFRoZXJlZm9yZSwgaXQgaXMgbm90IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmY2Y3ZjkzYWMxZjUyY2FjZWVjOWFhYzMyMDJlYTM5MDg2YmNmNGNlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMTQ6NTY6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuY1xuaW5kZXggMGJmNTQxOTM2ZjYwMS4uNjRiOGY2Zjk4MjExOSAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmNcbisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmNcbkBAIC0xMzA0LDcgKzEzMDQsNyBAQCBpbnQgZWJ0X3JlZ2lzdGVyX3RlbXBsYXRlKGNvbnN0IHN0cnVjdCBlYnRfdGFibGUgKnQsIGludCAoKnRhYmxlX2luaXQpKHN0cnVjdCBuZVxuIFx0XHR9XG4gXHR9XG4gXG4tXHR0bXBsID0ga3phbGxvY19vYmooKnRtcGwpO1xuK1x0dG1wbCA9IGt6YWxsb2Nfb2JqKCp0bXBsLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCF0bXBsKSB7XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZlYnRfbXV0ZXgpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jXG5pbmRleCBhYzdmZWJjZTA3NGYxLi5lMTUyY2YzNWQ4NTk2IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jXG5AQCAtMjE3LDcgKzIxNyw3IEBAIGluaXRfbWFwX2lwKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGJpdG1hcF9pcCAqbWFwLFxuIFx0ICAgIHUzMiBmaXJzdF9pcCwgdTMyIGxhc3RfaXAsXG4gXHQgICAgdTMyIGVsZW1lbnRzLCB1MzIgaG9zdHMsIHU4IG5ldG1hc2spXG4ge1xuLVx0bWFwLVx1MDAzZW1lbWJlcnMgPSBiaXRtYXBfemFsbG9jKGVsZW1lbnRzLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcbitcdG1hcC1cdTAwM2VtZW1iZXJzID0gYml0bWFwX3phbGxvYyhlbGVtZW50cywgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKTtcbiBcdGlmICghbWFwLVx1MDAzZW1lbWJlcnMpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdG1hcC1cdTAwM2VmaXJzdF9pcCA9IGZpcnN0X2lwO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmNcbmluZGV4IDU5MjFmZDlkMmRjYTAuLmExMTc5MzUyMjIwYTQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmNcbkBAIC0zMDAsNyArMzAwLDcgQEAgc3RhdGljIGJvb2xcbiBpbml0X21hcF9pcG1hYyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBiaXRtYXBfaXBtYWMgKm1hcCxcbiBcdCAgICAgICB1MzIgZmlyc3RfaXAsIHUzMiBsYXN0X2lwLCB1MzIgZWxlbWVudHMpXG4ge1xuLVx0bWFwLVx1MDAzZW1lbWJlcnMgPSBiaXRtYXBfemFsbG9jKGVsZW1lbnRzLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcbitcdG1hcC1cdTAwM2VtZW1iZXJzID0gYml0bWFwX3phbGxvYyhlbGVtZW50cywgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKTtcbiBcdGlmICghbWFwLVx1MDAzZW1lbWJlcnMpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdG1hcC1cdTAwM2VmaXJzdF9pcCA9IGZpcnN0X2lwO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jXG5pbmRleCBjYTg3NWM5ODI0MjQ1Li4wYTAwMjdjZGIxOTM3IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuY1xuQEAgLTIzMSw3ICsyMzEsNyBAQCBzdGF0aWMgYm9vbFxuIGluaXRfbWFwX3BvcnQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgYml0bWFwX3BvcnQgKm1hcCxcbiBcdCAgICAgIHUxNiBmaXJzdF9wb3J0LCB1MTYgbGFzdF9wb3J0KVxuIHtcbi1cdG1hcC1cdTAwM2VtZW1iZXJzID0gYml0bWFwX3phbGxvYyhtYXAtXHUwMDNlZWxlbWVudHMsIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xuK1x0bWFwLVx1MDAzZW1lbWJlcnMgPSBiaXRtYXBfemFsbG9jKG1hcC1cdTAwM2VlbGVtZW50cywgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKTtcbiBcdGlmICghbWFwLVx1MDAzZW1lbWJlcnMpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdG1hcC1cdTAwM2VmaXJzdF9wb3J0ID0gZmlyc3RfcG9ydDtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcbmluZGV4IDBhODZhMTcwYmE5MDYuLjI4YWM4Y2JhM2Q2OGMgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1xuQEAgLTEwODUsNyArMTA4NSw3IEBAIHN0YXRpYyBpbnQgaXBfc2V0X2NyZWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuIFx0LyogRmlyc3QsIGFuZCB3aXRob3V0IGFueSBsb2NrcywgYWxsb2NhdGUgYW5kIGluaXRpYWxpemVcbiBcdCAqIGEgbm9ybWFsIGJhc2Ugc2V0IHN0cnVjdHVyZS5cbiBcdCAqL1xuLVx0c2V0ID0ga3phbGxvY19vYmooKnNldCk7XG4rXHRzZXQgPSBremFsbG9jX29iaigqc2V0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFzZXQpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2c2V0LVx1MDAzZWxvY2spO1xuQEAgLTExNDMsNyArMTE0Myw3IEBAIHN0YXRpYyBpbnQgaXBfc2V0X2NyZWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuIFx0XHRcdC8qIFdyYXBhcm91bmQgKi9cbiBcdFx0XHRnb3RvIGNsZWFudXA7XG4gXG4tXHRcdGxpc3QgPSBrdnphbGxvY19vYmpzKHN0cnVjdCBpcF9zZXQgKiwgaSk7XG4rXHRcdGxpc3QgPSBrdnphbGxvY19vYmpzKHN0cnVjdCBpcF9zZXQgKiwgaSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdFx0aWYgKCFsaXN0KVxuIFx0XHRcdGdvdG8gY2xlYW51cDtcbiBcdFx0LyogbmZubCBtdXRleCBpcyBoZWxkLCBib3RoIGxpc3RzIGFyZSB2YWxpZCAqL1xuQEAgLTIzOTcsNyArMjM5Nyw4IEBAIGlwX3NldF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRpZiAoaW5zdC1cdTAwM2VpcF9zZXRfbWF4IFx1MDAzZT0gSVBTRVRfSU5WQUxJRF9JRClcbiBcdFx0aW5zdC1cdTAwM2VpcF9zZXRfbWF4ID0gSVBTRVRfSU5WQUxJRF9JRCAtIDE7XG4gXG4tXHRsaXN0ID0ga3Z6YWxsb2Nfb2JqcyhzdHJ1Y3QgaXBfc2V0ICosIGluc3QtXHUwMDNlaXBfc2V0X21heCk7XG4rXHRsaXN0ID0ga3Z6YWxsb2Nfb2JqcyhzdHJ1Y3QgaXBfc2V0ICosIGluc3QtXHUwMDNlaXBfc2V0X21heCxcbitcdFx0XHQgICAgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWxpc3QpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0aW5zdC1cdTAwM2Vpc19kZWxldGVkID0gZmFsc2U7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbmluZGV4IDgwY2E1MjNmMzA0YmIuLjM5ZGVjOTI4NTA1MmEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXG5AQCAtNzY4LDcgKzc2OCw3IEBAIG10eXBlX3Jlc2l6ZShzdHJ1Y3QgaXBfc2V0ICpzZXQsIGJvb2wgcmV0cmllZClcbiBcdGludCByZXQ7XG4gXG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuLVx0dG1wID0ga21hbGxvYyhkc2l6ZSwgR0ZQX0tFUk5FTCk7XG4rXHR0bXAgPSBrbWFsbG9jKGRzaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCF0bXApXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuICNlbmRpZlxuQEAgLTE3NTQsNyArMTc1NCw3IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcbiBcdFx0c2l6ZW9mKHN0cnVjdCBJUFNFVF9UT0tFTihIVFlQRSwgNikpIDpcbiBcdFx0c2l6ZW9mKHN0cnVjdCBJUFNFVF9UT0tFTihIVFlQRSwgNCkpO1xuICNlbmRpZlxuLVx0aCA9IGt6YWxsb2MoaHNpemUsIEdGUF9LRVJORUwpO1xuK1x0aCA9IGt6YWxsb2MoaHNpemUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWgpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTE3NzQsNyArMTc3NCw3IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcbiBcdFx0Z290byBmcmVlX3Q7XG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpKyspIHtcbi1cdFx0bmV0cyA9IGt6YWxsb2Nfb2JqKCpuZXRzKTtcbitcdFx0bmV0cyA9IGt6YWxsb2Nfb2JqKCpuZXRzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0XHRpZiAoIW5ldHMpIHtcbiBcdFx0XHR3aGlsZSAoaSBcdTAwM2UgMClcbiBcdFx0XHRcdGtmcmVlKHJjdV9kZXJlZmVyZW5jZV9yYXcoaC1cdTAwM2VybmV0c1stLWldKSk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNcbmluZGV4IGYwNzAwODg3NDJkNjAuLjc1MGZlMzgyNjFjMzcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jXG5AQCAtNjAwLDcgKzYwMCw3IEBAIGluaXRfbGlzdF9zZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsIHUzMiBzaXplKVxuIHtcbiBcdHN0cnVjdCBsaXN0X3NldCAqbWFwO1xuIFxuLVx0bWFwID0ga3phbGxvY19vYmooKm1hcCk7XG4rXHRtYXAgPSBremFsbG9jX29iaigqbWFwLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFtYXApXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuY1xuaW5kZXggODU0ODdmOTJhZjUwNi4uYjA5YzE3NmE1MjFkMSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmNcbkBAIC02OTEsNyArNjkxLDcgQEAgc3RydWN0IG5mX2Nvbm5jb3VudF9kYXRhICpuZl9jb25uY291bnRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBrZXlsZW5cbiBcdCAgICBrZXlsZW4gPT0gMClcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXG4tXHRkYXRhID0ga3Z6YWxsb2Nfb2JqKCpkYXRhKTtcbitcdGRhdGEgPSBrdnphbGxvY19vYmooKmRhdGEsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWRhdGEpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmNcbmluZGV4IGI0MDg1YWYzYWQxY2UuLmZlNTI1YjMyNGFmNDEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmNcbkBAIC05Myw3ICs5Myw3IEBAIGludCBuZl9jdF9hZGRfaGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3QgY2hhciAqbmFtZSwgdTggZmFtaWx5LFxuIFx0aWYgKCFoZWxwZXIpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfS0VSTkVMKTtcbitcdGhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghaGVscCkge1xuIFx0XHRuZl9jb25udHJhY2tfaGVscGVyX3B1dChoZWxwZXIpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmNcbmluZGV4IGY0ZjJkODIxOTJkNTQuLmQ4OGExMDIzMDg2MmUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY1xuQEAgLTEwMDksNyArMTAwOSw3IEBAIHN0YXRpYyBpbnQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0KVxuIFx0QlVJTERfQlVHX09OKEFSUkFZX1NJWkUobmZfY3Rfc3lzY3RsX3RhYmxlKSAhPSBORl9TWVNDVExfQ1RfTEFTVF9TWVNDVEwpO1xuIFxuIFx0dGFibGUgPSBrbWVtZHVwKG5mX2N0X3N5c2N0bF90YWJsZSwgc2l6ZW9mKG5mX2N0X3N5c2N0bF90YWJsZSksXG4tXHRcdFx0R0ZQX0tFUk5FTCk7XG4rXHRcdFx0R0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghdGFibGUpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuYyBiL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuY1xuaW5kZXggNGUxZWVmMWJhMGYxNS4uNDBjNmZjZTE0YTYzZiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9ob29rc19sd3R1bm5lbC5jXG5AQCAtNzMsNyArNzMsNyBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgbmZfbHd0dW5uZWxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0aWYgKCFuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpIHtcbiBcdFx0dGFibGUgPSBrbWVtZHVwKG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZSxcbiBcdFx0XHRcdHNpemVvZihuZl9sd3R1bm5lbF9zeXNjdGxfdGFibGUpLFxuLVx0XHRcdFx0R0ZQX0tFUk5FTCk7XG4rXHRcdFx0XHRHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0XHRpZiAoIXRhYmxlKVxuIFx0XHRcdGdvdG8gZXJyX2FsbG9jO1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jXG5pbmRleCBmNGQ4MDY1NGRmZTZhLi5mMWQzNjQ5ZTNmYzYyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9sb2cuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9sb2cuY1xuQEAgLTQ5Myw3ICs0OTMsNyBAQCBzdGF0aWMgaW50IG5ldGZpbHRlcl9sb2dfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0aWYgKCFuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpIHtcbiBcdFx0dGFibGUgPSBrbWVtZHVwKG5mX2xvZ19zeXNjdGxfdGFibGUsXG4gXHRcdFx0XHQgc2l6ZW9mKG5mX2xvZ19zeXNjdGxfdGFibGUpLFxuLVx0XHRcdFx0IEdGUF9LRVJORUwpO1xuK1x0XHRcdFx0IEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRcdGlmICghdGFibGUpXG4gXHRcdFx0Z290byBlcnJfYWxsb2M7XG4gXHR9IGVsc2Uge1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xuaW5kZXggOGFjMzI2ZTFlYjViYS4uMDljYzViOGZkNmFmMSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXG5AQCAtMTIwNCwxNCArMTIwNCwxNSBAQCBpbnQgbmZfbmF0X3JlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLFxuIFx0aWYgKCFuYXRfcHJvdG9fbmV0LVx1MDAzZW5hdF9ob29rX29wcykge1xuIFx0XHRXQVJOX09OKG5hdF9wcm90b19uZXQtXHUwMDNldXNlcnMgIT0gMCk7XG4gXG4tXHRcdG5hdF9vcHMgPSBrbWVtZHVwX2FycmF5KG9yaWdfbmF0X29wcywgb3BzX2NvdW50LCBzaXplb2YoKm9yaWdfbmF0X29wcyksIEdGUF9LRVJORUwpO1xuK1x0XHRuYXRfb3BzID0ga21lbWR1cF9hcnJheShvcmlnX25hdF9vcHMsIG9wc19jb3VudCwgc2l6ZW9mKCpvcmlnX25hdF9vcHMpLFxuK1x0XHRcdFx0XHRHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0XHRpZiAoIW5hdF9vcHMpIHtcbiBcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bmZfbmF0X3Byb3RvX211dGV4KTtcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdFx0fVxuIFxuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBvcHNfY291bnQ7IGkrKykge1xuLVx0XHRcdHByaXYgPSBremFsbG9jX29iaigqcHJpdik7XG4rXHRcdFx0cHJpdiA9IGt6YWxsb2Nfb2JqKCpwcml2LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0XHRcdGlmIChwcml2KSB7XG4gXHRcdFx0XHRuYXRfb3BzW2ldLnByaXYgPSBwcml2O1xuIFx0XHRcdFx0Y29udGludWU7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuY1xuaW5kZXggYWNkMzYwNTE1OTcyZi4uOWZjOTU5YmEyMDMwMCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfc3lucHJveHlfY29yZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuY1xuQEAgLTMzNiw3ICszMzYsNyBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgc3lucHJveHlfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0c3RydWN0IG5mX2Nvbm4gKmN0O1xuIFx0aW50IGVyciA9IC1FTk9NRU07XG4gXG4tXHRjdCA9IG5mX2N0X3RtcGxfYWxsb2MobmV0LCBcdTAwMjZuZl9jdF96b25lX2RmbHQsIEdGUF9LRVJORUwpO1xuK1x0Y3QgPSBuZl9jdF90bXBsX2FsbG9jKG5ldCwgXHUwMDI2bmZfY3Rfem9uZV9kZmx0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFjdClcbiBcdFx0Z290byBlcnIxO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2FjY3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2FjY3QuY1xuaW5kZXggOGZmMWUwYWQ1Y2IwZC4uMWEzNjZmYmQ4MTMzMiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2FjY3QuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfYWNjdC5jXG5AQCAtMTEyLDcgKzExMiw3IEBAIHN0YXRpYyBpbnQgbmZubF9hY2N0X25ldyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuIFx0XHRzaXplICs9IHNpemVvZih1NjQpO1xuIFx0fVxuIFxuLVx0bmZhY2N0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5mX2FjY3QpICsgc2l6ZSwgR0ZQX0tFUk5FTCk7XG4rXHRuZmFjY3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmZfYWNjdCkgKyBzaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKG5mYWNjdCA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuY1xuaW5kZXggNWI2YTA5ZjQ2OTAzZi4uYTA5YjJmZGJmOWI0ZSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbkBAIC0zMzUsNyArMzM1LDggQEAgc3RhdGljIGludCBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfYWxsKHN0cnVjdCBubGF0dHIgKnRiW10sXG4gXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKnBvbGljeTtcbiBcdGludCBpLCByZXQgPSAwO1xuIFxuLVx0bmV3X3BvbGljeSA9IGttYWxsb2Nfb2JqcygqbmV3X3BvbGljeSwgaGVscGVyLVx1MDAzZWV4cGVjdF9jbGFzc19tYXggKyAxKTtcbitcdG5ld19wb2xpY3kgPSBrbWFsbG9jX29ianMoKm5ld19wb2xpY3ksIGhlbHBlci1cdTAwM2VleHBlY3RfY2xhc3NfbWF4ICsgMSxcbitcdFx0XHRcdCAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbmV3X3BvbGljeSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuY1xuaW5kZXggNjZjMjAxNmY2MDQ5ZC4uNmI0YWRhYWY2MWFmMCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0dGltZW91dC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuY1xuQEAgLTcxLDcgKzcxLDggQEAgY3RubF90aW1lb3V0X3BhcnNlX3BvbGljeSh2b2lkICp0aW1lb3V0LFxuIFx0c3RydWN0IG5sYXR0ciAqKnRiO1xuIFx0aW50IHJldCA9IDA7XG4gXG4tXHR0YiA9IGt6YWxsb2Nfb2JqcygqdGIsIGw0cHJvdG8tXHUwMDNlY3RubF90aW1lb3V0Lm5sYXR0cl9tYXggKyAxKTtcbitcdHRiID0ga3phbGxvY19vYmpzKCp0YiwgbDRwcm90by1cdTAwM2VjdG5sX3RpbWVvdXQubmxhdHRyX21heCArIDEsXG4rXHRcdFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFxuIFx0aWYgKCF0YilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMTUwLDE0ICsxNTEsMTUgQEAgc3RhdGljIGludCBjdHRpbWVvdXRfbmV3X3RpbWVvdXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0Z290byBlcnJfcHJvdG9fcHV0O1xuIFx0fVxuIFxuLVx0dGltZW91dCA9IGt6YWxsb2Moc2l6ZW9mKCp0aW1lb3V0KSwgR0ZQX0tFUk5FTCk7XG4rXHR0aW1lb3V0ID0ga3phbGxvYyhzaXplb2YoKnRpbWVvdXQpLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKHRpbWVvdXQgPT0gTlVMTCkge1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIGVycl9wcm90b19wdXQ7XG4gXHR9XG4gXG4gXHR0aW1lb3V0LVx1MDAzZXRpbWVvdXQgPSBremFsbG9jKHNpemVvZigqdGltZW91dC1cdTAwM2V0aW1lb3V0KSArXG4tXHRcdFx0XHQgICBsNHByb3RvLVx1MDAzZWN0bmxfdGltZW91dC5vYmpfc2l6ZSwgR0ZQX0tFUk5FTCk7XG4rXHRcdFx0XHQgICBsNHByb3RvLVx1MDAzZWN0bmxfdGltZW91dC5vYmpfc2l6ZSxcbitcdFx0XHRcdCAgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIXRpbWVvdXQtXHUwMDNldGltZW91dCkge1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIGVycjtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19vc2YuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX29zZi5jXG5pbmRleCA5MjAwMjA3OWY4ZWFiLi5lNDgzNWIwZjRiYjFhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfb3NmLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX29zZi5jXG5AQCAtMzI1LDcgKzMyNSw3IEBAIHN0YXRpYyBpbnQgbmZubF9vc2ZfYWRkX2NhbGxiYWNrKHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgICAgIW1lbWNocihmLVx1MDAzZXZlcnNpb24sIDAsIE1BWEdFTlJFTEVOKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRrZiA9IGttYWxsb2Nfb2JqKHN0cnVjdCBuZl9vc2ZfZmluZ2VyKTtcbitcdGtmID0ga21hbGxvY19vYmooc3RydWN0IG5mX29zZl9maW5nZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWtmKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jIGIvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xuaW5kZXggOWRiZjEyN2RmOWM4MS4uODk3NjA4NzQzMzZjMyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNcbkBAIC0zNjUsNyArMzY1LDcgQEAgc3RhdGljIGJvb2wgbmZ0X2N0X3RtcGxfYWxsb2NfcGNwdSh2b2lkKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0dG1wID0gbmZfY3RfdG1wbF9hbGxvYyhcdTAwMjZpbml0X25ldCwgXHUwMDI2em9uZSwgR0ZQX0tFUk5FTCk7XG4rXHRcdHRtcCA9IG5mX2N0X3RtcGxfYWxsb2MoXHUwMDI2aW5pdF9uZXQsIFx1MDAyNnpvbmUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRcdGlmICghdG1wKSB7XG4gXHRcdFx0bmZ0X2N0X3RtcGxfcHV0X3BjcHUoKTtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG5AQCAtODQ4LDcgKzg0OCw4IEBAIG5mdF9jdF90aW1lb3V0X3BhcnNlX3BvbGljeSh2b2lkICp0aW1lb3V0cyxcbiBcdHN0cnVjdCBubGF0dHIgKip0YjtcbiBcdGludCByZXQgPSAwO1xuIFxuLVx0dGIgPSBremFsbG9jX29ianMoKnRiLCBsNHByb3RvLVx1MDAzZWN0bmxfdGltZW91dC5ubGF0dHJfbWF4ICsgMSk7XG4rXHR0YiA9IGt6YWxsb2Nfb2JqcygqdGIsIGw0cHJvdG8tXHUwMDNlY3RubF90aW1lb3V0Lm5sYXR0cl9tYXggKyAxLFxuK1x0XHRcdCAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcbiBcdGlmICghdGIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTkzNCw3ICs5MzUsNyBAQCBzdGF0aWMgaW50IG5mdF9jdF90aW1lb3V0X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHR9XG4gXG4gXHR0aW1lb3V0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5mX2N0X3RpbWVvdXQpICtcbi1cdFx0XHQgIGw0cHJvdG8tXHUwMDNlY3RubF90aW1lb3V0Lm9ial9zaXplLCBHRlBfS0VSTkVMKTtcbitcdFx0XHQgIGw0cHJvdG8tXHUwMDNlY3RubF90aW1lb3V0Lm9ial9zaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKHRpbWVvdXQgPT0gTlVMTCkge1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIGVycl9wcm90b19wdXQ7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jIGIvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jXG5pbmRleCA5NzhiYjBjMDExMDY4Li4zNjE3YmI2NjA5NGQ0IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmNcbkBAIC0yMjk4LDcgKzIyOTgsNyBAQCBzdGF0aWMgaW50IG5mdF9waXBhcG9faW5pdChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuIFx0aWYgKGZpZWxkX2NvdW50IFx1MDAzZSBORlRfUElQQVBPX01BWF9GSUVMRFMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0bSA9IGttYWxsb2NfZmxleCgqbSwgZiwgZmllbGRfY291bnQpO1xuK1x0bSA9IGttYWxsb2NfZmxleCgqbSwgZiwgZmllbGRfY291bnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIW0pXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfQ1QuYyBiL25ldC9uZXRmaWx0ZXIveHRfQ1QuY1xuaW5kZXggZTc4NjYwZGZkZjRiNi4uMjA1YmM2ZGQ5ODEyNSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfQ1QuY1xuKysrIGIvbmV0L25ldGZpbHRlci94dF9DVC5jXG5AQCAtOTEsNyArOTEsNyBAQCB4dF9jdF9zZXRfaGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3QgY2hhciAqaGVscGVyX25hbWUsXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFx0fVxuIFxuLVx0aGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfS0VSTkVMKTtcbitcdGhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmIChoZWxwID09IE5VTEwpIHtcbiBcdFx0bmZfY29ubnRyYWNrX2hlbHBlcl9wdXQoaGVscGVyKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMTgyLDcgKzE4Miw3IEBAIHN0YXRpYyBpbnQgeHRfY3RfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIsXG4gXHRpZiAoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgWFRfQ1RfWk9ORV9NQVJLKVxuIFx0XHR6b25lLmZsYWdzIHw9IE5GX0NUX0ZMQUdfTUFSSztcbiBcbi1cdGN0ID0gbmZfY3RfdG1wbF9hbGxvYyhwYXItXHUwMDNlbmV0LCBcdTAwMjZ6b25lLCBHRlBfS0VSTkVMKTtcbitcdGN0ID0gbmZfY3RfdG1wbF9hbGxvYyhwYXItXHUwMDNlbmV0LCBcdTAwMjZ6b25lLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFjdCkge1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIGVycjI7XG5AQCAtMTkwLDcgKzE5MCw3IEBAIHN0YXRpYyBpbnQgeHRfY3RfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIsXG4gXG4gXHRpZiAoKGluZm8tXHUwMDNlY3RfZXZlbnRzIHx8IGluZm8tXHUwMDNlZXhwX2V2ZW50cykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIW5mX2N0X2VjYWNoZV9leHRfYWRkKGN0LCBpbmZvLVx1MDAzZWN0X2V2ZW50cywgaW5mby1cdTAwM2VleHBfZXZlbnRzLFxuLVx0XHRcdFx0ICBHRlBfS0VSTkVMKSkge1xuK1x0XHRcdFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpKSB7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gZXJyMztcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jIGIvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY1xuaW5kZXggYmZjZjJkNDRlOTNkYi4uNzk2YjBkNDYxYzNkMCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcbkBAIC0xNTAsNyArMTUwLDcgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbylcbiB7XG4gXHRpbnQgcmV0O1xuIFxuLVx0aW5mby1cdTAwM2V0aW1lciA9IGt6YWxsb2Nfb2JqKCppbmZvLVx1MDAzZXRpbWVyKTtcbitcdGluZm8tXHUwMDNldGltZXIgPSBremFsbG9jX29iaigqaW5mby1cdTAwM2V0aW1lciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghaW5mby1cdTAwM2V0aW1lcikge1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIG91dDtcbkBAIC0xNjEsNyArMTYxLDcgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbylcbiBcdFx0Z290byBvdXRfZnJlZV90aW1lcjtcbiBcbiBcdHN5c2ZzX2F0dHJfaW5pdChcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0cik7XG4tXHRpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0ci5uYW1lID0ga3N0cmR1cChpbmZvLVx1MDAzZWxhYmVsLCBHRlBfS0VSTkVMKTtcbitcdGluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUgPSBrc3RyZHVwKGluZm8tXHUwMDNlbGFiZWwsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUpIHtcbiBcdFx0cmV0ID0gLUVOT01FTTtcbiBcdFx0Z290byBvdXRfZnJlZV90aW1lcjtcbkBAIC0xOTksNyArMTk5LDcgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlX3YxKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbylcbiB7XG4gXHRpbnQgcmV0O1xuIFxuLVx0aW5mby1cdTAwM2V0aW1lciA9IGttYWxsb2Nfb2JqKCppbmZvLVx1MDAzZXRpbWVyKTtcbitcdGluZm8tXHUwMDNldGltZXIgPSBrbWFsbG9jX29iaigqaW5mby1cdTAwM2V0aW1lciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghaW5mby1cdTAwM2V0aW1lcikge1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIG91dDtcbkBAIC0yMTAsNyArMjEwLDcgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlX3YxKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbylcbiBcdFx0Z290byBvdXRfZnJlZV90aW1lcjtcbiBcbiBcdHN5c2ZzX2F0dHJfaW5pdChcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0cik7XG4tXHRpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0ci5uYW1lID0ga3N0cmR1cChpbmZvLVx1MDAzZWxhYmVsLCBHRlBfS0VSTkVMKTtcbitcdGluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUgPSBrc3RyZHVwKGluZm8tXHUwMDNlbGFiZWwsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUpIHtcbiBcdFx0cmV0ID0gLUVOT01FTTtcbiBcdFx0Z290byBvdXRfZnJlZV90aW1lcjtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0xFRC5jIGIvbmV0L25ldGZpbHRlci94dF9MRUQuY1xuaW5kZXggY2FhYWY0ZDJjNTg0Mi4uM2NiYjhkNjFkNDE3NSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfTEVELmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfTEVELmNcbkBAIC0xMTEsMTEgKzExMSwxMiBAQCBzdGF0aWMgaW50IGxlZF90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcbiBcdH1cbiBcbiBcdGVyciA9IC1FTk9NRU07XG4tXHRsZWRpbnRlcm5hbCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB4dF9sZWRfaW5mb19pbnRlcm5hbCk7XG4rXHRsZWRpbnRlcm5hbCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB4dF9sZWRfaW5mb19pbnRlcm5hbCxcbitcdFx0XHRcdCAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbGVkaW50ZXJuYWwpXG4gXHRcdGdvdG8gZXhpdF9tdXRleF9vbmx5O1xuIFxuLVx0bGVkaW50ZXJuYWwtXHUwMDNldHJpZ2dlcl9pZCA9IGtzdHJkdXAobGVkaW5mby1cdTAwM2VpZCwgR0ZQX0tFUk5FTCk7XG4rXHRsZWRpbnRlcm5hbC1cdTAwM2V0cmlnZ2VyX2lkID0ga3N0cmR1cChsZWRpbmZvLVx1MDAzZWlkLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFsZWRpbnRlcm5hbC1cdTAwM2V0cmlnZ2VyX2lkKVxuIFx0XHRnb3RvIGV4aXRfaW50ZXJuYWxfYWxsb2M7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9SQVRFRVNULmMgYi9uZXQvbmV0ZmlsdGVyL3h0X1JBVEVFU1QuY1xuaW5kZXggOTEyNzBkNDY3ZmZkZi4uMmY2YjUxMmI3MWU4MCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfUkFURUVTVC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X1JBVEVFU1QuY1xuQEAgLTEzOSw3ICsxMzksNyBAQCBzdGF0aWMgaW50IHh0X3JhdGVlc3RfdGdfY2hlY2tlbnRyeShjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcbiBcdH1cbiBcbiBcdHJldCA9IC1FTk9NRU07XG4tXHRlc3QgPSBremFsbG9jX29iaigqZXN0KTtcbitcdGVzdCA9IGt6YWxsb2Nfb2JqKCplc3QsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWVzdClcbiBcdFx0Z290byBlcnIxO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfVEVFLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jXG5pbmRleCA1ZDM0Y2ViODkzZWRhLi40OGI0MTA0ZjA4NTk4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9URUUuY1xuKysrIGIvbmV0L25ldGZpbHRlci94dF9URUUuY1xuQEAgLTEwNiw3ICsxMDYsNyBAQCBzdGF0aWMgaW50IHRlZV90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcbiBcdFx0aWYgKGluZm8tXHUwMDNlb2lmW3NpemVvZihpbmZvLVx1MDAzZW9pZiktMV0gIT0gJ1xcMCcpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRcdHByaXYgPSBremFsbG9jX29iaigqcHJpdik7XG4rXHRcdHByaXYgPSBremFsbG9jX29iaigqcHJpdiwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdFx0aWYgKHByaXYgPT0gTlVMTClcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jIGIvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuY1xuaW5kZXggOWFmMGZhODk1ZjczMC4uYjQ1ZjA2YjA2YzI2ZCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmNcbkBAIC0zMTksNyArMzE5LDcgQEAgc3RhdGljIGludCBodGFibGVfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGhhc2hsaW1pdF9jZmczICpjZmcsXG4gXHRoaW5mby1cdTAwM2Vjb3VudCA9IDA7XG4gXHRoaW5mby1cdTAwM2VmYW1pbHkgPSBmYW1pbHk7XG4gXHRoaW5mby1cdTAwM2VybmRfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbi1cdGhpbmZvLVx1MDAzZW5hbWUgPSBrc3RyZHVwKG5hbWUsIEdGUF9LRVJORUwpO1xuK1x0aGluZm8tXHUwMDNlbmFtZSA9IGtzdHJkdXAobmFtZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghaGluZm8tXHUwMDNlbmFtZSkge1xuIFx0XHRrdmZyZWUoaGluZm8pO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmNcbmluZGV4IDg3ZDc0ZGExNGMwYjcuLmFkNDhiNjg3OWIxMzAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfbGltaXQuY1xuQEAgLTExNSw3ICsxMTUsNyBAQCBzdGF0aWMgaW50IGxpbWl0X210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFx0XHRyZXR1cm4gLUVSQU5HRTtcbiBcdH1cbiBcbi1cdHByaXYgPSBrbWFsbG9jX29iaigqcHJpdik7XG4rXHRwcml2ID0ga21hbGxvY19vYmooKnByaXYsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAocHJpdiA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmNcbmluZGV4IGIwNWM1YzhkYWM3OGIuLmUyMWVjMTUyZDE2YTcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfcXVvdGEuY1xuQEAgLTUwLDcgKzUwLDcgQEAgc3RhdGljIGludCBxdW90YV9tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcdGlmIChxLVx1MDAzZWZsYWdzIFx1MDAyNiB+WFRfUVVPVEFfTUFTSylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRxLVx1MDAzZW1hc3RlciA9IGttYWxsb2Nfb2JqKCpxLVx1MDAzZW1hc3Rlcik7XG4rXHRxLVx1MDAzZW1hc3RlciA9IGttYWxsb2Nfb2JqKCpxLVx1MDAzZW1hc3RlciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmIChxLVx1MDAzZW1hc3RlciA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jIGIvbmV0L25ldGZpbHRlci94dF9yZWNlbnQuY1xuaW5kZXggZDM0ODMxY2UzYWRmYi4uNTVmMWYyZDg5OTUyZCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmNcbkBAIC0zOTEsNyArMzkxLDggQEAgc3RhdGljIGludCByZWNlbnRfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0dCA9IGt2emFsbG9jX2ZsZXgoKnQsIGlwaGFzaCwgaXBfbGlzdF9oYXNoX3NpemUpO1xuK1x0dCA9IGt2emFsbG9jX2ZsZXgoKnQsIGlwaGFzaCwgaXBfbGlzdF9oYXNoX3NpemUsXG4rXHRcdFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKHQgPT0gTlVMTCkge1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIG91dDtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5jIGIvbmV0L25ldGZpbHRlci94dF9zdGF0aXN0aWMuY1xuaW5kZXggMzM0ZTA5NzcxYWJmOS4uMWZmYzU5ZDkwYmIwYSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmNcbkBAIC01OCw3ICs1OCw3IEBAIHN0YXRpYyBpbnQgc3RhdGlzdGljX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFx0ICAgIGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IH5YVF9TVEFUSVNUSUNfTUFTSylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpbmZvLVx1MDAzZW1hc3RlciA9IGt6YWxsb2Nfb2JqKCppbmZvLVx1MDAzZW1hc3Rlcik7XG4rXHRpbmZvLVx1MDAzZW1hc3RlciA9IGt6YWxsb2Nfb2JqKCppbmZvLVx1MDAzZW1hc3RlciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmIChpbmZvLVx1MDAzZW1hc3RlciA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdGF0b21pY19zZXQoXHUwMDI2aW5mby1cdTAwM2VtYXN0ZXItXHUwMDNlY291bnQsIGluZm8tXHUwMDNldS5udGguY291bnQpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfc3RyaW5nLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3N0cmluZy5jXG5pbmRleCA4Y2UyNWJjOWIyNzc1Li41MmMxZGViMDJjZGM2IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9zdHJpbmcuY1xuKysrIGIvbmV0L25ldGZpbHRlci94dF9zdHJpbmcuY1xuQEAgLTU0LDcgKzU0LDcgQEAgc3RhdGljIGludCBzdHJpbmdfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXHRpZiAoY29uZi1cdTAwM2V1LnYxLmZsYWdzIFx1MDAyNiBYVF9TVFJJTkdfRkxBR19JR05PUkVDQVNFKVxuIFx0XHRmbGFncyB8PSBUU19JR05PUkVDQVNFO1xuIFx0dHNfY29uZiA9IHRleHRzZWFyY2hfcHJlcGFyZShjb25mLVx1MDAzZWFsZ28sIGNvbmYtXHUwMDNlcGF0dGVybiwgY29uZi1cdTAwM2VwYXRsZW4sXG4tXHRcdFx0XHQgICAgIEdGUF9LRVJORUwsIGZsYWdzKTtcbitcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTF9BQ0NPVU5ULCBmbGFncyk7XG4gXHRpZiAoSVNfRVJSKHRzX2NvbmYpKVxuIFx0XHRyZXR1cm4gUFRSX0VSUih0c19jb25mKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE0OjU2OjIyLjI1NjcxMTQ3N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjAxODU4ODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldGZpbHRlciBNZW1vcnkgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCdzIHN3aXRjaGluZyBuZXRmaWx0ZXIncyBtZW1vcnkgYWxsb2NhdGlvbnMgZnJvbSBwbGFpbiBgR0ZQX0tFUk5FTGAgdG8gYEdGUF9LRVJORUxfQUNDT1VOVGAuIFRoaXMgaXMgYmFzaWNhbGx5IGEgbWVjaGFuaWNhbCBjaGFuZ2UsIGp1c3QgYWRkaW5nIGFjY291bnRpbmcgdG8gdGhlc2UgYWxsb2NhdGlvbnMuIE15IGZpcnN0IHRob3VnaHQgaXM6IGRvZXMgdGhpcyAqYWN0dWFsbHkqIGNoYW5nZSBhbnl0aGluZyBmcm9tIGEgZnVuY3Rpb25hbCBwZXJzcGVjdGl2ZT8gTWVtb3J5IGFjY291bnRpbmcsIGJ5IGl0c2VsZiwgZG9lc24ndCBhbHRlciB0aGUga2VybmVsJ3MgZXhlY3V0aW9uIGZsb3cuIFRoZSBvbmx5IHNpZGUgZWZmZWN0IGlzIGl0IG1heSB0cmlnZ2VyIE9PTSBlcnJvcnMgb3IgY2dyb3VwIGxpbWl0cyBpZiBtZW1vcnkgY29uc3RyYWludHMgYXJlIGhpdC5cblxuQnV0LCBzaG91bGQgSSBib3RoZXIgZnV6emluZyB0aGlzPyBOb3JtYWxseSwgYWRkaW5nIGBHRlBfS0VSTkVMX0FDQ09VTlRgIGlzIGEgZ29vZCB0aGluZyBmb3Igc2VjdXJpdHkgYW5kIGFjY291bnRpbmcuIEl0IGhlbHBzIHByZXZlbnQgdW5wcml2aWxlZ2VkIHVzZXJzIGZyb20gaG9nZ2luZyBtZW1vcnkgd2l0aG91dCBpdCBiZWluZyBwcm9wZXJseSB0cmFja2VkIGJ5IHRoZWlyIGNncm91cC4gTm8gbmV3IGxvZ2ljIGlzIGJlaW5nIGludHJvZHVjZWQsIGl0IGlzIG9ubHkgYSBjaGFuZ2UgaW4gdGhlIEdGUCBmbGFncy5cblxuSGFuZyBvbiwgbGV0J3MgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi5cblxuYGBgY1xuLVx0dG1wbCA9IGt6YWxsb2Nfb2JqKCp0bXBsKTtcbitcdHRtcGwgPSBremFsbG9jX29iaigqdG1wbCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmBgYFxuXG5XYWl0LCBga3phbGxvY19vYmpgPyBUaGF0IGRvZXNuJ3QgbG9vayBmYW1pbGlhci4gYGt6YWxsb2Nfb2JqYCBpc24ndCBhIHN0YW5kYXJkIGtlcm5lbCBtYWNybywgaXMgaXQ/IEJldHRlciBjaGVjayBpZiB0aGlzIGlzIGV2ZW4gc29tZXRoaW5nIHRoYXQgZXhpc3RzIGluIHRoZSBrZXJuZWwuIEknbSBnb2luZyB0byBydW4gYSBgZ3JlcHBlcmAgc2VhcmNoIHRvIHNlZSBpZiBga3phbGxvY19vYmpgIGlzIGRlZmluZWQgYW55d2hlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzA0LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTQ6NTY6MzIuODU4NTc2MDk0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MTE2MjI4ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3phbGxvY19vYmpcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3OTI3MyBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdD0xMDM9bGlzdDpcXG4tLVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTE0LVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3Q6MTE1OiAgICAgICAgICBncm9jayA9IGt6YWxsb2Nfb2JqKCpncm9jayk7XFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMTYtICAgICAgICAgIGlmICghZ3JvY2spXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0LTEyNS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0OjEyNjogICAgICAgICAgZGltaXRyaSA9IGt6YWxsb2Nfb2JqKCpkaW1pdHJpKTtcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0LTEyNy0gICAgICAgICAgaWYgKCFkaW1pdHJpKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0PTQ1PWEgbWVzc2FnZSBhbmQgYSBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgQVBJIGFuZCByZXR1cm4gaW1tZWRpYXRlbHkpLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0LTg5LVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdDo5MDpcXHRcXHRkY19zeW5jID0ga3phbGxvY19vYmooKmRjX3N5bmMpO1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdDo5MTpcXHRcXHRkY19hc3luYyA9IGt6YWxsb2Nfb2JqKCpkY19hc3luYyk7XFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0LTkyLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0PTI2PUV4YW1wbGU6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWVkaWEvdjRsMi1maC5yc3QtNDQtXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0OjQ1OlxcdFxcdG15X2ZoID0ga3phbGxvY19vYmooKm15X2ZoKTtcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWVkaWEvdjRsMi1maC5yc3QtNDYtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05Mzg9VGhlIGtlcm5lbCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGdlbmVyYWwgcHVycG9zZSBtZW1vcnkgYWxsb2NhdG9yczpcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5Mzk6a21hbGxvYygpLCBremFsbG9jKCksIGttYWxsb2Nfb2JqcygpLCBremFsbG9jX29ianMoKSwgdm1hbGxvYygpLCBhbmRcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDAtdnphbGxvYygpLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgZnVydGhlciBpbmZvcm1hdGlvblxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTY0PVRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgYWxsb2NhdGluZyBhIHplcm9lZCBhcnJheSBpcyB0aGUgZm9sbG93aW5nOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTY3LVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk2ODpcXHRwID0ga3phbGxvY19vYmpzKCpwLCBuLCAuLi4pO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk2OS1cXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdD0zOTg9YmVjb21lLCByZXNwZWN0aXZlbHk6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMC1cXHRwdHIgPSBrbWFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6NDAxOlxcdHB0ciA9IGt6YWxsb2Nfb2JqKCpwdHIgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDItXFx0cHRyID0ga21hbGxvY19vYmpzKCpwdHIsIGNvdW50IFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6NDAzOlxcdHB0ciA9IGt6YWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwNC1cXHRwdHIgPSBrbWFsbG9jX2ZsZXgoKnB0ciwgZmxleF9tZW1iZXIsIGNvdW50IFssIGdmcF0gKTtcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD0yMDg9dG8gZGV0YWlscyBleHBsYWluZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9uLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTI2OC0gICAgICAgICAgICAgIC8qIGFsbG9jYXRlIGEgY2hpcC1zcGVjaWZpYyBkYXRhIHdpdGggemVybyBmaWxsZWQgKi9cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6MjY5OiAgICAgICAgICAgICAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMjcwLSAgICAgICAgICAgICAgaWYgKGNoaXAgPT0gTlVMTClcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD02MjM9QWZ0ZXIgYWxsb2NhdGluZyBhIGNhcmQgaW5zdGFuY2UgdmlhIDpjOmZ1bmM6YHNuZF9jYXJkX25ldygpYFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTYzMC0gIC4uLi4uXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjYzMTogIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTYzMi1cXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD02OTg9ZGVzdHJ1Y3RvciBhbmQgUENJIGVudHJpZXMuIEV4YW1wbGUgY29kZSBpcyBzaG93biBmaXJzdCwgYmVsb3c6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTc0OS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6NzUwOiAgICAgICAgICAgICAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtNzUxLSAgICAgICAgICAgICAgaWYgKGNoaXAgPT0gTlVMTCkge1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTM4MjM9Y2hpcCBkYXRhIGluZGl2aWR1YWxseTo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzgzNS0gICAgICAgICAgLi4uLlxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDozODM2OiAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0zODM3LSAgICAgICAgICAuLi4uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQ9Nzk0PWludCBteV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0LTgwMS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQ6ODAyOlxcdG15X2ZoID0ga3phbGxvY19vYmooKm15X2ZoKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQtODAzLVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmM9NjQ9bW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGY2NF9FaGRyICpoZHIsIEVsZjY0X1NoZHIgKnNlY2hkcnMsXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYy05NS1cXHRuc3ltcyA9IHN5bXRhYi1cXHUwMDNlc2hfc2l6ZSAvIHNpemVvZihFbGY2NF9TeW0pO1xcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jOjk2OlxcdGNoYWlucyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgZ290X2VudHJ5LCBuc3ltcyk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMtOTctXFx0aWYgKCFjaGFpbnMpIHtcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmM9MzkwPXJlZ2lzdGVyX2NwdXModm9pZClcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmMtMzk0LVxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYzozOTU6XFx0XFx0c3RydWN0IGNwdSAqcCA9IGt6YWxsb2Nfb2JqKCpwKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTM5Ni1cXHRcXHRpZiAoIXApXFxuLS1cXG5hcmNoL2FyYy9uZXQvYnBmX2ppdF9jb3JlLmM9MTEyMD1zdGF0aWMgaW50IGppdF9wcmVwYXJlX2ZpbmFsX21lbV9hbGxvYyhzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eClcXG4tLVxcbmFyY2gvYXJjL25ldC9icGZfaml0X2NvcmUuYy0xMTMxLVxcdGlmIChjdHgtXFx1MDAzZW5lZWRfZXh0cmFfcGFzcykge1xcbmFyY2gvYXJjL25ldC9icGZfaml0X2NvcmUuYzoxMTMyOlxcdFxcdGN0eC1cXHUwMDNlaml0X2RhdGEgPSBremFsbG9jX29iaigqY3R4LVxcdTAwM2VqaXRfZGF0YSk7XFxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jLTExMzMtXFx0XFx0aWYgKCFjdHgtXFx1MDAzZWppdF9kYXRhKVxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jPTIyMD1sb2NvbW9faW5pdF9vbmVfY2hpbGQoc3RydWN0IGxvY29tbyAqbGNoaXAsIHN0cnVjdCBsb2NvbW9fZGV2X2luZm8gKmluZm8pXFxuLS1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMjI0LVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYzoyMjU6XFx0ZGV2ID0ga3phbGxvY19vYmooc3RydWN0IGxvY29tb19kZXYpO1xcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0yMjYtXFx0aWYgKCFkZXYpIHtcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYz0zNTY9X19sb2NvbW9fcHJvYmUoc3RydWN0IGRldmljZSAqbWUsIHN0cnVjdCByZXNvdXJjZSAqbWVtLCBpbnQgaXJxKVxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTM2Mi1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM6MzYzOlxcdGxjaGlwID0ga3phbGxvY19vYmooc3RydWN0IGxvY29tbyk7XFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTM2NC1cXHRpZiAoIWxjaGlwKVxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jPTczMz1zYTExMTFfaW5pdF9vbmVfY2hpbGQoc3RydWN0IHNhMTExMSAqc2FjaGlwLCBzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCxcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYy03MzktXFxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jOjc0MDpcXHRkZXYgPSBremFsbG9jX29iaihzdHJ1Y3Qgc2ExMTExX2Rldik7XFxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jLTc0MS1cXHRpZiAoIWRldikge1xcbi0tXFxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmM9MTc4PXN0YXRpYyBpbnQgc2Nvb3BfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jLTE4Ny1cXG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYzoxODg6XFx0ZGV2cHRyID0ga3phbGxvY19vYmooc3RydWN0IHNjb29wX2Rldik7XFxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmMtMTg5LVxcdGlmICghZGV2cHRyKVxcbi0tXFxuYXJjaC9hcm0va2VybmVsL3NtcC5jPTEwOD1zdGF0aWMgaW50IHNlY29uZGFyeV9iaWdsaXR0bGVfcHJlcGFyZSh1bnNpZ25lZCBpbnQgY3B1KVxcbi0tXFxuYXJjaC9hcm0va2VybmVsL3NtcC5jLTExMC1cXHRpZiAoIWNwdV92dGFibGVbY3B1XSlcXG5hcmNoL2FybS9rZXJuZWwvc21wLmM6MTExOlxcdFxcdGNwdV92dGFibGVbY3B1XSA9IGt6YWxsb2Nfb2JqKCpjcHVfdnRhYmxlW2NwdV0pO1xcbmFyY2gvYXJtL2tlcm5lbC9zbXAuYy0xMTItXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvdmRzby5jPTE2OT1zdGF0aWMgaW50IF9faW5pdCB2ZHNvX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmMtMTgxLVxcdC8qIEFsbG9jYXRlIHRoZSBWRFNPIHRleHQgcGFnZWxpc3QgKi9cXG5hcmNoL2FybS9rZXJuZWwvdmRzby5jOjE4MjpcXHR2ZHNvX3RleHRfcGFnZWxpc3QgPSBremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdGV4dF9wYWdlcyk7XFxuYXJjaC9hcm0va2VybmVsL3Zkc28uYy0xODMtXFx0aWYgKHZkc29fdGV4dF9wYWdlbGlzdCA9PSBOVUxMKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYz0yNjE9aW50IF9faW5pdCBkYzIxMjg1X3NldHVwKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYy0yNjQtXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYzoyNjU6XFx0cmVzID0ga3phbGxvY19vYmpzKHN0cnVjdCByZXNvdXJjZSwgMik7XFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYy0yNjYtXFx0aWYgKCFyZXMpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmM9Njk9c3RhdGljIGludCBfX2luaXQgZWJzYTI4NV9sZWRzX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmMtODYtXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYzo4NzpcXHRcXHRsZWQgPSBremFsbG9jX29iaigqbGVkKTtcXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jLTg4LVxcdFxcdGlmICghbGVkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jPTcyMD1zdGF0aWMgaW50IF9faW5pdCBuZXR3aW5kZXJfbGVkc19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmMtNzI5LVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItaHcuYzo3MzA6XFx0XFx0bGVkID0ga3phbGxvY19vYmooKmxlZCk7XFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jLTczMS1cXHRcXHRpZiAoIWxlZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYz00NzM9c3RhdGljIGludCBpbXhfbW1kY19wZXJmX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgdm9pZCBfX2lvbWVtICptbWRjX2Jhc2UsXFxuLS1cXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmMtNDc5LVxcbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYzo0ODA6XFx0cG11X21tZGMgPSBremFsbG9jX29iaigqcG11X21tZGMpO1xcbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYy00ODEtXFx0aWYgKCFwbXVfbW1kYykge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jPTExND1zdGF0aWMgdm9pZCBfX2luaXQgaTJjX3F1aXJrKHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMtMTI5LVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYzoxMzA6XFx0XFx0bmV3X2NvbXBhdCA9IGt6YWxsb2Nfb2JqKCpuZXdfY29tcGF0KTtcXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMtMTMxLVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYz0xNjM9c3RhdGljIHZvaWQgX19pbml0IGFybWFkYV8zNzVfMzgwX2NvaGVyZW5jeV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXFxuLS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jLTE4Ny1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jOjE4ODpcXHRcXHRwID0ga3phbGxvY19vYmooKnApO1xcbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmMtMTg5LVxcdFxcdHAtXFx1MDAzZW5hbWUgPSBrc3RyZHVwKFxcXCJhcm0saW8tY29oZXJlbnRcXFwiLCBHRlBfS0VSTkVMKTtcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmM9MTQ4PXN0YXRpYyBpbnQgX19pbml0IG12ZWJ1X3NvY19kZXZpY2Uodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmMtMTU2LVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmM6MTU3OlxcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xcbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmMtMTU4LVxcdGlmICghc29jX2Rldl9hdHRyKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYz0zODA9c3RhdGljIHZvaWQgX19pbml0IG14c19tYWNoaW5lX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmMtMzg5LVxcbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmM6MzkwOlxcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xcbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmMtMzkxLVxcdGlmICghc29jX2Rldl9hdHRyKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYz0yOTQ9c3RhdGljIGludCBfX2luaXQgb21hcDFfc3lzdGVtX2RtYV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jLTMyMS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jOjMyMjpcXHRkID0ga3phbGxvY19vYmooKmQpO1xcbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmMtMzIzLVxcdGlmICghZCkge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jPTI5Mj1zdGF0aWMgdm9pZCBvbWFwX21jYnNwX3JlZ2lzdGVyX2JvYXJkX2NmZyhzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgaW50IHJlc19jb3VudCxcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYy0yOTYtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jOjI5NzpcXHRvbWFwX21jYnNwX2RldmljZXMgPSBremFsbG9jX29ianMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqLCBzaXplKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMtMjk4LVxcdGlmICghb21hcF9tY2JzcF9kZXZpY2VzKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmM9NTE9c3RhdGljIGludCBfX2luaXQgb21hcDFfZG1fdGltZXJfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lci5jLTEyNy1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmM6MTI4OlxcdFxcdHBkYXRhID0ga3phbGxvY19vYmooKnBkYXRhKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmMtMTI5LVxcdFxcdGlmICghcGRhdGEpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jPTIzMD12b2lkIG9tYXAyeHh4X2Nsa3RfdnBzX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jLTIzOS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQuYzoyNDA6XFx0aHcgPSBremFsbG9jX29iaigqaHcpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jLTI0MS1cXHRpZiAoIWh3KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jPTc4Nj12b2lkIF9faW5pdCBvbWFwX3NvY19kZXZpY2VfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jLTc5MC1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmM6NzkxOlxcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYy03OTItXFx0aWYgKCFzb2NfZGV2X2F0dHIpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmM9MTMxPXN0YXRpYyBpbnQgb21hcF9kZXZpY2VfYnVpbGRfZnJvbV9kdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jLTE1OC1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmM6MTU5OlxcdGh3bW9kcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3Qgb21hcF9od21vZCAqLCBvaF9jbnQpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9kZXZpY2UuYy0xNjAtXFx0aWYgKCFod21vZHMpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jPTMzODE9c3RhdGljIGludCBvbWFwX2h3bW9kX2FsbG9jYXRlX21vZHVsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvbWFwX2h3bW9kICpvaCxcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTMzOTQtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzM5NTpcXHRzeXNjID0ga3phbGxvY19vYmooKnN5c2MpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTMzOTYtXFx0aWYgKCFzeXNjKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzQyNC1cXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2b2gtXFx1MDAzZXNsYXZlX3BvcnRzKSkge1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jOjM0MjU6XFx0XFx0b2kgPSBremFsbG9jX29iaigqb2kpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM0MjYtXFx0XFx0aWYgKCFvaSlcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jPTM1MTM9aW50IG9tYXBfaHdtb2RfaW5pdF9tb2R1bGUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzUyNy1cXHRpZiAoIW9oKSB7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzUyODpcXHRcXHRvaCA9IGt6YWxsb2Nfb2JqKCpvaCk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzUyOS1cXHRcXHRpZiAoIW9oKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzUzOC1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozNTM5OlxcdFxcdG9oLVxcdTAwM2VjbGFzcyA9IGt6YWxsb2Nfb2JqKCpvaC1cXHUwMDNlY2xhc3MpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM1NDAtXFx0XFx0aWYgKCFvaC1cXHUwMDNlY2xhc3MpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYz0zNzk9c3RhdGljIGludCBfX2luaXQgYW14M19pZGxlX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpjcHVfbm9kZSwgaW50IGNwdSlcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYy00MTItXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jOjQxMzpcXHRpZGxlX3N0YXRlcyA9IGt6YWxsb2Nfb2JqcygqaWRsZV9zdGF0ZXMsIHN0YXRlX2NvdW50KTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmMtNDE0LVxcdGlmICghaWRsZV9zdGF0ZXMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyX2RldmljZS5jPTMwPXN0YXRpYyB2b2lkIF9faW5pdCBzcl9zZXRfbnZhbHVlcyhzdHJ1Y3Qgb21hcF92b2x0X2RhdGEgKnZvbHRfZGF0YSxcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmMtNDEtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYzo0MjpcXHRudmFsdWVfdGFibGUgPSBremFsbG9jX29ianMoKm52YWx1ZV90YWJsZSwgY291bnQpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmMtNDMtXFx0aWYgKCFudmFsdWVfdGFibGUpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmM9MTM5PXN0YXRpYyBpbnQgX19pbml0IHBjaWVfc2V0dXAoc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTE3MS1cXHQgKi9cXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmM6MTcyOlxcdHJlcyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByZXNvdXJjZSk7XFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTE3My1cXHRpZiAoIXJlcylcXG4tLVxcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYz00NjY9c3RhdGljIGludCBfX2luaXQgcGNpX3NldHVwKHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cylcXG4tLVxcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy00OTItXFx0ICovXFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jOjQ5MzpcXHRyZXMgPSBremFsbG9jX29iaihzdHJ1Y3QgcmVzb3VyY2UpO1xcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy00OTQtXFx0aWYgKCFyZXMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jPTY4OT1zdGF0aWMgc3RydWN0IGV4cGFuc2lvbl9jYXJkICpfX2luaXQgZWNhcmRfYWxsb2NfY2FyZChpbnQgdHlwZSwgaW50IHNsb3QpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jLTY5NC1cXG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jOjY5NTpcXHRlYyA9IGt6YWxsb2Nfb2JqKGVjYXJkX3QpO1xcbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmMtNjk2LVxcdGlmICghZWMpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM9OTM9aW50IF9faW5pdCBzYTExeHhfY2xrX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTA5LVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM6MTEwOlxcdGh3ID0ga3phbGxvY19vYmooKmh3KTtcXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTExMS1cXHRpZiAoIWh3KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMzEtXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYzoxMzI6XFx0aHcgPSBremFsbG9jX29iaigqaHcpO1xcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTMzLVxcdGlmICghaHcpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmM9MzE3PWludCBfX2luaXQgc2ExMXgwX3JlZ2lzdGVyX2ZpeGVkX3JlZ3VsYXRvcihpbnQgbixcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYy0zMjMtXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jOjMyNDpcXHRjZmctXFx1MDAzZWluaXRfZGF0YSA9IGlkID0ga3phbGxvY19vYmooKmNmZy1cXHUwMDNlaW5pdF9kYXRhKTtcXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmMtMzI1LVxcdGlmICghY2ZnLVxcdTAwM2Vpbml0X2RhdGEpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jPTIyNT1zdGF0aWMgaW50IG5lcG9uc2V0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldilcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMtMjc4LVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmM6Mjc5OlxcdGQgPSBremFsbG9jX29iaigqZCk7XFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYy0yODAtXFx0aWYgKCFkKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYz0xNDE9c3RhdGljIGludCBfX2luaXQgcmNhcl9nZW4yX3JlZ3VsYXRvcl9xdWlyayh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmMtMTY2LVxcbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jOjE2NzpcXHRcXHRxdWlyayA9IGt6YWxsb2Nfb2JqKCpxdWlyayk7XFxuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmMtMTY4LVxcdFxcdGlmICghcXVpcmspIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jPTM5Mz1zdGF0aWMgaW50IHZlX3NwY19wb3B1bGF0ZV9vcHBzKHVpbnQzMl90IGNsdXN0ZXIpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy0zOTctXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM6Mzk4OlxcdG9wcHMgPSBremFsbG9jX29ianMoKm9wcHMsIE1BWF9PUFBTKTtcXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy0zOTktXFx0aWYgKCFvcHBzKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9NDQyPWludCBfX2luaXQgdmVfc3BjX2luaXQodm9pZCBfX2lvbWVtICpiYXNlYWRkciwgdTMyIGExNV9jbHVzaWQsIGludCBpcnEpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy00NDQtXFx0aW50IHJldDtcXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYzo0NDU6XFx0aW5mbyA9IGt6YWxsb2Nfb2JqKCppbmZvKTtcXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy00NDYtXFx0aWYgKCFpbmZvKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9NTIzPXN0YXRpYyBzdHJ1Y3QgY2xrICp2ZV9zcGNfY2xrX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmNwdV9kZXYpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy01MjctXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM6NTI4OlxcdHNwYyA9IGt6YWxsb2Nfb2JqKCpzcGMpO1xcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTUyOS1cXHRpZiAoIXNwYylcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jPTEyMz1zdGF0aWMgdm9pZCBfX2luaXQgdmVyc2F0aWxlX2R0X3BjaV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYy0xNDQtXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlLmM6MTQ1OlxcdG5ld3Byb3AgPSBremFsbG9jX29iaigqbmV3cHJvcCk7XFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlLmMtMTQ2LVxcdGlmICghbmV3cHJvcClcXG4tLVxcbmFyY2gvYXJtL21hY2gtenlucS9jb21tb24uYz0xMDU9c3RhdGljIHZvaWQgX19pbml0IHp5bnFfaW5pdF9tYWNoaW5lKHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmMtMTEwLVxcbmFyY2gvYXJtL21hY2gtenlucS9jb21tb24uYzoxMTE6XFx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XFxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jLTExMi1cXHRpZiAoIXNvY19kZXZfYXR0cilcXG4tLVxcbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmM9NTAzPXN0YXRpYyBfX2luaXQgaW50IGwyeDBfcG11X2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmMtNTA5LVxcbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmM6NTEwOlxcdGwyeDBfcG11ID0ga3phbGxvY19vYmooKmwyeDBfcG11KTtcXG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jLTUxMS1cXHRpZiAoIWwyeDBfcG11KSB7XFxuLS1cXG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jPTMxNT1zdGF0aWMgaW50IF9faW5pdCBfX3VuaXBoaWVyX2NhY2hlX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCxcXG4tLVxcbmFyY2gvYXJtL21tL2NhY2hlLXVuaXBoaWVyLmMtMzQ0LVxcbmFyY2gvYXJtL21tL2NhY2hlLXVuaXBoaWVyLmM6MzQ1OlxcdGRhdGEgPSBremFsbG9jX29iaigqZGF0YSk7XFxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYy0zNDYtXFx0aWYgKCFkYXRhKVxcbi0tXFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYz01MzM9c3RhdGljIHZvaWQgKl9fZG1hX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmhhbmRsZSxcXG4tLVxcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtNTYwLVxcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmM6NTYxOlxcdGJ1ZiA9IGt6YWxsb2Nfb2JqKCpidWYsXFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy01NjItXFx0XFx0XFx0ICBnZnAgXFx1MDAyNiB+KF9fR0ZQX0RNQSB8IF9fR0ZQX0RNQTMyIHwgX19HRlBfSElHSE1FTSkpO1xcbi0tXFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYz0xNDg3PWFybV9pb21tdV9jcmVhdGVfbWFwcGluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYmFzZSwgdTY0IHNpemUpXFxuLS1cXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTE1MDYtXFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYzoxNTA3OlxcdG1hcHBpbmcgPSBremFsbG9jX29iaihzdHJ1Y3QgZG1hX2lvbW11X21hcHBpbmcpO1xcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtMTUwOC1cXHRpZiAoIW1hcHBpbmcpXFxuLS1cXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmM9MzE2PWludCBfX2luaXQgYXJjaF94ZW5fdW5wb3B1bGF0ZWRfaW5pdChzdHJ1Y3QgcmVzb3VyY2UgKipyZXMpXFxuLS1cXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzQzLVxcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYzozNDQ6XFx0cmVncyA9IGt6YWxsb2Nfb2JqcygqcmVncywgbnJfcmVnKTtcXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzQ1LVxcdGlmICghcmVncykge1xcbi0tXFxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jLTM4Ny1cXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmM6Mzg4OlxcdFxcdHRtcF9yZXMgPSBremFsbG9jX29iaigqdG1wX3Jlcyk7XFxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jLTM4OS1cXHRcXHRpZiAoIXRtcF9yZXMpIHtcXG4tLVxcbmFyY2gvYXJtL3hlbi9wMm0uYz0xNTA9Ym9vbCBfX3NldF9waHlzX3RvX21hY2hpbmVfbXVsdGkodW5zaWduZWQgbG9uZyBwZm4sXFxuLS1cXG5hcmNoL2FybS94ZW4vcDJtLmMtMTc4LVxcbmFyY2gvYXJtL3hlbi9wMm0uYzoxNzk6XFx0cDJtX2VudHJ5ID0ga3phbGxvY19vYmooKnAybV9lbnRyeSwgR0ZQX05PV0FJVCk7XFxuYXJjaC9hcm0veGVuL3AybS5jLTE4MC1cXHRpZiAoIXAybV9lbnRyeSlcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYz02OD1zdGF0aWMgaW50IF9faW5pdCBfX3Zkc29faW5pdChlbnVtIHZkc29fYWJpIGFiaSlcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYy04My1cXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmM6ODQ6XFx0dmRzb19wYWdlbGlzdCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX2luZm9bYWJpXS52ZHNvX3BhZ2VzKTtcXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmMtODUtXFx0aWYgKHZkc29fcGFnZWxpc3QgPT0gTlVMTClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTQ4MD1zdGF0aWMgaW50IHNoYXJlX3Bmbl9oeXAodTY0IHBmbilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTQ5Mi1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYzo0OTM6XFx0dGhpcyA9IGt6YWxsb2Nfb2JqKCp0aGlzKTtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy00OTQtXFx0aWYgKCF0aGlzKSB7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYz05ODE9aW50IGt2bV9pbml0X3N0YWdlMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMDA3LVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjEwMDg6XFx0cGd0ID0ga3phbGxvY19vYmooKnBndCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMDA5LVxcdGlmICghcGd0KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmM9MTE4MD1pbnQgdG9wdXBfaHlwX21lbWNhY2hlKHN0cnVjdCBrdm1faHlwX21lbWNhY2hlICptYywgdW5zaWduZWQgbG9uZyBtaW5fcGFnZXMpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMTg1LVxcdGlmICghbWMtXFx1MDAzZW1hcHBpbmcpIHtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMTg2OlxcdFxcdG1jLVxcdTAwM2VtYXBwaW5nID0ga3phbGxvY19vYmooc3RydWN0IHBrdm1fbWFwcGluZyxcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMTg3LVxcdFxcdFxcdFxcdFxcdCAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTI1MTA9aW50IF9faW5pdCBrdm1fbW11X2luaXQodTMyIGh5cF92YV9iaXRzKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMjU0My1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoyNTQ0OlxcdGh5cF9wZ3RhYmxlID0ga3phbGxvY19vYmooKmh5cF9wZ3RhYmxlKTtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNTQ1LVxcdGlmICghaHlwX3BndGFibGUpIHtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTEzMjg9aW50IGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzMzMtXFx0aWYgKCF2Y3B1LVxcdTAwM2VhcmNoLnZuY3JfdGxiKSB7XFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTMzNDpcXHRcXHRzdHJ1Y3Qgdm5jcl90bGIgKnZ0ID0ga3phbGxvY19vYmooKnZjcHUtXFx1MDAzZWFyY2gudm5jcl90bGIsXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTMzNS1cXHRcXHRcXHRcXHRcXHRcXHQgIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xNzkzPWludCBrdm1faW5pdF9udl9zeXNyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE4MDItXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTgwMzpcXHRrdm0tXFx1MDAzZWFyY2guc3lzcmVnX21hc2tzID0ga3phbGxvY19vYmooKihrdm0tXFx1MDAzZWFyY2guc3lzcmVnX21hc2tzKSxcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xODA0LVxcdFxcdFxcdFxcdFxcdCAgICAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jPTExNj1zdGF0aWMgc3RydWN0IGt2bV9wdGR1bXBfZ3Vlc3Rfc3RhdGUgKmt2bV9wdGR1bXBfcGFyc2VyX2NyZWF0ZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmMtMTIxLVxcbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jOjEyMjpcXHRzdCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBrdm1fcHRkdW1wX2d1ZXN0X3N0YXRlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jLTEyMy1cXHRpZiAoIXN0KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYz0yMDc9c3RhdGljIGludCBrdm1fdmdpY19kaXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgbnJfc3BpcylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMjEzLVxcdGRpc3QtXFx1MDAzZWFjdGl2ZV9zcGlzID0gKGF0b21pY190KUFUT01JQ19JTklUKDApO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM6MjE0OlxcdGRpc3QtXFx1MDAzZXNwaXMgPSBremFsbG9jX29ianMoc3RydWN0IHZnaWNfaXJxLCBucl9zcGlzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMjE1LVxcdGlmICghZGlzdC1cXHUwMDNlc3BpcylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9MzE2PXN0YXRpYyBpbnQgdmdpY19hbGxvY2F0ZV9wcml2YXRlX2lycXNfbG9ja2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHR5cGUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTMzMS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jOjMzMjpcXHR2Z2ljX2NwdS1cXHUwMDNlcHJpdmF0ZV9pcnFzID0ga3phbGxvY19vYmpzKHN0cnVjdCB2Z2ljX2lycSxcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTMzMy1cXHRcXHRcXHRcXHRcXHQgICAgICBudW1fcHJpdmF0ZV9pcnFzLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmM9MTQyPWludCBrdm1fdmdpY19zZXR1cF9kZWZhdWx0X2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jLTE0OC1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYzoxNDk6XFx0ZW50cmllcyA9IGt6YWxsb2Nfb2JqcygqZW50cmllcywgbnIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmMtMTUwLVxcdGlmICghZW50cmllcylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz03Nj1zdGF0aWMgc3RydWN0IHZnaWNfaXJxICp2Z2ljX2FkZF9scGkoc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW50aWQsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtODctXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjg4OlxcdGlycSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB2Z2ljX2lycSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtODktXFx0aWYgKCFpcnEpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9OTcxPXN0YXRpYyBpbnQgdmdpY19pdHNfYWxsb2NfY29sbGVjdGlvbihzdHJ1Y3QgdmdpY19pdHMgKml0cyxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy05NzYtXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjk3NzpcXHRjb2xsZWN0aW9uID0ga3phbGxvY19vYmooKmNvbGxlY3Rpb24sIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTk3OC1cXHRpZiAoIWNvbGxlY3Rpb24pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTAxNT1zdGF0aWMgc3RydWN0IGl0c19pdGUgKnZnaWNfaXRzX2FsbG9jX2l0ZShzdHJ1Y3QgaXRzX2RldmljZSAqZGV2aWNlLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTEwMjAtXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjEwMjE6XFx0aXRlID0ga3phbGxvY19vYmooKml0ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTAyMi1cXHRpZiAoIWl0ZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz0xMTQyPXN0YXRpYyBzdHJ1Y3QgaXRzX2RldmljZSAqdmdpY19pdHNfYWxsb2NfZGV2aWNlKHN0cnVjdCB2Z2ljX2l0cyAqaXRzLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTExNDctXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjExNDg6XFx0ZGV2aWNlID0ga3phbGxvY19vYmooKmRldmljZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTE0OS1cXHRpZiAoIWRldmljZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz0xODU1PXN0YXRpYyBpbnQgdmdpY19pdHNfY3JlYXRlKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHUzMiB0eXBlKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTE4NjItXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjE4NjM6XFx0aXRzID0ga3phbGxvY19vYmooc3RydWN0IHZnaWNfaXRzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xODY0LVxcdGlmICghaXRzKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYz04ODY9c3RhdGljIGludCB2Z2ljX3YzX2FsbG9jX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCB1aW50MzJfdCBpbmRleCxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMtOTMxLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM6OTMyOlxcdHJkcmVnID0ga3phbGxvY19vYmooKnJkcmVnLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMtOTMzLVxcdGlmICghcmRyZWcpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjQuYz0yNDI9aW50IHZnaWNfdjRfaW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjQuYy0yNTgtXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmM6MjU5OlxcdGRpc3QtXFx1MDAzZWl0c192bS52cGVzID0ga3phbGxvY19vYmpzKCpkaXN0LVxcdTAwM2VpdHNfdm0udnBlcywgbnJfdmNwdXMsXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmMtMjYwLVxcdFxcdFxcdFxcdFxcdCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MjA4MD1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjEwMS1cXHRpZiAoIWppdF9kYXRhKSB7XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MjEwMjpcXHRcXHRqaXRfZGF0YSA9IGt6YWxsb2Nfb2JqKCpqaXRfZGF0YSk7XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjEwMy1cXHRcXHRpZiAoIWppdF9kYXRhKVxcbi0tXFxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmM9MTc9c3RhdGljIGludCBfX2luaXQgdmRzb19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYy0yMi1cXHR2ZHNvX3BhZ2VsaXN0ID1cXG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYzoyMzpcXHRcXHRremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdmRzb19wYWdlcyk7XFxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmMtMjQtXFx0aWYgKHVubGlrZWx5KHZkc29fcGFnZWxpc3QgPT0gTlVMTCkpIHtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jPTQ2Nj1zdGF0aWMgaW50IF9faW5pdCBhZGRfbGVnYWN5X2lzYV9pbyhzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDcyLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjQ3MzpcXHRyYW5nZSA9IGt6YWxsb2Nfb2JqKCpyYW5nZSwgR0ZQX0FUT01JQyk7XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDc0LVxcdGlmICghcmFuZ2UpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jPTQ1PXN0YXRpYyBpbnQgX19pbml0IGluaXRfdmRzbyh2b2lkKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Zkc28uYy01NS1cXHR2ZHNvX2luZm8uY29kZV9tYXBwaW5nLnBhZ2VzID1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jOjU2OlxcdFxcdGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX2luZm8uc2l6ZSAvIFBBR0VfU0laRSk7XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Zkc28uYy01Ny1cXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYz02MTQ9c3RhdGljIGludCBrdm1fZWlvaW50Y19jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtNjI0LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYzo2MjU6XFx0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50Yyk7XFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTYyNi1cXHRpZiAoIXMpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYz0zOTQ9c3RhdGljIGludCBrdm1faXBpX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTQxMS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYzo0MTI6XFx0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb29uZ2FyY2hfaXBpKTtcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYy00MTMtXFx0aWYgKCFzKVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNDo1NjozNS41NzAyMTcwODlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzExNjg2MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUga3phbGxvY19vYmogTWFjcm8qKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIHRoaXMgYGt6YWxsb2Nfb2JqYCBtYWNybywgYW5kIGl0J3MgcmluZ2luZyBhIGJlbGwuIEl0IHNlZW1zIGxpa2Ugc29tZXRoaW5nIGZhaXJseSByZWNlbnQsIG1heWJlIGEgbmV3IGFkZGl0aW9uIHRvIHRoZSBrZXJuZWwsIG9yIHBvdGVudGlhbGx5IGEgc2lkZSBlZmZlY3Qgb2Ygc29tZSBzeXprYWxsZXIgd29yayBJJ3ZlIHNlZW4uIE5vLCB3YWl0LCBjaGVja2luZyBgRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdGAgYW5kIGBEb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3RgIHNob3dzIGl0J3MgYSBkaXJlY3QgcmVwbGFjZW1lbnQgZm9yIHVzaW5nIGBremFsbG9jKHNpemVvZigqcHRyKSwgLi4uKWAuIEludGVyZXN0aW5nLiBJJ20gbm90aW5nIGEgY2hhbmdlIGluIGEgcGF0Y2ggdGhhdCdzIHN1YnN0aXR1dGluZyBga3phbGxvY19vYmooKnRtcGwpYCB3aXRoIGBremFsbG9jX29iaigqdG1wbCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKWAuIFRoYXQgbG9va3MgbGlrZSB0aGV5J3JlIGFkZGluZyBhIHNlY29uZCBhcmd1bWVudC4gV2FpdCwgbm93IEknbSBzZWNvbmQtZ3Vlc3NpbmcgbXlzZWxmLiBEb2VzIGBremFsbG9jX29iamAgYWN0dWFsbHkgdGFrZSBvbmUgb3IgdHdvIGFyZ3VtZW50cz8gSSBiZXR0ZXIgY2hlY2sgdGhlIGRlZmluaXRpb24gdG8gYmUgc3VyZS4gVGltZSB0byBoZWFkIG92ZXIgdG8gYGluY2x1ZGUvbGludXgvc2xhYi5oYCBhbmQgdGFrZSBhIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTk5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE0OjU2OjQxLjI4MTkwNTUwOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTE5MDM5NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUga3phbGxvY19vYmpcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zbGFiLmg9MTA3MD12b2lkICprbWFsbG9jX25vbG9jayhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbm9kZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTUxLS8qIEFsbCBremFsbG9jIGFsaWFzZXMgZm9yIGttYWxsb2NfKG9ianxvYmpzfGZsZXgpLiAqL1xcbmluY2x1ZGUvbGludXgvc2xhYi5oOjExNTI6I2RlZmluZSBremFsbG9jX29iaihQLCAuLi4pIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTUzLVxcdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgMSlcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTU0OiNkZWZpbmUga3phbGxvY19vYmpzKFAsIENPVU5ULCAuLi4pIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTU1LVxcdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgQ09VTlQpXFxuLS1cXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaD0yMDA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaGVhZl9zaXplKHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcXG4tLVxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTIxMC1cXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaDoyMTE6I2RlZmluZSBremFsbG9jX29iaihQLCAuLi4pIFxcXFxcXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMTItXFx0X19hbGxvY19vYmpzKGt6YWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCAxKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNDo1Njo0My44MDA5NTEwMTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDc2NzA3MzEwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgTmV0ZmlsdGVyIE1lbW9yeSBBY2NvdW50aW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHllYWgsIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIHByaW1hcnkgdGhpbmcgaGFwcGVuaW5nIGhlcmUgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCBhY3Jvc3MgYSBidW5jaCBvZiBtZW1vcnkgYWxsb2NhdGlvbnMgd2l0aGluIG5ldGZpbHRlciwgcmVwbGFjaW5nIHRoZSBtb3JlIGdlbmVyaWMgYEdGUF9LRVJORUxgIG9yIGBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOYC4gIGBremFsbG9jX29iamAgdGFrZXMgYFBgIGFuZCBvcHRpb25hbCBgX19WQV9BUkdTX19gIGZvciBHRlAgZmxhZ3MuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgZG9lcyB0aGlzIGFmZmVjdCB0aGUgYWN0dWFsICpmdW5jdGlvbmFsaXR5Kj8gIE5vLCBtZW1vcnkgYWNjb3VudGluZyBmdW5kYW1lbnRhbGx5IGRvZXNuJ3QgY2hhbmdlIHRoZSBleGVjdXRpb24gZmxvdy4gIEl0J3MgYWJvdXQgdHJhY2tpbmcgd2hlcmUgdGhlIG1lbW9yeSBpcyBnb2luZywgbm90IGhvdyB0aGUgY29kZSBhY3R1YWxseSAqd29ya3MqLCBhc2lkZSBmcm9tIHBvdGVudGlhbGx5IHRyaWdnZXJpbmcgT09NIGNvbmRpdGlvbnMgb3IgY2dyb3VwIGxpbWl0cyBpZiB0aGV5IGFyZSBleGNlZWRlZC5cblxuVGhlIHR5cGljYWwgcmVhc29uIHRvIGFkZCB0aGlzIGtpbmQgb2YgYWNjb3VudGluZyBpcyBzZWN1cml0eSBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudDogcHJldmVudGluZyB1bnByaXZpbGVnZWQgdXNlcnMgZnJvbSBob2dnaW5nIG1lbW9yeSBhbmQgbWFraW5nIHN1cmUgdXNhZ2UgaXMgdHJhY2tlZCBhZ2FpbnN0IGNncm91cHMuICBCdXQgZG9lcyBpdCAqaW50cm9kdWNlKiBhbnkgbmV3IGxvZ2ljPyBOb3BlLCBpdCdzIGp1c3QgYSBHRlAgZmxhZyBjaGFuZ2UuIExldCdzIG1ha2Ugc3VyZSwgdGhvdWdoLCBhbmQgbG9vayBhdCB0aGUgYWN0dWFsIGNvZGUgY2hhbmdlcy4gSSdtIHNjYW5uaW5nIHRocm91Z2ggdGhlIGRpZmYuXG5cblllcywgSSdtIHNlZWluZyBhIHBhdHRlcm4sIGV2ZXJ5d2hlcmUuIEV2ZXJ5IGluc3RhbmNlIG9mIGBHRlBfS0VSTkVMYCBpcyBiZWluZyByZXBsYWNlZCB3aXRoIGBHRlBfS0VSTkVMX0FDQ09VTlRgLiBFdmVuIHdoZXJlIGBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOYCBpcyBzcGVjaWZpZWQsIGl0IGlzIGJlaW5nIGNvbnZlcnRlZCB0byBgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOYC4gIFRoZXJlIGFyZSBubyBvdGhlciBjb2RlIGNoYW5nZXMuICBUaGUgZnVuY3Rpb25hbCBiZWhhdmlvciBvZiB0aGUgbmV0ZmlsdGVyIGNvbXBvbmVudHMgcmVtYWlucyB0aGUgc2FtZS4gVGhlIHNhbWUgb2JqZWN0cyBhcmUgYWxsb2NhdGVkIGFuZCB0aGUgc2FtZSBjb2RlIGlzIHVzZWQgdG8gcmVhZCwgbWFuaXB1bGF0ZSBhbmQgbWFuYWdlIHRob3NlIG9iamVjdHMuXG5cbkdpdmVuIHRoZSBwcm9tcHQsIGxldCdzIHNlZSwgc2hvdWxkIEkgZnV6eiBpdD8gU2luY2UgdGhpcyBpcyBhIHB1cmVseSBtZWNoYW5pY2FsIGNoYW5nZSBpbiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MsIGl0IGlzIHZlcnkgdW5saWtlbHkgdG8gaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzIHRoYXQgZnV6emluZyBjb3VsZCBmaW5kLiBJJ20gbWFraW5nIGEgY2hhbmdlIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuIEluIHRoaXMgY2FzZSwgSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5JIGFtIG1ha2luZyBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjaGFuZ2VzIGluIHRoZSBwYXRjaC4gSSdtIHJldmlld2luZyB0aGUgcHJvdmlkZWQgZGlmZnMgYWdhaW4gdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBsb2dpYyBjaGFuZ2VzIGhpZGRlbi5cblxuT2theSwgSSd2ZSBjaGVja2VkLiBUaGlzIGlzIGV4Y2x1c2l2ZWx5IGEgY2hhbmdlIHRvIHRoZSBHRlAgZmxhZ3MuICBJdCdzIG5vdCB3b3J0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjkwNiwiT3V0cHV0VG9rZW5zIjo4MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTQ6NTc6MDQuNTY4MDI3MTEzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGNoYW5nZXMgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MgdG8gaW5jbHVkZSBHRlBfS0VSTkVMX0FDQ09VTlQgYWNyb3NzIHZhcmlvdXMgbmV0ZmlsdGVyIG1vZHVsZXMuIFRoaXMgaXMgYSBtZWNoYW5pY2FsIGNoYW5nZSBmb3IgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nIGFuZCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuIFRoZXJlZm9yZSwgaXQgaXMgbm90IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGNoYW5nZXMgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MgdG8gaW5jbHVkZSBHRlBfS0VSTkVMX0FDQ09VTlQgYWNyb3NzIHZhcmlvdXMgbmV0ZmlsdGVyIG1vZHVsZXMuIFRoaXMgaXMgYSBtZWNoYW5pY2FsIGNoYW5nZSBmb3IgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nIGFuZCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuIFRoZXJlZm9yZSwgaXQgaXMgbm90IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNDo1NzowNC41NjgwNjI3NTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowpww96[1] Phase: Running StartedAt: 2026-08-21 14:57:15 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpww96[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-21 14:57:15 +0000 UTC FinishedAt: 2026-08-21 14:57:20 +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,}