Name: series-workflowqgbfl Phase: Succeeded StartedAt: 2026-07-16 12:42:35 +0000 UTC FinishedAt: 2026-07-16 17:28:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqgbfl[0] Phase: Succeeded StartedAt: 2026-07-16 12:42:35 +0000 UTC FinishedAt: 2026-07-16 13:16:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqgbfl[0].run-triage Phase: Succeeded StartedAt: 2026-07-16 12:42:35 +0000 UTC FinishedAt: 2026-07-16 13:16:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "37e2f878a7a660a216cc7a60459995fefd150f25", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "37e2f878a7a660a216cc7a60459995fefd150f25", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFS_FS" ], "series_id": "309704ad-1a5f-4c4b-99de-ec545c4fadc2" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "hfs_btree_open", "hfs_bmap_alloc", "hfs_bmap_free", "hfs_bmap_get_map_page", "hfs_bmap_test_bit", "hfs_bmap_clear_bit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDEzOjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hmc19idHJlZV9vcGVuJiMzNDssCiAgICAmIzM0O2hmc19ibWFwX2FsbG9jJiMzNDssCiAgICAmIzM0O2hmc19ibWFwX2ZyZWUmIzM0OywKICAgICYjMzQ7aGZzX2JtYXBfZ2V0X21hcF9wYWdlJiMzNDssCiAgICAmIzM0O2hmc19ibWFwX3Rlc3RfYml0JiMzNDssCiAgICAmIzM0O2hmc19ibWFwX2NsZWFyX2JpdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgSEZTIGZpbGVzeXN0ZW0mIzM5O3MgYnRyZWUgbWFwIGhhbmRsaW5nIGxvZ2ljLiBJdCBhZGRzIG5ldyBmdW5jdGlvbnMgdG8gc2FmZWx5IGdldCBtYXAgcGFnZXMsIHRlc3QgYml0cywgYW5kIGNsZWFyIGJpdHMsIGFuZCBtb2RpZmllcyBub2RlIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgdG8gdXNlIHRoZXNlIG5ldyBmdW5jdGlvbnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyB0aGUgZmlsZXN5c3RlbSBtYW5hZ2VzIGl0cyBpbnRlcm5hbCBidHJlZSBzdHJ1Y3R1cmVzLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxMzoxNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNiMmNkMDc4MTE1MGVlYjZhYTQwNzNlODljYzVjMDBiMWIyY2Q2MjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAxMzoxNjowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9oZnMvYm5vZGUuYyBiL2ZzL2hmcy9ibm9kZS5jXG5pbmRleCBkYThlNTM0MmM5MWNjMi4uMWIzMzExMDhkOWMwMWIgMTAwNjQ0XG4tLS0gYS9mcy9oZnMvYm5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzL2Jub2RlLmNcbkBAIC0xNSw0OCAmIzQzOzE1LDYgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDtidHJlZS5oXCYjMzQ7XG4gXG4tc3RhdGljIGlubGluZVxuLWJvb2wgaXNfYm5vZGVfb2Zmc2V0X3ZhbGlkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBvZmYpXG4te1xuLVx0Ym9vbCBpc192YWxpZCA9IG9mZiBcdTAwM2Mgbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZTtcbi1cbi1cdGlmICghaXNfdmFsaWQpIHtcbi1cdFx0cHJfZXJyKFwmIzM0O3JlcXVlc3RlZCBpbnZhbGlkIG9mZnNldDogXCYjMzQ7XG4tXHRcdCAgICAgICBcJiMzNDtOT0RFOiBpZCAldSwgdHlwZSAlI3gsIGhlaWdodCAldSwgXCYjMzQ7XG4tXHRcdCAgICAgICBcJiMzNDtub2RlX3NpemUgJXUsIG9mZnNldCAldVxcblwmIzM0Oyxcbi1cdFx0ICAgICAgIG5vZGUtXHUwMDNldGhpcywgbm9kZS1cdTAwM2V0eXBlLCBub2RlLVx1MDAzZWhlaWdodCxcbi1cdFx0ICAgICAgIG5vZGUtXHUwMDNldHJlZS1cdTAwM2Vub2RlX3NpemUsIG9mZik7XG4tXHR9XG4tXG4tXHRyZXR1cm4gaXNfdmFsaWQ7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmVcbi11MzIgY2hlY2tfYW5kX2NvcnJlY3RfcmVxdWVzdGVkX2xlbmd0aChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgb2ZmLCB1MzIgbGVuKVxuLXtcbi1cdHVuc2lnbmVkIGludCBub2RlX3NpemU7XG4tXG4tXHRpZiAoIWlzX2Jub2RlX29mZnNldF92YWxpZChub2RlLCBvZmYpKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdG5vZGVfc2l6ZSA9IG5vZGUtXHUwMDNldHJlZS1cdTAwM2Vub2RlX3NpemU7XG4tXG4tXHRpZiAoKHU2NClvZmYgJiM0MzsgbGVuIFx1MDAzZSBub2RlX3NpemUpIHtcbi1cdFx0dTMyIG5ld19sZW4gPSBub2RlX3NpemUgLSBvZmY7XG4tXG4tXHRcdHByX2VycihcJiMzNDtyZXF1ZXN0ZWQgbGVuZ3RoIGhhcyBiZWVuIGNvcnJlY3RlZDogXCYjMzQ7XG4tXHRcdCAgICAgICBcJiMzNDtOT0RFOiBpZCAldSwgdHlwZSAlI3gsIGhlaWdodCAldSwgXCYjMzQ7XG4tXHRcdCAgICAgICBcJiMzNDtub2RlX3NpemUgJXUsIG9mZnNldCAldSwgXCYjMzQ7XG4tXHRcdCAgICAgICBcJiMzNDtyZXF1ZXN0ZWRfbGVuICV1LCBjb3JyZWN0ZWRfbGVuICV1XFxuXCYjMzQ7LFxuLVx0XHQgICAgICAgbm9kZS1cdTAwM2V0aGlzLCBub2RlLVx1MDAzZXR5cGUsIG5vZGUtXHUwMDNlaGVpZ2h0LFxuLVx0XHQgICAgICAgbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZSwgb2ZmLCBsZW4sIG5ld19sZW4pO1xuLVxuLVx0XHRyZXR1cm4gbmV3X2xlbjtcbi1cdH1cbi1cbi1cdHJldHVybiBsZW47XG4tfVxuLVxuIHZvaWQgaGZzX2Jub2RlX3JlYWQoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdm9pZCAqYnVmLCB1MzIgb2ZmLCB1MzIgbGVuKVxuIHtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuZGlmZiAtLWdpdCBhL2ZzL2hmcy9idHJlZS5jIGIvZnMvaGZzL2J0cmVlLmNcbmluZGV4IDJlYjM3YTJmNjRlODY2Li40MWI0ZThmYzk0NjM3ZCAxMDA2NDRcbi0tLSBhL2ZzL2hmcy9idHJlZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnMvYnRyZWUuY1xuQEAgLTE1LDYgJiM0MzsxNSwxMjEgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDtidHJlZS5oXCYjMzQ7XG4gXG4mIzQzOy8qIENvbnRleHQgZm9yIGl0ZXJhdGluZyBiLXRyZWUgbWFwIHBhZ2VzXG4mIzQzOyAqIEBwYWdlX2lkeDogVGhlIGluZGV4IG9mIHRoZSBwYWdlIHdpdGhpbiB0aGUgYi1ub2RlJiMzOTtzIHBhZ2UgYXJyYXlcbiYjNDM7ICogQG9mZjogVGhlIGJ5dGUgb2Zmc2V0IHdpdGhpbiB0aGUgbWFwcGVkIHBhZ2VcbiYjNDM7ICogQGxlbjogVGhlIHJlbWFpbmluZyBsZW5ndGggb2YgdGhlIG1hcCByZWNvcmRcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBoZnNfYm1hcF9jdHgge1xuJiM0MztcdHVuc2lnbmVkIGludCBwYWdlX2lkeDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgb2ZmO1xuJiM0MztcdHUxNiBsZW47XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBGaW5kcyB0aGUgc3BlY2lmaWMgcGFnZSBjb250YWluaW5nIHRoZSByZXF1ZXN0ZWQgYnl0ZSBvZmZzZXQgd2l0aGluIHRoZSBtYXBcbiYjNDM7ICogcmVjb3JkLiBBdXRvbWF0aWNhbGx5IGhhbmRsZXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBoZWFkZXIgYW5kIG1hcCBub2Rlcy5cbiYjNDM7ICogUmV0dXJucyB0aGUgc3RydWN0IHBhZ2UgcG9pbnRlciwgb3IgYW4gRVJSX1BUUiBvbiBmYWlsdXJlLlxuJiM0MzsgKiBOb3RlOiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYXBwaW5nL3VubWFwcGluZyB0aGUgcmV0dXJuZWQgcGFnZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGFnZSAqaGZzX2JtYXBfZ2V0X21hcF9wYWdlKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsXG4mIzQzO1x0XHRcdFx0XHQgIHN0cnVjdCBoZnNfYm1hcF9jdHggKmN0eCxcbiYjNDM7XHRcdFx0XHRcdCAgdTMyIGJ5dGVfb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0dTE2IHJlY19pZHgsIG9mZjE2O1xuJiM0MztcdHVuc2lnbmVkIGludCBwYWdlX29mZjtcbiYjNDM7XG4mIzQzO1x0aWYgKG5vZGUtXHUwMDNldGhpcyA9PSBIRlNfVFJFRV9IRUFEKSB7XG4mIzQzO1x0XHRpZiAobm9kZS1cdTAwM2V0eXBlICE9IEhGU19OT0RFX0hFQURFUikge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7aGZzOiBpbnZhbGlkIGJ0cmVlIGhlYWRlciBub2RlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZWNfaWR4ID0gSEZTX0JUUkVFX0hEUl9NQVBfUkVDX0lOREVYO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpZiAobm9kZS1cdTAwM2V0eXBlICE9IEhGU19OT0RFX01BUCkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7aGZzOiBpbnZhbGlkIGJ0cmVlIG1hcCBub2RlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZWNfaWR4ID0gSEZTX0JUUkVFX01BUF9OT0RFX1JFQ19JTkRFWDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGN0eC1cdTAwM2VsZW4gPSBoZnNfYnJlY19sZW5vZmYobm9kZSwgcmVjX2lkeCwgXHUwMDI2b2ZmMTYpO1xuJiM0MztcdGlmICghY3R4LVx1MDAzZWxlbilcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWlzX2Jub2RlX29mZnNldF92YWxpZChub2RlLCBvZmYxNikpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZWxlbiA9IGNoZWNrX2FuZF9jb3JyZWN0X3JlcXVlc3RlZF9sZW5ndGgobm9kZSwgb2ZmMTYsIGN0eC1cdTAwM2VsZW4pO1xuJiM0MztcbiYjNDM7XHRpZiAoYnl0ZV9vZmZzZXQgXHUwMDNlPSBjdHgtXHUwMDNlbGVuKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4mIzQzO1xuJiM0MztcdHBhZ2Vfb2ZmID0gKHUzMilvZmYxNiAmIzQzOyBub2RlLVx1MDAzZXBhZ2Vfb2Zmc2V0ICYjNDM7IGJ5dGVfb2Zmc2V0O1xuJiM0MztcdGN0eC1cdTAwM2VwYWdlX2lkeCA9IHBhZ2Vfb2ZmIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuJiM0MztcdGN0eC1cdTAwM2VvZmYgPSBwYWdlX29mZiBcdTAwMjYgflBBR0VfTUFTSztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG5vZGUtXHUwMDNlcGFnZVtjdHgtXHUwMDNlcGFnZV9pZHhdO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogaGZzX2JtYXBfdGVzdF9iaXQgLSB0ZXN0IGEgYml0IGluIHRoZSBiLXRyZWUgbWFwXG4mIzQzOyAqIEBub2RlOiB0aGUgYi10cmVlIG5vZGUgY29udGFpbmluZyB0aGUgbWFwIHJlY29yZFxuJiM0MzsgKiBAbm9kZV9iaXRfaWR4OiB0aGUgcmVsYXRpdmUgYml0IGluZGV4IHdpdGhpbiB0aGUgbm9kZSYjMzk7cyBtYXAgcmVjb3JkXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdHJ1ZSBpZiBzZXQsIGZhbHNlIGlmIGNsZWFyIG9yIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCBoZnNfYm1hcF90ZXN0X2JpdChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgbm9kZV9iaXRfaWR4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhmc19ibWFwX2N0eCBjdHg7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4mIzQzO1x0dTggKmJtYXAsIGJ5dGUsIG1hc2s7XG4mIzQzO1xuJiM0MztcdHBhZ2UgPSBoZnNfYm1hcF9nZXRfbWFwX3BhZ2Uobm9kZSwgXHUwMDI2Y3R4LCBub2RlX2JpdF9pZHggLyBCSVRTX1BFUl9CWVRFKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHBhZ2UpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRibWFwID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuJiM0MztcdGJ5dGUgPSBibWFwW2N0eC5vZmZdO1xuJiM0MztcdGt1bm1hcF9sb2NhbChibWFwKTtcbiYjNDM7XG4mIzQzO1x0bWFzayA9IDEgXHUwMDNjXHUwMDNjICg3IC0gKG5vZGVfYml0X2lkeCAlIEJJVFNfUEVSX0JZVEUpKTtcbiYjNDM7XHRyZXR1cm4gKGJ5dGUgXHUwMDI2IG1hc2spICE9IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBoZnNfYm1hcF9jbGVhcl9iaXQgLSBjbGVhciBhIGJpdCBpbiB0aGUgYi10cmVlIG1hcFxuJiM0MzsgKiBAbm9kZTogdGhlIGItdHJlZSBub2RlIGNvbnRhaW5pbmcgdGhlIG1hcCByZWNvcmRcbiYjNDM7ICogQG5vZGVfYml0X2lkeDogdGhlIHJlbGF0aXZlIGJpdCBpbmRleCB3aXRoaW4gdGhlIG5vZGUmIzM5O3MgbWFwIHJlY29yZFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVJTlZBTCBpZiBhbHJlYWR5IGNsZWFyLCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBoZnNfYm1hcF9jbGVhcl9iaXQoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG5vZGVfYml0X2lkeClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoZnNfYm1hcF9jdHggY3R4O1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYWdlO1xuJiM0MztcdHU4ICpibWFwLCBtYXNrO1xuJiM0MztcbiYjNDM7XHRwYWdlID0gaGZzX2JtYXBfZ2V0X21hcF9wYWdlKG5vZGUsIFx1MDAyNmN0eCwgbm9kZV9iaXRfaWR4IC8gQklUU19QRVJfQllURSk7XG4mIzQzO1x0aWYgKElTX0VSUihwYWdlKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKHBhZ2UpO1xuJiM0MztcbiYjNDM7XHRibWFwID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuJiM0MztcbiYjNDM7XHRtYXNrID0gMSBcdTAwM2NcdTAwM2MgKDcgLSAobm9kZV9iaXRfaWR4ICUgQklUU19QRVJfQllURSkpO1xuJiM0MztcbiYjNDM7XHRpZiAoIShibWFwW2N0eC5vZmZdIFx1MDAyNiBtYXNrKSkge1xuJiM0MztcdFx0a3VubWFwX2xvY2FsKGJtYXApO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRibWFwW2N0eC5vZmZdIFx1MDAyNj0gfm1hc2s7XG4mIzQzO1x0c2V0X3BhZ2VfZGlydHkocGFnZSk7XG4mIzQzO1x0a3VubWFwX2xvY2FsKGJtYXApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKiBHZXQgYSByZWZlcmVuY2UgdG8gYSBCKlRyZWUgYW5kIGRvIHNvbWUgaW5pdGlhbCBjaGVja3MgKi9cbiBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZXljbXApXG4ge1xuQEAgLTIzLDYgJiM0MzsxMzgsNyBAQCBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZVxuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbiYjNDM7XHRzdHJ1Y3QgaGZzX2Jub2RlICpub2RlO1xuIFx0dW5zaWduZWQgaW50IHNpemU7XG4gXHR1MTYgZGJsb2NrO1xuIFx0c2VjdG9yX3Qgc3RhcnRfYmxvY2s7XG5AQCAtMTU1LDYgJiM0MzsyNzEsMjAgQEAgc3RydWN0IGhmc19idHJlZSAqaGZzX2J0cmVlX29wZW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGlkLCBidHJlZV9rZXljbXAga2VcbiBcdGt1bm1hcF9sb2NhbChoZWFkKTtcbiBcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHRmb2xpb19wdXQoZm9saW8pO1xuJiM0MztcbiYjNDM7XHRub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgSEZTX1RSRUVfSEVBRCk7XG4mIzQzO1x0aWYgKElTX0VSUihub2RlKSlcbiYjNDM7XHRcdGdvdG8gZnJlZV9pbm9kZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFoZnNfYm1hcF90ZXN0X2JpdChub2RlLCBIRlNfVFJFRV9IRUFEKSkge1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDsoJXMpOiAlcyAoY25pZCAweCV4KSBiaXRtYXAgY29ycnVwdGVkLCBmb3JjaW5nIHJkb25seVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0c2ItXHUwMDNlc19pZCwgaWQgPT0gSEZTX0VYVF9DTklEID8gXCYjMzQ7ZXh0ZW50c1wmIzM0OyA6IFwmIzM0O2NhdGFsb2dcJiMzNDssIGlkKTtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7UnVuIGZzY2suaGZzIHRvIHJlcGFpci5cXG5cJiMzNDspO1xuJiM0MztcdFx0c2ItXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRoZnNfYm5vZGVfcHV0KG5vZGUpO1xuJiM0MztcbiBcdHJldHVybiB0cmVlO1xuIFxuIGZhaWxfZm9saW86XG5AQCAtMjg1LDExICYjNDM7NDE1LDkgQEAgaW50IGhmc19ibWFwX3Jlc2VydmUoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIHJzdmRfbm9kZXMpXG4gc3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlcbiB7XG4gXHRzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCAqbmV4dF9ub2RlO1xuLVx0c3RydWN0IHBhZ2UgKipwYWdlcDtcbiYjNDM7XHRzdHJ1Y3QgaGZzX2JtYXBfY3R4IGN0eDtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdHUzMiBuaWR4LCBpZHg7XG4tXHR1bnNpZ25lZCBvZmY7XG4tXHR1MTYgb2ZmMTY7XG4tXHR1MTYgbGVuO1xuIFx0dTggKmRhdGEsIGJ5dGUsIG07XG4gXHRpbnQgaSwgcmVzO1xuIFxuQEAgLTMwMSwyNCAmIzQzOzQyOSwyNiBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxuIFx0bm9kZSA9IGhmc19ibm9kZV9maW5kKHRyZWUsIG5pZHgpO1xuIFx0aWYgKElTX0VSUihub2RlKSlcbiBcdFx0cmV0dXJuIG5vZGU7XG4tXHRsZW4gPSBoZnNfYnJlY19sZW5vZmYobm9kZSwgMiwgXHUwMDI2b2ZmMTYpO1xuLVx0b2ZmID0gb2ZmMTY7XG4gXG4tXHRvZmYgJiM0Mzs9IG5vZGUtXHUwMDNlcGFnZV9vZmZzZXQ7XG4tXHRwYWdlcCA9IG5vZGUtXHUwMDNlcGFnZSAmIzQzOyAob2ZmIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbi1cdGRhdGEgPSBrbWFwX2xvY2FsX3BhZ2UoKnBhZ2VwKTtcbi1cdG9mZiBcdTAwMjY9IH5QQUdFX01BU0s7XG4mIzQzO1x0cGFnZSA9IGhmc19ibWFwX2dldF9tYXBfcGFnZShub2RlLCBcdTAwMjZjdHgsIDApO1xuJiM0MztcdGlmIChJU19FUlIocGFnZSkpIHtcbiYjNDM7XHRcdHJlcyA9IFBUUl9FUlIocGFnZSk7XG4mIzQzO1x0XHRoZnNfYm5vZGVfcHV0KG5vZGUpO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIocmVzKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRhdGEgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRpZHggPSAwO1xuIFxuIFx0Zm9yICg7Oykge1xuLVx0XHR3aGlsZSAobGVuKSB7XG4tXHRcdFx0Ynl0ZSA9IGRhdGFbb2ZmXTtcbiYjNDM7XHRcdHdoaWxlIChjdHgubGVuKSB7XG4mIzQzO1x0XHRcdGJ5dGUgPSBkYXRhW2N0eC5vZmZdO1xuIFx0XHRcdGlmIChieXRlICE9IDB4ZmYpIHtcbiBcdFx0XHRcdGZvciAobSA9IDB4ODAsIGkgPSAwOyBpIFx1MDAzYyA4OyBtIFx1MDAzZVx1MDAzZT0gMSwgaSYjNDM7JiM0MzspIHtcbiBcdFx0XHRcdFx0aWYgKCEoYnl0ZSBcdTAwMjYgbSkpIHtcbiBcdFx0XHRcdFx0XHRpZHggJiM0Mzs9IGk7XG4tXHRcdFx0XHRcdFx0ZGF0YVtvZmZdIHw9IG07XG4tXHRcdFx0XHRcdFx0c2V0X3BhZ2VfZGlydHkoKnBhZ2VwKTtcbiYjNDM7XHRcdFx0XHRcdFx0ZGF0YVtjdHgub2ZmXSB8PSBtO1xuJiM0MztcdFx0XHRcdFx0XHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcbiBcdFx0XHRcdFx0XHRrdW5tYXBfbG9jYWwoZGF0YSk7XG4gXHRcdFx0XHRcdFx0dHJlZS1cdTAwM2VmcmVlX25vZGVzLS07XG4gXHRcdFx0XHRcdFx0bWFya19pbm9kZV9kaXJ0eSh0cmVlLVx1MDAzZWlub2RlKTtcbkBAIC0zMjcsMTMgJiM0Mzs0NTcsMTQgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbi1cdFx0XHRpZiAoJiM0MzsmIzQzO29mZiBcdTAwM2U9IFBBR0VfU0laRSkge1xuJiM0MztcdFx0XHRpZiAoJiM0MzsmIzQzO2N0eC5vZmYgXHUwMDNlPSBQQUdFX1NJWkUpIHtcbiBcdFx0XHRcdGt1bm1hcF9sb2NhbChkYXRhKTtcbi1cdFx0XHRcdGRhdGEgPSBrbWFwX2xvY2FsX3BhZ2UoKiYjNDM7JiM0MztwYWdlcCk7XG4tXHRcdFx0XHRvZmYgPSAwO1xuJiM0MztcdFx0XHRcdHBhZ2UgPSBub2RlLVx1MDAzZXBhZ2VbJiM0MzsmIzQzO2N0eC5wYWdlX2lkeF07XG4mIzQzO1x0XHRcdFx0ZGF0YSA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiYjNDM7XHRcdFx0XHRjdHgub2ZmID0gMDtcbiBcdFx0XHR9XG4gXHRcdFx0aWR4ICYjNDM7PSA4O1xuLVx0XHRcdGxlbi0tO1xuJiM0MztcdFx0XHRjdHgubGVuLS07XG4gXHRcdH1cbiBcdFx0a3VubWFwX2xvY2FsKGRhdGEpO1xuIFx0XHRuaWR4ID0gbm9kZS1cdTAwM2VuZXh0O1xuQEAgLTM0NywyMiAmIzQzOzQ3OCwyMiBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxuIFx0XHRcdHJldHVybiBuZXh0X25vZGU7XG4gXHRcdG5vZGUgPSBuZXh0X25vZGU7XG4gXG4tXHRcdGxlbiA9IGhmc19icmVjX2xlbm9mZihub2RlLCAwLCBcdTAwMjZvZmYxNik7XG4tXHRcdG9mZiA9IG9mZjE2O1xuLVx0XHRvZmYgJiM0Mzs9IG5vZGUtXHUwMDNlcGFnZV9vZmZzZXQ7XG4tXHRcdHBhZ2VwID0gbm9kZS1cdTAwM2VwYWdlICYjNDM7IChvZmYgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuLVx0XHRkYXRhID0ga21hcF9sb2NhbF9wYWdlKCpwYWdlcCk7XG4tXHRcdG9mZiBcdTAwMjY9IH5QQUdFX01BU0s7XG4mIzQzO1x0XHRwYWdlID0gaGZzX2JtYXBfZ2V0X21hcF9wYWdlKG5vZGUsIFx1MDAyNmN0eCwgMCk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKHBhZ2UpKSB7XG4mIzQzO1x0XHRcdHJlcyA9IFBUUl9FUlIocGFnZSk7XG4mIzQzO1x0XHRcdGhmc19ibm9kZV9wdXQobm9kZSk7XG4mIzQzO1x0XHRcdHJldHVybiBFUlJfUFRSKHJlcyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRkYXRhID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuIFx0fVxuIH1cbiBcbiB2b2lkIGhmc19ibWFwX2ZyZWUoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcbiB7XG4gXHRzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlO1xuLVx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXHR1MTYgb2ZmLCBsZW47XG4gXHR1MzIgbmlkeDtcbi1cdHU4ICpkYXRhLCBieXRlLCBtO1xuJiM0MztcdGludCByZXM7XG4gXG4gXHRoZnNfZGJnKFwmIzM0O25vZGUgJXVcXG5cJiMzNDssIG5vZGUtXHUwMDNldGhpcyk7XG4gXHR0cmVlID0gbm9kZS1cdTAwM2V0cmVlO1xuQEAgLTM5NiwyMyAmIzQzOzUyNywxOCBAQCB2b2lkIGhmc19ibWFwX2ZyZWUoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcbiBcdFx0fVxuIFx0XHRsZW4gPSBoZnNfYnJlY19sZW5vZmYobm9kZSwgMCwgXHUwMDI2b2ZmKTtcbiBcdH1cbi1cdG9mZiAmIzQzOz0gbm9kZS1cdTAwM2VwYWdlX29mZnNldCAmIzQzOyBuaWR4IC8gODtcbi1cdHBhZ2UgPSBub2RlLVx1MDAzZXBhZ2Vbb2ZmIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUXTtcbi1cdGRhdGEgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4tXHRvZmYgXHUwMDI2PSB+UEFHRV9NQVNLO1xuLVx0bSA9IDEgXHUwMDNjXHUwMDNjICh+bmlkeCBcdTAwMjYgNyk7XG4tXHRieXRlID0gZGF0YVtvZmZdO1xuLVx0aWYgKCEoYnl0ZSBcdTAwMjYgbSkpIHtcbiYjNDM7XG4mIzQzO1x0cmVzID0gaGZzX2JtYXBfY2xlYXJfYml0KG5vZGUsIG5pZHgpO1xuJiM0MztcdGlmIChyZXMgPT0gLUVJTlZBTCkge1xuIFx0XHRwcl9jcml0KFwmIzM0O3RyeWluZyB0byBmcmVlIGZyZWUgYm5vZGUgJXUoJWQpXFxuXCYjMzQ7LFxuLVx0XHRcdG5vZGUtXHUwMDNldGhpcywgbm9kZS1cdTAwM2V0eXBlKTtcbi1cdFx0a3VubWFwX2xvY2FsKGRhdGEpO1xuLVx0XHRoZnNfYm5vZGVfcHV0KG5vZGUpO1xuLVx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdG5pZHgsIG5vZGUtXHUwMDNldHlwZSk7XG4mIzQzO1x0fSBlbHNlIGlmIChyZXMpIHtcbiYjNDM7XHRcdHByX2NyaXQoXCYjMzQ7ZmFpbCB0byBmcmVlIGJub2RlICV1KCVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0bmlkeCwgbm9kZS1cdTAwM2V0eXBlKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0dHJlZS1cdTAwM2VmcmVlX25vZGVzJiM0MzsmIzQzOztcbiYjNDM7XHRcdG1hcmtfaW5vZGVfZGlydHkodHJlZS1cdTAwM2Vpbm9kZSk7XG4gXHR9XG4tXHRkYXRhW29mZl0gPSBieXRlIFx1MDAyNiB+bTtcbi1cdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuLVx0a3VubWFwX2xvY2FsKGRhdGEpO1xuJiM0MztcbiBcdGhmc19ibm9kZV9wdXQobm9kZSk7XG4tXHR0cmVlLVx1MDAzZWZyZWVfbm9kZXMmIzQzOyYjNDM7O1xuLVx0bWFya19pbm9kZV9kaXJ0eSh0cmVlLVx1MDAzZWlub2RlKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvaGZzL2J0cmVlLmggYi9mcy9oZnMvYnRyZWUuaFxuaW5kZXggOTliZTg1OGIyNDQ2NTAuLmI0YzNmMmEzMTQ3MTAwIDEwMDY0NFxuLS0tIGEvZnMvaGZzL2J0cmVlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmcy9idHJlZS5oXG5AQCAtMTI5LDMgJiM0MzsxMjksNDMgQEAgZXh0ZXJuIGludCBfX2hmc19icmVjX2ZpbmQoc3RydWN0IGhmc19ibm9kZSAqYm5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCk7XG4gZXh0ZXJuIGludCBoZnNfYnJlY19maW5kKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCk7XG4gZXh0ZXJuIGludCBoZnNfYnJlY19yZWFkKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgdm9pZCAqcmVjLCB1MzIgcmVjX2xlbik7XG4gZXh0ZXJuIGludCBoZnNfYnJlY19nb3RvKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgaW50IGNudCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXNfYm5vZGVfb2Zmc2V0X3ZhbGlkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBvZmYpXG4mIzQzO3tcbiYjNDM7XHRib29sIGlzX3ZhbGlkO1xuJiM0MztcbiYjNDM7XHRpZiAoIW5vZGUgfHwgIW5vZGUtXHUwMDNldHJlZSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aXNfdmFsaWQgPSBvZmYgXHUwMDNjIG5vZGUtXHUwMDNldHJlZS1cdTAwM2Vub2RlX3NpemU7XG4mIzQzO1xuJiM0MztcdGlmICghaXNfdmFsaWQpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtpbnZhbGlkIG9mZnNldDogaWQgJXUsIHR5cGUgJSN4LCBoICV1LCBzeiAldSwgb2ZmICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgIG5vZGUtXHUwMDNldGhpcywgbm9kZS1cdTAwM2V0eXBlLCBub2RlLVx1MDAzZWhlaWdodCxcbiYjNDM7XHRcdCAgICAgICBub2RlLVx1MDAzZXRyZWUtXHUwMDNlbm9kZV9zaXplLCBvZmYpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGlzX3ZhbGlkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHUzMiBjaGVja19hbmRfY29ycmVjdF9yZXF1ZXN0ZWRfbGVuZ3RoKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBvZmYsIHUzMiBsZW4pXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbm9kZV9zaXplO1xuJiM0MztcbiYjNDM7XHRpZiAoIWlzX2Jub2RlX29mZnNldF92YWxpZChub2RlLCBvZmYpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdG5vZGVfc2l6ZSA9IG5vZGUtXHUwMDNldHJlZS1cdTAwM2Vub2RlX3NpemU7XG4mIzQzO1xuJiM0MztcdGlmICgodTY0KW9mZiAmIzQzOyBsZW4gXHUwMDNlIG5vZGVfc2l6ZSkge1xuJiM0MztcdFx0dTMyIG5ld19sZW4gPSBub2RlX3NpemUgLSBvZmY7XG4mIzQzO1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O2NvcnJlY3RlZCBsZW46IGlkICV1LCB0eXBlICUjeCwgaCAldSwgc3ogJXUsIG9mZiAldSwgbGVuICV1LVx1MDAzZSV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgIG5vZGUtXHUwMDNldGhpcywgbm9kZS1cdTAwM2V0eXBlLCBub2RlLVx1MDAzZWhlaWdodCxcbiYjNDM7XHRcdCAgICAgICBub2RlX3NpemUsIG9mZiwgbGVuLCBuZXdfbGVuKTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gbmV3X2xlbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBsZW47XG4mIzQzO31cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaCBiL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oXG5pbmRleCA0NWZiNGM5ZmY5ZjVlZS4uZDZhNjE1ZTc0YjI2ZTIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmhcbkBAIC01MTAsMTQgJiM0Mzs1MTAsMjEgQEAgc3RydWN0IGhmc19idHJlZV9oZWFkZXJfcmVjIHtcbiBcdFx0XHRcdFx0XHQgICBiLXRyZWUgYnV0IG5vdCBpbiBleHRlbnRzXG4gXHRcdFx0XHRcdFx0ICAgYi10cmVlIChoZnNwbHVzKS4gKi9cbiBcbiYjNDM7LyogSEZTIEJUcmVlIG1pc2MgaW5mbyAqL1xuJiM0MzsjZGVmaW5lIEhGU19UUkVFX0hFQURcdFx0XHRcdDBcbiYjNDM7I2RlZmluZSBIRlNfQlRSRUVfSERSX01BUF9SRUNfSU5ERVhcdFx0Mlx0LyogTWFwIChiaXRtYXApIHJlY29yZCBpbiBIZWFkZXIgbm9kZSAqL1xuJiM0MzsjZGVmaW5lIEhGU19CVFJFRV9NQVBfTk9ERV9SRUNfSU5ERVhcdFx0MFx0LyogTWFwIHJlY29yZCBpbiBNYXAgTm9kZSAqL1xuJiM0MztcbiAvKiBIRlMmIzQzOyBCVHJlZSBtaXNjIGluZm8gKi9cbi0jZGVmaW5lIEhGU1BMVVNfVFJFRV9IRUFEXHRcdFx0MFxuJiM0MzsjZGVmaW5lIEhGU1BMVVNfVFJFRV9IRUFEXHRcdFx0SEZTX1RSRUVfSEVBRFxuICNkZWZpbmUgSEZTUExVU19OT0RFX01YU1pcdFx0XHQzMjc2OFxuICNkZWZpbmUgSEZTUExVU19OT0RFX01JTlNaXHRcdFx0NTEyXG4gI2RlZmluZSBIRlNQTFVTX0FUVFJfVFJFRV9OT0RFX1NJWkVcdFx0ODE5MlxuICNkZWZpbmUgSEZTUExVU19CVFJFRV9IRFJfTk9ERV9SRUNTX0NPVU5UXHQzXG4tI2RlZmluZSBIRlNQTFVTX0JUUkVFX0hEUl9NQVBfUkVDX0lOREVYXHRcdDJcdC8qIE1hcCAoYml0bWFwKSByZWNvcmQgaW4gSGVhZGVyIG5vZGUgKi9cbi0jZGVmaW5lIEhGU1BMVVNfQlRSRUVfTUFQX05PREVfUkVDX0lOREVYXHQwXHQvKiBNYXAgcmVjb3JkIGluIE1hcCBOb2RlICovXG4mIzQzOy8qIE1hcCAoYml0bWFwKSByZWNvcmQgaW4gSGVhZGVyIG5vZGUgKi9cbiYjNDM7I2RlZmluZSBIRlNQTFVTX0JUUkVFX0hEUl9NQVBfUkVDX0lOREVYXHRcdEhGU19CVFJFRV9IRFJfTUFQX1JFQ19JTkRFWFxuJiM0MzsvKiBNYXAgcmVjb3JkIGluIE1hcCBOb2RlICovXG4mIzQzOyNkZWZpbmUgSEZTUExVU19CVFJFRV9NQVBfTk9ERV9SRUNfSU5ERVhcdEhGU19CVFJFRV9NQVBfTk9ERV9SRUNfSU5ERVhcbiAjZGVmaW5lIEhGU1BMVVNfQlRSRUVfSERSX1VTRVJfQllURVNcdFx0MTI4XG4gI2RlZmluZSBIRlNQTFVTX0JUUkVFX01BUF9OT0RFX1JFQ1NfQ09VTlRcdDJcbiAjZGVmaW5lIEhGU1BMVVNfQlRSRUVfTUFQX05PREVfUkVTRVJWRURfQllURVNcdDJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxMzoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNfYnRyZWVfb3BlbiYjMzQ7LAogICAgJiMzNDtoZnNfYm1hcF9hbGxvYyYjMzQ7LAogICAgJiMzNDtoZnNfYm1hcF9mcmVlJiMzNDssCiAgICAmIzM0O2hmc19ibWFwX2dldF9tYXBfcGFnZSYjMzQ7LAogICAgJiMzNDtoZnNfYm1hcF90ZXN0X2JpdCYjMzQ7LAogICAgJiMzNDtoZnNfYm1hcF9jbGVhcl9iaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEhGUyBmaWxlc3lzdGVtJiMzOTtzIGJ0cmVlIG1hcCBoYW5kbGluZyBsb2dpYy4gSXQgYWRkcyBuZXcgZnVuY3Rpb25zIHRvIHNhZmVseSBnZXQgbWFwIHBhZ2VzLCB0ZXN0IGJpdHMsIGFuZCBjbGVhciBiaXRzLCBhbmQgbW9kaWZpZXMgbm9kZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIHRvIHVzZSB0aGVzZSBuZXcgZnVuY3Rpb25zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBob3cgdGhlIGZpbGVzeXN0ZW0gbWFuYWdlcyBpdHMgaW50ZXJuYWwgYnRyZWUgc3RydWN0dXJlcywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNiMmNkMDc4MTE1MGVlYjZhYTQwNzNlODljYzVjMDBiMWIyY2Q2MjMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAxNiAxMzoxNjowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2hmcy9ibm9kZS5jIGIvZnMvaGZzL2Jub2RlLmMKaW5kZXggZGE4ZTUzNDJjOTFjYzIuLjFiMzMxMTA4ZDljMDFiIDEwMDY0NAotLS0gYS9mcy9oZnMvYm5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnMvYm5vZGUuYwpAQCAtMTUsNDggJiM0MzsxNSw2IEBACiAKICNpbmNsdWRlICYjMzQ7YnRyZWUuaCYjMzQ7CiAKLXN0YXRpYyBpbmxpbmUKLWJvb2wgaXNfYm5vZGVfb2Zmc2V0X3ZhbGlkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBvZmYpCi17Ci0JYm9vbCBpc192YWxpZCA9IG9mZiAmbHQ7IG5vZGUtJmd0O3RyZWUtJmd0O25vZGVfc2l6ZTsKLQotCWlmICghaXNfdmFsaWQpIHsKLQkJcHJfZXJyKCYjMzQ7cmVxdWVzdGVkIGludmFsaWQgb2Zmc2V0OiAmIzM0OwotCQkgICAgICAgJiMzNDtOT0RFOiBpZCAldSwgdHlwZSAlI3gsIGhlaWdodCAldSwgJiMzNDsKLQkJICAgICAgICYjMzQ7bm9kZV9zaXplICV1LCBvZmZzZXQgJXVcbiYjMzQ7LAotCQkgICAgICAgbm9kZS0mZ3Q7dGhpcywgbm9kZS0mZ3Q7dHlwZSwgbm9kZS0mZ3Q7aGVpZ2h0LAotCQkgICAgICAgbm9kZS0mZ3Q7dHJlZS0mZ3Q7bm9kZV9zaXplLCBvZmYpOwotCX0KLQotCXJldHVybiBpc192YWxpZDsKLX0KLQotc3RhdGljIGlubGluZQotdTMyIGNoZWNrX2FuZF9jb3JyZWN0X3JlcXVlc3RlZF9sZW5ndGgoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG9mZiwgdTMyIGxlbikKLXsKLQl1bnNpZ25lZCBpbnQgbm9kZV9zaXplOwotCi0JaWYgKCFpc19ibm9kZV9vZmZzZXRfdmFsaWQobm9kZSwgb2ZmKSkKLQkJcmV0dXJuIDA7Ci0KLQlub2RlX3NpemUgPSBub2RlLSZndDt0cmVlLSZndDtub2RlX3NpemU7Ci0KLQlpZiAoKHU2NClvZmYgJiM0MzsgbGVuICZndDsgbm9kZV9zaXplKSB7Ci0JCXUzMiBuZXdfbGVuID0gbm9kZV9zaXplIC0gb2ZmOwotCi0JCXByX2VycigmIzM0O3JlcXVlc3RlZCBsZW5ndGggaGFzIGJlZW4gY29ycmVjdGVkOiAmIzM0OwotCQkgICAgICAgJiMzNDtOT0RFOiBpZCAldSwgdHlwZSAlI3gsIGhlaWdodCAldSwgJiMzNDsKLQkJICAgICAgICYjMzQ7bm9kZV9zaXplICV1LCBvZmZzZXQgJXUsICYjMzQ7Ci0JCSAgICAgICAmIzM0O3JlcXVlc3RlZF9sZW4gJXUsIGNvcnJlY3RlZF9sZW4gJXVcbiYjMzQ7LAotCQkgICAgICAgbm9kZS0mZ3Q7dGhpcywgbm9kZS0mZ3Q7dHlwZSwgbm9kZS0mZ3Q7aGVpZ2h0LAotCQkgICAgICAgbm9kZS0mZ3Q7dHJlZS0mZ3Q7bm9kZV9zaXplLCBvZmYsIGxlbiwgbmV3X2xlbik7Ci0KLQkJcmV0dXJuIG5ld19sZW47Ci0JfQotCi0JcmV0dXJuIGxlbjsKLX0KLQogdm9pZCBoZnNfYm5vZGVfcmVhZChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB2b2lkICpidWYsIHUzMiBvZmYsIHUzMiBsZW4pCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CmRpZmYgLS1naXQgYS9mcy9oZnMvYnRyZWUuYyBiL2ZzL2hmcy9idHJlZS5jCmluZGV4IDJlYjM3YTJmNjRlODY2Li40MWI0ZThmYzk0NjM3ZCAxMDA2NDQKLS0tIGEvZnMvaGZzL2J0cmVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzL2J0cmVlLmMKQEAgLTE1LDYgJiM0MzsxNSwxMjEgQEAKIAogI2luY2x1ZGUgJiMzNDtidHJlZS5oJiMzNDsKIAomIzQzOy8qIENvbnRleHQgZm9yIGl0ZXJhdGluZyBiLXRyZWUgbWFwIHBhZ2VzCiYjNDM7ICogQHBhZ2VfaWR4OiBUaGUgaW5kZXggb2YgdGhlIHBhZ2Ugd2l0aGluIHRoZSBiLW5vZGUmIzM5O3MgcGFnZSBhcnJheQomIzQzOyAqIEBvZmY6IFRoZSBieXRlIG9mZnNldCB3aXRoaW4gdGhlIG1hcHBlZCBwYWdlCiYjNDM7ICogQGxlbjogVGhlIHJlbWFpbmluZyBsZW5ndGggb2YgdGhlIG1hcCByZWNvcmQKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgaGZzX2JtYXBfY3R4IHsKJiM0MzsJdW5zaWduZWQgaW50IHBhZ2VfaWR4OwomIzQzOwl1bnNpZ25lZCBpbnQgb2ZmOwomIzQzOwl1MTYgbGVuOwomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBGaW5kcyB0aGUgc3BlY2lmaWMgcGFnZSBjb250YWluaW5nIHRoZSByZXF1ZXN0ZWQgYnl0ZSBvZmZzZXQgd2l0aGluIHRoZSBtYXAKJiM0MzsgKiByZWNvcmQuIEF1dG9tYXRpY2FsbHkgaGFuZGxlcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGhlYWRlciBhbmQgbWFwIG5vZGVzLgomIzQzOyAqIFJldHVybnMgdGhlIHN0cnVjdCBwYWdlIHBvaW50ZXIsIG9yIGFuIEVSUl9QVFIgb24gZmFpbHVyZS4KJiM0MzsgKiBOb3RlOiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYXBwaW5nL3VubWFwcGluZyB0aGUgcmV0dXJuZWQgcGFnZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgc3RydWN0IHBhZ2UgKmhmc19ibWFwX2dldF9tYXBfcGFnZShzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLAomIzQzOwkJCQkJICBzdHJ1Y3QgaGZzX2JtYXBfY3R4ICpjdHgsCiYjNDM7CQkJCQkgIHUzMiBieXRlX29mZnNldCkKJiM0Mzt7CiYjNDM7CXUxNiByZWNfaWR4LCBvZmYxNjsKJiM0MzsJdW5zaWduZWQgaW50IHBhZ2Vfb2ZmOwomIzQzOwomIzQzOwlpZiAobm9kZS0mZ3Q7dGhpcyA9PSBIRlNfVFJFRV9IRUFEKSB7CiYjNDM7CQlpZiAobm9kZS0mZ3Q7dHlwZSAhPSBIRlNfTk9ERV9IRUFERVIpIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDtoZnM6IGludmFsaWQgYnRyZWUgaGVhZGVyIG5vZGVcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKJiM0MzsJCX0KJiM0MzsJCXJlY19pZHggPSBIRlNfQlRSRUVfSERSX01BUF9SRUNfSU5ERVg7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpZiAobm9kZS0mZ3Q7dHlwZSAhPSBIRlNfTk9ERV9NQVApIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDtoZnM6IGludmFsaWQgYnRyZWUgbWFwIG5vZGVcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKJiM0MzsJCX0KJiM0MzsJCXJlY19pZHggPSBIRlNfQlRSRUVfTUFQX05PREVfUkVDX0lOREVYOwomIzQzOwl9CiYjNDM7CiYjNDM7CWN0eC0mZ3Q7bGVuID0gaGZzX2JyZWNfbGVub2ZmKG5vZGUsIHJlY19pZHgsICZhbXA7b2ZmMTYpOwomIzQzOwlpZiAoIWN0eC0mZ3Q7bGVuKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CiYjNDM7CiYjNDM7CWlmICghaXNfYm5vZGVfb2Zmc2V0X3ZhbGlkKG5vZGUsIG9mZjE2KSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FSU8pOwomIzQzOwomIzQzOwljdHgtJmd0O2xlbiA9IGNoZWNrX2FuZF9jb3JyZWN0X3JlcXVlc3RlZF9sZW5ndGgobm9kZSwgb2ZmMTYsIGN0eC0mZ3Q7bGVuKTsKJiM0MzsKJiM0MzsJaWYgKGJ5dGVfb2Zmc2V0ICZndDs9IGN0eC0mZ3Q7bGVuKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiYjNDM7CiYjNDM7CXBhZ2Vfb2ZmID0gKHUzMilvZmYxNiAmIzQzOyBub2RlLSZndDtwYWdlX29mZnNldCAmIzQzOyBieXRlX29mZnNldDsKJiM0MzsJY3R4LSZndDtwYWdlX2lkeCA9IHBhZ2Vfb2ZmICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CWN0eC0mZ3Q7b2ZmID0gcGFnZV9vZmYgJmFtcDsgflBBR0VfTUFTSzsKJiM0MzsKJiM0MzsJcmV0dXJuIG5vZGUtJmd0O3BhZ2VbY3R4LSZndDtwYWdlX2lkeF07CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGhmc19ibWFwX3Rlc3RfYml0IC0gdGVzdCBhIGJpdCBpbiB0aGUgYi10cmVlIG1hcAomIzQzOyAqIEBub2RlOiB0aGUgYi10cmVlIG5vZGUgY29udGFpbmluZyB0aGUgbWFwIHJlY29yZAomIzQzOyAqIEBub2RlX2JpdF9pZHg6IHRoZSByZWxhdGl2ZSBiaXQgaW5kZXggd2l0aGluIHRoZSBub2RlJiMzOTtzIG1hcCByZWNvcmQKJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdHJ1ZSBpZiBzZXQsIGZhbHNlIGlmIGNsZWFyIG9yIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgaGZzX2JtYXBfdGVzdF9iaXQoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG5vZGVfYml0X2lkeCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoZnNfYm1hcF9jdHggY3R4OwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZTsKJiM0MzsJdTggKmJtYXAsIGJ5dGUsIG1hc2s7CiYjNDM7CiYjNDM7CXBhZ2UgPSBoZnNfYm1hcF9nZXRfbWFwX3BhZ2Uobm9kZSwgJmFtcDtjdHgsIG5vZGVfYml0X2lkeCAvIEJJVFNfUEVSX0JZVEUpOwomIzQzOwlpZiAoSVNfRVJSKHBhZ2UpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlibWFwID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwomIzQzOwlieXRlID0gYm1hcFtjdHgub2ZmXTsKJiM0MzsJa3VubWFwX2xvY2FsKGJtYXApOwomIzQzOwomIzQzOwltYXNrID0gMSAmbHQ7Jmx0OyAoNyAtIChub2RlX2JpdF9pZHggJSBCSVRTX1BFUl9CWVRFKSk7CiYjNDM7CXJldHVybiAoYnl0ZSAmYW1wOyBtYXNrKSAhPSAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBoZnNfYm1hcF9jbGVhcl9iaXQgLSBjbGVhciBhIGJpdCBpbiB0aGUgYi10cmVlIG1hcAomIzQzOyAqIEBub2RlOiB0aGUgYi10cmVlIG5vZGUgY29udGFpbmluZyB0aGUgbWFwIHJlY29yZAomIzQzOyAqIEBub2RlX2JpdF9pZHg6IHRoZSByZWxhdGl2ZSBiaXQgaW5kZXggd2l0aGluIHRoZSBub2RlJiMzOTtzIG1hcCByZWNvcmQKJiM0MzsgKgomIzQzOyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIGFscmVhZHkgY2xlYXIsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBoZnNfYm1hcF9jbGVhcl9iaXQoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG5vZGVfYml0X2lkeCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoZnNfYm1hcF9jdHggY3R4OwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZTsKJiM0MzsJdTggKmJtYXAsIG1hc2s7CiYjNDM7CiYjNDM7CXBhZ2UgPSBoZnNfYm1hcF9nZXRfbWFwX3BhZ2Uobm9kZSwgJmFtcDtjdHgsIG5vZGVfYml0X2lkeCAvIEJJVFNfUEVSX0JZVEUpOwomIzQzOwlpZiAoSVNfRVJSKHBhZ2UpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIocGFnZSk7CiYjNDM7CiYjNDM7CWJtYXAgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7CiYjNDM7CiYjNDM7CW1hc2sgPSAxICZsdDsmbHQ7ICg3IC0gKG5vZGVfYml0X2lkeCAlIEJJVFNfUEVSX0JZVEUpKTsKJiM0MzsKJiM0MzsJaWYgKCEoYm1hcFtjdHgub2ZmXSAmYW1wOyBtYXNrKSkgewomIzQzOwkJa3VubWFwX2xvY2FsKGJtYXApOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYm1hcFtjdHgub2ZmXSAmYW1wOz0gfm1hc2s7CiYjNDM7CXNldF9wYWdlX2RpcnR5KHBhZ2UpOwomIzQzOwlrdW5tYXBfbG9jYWwoYm1hcCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qIEdldCBhIHJlZmVyZW5jZSB0byBhIEIqVHJlZSBhbmQgZG8gc29tZSBpbml0aWFsIGNoZWNrcyAqLwogc3RydWN0IGhmc19idHJlZSAqaGZzX2J0cmVlX29wZW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGlkLCBidHJlZV9rZXljbXAga2V5Y21wKQogewpAQCAtMjMsNiAmIzQzOzEzOCw3IEBAIHN0cnVjdCBoZnNfYnRyZWUgKmhmc19idHJlZV9vcGVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBpZCwgYnRyZWVfa2V5Y21wIGtlCiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwomIzQzOwlzdHJ1Y3QgaGZzX2Jub2RlICpub2RlOwogCXVuc2lnbmVkIGludCBzaXplOwogCXUxNiBkYmxvY2s7CiAJc2VjdG9yX3Qgc3RhcnRfYmxvY2s7CkBAIC0xNTUsNiAmIzQzOzI3MSwyMCBAQCBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZQogCWt1bm1hcF9sb2NhbChoZWFkKTsKIAlmb2xpb191bmxvY2soZm9saW8pOwogCWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CiYjNDM7CW5vZGUgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCBIRlNfVFJFRV9IRUFEKTsKJiM0MzsJaWYgKElTX0VSUihub2RlKSkKJiM0MzsJCWdvdG8gZnJlZV9pbm9kZTsKJiM0MzsKJiM0MzsJaWYgKCFoZnNfYm1hcF90ZXN0X2JpdChub2RlLCBIRlNfVFJFRV9IRUFEKSkgewomIzQzOwkJcHJfd2FybigmIzM0Oyglcyk6ICVzIChjbmlkIDB4JXgpIGJpdG1hcCBjb3JydXB0ZWQsIGZvcmNpbmcgcmRvbmx5XG4mIzM0OywKJiM0MzsJCQlzYi0mZ3Q7c19pZCwgaWQgPT0gSEZTX0VYVF9DTklEID8gJiMzNDtleHRlbnRzJiMzNDsgOiAmIzM0O2NhdGFsb2cmIzM0OywgaWQpOwomIzQzOwkJcHJfd2FybigmIzM0O1J1biBmc2NrLmhmcyB0byByZXBhaXIuXG4mIzM0Oyk7CiYjNDM7CQlzYi0mZ3Q7c19mbGFncyB8PSBTQl9SRE9OTFk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaGZzX2Jub2RlX3B1dChub2RlKTsKJiM0MzsKIAlyZXR1cm4gdHJlZTsKIAogZmFpbF9mb2xpbzoKQEAgLTI4NSwxMSAmIzQzOzQxNSw5IEBAIGludCBoZnNfYm1hcF9yZXNlcnZlKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiByc3ZkX25vZGVzKQogc3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSkKIHsKIAlzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCAqbmV4dF9ub2RlOwotCXN0cnVjdCBwYWdlICoqcGFnZXA7CiYjNDM7CXN0cnVjdCBoZnNfYm1hcF9jdHggY3R4OwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAl1MzIgbmlkeCwgaWR4OwotCXVuc2lnbmVkIG9mZjsKLQl1MTYgb2ZmMTY7Ci0JdTE2IGxlbjsKIAl1OCAqZGF0YSwgYnl0ZSwgbTsKIAlpbnQgaSwgcmVzOwogCkBAIC0zMDEsMjQgJiM0Mzs0MjksMjYgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSkKIAlub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgbmlkeCk7CiAJaWYgKElTX0VSUihub2RlKSkKIAkJcmV0dXJuIG5vZGU7Ci0JbGVuID0gaGZzX2JyZWNfbGVub2ZmKG5vZGUsIDIsICZhbXA7b2ZmMTYpOwotCW9mZiA9IG9mZjE2OwogCi0Jb2ZmICYjNDM7PSBub2RlLSZndDtwYWdlX29mZnNldDsKLQlwYWdlcCA9IG5vZGUtJmd0O3BhZ2UgJiM0MzsgKG9mZiAmZ3Q7Jmd0OyBQQUdFX1NISUZUKTsKLQlkYXRhID0ga21hcF9sb2NhbF9wYWdlKCpwYWdlcCk7Ci0Jb2ZmICZhbXA7PSB+UEFHRV9NQVNLOwomIzQzOwlwYWdlID0gaGZzX2JtYXBfZ2V0X21hcF9wYWdlKG5vZGUsICZhbXA7Y3R4LCAwKTsKJiM0MzsJaWYgKElTX0VSUihwYWdlKSkgewomIzQzOwkJcmVzID0gUFRSX0VSUihwYWdlKTsKJiM0MzsJCWhmc19ibm9kZV9wdXQobm9kZSk7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUihyZXMpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRhdGEgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7CiAJaWR4ID0gMDsKIAogCWZvciAoOzspIHsKLQkJd2hpbGUgKGxlbikgewotCQkJYnl0ZSA9IGRhdGFbb2ZmXTsKJiM0MzsJCXdoaWxlIChjdHgubGVuKSB7CiYjNDM7CQkJYnl0ZSA9IGRhdGFbY3R4Lm9mZl07CiAJCQlpZiAoYnl0ZSAhPSAweGZmKSB7CiAJCQkJZm9yIChtID0gMHg4MCwgaSA9IDA7IGkgJmx0OyA4OyBtICZndDsmZ3Q7PSAxLCBpJiM0MzsmIzQzOykgewogCQkJCQlpZiAoIShieXRlICZhbXA7IG0pKSB7CiAJCQkJCQlpZHggJiM0Mzs9IGk7Ci0JCQkJCQlkYXRhW29mZl0gfD0gbTsKLQkJCQkJCXNldF9wYWdlX2RpcnR5KCpwYWdlcCk7CiYjNDM7CQkJCQkJZGF0YVtjdHgub2ZmXSB8PSBtOwomIzQzOwkJCQkJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwogCQkJCQkJa3VubWFwX2xvY2FsKGRhdGEpOwogCQkJCQkJdHJlZS0mZ3Q7ZnJlZV9ub2Rlcy0tOwogCQkJCQkJbWFya19pbm9kZV9kaXJ0eSh0cmVlLSZndDtpbm9kZSk7CkBAIC0zMjcsMTMgJiM0Mzs0NTcsMTQgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSkKIAkJCQkJfQogCQkJCX0KIAkJCX0KLQkJCWlmICgmIzQzOyYjNDM7b2ZmICZndDs9IFBBR0VfU0laRSkgewomIzQzOwkJCWlmICgmIzQzOyYjNDM7Y3R4Lm9mZiAmZ3Q7PSBQQUdFX1NJWkUpIHsKIAkJCQlrdW5tYXBfbG9jYWwoZGF0YSk7Ci0JCQkJZGF0YSA9IGttYXBfbG9jYWxfcGFnZSgqJiM0MzsmIzQzO3BhZ2VwKTsKLQkJCQlvZmYgPSAwOwomIzQzOwkJCQlwYWdlID0gbm9kZS0mZ3Q7cGFnZVsmIzQzOyYjNDM7Y3R4LnBhZ2VfaWR4XTsKJiM0MzsJCQkJZGF0YSA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTsKJiM0MzsJCQkJY3R4Lm9mZiA9IDA7CiAJCQl9CiAJCQlpZHggJiM0Mzs9IDg7Ci0JCQlsZW4tLTsKJiM0MzsJCQljdHgubGVuLS07CiAJCX0KIAkJa3VubWFwX2xvY2FsKGRhdGEpOwogCQluaWR4ID0gbm9kZS0mZ3Q7bmV4dDsKQEAgLTM0NywyMiAmIzQzOzQ3OCwyMiBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKQogCQkJcmV0dXJuIG5leHRfbm9kZTsKIAkJbm9kZSA9IG5leHRfbm9kZTsKIAotCQlsZW4gPSBoZnNfYnJlY19sZW5vZmYobm9kZSwgMCwgJmFtcDtvZmYxNik7Ci0JCW9mZiA9IG9mZjE2OwotCQlvZmYgJiM0Mzs9IG5vZGUtJmd0O3BhZ2Vfb2Zmc2V0OwotCQlwYWdlcCA9IG5vZGUtJmd0O3BhZ2UgJiM0MzsgKG9mZiAmZ3Q7Jmd0OyBQQUdFX1NISUZUKTsKLQkJZGF0YSA9IGttYXBfbG9jYWxfcGFnZSgqcGFnZXApOwotCQlvZmYgJmFtcDs9IH5QQUdFX01BU0s7CiYjNDM7CQlwYWdlID0gaGZzX2JtYXBfZ2V0X21hcF9wYWdlKG5vZGUsICZhbXA7Y3R4LCAwKTsKJiM0MzsJCWlmIChJU19FUlIocGFnZSkpIHsKJiM0MzsJCQlyZXMgPSBQVFJfRVJSKHBhZ2UpOwomIzQzOwkJCWhmc19ibm9kZV9wdXQobm9kZSk7CiYjNDM7CQkJcmV0dXJuIEVSUl9QVFIocmVzKTsKJiM0MzsJCX0KJiM0MzsJCWRhdGEgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7CiAJfQogfQogCiB2b2lkIGhmc19ibWFwX2ZyZWUoc3RydWN0IGhmc19ibm9kZSAqbm9kZSkKIHsKIAlzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlOwotCXN0cnVjdCBwYWdlICpwYWdlOwogCXUxNiBvZmYsIGxlbjsKIAl1MzIgbmlkeDsKLQl1OCAqZGF0YSwgYnl0ZSwgbTsKJiM0MzsJaW50IHJlczsKIAogCWhmc19kYmcoJiMzNDtub2RlICV1XG4mIzM0Oywgbm9kZS0mZ3Q7dGhpcyk7CiAJdHJlZSA9IG5vZGUtJmd0O3RyZWU7CkBAIC0zOTYsMjMgJiM0Mzs1MjcsMTggQEAgdm9pZCBoZnNfYm1hcF9mcmVlKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpCiAJCX0KIAkJbGVuID0gaGZzX2JyZWNfbGVub2ZmKG5vZGUsIDAsICZhbXA7b2ZmKTsKIAl9Ci0Jb2ZmICYjNDM7PSBub2RlLSZndDtwYWdlX29mZnNldCAmIzQzOyBuaWR4IC8gODsKLQlwYWdlID0gbm9kZS0mZ3Q7cGFnZVtvZmYgJmd0OyZndDsgUEFHRV9TSElGVF07Ci0JZGF0YSA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTsKLQlvZmYgJmFtcDs9IH5QQUdFX01BU0s7Ci0JbSA9IDEgJmx0OyZsdDsgKH5uaWR4ICZhbXA7IDcpOwotCWJ5dGUgPSBkYXRhW29mZl07Ci0JaWYgKCEoYnl0ZSAmYW1wOyBtKSkgewomIzQzOwomIzQzOwlyZXMgPSBoZnNfYm1hcF9jbGVhcl9iaXQobm9kZSwgbmlkeCk7CiYjNDM7CWlmIChyZXMgPT0gLUVJTlZBTCkgewogCQlwcl9jcml0KCYjMzQ7dHJ5aW5nIHRvIGZyZWUgZnJlZSBibm9kZSAldSglZClcbiYjMzQ7LAotCQkJbm9kZS0mZ3Q7dGhpcywgbm9kZS0mZ3Q7dHlwZSk7Ci0JCWt1bm1hcF9sb2NhbChkYXRhKTsKLQkJaGZzX2Jub2RlX3B1dChub2RlKTsKLQkJcmV0dXJuOwomIzQzOwkJCW5pZHgsIG5vZGUtJmd0O3R5cGUpOwomIzQzOwl9IGVsc2UgaWYgKHJlcykgewomIzQzOwkJcHJfY3JpdCgmIzM0O2ZhaWwgdG8gZnJlZSBibm9kZSAldSglZClcbiYjMzQ7LAomIzQzOwkJCW5pZHgsIG5vZGUtJmd0O3R5cGUpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJdHJlZS0mZ3Q7ZnJlZV9ub2RlcyYjNDM7JiM0Mzs7CiYjNDM7CQltYXJrX2lub2RlX2RpcnR5KHRyZWUtJmd0O2lub2RlKTsKIAl9Ci0JZGF0YVtvZmZdID0gYnl0ZSAmYW1wOyB+bTsKLQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKLQlrdW5tYXBfbG9jYWwoZGF0YSk7CiYjNDM7CiAJaGZzX2Jub2RlX3B1dChub2RlKTsKLQl0cmVlLSZndDtmcmVlX25vZGVzJiM0MzsmIzQzOzsKLQltYXJrX2lub2RlX2RpcnR5KHRyZWUtJmd0O2lub2RlKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2hmcy9idHJlZS5oIGIvZnMvaGZzL2J0cmVlLmgKaW5kZXggOTliZTg1OGIyNDQ2NTAuLmI0YzNmMmEzMTQ3MTAwIDEwMDY0NAotLS0gYS9mcy9oZnMvYnRyZWUuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnMvYnRyZWUuaApAQCAtMTI5LDMgJiM0MzsxMjksNDMgQEAgZXh0ZXJuIGludCBfX2hmc19icmVjX2ZpbmQoc3RydWN0IGhmc19ibm9kZSAqYm5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCk7CiBleHRlcm4gaW50IGhmc19icmVjX2ZpbmQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKTsKIGV4dGVybiBpbnQgaGZzX2JyZWNfcmVhZChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHZvaWQgKnJlYywgdTMyIHJlY19sZW4pOwogZXh0ZXJuIGludCBoZnNfYnJlY19nb3RvKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgaW50IGNudCk7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIGlzX2Jub2RlX29mZnNldF92YWxpZChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgb2ZmKQomIzQzO3sKJiM0MzsJYm9vbCBpc192YWxpZDsKJiM0MzsKJiM0MzsJaWYgKCFub2RlIHx8ICFub2RlLSZndDt0cmVlKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpc192YWxpZCA9IG9mZiAmbHQ7IG5vZGUtJmd0O3RyZWUtJmd0O25vZGVfc2l6ZTsKJiM0MzsKJiM0MzsJaWYgKCFpc192YWxpZCkgewomIzQzOwkJcHJfZXJyKCYjMzQ7aW52YWxpZCBvZmZzZXQ6IGlkICV1LCB0eXBlICUjeCwgaCAldSwgc3ogJXUsIG9mZiAldVxuJiMzNDssCiYjNDM7CQkgICAgICAgbm9kZS0mZ3Q7dGhpcywgbm9kZS0mZ3Q7dHlwZSwgbm9kZS0mZ3Q7aGVpZ2h0LAomIzQzOwkJICAgICAgIG5vZGUtJmd0O3RyZWUtJmd0O25vZGVfc2l6ZSwgb2ZmKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gaXNfdmFsaWQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdTMyIGNoZWNrX2FuZF9jb3JyZWN0X3JlcXVlc3RlZF9sZW5ndGgoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG9mZiwgdTMyIGxlbikKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBub2RlX3NpemU7CiYjNDM7CiYjNDM7CWlmICghaXNfYm5vZGVfb2Zmc2V0X3ZhbGlkKG5vZGUsIG9mZikpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbm9kZV9zaXplID0gbm9kZS0mZ3Q7dHJlZS0mZ3Q7bm9kZV9zaXplOwomIzQzOwomIzQzOwlpZiAoKHU2NClvZmYgJiM0MzsgbGVuICZndDsgbm9kZV9zaXplKSB7CiYjNDM7CQl1MzIgbmV3X2xlbiA9IG5vZGVfc2l6ZSAtIG9mZjsKJiM0MzsKJiM0MzsJCXByX2VycigmIzM0O2NvcnJlY3RlZCBsZW46IGlkICV1LCB0eXBlICUjeCwgaCAldSwgc3ogJXUsIG9mZiAldSwgbGVuICV1LSZndDsldVxuJiMzNDssCiYjNDM7CQkgICAgICAgbm9kZS0mZ3Q7dGhpcywgbm9kZS0mZ3Q7dHlwZSwgbm9kZS0mZ3Q7aGVpZ2h0LAomIzQzOwkJICAgICAgIG5vZGVfc2l6ZSwgb2ZmLCBsZW4sIG5ld19sZW4pOwomIzQzOwomIzQzOwkJcmV0dXJuIG5ld19sZW47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGxlbjsKJiM0Mzt9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaCBiL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oCmluZGV4IDQ1ZmI0YzlmZjlmNWVlLi5kNmE2MTVlNzRiMjZlMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmgKQEAgLTUxMCwxNCAmIzQzOzUxMCwyMSBAQCBzdHJ1Y3QgaGZzX2J0cmVlX2hlYWRlcl9yZWMgewogCQkJCQkJICAgYi10cmVlIGJ1dCBub3QgaW4gZXh0ZW50cwogCQkJCQkJICAgYi10cmVlIChoZnNwbHVzKS4gKi8KIAomIzQzOy8qIEhGUyBCVHJlZSBtaXNjIGluZm8gKi8KJiM0MzsjZGVmaW5lIEhGU19UUkVFX0hFQUQJCQkJMAomIzQzOyNkZWZpbmUgSEZTX0JUUkVFX0hEUl9NQVBfUkVDX0lOREVYCQkyCS8qIE1hcCAoYml0bWFwKSByZWNvcmQgaW4gSGVhZGVyIG5vZGUgKi8KJiM0MzsjZGVmaW5lIEhGU19CVFJFRV9NQVBfTk9ERV9SRUNfSU5ERVgJCTAJLyogTWFwIHJlY29yZCBpbiBNYXAgTm9kZSAqLwomIzQzOwogLyogSEZTJiM0MzsgQlRyZWUgbWlzYyBpbmZvICovCi0jZGVmaW5lIEhGU1BMVVNfVFJFRV9IRUFECQkJMAomIzQzOyNkZWZpbmUgSEZTUExVU19UUkVFX0hFQUQJCQlIRlNfVFJFRV9IRUFECiAjZGVmaW5lIEhGU1BMVVNfTk9ERV9NWFNaCQkJMzI3NjgKICNkZWZpbmUgSEZTUExVU19OT0RFX01JTlNaCQkJNTEyCiAjZGVmaW5lIEhGU1BMVVNfQVRUUl9UUkVFX05PREVfU0laRQkJODE5MgogI2RlZmluZSBIRlNQTFVTX0JUUkVFX0hEUl9OT0RFX1JFQ1NfQ09VTlQJMwotI2RlZmluZSBIRlNQTFVTX0JUUkVFX0hEUl9NQVBfUkVDX0lOREVYCQkyCS8qIE1hcCAoYml0bWFwKSByZWNvcmQgaW4gSGVhZGVyIG5vZGUgKi8KLSNkZWZpbmUgSEZTUExVU19CVFJFRV9NQVBfTk9ERV9SRUNfSU5ERVgJMAkvKiBNYXAgcmVjb3JkIGluIE1hcCBOb2RlICovCiYjNDM7LyogTWFwIChiaXRtYXApIHJlY29yZCBpbiBIZWFkZXIgbm9kZSAqLwomIzQzOyNkZWZpbmUgSEZTUExVU19CVFJFRV9IRFJfTUFQX1JFQ19JTkRFWAkJSEZTX0JUUkVFX0hEUl9NQVBfUkVDX0lOREVYCiYjNDM7LyogTWFwIHJlY29yZCBpbiBNYXAgTm9kZSAqLwomIzQzOyNkZWZpbmUgSEZTUExVU19CVFJFRV9NQVBfTk9ERV9SRUNfSU5ERVgJSEZTX0JUUkVFX01BUF9OT0RFX1JFQ19JTkRFWAogI2RlZmluZSBIRlNQTFVTX0JUUkVFX0hEUl9VU0VSX0JZVEVTCQkxMjgKICNkZWZpbmUgSEZTUExVU19CVFJFRV9NQVBfTk9ERV9SRUNTX0NPVU5UCTIKICNkZWZpbmUgSEZTUExVU19CVFJFRV9NQVBfTk9ERV9SRVNFUlZFRF9CWVRFUwkyCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDEzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MjYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSEZTIEZpbGVzeXN0ZW0gRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBtYWtpbmcgc29tZSBwcmV0dHkgZnVuZGFtZW50YWwgY2hhbmdlcyB0byB0aGUgSEZTIGZpbGVzeXN0ZW0gZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHRvdWNoaW5nIGNvcmUgY29tcG9uZW50czogYGZzL2hmcy9idHJlZS5jYCwgYGZzL2hmcy9ibm9kZS5jYCwgYGZzL2hmcy9idHJlZS5oYCwgYW5kIGBpbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaGAuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBtaW5vciB0d2Vhazsgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgZGlyZWN0IG1vZGlmaWNhdGlvbnMgdG8gaG93IHRoZSBIRlMgZHJpdmVyIGludGVyYWN0cyB3aXRoIGl0cyBCLXRyZWUgc3RydWN0dXJlIGFuZCBiaXRtYXAgbWFuYWdlbWVudC4KClRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvbnRleHQgc3RydWN0dXJlLCBgc3RydWN0IGhmc19ibWFwX2N0eGAsIGFuZCBhIG5ldyBmdW5jdGlvbiwgYGhmc19ibWFwX2dldF9tYXBfcGFnZWAsIHdoaWNoIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIGFzIGFuIGF0dGVtcHQgdG8gc2FmZWx5IG1hbmFnZSBtZW1vcnkgYWNjZXNzIHdpdGhpbiB0aGUgQi10cmVlIGNvbnRleHQuIEl0IGFsc28gZGVmaW5lcyBgaGZzX2JtYXBfdGVzdF9iaXRgIGFuZCBgaGZzX2JtYXBfY2xlYXJfYml0YCwgd2hpY2ggSSBjYW4gaW5mZXIgYXJlIGJpdCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zIHNwZWNpZmljYWxseSB0YWlsb3JlZCBmb3IgYml0bWFwIG1hbmFnZW1lbnQsIGxpa2VseSByZWxhdGVkIHRvIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB3aXRoaW4gdGhlIGZpbGVzeXN0ZW0uIENyaXRpY2FsbHksIGV4aXN0aW5nIGZ1bmN0aW9ucyBsaWtlIGBoZnNfYnRyZWVfb3BlbmAsIGBoZnNfYm1hcF9hbGxvY2AsIGFuZCBgaGZzX2JtYXBfZnJlZWAgYXJlIGJlaW5nIHVwZGF0ZWQgdG8gdXNlIHRoZXNlIG5ldyBmdW5jdGlvbnMuIFRoaXMgbWVhbnMgYSBzaWduaWZpY2FudCBtb2RpZmljYXRpb24gdG8gdGhlIGV4aXN0aW5nIGNvbnRyb2wgZmxvdy4KCkdpdmVuIHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzIGFuZCB0aGUgY3JpdGljYWwgbmF0dXJlIG9mIHRoZSB0b3VjaGVkIGNvZGUsIHRoaXMgaXMgZGVmaW5pdGVseSBXb3J0aEZ1enppbmcuIEl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSBIRlMgZmlsZXN5c3RlbS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0byB0YXJnZXQgZHVyaW5nIGZ1enppbmc6CgoqICAgYGhmc19ibWFwX2dldF9tYXBfcGFnZWAgKHN0YXRpYykKKiAgIGBoZnNfYm1hcF90ZXN0X2JpdGAgKHN0YXRpYykKKiAgIGBoZnNfYm1hcF9jbGVhcl9iaXRgIChzdGF0aWMpCiogICBgaGZzX2J0cmVlX29wZW5gCiogICBgaGZzX2JtYXBfYWxsb2NgCiogICBgaGZzX2JtYXBfZnJlZWAKCkkgbmVlZCB0byBjb25maXJtIHRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlLCBhbmQgd2hhdCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBmcy9oZnMvYnRyZWUuY2AgYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyBsaW5rZWQgaW4gdGhlIGJ1aWxkLiBUaGUgbmVjZXNzYXJ5IGNvbmZpZyBpcyBgQ09ORklHX0hGU19GU2AuIEkmIzM5O2xsIHZlcmlmeSBhbGwgdGhpcyB1c2luZyBgZ3JlcHBlcmAgYXMgYSBmaW5hbCBjaGVjaywgbWFraW5nIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhGU19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2hmcy9LY29uZmlnOjI6Y29uZmlnIEhGU19GU1xuZnMvaGZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIE1hY2ludG9zaCBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTM6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY5OQoJCQkJCQkJb3V0cHV0OiAxNzYKCQkJCQkJCXRob3VnaHRzOiA1MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gSEZTIEZpbGVzeXN0ZW0gRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIHRoZSBjb25maWcgaW5kaWNhdGVzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYEhGU19GU2AuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuIExvb2tpbmcgYXQgdGhlIG1vZGlmaWVkIGZpbGVzLCBpdCYjMzk7cyBjbGVhciB0aGVzZSBjaGFuZ2VzIGFyZSB3aXRoaW4gdGhlIGBmcy9oZnNgIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IGBibm9kZS5jYCwgYGJ0cmVlLmNgLCBgYnRyZWUuaGAsIGFuZCBgaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmhgLiBBbGwgb2YgdGhpcyBjb25maXJtcyB3ZSYjMzk7cmUgaW5kZWVkIGZvY3VzZWQgb24gYEhGU19GU2AuCgpOb3csIEkgbmVlZCB0byBpZGVudGlmeSBrZXkgZnVuY3Rpb25zLiBJIHNlZSBgaGZzX2J0cmVlX29wZW5gLCBgaGZzX2JtYXBfYWxsb2NgLCBhbmQgYGhmc19ibWFwX2ZyZWVgIGhhdmUgYmVlbiB0b3VjaGVkLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXNlIGFyZSBob3QtcGF0aCBmdW5jdGlvbnMsIGJlY2F1c2UgdGhhdCB3b3VsZCBtYWtlIHRoZW0gaWRlYWwgZm9yIGZ1enppbmcuIGBoZnNfYnRyZWVfb3BlbmAgaXMgY2FsbGVkIGR1cmluZyBtb3VudCBvciB3aGVuIG9wZW5pbmcgYSBidHJlZSDigJMgZGVmaW5pdGVseSBhIGdvb2QgY2FuZGlkYXRlLiBgaGZzX2JtYXBfYWxsb2NgIGhhbmRsZXMgYnRyZWUgbm9kZSBhbGxvY2F0aW9uLCBhbmQgYGhmc19ibWFwX2ZyZWVgIGRvZXMgdGhlIG9wcG9zaXRlOiByZWxlYXNpbmcgdGhvc2Ugbm9kZXMuIEJvdGggYXJlIGNvcmUgb3BlcmF0aW9ucywgdmVyeSBnb29kLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgYXJlIGluZGVlZCB0aGUgcmlnaHQgb25lcyB0byBmb2N1cyBvbi4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIHN0YXRpYyBmdW5jdGlvbnMsIGxpa2UgYGhmc19ibWFwX2dldF9tYXBfcGFnZWAsIGBoZnNfYm1hcF90ZXN0X2JpdGAsIGFuZCBgaGZzX2JtYXBfY2xlYXJfYml0YC4gSXQmIzM5O3MgZ2VuZXJhbGx5IGJldHRlciB0byBmb2N1cyBvbiB0aGUgbm9uLXN0YXRpYywgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGVtLCB1bmxlc3MgdGhlIHN0YXRpY3MgYXJlIHN1YnN0YW50aWFsIGluIHRoZWlyIG93biByaWdodC4gQW5kIGl0IGxvb2tzIGxpa2UgdGhlc2UgYXJlIHN0YXRpYyAqYW5kKiBoYXZlIGJlZW4gbW9kaWZpZWQuIFRoZXkgYXJlIGFsc28gbmV3LiBJIHNlZSBgaGZzX2J0cmVlX29wZW5gLCBgaGZzX2JtYXBfYWxsb2NgLCBhbmQgYGhmc19ibWFwX2ZyZWVgIGFyZSBhbHNvIG1vZGlmaWVkLiBTbywgYWxsIG9mIHRoZXNlIGFyZSBjYW5kaWRhdGVzLgoKU28sIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTtsbCBsaXN0OgotIGBoZnNfYnRyZWVfb3BlbmAKLSBgaGZzX2JtYXBfYWxsb2NgCi0gYGhmc19ibWFwX2ZyZWVgCi0gYGhmc19ibWFwX2dldF9tYXBfcGFnZWAKLSBgaGZzX2JtYXBfdGVzdF9iaXRgCi0gYGhmc19ibWFwX2NsZWFyX2JpdGAKCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBgaGZzX2JtYXBfZ2V0X21hcF9wYWdlYCBzaG91bGQgYmUgaW4gYGZzL2hmcy9idHJlZS5jYC4gWWVwLCBpdCYjMzk7cyB0aGVyZS4gQWxyaWdodCwgdGltZSB0byBzZXQgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hmc19idHJlZV9vcGVuJiMzNDssCiAgICAmIzM0O2hmc19ibWFwX2FsbG9jJiMzNDssCiAgICAmIzM0O2hmc19ibWFwX2ZyZWUmIzM0OywKICAgICYjMzQ7aGZzX2JtYXBfZ2V0X21hcF9wYWdlJiMzNDssCiAgICAmIzM0O2hmc19ibWFwX3Rlc3RfYml0JiMzNDssCiAgICAmIzM0O2hmc19ibWFwX2NsZWFyX2JpdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgSEZTIGZpbGVzeXN0ZW0mIzM5O3MgYnRyZWUgbWFwIGhhbmRsaW5nIGxvZ2ljLiBJdCBhZGRzIG5ldyBmdW5jdGlvbnMgdG8gc2FmZWx5IGdldCBtYXAgcGFnZXMsIHRlc3QgYml0cywgYW5kIGNsZWFyIGJpdHMsIGFuZCBtb2RpZmllcyBub2RlIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgdG8gdXNlIHRoZXNlIG5ldyBmdW5jdGlvbnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyB0aGUgZmlsZXN5c3RlbSBtYW5hZ2VzIGl0cyBpbnRlcm5hbCBidHJlZSBzdHJ1Y3R1cmVzLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGZzX2J0cmVlX29wZW4mIzM0OywKICAgICYjMzQ7aGZzX2JtYXBfYWxsb2MmIzM0OywKICAgICYjMzQ7aGZzX2JtYXBfZnJlZSYjMzQ7LAogICAgJiMzNDtoZnNfYm1hcF9nZXRfbWFwX3BhZ2UmIzM0OywKICAgICYjMzQ7aGZzX2JtYXBfdGVzdF9iaXQmIzM0OywKICAgICYjMzQ7aGZzX2JtYXBfY2xlYXJfYml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBIRlMgZmlsZXN5c3RlbSYjMzk7cyBidHJlZSBtYXAgaGFuZGxpbmcgbG9naWMuIEl0IGFkZHMgbmV3IGZ1bmN0aW9ucyB0byBzYWZlbHkgZ2V0IG1hcCBwYWdlcywgdGVzdCBiaXRzLCBhbmQgY2xlYXIgYml0cywgYW5kIG1vZGlmaWVzIG5vZGUgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyB0byB1c2UgdGhlc2UgbmV3IGZ1bmN0aW9ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IHRoZSBmaWxlc3lzdGVtIG1hbmFnZXMgaXRzIGludGVybmFsIGJ0cmVlIHN0cnVjdHVyZXMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgZmlsZXN5c3RlbSBvcGVyYXRpb25zIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTZUMTM6MTY6MDMuMTA2MDU4MTAxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczODIxNzI4OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGZzX2J0cmVlX29wZW5cIixcbiAgICBcImhmc19ibWFwX2FsbG9jXCIsXG4gICAgXCJoZnNfYm1hcF9mcmVlXCIsXG4gICAgXCJoZnNfYm1hcF9nZXRfbWFwX3BhZ2VcIixcbiAgICBcImhmc19ibWFwX3Rlc3RfYml0XCIsXG4gICAgXCJoZnNfYm1hcF9jbGVhcl9iaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgSEZTIGZpbGVzeXN0ZW0ncyBidHJlZSBtYXAgaGFuZGxpbmcgbG9naWMuIEl0IGFkZHMgbmV3IGZ1bmN0aW9ucyB0byBzYWZlbHkgZ2V0IG1hcCBwYWdlcywgdGVzdCBiaXRzLCBhbmQgY2xlYXIgYml0cywgYW5kIG1vZGlmaWVzIG5vZGUgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyB0byB1c2UgdGhlc2UgbmV3IGZ1bmN0aW9ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IHRoZSBmaWxlc3lzdGVtIG1hbmFnZXMgaXRzIGludGVybmFsIGJ0cmVlIHN0cnVjdHVyZXMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgZmlsZXN5c3RlbSBvcGVyYXRpb25zIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxMzoxNjowMy4xMDYwNjM5MjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3NjkwODIzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNiMmNkMDc4MTE1MGVlYjZhYTQwNzNlODljYzVjMDBiMWIyY2Q2MjNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMTYgMTM6MTY6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvaGZzL2Jub2RlLmMgYi9mcy9oZnMvYm5vZGUuY1xcbmluZGV4IGRhOGU1MzQyYzkxY2MyLi4xYjMzMTEwOGQ5YzAxYiAxMDA2NDRcXG4tLS0gYS9mcy9oZnMvYm5vZGUuY1xcbisrKyBiL2ZzL2hmcy9ibm9kZS5jXFxuQEAgLTE1LDQ4ICsxNSw2IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwiYnRyZWUuaFxcXCJcXG4gXFxuLXN0YXRpYyBpbmxpbmVcXG4tYm9vbCBpc19ibm9kZV9vZmZzZXRfdmFsaWQoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG9mZilcXG4te1xcbi1cXHRib29sIGlzX3ZhbGlkID0gb2ZmIFxcdTAwM2Mgbm9kZS1cXHUwMDNldHJlZS1cXHUwMDNlbm9kZV9zaXplO1xcbi1cXG4tXFx0aWYgKCFpc192YWxpZCkge1xcbi1cXHRcXHRwcl9lcnIoXFxcInJlcXVlc3RlZCBpbnZhbGlkIG9mZnNldDogXFxcIlxcbi1cXHRcXHQgICAgICAgXFxcIk5PREU6IGlkICV1LCB0eXBlICUjeCwgaGVpZ2h0ICV1LCBcXFwiXFxuLVxcdFxcdCAgICAgICBcXFwibm9kZV9zaXplICV1LCBvZmZzZXQgJXVcXFxcblxcXCIsXFxuLVxcdFxcdCAgICAgICBub2RlLVxcdTAwM2V0aGlzLCBub2RlLVxcdTAwM2V0eXBlLCBub2RlLVxcdTAwM2VoZWlnaHQsXFxuLVxcdFxcdCAgICAgICBub2RlLVxcdTAwM2V0cmVlLVxcdTAwM2Vub2RlX3NpemUsIG9mZik7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiBpc192YWxpZDtcXG4tfVxcbi1cXG4tc3RhdGljIGlubGluZVxcbi11MzIgY2hlY2tfYW5kX2NvcnJlY3RfcmVxdWVzdGVkX2xlbmd0aChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgb2ZmLCB1MzIgbGVuKVxcbi17XFxuLVxcdHVuc2lnbmVkIGludCBub2RlX3NpemU7XFxuLVxcbi1cXHRpZiAoIWlzX2Jub2RlX29mZnNldF92YWxpZChub2RlLCBvZmYpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdG5vZGVfc2l6ZSA9IG5vZGUtXFx1MDAzZXRyZWUtXFx1MDAzZW5vZGVfc2l6ZTtcXG4tXFxuLVxcdGlmICgodTY0KW9mZiArIGxlbiBcXHUwMDNlIG5vZGVfc2l6ZSkge1xcbi1cXHRcXHR1MzIgbmV3X2xlbiA9IG5vZGVfc2l6ZSAtIG9mZjtcXG4tXFxuLVxcdFxcdHByX2VycihcXFwicmVxdWVzdGVkIGxlbmd0aCBoYXMgYmVlbiBjb3JyZWN0ZWQ6IFxcXCJcXG4tXFx0XFx0ICAgICAgIFxcXCJOT0RFOiBpZCAldSwgdHlwZSAlI3gsIGhlaWdodCAldSwgXFxcIlxcbi1cXHRcXHQgICAgICAgXFxcIm5vZGVfc2l6ZSAldSwgb2Zmc2V0ICV1LCBcXFwiXFxuLVxcdFxcdCAgICAgICBcXFwicmVxdWVzdGVkX2xlbiAldSwgY29ycmVjdGVkX2xlbiAldVxcXFxuXFxcIixcXG4tXFx0XFx0ICAgICAgIG5vZGUtXFx1MDAzZXRoaXMsIG5vZGUtXFx1MDAzZXR5cGUsIG5vZGUtXFx1MDAzZWhlaWdodCxcXG4tXFx0XFx0ICAgICAgIG5vZGUtXFx1MDAzZXRyZWUtXFx1MDAzZW5vZGVfc2l6ZSwgb2ZmLCBsZW4sIG5ld19sZW4pO1xcbi1cXG4tXFx0XFx0cmV0dXJuIG5ld19sZW47XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiBsZW47XFxuLX1cXG4tXFxuIHZvaWQgaGZzX2Jub2RlX3JlYWQoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdm9pZCAqYnVmLCB1MzIgb2ZmLCB1MzIgbGVuKVxcbiB7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbmRpZmYgLS1naXQgYS9mcy9oZnMvYnRyZWUuYyBiL2ZzL2hmcy9idHJlZS5jXFxuaW5kZXggMmViMzdhMmY2NGU4NjYuLjQxYjRlOGZjOTQ2MzdkIDEwMDY0NFxcbi0tLSBhL2ZzL2hmcy9idHJlZS5jXFxuKysrIGIvZnMvaGZzL2J0cmVlLmNcXG5AQCAtMTUsNiArMTUsMTIxIEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwiYnRyZWUuaFxcXCJcXG4gXFxuKy8qIENvbnRleHQgZm9yIGl0ZXJhdGluZyBiLXRyZWUgbWFwIHBhZ2VzXFxuKyAqIEBwYWdlX2lkeDogVGhlIGluZGV4IG9mIHRoZSBwYWdlIHdpdGhpbiB0aGUgYi1ub2RlJ3MgcGFnZSBhcnJheVxcbisgKiBAb2ZmOiBUaGUgYnl0ZSBvZmZzZXQgd2l0aGluIHRoZSBtYXBwZWQgcGFnZVxcbisgKiBAbGVuOiBUaGUgcmVtYWluaW5nIGxlbmd0aCBvZiB0aGUgbWFwIHJlY29yZFxcbisgKi9cXG4rc3RydWN0IGhmc19ibWFwX2N0eCB7XFxuK1xcdHVuc2lnbmVkIGludCBwYWdlX2lkeDtcXG4rXFx0dW5zaWduZWQgaW50IG9mZjtcXG4rXFx0dTE2IGxlbjtcXG4rfTtcXG4rXFxuKy8qXFxuKyAqIEZpbmRzIHRoZSBzcGVjaWZpYyBwYWdlIGNvbnRhaW5pbmcgdGhlIHJlcXVlc3RlZCBieXRlIG9mZnNldCB3aXRoaW4gdGhlIG1hcFxcbisgKiByZWNvcmQuIEF1dG9tYXRpY2FsbHkgaGFuZGxlcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGhlYWRlciBhbmQgbWFwIG5vZGVzLlxcbisgKiBSZXR1cm5zIHRoZSBzdHJ1Y3QgcGFnZSBwb2ludGVyLCBvciBhbiBFUlJfUFRSIG9uIGZhaWx1cmUuXFxuKyAqIE5vdGU6IFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIG1hcHBpbmcvdW5tYXBwaW5nIHRoZSByZXR1cm5lZCBwYWdlLlxcbisgKi9cXG4rc3RhdGljIHN0cnVjdCBwYWdlICpoZnNfYm1hcF9nZXRfbWFwX3BhZ2Uoc3RydWN0IGhmc19ibm9kZSAqbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaGZzX2JtYXBfY3R4ICpjdHgsXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTMyIGJ5dGVfb2Zmc2V0KVxcbit7XFxuK1xcdHUxNiByZWNfaWR4LCBvZmYxNjtcXG4rXFx0dW5zaWduZWQgaW50IHBhZ2Vfb2ZmO1xcbitcXG4rXFx0aWYgKG5vZGUtXFx1MDAzZXRoaXMgPT0gSEZTX1RSRUVfSEVBRCkge1xcbitcXHRcXHRpZiAobm9kZS1cXHUwMDNldHlwZSAhPSBIRlNfTk9ERV9IRUFERVIpIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJoZnM6IGludmFsaWQgYnRyZWUgaGVhZGVyIG5vZGVcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZWNfaWR4ID0gSEZTX0JUUkVFX0hEUl9NQVBfUkVDX0lOREVYO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAobm9kZS1cXHUwMDNldHlwZSAhPSBIRlNfTk9ERV9NQVApIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJoZnM6IGludmFsaWQgYnRyZWUgbWFwIG5vZGVcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZWNfaWR4ID0gSEZTX0JUUkVFX01BUF9OT0RFX1JFQ19JTkRFWDtcXG4rXFx0fVxcbitcXG4rXFx0Y3R4LVxcdTAwM2VsZW4gPSBoZnNfYnJlY19sZW5vZmYobm9kZSwgcmVjX2lkeCwgXFx1MDAyNm9mZjE2KTtcXG4rXFx0aWYgKCFjdHgtXFx1MDAzZWxlbilcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XFxuK1xcbitcXHRpZiAoIWlzX2Jub2RlX29mZnNldF92YWxpZChub2RlLCBvZmYxNikpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FSU8pO1xcbitcXG4rXFx0Y3R4LVxcdTAwM2VsZW4gPSBjaGVja19hbmRfY29ycmVjdF9yZXF1ZXN0ZWRfbGVuZ3RoKG5vZGUsIG9mZjE2LCBjdHgtXFx1MDAzZWxlbik7XFxuK1xcbitcXHRpZiAoYnl0ZV9vZmZzZXQgXFx1MDAzZT0gY3R4LVxcdTAwM2VsZW4pXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbitcXG4rXFx0cGFnZV9vZmYgPSAodTMyKW9mZjE2ICsgbm9kZS1cXHUwMDNlcGFnZV9vZmZzZXQgKyBieXRlX29mZnNldDtcXG4rXFx0Y3R4LVxcdTAwM2VwYWdlX2lkeCA9IHBhZ2Vfb2ZmIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcdGN0eC1cXHUwMDNlb2ZmID0gcGFnZV9vZmYgXFx1MDAyNiB+UEFHRV9NQVNLO1xcbitcXG4rXFx0cmV0dXJuIG5vZGUtXFx1MDAzZXBhZ2VbY3R4LVxcdTAwM2VwYWdlX2lkeF07XFxuK31cXG4rXFxuKy8qKlxcbisgKiBoZnNfYm1hcF90ZXN0X2JpdCAtIHRlc3QgYSBiaXQgaW4gdGhlIGItdHJlZSBtYXBcXG4rICogQG5vZGU6IHRoZSBiLXRyZWUgbm9kZSBjb250YWluaW5nIHRoZSBtYXAgcmVjb3JkXFxuKyAqIEBub2RlX2JpdF9pZHg6IHRoZSByZWxhdGl2ZSBiaXQgaW5kZXggd2l0aGluIHRoZSBub2RlJ3MgbWFwIHJlY29yZFxcbisgKlxcbisgKiBSZXR1cm5zIHRydWUgaWYgc2V0LCBmYWxzZSBpZiBjbGVhciBvciBvbiBmYWlsdXJlLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgaGZzX2JtYXBfdGVzdF9iaXQoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG5vZGVfYml0X2lkeClcXG4re1xcbitcXHRzdHJ1Y3QgaGZzX2JtYXBfY3R4IGN0eDtcXG4rXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuK1xcdHU4ICpibWFwLCBieXRlLCBtYXNrO1xcbitcXG4rXFx0cGFnZSA9IGhmc19ibWFwX2dldF9tYXBfcGFnZShub2RlLCBcXHUwMDI2Y3R4LCBub2RlX2JpdF9pZHggLyBCSVRTX1BFUl9CWVRFKTtcXG4rXFx0aWYgKElTX0VSUihwYWdlKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Ym1hcCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG4rXFx0Ynl0ZSA9IGJtYXBbY3R4Lm9mZl07XFxuK1xcdGt1bm1hcF9sb2NhbChibWFwKTtcXG4rXFxuK1xcdG1hc2sgPSAxIFxcdTAwM2NcXHUwMDNjICg3IC0gKG5vZGVfYml0X2lkeCAlIEJJVFNfUEVSX0JZVEUpKTtcXG4rXFx0cmV0dXJuIChieXRlIFxcdTAwMjYgbWFzaykgIT0gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGhmc19ibWFwX2NsZWFyX2JpdCAtIGNsZWFyIGEgYml0IGluIHRoZSBiLXRyZWUgbWFwXFxuKyAqIEBub2RlOiB0aGUgYi10cmVlIG5vZGUgY29udGFpbmluZyB0aGUgbWFwIHJlY29yZFxcbisgKiBAbm9kZV9iaXRfaWR4OiB0aGUgcmVsYXRpdmUgYml0IGluZGV4IHdpdGhpbiB0aGUgbm9kZSdzIG1hcCByZWNvcmRcXG4rICpcXG4rICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FSU5WQUwgaWYgYWxyZWFkeSBjbGVhciwgb3IgbmVnYXRpdmUgZXJyb3IgY29kZS5cXG4rICovXFxuK3N0YXRpYyBpbnQgaGZzX2JtYXBfY2xlYXJfYml0KHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBub2RlX2JpdF9pZHgpXFxuK3tcXG4rXFx0c3RydWN0IGhmc19ibWFwX2N0eCBjdHg7XFxuK1xcdHN0cnVjdCBwYWdlICpwYWdlO1xcbitcXHR1OCAqYm1hcCwgbWFzaztcXG4rXFxuK1xcdHBhZ2UgPSBoZnNfYm1hcF9nZXRfbWFwX3BhZ2Uobm9kZSwgXFx1MDAyNmN0eCwgbm9kZV9iaXRfaWR4IC8gQklUU19QRVJfQllURSk7XFxuK1xcdGlmIChJU19FUlIocGFnZSkpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHBhZ2UpO1xcbitcXG4rXFx0Ym1hcCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG4rXFxuK1xcdG1hc2sgPSAxIFxcdTAwM2NcXHUwMDNjICg3IC0gKG5vZGVfYml0X2lkeCAlIEJJVFNfUEVSX0JZVEUpKTtcXG4rXFxuK1xcdGlmICghKGJtYXBbY3R4Lm9mZl0gXFx1MDAyNiBtYXNrKSkge1xcbitcXHRcXHRrdW5tYXBfbG9jYWwoYm1hcCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRibWFwW2N0eC5vZmZdIFxcdTAwMjY9IH5tYXNrO1xcbitcXHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcXG4rXFx0a3VubWFwX2xvY2FsKGJtYXApO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qIEdldCBhIHJlZmVyZW5jZSB0byBhIEIqVHJlZSBhbmQgZG8gc29tZSBpbml0aWFsIGNoZWNrcyAqL1xcbiBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZXljbXApXFxuIHtcXG5AQCAtMjMsNiArMTM4LDcgQEAgc3RydWN0IGhmc19idHJlZSAqaGZzX2J0cmVlX29wZW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGlkLCBidHJlZV9rZXljbXAga2VcXG4gXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XFxuIFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XFxuK1xcdHN0cnVjdCBoZnNfYm5vZGUgKm5vZGU7XFxuIFxcdHVuc2lnbmVkIGludCBzaXplO1xcbiBcXHR1MTYgZGJsb2NrO1xcbiBcXHRzZWN0b3JfdCBzdGFydF9ibG9jaztcXG5AQCAtMTU1LDYgKzI3MSwyMCBAQCBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZVxcbiBcXHRrdW5tYXBfbG9jYWwoaGVhZCk7XFxuIFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuIFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuK1xcbitcXHRub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgSEZTX1RSRUVfSEVBRCk7XFxuK1xcdGlmIChJU19FUlIobm9kZSkpXFxuK1xcdFxcdGdvdG8gZnJlZV9pbm9kZTtcXG4rXFxuK1xcdGlmICghaGZzX2JtYXBfdGVzdF9iaXQobm9kZSwgSEZTX1RSRUVfSEVBRCkpIHtcXG4rXFx0XFx0cHJfd2FybihcXFwiKCVzKTogJXMgKGNuaWQgMHgleCkgYml0bWFwIGNvcnJ1cHRlZCwgZm9yY2luZyByZG9ubHlcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHNiLVxcdTAwM2VzX2lkLCBpZCA9PSBIRlNfRVhUX0NOSUQgPyBcXFwiZXh0ZW50c1xcXCIgOiBcXFwiY2F0YWxvZ1xcXCIsIGlkKTtcXG4rXFx0XFx0cHJfd2FybihcXFwiUnVuIGZzY2suaGZzIHRvIHJlcGFpci5cXFxcblxcXCIpO1xcbitcXHRcXHRzYi1cXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XFxuK1xcdH1cXG4rXFxuK1xcdGhmc19ibm9kZV9wdXQobm9kZSk7XFxuK1xcbiBcXHRyZXR1cm4gdHJlZTtcXG4gXFxuIGZhaWxfZm9saW86XFxuQEAgLTI4NSwxMSArNDE1LDkgQEAgaW50IGhmc19ibWFwX3Jlc2VydmUoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIHJzdmRfbm9kZXMpXFxuIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpXFxuIHtcXG4gXFx0c3RydWN0IGhmc19ibm9kZSAqbm9kZSwgKm5leHRfbm9kZTtcXG4tXFx0c3RydWN0IHBhZ2UgKipwYWdlcDtcXG4rXFx0c3RydWN0IGhmc19ibWFwX2N0eCBjdHg7XFxuK1xcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiBcXHR1MzIgbmlkeCwgaWR4O1xcbi1cXHR1bnNpZ25lZCBvZmY7XFxuLVxcdHUxNiBvZmYxNjtcXG4tXFx0dTE2IGxlbjtcXG4gXFx0dTggKmRhdGEsIGJ5dGUsIG07XFxuIFxcdGludCBpLCByZXM7XFxuIFxcbkBAIC0zMDEsMjQgKzQyOSwyNiBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxcbiBcXHRub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgbmlkeCk7XFxuIFxcdGlmIChJU19FUlIobm9kZSkpXFxuIFxcdFxcdHJldHVybiBub2RlO1xcbi1cXHRsZW4gPSBoZnNfYnJlY19sZW5vZmYobm9kZSwgMiwgXFx1MDAyNm9mZjE2KTtcXG4tXFx0b2ZmID0gb2ZmMTY7XFxuIFxcbi1cXHRvZmYgKz0gbm9kZS1cXHUwMDNlcGFnZV9vZmZzZXQ7XFxuLVxcdHBhZ2VwID0gbm9kZS1cXHUwMDNlcGFnZSArIChvZmYgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuLVxcdGRhdGEgPSBrbWFwX2xvY2FsX3BhZ2UoKnBhZ2VwKTtcXG4tXFx0b2ZmIFxcdTAwMjY9IH5QQUdFX01BU0s7XFxuK1xcdHBhZ2UgPSBoZnNfYm1hcF9nZXRfbWFwX3BhZ2Uobm9kZSwgXFx1MDAyNmN0eCwgMCk7XFxuK1xcdGlmIChJU19FUlIocGFnZSkpIHtcXG4rXFx0XFx0cmVzID0gUFRSX0VSUihwYWdlKTtcXG4rXFx0XFx0aGZzX2Jub2RlX3B1dChub2RlKTtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIocmVzKTtcXG4rXFx0fVxcbitcXG4rXFx0ZGF0YSA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG4gXFx0aWR4ID0gMDtcXG4gXFxuIFxcdGZvciAoOzspIHtcXG4tXFx0XFx0d2hpbGUgKGxlbikge1xcbi1cXHRcXHRcXHRieXRlID0gZGF0YVtvZmZdO1xcbitcXHRcXHR3aGlsZSAoY3R4Lmxlbikge1xcbitcXHRcXHRcXHRieXRlID0gZGF0YVtjdHgub2ZmXTtcXG4gXFx0XFx0XFx0aWYgKGJ5dGUgIT0gMHhmZikge1xcbiBcXHRcXHRcXHRcXHRmb3IgKG0gPSAweDgwLCBpID0gMDsgaSBcXHUwMDNjIDg7IG0gXFx1MDAzZVxcdTAwM2U9IDEsIGkrKykge1xcbiBcXHRcXHRcXHRcXHRcXHRpZiAoIShieXRlIFxcdTAwMjYgbSkpIHtcXG4gXFx0XFx0XFx0XFx0XFx0XFx0aWR4ICs9IGk7XFxuLVxcdFxcdFxcdFxcdFxcdFxcdGRhdGFbb2ZmXSB8PSBtO1xcbi1cXHRcXHRcXHRcXHRcXHRcXHRzZXRfcGFnZV9kaXJ0eSgqcGFnZXApO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRkYXRhW2N0eC5vZmZdIHw9IG07XFxuK1xcdFxcdFxcdFxcdFxcdFxcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRrdW5tYXBfbG9jYWwoZGF0YSk7XFxuIFxcdFxcdFxcdFxcdFxcdFxcdHRyZWUtXFx1MDAzZWZyZWVfbm9kZXMtLTtcXG4gXFx0XFx0XFx0XFx0XFx0XFx0bWFya19pbm9kZV9kaXJ0eSh0cmVlLVxcdTAwM2Vpbm9kZSk7XFxuQEAgLTMyNywxMyArNDU3LDE0IEBAIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpXFxuIFxcdFxcdFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGlmICgrK29mZiBcXHUwMDNlPSBQQUdFX1NJWkUpIHtcXG4rXFx0XFx0XFx0aWYgKCsrY3R4Lm9mZiBcXHUwMDNlPSBQQUdFX1NJWkUpIHtcXG4gXFx0XFx0XFx0XFx0a3VubWFwX2xvY2FsKGRhdGEpO1xcbi1cXHRcXHRcXHRcXHRkYXRhID0ga21hcF9sb2NhbF9wYWdlKCorK3BhZ2VwKTtcXG4tXFx0XFx0XFx0XFx0b2ZmID0gMDtcXG4rXFx0XFx0XFx0XFx0cGFnZSA9IG5vZGUtXFx1MDAzZXBhZ2VbKytjdHgucGFnZV9pZHhdO1xcbitcXHRcXHRcXHRcXHRkYXRhID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xcbitcXHRcXHRcXHRcXHRjdHgub2ZmID0gMDtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRpZHggKz0gODtcXG4tXFx0XFx0XFx0bGVuLS07XFxuK1xcdFxcdFxcdGN0eC5sZW4tLTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRrdW5tYXBfbG9jYWwoZGF0YSk7XFxuIFxcdFxcdG5pZHggPSBub2RlLVxcdTAwM2VuZXh0O1xcbkBAIC0zNDcsMjIgKzQ3OCwyMiBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxcbiBcXHRcXHRcXHRyZXR1cm4gbmV4dF9ub2RlO1xcbiBcXHRcXHRub2RlID0gbmV4dF9ub2RlO1xcbiBcXG4tXFx0XFx0bGVuID0gaGZzX2JyZWNfbGVub2ZmKG5vZGUsIDAsIFxcdTAwMjZvZmYxNik7XFxuLVxcdFxcdG9mZiA9IG9mZjE2O1xcbi1cXHRcXHRvZmYgKz0gbm9kZS1cXHUwMDNlcGFnZV9vZmZzZXQ7XFxuLVxcdFxcdHBhZ2VwID0gbm9kZS1cXHUwMDNlcGFnZSArIChvZmYgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuLVxcdFxcdGRhdGEgPSBrbWFwX2xvY2FsX3BhZ2UoKnBhZ2VwKTtcXG4tXFx0XFx0b2ZmIFxcdTAwMjY9IH5QQUdFX01BU0s7XFxuK1xcdFxcdHBhZ2UgPSBoZnNfYm1hcF9nZXRfbWFwX3BhZ2Uobm9kZSwgXFx1MDAyNmN0eCwgMCk7XFxuK1xcdFxcdGlmIChJU19FUlIocGFnZSkpIHtcXG4rXFx0XFx0XFx0cmVzID0gUFRSX0VSUihwYWdlKTtcXG4rXFx0XFx0XFx0aGZzX2Jub2RlX3B1dChub2RlKTtcXG4rXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIocmVzKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRkYXRhID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xcbiBcXHR9XFxuIH1cXG4gXFxuIHZvaWQgaGZzX2JtYXBfZnJlZShzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBoZnNfYnRyZWUgKnRyZWU7XFxuLVxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiBcXHR1MTYgb2ZmLCBsZW47XFxuIFxcdHUzMiBuaWR4O1xcbi1cXHR1OCAqZGF0YSwgYnl0ZSwgbTtcXG4rXFx0aW50IHJlcztcXG4gXFxuIFxcdGhmc19kYmcoXFxcIm5vZGUgJXVcXFxcblxcXCIsIG5vZGUtXFx1MDAzZXRoaXMpO1xcbiBcXHR0cmVlID0gbm9kZS1cXHUwMDNldHJlZTtcXG5AQCAtMzk2LDIzICs1MjcsMTggQEAgdm9pZCBoZnNfYm1hcF9mcmVlKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpXFxuIFxcdFxcdH1cXG4gXFx0XFx0bGVuID0gaGZzX2JyZWNfbGVub2ZmKG5vZGUsIDAsIFxcdTAwMjZvZmYpO1xcbiBcXHR9XFxuLVxcdG9mZiArPSBub2RlLVxcdTAwM2VwYWdlX29mZnNldCArIG5pZHggLyA4O1xcbi1cXHRwYWdlID0gbm9kZS1cXHUwMDNlcGFnZVtvZmYgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVF07XFxuLVxcdGRhdGEgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XFxuLVxcdG9mZiBcXHUwMDI2PSB+UEFHRV9NQVNLO1xcbi1cXHRtID0gMSBcXHUwMDNjXFx1MDAzYyAofm5pZHggXFx1MDAyNiA3KTtcXG4tXFx0Ynl0ZSA9IGRhdGFbb2ZmXTtcXG4tXFx0aWYgKCEoYnl0ZSBcXHUwMDI2IG0pKSB7XFxuK1xcbitcXHRyZXMgPSBoZnNfYm1hcF9jbGVhcl9iaXQobm9kZSwgbmlkeCk7XFxuK1xcdGlmIChyZXMgPT0gLUVJTlZBTCkge1xcbiBcXHRcXHRwcl9jcml0KFxcXCJ0cnlpbmcgdG8gZnJlZSBmcmVlIGJub2RlICV1KCVkKVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0bm9kZS1cXHUwMDNldGhpcywgbm9kZS1cXHUwMDNldHlwZSk7XFxuLVxcdFxcdGt1bm1hcF9sb2NhbChkYXRhKTtcXG4tXFx0XFx0aGZzX2Jub2RlX3B1dChub2RlKTtcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRuaWR4LCBub2RlLVxcdTAwM2V0eXBlKTtcXG4rXFx0fSBlbHNlIGlmIChyZXMpIHtcXG4rXFx0XFx0cHJfY3JpdChcXFwiZmFpbCB0byBmcmVlIGJub2RlICV1KCVkKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0bmlkeCwgbm9kZS1cXHUwMDNldHlwZSk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHRyZWUtXFx1MDAzZWZyZWVfbm9kZXMrKztcXG4rXFx0XFx0bWFya19pbm9kZV9kaXJ0eSh0cmVlLVxcdTAwM2Vpbm9kZSk7XFxuIFxcdH1cXG4tXFx0ZGF0YVtvZmZdID0gYnl0ZSBcXHUwMDI2IH5tO1xcbi1cXHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcXG4tXFx0a3VubWFwX2xvY2FsKGRhdGEpO1xcbitcXG4gXFx0aGZzX2Jub2RlX3B1dChub2RlKTtcXG4tXFx0dHJlZS1cXHUwMDNlZnJlZV9ub2RlcysrO1xcbi1cXHRtYXJrX2lub2RlX2RpcnR5KHRyZWUtXFx1MDAzZWlub2RlKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9mcy9oZnMvYnRyZWUuaCBiL2ZzL2hmcy9idHJlZS5oXFxuaW5kZXggOTliZTg1OGIyNDQ2NTAuLmI0YzNmMmEzMTQ3MTAwIDEwMDY0NFxcbi0tLSBhL2ZzL2hmcy9idHJlZS5oXFxuKysrIGIvZnMvaGZzL2J0cmVlLmhcXG5AQCAtMTI5LDMgKzEyOSw0MyBAQCBleHRlcm4gaW50IF9faGZzX2JyZWNfZmluZChzdHJ1Y3QgaGZzX2Jub2RlICpibm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKTtcXG4gZXh0ZXJuIGludCBoZnNfYnJlY19maW5kKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCk7XFxuIGV4dGVybiBpbnQgaGZzX2JyZWNfcmVhZChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHZvaWQgKnJlYywgdTMyIHJlY19sZW4pO1xcbiBleHRlcm4gaW50IGhmc19icmVjX2dvdG8oc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLCBpbnQgY250KTtcXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19ibm9kZV9vZmZzZXRfdmFsaWQoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG9mZilcXG4re1xcbitcXHRib29sIGlzX3ZhbGlkO1xcbitcXG4rXFx0aWYgKCFub2RlIHx8ICFub2RlLVxcdTAwM2V0cmVlKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpc192YWxpZCA9IG9mZiBcXHUwMDNjIG5vZGUtXFx1MDAzZXRyZWUtXFx1MDAzZW5vZGVfc2l6ZTtcXG4rXFxuK1xcdGlmICghaXNfdmFsaWQpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCJpbnZhbGlkIG9mZnNldDogaWQgJXUsIHR5cGUgJSN4LCBoICV1LCBzeiAldSwgb2ZmICV1XFxcXG5cXFwiLFxcbitcXHRcXHQgICAgICAgbm9kZS1cXHUwMDNldGhpcywgbm9kZS1cXHUwMDNldHlwZSwgbm9kZS1cXHUwMDNlaGVpZ2h0LFxcbitcXHRcXHQgICAgICAgbm9kZS1cXHUwMDNldHJlZS1cXHUwMDNlbm9kZV9zaXplLCBvZmYpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gaXNfdmFsaWQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdTMyIGNoZWNrX2FuZF9jb3JyZWN0X3JlcXVlc3RlZF9sZW5ndGgoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG9mZiwgdTMyIGxlbilcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgbm9kZV9zaXplO1xcbitcXG4rXFx0aWYgKCFpc19ibm9kZV9vZmZzZXRfdmFsaWQobm9kZSwgb2ZmKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRub2RlX3NpemUgPSBub2RlLVxcdTAwM2V0cmVlLVxcdTAwM2Vub2RlX3NpemU7XFxuK1xcbitcXHRpZiAoKHU2NClvZmYgKyBsZW4gXFx1MDAzZSBub2RlX3NpemUpIHtcXG4rXFx0XFx0dTMyIG5ld19sZW4gPSBub2RlX3NpemUgLSBvZmY7XFxuK1xcbitcXHRcXHRwcl9lcnIoXFxcImNvcnJlY3RlZCBsZW46IGlkICV1LCB0eXBlICUjeCwgaCAldSwgc3ogJXUsIG9mZiAldSwgbGVuICV1LVxcdTAwM2UldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIG5vZGUtXFx1MDAzZXRoaXMsIG5vZGUtXFx1MDAzZXR5cGUsIG5vZGUtXFx1MDAzZWhlaWdodCxcXG4rXFx0XFx0ICAgICAgIG5vZGVfc2l6ZSwgb2ZmLCBsZW4sIG5ld19sZW4pO1xcbitcXG4rXFx0XFx0cmV0dXJuIG5ld19sZW47XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBsZW47XFxuK31cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmggYi9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaFxcbmluZGV4IDQ1ZmI0YzlmZjlmNWVlLi5kNmE2MTVlNzRiMjZlMiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oXFxuQEAgLTUxMCwxNCArNTEwLDIxIEBAIHN0cnVjdCBoZnNfYnRyZWVfaGVhZGVyX3JlYyB7XFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIGItdHJlZSBidXQgbm90IGluIGV4dGVudHNcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgYi10cmVlIChoZnNwbHVzKS4gKi9cXG4gXFxuKy8qIEhGUyBCVHJlZSBtaXNjIGluZm8gKi9cXG4rI2RlZmluZSBIRlNfVFJFRV9IRUFEXFx0XFx0XFx0XFx0MFxcbisjZGVmaW5lIEhGU19CVFJFRV9IRFJfTUFQX1JFQ19JTkRFWFxcdFxcdDJcXHQvKiBNYXAgKGJpdG1hcCkgcmVjb3JkIGluIEhlYWRlciBub2RlICovXFxuKyNkZWZpbmUgSEZTX0JUUkVFX01BUF9OT0RFX1JFQ19JTkRFWFxcdFxcdDBcXHQvKiBNYXAgcmVjb3JkIGluIE1hcCBOb2RlICovXFxuK1xcbiAvKiBIRlMrIEJUcmVlIG1pc2MgaW5mbyAqL1xcbi0jZGVmaW5lIEhGU1BMVVNfVFJFRV9IRUFEXFx0XFx0XFx0MFxcbisjZGVmaW5lIEhGU1BMVVNfVFJFRV9IRUFEXFx0XFx0XFx0SEZTX1RSRUVfSEVBRFxcbiAjZGVmaW5lIEhGU1BMVVNfTk9ERV9NWFNaXFx0XFx0XFx0MzI3NjhcXG4gI2RlZmluZSBIRlNQTFVTX05PREVfTUlOU1pcXHRcXHRcXHQ1MTJcXG4gI2RlZmluZSBIRlNQTFVTX0FUVFJfVFJFRV9OT0RFX1NJWkVcXHRcXHQ4MTkyXFxuICNkZWZpbmUgSEZTUExVU19CVFJFRV9IRFJfTk9ERV9SRUNTX0NPVU5UXFx0M1xcbi0jZGVmaW5lIEhGU1BMVVNfQlRSRUVfSERSX01BUF9SRUNfSU5ERVhcXHRcXHQyXFx0LyogTWFwIChiaXRtYXApIHJlY29yZCBpbiBIZWFkZXIgbm9kZSAqL1xcbi0jZGVmaW5lIEhGU1BMVVNfQlRSRUVfTUFQX05PREVfUkVDX0lOREVYXFx0MFxcdC8qIE1hcCByZWNvcmQgaW4gTWFwIE5vZGUgKi9cXG4rLyogTWFwIChiaXRtYXApIHJlY29yZCBpbiBIZWFkZXIgbm9kZSAqL1xcbisjZGVmaW5lIEhGU1BMVVNfQlRSRUVfSERSX01BUF9SRUNfSU5ERVhcXHRcXHRIRlNfQlRSRUVfSERSX01BUF9SRUNfSU5ERVhcXG4rLyogTWFwIHJlY29yZCBpbiBNYXAgTm9kZSAqL1xcbisjZGVmaW5lIEhGU1BMVVNfQlRSRUVfTUFQX05PREVfUkVDX0lOREVYXFx0SEZTX0JUUkVFX01BUF9OT0RFX1JFQ19JTkRFWFxcbiAjZGVmaW5lIEhGU1BMVVNfQlRSRUVfSERSX1VTRVJfQllURVNcXHRcXHQxMjhcXG4gI2RlZmluZSBIRlNQTFVTX0JUUkVFX01BUF9OT0RFX1JFQ1NfQ09VTlRcXHQyXFxuICNkZWZpbmUgSEZTUExVU19CVFJFRV9NQVBfTk9ERV9SRVNFUlZFRF9CWVRFU1xcdDJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTM6MTY6MDQuMDgzOTg2MTI5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjQwNDIyNTMxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNfYnRyZWVfb3BlblwiLFxuICAgIFwiaGZzX2JtYXBfYWxsb2NcIixcbiAgICBcImhmc19ibWFwX2ZyZWVcIixcbiAgICBcImhmc19ibWFwX2dldF9tYXBfcGFnZVwiLFxuICAgIFwiaGZzX2JtYXBfdGVzdF9iaXRcIixcbiAgICBcImhmc19ibWFwX2NsZWFyX2JpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBIRlMgZmlsZXN5c3RlbSdzIGJ0cmVlIG1hcCBoYW5kbGluZyBsb2dpYy4gSXQgYWRkcyBuZXcgZnVuY3Rpb25zIHRvIHNhZmVseSBnZXQgbWFwIHBhZ2VzLCB0ZXN0IGJpdHMsIGFuZCBjbGVhciBiaXRzLCBhbmQgbW9kaWZpZXMgbm9kZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIHRvIHVzZSB0aGVzZSBuZXcgZnVuY3Rpb25zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBob3cgdGhlIGZpbGVzeXN0ZW0gbWFuYWdlcyBpdHMgaW50ZXJuYWwgYnRyZWUgc3RydWN0dXJlcywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2IyY2QwNzgxMTUwZWViNmFhNDA3M2U4OWNjNWMwMGIxYjJjZDYyM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDE2IDEzOjE2OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaGZzL2Jub2RlLmMgYi9mcy9oZnMvYm5vZGUuY1xuaW5kZXggZGE4ZTUzNDJjOTFjYzIuLjFiMzMxMTA4ZDljMDFiIDEwMDY0NFxuLS0tIGEvZnMvaGZzL2Jub2RlLmNcbisrKyBiL2ZzL2hmcy9ibm9kZS5jXG5AQCAtMTUsNDggKzE1LDYgQEBcbiBcbiAjaW5jbHVkZSBcImJ0cmVlLmhcIlxuIFxuLXN0YXRpYyBpbmxpbmVcbi1ib29sIGlzX2Jub2RlX29mZnNldF92YWxpZChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgb2ZmKVxuLXtcbi1cdGJvb2wgaXNfdmFsaWQgPSBvZmYgXHUwMDNjIG5vZGUtXHUwMDNldHJlZS1cdTAwM2Vub2RlX3NpemU7XG4tXG4tXHRpZiAoIWlzX3ZhbGlkKSB7XG4tXHRcdHByX2VycihcInJlcXVlc3RlZCBpbnZhbGlkIG9mZnNldDogXCJcbi1cdFx0ICAgICAgIFwiTk9ERTogaWQgJXUsIHR5cGUgJSN4LCBoZWlnaHQgJXUsIFwiXG4tXHRcdCAgICAgICBcIm5vZGVfc2l6ZSAldSwgb2Zmc2V0ICV1XFxuXCIsXG4tXHRcdCAgICAgICBub2RlLVx1MDAzZXRoaXMsIG5vZGUtXHUwMDNldHlwZSwgbm9kZS1cdTAwM2VoZWlnaHQsXG4tXHRcdCAgICAgICBub2RlLVx1MDAzZXRyZWUtXHUwMDNlbm9kZV9zaXplLCBvZmYpO1xuLVx0fVxuLVxuLVx0cmV0dXJuIGlzX3ZhbGlkO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lXG4tdTMyIGNoZWNrX2FuZF9jb3JyZWN0X3JlcXVlc3RlZF9sZW5ndGgoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG9mZiwgdTMyIGxlbilcbi17XG4tXHR1bnNpZ25lZCBpbnQgbm9kZV9zaXplO1xuLVxuLVx0aWYgKCFpc19ibm9kZV9vZmZzZXRfdmFsaWQobm9kZSwgb2ZmKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRub2RlX3NpemUgPSBub2RlLVx1MDAzZXRyZWUtXHUwMDNlbm9kZV9zaXplO1xuLVxuLVx0aWYgKCh1NjQpb2ZmICsgbGVuIFx1MDAzZSBub2RlX3NpemUpIHtcbi1cdFx0dTMyIG5ld19sZW4gPSBub2RlX3NpemUgLSBvZmY7XG4tXG4tXHRcdHByX2VycihcInJlcXVlc3RlZCBsZW5ndGggaGFzIGJlZW4gY29ycmVjdGVkOiBcIlxuLVx0XHQgICAgICAgXCJOT0RFOiBpZCAldSwgdHlwZSAlI3gsIGhlaWdodCAldSwgXCJcbi1cdFx0ICAgICAgIFwibm9kZV9zaXplICV1LCBvZmZzZXQgJXUsIFwiXG4tXHRcdCAgICAgICBcInJlcXVlc3RlZF9sZW4gJXUsIGNvcnJlY3RlZF9sZW4gJXVcXG5cIixcbi1cdFx0ICAgICAgIG5vZGUtXHUwMDNldGhpcywgbm9kZS1cdTAwM2V0eXBlLCBub2RlLVx1MDAzZWhlaWdodCxcbi1cdFx0ICAgICAgIG5vZGUtXHUwMDNldHJlZS1cdTAwM2Vub2RlX3NpemUsIG9mZiwgbGVuLCBuZXdfbGVuKTtcbi1cbi1cdFx0cmV0dXJuIG5ld19sZW47XG4tXHR9XG4tXG4tXHRyZXR1cm4gbGVuO1xuLX1cbi1cbiB2b2lkIGhmc19ibm9kZV9yZWFkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHZvaWQgKmJ1ZiwgdTMyIG9mZiwgdTMyIGxlbilcbiB7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbmRpZmYgLS1naXQgYS9mcy9oZnMvYnRyZWUuYyBiL2ZzL2hmcy9idHJlZS5jXG5pbmRleCAyZWIzN2EyZjY0ZTg2Ni4uNDFiNGU4ZmM5NDYzN2QgMTAwNjQ0XG4tLS0gYS9mcy9oZnMvYnRyZWUuY1xuKysrIGIvZnMvaGZzL2J0cmVlLmNcbkBAIC0xNSw2ICsxNSwxMjEgQEBcbiBcbiAjaW5jbHVkZSBcImJ0cmVlLmhcIlxuIFxuKy8qIENvbnRleHQgZm9yIGl0ZXJhdGluZyBiLXRyZWUgbWFwIHBhZ2VzXG4rICogQHBhZ2VfaWR4OiBUaGUgaW5kZXggb2YgdGhlIHBhZ2Ugd2l0aGluIHRoZSBiLW5vZGUncyBwYWdlIGFycmF5XG4rICogQG9mZjogVGhlIGJ5dGUgb2Zmc2V0IHdpdGhpbiB0aGUgbWFwcGVkIHBhZ2VcbisgKiBAbGVuOiBUaGUgcmVtYWluaW5nIGxlbmd0aCBvZiB0aGUgbWFwIHJlY29yZFxuKyAqL1xuK3N0cnVjdCBoZnNfYm1hcF9jdHgge1xuK1x0dW5zaWduZWQgaW50IHBhZ2VfaWR4O1xuK1x0dW5zaWduZWQgaW50IG9mZjtcbitcdHUxNiBsZW47XG4rfTtcbitcbisvKlxuKyAqIEZpbmRzIHRoZSBzcGVjaWZpYyBwYWdlIGNvbnRhaW5pbmcgdGhlIHJlcXVlc3RlZCBieXRlIG9mZnNldCB3aXRoaW4gdGhlIG1hcFxuKyAqIHJlY29yZC4gQXV0b21hdGljYWxseSBoYW5kbGVzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gaGVhZGVyIGFuZCBtYXAgbm9kZXMuXG4rICogUmV0dXJucyB0aGUgc3RydWN0IHBhZ2UgcG9pbnRlciwgb3IgYW4gRVJSX1BUUiBvbiBmYWlsdXJlLlxuKyAqIE5vdGU6IFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIG1hcHBpbmcvdW5tYXBwaW5nIHRoZSByZXR1cm5lZCBwYWdlLlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqaGZzX2JtYXBfZ2V0X21hcF9wYWdlKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsXG4rXHRcdFx0XHRcdCAgc3RydWN0IGhmc19ibWFwX2N0eCAqY3R4LFxuK1x0XHRcdFx0XHQgIHUzMiBieXRlX29mZnNldClcbit7XG4rXHR1MTYgcmVjX2lkeCwgb2ZmMTY7XG4rXHR1bnNpZ25lZCBpbnQgcGFnZV9vZmY7XG4rXG4rXHRpZiAobm9kZS1cdTAwM2V0aGlzID09IEhGU19UUkVFX0hFQUQpIHtcbitcdFx0aWYgKG5vZGUtXHUwMDNldHlwZSAhPSBIRlNfTk9ERV9IRUFERVIpIHtcbitcdFx0XHRwcl9lcnIoXCJoZnM6IGludmFsaWQgYnRyZWUgaGVhZGVyIG5vZGVcXG5cIik7XG4rXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XG4rXHRcdH1cbitcdFx0cmVjX2lkeCA9IEhGU19CVFJFRV9IRFJfTUFQX1JFQ19JTkRFWDtcbitcdH0gZWxzZSB7XG4rXHRcdGlmIChub2RlLVx1MDAzZXR5cGUgIT0gSEZTX05PREVfTUFQKSB7XG4rXHRcdFx0cHJfZXJyKFwiaGZzOiBpbnZhbGlkIGJ0cmVlIG1hcCBub2RlXFxuXCIpO1xuK1x0XHRcdHJldHVybiBFUlJfUFRSKC1FSU8pO1xuK1x0XHR9XG4rXHRcdHJlY19pZHggPSBIRlNfQlRSRUVfTUFQX05PREVfUkVDX0lOREVYO1xuK1x0fVxuK1xuK1x0Y3R4LVx1MDAzZWxlbiA9IGhmc19icmVjX2xlbm9mZihub2RlLCByZWNfaWR4LCBcdTAwMjZvZmYxNik7XG4rXHRpZiAoIWN0eC1cdTAwM2VsZW4pXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuK1xuK1x0aWYgKCFpc19ibm9kZV9vZmZzZXRfdmFsaWQobm9kZSwgb2ZmMTYpKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcbitcbitcdGN0eC1cdTAwM2VsZW4gPSBjaGVja19hbmRfY29ycmVjdF9yZXF1ZXN0ZWRfbGVuZ3RoKG5vZGUsIG9mZjE2LCBjdHgtXHUwMDNlbGVuKTtcbitcbitcdGlmIChieXRlX29mZnNldCBcdTAwM2U9IGN0eC1cdTAwM2VsZW4pXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuK1xuK1x0cGFnZV9vZmYgPSAodTMyKW9mZjE2ICsgbm9kZS1cdTAwM2VwYWdlX29mZnNldCArIGJ5dGVfb2Zmc2V0O1xuK1x0Y3R4LVx1MDAzZXBhZ2VfaWR4ID0gcGFnZV9vZmYgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4rXHRjdHgtXHUwMDNlb2ZmID0gcGFnZV9vZmYgXHUwMDI2IH5QQUdFX01BU0s7XG4rXG4rXHRyZXR1cm4gbm9kZS1cdTAwM2VwYWdlW2N0eC1cdTAwM2VwYWdlX2lkeF07XG4rfVxuK1xuKy8qKlxuKyAqIGhmc19ibWFwX3Rlc3RfYml0IC0gdGVzdCBhIGJpdCBpbiB0aGUgYi10cmVlIG1hcFxuKyAqIEBub2RlOiB0aGUgYi10cmVlIG5vZGUgY29udGFpbmluZyB0aGUgbWFwIHJlY29yZFxuKyAqIEBub2RlX2JpdF9pZHg6IHRoZSByZWxhdGl2ZSBiaXQgaW5kZXggd2l0aGluIHRoZSBub2RlJ3MgbWFwIHJlY29yZFxuKyAqXG4rICogUmV0dXJucyB0cnVlIGlmIHNldCwgZmFsc2UgaWYgY2xlYXIgb3Igb24gZmFpbHVyZS5cbisgKi9cbitzdGF0aWMgYm9vbCBoZnNfYm1hcF90ZXN0X2JpdChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgbm9kZV9iaXRfaWR4KVxuK3tcbitcdHN0cnVjdCBoZnNfYm1hcF9jdHggY3R4O1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4rXHR1OCAqYm1hcCwgYnl0ZSwgbWFzaztcbitcbitcdHBhZ2UgPSBoZnNfYm1hcF9nZXRfbWFwX3BhZ2Uobm9kZSwgXHUwMDI2Y3R4LCBub2RlX2JpdF9pZHggLyBCSVRTX1BFUl9CWVRFKTtcbitcdGlmIChJU19FUlIocGFnZSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGJtYXAgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4rXHRieXRlID0gYm1hcFtjdHgub2ZmXTtcbitcdGt1bm1hcF9sb2NhbChibWFwKTtcbitcbitcdG1hc2sgPSAxIFx1MDAzY1x1MDAzYyAoNyAtIChub2RlX2JpdF9pZHggJSBCSVRTX1BFUl9CWVRFKSk7XG4rXHRyZXR1cm4gKGJ5dGUgXHUwMDI2IG1hc2spICE9IDA7XG4rfVxuK1xuKy8qKlxuKyAqIGhmc19ibWFwX2NsZWFyX2JpdCAtIGNsZWFyIGEgYml0IGluIHRoZSBiLXRyZWUgbWFwXG4rICogQG5vZGU6IHRoZSBiLXRyZWUgbm9kZSBjb250YWluaW5nIHRoZSBtYXAgcmVjb3JkXG4rICogQG5vZGVfYml0X2lkeDogdGhlIHJlbGF0aXZlIGJpdCBpbmRleCB3aXRoaW4gdGhlIG5vZGUncyBtYXAgcmVjb3JkXG4rICpcbisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVJTlZBTCBpZiBhbHJlYWR5IGNsZWFyLCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlLlxuKyAqL1xuK3N0YXRpYyBpbnQgaGZzX2JtYXBfY2xlYXJfYml0KHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBub2RlX2JpdF9pZHgpXG4re1xuK1x0c3RydWN0IGhmc19ibWFwX2N0eCBjdHg7XG4rXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbitcdHU4ICpibWFwLCBtYXNrO1xuK1xuK1x0cGFnZSA9IGhmc19ibWFwX2dldF9tYXBfcGFnZShub2RlLCBcdTAwMjZjdHgsIG5vZGVfYml0X2lkeCAvIEJJVFNfUEVSX0JZVEUpO1xuK1x0aWYgKElTX0VSUihwYWdlKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIocGFnZSk7XG4rXG4rXHRibWFwID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuK1xuK1x0bWFzayA9IDEgXHUwMDNjXHUwMDNjICg3IC0gKG5vZGVfYml0X2lkeCAlIEJJVFNfUEVSX0JZVEUpKTtcbitcbitcdGlmICghKGJtYXBbY3R4Lm9mZl0gXHUwMDI2IG1hc2spKSB7XG4rXHRcdGt1bm1hcF9sb2NhbChibWFwKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRibWFwW2N0eC5vZmZdIFx1MDAyNj0gfm1hc2s7XG4rXHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcbitcdGt1bm1hcF9sb2NhbChibWFwKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiAvKiBHZXQgYSByZWZlcmVuY2UgdG8gYSBCKlRyZWUgYW5kIGRvIHNvbWUgaW5pdGlhbCBjaGVja3MgKi9cbiBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZXljbXApXG4ge1xuQEAgLTIzLDYgKzEzOCw3IEBAIHN0cnVjdCBoZnNfYnRyZWUgKmhmc19idHJlZV9vcGVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBpZCwgYnRyZWVfa2V5Y21wIGtlXG4gXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuK1x0c3RydWN0IGhmc19ibm9kZSAqbm9kZTtcbiBcdHVuc2lnbmVkIGludCBzaXplO1xuIFx0dTE2IGRibG9jaztcbiBcdHNlY3Rvcl90IHN0YXJ0X2Jsb2NrO1xuQEAgLTE1NSw2ICsyNzEsMjAgQEAgc3RydWN0IGhmc19idHJlZSAqaGZzX2J0cmVlX29wZW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGlkLCBidHJlZV9rZXljbXAga2VcbiBcdGt1bm1hcF9sb2NhbChoZWFkKTtcbiBcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHRmb2xpb19wdXQoZm9saW8pO1xuK1xuK1x0bm9kZSA9IGhmc19ibm9kZV9maW5kKHRyZWUsIEhGU19UUkVFX0hFQUQpO1xuK1x0aWYgKElTX0VSUihub2RlKSlcbitcdFx0Z290byBmcmVlX2lub2RlO1xuK1xuK1x0aWYgKCFoZnNfYm1hcF90ZXN0X2JpdChub2RlLCBIRlNfVFJFRV9IRUFEKSkge1xuK1x0XHRwcl93YXJuKFwiKCVzKTogJXMgKGNuaWQgMHgleCkgYml0bWFwIGNvcnJ1cHRlZCwgZm9yY2luZyByZG9ubHlcXG5cIixcbitcdFx0XHRzYi1cdTAwM2VzX2lkLCBpZCA9PSBIRlNfRVhUX0NOSUQgPyBcImV4dGVudHNcIiA6IFwiY2F0YWxvZ1wiLCBpZCk7XG4rXHRcdHByX3dhcm4oXCJSdW4gZnNjay5oZnMgdG8gcmVwYWlyLlxcblwiKTtcbitcdFx0c2ItXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XG4rXHR9XG4rXG4rXHRoZnNfYm5vZGVfcHV0KG5vZGUpO1xuK1xuIFx0cmV0dXJuIHRyZWU7XG4gXG4gZmFpbF9mb2xpbzpcbkBAIC0yODUsMTEgKzQxNSw5IEBAIGludCBoZnNfYm1hcF9yZXNlcnZlKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiByc3ZkX25vZGVzKVxuIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpXG4ge1xuIFx0c3RydWN0IGhmc19ibm9kZSAqbm9kZSwgKm5leHRfbm9kZTtcbi1cdHN0cnVjdCBwYWdlICoqcGFnZXA7XG4rXHRzdHJ1Y3QgaGZzX2JtYXBfY3R4IGN0eDtcbitcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0dTMyIG5pZHgsIGlkeDtcbi1cdHVuc2lnbmVkIG9mZjtcbi1cdHUxNiBvZmYxNjtcbi1cdHUxNiBsZW47XG4gXHR1OCAqZGF0YSwgYnl0ZSwgbTtcbiBcdGludCBpLCByZXM7XG4gXG5AQCAtMzAxLDI0ICs0MjksMjYgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlcbiBcdG5vZGUgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCBuaWR4KTtcbiBcdGlmIChJU19FUlIobm9kZSkpXG4gXHRcdHJldHVybiBub2RlO1xuLVx0bGVuID0gaGZzX2JyZWNfbGVub2ZmKG5vZGUsIDIsIFx1MDAyNm9mZjE2KTtcbi1cdG9mZiA9IG9mZjE2O1xuIFxuLVx0b2ZmICs9IG5vZGUtXHUwMDNlcGFnZV9vZmZzZXQ7XG4tXHRwYWdlcCA9IG5vZGUtXHUwMDNlcGFnZSArIChvZmYgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuLVx0ZGF0YSA9IGttYXBfbG9jYWxfcGFnZSgqcGFnZXApO1xuLVx0b2ZmIFx1MDAyNj0gflBBR0VfTUFTSztcbitcdHBhZ2UgPSBoZnNfYm1hcF9nZXRfbWFwX3BhZ2Uobm9kZSwgXHUwMDI2Y3R4LCAwKTtcbitcdGlmIChJU19FUlIocGFnZSkpIHtcbitcdFx0cmVzID0gUFRSX0VSUihwYWdlKTtcbitcdFx0aGZzX2Jub2RlX3B1dChub2RlKTtcbitcdFx0cmV0dXJuIEVSUl9QVFIocmVzKTtcbitcdH1cbitcbitcdGRhdGEgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRpZHggPSAwO1xuIFxuIFx0Zm9yICg7Oykge1xuLVx0XHR3aGlsZSAobGVuKSB7XG4tXHRcdFx0Ynl0ZSA9IGRhdGFbb2ZmXTtcbitcdFx0d2hpbGUgKGN0eC5sZW4pIHtcbitcdFx0XHRieXRlID0gZGF0YVtjdHgub2ZmXTtcbiBcdFx0XHRpZiAoYnl0ZSAhPSAweGZmKSB7XG4gXHRcdFx0XHRmb3IgKG0gPSAweDgwLCBpID0gMDsgaSBcdTAwM2MgODsgbSBcdTAwM2VcdTAwM2U9IDEsIGkrKykge1xuIFx0XHRcdFx0XHRpZiAoIShieXRlIFx1MDAyNiBtKSkge1xuIFx0XHRcdFx0XHRcdGlkeCArPSBpO1xuLVx0XHRcdFx0XHRcdGRhdGFbb2ZmXSB8PSBtO1xuLVx0XHRcdFx0XHRcdHNldF9wYWdlX2RpcnR5KCpwYWdlcCk7XG4rXHRcdFx0XHRcdFx0ZGF0YVtjdHgub2ZmXSB8PSBtO1xuK1x0XHRcdFx0XHRcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuIFx0XHRcdFx0XHRcdGt1bm1hcF9sb2NhbChkYXRhKTtcbiBcdFx0XHRcdFx0XHR0cmVlLVx1MDAzZWZyZWVfbm9kZXMtLTtcbiBcdFx0XHRcdFx0XHRtYXJrX2lub2RlX2RpcnR5KHRyZWUtXHUwMDNlaW5vZGUpO1xuQEAgLTMyNywxMyArNDU3LDE0IEBAIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpXG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4tXHRcdFx0aWYgKCsrb2ZmIFx1MDAzZT0gUEFHRV9TSVpFKSB7XG4rXHRcdFx0aWYgKCsrY3R4Lm9mZiBcdTAwM2U9IFBBR0VfU0laRSkge1xuIFx0XHRcdFx0a3VubWFwX2xvY2FsKGRhdGEpO1xuLVx0XHRcdFx0ZGF0YSA9IGttYXBfbG9jYWxfcGFnZSgqKytwYWdlcCk7XG4tXHRcdFx0XHRvZmYgPSAwO1xuK1x0XHRcdFx0cGFnZSA9IG5vZGUtXHUwMDNlcGFnZVsrK2N0eC5wYWdlX2lkeF07XG4rXHRcdFx0XHRkYXRhID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuK1x0XHRcdFx0Y3R4Lm9mZiA9IDA7XG4gXHRcdFx0fVxuIFx0XHRcdGlkeCArPSA4O1xuLVx0XHRcdGxlbi0tO1xuK1x0XHRcdGN0eC5sZW4tLTtcbiBcdFx0fVxuIFx0XHRrdW5tYXBfbG9jYWwoZGF0YSk7XG4gXHRcdG5pZHggPSBub2RlLVx1MDAzZW5leHQ7XG5AQCAtMzQ3LDIyICs0NzgsMjIgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlcbiBcdFx0XHRyZXR1cm4gbmV4dF9ub2RlO1xuIFx0XHRub2RlID0gbmV4dF9ub2RlO1xuIFxuLVx0XHRsZW4gPSBoZnNfYnJlY19sZW5vZmYobm9kZSwgMCwgXHUwMDI2b2ZmMTYpO1xuLVx0XHRvZmYgPSBvZmYxNjtcbi1cdFx0b2ZmICs9IG5vZGUtXHUwMDNlcGFnZV9vZmZzZXQ7XG4tXHRcdHBhZ2VwID0gbm9kZS1cdTAwM2VwYWdlICsgKG9mZiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4tXHRcdGRhdGEgPSBrbWFwX2xvY2FsX3BhZ2UoKnBhZ2VwKTtcbi1cdFx0b2ZmIFx1MDAyNj0gflBBR0VfTUFTSztcbitcdFx0cGFnZSA9IGhmc19ibWFwX2dldF9tYXBfcGFnZShub2RlLCBcdTAwMjZjdHgsIDApO1xuK1x0XHRpZiAoSVNfRVJSKHBhZ2UpKSB7XG4rXHRcdFx0cmVzID0gUFRSX0VSUihwYWdlKTtcbitcdFx0XHRoZnNfYm5vZGVfcHV0KG5vZGUpO1xuK1x0XHRcdHJldHVybiBFUlJfUFRSKHJlcyk7XG4rXHRcdH1cbitcdFx0ZGF0YSA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdH1cbiB9XG4gXG4gdm9pZCBoZnNfYm1hcF9mcmVlKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpXG4ge1xuIFx0c3RydWN0IGhmc19idHJlZSAqdHJlZTtcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0dTE2IG9mZiwgbGVuO1xuIFx0dTMyIG5pZHg7XG4tXHR1OCAqZGF0YSwgYnl0ZSwgbTtcbitcdGludCByZXM7XG4gXG4gXHRoZnNfZGJnKFwibm9kZSAldVxcblwiLCBub2RlLVx1MDAzZXRoaXMpO1xuIFx0dHJlZSA9IG5vZGUtXHUwMDNldHJlZTtcbkBAIC0zOTYsMjMgKzUyNywxOCBAQCB2b2lkIGhmc19ibWFwX2ZyZWUoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcbiBcdFx0fVxuIFx0XHRsZW4gPSBoZnNfYnJlY19sZW5vZmYobm9kZSwgMCwgXHUwMDI2b2ZmKTtcbiBcdH1cbi1cdG9mZiArPSBub2RlLVx1MDAzZXBhZ2Vfb2Zmc2V0ICsgbmlkeCAvIDg7XG4tXHRwYWdlID0gbm9kZS1cdTAwM2VwYWdlW29mZiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVF07XG4tXHRkYXRhID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuLVx0b2ZmIFx1MDAyNj0gflBBR0VfTUFTSztcbi1cdG0gPSAxIFx1MDAzY1x1MDAzYyAofm5pZHggXHUwMDI2IDcpO1xuLVx0Ynl0ZSA9IGRhdGFbb2ZmXTtcbi1cdGlmICghKGJ5dGUgXHUwMDI2IG0pKSB7XG4rXG4rXHRyZXMgPSBoZnNfYm1hcF9jbGVhcl9iaXQobm9kZSwgbmlkeCk7XG4rXHRpZiAocmVzID09IC1FSU5WQUwpIHtcbiBcdFx0cHJfY3JpdChcInRyeWluZyB0byBmcmVlIGZyZWUgYm5vZGUgJXUoJWQpXFxuXCIsXG4tXHRcdFx0bm9kZS1cdTAwM2V0aGlzLCBub2RlLVx1MDAzZXR5cGUpO1xuLVx0XHRrdW5tYXBfbG9jYWwoZGF0YSk7XG4tXHRcdGhmc19ibm9kZV9wdXQobm9kZSk7XG4tXHRcdHJldHVybjtcbitcdFx0XHRuaWR4LCBub2RlLVx1MDAzZXR5cGUpO1xuK1x0fSBlbHNlIGlmIChyZXMpIHtcbitcdFx0cHJfY3JpdChcImZhaWwgdG8gZnJlZSBibm9kZSAldSglZClcXG5cIixcbitcdFx0XHRuaWR4LCBub2RlLVx1MDAzZXR5cGUpO1xuK1x0fSBlbHNlIHtcbitcdFx0dHJlZS1cdTAwM2VmcmVlX25vZGVzKys7XG4rXHRcdG1hcmtfaW5vZGVfZGlydHkodHJlZS1cdTAwM2Vpbm9kZSk7XG4gXHR9XG4tXHRkYXRhW29mZl0gPSBieXRlIFx1MDAyNiB+bTtcbi1cdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuLVx0a3VubWFwX2xvY2FsKGRhdGEpO1xuK1xuIFx0aGZzX2Jub2RlX3B1dChub2RlKTtcbi1cdHRyZWUtXHUwMDNlZnJlZV9ub2RlcysrO1xuLVx0bWFya19pbm9kZV9kaXJ0eSh0cmVlLVx1MDAzZWlub2RlKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvaGZzL2J0cmVlLmggYi9mcy9oZnMvYnRyZWUuaFxuaW5kZXggOTliZTg1OGIyNDQ2NTAuLmI0YzNmMmEzMTQ3MTAwIDEwMDY0NFxuLS0tIGEvZnMvaGZzL2J0cmVlLmhcbisrKyBiL2ZzL2hmcy9idHJlZS5oXG5AQCAtMTI5LDMgKzEyOSw0MyBAQCBleHRlcm4gaW50IF9faGZzX2JyZWNfZmluZChzdHJ1Y3QgaGZzX2Jub2RlICpibm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKTtcbiBleHRlcm4gaW50IGhmc19icmVjX2ZpbmQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKTtcbiBleHRlcm4gaW50IGhmc19icmVjX3JlYWQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLCB2b2lkICpyZWMsIHUzMiByZWNfbGVuKTtcbiBleHRlcm4gaW50IGhmc19icmVjX2dvdG8oc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLCBpbnQgY250KTtcbitcbitzdGF0aWMgaW5saW5lIGJvb2wgaXNfYm5vZGVfb2Zmc2V0X3ZhbGlkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBvZmYpXG4re1xuK1x0Ym9vbCBpc192YWxpZDtcbitcbitcdGlmICghbm9kZSB8fCAhbm9kZS1cdTAwM2V0cmVlKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpc192YWxpZCA9IG9mZiBcdTAwM2Mgbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZTtcbitcbitcdGlmICghaXNfdmFsaWQpIHtcbitcdFx0cHJfZXJyKFwiaW52YWxpZCBvZmZzZXQ6IGlkICV1LCB0eXBlICUjeCwgaCAldSwgc3ogJXUsIG9mZiAldVxcblwiLFxuK1x0XHQgICAgICAgbm9kZS1cdTAwM2V0aGlzLCBub2RlLVx1MDAzZXR5cGUsIG5vZGUtXHUwMDNlaGVpZ2h0LFxuK1x0XHQgICAgICAgbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZSwgb2ZmKTtcbitcdH1cbitcbitcdHJldHVybiBpc192YWxpZDtcbit9XG4rXG4rc3RhdGljIGlubGluZSB1MzIgY2hlY2tfYW5kX2NvcnJlY3RfcmVxdWVzdGVkX2xlbmd0aChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgb2ZmLCB1MzIgbGVuKVxuK3tcbitcdHVuc2lnbmVkIGludCBub2RlX3NpemU7XG4rXG4rXHRpZiAoIWlzX2Jub2RlX29mZnNldF92YWxpZChub2RlLCBvZmYpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdG5vZGVfc2l6ZSA9IG5vZGUtXHUwMDNldHJlZS1cdTAwM2Vub2RlX3NpemU7XG4rXG4rXHRpZiAoKHU2NClvZmYgKyBsZW4gXHUwMDNlIG5vZGVfc2l6ZSkge1xuK1x0XHR1MzIgbmV3X2xlbiA9IG5vZGVfc2l6ZSAtIG9mZjtcbitcbitcdFx0cHJfZXJyKFwiY29ycmVjdGVkIGxlbjogaWQgJXUsIHR5cGUgJSN4LCBoICV1LCBzeiAldSwgb2ZmICV1LCBsZW4gJXUtXHUwMDNlJXVcXG5cIixcbitcdFx0ICAgICAgIG5vZGUtXHUwMDNldGhpcywgbm9kZS1cdTAwM2V0eXBlLCBub2RlLVx1MDAzZWhlaWdodCxcbitcdFx0ICAgICAgIG5vZGVfc2l6ZSwgb2ZmLCBsZW4sIG5ld19sZW4pO1xuK1xuK1x0XHRyZXR1cm4gbmV3X2xlbjtcbitcdH1cbitcbitcdHJldHVybiBsZW47XG4rfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oIGIvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmhcbmluZGV4IDQ1ZmI0YzlmZjlmNWVlLi5kNmE2MTVlNzRiMjZlMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaFxuQEAgLTUxMCwxNCArNTEwLDIxIEBAIHN0cnVjdCBoZnNfYnRyZWVfaGVhZGVyX3JlYyB7XG4gXHRcdFx0XHRcdFx0ICAgYi10cmVlIGJ1dCBub3QgaW4gZXh0ZW50c1xuIFx0XHRcdFx0XHRcdCAgIGItdHJlZSAoaGZzcGx1cykuICovXG4gXG4rLyogSEZTIEJUcmVlIG1pc2MgaW5mbyAqL1xuKyNkZWZpbmUgSEZTX1RSRUVfSEVBRFx0XHRcdFx0MFxuKyNkZWZpbmUgSEZTX0JUUkVFX0hEUl9NQVBfUkVDX0lOREVYXHRcdDJcdC8qIE1hcCAoYml0bWFwKSByZWNvcmQgaW4gSGVhZGVyIG5vZGUgKi9cbisjZGVmaW5lIEhGU19CVFJFRV9NQVBfTk9ERV9SRUNfSU5ERVhcdFx0MFx0LyogTWFwIHJlY29yZCBpbiBNYXAgTm9kZSAqL1xuK1xuIC8qIEhGUysgQlRyZWUgbWlzYyBpbmZvICovXG4tI2RlZmluZSBIRlNQTFVTX1RSRUVfSEVBRFx0XHRcdDBcbisjZGVmaW5lIEhGU1BMVVNfVFJFRV9IRUFEXHRcdFx0SEZTX1RSRUVfSEVBRFxuICNkZWZpbmUgSEZTUExVU19OT0RFX01YU1pcdFx0XHQzMjc2OFxuICNkZWZpbmUgSEZTUExVU19OT0RFX01JTlNaXHRcdFx0NTEyXG4gI2RlZmluZSBIRlNQTFVTX0FUVFJfVFJFRV9OT0RFX1NJWkVcdFx0ODE5MlxuICNkZWZpbmUgSEZTUExVU19CVFJFRV9IRFJfTk9ERV9SRUNTX0NPVU5UXHQzXG4tI2RlZmluZSBIRlNQTFVTX0JUUkVFX0hEUl9NQVBfUkVDX0lOREVYXHRcdDJcdC8qIE1hcCAoYml0bWFwKSByZWNvcmQgaW4gSGVhZGVyIG5vZGUgKi9cbi0jZGVmaW5lIEhGU1BMVVNfQlRSRUVfTUFQX05PREVfUkVDX0lOREVYXHQwXHQvKiBNYXAgcmVjb3JkIGluIE1hcCBOb2RlICovXG4rLyogTWFwIChiaXRtYXApIHJlY29yZCBpbiBIZWFkZXIgbm9kZSAqL1xuKyNkZWZpbmUgSEZTUExVU19CVFJFRV9IRFJfTUFQX1JFQ19JTkRFWFx0XHRIRlNfQlRSRUVfSERSX01BUF9SRUNfSU5ERVhcbisvKiBNYXAgcmVjb3JkIGluIE1hcCBOb2RlICovXG4rI2RlZmluZSBIRlNQTFVTX0JUUkVFX01BUF9OT0RFX1JFQ19JTkRFWFx0SEZTX0JUUkVFX01BUF9OT0RFX1JFQ19JTkRFWFxuICNkZWZpbmUgSEZTUExVU19CVFJFRV9IRFJfVVNFUl9CWVRFU1x0XHQxMjhcbiAjZGVmaW5lIEhGU1BMVVNfQlRSRUVfTUFQX05PREVfUkVDU19DT1VOVFx0MlxuICNkZWZpbmUgSEZTUExVU19CVFJFRV9NQVBfTk9ERV9SRVNFUlZFRF9CWVRFU1x0MlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTM6MTY6MDQuMDgzOTg4ODI5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE4Nzk3MTUxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBIRlMgRmlsZXN5c3RlbSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1ha2luZyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIHRoZSBIRlMgZmlsZXN5c3RlbSBkcml2ZXIuIFNwZWNpZmljYWxseSwgaXQncyB0b3VjaGluZyBjb3JlIGNvbXBvbmVudHM6IGBmcy9oZnMvYnRyZWUuY2AsIGBmcy9oZnMvYm5vZGUuY2AsIGBmcy9oZnMvYnRyZWUuaGAsIGFuZCBgaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmhgLiBUaGlzIGlzbid0IGp1c3QgYSBtaW5vciB0d2Vhazsgd2UncmUgdGFsa2luZyBhYm91dCBkaXJlY3QgbW9kaWZpY2F0aW9ucyB0byBob3cgdGhlIEhGUyBkcml2ZXIgaW50ZXJhY3RzIHdpdGggaXRzIEItdHJlZSBzdHJ1Y3R1cmUgYW5kIGJpdG1hcCBtYW5hZ2VtZW50LlxuXG5UaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb250ZXh0IHN0cnVjdHVyZSwgYHN0cnVjdCBoZnNfYm1hcF9jdHhgLCBhbmQgYSBuZXcgZnVuY3Rpb24sIGBoZnNfYm1hcF9nZXRfbWFwX3BhZ2VgLCB3aGljaCBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSBhcyBhbiBhdHRlbXB0IHRvIHNhZmVseSBtYW5hZ2UgbWVtb3J5IGFjY2VzcyB3aXRoaW4gdGhlIEItdHJlZSBjb250ZXh0LiBJdCBhbHNvIGRlZmluZXMgYGhmc19ibWFwX3Rlc3RfYml0YCBhbmQgYGhmc19ibWFwX2NsZWFyX2JpdGAsIHdoaWNoIEkgY2FuIGluZmVyIGFyZSBiaXQgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyBzcGVjaWZpY2FsbHkgdGFpbG9yZWQgZm9yIGJpdG1hcCBtYW5hZ2VtZW50LCBsaWtlbHkgcmVsYXRlZCB0byBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gd2l0aGluIHRoZSBmaWxlc3lzdGVtLiBDcml0aWNhbGx5LCBleGlzdGluZyBmdW5jdGlvbnMgbGlrZSBgaGZzX2J0cmVlX29wZW5gLCBgaGZzX2JtYXBfYWxsb2NgLCBhbmQgYGhmc19ibWFwX2ZyZWVgIGFyZSBiZWluZyB1cGRhdGVkIHRvIHVzZSB0aGVzZSBuZXcgZnVuY3Rpb25zLiBUaGlzIG1lYW5zIGEgc2lnbmlmaWNhbnQgbW9kaWZpY2F0aW9uIHRvIHRoZSBleGlzdGluZyBjb250cm9sIGZsb3cuXG5cbkdpdmVuIHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzIGFuZCB0aGUgY3JpdGljYWwgbmF0dXJlIG9mIHRoZSB0b3VjaGVkIGNvZGUsIHRoaXMgaXMgZGVmaW5pdGVseSBXb3J0aEZ1enppbmcuIEl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSBIRlMgZmlsZXN5c3RlbS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gdGFyZ2V0IGR1cmluZyBmdXp6aW5nOlxuXG4qICAgYGhmc19ibWFwX2dldF9tYXBfcGFnZWAgKHN0YXRpYylcbiogICBgaGZzX2JtYXBfdGVzdF9iaXRgIChzdGF0aWMpXG4qICAgYGhmc19ibWFwX2NsZWFyX2JpdGAgKHN0YXRpYylcbiogICBgaGZzX2J0cmVlX29wZW5gXG4qICAgYGhmc19ibWFwX2FsbG9jYFxuKiAgIGBoZnNfYm1hcF9mcmVlYFxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSwgYW5kIHdoYXQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBmcy9oZnMvYnRyZWUuY2AgYW5kIG1ha2Ugc3VyZSBpdCdzIGxpbmtlZCBpbiB0aGUgYnVpbGQuIFRoZSBuZWNlc3NhcnkgY29uZmlnIGlzIGBDT05GSUdfSEZTX0ZTYC4gSSdsbCB2ZXJpZnkgYWxsIHRoaXMgdXNpbmcgYGdyZXBwZXJgIGFzIGEgZmluYWwgY2hlY2ssIG1ha2luZyBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MjYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxMzoxNjoxMS4yNzE5NjQ0MDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM5ODA0Nzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIRlNfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2hmcy9LY29uZmlnOjI6Y29uZmlnIEhGU19GU1xcbmZzL2hmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkFwcGxlIE1hY2ludG9zaCBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxMzoxNjoxMS45MTE3Nzc4OTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Mzg5NDQ1MDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEhGUyBGaWxlc3lzdGVtIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIHRoZSBjb25maWcgaW5kaWNhdGVzIHdlJ3JlIGRlYWxpbmcgd2l0aCBgSEZTX0ZTYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4gTG9va2luZyBhdCB0aGUgbW9kaWZpZWQgZmlsZXMsIGl0J3MgY2xlYXIgdGhlc2UgY2hhbmdlcyBhcmUgd2l0aGluIHRoZSBgZnMvaGZzYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBgYm5vZGUuY2AsIGBidHJlZS5jYCwgYGJ0cmVlLmhgLCBhbmQgYGluY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oYC4gQWxsIG9mIHRoaXMgY29uZmlybXMgd2UncmUgaW5kZWVkIGZvY3VzZWQgb24gYEhGU19GU2AuXG5cbk5vdywgSSBuZWVkIHRvIGlkZW50aWZ5IGtleSBmdW5jdGlvbnMuIEkgc2VlIGBoZnNfYnRyZWVfb3BlbmAsIGBoZnNfYm1hcF9hbGxvY2AsIGFuZCBgaGZzX2JtYXBfZnJlZWAgaGF2ZSBiZWVuIHRvdWNoZWQuIExldCdzIHNlZSBpZiB0aGVzZSBhcmUgaG90LXBhdGggZnVuY3Rpb25zLCBiZWNhdXNlIHRoYXQgd291bGQgbWFrZSB0aGVtIGlkZWFsIGZvciBmdXp6aW5nLiBgaGZzX2J0cmVlX29wZW5gIGlzIGNhbGxlZCBkdXJpbmcgbW91bnQgb3Igd2hlbiBvcGVuaW5nIGEgYnRyZWUg4oCTIGRlZmluaXRlbHkgYSBnb29kIGNhbmRpZGF0ZS4gYGhmc19ibWFwX2FsbG9jYCBoYW5kbGVzIGJ0cmVlIG5vZGUgYWxsb2NhdGlvbiwgYW5kIGBoZnNfYm1hcF9mcmVlYCBkb2VzIHRoZSBvcHBvc2l0ZTogcmVsZWFzaW5nIHRob3NlIG5vZGVzLiBCb3RoIGFyZSBjb3JlIG9wZXJhdGlvbnMsIHZlcnkgZ29vZC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgYXJlIGluZGVlZCB0aGUgcmlnaHQgb25lcyB0byBmb2N1cyBvbi4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgc3RhdGljIGZ1bmN0aW9ucywgbGlrZSBgaGZzX2JtYXBfZ2V0X21hcF9wYWdlYCwgYGhmc19ibWFwX3Rlc3RfYml0YCwgYW5kIGBoZnNfYm1hcF9jbGVhcl9iaXRgLiBJdCdzIGdlbmVyYWxseSBiZXR0ZXIgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMsIGV4cG9ydGVkIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlbSwgdW5sZXNzIHRoZSBzdGF0aWNzIGFyZSBzdWJzdGFudGlhbCBpbiB0aGVpciBvd24gcmlnaHQuIEFuZCBpdCBsb29rcyBsaWtlIHRoZXNlIGFyZSBzdGF0aWMgKmFuZCogaGF2ZSBiZWVuIG1vZGlmaWVkLiBUaGV5IGFyZSBhbHNvIG5ldy4gSSBzZWUgYGhmc19idHJlZV9vcGVuYCwgYGhmc19ibWFwX2FsbG9jYCwgYW5kIGBoZnNfYm1hcF9mcmVlYCBhcmUgYWxzbyBtb2RpZmllZC4gU28sIGFsbCBvZiB0aGVzZSBhcmUgY2FuZGlkYXRlcy5cblxuU28sIGhlcmUncyB3aGF0IEknbGwgbGlzdDpcbi0gYGhmc19idHJlZV9vcGVuYFxuLSBgaGZzX2JtYXBfYWxsb2NgXG4tIGBoZnNfYm1hcF9mcmVlYFxuLSBgaGZzX2JtYXBfZ2V0X21hcF9wYWdlYFxuLSBgaGZzX2JtYXBfdGVzdF9iaXRgXG4tIGBoZnNfYm1hcF9jbGVhcl9iaXRgXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBgaGZzX2JtYXBfZ2V0X21hcF9wYWdlYCBzaG91bGQgYmUgaW4gYGZzL2hmcy9idHJlZS5jYC4gWWVwLCBpdCdzIHRoZXJlLiBBbHJpZ2h0LCB0aW1lIHRvIHNldCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY5OSwiT3V0cHV0VG9rZW5zIjoxNzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTM6MTY6MjAuMzAxMjI2MzM5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODY5Nzc2OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhmc19idHJlZV9vcGVuXCIsXG4gICAgXCJoZnNfYm1hcF9hbGxvY1wiLFxuICAgIFwiaGZzX2JtYXBfZnJlZVwiLFxuICAgIFwiaGZzX2JtYXBfZ2V0X21hcF9wYWdlXCIsXG4gICAgXCJoZnNfYm1hcF90ZXN0X2JpdFwiLFxuICAgIFwiaGZzX2JtYXBfY2xlYXJfYml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEhGUyBmaWxlc3lzdGVtJ3MgYnRyZWUgbWFwIGhhbmRsaW5nIGxvZ2ljLiBJdCBhZGRzIG5ldyBmdW5jdGlvbnMgdG8gc2FmZWx5IGdldCBtYXAgcGFnZXMsIHRlc3QgYml0cywgYW5kIGNsZWFyIGJpdHMsIGFuZCBtb2RpZmllcyBub2RlIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgdG8gdXNlIHRoZXNlIG5ldyBmdW5jdGlvbnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyB0aGUgZmlsZXN5c3RlbSBtYW5hZ2VzIGl0cyBpbnRlcm5hbCBidHJlZSBzdHJ1Y3R1cmVzLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNfYnRyZWVfb3BlblwiLFxuICAgIFwiaGZzX2JtYXBfYWxsb2NcIixcbiAgICBcImhmc19ibWFwX2ZyZWVcIixcbiAgICBcImhmc19ibWFwX2dldF9tYXBfcGFnZVwiLFxuICAgIFwiaGZzX2JtYXBfdGVzdF9iaXRcIixcbiAgICBcImhmc19ibWFwX2NsZWFyX2JpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBIRlMgZmlsZXN5c3RlbSdzIGJ0cmVlIG1hcCBoYW5kbGluZyBsb2dpYy4gSXQgYWRkcyBuZXcgZnVuY3Rpb25zIHRvIHNhZmVseSBnZXQgbWFwIHBhZ2VzLCB0ZXN0IGJpdHMsIGFuZCBjbGVhciBiaXRzLCBhbmQgbW9kaWZpZXMgbm9kZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIHRvIHVzZSB0aGVzZSBuZXcgZnVuY3Rpb25zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBob3cgdGhlIGZpbGVzeXN0ZW0gbWFuYWdlcyBpdHMgaW50ZXJuYWwgYnRyZWUgc3RydWN0dXJlcywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowqgbfl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-16 12:42:35 +0000 UTC FinishedAt: 2026-07-16 13:16:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "37e2f878a7a660a216cc7a60459995fefd150f25", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "37e2f878a7a660a216cc7a60459995fefd150f25", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFS_FS" ], "series_id": "309704ad-1a5f-4c4b-99de-ec545c4fadc2" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "hfs_btree_open", "hfs_bmap_alloc", "hfs_bmap_free", "hfs_bmap_get_map_page", "hfs_bmap_test_bit", "hfs_bmap_clear_bit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDEzOjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hmc19idHJlZV9vcGVuJiMzNDssCiAgICAmIzM0O2hmc19ibWFwX2FsbG9jJiMzNDssCiAgICAmIzM0O2hmc19ibWFwX2ZyZWUmIzM0OywKICAgICYjMzQ7aGZzX2JtYXBfZ2V0X21hcF9wYWdlJiMzNDssCiAgICAmIzM0O2hmc19ibWFwX3Rlc3RfYml0JiMzNDssCiAgICAmIzM0O2hmc19ibWFwX2NsZWFyX2JpdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgSEZTIGZpbGVzeXN0ZW0mIzM5O3MgYnRyZWUgbWFwIGhhbmRsaW5nIGxvZ2ljLiBJdCBhZGRzIG5ldyBmdW5jdGlvbnMgdG8gc2FmZWx5IGdldCBtYXAgcGFnZXMsIHRlc3QgYml0cywgYW5kIGNsZWFyIGJpdHMsIGFuZCBtb2RpZmllcyBub2RlIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgdG8gdXNlIHRoZXNlIG5ldyBmdW5jdGlvbnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyB0aGUgZmlsZXN5c3RlbSBtYW5hZ2VzIGl0cyBpbnRlcm5hbCBidHJlZSBzdHJ1Y3R1cmVzLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxMzoxNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNiMmNkMDc4MTE1MGVlYjZhYTQwNzNlODljYzVjMDBiMWIyY2Q2MjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAxMzoxNjowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9oZnMvYm5vZGUuYyBiL2ZzL2hmcy9ibm9kZS5jXG5pbmRleCBkYThlNTM0MmM5MWNjMi4uMWIzMzExMDhkOWMwMWIgMTAwNjQ0XG4tLS0gYS9mcy9oZnMvYm5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzL2Jub2RlLmNcbkBAIC0xNSw0OCAmIzQzOzE1LDYgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDtidHJlZS5oXCYjMzQ7XG4gXG4tc3RhdGljIGlubGluZVxuLWJvb2wgaXNfYm5vZGVfb2Zmc2V0X3ZhbGlkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBvZmYpXG4te1xuLVx0Ym9vbCBpc192YWxpZCA9IG9mZiBcdTAwM2Mgbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZTtcbi1cbi1cdGlmICghaXNfdmFsaWQpIHtcbi1cdFx0cHJfZXJyKFwmIzM0O3JlcXVlc3RlZCBpbnZhbGlkIG9mZnNldDogXCYjMzQ7XG4tXHRcdCAgICAgICBcJiMzNDtOT0RFOiBpZCAldSwgdHlwZSAlI3gsIGhlaWdodCAldSwgXCYjMzQ7XG4tXHRcdCAgICAgICBcJiMzNDtub2RlX3NpemUgJXUsIG9mZnNldCAldVxcblwmIzM0Oyxcbi1cdFx0ICAgICAgIG5vZGUtXHUwMDNldGhpcywgbm9kZS1cdTAwM2V0eXBlLCBub2RlLVx1MDAzZWhlaWdodCxcbi1cdFx0ICAgICAgIG5vZGUtXHUwMDNldHJlZS1cdTAwM2Vub2RlX3NpemUsIG9mZik7XG4tXHR9XG4tXG4tXHRyZXR1cm4gaXNfdmFsaWQ7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmVcbi11MzIgY2hlY2tfYW5kX2NvcnJlY3RfcmVxdWVzdGVkX2xlbmd0aChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgb2ZmLCB1MzIgbGVuKVxuLXtcbi1cdHVuc2lnbmVkIGludCBub2RlX3NpemU7XG4tXG4tXHRpZiAoIWlzX2Jub2RlX29mZnNldF92YWxpZChub2RlLCBvZmYpKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdG5vZGVfc2l6ZSA9IG5vZGUtXHUwMDNldHJlZS1cdTAwM2Vub2RlX3NpemU7XG4tXG4tXHRpZiAoKHU2NClvZmYgJiM0MzsgbGVuIFx1MDAzZSBub2RlX3NpemUpIHtcbi1cdFx0dTMyIG5ld19sZW4gPSBub2RlX3NpemUgLSBvZmY7XG4tXG4tXHRcdHByX2VycihcJiMzNDtyZXF1ZXN0ZWQgbGVuZ3RoIGhhcyBiZWVuIGNvcnJlY3RlZDogXCYjMzQ7XG4tXHRcdCAgICAgICBcJiMzNDtOT0RFOiBpZCAldSwgdHlwZSAlI3gsIGhlaWdodCAldSwgXCYjMzQ7XG4tXHRcdCAgICAgICBcJiMzNDtub2RlX3NpemUgJXUsIG9mZnNldCAldSwgXCYjMzQ7XG4tXHRcdCAgICAgICBcJiMzNDtyZXF1ZXN0ZWRfbGVuICV1LCBjb3JyZWN0ZWRfbGVuICV1XFxuXCYjMzQ7LFxuLVx0XHQgICAgICAgbm9kZS1cdTAwM2V0aGlzLCBub2RlLVx1MDAzZXR5cGUsIG5vZGUtXHUwMDNlaGVpZ2h0LFxuLVx0XHQgICAgICAgbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZSwgb2ZmLCBsZW4sIG5ld19sZW4pO1xuLVxuLVx0XHRyZXR1cm4gbmV3X2xlbjtcbi1cdH1cbi1cbi1cdHJldHVybiBsZW47XG4tfVxuLVxuIHZvaWQgaGZzX2Jub2RlX3JlYWQoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdm9pZCAqYnVmLCB1MzIgb2ZmLCB1MzIgbGVuKVxuIHtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuZGlmZiAtLWdpdCBhL2ZzL2hmcy9idHJlZS5jIGIvZnMvaGZzL2J0cmVlLmNcbmluZGV4IDJlYjM3YTJmNjRlODY2Li40MWI0ZThmYzk0NjM3ZCAxMDA2NDRcbi0tLSBhL2ZzL2hmcy9idHJlZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnMvYnRyZWUuY1xuQEAgLTE1LDYgJiM0MzsxNSwxMjEgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDtidHJlZS5oXCYjMzQ7XG4gXG4mIzQzOy8qIENvbnRleHQgZm9yIGl0ZXJhdGluZyBiLXRyZWUgbWFwIHBhZ2VzXG4mIzQzOyAqIEBwYWdlX2lkeDogVGhlIGluZGV4IG9mIHRoZSBwYWdlIHdpdGhpbiB0aGUgYi1ub2RlJiMzOTtzIHBhZ2UgYXJyYXlcbiYjNDM7ICogQG9mZjogVGhlIGJ5dGUgb2Zmc2V0IHdpdGhpbiB0aGUgbWFwcGVkIHBhZ2VcbiYjNDM7ICogQGxlbjogVGhlIHJlbWFpbmluZyBsZW5ndGggb2YgdGhlIG1hcCByZWNvcmRcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBoZnNfYm1hcF9jdHgge1xuJiM0MztcdHVuc2lnbmVkIGludCBwYWdlX2lkeDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgb2ZmO1xuJiM0MztcdHUxNiBsZW47XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBGaW5kcyB0aGUgc3BlY2lmaWMgcGFnZSBjb250YWluaW5nIHRoZSByZXF1ZXN0ZWQgYnl0ZSBvZmZzZXQgd2l0aGluIHRoZSBtYXBcbiYjNDM7ICogcmVjb3JkLiBBdXRvbWF0aWNhbGx5IGhhbmRsZXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBoZWFkZXIgYW5kIG1hcCBub2Rlcy5cbiYjNDM7ICogUmV0dXJucyB0aGUgc3RydWN0IHBhZ2UgcG9pbnRlciwgb3IgYW4gRVJSX1BUUiBvbiBmYWlsdXJlLlxuJiM0MzsgKiBOb3RlOiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYXBwaW5nL3VubWFwcGluZyB0aGUgcmV0dXJuZWQgcGFnZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGFnZSAqaGZzX2JtYXBfZ2V0X21hcF9wYWdlKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsXG4mIzQzO1x0XHRcdFx0XHQgIHN0cnVjdCBoZnNfYm1hcF9jdHggKmN0eCxcbiYjNDM7XHRcdFx0XHRcdCAgdTMyIGJ5dGVfb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0dTE2IHJlY19pZHgsIG9mZjE2O1xuJiM0MztcdHVuc2lnbmVkIGludCBwYWdlX29mZjtcbiYjNDM7XG4mIzQzO1x0aWYgKG5vZGUtXHUwMDNldGhpcyA9PSBIRlNfVFJFRV9IRUFEKSB7XG4mIzQzO1x0XHRpZiAobm9kZS1cdTAwM2V0eXBlICE9IEhGU19OT0RFX0hFQURFUikge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7aGZzOiBpbnZhbGlkIGJ0cmVlIGhlYWRlciBub2RlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZWNfaWR4ID0gSEZTX0JUUkVFX0hEUl9NQVBfUkVDX0lOREVYO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpZiAobm9kZS1cdTAwM2V0eXBlICE9IEhGU19OT0RFX01BUCkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7aGZzOiBpbnZhbGlkIGJ0cmVlIG1hcCBub2RlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZWNfaWR4ID0gSEZTX0JUUkVFX01BUF9OT0RFX1JFQ19JTkRFWDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGN0eC1cdTAwM2VsZW4gPSBoZnNfYnJlY19sZW5vZmYobm9kZSwgcmVjX2lkeCwgXHUwMDI2b2ZmMTYpO1xuJiM0MztcdGlmICghY3R4LVx1MDAzZWxlbilcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWlzX2Jub2RlX29mZnNldF92YWxpZChub2RlLCBvZmYxNikpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZWxlbiA9IGNoZWNrX2FuZF9jb3JyZWN0X3JlcXVlc3RlZF9sZW5ndGgobm9kZSwgb2ZmMTYsIGN0eC1cdTAwM2VsZW4pO1xuJiM0MztcbiYjNDM7XHRpZiAoYnl0ZV9vZmZzZXQgXHUwMDNlPSBjdHgtXHUwMDNlbGVuKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4mIzQzO1xuJiM0MztcdHBhZ2Vfb2ZmID0gKHUzMilvZmYxNiAmIzQzOyBub2RlLVx1MDAzZXBhZ2Vfb2Zmc2V0ICYjNDM7IGJ5dGVfb2Zmc2V0O1xuJiM0MztcdGN0eC1cdTAwM2VwYWdlX2lkeCA9IHBhZ2Vfb2ZmIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuJiM0MztcdGN0eC1cdTAwM2VvZmYgPSBwYWdlX29mZiBcdTAwMjYgflBBR0VfTUFTSztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG5vZGUtXHUwMDNlcGFnZVtjdHgtXHUwMDNlcGFnZV9pZHhdO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogaGZzX2JtYXBfdGVzdF9iaXQgLSB0ZXN0IGEgYml0IGluIHRoZSBiLXRyZWUgbWFwXG4mIzQzOyAqIEBub2RlOiB0aGUgYi10cmVlIG5vZGUgY29udGFpbmluZyB0aGUgbWFwIHJlY29yZFxuJiM0MzsgKiBAbm9kZV9iaXRfaWR4OiB0aGUgcmVsYXRpdmUgYml0IGluZGV4IHdpdGhpbiB0aGUgbm9kZSYjMzk7cyBtYXAgcmVjb3JkXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdHJ1ZSBpZiBzZXQsIGZhbHNlIGlmIGNsZWFyIG9yIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCBoZnNfYm1hcF90ZXN0X2JpdChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgbm9kZV9iaXRfaWR4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhmc19ibWFwX2N0eCBjdHg7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4mIzQzO1x0dTggKmJtYXAsIGJ5dGUsIG1hc2s7XG4mIzQzO1xuJiM0MztcdHBhZ2UgPSBoZnNfYm1hcF9nZXRfbWFwX3BhZ2Uobm9kZSwgXHUwMDI2Y3R4LCBub2RlX2JpdF9pZHggLyBCSVRTX1BFUl9CWVRFKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHBhZ2UpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRibWFwID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuJiM0MztcdGJ5dGUgPSBibWFwW2N0eC5vZmZdO1xuJiM0MztcdGt1bm1hcF9sb2NhbChibWFwKTtcbiYjNDM7XG4mIzQzO1x0bWFzayA9IDEgXHUwMDNjXHUwMDNjICg3IC0gKG5vZGVfYml0X2lkeCAlIEJJVFNfUEVSX0JZVEUpKTtcbiYjNDM7XHRyZXR1cm4gKGJ5dGUgXHUwMDI2IG1hc2spICE9IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBoZnNfYm1hcF9jbGVhcl9iaXQgLSBjbGVhciBhIGJpdCBpbiB0aGUgYi10cmVlIG1hcFxuJiM0MzsgKiBAbm9kZTogdGhlIGItdHJlZSBub2RlIGNvbnRhaW5pbmcgdGhlIG1hcCByZWNvcmRcbiYjNDM7ICogQG5vZGVfYml0X2lkeDogdGhlIHJlbGF0aXZlIGJpdCBpbmRleCB3aXRoaW4gdGhlIG5vZGUmIzM5O3MgbWFwIHJlY29yZFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVJTlZBTCBpZiBhbHJlYWR5IGNsZWFyLCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBoZnNfYm1hcF9jbGVhcl9iaXQoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG5vZGVfYml0X2lkeClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoZnNfYm1hcF9jdHggY3R4O1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYWdlO1xuJiM0MztcdHU4ICpibWFwLCBtYXNrO1xuJiM0MztcbiYjNDM7XHRwYWdlID0gaGZzX2JtYXBfZ2V0X21hcF9wYWdlKG5vZGUsIFx1MDAyNmN0eCwgbm9kZV9iaXRfaWR4IC8gQklUU19QRVJfQllURSk7XG4mIzQzO1x0aWYgKElTX0VSUihwYWdlKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKHBhZ2UpO1xuJiM0MztcbiYjNDM7XHRibWFwID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuJiM0MztcbiYjNDM7XHRtYXNrID0gMSBcdTAwM2NcdTAwM2MgKDcgLSAobm9kZV9iaXRfaWR4ICUgQklUU19QRVJfQllURSkpO1xuJiM0MztcbiYjNDM7XHRpZiAoIShibWFwW2N0eC5vZmZdIFx1MDAyNiBtYXNrKSkge1xuJiM0MztcdFx0a3VubWFwX2xvY2FsKGJtYXApO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRibWFwW2N0eC5vZmZdIFx1MDAyNj0gfm1hc2s7XG4mIzQzO1x0c2V0X3BhZ2VfZGlydHkocGFnZSk7XG4mIzQzO1x0a3VubWFwX2xvY2FsKGJtYXApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKiBHZXQgYSByZWZlcmVuY2UgdG8gYSBCKlRyZWUgYW5kIGRvIHNvbWUgaW5pdGlhbCBjaGVja3MgKi9cbiBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZXljbXApXG4ge1xuQEAgLTIzLDYgJiM0MzsxMzgsNyBAQCBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZVxuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbiYjNDM7XHRzdHJ1Y3QgaGZzX2Jub2RlICpub2RlO1xuIFx0dW5zaWduZWQgaW50IHNpemU7XG4gXHR1MTYgZGJsb2NrO1xuIFx0c2VjdG9yX3Qgc3RhcnRfYmxvY2s7XG5AQCAtMTU1LDYgJiM0MzsyNzEsMjAgQEAgc3RydWN0IGhmc19idHJlZSAqaGZzX2J0cmVlX29wZW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGlkLCBidHJlZV9rZXljbXAga2VcbiBcdGt1bm1hcF9sb2NhbChoZWFkKTtcbiBcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHRmb2xpb19wdXQoZm9saW8pO1xuJiM0MztcbiYjNDM7XHRub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgSEZTX1RSRUVfSEVBRCk7XG4mIzQzO1x0aWYgKElTX0VSUihub2RlKSlcbiYjNDM7XHRcdGdvdG8gZnJlZV9pbm9kZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFoZnNfYm1hcF90ZXN0X2JpdChub2RlLCBIRlNfVFJFRV9IRUFEKSkge1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDsoJXMpOiAlcyAoY25pZCAweCV4KSBiaXRtYXAgY29ycnVwdGVkLCBmb3JjaW5nIHJkb25seVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0c2ItXHUwMDNlc19pZCwgaWQgPT0gSEZTX0VYVF9DTklEID8gXCYjMzQ7ZXh0ZW50c1wmIzM0OyA6IFwmIzM0O2NhdGFsb2dcJiMzNDssIGlkKTtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7UnVuIGZzY2suaGZzIHRvIHJlcGFpci5cXG5cJiMzNDspO1xuJiM0MztcdFx0c2ItXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRoZnNfYm5vZGVfcHV0KG5vZGUpO1xuJiM0MztcbiBcdHJldHVybiB0cmVlO1xuIFxuIGZhaWxfZm9saW86XG5AQCAtMjg1LDExICYjNDM7NDE1LDkgQEAgaW50IGhmc19ibWFwX3Jlc2VydmUoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIHJzdmRfbm9kZXMpXG4gc3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlcbiB7XG4gXHRzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCAqbmV4dF9ub2RlO1xuLVx0c3RydWN0IHBhZ2UgKipwYWdlcDtcbiYjNDM7XHRzdHJ1Y3QgaGZzX2JtYXBfY3R4IGN0eDtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdHUzMiBuaWR4LCBpZHg7XG4tXHR1bnNpZ25lZCBvZmY7XG4tXHR1MTYgb2ZmMTY7XG4tXHR1MTYgbGVuO1xuIFx0dTggKmRhdGEsIGJ5dGUsIG07XG4gXHRpbnQgaSwgcmVzO1xuIFxuQEAgLTMwMSwyNCAmIzQzOzQyOSwyNiBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxuIFx0bm9kZSA9IGhmc19ibm9kZV9maW5kKHRyZWUsIG5pZHgpO1xuIFx0aWYgKElTX0VSUihub2RlKSlcbiBcdFx0cmV0dXJuIG5vZGU7XG4tXHRsZW4gPSBoZnNfYnJlY19sZW5vZmYobm9kZSwgMiwgXHUwMDI2b2ZmMTYpO1xuLVx0b2ZmID0gb2ZmMTY7XG4gXG4tXHRvZmYgJiM0Mzs9IG5vZGUtXHUwMDNlcGFnZV9vZmZzZXQ7XG4tXHRwYWdlcCA9IG5vZGUtXHUwMDNlcGFnZSAmIzQzOyAob2ZmIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbi1cdGRhdGEgPSBrbWFwX2xvY2FsX3BhZ2UoKnBhZ2VwKTtcbi1cdG9mZiBcdTAwMjY9IH5QQUdFX01BU0s7XG4mIzQzO1x0cGFnZSA9IGhmc19ibWFwX2dldF9tYXBfcGFnZShub2RlLCBcdTAwMjZjdHgsIDApO1xuJiM0MztcdGlmIChJU19FUlIocGFnZSkpIHtcbiYjNDM7XHRcdHJlcyA9IFBUUl9FUlIocGFnZSk7XG4mIzQzO1x0XHRoZnNfYm5vZGVfcHV0KG5vZGUpO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIocmVzKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRhdGEgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRpZHggPSAwO1xuIFxuIFx0Zm9yICg7Oykge1xuLVx0XHR3aGlsZSAobGVuKSB7XG4tXHRcdFx0Ynl0ZSA9IGRhdGFbb2ZmXTtcbiYjNDM7XHRcdHdoaWxlIChjdHgubGVuKSB7XG4mIzQzO1x0XHRcdGJ5dGUgPSBkYXRhW2N0eC5vZmZdO1xuIFx0XHRcdGlmIChieXRlICE9IDB4ZmYpIHtcbiBcdFx0XHRcdGZvciAobSA9IDB4ODAsIGkgPSAwOyBpIFx1MDAzYyA4OyBtIFx1MDAzZVx1MDAzZT0gMSwgaSYjNDM7JiM0MzspIHtcbiBcdFx0XHRcdFx0aWYgKCEoYnl0ZSBcdTAwMjYgbSkpIHtcbiBcdFx0XHRcdFx0XHRpZHggJiM0Mzs9IGk7XG4tXHRcdFx0XHRcdFx0ZGF0YVtvZmZdIHw9IG07XG4tXHRcdFx0XHRcdFx0c2V0X3BhZ2VfZGlydHkoKnBhZ2VwKTtcbiYjNDM7XHRcdFx0XHRcdFx0ZGF0YVtjdHgub2ZmXSB8PSBtO1xuJiM0MztcdFx0XHRcdFx0XHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcbiBcdFx0XHRcdFx0XHRrdW5tYXBfbG9jYWwoZGF0YSk7XG4gXHRcdFx0XHRcdFx0dHJlZS1cdTAwM2VmcmVlX25vZGVzLS07XG4gXHRcdFx0XHRcdFx0bWFya19pbm9kZV9kaXJ0eSh0cmVlLVx1MDAzZWlub2RlKTtcbkBAIC0zMjcsMTMgJiM0Mzs0NTcsMTQgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbi1cdFx0XHRpZiAoJiM0MzsmIzQzO29mZiBcdTAwM2U9IFBBR0VfU0laRSkge1xuJiM0MztcdFx0XHRpZiAoJiM0MzsmIzQzO2N0eC5vZmYgXHUwMDNlPSBQQUdFX1NJWkUpIHtcbiBcdFx0XHRcdGt1bm1hcF9sb2NhbChkYXRhKTtcbi1cdFx0XHRcdGRhdGEgPSBrbWFwX2xvY2FsX3BhZ2UoKiYjNDM7JiM0MztwYWdlcCk7XG4tXHRcdFx0XHRvZmYgPSAwO1xuJiM0MztcdFx0XHRcdHBhZ2UgPSBub2RlLVx1MDAzZXBhZ2VbJiM0MzsmIzQzO2N0eC5wYWdlX2lkeF07XG4mIzQzO1x0XHRcdFx0ZGF0YSA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiYjNDM7XHRcdFx0XHRjdHgub2ZmID0gMDtcbiBcdFx0XHR9XG4gXHRcdFx0aWR4ICYjNDM7PSA4O1xuLVx0XHRcdGxlbi0tO1xuJiM0MztcdFx0XHRjdHgubGVuLS07XG4gXHRcdH1cbiBcdFx0a3VubWFwX2xvY2FsKGRhdGEpO1xuIFx0XHRuaWR4ID0gbm9kZS1cdTAwM2VuZXh0O1xuQEAgLTM0NywyMiAmIzQzOzQ3OCwyMiBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxuIFx0XHRcdHJldHVybiBuZXh0X25vZGU7XG4gXHRcdG5vZGUgPSBuZXh0X25vZGU7XG4gXG4tXHRcdGxlbiA9IGhmc19icmVjX2xlbm9mZihub2RlLCAwLCBcdTAwMjZvZmYxNik7XG4tXHRcdG9mZiA9IG9mZjE2O1xuLVx0XHRvZmYgJiM0Mzs9IG5vZGUtXHUwMDNlcGFnZV9vZmZzZXQ7XG4tXHRcdHBhZ2VwID0gbm9kZS1cdTAwM2VwYWdlICYjNDM7IChvZmYgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuLVx0XHRkYXRhID0ga21hcF9sb2NhbF9wYWdlKCpwYWdlcCk7XG4tXHRcdG9mZiBcdTAwMjY9IH5QQUdFX01BU0s7XG4mIzQzO1x0XHRwYWdlID0gaGZzX2JtYXBfZ2V0X21hcF9wYWdlKG5vZGUsIFx1MDAyNmN0eCwgMCk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKHBhZ2UpKSB7XG4mIzQzO1x0XHRcdHJlcyA9IFBUUl9FUlIocGFnZSk7XG4mIzQzO1x0XHRcdGhmc19ibm9kZV9wdXQobm9kZSk7XG4mIzQzO1x0XHRcdHJldHVybiBFUlJfUFRSKHJlcyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRkYXRhID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuIFx0fVxuIH1cbiBcbiB2b2lkIGhmc19ibWFwX2ZyZWUoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcbiB7XG4gXHRzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlO1xuLVx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXHR1MTYgb2ZmLCBsZW47XG4gXHR1MzIgbmlkeDtcbi1cdHU4ICpkYXRhLCBieXRlLCBtO1xuJiM0MztcdGludCByZXM7XG4gXG4gXHRoZnNfZGJnKFwmIzM0O25vZGUgJXVcXG5cJiMzNDssIG5vZGUtXHUwMDNldGhpcyk7XG4gXHR0cmVlID0gbm9kZS1cdTAwM2V0cmVlO1xuQEAgLTM5NiwyMyAmIzQzOzUyNywxOCBAQCB2b2lkIGhmc19ibWFwX2ZyZWUoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcbiBcdFx0fVxuIFx0XHRsZW4gPSBoZnNfYnJlY19sZW5vZmYobm9kZSwgMCwgXHUwMDI2b2ZmKTtcbiBcdH1cbi1cdG9mZiAmIzQzOz0gbm9kZS1cdTAwM2VwYWdlX29mZnNldCAmIzQzOyBuaWR4IC8gODtcbi1cdHBhZ2UgPSBub2RlLVx1MDAzZXBhZ2Vbb2ZmIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUXTtcbi1cdGRhdGEgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4tXHRvZmYgXHUwMDI2PSB+UEFHRV9NQVNLO1xuLVx0bSA9IDEgXHUwMDNjXHUwMDNjICh+bmlkeCBcdTAwMjYgNyk7XG4tXHRieXRlID0gZGF0YVtvZmZdO1xuLVx0aWYgKCEoYnl0ZSBcdTAwMjYgbSkpIHtcbiYjNDM7XG4mIzQzO1x0cmVzID0gaGZzX2JtYXBfY2xlYXJfYml0KG5vZGUsIG5pZHgpO1xuJiM0MztcdGlmIChyZXMgPT0gLUVJTlZBTCkge1xuIFx0XHRwcl9jcml0KFwmIzM0O3RyeWluZyB0byBmcmVlIGZyZWUgYm5vZGUgJXUoJWQpXFxuXCYjMzQ7LFxuLVx0XHRcdG5vZGUtXHUwMDNldGhpcywgbm9kZS1cdTAwM2V0eXBlKTtcbi1cdFx0a3VubWFwX2xvY2FsKGRhdGEpO1xuLVx0XHRoZnNfYm5vZGVfcHV0KG5vZGUpO1xuLVx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdG5pZHgsIG5vZGUtXHUwMDNldHlwZSk7XG4mIzQzO1x0fSBlbHNlIGlmIChyZXMpIHtcbiYjNDM7XHRcdHByX2NyaXQoXCYjMzQ7ZmFpbCB0byBmcmVlIGJub2RlICV1KCVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0bmlkeCwgbm9kZS1cdTAwM2V0eXBlKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0dHJlZS1cdTAwM2VmcmVlX25vZGVzJiM0MzsmIzQzOztcbiYjNDM7XHRcdG1hcmtfaW5vZGVfZGlydHkodHJlZS1cdTAwM2Vpbm9kZSk7XG4gXHR9XG4tXHRkYXRhW29mZl0gPSBieXRlIFx1MDAyNiB+bTtcbi1cdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuLVx0a3VubWFwX2xvY2FsKGRhdGEpO1xuJiM0MztcbiBcdGhmc19ibm9kZV9wdXQobm9kZSk7XG4tXHR0cmVlLVx1MDAzZWZyZWVfbm9kZXMmIzQzOyYjNDM7O1xuLVx0bWFya19pbm9kZV9kaXJ0eSh0cmVlLVx1MDAzZWlub2RlKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvaGZzL2J0cmVlLmggYi9mcy9oZnMvYnRyZWUuaFxuaW5kZXggOTliZTg1OGIyNDQ2NTAuLmI0YzNmMmEzMTQ3MTAwIDEwMDY0NFxuLS0tIGEvZnMvaGZzL2J0cmVlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmcy9idHJlZS5oXG5AQCAtMTI5LDMgJiM0MzsxMjksNDMgQEAgZXh0ZXJuIGludCBfX2hmc19icmVjX2ZpbmQoc3RydWN0IGhmc19ibm9kZSAqYm5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCk7XG4gZXh0ZXJuIGludCBoZnNfYnJlY19maW5kKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCk7XG4gZXh0ZXJuIGludCBoZnNfYnJlY19yZWFkKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgdm9pZCAqcmVjLCB1MzIgcmVjX2xlbik7XG4gZXh0ZXJuIGludCBoZnNfYnJlY19nb3RvKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgaW50IGNudCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXNfYm5vZGVfb2Zmc2V0X3ZhbGlkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBvZmYpXG4mIzQzO3tcbiYjNDM7XHRib29sIGlzX3ZhbGlkO1xuJiM0MztcbiYjNDM7XHRpZiAoIW5vZGUgfHwgIW5vZGUtXHUwMDNldHJlZSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aXNfdmFsaWQgPSBvZmYgXHUwMDNjIG5vZGUtXHUwMDNldHJlZS1cdTAwM2Vub2RlX3NpemU7XG4mIzQzO1xuJiM0MztcdGlmICghaXNfdmFsaWQpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtpbnZhbGlkIG9mZnNldDogaWQgJXUsIHR5cGUgJSN4LCBoICV1LCBzeiAldSwgb2ZmICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgIG5vZGUtXHUwMDNldGhpcywgbm9kZS1cdTAwM2V0eXBlLCBub2RlLVx1MDAzZWhlaWdodCxcbiYjNDM7XHRcdCAgICAgICBub2RlLVx1MDAzZXRyZWUtXHUwMDNlbm9kZV9zaXplLCBvZmYpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGlzX3ZhbGlkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHUzMiBjaGVja19hbmRfY29ycmVjdF9yZXF1ZXN0ZWRfbGVuZ3RoKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBvZmYsIHUzMiBsZW4pXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbm9kZV9zaXplO1xuJiM0MztcbiYjNDM7XHRpZiAoIWlzX2Jub2RlX29mZnNldF92YWxpZChub2RlLCBvZmYpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdG5vZGVfc2l6ZSA9IG5vZGUtXHUwMDNldHJlZS1cdTAwM2Vub2RlX3NpemU7XG4mIzQzO1xuJiM0MztcdGlmICgodTY0KW9mZiAmIzQzOyBsZW4gXHUwMDNlIG5vZGVfc2l6ZSkge1xuJiM0MztcdFx0dTMyIG5ld19sZW4gPSBub2RlX3NpemUgLSBvZmY7XG4mIzQzO1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O2NvcnJlY3RlZCBsZW46IGlkICV1LCB0eXBlICUjeCwgaCAldSwgc3ogJXUsIG9mZiAldSwgbGVuICV1LVx1MDAzZSV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgIG5vZGUtXHUwMDNldGhpcywgbm9kZS1cdTAwM2V0eXBlLCBub2RlLVx1MDAzZWhlaWdodCxcbiYjNDM7XHRcdCAgICAgICBub2RlX3NpemUsIG9mZiwgbGVuLCBuZXdfbGVuKTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gbmV3X2xlbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBsZW47XG4mIzQzO31cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaCBiL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oXG5pbmRleCA0NWZiNGM5ZmY5ZjVlZS4uZDZhNjE1ZTc0YjI2ZTIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmhcbkBAIC01MTAsMTQgJiM0Mzs1MTAsMjEgQEAgc3RydWN0IGhmc19idHJlZV9oZWFkZXJfcmVjIHtcbiBcdFx0XHRcdFx0XHQgICBiLXRyZWUgYnV0IG5vdCBpbiBleHRlbnRzXG4gXHRcdFx0XHRcdFx0ICAgYi10cmVlIChoZnNwbHVzKS4gKi9cbiBcbiYjNDM7LyogSEZTIEJUcmVlIG1pc2MgaW5mbyAqL1xuJiM0MzsjZGVmaW5lIEhGU19UUkVFX0hFQURcdFx0XHRcdDBcbiYjNDM7I2RlZmluZSBIRlNfQlRSRUVfSERSX01BUF9SRUNfSU5ERVhcdFx0Mlx0LyogTWFwIChiaXRtYXApIHJlY29yZCBpbiBIZWFkZXIgbm9kZSAqL1xuJiM0MzsjZGVmaW5lIEhGU19CVFJFRV9NQVBfTk9ERV9SRUNfSU5ERVhcdFx0MFx0LyogTWFwIHJlY29yZCBpbiBNYXAgTm9kZSAqL1xuJiM0MztcbiAvKiBIRlMmIzQzOyBCVHJlZSBtaXNjIGluZm8gKi9cbi0jZGVmaW5lIEhGU1BMVVNfVFJFRV9IRUFEXHRcdFx0MFxuJiM0MzsjZGVmaW5lIEhGU1BMVVNfVFJFRV9IRUFEXHRcdFx0SEZTX1RSRUVfSEVBRFxuICNkZWZpbmUgSEZTUExVU19OT0RFX01YU1pcdFx0XHQzMjc2OFxuICNkZWZpbmUgSEZTUExVU19OT0RFX01JTlNaXHRcdFx0NTEyXG4gI2RlZmluZSBIRlNQTFVTX0FUVFJfVFJFRV9OT0RFX1NJWkVcdFx0ODE5MlxuICNkZWZpbmUgSEZTUExVU19CVFJFRV9IRFJfTk9ERV9SRUNTX0NPVU5UXHQzXG4tI2RlZmluZSBIRlNQTFVTX0JUUkVFX0hEUl9NQVBfUkVDX0lOREVYXHRcdDJcdC8qIE1hcCAoYml0bWFwKSByZWNvcmQgaW4gSGVhZGVyIG5vZGUgKi9cbi0jZGVmaW5lIEhGU1BMVVNfQlRSRUVfTUFQX05PREVfUkVDX0lOREVYXHQwXHQvKiBNYXAgcmVjb3JkIGluIE1hcCBOb2RlICovXG4mIzQzOy8qIE1hcCAoYml0bWFwKSByZWNvcmQgaW4gSGVhZGVyIG5vZGUgKi9cbiYjNDM7I2RlZmluZSBIRlNQTFVTX0JUUkVFX0hEUl9NQVBfUkVDX0lOREVYXHRcdEhGU19CVFJFRV9IRFJfTUFQX1JFQ19JTkRFWFxuJiM0MzsvKiBNYXAgcmVjb3JkIGluIE1hcCBOb2RlICovXG4mIzQzOyNkZWZpbmUgSEZTUExVU19CVFJFRV9NQVBfTk9ERV9SRUNfSU5ERVhcdEhGU19CVFJFRV9NQVBfTk9ERV9SRUNfSU5ERVhcbiAjZGVmaW5lIEhGU1BMVVNfQlRSRUVfSERSX1VTRVJfQllURVNcdFx0MTI4XG4gI2RlZmluZSBIRlNQTFVTX0JUUkVFX01BUF9OT0RFX1JFQ1NfQ09VTlRcdDJcbiAjZGVmaW5lIEhGU1BMVVNfQlRSRUVfTUFQX05PREVfUkVTRVJWRURfQllURVNcdDJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxMzoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNfYnRyZWVfb3BlbiYjMzQ7LAogICAgJiMzNDtoZnNfYm1hcF9hbGxvYyYjMzQ7LAogICAgJiMzNDtoZnNfYm1hcF9mcmVlJiMzNDssCiAgICAmIzM0O2hmc19ibWFwX2dldF9tYXBfcGFnZSYjMzQ7LAogICAgJiMzNDtoZnNfYm1hcF90ZXN0X2JpdCYjMzQ7LAogICAgJiMzNDtoZnNfYm1hcF9jbGVhcl9iaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEhGUyBmaWxlc3lzdGVtJiMzOTtzIGJ0cmVlIG1hcCBoYW5kbGluZyBsb2dpYy4gSXQgYWRkcyBuZXcgZnVuY3Rpb25zIHRvIHNhZmVseSBnZXQgbWFwIHBhZ2VzLCB0ZXN0IGJpdHMsIGFuZCBjbGVhciBiaXRzLCBhbmQgbW9kaWZpZXMgbm9kZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIHRvIHVzZSB0aGVzZSBuZXcgZnVuY3Rpb25zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBob3cgdGhlIGZpbGVzeXN0ZW0gbWFuYWdlcyBpdHMgaW50ZXJuYWwgYnRyZWUgc3RydWN0dXJlcywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNiMmNkMDc4MTE1MGVlYjZhYTQwNzNlODljYzVjMDBiMWIyY2Q2MjMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAxNiAxMzoxNjowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2hmcy9ibm9kZS5jIGIvZnMvaGZzL2Jub2RlLmMKaW5kZXggZGE4ZTUzNDJjOTFjYzIuLjFiMzMxMTA4ZDljMDFiIDEwMDY0NAotLS0gYS9mcy9oZnMvYm5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnMvYm5vZGUuYwpAQCAtMTUsNDggJiM0MzsxNSw2IEBACiAKICNpbmNsdWRlICYjMzQ7YnRyZWUuaCYjMzQ7CiAKLXN0YXRpYyBpbmxpbmUKLWJvb2wgaXNfYm5vZGVfb2Zmc2V0X3ZhbGlkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBvZmYpCi17Ci0JYm9vbCBpc192YWxpZCA9IG9mZiAmbHQ7IG5vZGUtJmd0O3RyZWUtJmd0O25vZGVfc2l6ZTsKLQotCWlmICghaXNfdmFsaWQpIHsKLQkJcHJfZXJyKCYjMzQ7cmVxdWVzdGVkIGludmFsaWQgb2Zmc2V0OiAmIzM0OwotCQkgICAgICAgJiMzNDtOT0RFOiBpZCAldSwgdHlwZSAlI3gsIGhlaWdodCAldSwgJiMzNDsKLQkJICAgICAgICYjMzQ7bm9kZV9zaXplICV1LCBvZmZzZXQgJXVcbiYjMzQ7LAotCQkgICAgICAgbm9kZS0mZ3Q7dGhpcywgbm9kZS0mZ3Q7dHlwZSwgbm9kZS0mZ3Q7aGVpZ2h0LAotCQkgICAgICAgbm9kZS0mZ3Q7dHJlZS0mZ3Q7bm9kZV9zaXplLCBvZmYpOwotCX0KLQotCXJldHVybiBpc192YWxpZDsKLX0KLQotc3RhdGljIGlubGluZQotdTMyIGNoZWNrX2FuZF9jb3JyZWN0X3JlcXVlc3RlZF9sZW5ndGgoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG9mZiwgdTMyIGxlbikKLXsKLQl1bnNpZ25lZCBpbnQgbm9kZV9zaXplOwotCi0JaWYgKCFpc19ibm9kZV9vZmZzZXRfdmFsaWQobm9kZSwgb2ZmKSkKLQkJcmV0dXJuIDA7Ci0KLQlub2RlX3NpemUgPSBub2RlLSZndDt0cmVlLSZndDtub2RlX3NpemU7Ci0KLQlpZiAoKHU2NClvZmYgJiM0MzsgbGVuICZndDsgbm9kZV9zaXplKSB7Ci0JCXUzMiBuZXdfbGVuID0gbm9kZV9zaXplIC0gb2ZmOwotCi0JCXByX2VycigmIzM0O3JlcXVlc3RlZCBsZW5ndGggaGFzIGJlZW4gY29ycmVjdGVkOiAmIzM0OwotCQkgICAgICAgJiMzNDtOT0RFOiBpZCAldSwgdHlwZSAlI3gsIGhlaWdodCAldSwgJiMzNDsKLQkJICAgICAgICYjMzQ7bm9kZV9zaXplICV1LCBvZmZzZXQgJXUsICYjMzQ7Ci0JCSAgICAgICAmIzM0O3JlcXVlc3RlZF9sZW4gJXUsIGNvcnJlY3RlZF9sZW4gJXVcbiYjMzQ7LAotCQkgICAgICAgbm9kZS0mZ3Q7dGhpcywgbm9kZS0mZ3Q7dHlwZSwgbm9kZS0mZ3Q7aGVpZ2h0LAotCQkgICAgICAgbm9kZS0mZ3Q7dHJlZS0mZ3Q7bm9kZV9zaXplLCBvZmYsIGxlbiwgbmV3X2xlbik7Ci0KLQkJcmV0dXJuIG5ld19sZW47Ci0JfQotCi0JcmV0dXJuIGxlbjsKLX0KLQogdm9pZCBoZnNfYm5vZGVfcmVhZChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB2b2lkICpidWYsIHUzMiBvZmYsIHUzMiBsZW4pCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CmRpZmYgLS1naXQgYS9mcy9oZnMvYnRyZWUuYyBiL2ZzL2hmcy9idHJlZS5jCmluZGV4IDJlYjM3YTJmNjRlODY2Li40MWI0ZThmYzk0NjM3ZCAxMDA2NDQKLS0tIGEvZnMvaGZzL2J0cmVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzL2J0cmVlLmMKQEAgLTE1LDYgJiM0MzsxNSwxMjEgQEAKIAogI2luY2x1ZGUgJiMzNDtidHJlZS5oJiMzNDsKIAomIzQzOy8qIENvbnRleHQgZm9yIGl0ZXJhdGluZyBiLXRyZWUgbWFwIHBhZ2VzCiYjNDM7ICogQHBhZ2VfaWR4OiBUaGUgaW5kZXggb2YgdGhlIHBhZ2Ugd2l0aGluIHRoZSBiLW5vZGUmIzM5O3MgcGFnZSBhcnJheQomIzQzOyAqIEBvZmY6IFRoZSBieXRlIG9mZnNldCB3aXRoaW4gdGhlIG1hcHBlZCBwYWdlCiYjNDM7ICogQGxlbjogVGhlIHJlbWFpbmluZyBsZW5ndGggb2YgdGhlIG1hcCByZWNvcmQKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgaGZzX2JtYXBfY3R4IHsKJiM0MzsJdW5zaWduZWQgaW50IHBhZ2VfaWR4OwomIzQzOwl1bnNpZ25lZCBpbnQgb2ZmOwomIzQzOwl1MTYgbGVuOwomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBGaW5kcyB0aGUgc3BlY2lmaWMgcGFnZSBjb250YWluaW5nIHRoZSByZXF1ZXN0ZWQgYnl0ZSBvZmZzZXQgd2l0aGluIHRoZSBtYXAKJiM0MzsgKiByZWNvcmQuIEF1dG9tYXRpY2FsbHkgaGFuZGxlcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGhlYWRlciBhbmQgbWFwIG5vZGVzLgomIzQzOyAqIFJldHVybnMgdGhlIHN0cnVjdCBwYWdlIHBvaW50ZXIsIG9yIGFuIEVSUl9QVFIgb24gZmFpbHVyZS4KJiM0MzsgKiBOb3RlOiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYXBwaW5nL3VubWFwcGluZyB0aGUgcmV0dXJuZWQgcGFnZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgc3RydWN0IHBhZ2UgKmhmc19ibWFwX2dldF9tYXBfcGFnZShzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLAomIzQzOwkJCQkJICBzdHJ1Y3QgaGZzX2JtYXBfY3R4ICpjdHgsCiYjNDM7CQkJCQkgIHUzMiBieXRlX29mZnNldCkKJiM0Mzt7CiYjNDM7CXUxNiByZWNfaWR4LCBvZmYxNjsKJiM0MzsJdW5zaWduZWQgaW50IHBhZ2Vfb2ZmOwomIzQzOwomIzQzOwlpZiAobm9kZS0mZ3Q7dGhpcyA9PSBIRlNfVFJFRV9IRUFEKSB7CiYjNDM7CQlpZiAobm9kZS0mZ3Q7dHlwZSAhPSBIRlNfTk9ERV9IRUFERVIpIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDtoZnM6IGludmFsaWQgYnRyZWUgaGVhZGVyIG5vZGVcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKJiM0MzsJCX0KJiM0MzsJCXJlY19pZHggPSBIRlNfQlRSRUVfSERSX01BUF9SRUNfSU5ERVg7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpZiAobm9kZS0mZ3Q7dHlwZSAhPSBIRlNfTk9ERV9NQVApIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDtoZnM6IGludmFsaWQgYnRyZWUgbWFwIG5vZGVcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKJiM0MzsJCX0KJiM0MzsJCXJlY19pZHggPSBIRlNfQlRSRUVfTUFQX05PREVfUkVDX0lOREVYOwomIzQzOwl9CiYjNDM7CiYjNDM7CWN0eC0mZ3Q7bGVuID0gaGZzX2JyZWNfbGVub2ZmKG5vZGUsIHJlY19pZHgsICZhbXA7b2ZmMTYpOwomIzQzOwlpZiAoIWN0eC0mZ3Q7bGVuKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CiYjNDM7CiYjNDM7CWlmICghaXNfYm5vZGVfb2Zmc2V0X3ZhbGlkKG5vZGUsIG9mZjE2KSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FSU8pOwomIzQzOwomIzQzOwljdHgtJmd0O2xlbiA9IGNoZWNrX2FuZF9jb3JyZWN0X3JlcXVlc3RlZF9sZW5ndGgobm9kZSwgb2ZmMTYsIGN0eC0mZ3Q7bGVuKTsKJiM0MzsKJiM0MzsJaWYgKGJ5dGVfb2Zmc2V0ICZndDs9IGN0eC0mZ3Q7bGVuKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiYjNDM7CiYjNDM7CXBhZ2Vfb2ZmID0gKHUzMilvZmYxNiAmIzQzOyBub2RlLSZndDtwYWdlX29mZnNldCAmIzQzOyBieXRlX29mZnNldDsKJiM0MzsJY3R4LSZndDtwYWdlX2lkeCA9IHBhZ2Vfb2ZmICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CWN0eC0mZ3Q7b2ZmID0gcGFnZV9vZmYgJmFtcDsgflBBR0VfTUFTSzsKJiM0MzsKJiM0MzsJcmV0dXJuIG5vZGUtJmd0O3BhZ2VbY3R4LSZndDtwYWdlX2lkeF07CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGhmc19ibWFwX3Rlc3RfYml0IC0gdGVzdCBhIGJpdCBpbiB0aGUgYi10cmVlIG1hcAomIzQzOyAqIEBub2RlOiB0aGUgYi10cmVlIG5vZGUgY29udGFpbmluZyB0aGUgbWFwIHJlY29yZAomIzQzOyAqIEBub2RlX2JpdF9pZHg6IHRoZSByZWxhdGl2ZSBiaXQgaW5kZXggd2l0aGluIHRoZSBub2RlJiMzOTtzIG1hcCByZWNvcmQKJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdHJ1ZSBpZiBzZXQsIGZhbHNlIGlmIGNsZWFyIG9yIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgaGZzX2JtYXBfdGVzdF9iaXQoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG5vZGVfYml0X2lkeCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoZnNfYm1hcF9jdHggY3R4OwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZTsKJiM0MzsJdTggKmJtYXAsIGJ5dGUsIG1hc2s7CiYjNDM7CiYjNDM7CXBhZ2UgPSBoZnNfYm1hcF9nZXRfbWFwX3BhZ2Uobm9kZSwgJmFtcDtjdHgsIG5vZGVfYml0X2lkeCAvIEJJVFNfUEVSX0JZVEUpOwomIzQzOwlpZiAoSVNfRVJSKHBhZ2UpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlibWFwID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwomIzQzOwlieXRlID0gYm1hcFtjdHgub2ZmXTsKJiM0MzsJa3VubWFwX2xvY2FsKGJtYXApOwomIzQzOwomIzQzOwltYXNrID0gMSAmbHQ7Jmx0OyAoNyAtIChub2RlX2JpdF9pZHggJSBCSVRTX1BFUl9CWVRFKSk7CiYjNDM7CXJldHVybiAoYnl0ZSAmYW1wOyBtYXNrKSAhPSAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBoZnNfYm1hcF9jbGVhcl9iaXQgLSBjbGVhciBhIGJpdCBpbiB0aGUgYi10cmVlIG1hcAomIzQzOyAqIEBub2RlOiB0aGUgYi10cmVlIG5vZGUgY29udGFpbmluZyB0aGUgbWFwIHJlY29yZAomIzQzOyAqIEBub2RlX2JpdF9pZHg6IHRoZSByZWxhdGl2ZSBiaXQgaW5kZXggd2l0aGluIHRoZSBub2RlJiMzOTtzIG1hcCByZWNvcmQKJiM0MzsgKgomIzQzOyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIGFscmVhZHkgY2xlYXIsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBoZnNfYm1hcF9jbGVhcl9iaXQoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG5vZGVfYml0X2lkeCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoZnNfYm1hcF9jdHggY3R4OwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZTsKJiM0MzsJdTggKmJtYXAsIG1hc2s7CiYjNDM7CiYjNDM7CXBhZ2UgPSBoZnNfYm1hcF9nZXRfbWFwX3BhZ2Uobm9kZSwgJmFtcDtjdHgsIG5vZGVfYml0X2lkeCAvIEJJVFNfUEVSX0JZVEUpOwomIzQzOwlpZiAoSVNfRVJSKHBhZ2UpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIocGFnZSk7CiYjNDM7CiYjNDM7CWJtYXAgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7CiYjNDM7CiYjNDM7CW1hc2sgPSAxICZsdDsmbHQ7ICg3IC0gKG5vZGVfYml0X2lkeCAlIEJJVFNfUEVSX0JZVEUpKTsKJiM0MzsKJiM0MzsJaWYgKCEoYm1hcFtjdHgub2ZmXSAmYW1wOyBtYXNrKSkgewomIzQzOwkJa3VubWFwX2xvY2FsKGJtYXApOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYm1hcFtjdHgub2ZmXSAmYW1wOz0gfm1hc2s7CiYjNDM7CXNldF9wYWdlX2RpcnR5KHBhZ2UpOwomIzQzOwlrdW5tYXBfbG9jYWwoYm1hcCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qIEdldCBhIHJlZmVyZW5jZSB0byBhIEIqVHJlZSBhbmQgZG8gc29tZSBpbml0aWFsIGNoZWNrcyAqLwogc3RydWN0IGhmc19idHJlZSAqaGZzX2J0cmVlX29wZW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGlkLCBidHJlZV9rZXljbXAga2V5Y21wKQogewpAQCAtMjMsNiAmIzQzOzEzOCw3IEBAIHN0cnVjdCBoZnNfYnRyZWUgKmhmc19idHJlZV9vcGVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBpZCwgYnRyZWVfa2V5Y21wIGtlCiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwomIzQzOwlzdHJ1Y3QgaGZzX2Jub2RlICpub2RlOwogCXVuc2lnbmVkIGludCBzaXplOwogCXUxNiBkYmxvY2s7CiAJc2VjdG9yX3Qgc3RhcnRfYmxvY2s7CkBAIC0xNTUsNiAmIzQzOzI3MSwyMCBAQCBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZQogCWt1bm1hcF9sb2NhbChoZWFkKTsKIAlmb2xpb191bmxvY2soZm9saW8pOwogCWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CiYjNDM7CW5vZGUgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCBIRlNfVFJFRV9IRUFEKTsKJiM0MzsJaWYgKElTX0VSUihub2RlKSkKJiM0MzsJCWdvdG8gZnJlZV9pbm9kZTsKJiM0MzsKJiM0MzsJaWYgKCFoZnNfYm1hcF90ZXN0X2JpdChub2RlLCBIRlNfVFJFRV9IRUFEKSkgewomIzQzOwkJcHJfd2FybigmIzM0Oyglcyk6ICVzIChjbmlkIDB4JXgpIGJpdG1hcCBjb3JydXB0ZWQsIGZvcmNpbmcgcmRvbmx5XG4mIzM0OywKJiM0MzsJCQlzYi0mZ3Q7c19pZCwgaWQgPT0gSEZTX0VYVF9DTklEID8gJiMzNDtleHRlbnRzJiMzNDsgOiAmIzM0O2NhdGFsb2cmIzM0OywgaWQpOwomIzQzOwkJcHJfd2FybigmIzM0O1J1biBmc2NrLmhmcyB0byByZXBhaXIuXG4mIzM0Oyk7CiYjNDM7CQlzYi0mZ3Q7c19mbGFncyB8PSBTQl9SRE9OTFk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaGZzX2Jub2RlX3B1dChub2RlKTsKJiM0MzsKIAlyZXR1cm4gdHJlZTsKIAogZmFpbF9mb2xpbzoKQEAgLTI4NSwxMSAmIzQzOzQxNSw5IEBAIGludCBoZnNfYm1hcF9yZXNlcnZlKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiByc3ZkX25vZGVzKQogc3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSkKIHsKIAlzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCAqbmV4dF9ub2RlOwotCXN0cnVjdCBwYWdlICoqcGFnZXA7CiYjNDM7CXN0cnVjdCBoZnNfYm1hcF9jdHggY3R4OwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAl1MzIgbmlkeCwgaWR4OwotCXVuc2lnbmVkIG9mZjsKLQl1MTYgb2ZmMTY7Ci0JdTE2IGxlbjsKIAl1OCAqZGF0YSwgYnl0ZSwgbTsKIAlpbnQgaSwgcmVzOwogCkBAIC0zMDEsMjQgJiM0Mzs0MjksMjYgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSkKIAlub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgbmlkeCk7CiAJaWYgKElTX0VSUihub2RlKSkKIAkJcmV0dXJuIG5vZGU7Ci0JbGVuID0gaGZzX2JyZWNfbGVub2ZmKG5vZGUsIDIsICZhbXA7b2ZmMTYpOwotCW9mZiA9IG9mZjE2OwogCi0Jb2ZmICYjNDM7PSBub2RlLSZndDtwYWdlX29mZnNldDsKLQlwYWdlcCA9IG5vZGUtJmd0O3BhZ2UgJiM0MzsgKG9mZiAmZ3Q7Jmd0OyBQQUdFX1NISUZUKTsKLQlkYXRhID0ga21hcF9sb2NhbF9wYWdlKCpwYWdlcCk7Ci0Jb2ZmICZhbXA7PSB+UEFHRV9NQVNLOwomIzQzOwlwYWdlID0gaGZzX2JtYXBfZ2V0X21hcF9wYWdlKG5vZGUsICZhbXA7Y3R4LCAwKTsKJiM0MzsJaWYgKElTX0VSUihwYWdlKSkgewomIzQzOwkJcmVzID0gUFRSX0VSUihwYWdlKTsKJiM0MzsJCWhmc19ibm9kZV9wdXQobm9kZSk7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUihyZXMpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRhdGEgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7CiAJaWR4ID0gMDsKIAogCWZvciAoOzspIHsKLQkJd2hpbGUgKGxlbikgewotCQkJYnl0ZSA9IGRhdGFbb2ZmXTsKJiM0MzsJCXdoaWxlIChjdHgubGVuKSB7CiYjNDM7CQkJYnl0ZSA9IGRhdGFbY3R4Lm9mZl07CiAJCQlpZiAoYnl0ZSAhPSAweGZmKSB7CiAJCQkJZm9yIChtID0gMHg4MCwgaSA9IDA7IGkgJmx0OyA4OyBtICZndDsmZ3Q7PSAxLCBpJiM0MzsmIzQzOykgewogCQkJCQlpZiAoIShieXRlICZhbXA7IG0pKSB7CiAJCQkJCQlpZHggJiM0Mzs9IGk7Ci0JCQkJCQlkYXRhW29mZl0gfD0gbTsKLQkJCQkJCXNldF9wYWdlX2RpcnR5KCpwYWdlcCk7CiYjNDM7CQkJCQkJZGF0YVtjdHgub2ZmXSB8PSBtOwomIzQzOwkJCQkJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwogCQkJCQkJa3VubWFwX2xvY2FsKGRhdGEpOwogCQkJCQkJdHJlZS0mZ3Q7ZnJlZV9ub2Rlcy0tOwogCQkJCQkJbWFya19pbm9kZV9kaXJ0eSh0cmVlLSZndDtpbm9kZSk7CkBAIC0zMjcsMTMgJiM0Mzs0NTcsMTQgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSkKIAkJCQkJfQogCQkJCX0KIAkJCX0KLQkJCWlmICgmIzQzOyYjNDM7b2ZmICZndDs9IFBBR0VfU0laRSkgewomIzQzOwkJCWlmICgmIzQzOyYjNDM7Y3R4Lm9mZiAmZ3Q7PSBQQUdFX1NJWkUpIHsKIAkJCQlrdW5tYXBfbG9jYWwoZGF0YSk7Ci0JCQkJZGF0YSA9IGttYXBfbG9jYWxfcGFnZSgqJiM0MzsmIzQzO3BhZ2VwKTsKLQkJCQlvZmYgPSAwOwomIzQzOwkJCQlwYWdlID0gbm9kZS0mZ3Q7cGFnZVsmIzQzOyYjNDM7Y3R4LnBhZ2VfaWR4XTsKJiM0MzsJCQkJZGF0YSA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTsKJiM0MzsJCQkJY3R4Lm9mZiA9IDA7CiAJCQl9CiAJCQlpZHggJiM0Mzs9IDg7Ci0JCQlsZW4tLTsKJiM0MzsJCQljdHgubGVuLS07CiAJCX0KIAkJa3VubWFwX2xvY2FsKGRhdGEpOwogCQluaWR4ID0gbm9kZS0mZ3Q7bmV4dDsKQEAgLTM0NywyMiAmIzQzOzQ3OCwyMiBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKQogCQkJcmV0dXJuIG5leHRfbm9kZTsKIAkJbm9kZSA9IG5leHRfbm9kZTsKIAotCQlsZW4gPSBoZnNfYnJlY19sZW5vZmYobm9kZSwgMCwgJmFtcDtvZmYxNik7Ci0JCW9mZiA9IG9mZjE2OwotCQlvZmYgJiM0Mzs9IG5vZGUtJmd0O3BhZ2Vfb2Zmc2V0OwotCQlwYWdlcCA9IG5vZGUtJmd0O3BhZ2UgJiM0MzsgKG9mZiAmZ3Q7Jmd0OyBQQUdFX1NISUZUKTsKLQkJZGF0YSA9IGttYXBfbG9jYWxfcGFnZSgqcGFnZXApOwotCQlvZmYgJmFtcDs9IH5QQUdFX01BU0s7CiYjNDM7CQlwYWdlID0gaGZzX2JtYXBfZ2V0X21hcF9wYWdlKG5vZGUsICZhbXA7Y3R4LCAwKTsKJiM0MzsJCWlmIChJU19FUlIocGFnZSkpIHsKJiM0MzsJCQlyZXMgPSBQVFJfRVJSKHBhZ2UpOwomIzQzOwkJCWhmc19ibm9kZV9wdXQobm9kZSk7CiYjNDM7CQkJcmV0dXJuIEVSUl9QVFIocmVzKTsKJiM0MzsJCX0KJiM0MzsJCWRhdGEgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7CiAJfQogfQogCiB2b2lkIGhmc19ibWFwX2ZyZWUoc3RydWN0IGhmc19ibm9kZSAqbm9kZSkKIHsKIAlzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlOwotCXN0cnVjdCBwYWdlICpwYWdlOwogCXUxNiBvZmYsIGxlbjsKIAl1MzIgbmlkeDsKLQl1OCAqZGF0YSwgYnl0ZSwgbTsKJiM0MzsJaW50IHJlczsKIAogCWhmc19kYmcoJiMzNDtub2RlICV1XG4mIzM0Oywgbm9kZS0mZ3Q7dGhpcyk7CiAJdHJlZSA9IG5vZGUtJmd0O3RyZWU7CkBAIC0zOTYsMjMgJiM0Mzs1MjcsMTggQEAgdm9pZCBoZnNfYm1hcF9mcmVlKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpCiAJCX0KIAkJbGVuID0gaGZzX2JyZWNfbGVub2ZmKG5vZGUsIDAsICZhbXA7b2ZmKTsKIAl9Ci0Jb2ZmICYjNDM7PSBub2RlLSZndDtwYWdlX29mZnNldCAmIzQzOyBuaWR4IC8gODsKLQlwYWdlID0gbm9kZS0mZ3Q7cGFnZVtvZmYgJmd0OyZndDsgUEFHRV9TSElGVF07Ci0JZGF0YSA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTsKLQlvZmYgJmFtcDs9IH5QQUdFX01BU0s7Ci0JbSA9IDEgJmx0OyZsdDsgKH5uaWR4ICZhbXA7IDcpOwotCWJ5dGUgPSBkYXRhW29mZl07Ci0JaWYgKCEoYnl0ZSAmYW1wOyBtKSkgewomIzQzOwomIzQzOwlyZXMgPSBoZnNfYm1hcF9jbGVhcl9iaXQobm9kZSwgbmlkeCk7CiYjNDM7CWlmIChyZXMgPT0gLUVJTlZBTCkgewogCQlwcl9jcml0KCYjMzQ7dHJ5aW5nIHRvIGZyZWUgZnJlZSBibm9kZSAldSglZClcbiYjMzQ7LAotCQkJbm9kZS0mZ3Q7dGhpcywgbm9kZS0mZ3Q7dHlwZSk7Ci0JCWt1bm1hcF9sb2NhbChkYXRhKTsKLQkJaGZzX2Jub2RlX3B1dChub2RlKTsKLQkJcmV0dXJuOwomIzQzOwkJCW5pZHgsIG5vZGUtJmd0O3R5cGUpOwomIzQzOwl9IGVsc2UgaWYgKHJlcykgewomIzQzOwkJcHJfY3JpdCgmIzM0O2ZhaWwgdG8gZnJlZSBibm9kZSAldSglZClcbiYjMzQ7LAomIzQzOwkJCW5pZHgsIG5vZGUtJmd0O3R5cGUpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJdHJlZS0mZ3Q7ZnJlZV9ub2RlcyYjNDM7JiM0Mzs7CiYjNDM7CQltYXJrX2lub2RlX2RpcnR5KHRyZWUtJmd0O2lub2RlKTsKIAl9Ci0JZGF0YVtvZmZdID0gYnl0ZSAmYW1wOyB+bTsKLQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKLQlrdW5tYXBfbG9jYWwoZGF0YSk7CiYjNDM7CiAJaGZzX2Jub2RlX3B1dChub2RlKTsKLQl0cmVlLSZndDtmcmVlX25vZGVzJiM0MzsmIzQzOzsKLQltYXJrX2lub2RlX2RpcnR5KHRyZWUtJmd0O2lub2RlKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2hmcy9idHJlZS5oIGIvZnMvaGZzL2J0cmVlLmgKaW5kZXggOTliZTg1OGIyNDQ2NTAuLmI0YzNmMmEzMTQ3MTAwIDEwMDY0NAotLS0gYS9mcy9oZnMvYnRyZWUuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnMvYnRyZWUuaApAQCAtMTI5LDMgJiM0MzsxMjksNDMgQEAgZXh0ZXJuIGludCBfX2hmc19icmVjX2ZpbmQoc3RydWN0IGhmc19ibm9kZSAqYm5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCk7CiBleHRlcm4gaW50IGhmc19icmVjX2ZpbmQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKTsKIGV4dGVybiBpbnQgaGZzX2JyZWNfcmVhZChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHZvaWQgKnJlYywgdTMyIHJlY19sZW4pOwogZXh0ZXJuIGludCBoZnNfYnJlY19nb3RvKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgaW50IGNudCk7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIGlzX2Jub2RlX29mZnNldF92YWxpZChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgb2ZmKQomIzQzO3sKJiM0MzsJYm9vbCBpc192YWxpZDsKJiM0MzsKJiM0MzsJaWYgKCFub2RlIHx8ICFub2RlLSZndDt0cmVlKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpc192YWxpZCA9IG9mZiAmbHQ7IG5vZGUtJmd0O3RyZWUtJmd0O25vZGVfc2l6ZTsKJiM0MzsKJiM0MzsJaWYgKCFpc192YWxpZCkgewomIzQzOwkJcHJfZXJyKCYjMzQ7aW52YWxpZCBvZmZzZXQ6IGlkICV1LCB0eXBlICUjeCwgaCAldSwgc3ogJXUsIG9mZiAldVxuJiMzNDssCiYjNDM7CQkgICAgICAgbm9kZS0mZ3Q7dGhpcywgbm9kZS0mZ3Q7dHlwZSwgbm9kZS0mZ3Q7aGVpZ2h0LAomIzQzOwkJICAgICAgIG5vZGUtJmd0O3RyZWUtJmd0O25vZGVfc2l6ZSwgb2ZmKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gaXNfdmFsaWQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdTMyIGNoZWNrX2FuZF9jb3JyZWN0X3JlcXVlc3RlZF9sZW5ndGgoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG9mZiwgdTMyIGxlbikKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBub2RlX3NpemU7CiYjNDM7CiYjNDM7CWlmICghaXNfYm5vZGVfb2Zmc2V0X3ZhbGlkKG5vZGUsIG9mZikpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbm9kZV9zaXplID0gbm9kZS0mZ3Q7dHJlZS0mZ3Q7bm9kZV9zaXplOwomIzQzOwomIzQzOwlpZiAoKHU2NClvZmYgJiM0MzsgbGVuICZndDsgbm9kZV9zaXplKSB7CiYjNDM7CQl1MzIgbmV3X2xlbiA9IG5vZGVfc2l6ZSAtIG9mZjsKJiM0MzsKJiM0MzsJCXByX2VycigmIzM0O2NvcnJlY3RlZCBsZW46IGlkICV1LCB0eXBlICUjeCwgaCAldSwgc3ogJXUsIG9mZiAldSwgbGVuICV1LSZndDsldVxuJiMzNDssCiYjNDM7CQkgICAgICAgbm9kZS0mZ3Q7dGhpcywgbm9kZS0mZ3Q7dHlwZSwgbm9kZS0mZ3Q7aGVpZ2h0LAomIzQzOwkJICAgICAgIG5vZGVfc2l6ZSwgb2ZmLCBsZW4sIG5ld19sZW4pOwomIzQzOwomIzQzOwkJcmV0dXJuIG5ld19sZW47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGxlbjsKJiM0Mzt9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaCBiL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oCmluZGV4IDQ1ZmI0YzlmZjlmNWVlLi5kNmE2MTVlNzRiMjZlMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmgKQEAgLTUxMCwxNCAmIzQzOzUxMCwyMSBAQCBzdHJ1Y3QgaGZzX2J0cmVlX2hlYWRlcl9yZWMgewogCQkJCQkJICAgYi10cmVlIGJ1dCBub3QgaW4gZXh0ZW50cwogCQkJCQkJICAgYi10cmVlIChoZnNwbHVzKS4gKi8KIAomIzQzOy8qIEhGUyBCVHJlZSBtaXNjIGluZm8gKi8KJiM0MzsjZGVmaW5lIEhGU19UUkVFX0hFQUQJCQkJMAomIzQzOyNkZWZpbmUgSEZTX0JUUkVFX0hEUl9NQVBfUkVDX0lOREVYCQkyCS8qIE1hcCAoYml0bWFwKSByZWNvcmQgaW4gSGVhZGVyIG5vZGUgKi8KJiM0MzsjZGVmaW5lIEhGU19CVFJFRV9NQVBfTk9ERV9SRUNfSU5ERVgJCTAJLyogTWFwIHJlY29yZCBpbiBNYXAgTm9kZSAqLwomIzQzOwogLyogSEZTJiM0MzsgQlRyZWUgbWlzYyBpbmZvICovCi0jZGVmaW5lIEhGU1BMVVNfVFJFRV9IRUFECQkJMAomIzQzOyNkZWZpbmUgSEZTUExVU19UUkVFX0hFQUQJCQlIRlNfVFJFRV9IRUFECiAjZGVmaW5lIEhGU1BMVVNfTk9ERV9NWFNaCQkJMzI3NjgKICNkZWZpbmUgSEZTUExVU19OT0RFX01JTlNaCQkJNTEyCiAjZGVmaW5lIEhGU1BMVVNfQVRUUl9UUkVFX05PREVfU0laRQkJODE5MgogI2RlZmluZSBIRlNQTFVTX0JUUkVFX0hEUl9OT0RFX1JFQ1NfQ09VTlQJMwotI2RlZmluZSBIRlNQTFVTX0JUUkVFX0hEUl9NQVBfUkVDX0lOREVYCQkyCS8qIE1hcCAoYml0bWFwKSByZWNvcmQgaW4gSGVhZGVyIG5vZGUgKi8KLSNkZWZpbmUgSEZTUExVU19CVFJFRV9NQVBfTk9ERV9SRUNfSU5ERVgJMAkvKiBNYXAgcmVjb3JkIGluIE1hcCBOb2RlICovCiYjNDM7LyogTWFwIChiaXRtYXApIHJlY29yZCBpbiBIZWFkZXIgbm9kZSAqLwomIzQzOyNkZWZpbmUgSEZTUExVU19CVFJFRV9IRFJfTUFQX1JFQ19JTkRFWAkJSEZTX0JUUkVFX0hEUl9NQVBfUkVDX0lOREVYCiYjNDM7LyogTWFwIHJlY29yZCBpbiBNYXAgTm9kZSAqLwomIzQzOyNkZWZpbmUgSEZTUExVU19CVFJFRV9NQVBfTk9ERV9SRUNfSU5ERVgJSEZTX0JUUkVFX01BUF9OT0RFX1JFQ19JTkRFWAogI2RlZmluZSBIRlNQTFVTX0JUUkVFX0hEUl9VU0VSX0JZVEVTCQkxMjgKICNkZWZpbmUgSEZTUExVU19CVFJFRV9NQVBfTk9ERV9SRUNTX0NPVU5UCTIKICNkZWZpbmUgSEZTUExVU19CVFJFRV9NQVBfTk9ERV9SRVNFUlZFRF9CWVRFUwkyCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDEzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MjYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSEZTIEZpbGVzeXN0ZW0gRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBtYWtpbmcgc29tZSBwcmV0dHkgZnVuZGFtZW50YWwgY2hhbmdlcyB0byB0aGUgSEZTIGZpbGVzeXN0ZW0gZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHRvdWNoaW5nIGNvcmUgY29tcG9uZW50czogYGZzL2hmcy9idHJlZS5jYCwgYGZzL2hmcy9ibm9kZS5jYCwgYGZzL2hmcy9idHJlZS5oYCwgYW5kIGBpbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaGAuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBtaW5vciB0d2Vhazsgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgZGlyZWN0IG1vZGlmaWNhdGlvbnMgdG8gaG93IHRoZSBIRlMgZHJpdmVyIGludGVyYWN0cyB3aXRoIGl0cyBCLXRyZWUgc3RydWN0dXJlIGFuZCBiaXRtYXAgbWFuYWdlbWVudC4KClRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvbnRleHQgc3RydWN0dXJlLCBgc3RydWN0IGhmc19ibWFwX2N0eGAsIGFuZCBhIG5ldyBmdW5jdGlvbiwgYGhmc19ibWFwX2dldF9tYXBfcGFnZWAsIHdoaWNoIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIGFzIGFuIGF0dGVtcHQgdG8gc2FmZWx5IG1hbmFnZSBtZW1vcnkgYWNjZXNzIHdpdGhpbiB0aGUgQi10cmVlIGNvbnRleHQuIEl0IGFsc28gZGVmaW5lcyBgaGZzX2JtYXBfdGVzdF9iaXRgIGFuZCBgaGZzX2JtYXBfY2xlYXJfYml0YCwgd2hpY2ggSSBjYW4gaW5mZXIgYXJlIGJpdCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zIHNwZWNpZmljYWxseSB0YWlsb3JlZCBmb3IgYml0bWFwIG1hbmFnZW1lbnQsIGxpa2VseSByZWxhdGVkIHRvIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB3aXRoaW4gdGhlIGZpbGVzeXN0ZW0uIENyaXRpY2FsbHksIGV4aXN0aW5nIGZ1bmN0aW9ucyBsaWtlIGBoZnNfYnRyZWVfb3BlbmAsIGBoZnNfYm1hcF9hbGxvY2AsIGFuZCBgaGZzX2JtYXBfZnJlZWAgYXJlIGJlaW5nIHVwZGF0ZWQgdG8gdXNlIHRoZXNlIG5ldyBmdW5jdGlvbnMuIFRoaXMgbWVhbnMgYSBzaWduaWZpY2FudCBtb2RpZmljYXRpb24gdG8gdGhlIGV4aXN0aW5nIGNvbnRyb2wgZmxvdy4KCkdpdmVuIHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzIGFuZCB0aGUgY3JpdGljYWwgbmF0dXJlIG9mIHRoZSB0b3VjaGVkIGNvZGUsIHRoaXMgaXMgZGVmaW5pdGVseSBXb3J0aEZ1enppbmcuIEl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSBIRlMgZmlsZXN5c3RlbS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0byB0YXJnZXQgZHVyaW5nIGZ1enppbmc6CgoqICAgYGhmc19ibWFwX2dldF9tYXBfcGFnZWAgKHN0YXRpYykKKiAgIGBoZnNfYm1hcF90ZXN0X2JpdGAgKHN0YXRpYykKKiAgIGBoZnNfYm1hcF9jbGVhcl9iaXRgIChzdGF0aWMpCiogICBgaGZzX2J0cmVlX29wZW5gCiogICBgaGZzX2JtYXBfYWxsb2NgCiogICBgaGZzX2JtYXBfZnJlZWAKCkkgbmVlZCB0byBjb25maXJtIHRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlLCBhbmQgd2hhdCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBmcy9oZnMvYnRyZWUuY2AgYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyBsaW5rZWQgaW4gdGhlIGJ1aWxkLiBUaGUgbmVjZXNzYXJ5IGNvbmZpZyBpcyBgQ09ORklHX0hGU19GU2AuIEkmIzM5O2xsIHZlcmlmeSBhbGwgdGhpcyB1c2luZyBgZ3JlcHBlcmAgYXMgYSBmaW5hbCBjaGVjaywgbWFraW5nIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhGU19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2hmcy9LY29uZmlnOjI6Y29uZmlnIEhGU19GU1xuZnMvaGZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIE1hY2ludG9zaCBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTM6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY5OQoJCQkJCQkJb3V0cHV0OiAxNzYKCQkJCQkJCXRob3VnaHRzOiA1MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gSEZTIEZpbGVzeXN0ZW0gRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIHRoZSBjb25maWcgaW5kaWNhdGVzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYEhGU19GU2AuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuIExvb2tpbmcgYXQgdGhlIG1vZGlmaWVkIGZpbGVzLCBpdCYjMzk7cyBjbGVhciB0aGVzZSBjaGFuZ2VzIGFyZSB3aXRoaW4gdGhlIGBmcy9oZnNgIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IGBibm9kZS5jYCwgYGJ0cmVlLmNgLCBgYnRyZWUuaGAsIGFuZCBgaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmhgLiBBbGwgb2YgdGhpcyBjb25maXJtcyB3ZSYjMzk7cmUgaW5kZWVkIGZvY3VzZWQgb24gYEhGU19GU2AuCgpOb3csIEkgbmVlZCB0byBpZGVudGlmeSBrZXkgZnVuY3Rpb25zLiBJIHNlZSBgaGZzX2J0cmVlX29wZW5gLCBgaGZzX2JtYXBfYWxsb2NgLCBhbmQgYGhmc19ibWFwX2ZyZWVgIGhhdmUgYmVlbiB0b3VjaGVkLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXNlIGFyZSBob3QtcGF0aCBmdW5jdGlvbnMsIGJlY2F1c2UgdGhhdCB3b3VsZCBtYWtlIHRoZW0gaWRlYWwgZm9yIGZ1enppbmcuIGBoZnNfYnRyZWVfb3BlbmAgaXMgY2FsbGVkIGR1cmluZyBtb3VudCBvciB3aGVuIG9wZW5pbmcgYSBidHJlZSDigJMgZGVmaW5pdGVseSBhIGdvb2QgY2FuZGlkYXRlLiBgaGZzX2JtYXBfYWxsb2NgIGhhbmRsZXMgYnRyZWUgbm9kZSBhbGxvY2F0aW9uLCBhbmQgYGhmc19ibWFwX2ZyZWVgIGRvZXMgdGhlIG9wcG9zaXRlOiByZWxlYXNpbmcgdGhvc2Ugbm9kZXMuIEJvdGggYXJlIGNvcmUgb3BlcmF0aW9ucywgdmVyeSBnb29kLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgYXJlIGluZGVlZCB0aGUgcmlnaHQgb25lcyB0byBmb2N1cyBvbi4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIHN0YXRpYyBmdW5jdGlvbnMsIGxpa2UgYGhmc19ibWFwX2dldF9tYXBfcGFnZWAsIGBoZnNfYm1hcF90ZXN0X2JpdGAsIGFuZCBgaGZzX2JtYXBfY2xlYXJfYml0YC4gSXQmIzM5O3MgZ2VuZXJhbGx5IGJldHRlciB0byBmb2N1cyBvbiB0aGUgbm9uLXN0YXRpYywgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGVtLCB1bmxlc3MgdGhlIHN0YXRpY3MgYXJlIHN1YnN0YW50aWFsIGluIHRoZWlyIG93biByaWdodC4gQW5kIGl0IGxvb2tzIGxpa2UgdGhlc2UgYXJlIHN0YXRpYyAqYW5kKiBoYXZlIGJlZW4gbW9kaWZpZWQuIFRoZXkgYXJlIGFsc28gbmV3LiBJIHNlZSBgaGZzX2J0cmVlX29wZW5gLCBgaGZzX2JtYXBfYWxsb2NgLCBhbmQgYGhmc19ibWFwX2ZyZWVgIGFyZSBhbHNvIG1vZGlmaWVkLiBTbywgYWxsIG9mIHRoZXNlIGFyZSBjYW5kaWRhdGVzLgoKU28sIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTtsbCBsaXN0OgotIGBoZnNfYnRyZWVfb3BlbmAKLSBgaGZzX2JtYXBfYWxsb2NgCi0gYGhmc19ibWFwX2ZyZWVgCi0gYGhmc19ibWFwX2dldF9tYXBfcGFnZWAKLSBgaGZzX2JtYXBfdGVzdF9iaXRgCi0gYGhmc19ibWFwX2NsZWFyX2JpdGAKCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBgaGZzX2JtYXBfZ2V0X21hcF9wYWdlYCBzaG91bGQgYmUgaW4gYGZzL2hmcy9idHJlZS5jYC4gWWVwLCBpdCYjMzk7cyB0aGVyZS4gQWxyaWdodCwgdGltZSB0byBzZXQgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hmc19idHJlZV9vcGVuJiMzNDssCiAgICAmIzM0O2hmc19ibWFwX2FsbG9jJiMzNDssCiAgICAmIzM0O2hmc19ibWFwX2ZyZWUmIzM0OywKICAgICYjMzQ7aGZzX2JtYXBfZ2V0X21hcF9wYWdlJiMzNDssCiAgICAmIzM0O2hmc19ibWFwX3Rlc3RfYml0JiMzNDssCiAgICAmIzM0O2hmc19ibWFwX2NsZWFyX2JpdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgSEZTIGZpbGVzeXN0ZW0mIzM5O3MgYnRyZWUgbWFwIGhhbmRsaW5nIGxvZ2ljLiBJdCBhZGRzIG5ldyBmdW5jdGlvbnMgdG8gc2FmZWx5IGdldCBtYXAgcGFnZXMsIHRlc3QgYml0cywgYW5kIGNsZWFyIGJpdHMsIGFuZCBtb2RpZmllcyBub2RlIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgdG8gdXNlIHRoZXNlIG5ldyBmdW5jdGlvbnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyB0aGUgZmlsZXN5c3RlbSBtYW5hZ2VzIGl0cyBpbnRlcm5hbCBidHJlZSBzdHJ1Y3R1cmVzLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGZzX2J0cmVlX29wZW4mIzM0OywKICAgICYjMzQ7aGZzX2JtYXBfYWxsb2MmIzM0OywKICAgICYjMzQ7aGZzX2JtYXBfZnJlZSYjMzQ7LAogICAgJiMzNDtoZnNfYm1hcF9nZXRfbWFwX3BhZ2UmIzM0OywKICAgICYjMzQ7aGZzX2JtYXBfdGVzdF9iaXQmIzM0OywKICAgICYjMzQ7aGZzX2JtYXBfY2xlYXJfYml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBIRlMgZmlsZXN5c3RlbSYjMzk7cyBidHJlZSBtYXAgaGFuZGxpbmcgbG9naWMuIEl0IGFkZHMgbmV3IGZ1bmN0aW9ucyB0byBzYWZlbHkgZ2V0IG1hcCBwYWdlcywgdGVzdCBiaXRzLCBhbmQgY2xlYXIgYml0cywgYW5kIG1vZGlmaWVzIG5vZGUgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyB0byB1c2UgdGhlc2UgbmV3IGZ1bmN0aW9ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IHRoZSBmaWxlc3lzdGVtIG1hbmFnZXMgaXRzIGludGVybmFsIGJ0cmVlIHN0cnVjdHVyZXMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgZmlsZXN5c3RlbSBvcGVyYXRpb25zIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTZUMTM6MTY6MDMuMTA2MDU4MTAxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczODIxNzI4OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGZzX2J0cmVlX29wZW5cIixcbiAgICBcImhmc19ibWFwX2FsbG9jXCIsXG4gICAgXCJoZnNfYm1hcF9mcmVlXCIsXG4gICAgXCJoZnNfYm1hcF9nZXRfbWFwX3BhZ2VcIixcbiAgICBcImhmc19ibWFwX3Rlc3RfYml0XCIsXG4gICAgXCJoZnNfYm1hcF9jbGVhcl9iaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgSEZTIGZpbGVzeXN0ZW0ncyBidHJlZSBtYXAgaGFuZGxpbmcgbG9naWMuIEl0IGFkZHMgbmV3IGZ1bmN0aW9ucyB0byBzYWZlbHkgZ2V0IG1hcCBwYWdlcywgdGVzdCBiaXRzLCBhbmQgY2xlYXIgYml0cywgYW5kIG1vZGlmaWVzIG5vZGUgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyB0byB1c2UgdGhlc2UgbmV3IGZ1bmN0aW9ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IHRoZSBmaWxlc3lzdGVtIG1hbmFnZXMgaXRzIGludGVybmFsIGJ0cmVlIHN0cnVjdHVyZXMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgZmlsZXN5c3RlbSBvcGVyYXRpb25zIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxMzoxNjowMy4xMDYwNjM5MjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3NjkwODIzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNiMmNkMDc4MTE1MGVlYjZhYTQwNzNlODljYzVjMDBiMWIyY2Q2MjNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMTYgMTM6MTY6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvaGZzL2Jub2RlLmMgYi9mcy9oZnMvYm5vZGUuY1xcbmluZGV4IGRhOGU1MzQyYzkxY2MyLi4xYjMzMTEwOGQ5YzAxYiAxMDA2NDRcXG4tLS0gYS9mcy9oZnMvYm5vZGUuY1xcbisrKyBiL2ZzL2hmcy9ibm9kZS5jXFxuQEAgLTE1LDQ4ICsxNSw2IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwiYnRyZWUuaFxcXCJcXG4gXFxuLXN0YXRpYyBpbmxpbmVcXG4tYm9vbCBpc19ibm9kZV9vZmZzZXRfdmFsaWQoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG9mZilcXG4te1xcbi1cXHRib29sIGlzX3ZhbGlkID0gb2ZmIFxcdTAwM2Mgbm9kZS1cXHUwMDNldHJlZS1cXHUwMDNlbm9kZV9zaXplO1xcbi1cXG4tXFx0aWYgKCFpc192YWxpZCkge1xcbi1cXHRcXHRwcl9lcnIoXFxcInJlcXVlc3RlZCBpbnZhbGlkIG9mZnNldDogXFxcIlxcbi1cXHRcXHQgICAgICAgXFxcIk5PREU6IGlkICV1LCB0eXBlICUjeCwgaGVpZ2h0ICV1LCBcXFwiXFxuLVxcdFxcdCAgICAgICBcXFwibm9kZV9zaXplICV1LCBvZmZzZXQgJXVcXFxcblxcXCIsXFxuLVxcdFxcdCAgICAgICBub2RlLVxcdTAwM2V0aGlzLCBub2RlLVxcdTAwM2V0eXBlLCBub2RlLVxcdTAwM2VoZWlnaHQsXFxuLVxcdFxcdCAgICAgICBub2RlLVxcdTAwM2V0cmVlLVxcdTAwM2Vub2RlX3NpemUsIG9mZik7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiBpc192YWxpZDtcXG4tfVxcbi1cXG4tc3RhdGljIGlubGluZVxcbi11MzIgY2hlY2tfYW5kX2NvcnJlY3RfcmVxdWVzdGVkX2xlbmd0aChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgb2ZmLCB1MzIgbGVuKVxcbi17XFxuLVxcdHVuc2lnbmVkIGludCBub2RlX3NpemU7XFxuLVxcbi1cXHRpZiAoIWlzX2Jub2RlX29mZnNldF92YWxpZChub2RlLCBvZmYpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdG5vZGVfc2l6ZSA9IG5vZGUtXFx1MDAzZXRyZWUtXFx1MDAzZW5vZGVfc2l6ZTtcXG4tXFxuLVxcdGlmICgodTY0KW9mZiArIGxlbiBcXHUwMDNlIG5vZGVfc2l6ZSkge1xcbi1cXHRcXHR1MzIgbmV3X2xlbiA9IG5vZGVfc2l6ZSAtIG9mZjtcXG4tXFxuLVxcdFxcdHByX2VycihcXFwicmVxdWVzdGVkIGxlbmd0aCBoYXMgYmVlbiBjb3JyZWN0ZWQ6IFxcXCJcXG4tXFx0XFx0ICAgICAgIFxcXCJOT0RFOiBpZCAldSwgdHlwZSAlI3gsIGhlaWdodCAldSwgXFxcIlxcbi1cXHRcXHQgICAgICAgXFxcIm5vZGVfc2l6ZSAldSwgb2Zmc2V0ICV1LCBcXFwiXFxuLVxcdFxcdCAgICAgICBcXFwicmVxdWVzdGVkX2xlbiAldSwgY29ycmVjdGVkX2xlbiAldVxcXFxuXFxcIixcXG4tXFx0XFx0ICAgICAgIG5vZGUtXFx1MDAzZXRoaXMsIG5vZGUtXFx1MDAzZXR5cGUsIG5vZGUtXFx1MDAzZWhlaWdodCxcXG4tXFx0XFx0ICAgICAgIG5vZGUtXFx1MDAzZXRyZWUtXFx1MDAzZW5vZGVfc2l6ZSwgb2ZmLCBsZW4sIG5ld19sZW4pO1xcbi1cXG4tXFx0XFx0cmV0dXJuIG5ld19sZW47XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiBsZW47XFxuLX1cXG4tXFxuIHZvaWQgaGZzX2Jub2RlX3JlYWQoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdm9pZCAqYnVmLCB1MzIgb2ZmLCB1MzIgbGVuKVxcbiB7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbmRpZmYgLS1naXQgYS9mcy9oZnMvYnRyZWUuYyBiL2ZzL2hmcy9idHJlZS5jXFxuaW5kZXggMmViMzdhMmY2NGU4NjYuLjQxYjRlOGZjOTQ2MzdkIDEwMDY0NFxcbi0tLSBhL2ZzL2hmcy9idHJlZS5jXFxuKysrIGIvZnMvaGZzL2J0cmVlLmNcXG5AQCAtMTUsNiArMTUsMTIxIEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwiYnRyZWUuaFxcXCJcXG4gXFxuKy8qIENvbnRleHQgZm9yIGl0ZXJhdGluZyBiLXRyZWUgbWFwIHBhZ2VzXFxuKyAqIEBwYWdlX2lkeDogVGhlIGluZGV4IG9mIHRoZSBwYWdlIHdpdGhpbiB0aGUgYi1ub2RlJ3MgcGFnZSBhcnJheVxcbisgKiBAb2ZmOiBUaGUgYnl0ZSBvZmZzZXQgd2l0aGluIHRoZSBtYXBwZWQgcGFnZVxcbisgKiBAbGVuOiBUaGUgcmVtYWluaW5nIGxlbmd0aCBvZiB0aGUgbWFwIHJlY29yZFxcbisgKi9cXG4rc3RydWN0IGhmc19ibWFwX2N0eCB7XFxuK1xcdHVuc2lnbmVkIGludCBwYWdlX2lkeDtcXG4rXFx0dW5zaWduZWQgaW50IG9mZjtcXG4rXFx0dTE2IGxlbjtcXG4rfTtcXG4rXFxuKy8qXFxuKyAqIEZpbmRzIHRoZSBzcGVjaWZpYyBwYWdlIGNvbnRhaW5pbmcgdGhlIHJlcXVlc3RlZCBieXRlIG9mZnNldCB3aXRoaW4gdGhlIG1hcFxcbisgKiByZWNvcmQuIEF1dG9tYXRpY2FsbHkgaGFuZGxlcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGhlYWRlciBhbmQgbWFwIG5vZGVzLlxcbisgKiBSZXR1cm5zIHRoZSBzdHJ1Y3QgcGFnZSBwb2ludGVyLCBvciBhbiBFUlJfUFRSIG9uIGZhaWx1cmUuXFxuKyAqIE5vdGU6IFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIG1hcHBpbmcvdW5tYXBwaW5nIHRoZSByZXR1cm5lZCBwYWdlLlxcbisgKi9cXG4rc3RhdGljIHN0cnVjdCBwYWdlICpoZnNfYm1hcF9nZXRfbWFwX3BhZ2Uoc3RydWN0IGhmc19ibm9kZSAqbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaGZzX2JtYXBfY3R4ICpjdHgsXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTMyIGJ5dGVfb2Zmc2V0KVxcbit7XFxuK1xcdHUxNiByZWNfaWR4LCBvZmYxNjtcXG4rXFx0dW5zaWduZWQgaW50IHBhZ2Vfb2ZmO1xcbitcXG4rXFx0aWYgKG5vZGUtXFx1MDAzZXRoaXMgPT0gSEZTX1RSRUVfSEVBRCkge1xcbitcXHRcXHRpZiAobm9kZS1cXHUwMDNldHlwZSAhPSBIRlNfTk9ERV9IRUFERVIpIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJoZnM6IGludmFsaWQgYnRyZWUgaGVhZGVyIG5vZGVcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZWNfaWR4ID0gSEZTX0JUUkVFX0hEUl9NQVBfUkVDX0lOREVYO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAobm9kZS1cXHUwMDNldHlwZSAhPSBIRlNfTk9ERV9NQVApIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJoZnM6IGludmFsaWQgYnRyZWUgbWFwIG5vZGVcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZWNfaWR4ID0gSEZTX0JUUkVFX01BUF9OT0RFX1JFQ19JTkRFWDtcXG4rXFx0fVxcbitcXG4rXFx0Y3R4LVxcdTAwM2VsZW4gPSBoZnNfYnJlY19sZW5vZmYobm9kZSwgcmVjX2lkeCwgXFx1MDAyNm9mZjE2KTtcXG4rXFx0aWYgKCFjdHgtXFx1MDAzZWxlbilcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XFxuK1xcbitcXHRpZiAoIWlzX2Jub2RlX29mZnNldF92YWxpZChub2RlLCBvZmYxNikpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FSU8pO1xcbitcXG4rXFx0Y3R4LVxcdTAwM2VsZW4gPSBjaGVja19hbmRfY29ycmVjdF9yZXF1ZXN0ZWRfbGVuZ3RoKG5vZGUsIG9mZjE2LCBjdHgtXFx1MDAzZWxlbik7XFxuK1xcbitcXHRpZiAoYnl0ZV9vZmZzZXQgXFx1MDAzZT0gY3R4LVxcdTAwM2VsZW4pXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbitcXG4rXFx0cGFnZV9vZmYgPSAodTMyKW9mZjE2ICsgbm9kZS1cXHUwMDNlcGFnZV9vZmZzZXQgKyBieXRlX29mZnNldDtcXG4rXFx0Y3R4LVxcdTAwM2VwYWdlX2lkeCA9IHBhZ2Vfb2ZmIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcdGN0eC1cXHUwMDNlb2ZmID0gcGFnZV9vZmYgXFx1MDAyNiB+UEFHRV9NQVNLO1xcbitcXG4rXFx0cmV0dXJuIG5vZGUtXFx1MDAzZXBhZ2VbY3R4LVxcdTAwM2VwYWdlX2lkeF07XFxuK31cXG4rXFxuKy8qKlxcbisgKiBoZnNfYm1hcF90ZXN0X2JpdCAtIHRlc3QgYSBiaXQgaW4gdGhlIGItdHJlZSBtYXBcXG4rICogQG5vZGU6IHRoZSBiLXRyZWUgbm9kZSBjb250YWluaW5nIHRoZSBtYXAgcmVjb3JkXFxuKyAqIEBub2RlX2JpdF9pZHg6IHRoZSByZWxhdGl2ZSBiaXQgaW5kZXggd2l0aGluIHRoZSBub2RlJ3MgbWFwIHJlY29yZFxcbisgKlxcbisgKiBSZXR1cm5zIHRydWUgaWYgc2V0LCBmYWxzZSBpZiBjbGVhciBvciBvbiBmYWlsdXJlLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgaGZzX2JtYXBfdGVzdF9iaXQoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG5vZGVfYml0X2lkeClcXG4re1xcbitcXHRzdHJ1Y3QgaGZzX2JtYXBfY3R4IGN0eDtcXG4rXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuK1xcdHU4ICpibWFwLCBieXRlLCBtYXNrO1xcbitcXG4rXFx0cGFnZSA9IGhmc19ibWFwX2dldF9tYXBfcGFnZShub2RlLCBcXHUwMDI2Y3R4LCBub2RlX2JpdF9pZHggLyBCSVRTX1BFUl9CWVRFKTtcXG4rXFx0aWYgKElTX0VSUihwYWdlKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Ym1hcCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG4rXFx0Ynl0ZSA9IGJtYXBbY3R4Lm9mZl07XFxuK1xcdGt1bm1hcF9sb2NhbChibWFwKTtcXG4rXFxuK1xcdG1hc2sgPSAxIFxcdTAwM2NcXHUwMDNjICg3IC0gKG5vZGVfYml0X2lkeCAlIEJJVFNfUEVSX0JZVEUpKTtcXG4rXFx0cmV0dXJuIChieXRlIFxcdTAwMjYgbWFzaykgIT0gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGhmc19ibWFwX2NsZWFyX2JpdCAtIGNsZWFyIGEgYml0IGluIHRoZSBiLXRyZWUgbWFwXFxuKyAqIEBub2RlOiB0aGUgYi10cmVlIG5vZGUgY29udGFpbmluZyB0aGUgbWFwIHJlY29yZFxcbisgKiBAbm9kZV9iaXRfaWR4OiB0aGUgcmVsYXRpdmUgYml0IGluZGV4IHdpdGhpbiB0aGUgbm9kZSdzIG1hcCByZWNvcmRcXG4rICpcXG4rICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FSU5WQUwgaWYgYWxyZWFkeSBjbGVhciwgb3IgbmVnYXRpdmUgZXJyb3IgY29kZS5cXG4rICovXFxuK3N0YXRpYyBpbnQgaGZzX2JtYXBfY2xlYXJfYml0KHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBub2RlX2JpdF9pZHgpXFxuK3tcXG4rXFx0c3RydWN0IGhmc19ibWFwX2N0eCBjdHg7XFxuK1xcdHN0cnVjdCBwYWdlICpwYWdlO1xcbitcXHR1OCAqYm1hcCwgbWFzaztcXG4rXFxuK1xcdHBhZ2UgPSBoZnNfYm1hcF9nZXRfbWFwX3BhZ2Uobm9kZSwgXFx1MDAyNmN0eCwgbm9kZV9iaXRfaWR4IC8gQklUU19QRVJfQllURSk7XFxuK1xcdGlmIChJU19FUlIocGFnZSkpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHBhZ2UpO1xcbitcXG4rXFx0Ym1hcCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG4rXFxuK1xcdG1hc2sgPSAxIFxcdTAwM2NcXHUwMDNjICg3IC0gKG5vZGVfYml0X2lkeCAlIEJJVFNfUEVSX0JZVEUpKTtcXG4rXFxuK1xcdGlmICghKGJtYXBbY3R4Lm9mZl0gXFx1MDAyNiBtYXNrKSkge1xcbitcXHRcXHRrdW5tYXBfbG9jYWwoYm1hcCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRibWFwW2N0eC5vZmZdIFxcdTAwMjY9IH5tYXNrO1xcbitcXHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcXG4rXFx0a3VubWFwX2xvY2FsKGJtYXApO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qIEdldCBhIHJlZmVyZW5jZSB0byBhIEIqVHJlZSBhbmQgZG8gc29tZSBpbml0aWFsIGNoZWNrcyAqL1xcbiBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZXljbXApXFxuIHtcXG5AQCAtMjMsNiArMTM4LDcgQEAgc3RydWN0IGhmc19idHJlZSAqaGZzX2J0cmVlX29wZW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGlkLCBidHJlZV9rZXljbXAga2VcXG4gXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XFxuIFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XFxuK1xcdHN0cnVjdCBoZnNfYm5vZGUgKm5vZGU7XFxuIFxcdHVuc2lnbmVkIGludCBzaXplO1xcbiBcXHR1MTYgZGJsb2NrO1xcbiBcXHRzZWN0b3JfdCBzdGFydF9ibG9jaztcXG5AQCAtMTU1LDYgKzI3MSwyMCBAQCBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZVxcbiBcXHRrdW5tYXBfbG9jYWwoaGVhZCk7XFxuIFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuIFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuK1xcbitcXHRub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgSEZTX1RSRUVfSEVBRCk7XFxuK1xcdGlmIChJU19FUlIobm9kZSkpXFxuK1xcdFxcdGdvdG8gZnJlZV9pbm9kZTtcXG4rXFxuK1xcdGlmICghaGZzX2JtYXBfdGVzdF9iaXQobm9kZSwgSEZTX1RSRUVfSEVBRCkpIHtcXG4rXFx0XFx0cHJfd2FybihcXFwiKCVzKTogJXMgKGNuaWQgMHgleCkgYml0bWFwIGNvcnJ1cHRlZCwgZm9yY2luZyByZG9ubHlcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHNiLVxcdTAwM2VzX2lkLCBpZCA9PSBIRlNfRVhUX0NOSUQgPyBcXFwiZXh0ZW50c1xcXCIgOiBcXFwiY2F0YWxvZ1xcXCIsIGlkKTtcXG4rXFx0XFx0cHJfd2FybihcXFwiUnVuIGZzY2suaGZzIHRvIHJlcGFpci5cXFxcblxcXCIpO1xcbitcXHRcXHRzYi1cXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XFxuK1xcdH1cXG4rXFxuK1xcdGhmc19ibm9kZV9wdXQobm9kZSk7XFxuK1xcbiBcXHRyZXR1cm4gdHJlZTtcXG4gXFxuIGZhaWxfZm9saW86XFxuQEAgLTI4NSwxMSArNDE1LDkgQEAgaW50IGhmc19ibWFwX3Jlc2VydmUoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIHJzdmRfbm9kZXMpXFxuIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpXFxuIHtcXG4gXFx0c3RydWN0IGhmc19ibm9kZSAqbm9kZSwgKm5leHRfbm9kZTtcXG4tXFx0c3RydWN0IHBhZ2UgKipwYWdlcDtcXG4rXFx0c3RydWN0IGhmc19ibWFwX2N0eCBjdHg7XFxuK1xcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiBcXHR1MzIgbmlkeCwgaWR4O1xcbi1cXHR1bnNpZ25lZCBvZmY7XFxuLVxcdHUxNiBvZmYxNjtcXG4tXFx0dTE2IGxlbjtcXG4gXFx0dTggKmRhdGEsIGJ5dGUsIG07XFxuIFxcdGludCBpLCByZXM7XFxuIFxcbkBAIC0zMDEsMjQgKzQyOSwyNiBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxcbiBcXHRub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgbmlkeCk7XFxuIFxcdGlmIChJU19FUlIobm9kZSkpXFxuIFxcdFxcdHJldHVybiBub2RlO1xcbi1cXHRsZW4gPSBoZnNfYnJlY19sZW5vZmYobm9kZSwgMiwgXFx1MDAyNm9mZjE2KTtcXG4tXFx0b2ZmID0gb2ZmMTY7XFxuIFxcbi1cXHRvZmYgKz0gbm9kZS1cXHUwMDNlcGFnZV9vZmZzZXQ7XFxuLVxcdHBhZ2VwID0gbm9kZS1cXHUwMDNlcGFnZSArIChvZmYgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuLVxcdGRhdGEgPSBrbWFwX2xvY2FsX3BhZ2UoKnBhZ2VwKTtcXG4tXFx0b2ZmIFxcdTAwMjY9IH5QQUdFX01BU0s7XFxuK1xcdHBhZ2UgPSBoZnNfYm1hcF9nZXRfbWFwX3BhZ2Uobm9kZSwgXFx1MDAyNmN0eCwgMCk7XFxuK1xcdGlmIChJU19FUlIocGFnZSkpIHtcXG4rXFx0XFx0cmVzID0gUFRSX0VSUihwYWdlKTtcXG4rXFx0XFx0aGZzX2Jub2RlX3B1dChub2RlKTtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIocmVzKTtcXG4rXFx0fVxcbitcXG4rXFx0ZGF0YSA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG4gXFx0aWR4ID0gMDtcXG4gXFxuIFxcdGZvciAoOzspIHtcXG4tXFx0XFx0d2hpbGUgKGxlbikge1xcbi1cXHRcXHRcXHRieXRlID0gZGF0YVtvZmZdO1xcbitcXHRcXHR3aGlsZSAoY3R4Lmxlbikge1xcbitcXHRcXHRcXHRieXRlID0gZGF0YVtjdHgub2ZmXTtcXG4gXFx0XFx0XFx0aWYgKGJ5dGUgIT0gMHhmZikge1xcbiBcXHRcXHRcXHRcXHRmb3IgKG0gPSAweDgwLCBpID0gMDsgaSBcXHUwMDNjIDg7IG0gXFx1MDAzZVxcdTAwM2U9IDEsIGkrKykge1xcbiBcXHRcXHRcXHRcXHRcXHRpZiAoIShieXRlIFxcdTAwMjYgbSkpIHtcXG4gXFx0XFx0XFx0XFx0XFx0XFx0aWR4ICs9IGk7XFxuLVxcdFxcdFxcdFxcdFxcdFxcdGRhdGFbb2ZmXSB8PSBtO1xcbi1cXHRcXHRcXHRcXHRcXHRcXHRzZXRfcGFnZV9kaXJ0eSgqcGFnZXApO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRkYXRhW2N0eC5vZmZdIHw9IG07XFxuK1xcdFxcdFxcdFxcdFxcdFxcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRrdW5tYXBfbG9jYWwoZGF0YSk7XFxuIFxcdFxcdFxcdFxcdFxcdFxcdHRyZWUtXFx1MDAzZWZyZWVfbm9kZXMtLTtcXG4gXFx0XFx0XFx0XFx0XFx0XFx0bWFya19pbm9kZV9kaXJ0eSh0cmVlLVxcdTAwM2Vpbm9kZSk7XFxuQEAgLTMyNywxMyArNDU3LDE0IEBAIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpXFxuIFxcdFxcdFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGlmICgrK29mZiBcXHUwMDNlPSBQQUdFX1NJWkUpIHtcXG4rXFx0XFx0XFx0aWYgKCsrY3R4Lm9mZiBcXHUwMDNlPSBQQUdFX1NJWkUpIHtcXG4gXFx0XFx0XFx0XFx0a3VubWFwX2xvY2FsKGRhdGEpO1xcbi1cXHRcXHRcXHRcXHRkYXRhID0ga21hcF9sb2NhbF9wYWdlKCorK3BhZ2VwKTtcXG4tXFx0XFx0XFx0XFx0b2ZmID0gMDtcXG4rXFx0XFx0XFx0XFx0cGFnZSA9IG5vZGUtXFx1MDAzZXBhZ2VbKytjdHgucGFnZV9pZHhdO1xcbitcXHRcXHRcXHRcXHRkYXRhID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xcbitcXHRcXHRcXHRcXHRjdHgub2ZmID0gMDtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRpZHggKz0gODtcXG4tXFx0XFx0XFx0bGVuLS07XFxuK1xcdFxcdFxcdGN0eC5sZW4tLTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRrdW5tYXBfbG9jYWwoZGF0YSk7XFxuIFxcdFxcdG5pZHggPSBub2RlLVxcdTAwM2VuZXh0O1xcbkBAIC0zNDcsMjIgKzQ3OCwyMiBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxcbiBcXHRcXHRcXHRyZXR1cm4gbmV4dF9ub2RlO1xcbiBcXHRcXHRub2RlID0gbmV4dF9ub2RlO1xcbiBcXG4tXFx0XFx0bGVuID0gaGZzX2JyZWNfbGVub2ZmKG5vZGUsIDAsIFxcdTAwMjZvZmYxNik7XFxuLVxcdFxcdG9mZiA9IG9mZjE2O1xcbi1cXHRcXHRvZmYgKz0gbm9kZS1cXHUwMDNlcGFnZV9vZmZzZXQ7XFxuLVxcdFxcdHBhZ2VwID0gbm9kZS1cXHUwMDNlcGFnZSArIChvZmYgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuLVxcdFxcdGRhdGEgPSBrbWFwX2xvY2FsX3BhZ2UoKnBhZ2VwKTtcXG4tXFx0XFx0b2ZmIFxcdTAwMjY9IH5QQUdFX01BU0s7XFxuK1xcdFxcdHBhZ2UgPSBoZnNfYm1hcF9nZXRfbWFwX3BhZ2Uobm9kZSwgXFx1MDAyNmN0eCwgMCk7XFxuK1xcdFxcdGlmIChJU19FUlIocGFnZSkpIHtcXG4rXFx0XFx0XFx0cmVzID0gUFRSX0VSUihwYWdlKTtcXG4rXFx0XFx0XFx0aGZzX2Jub2RlX3B1dChub2RlKTtcXG4rXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIocmVzKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRkYXRhID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xcbiBcXHR9XFxuIH1cXG4gXFxuIHZvaWQgaGZzX2JtYXBfZnJlZShzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBoZnNfYnRyZWUgKnRyZWU7XFxuLVxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiBcXHR1MTYgb2ZmLCBsZW47XFxuIFxcdHUzMiBuaWR4O1xcbi1cXHR1OCAqZGF0YSwgYnl0ZSwgbTtcXG4rXFx0aW50IHJlcztcXG4gXFxuIFxcdGhmc19kYmcoXFxcIm5vZGUgJXVcXFxcblxcXCIsIG5vZGUtXFx1MDAzZXRoaXMpO1xcbiBcXHR0cmVlID0gbm9kZS1cXHUwMDNldHJlZTtcXG5AQCAtMzk2LDIzICs1MjcsMTggQEAgdm9pZCBoZnNfYm1hcF9mcmVlKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpXFxuIFxcdFxcdH1cXG4gXFx0XFx0bGVuID0gaGZzX2JyZWNfbGVub2ZmKG5vZGUsIDAsIFxcdTAwMjZvZmYpO1xcbiBcXHR9XFxuLVxcdG9mZiArPSBub2RlLVxcdTAwM2VwYWdlX29mZnNldCArIG5pZHggLyA4O1xcbi1cXHRwYWdlID0gbm9kZS1cXHUwMDNlcGFnZVtvZmYgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVF07XFxuLVxcdGRhdGEgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XFxuLVxcdG9mZiBcXHUwMDI2PSB+UEFHRV9NQVNLO1xcbi1cXHRtID0gMSBcXHUwMDNjXFx1MDAzYyAofm5pZHggXFx1MDAyNiA3KTtcXG4tXFx0Ynl0ZSA9IGRhdGFbb2ZmXTtcXG4tXFx0aWYgKCEoYnl0ZSBcXHUwMDI2IG0pKSB7XFxuK1xcbitcXHRyZXMgPSBoZnNfYm1hcF9jbGVhcl9iaXQobm9kZSwgbmlkeCk7XFxuK1xcdGlmIChyZXMgPT0gLUVJTlZBTCkge1xcbiBcXHRcXHRwcl9jcml0KFxcXCJ0cnlpbmcgdG8gZnJlZSBmcmVlIGJub2RlICV1KCVkKVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0bm9kZS1cXHUwMDNldGhpcywgbm9kZS1cXHUwMDNldHlwZSk7XFxuLVxcdFxcdGt1bm1hcF9sb2NhbChkYXRhKTtcXG4tXFx0XFx0aGZzX2Jub2RlX3B1dChub2RlKTtcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRuaWR4LCBub2RlLVxcdTAwM2V0eXBlKTtcXG4rXFx0fSBlbHNlIGlmIChyZXMpIHtcXG4rXFx0XFx0cHJfY3JpdChcXFwiZmFpbCB0byBmcmVlIGJub2RlICV1KCVkKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0bmlkeCwgbm9kZS1cXHUwMDNldHlwZSk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHRyZWUtXFx1MDAzZWZyZWVfbm9kZXMrKztcXG4rXFx0XFx0bWFya19pbm9kZV9kaXJ0eSh0cmVlLVxcdTAwM2Vpbm9kZSk7XFxuIFxcdH1cXG4tXFx0ZGF0YVtvZmZdID0gYnl0ZSBcXHUwMDI2IH5tO1xcbi1cXHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcXG4tXFx0a3VubWFwX2xvY2FsKGRhdGEpO1xcbitcXG4gXFx0aGZzX2Jub2RlX3B1dChub2RlKTtcXG4tXFx0dHJlZS1cXHUwMDNlZnJlZV9ub2RlcysrO1xcbi1cXHRtYXJrX2lub2RlX2RpcnR5KHRyZWUtXFx1MDAzZWlub2RlKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9mcy9oZnMvYnRyZWUuaCBiL2ZzL2hmcy9idHJlZS5oXFxuaW5kZXggOTliZTg1OGIyNDQ2NTAuLmI0YzNmMmEzMTQ3MTAwIDEwMDY0NFxcbi0tLSBhL2ZzL2hmcy9idHJlZS5oXFxuKysrIGIvZnMvaGZzL2J0cmVlLmhcXG5AQCAtMTI5LDMgKzEyOSw0MyBAQCBleHRlcm4gaW50IF9faGZzX2JyZWNfZmluZChzdHJ1Y3QgaGZzX2Jub2RlICpibm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKTtcXG4gZXh0ZXJuIGludCBoZnNfYnJlY19maW5kKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCk7XFxuIGV4dGVybiBpbnQgaGZzX2JyZWNfcmVhZChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHZvaWQgKnJlYywgdTMyIHJlY19sZW4pO1xcbiBleHRlcm4gaW50IGhmc19icmVjX2dvdG8oc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLCBpbnQgY250KTtcXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19ibm9kZV9vZmZzZXRfdmFsaWQoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG9mZilcXG4re1xcbitcXHRib29sIGlzX3ZhbGlkO1xcbitcXG4rXFx0aWYgKCFub2RlIHx8ICFub2RlLVxcdTAwM2V0cmVlKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpc192YWxpZCA9IG9mZiBcXHUwMDNjIG5vZGUtXFx1MDAzZXRyZWUtXFx1MDAzZW5vZGVfc2l6ZTtcXG4rXFxuK1xcdGlmICghaXNfdmFsaWQpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCJpbnZhbGlkIG9mZnNldDogaWQgJXUsIHR5cGUgJSN4LCBoICV1LCBzeiAldSwgb2ZmICV1XFxcXG5cXFwiLFxcbitcXHRcXHQgICAgICAgbm9kZS1cXHUwMDNldGhpcywgbm9kZS1cXHUwMDNldHlwZSwgbm9kZS1cXHUwMDNlaGVpZ2h0LFxcbitcXHRcXHQgICAgICAgbm9kZS1cXHUwMDNldHJlZS1cXHUwMDNlbm9kZV9zaXplLCBvZmYpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gaXNfdmFsaWQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdTMyIGNoZWNrX2FuZF9jb3JyZWN0X3JlcXVlc3RlZF9sZW5ndGgoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG9mZiwgdTMyIGxlbilcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgbm9kZV9zaXplO1xcbitcXG4rXFx0aWYgKCFpc19ibm9kZV9vZmZzZXRfdmFsaWQobm9kZSwgb2ZmKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRub2RlX3NpemUgPSBub2RlLVxcdTAwM2V0cmVlLVxcdTAwM2Vub2RlX3NpemU7XFxuK1xcbitcXHRpZiAoKHU2NClvZmYgKyBsZW4gXFx1MDAzZSBub2RlX3NpemUpIHtcXG4rXFx0XFx0dTMyIG5ld19sZW4gPSBub2RlX3NpemUgLSBvZmY7XFxuK1xcbitcXHRcXHRwcl9lcnIoXFxcImNvcnJlY3RlZCBsZW46IGlkICV1LCB0eXBlICUjeCwgaCAldSwgc3ogJXUsIG9mZiAldSwgbGVuICV1LVxcdTAwM2UldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIG5vZGUtXFx1MDAzZXRoaXMsIG5vZGUtXFx1MDAzZXR5cGUsIG5vZGUtXFx1MDAzZWhlaWdodCxcXG4rXFx0XFx0ICAgICAgIG5vZGVfc2l6ZSwgb2ZmLCBsZW4sIG5ld19sZW4pO1xcbitcXG4rXFx0XFx0cmV0dXJuIG5ld19sZW47XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBsZW47XFxuK31cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmggYi9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaFxcbmluZGV4IDQ1ZmI0YzlmZjlmNWVlLi5kNmE2MTVlNzRiMjZlMiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oXFxuQEAgLTUxMCwxNCArNTEwLDIxIEBAIHN0cnVjdCBoZnNfYnRyZWVfaGVhZGVyX3JlYyB7XFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIGItdHJlZSBidXQgbm90IGluIGV4dGVudHNcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgYi10cmVlIChoZnNwbHVzKS4gKi9cXG4gXFxuKy8qIEhGUyBCVHJlZSBtaXNjIGluZm8gKi9cXG4rI2RlZmluZSBIRlNfVFJFRV9IRUFEXFx0XFx0XFx0XFx0MFxcbisjZGVmaW5lIEhGU19CVFJFRV9IRFJfTUFQX1JFQ19JTkRFWFxcdFxcdDJcXHQvKiBNYXAgKGJpdG1hcCkgcmVjb3JkIGluIEhlYWRlciBub2RlICovXFxuKyNkZWZpbmUgSEZTX0JUUkVFX01BUF9OT0RFX1JFQ19JTkRFWFxcdFxcdDBcXHQvKiBNYXAgcmVjb3JkIGluIE1hcCBOb2RlICovXFxuK1xcbiAvKiBIRlMrIEJUcmVlIG1pc2MgaW5mbyAqL1xcbi0jZGVmaW5lIEhGU1BMVVNfVFJFRV9IRUFEXFx0XFx0XFx0MFxcbisjZGVmaW5lIEhGU1BMVVNfVFJFRV9IRUFEXFx0XFx0XFx0SEZTX1RSRUVfSEVBRFxcbiAjZGVmaW5lIEhGU1BMVVNfTk9ERV9NWFNaXFx0XFx0XFx0MzI3NjhcXG4gI2RlZmluZSBIRlNQTFVTX05PREVfTUlOU1pcXHRcXHRcXHQ1MTJcXG4gI2RlZmluZSBIRlNQTFVTX0FUVFJfVFJFRV9OT0RFX1NJWkVcXHRcXHQ4MTkyXFxuICNkZWZpbmUgSEZTUExVU19CVFJFRV9IRFJfTk9ERV9SRUNTX0NPVU5UXFx0M1xcbi0jZGVmaW5lIEhGU1BMVVNfQlRSRUVfSERSX01BUF9SRUNfSU5ERVhcXHRcXHQyXFx0LyogTWFwIChiaXRtYXApIHJlY29yZCBpbiBIZWFkZXIgbm9kZSAqL1xcbi0jZGVmaW5lIEhGU1BMVVNfQlRSRUVfTUFQX05PREVfUkVDX0lOREVYXFx0MFxcdC8qIE1hcCByZWNvcmQgaW4gTWFwIE5vZGUgKi9cXG4rLyogTWFwIChiaXRtYXApIHJlY29yZCBpbiBIZWFkZXIgbm9kZSAqL1xcbisjZGVmaW5lIEhGU1BMVVNfQlRSRUVfSERSX01BUF9SRUNfSU5ERVhcXHRcXHRIRlNfQlRSRUVfSERSX01BUF9SRUNfSU5ERVhcXG4rLyogTWFwIHJlY29yZCBpbiBNYXAgTm9kZSAqL1xcbisjZGVmaW5lIEhGU1BMVVNfQlRSRUVfTUFQX05PREVfUkVDX0lOREVYXFx0SEZTX0JUUkVFX01BUF9OT0RFX1JFQ19JTkRFWFxcbiAjZGVmaW5lIEhGU1BMVVNfQlRSRUVfSERSX1VTRVJfQllURVNcXHRcXHQxMjhcXG4gI2RlZmluZSBIRlNQTFVTX0JUUkVFX01BUF9OT0RFX1JFQ1NfQ09VTlRcXHQyXFxuICNkZWZpbmUgSEZTUExVU19CVFJFRV9NQVBfTk9ERV9SRVNFUlZFRF9CWVRFU1xcdDJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTM6MTY6MDQuMDgzOTg2MTI5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjQwNDIyNTMxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNfYnRyZWVfb3BlblwiLFxuICAgIFwiaGZzX2JtYXBfYWxsb2NcIixcbiAgICBcImhmc19ibWFwX2ZyZWVcIixcbiAgICBcImhmc19ibWFwX2dldF9tYXBfcGFnZVwiLFxuICAgIFwiaGZzX2JtYXBfdGVzdF9iaXRcIixcbiAgICBcImhmc19ibWFwX2NsZWFyX2JpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBIRlMgZmlsZXN5c3RlbSdzIGJ0cmVlIG1hcCBoYW5kbGluZyBsb2dpYy4gSXQgYWRkcyBuZXcgZnVuY3Rpb25zIHRvIHNhZmVseSBnZXQgbWFwIHBhZ2VzLCB0ZXN0IGJpdHMsIGFuZCBjbGVhciBiaXRzLCBhbmQgbW9kaWZpZXMgbm9kZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIHRvIHVzZSB0aGVzZSBuZXcgZnVuY3Rpb25zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBob3cgdGhlIGZpbGVzeXN0ZW0gbWFuYWdlcyBpdHMgaW50ZXJuYWwgYnRyZWUgc3RydWN0dXJlcywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2IyY2QwNzgxMTUwZWViNmFhNDA3M2U4OWNjNWMwMGIxYjJjZDYyM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDE2IDEzOjE2OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaGZzL2Jub2RlLmMgYi9mcy9oZnMvYm5vZGUuY1xuaW5kZXggZGE4ZTUzNDJjOTFjYzIuLjFiMzMxMTA4ZDljMDFiIDEwMDY0NFxuLS0tIGEvZnMvaGZzL2Jub2RlLmNcbisrKyBiL2ZzL2hmcy9ibm9kZS5jXG5AQCAtMTUsNDggKzE1LDYgQEBcbiBcbiAjaW5jbHVkZSBcImJ0cmVlLmhcIlxuIFxuLXN0YXRpYyBpbmxpbmVcbi1ib29sIGlzX2Jub2RlX29mZnNldF92YWxpZChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgb2ZmKVxuLXtcbi1cdGJvb2wgaXNfdmFsaWQgPSBvZmYgXHUwMDNjIG5vZGUtXHUwMDNldHJlZS1cdTAwM2Vub2RlX3NpemU7XG4tXG4tXHRpZiAoIWlzX3ZhbGlkKSB7XG4tXHRcdHByX2VycihcInJlcXVlc3RlZCBpbnZhbGlkIG9mZnNldDogXCJcbi1cdFx0ICAgICAgIFwiTk9ERTogaWQgJXUsIHR5cGUgJSN4LCBoZWlnaHQgJXUsIFwiXG4tXHRcdCAgICAgICBcIm5vZGVfc2l6ZSAldSwgb2Zmc2V0ICV1XFxuXCIsXG4tXHRcdCAgICAgICBub2RlLVx1MDAzZXRoaXMsIG5vZGUtXHUwMDNldHlwZSwgbm9kZS1cdTAwM2VoZWlnaHQsXG4tXHRcdCAgICAgICBub2RlLVx1MDAzZXRyZWUtXHUwMDNlbm9kZV9zaXplLCBvZmYpO1xuLVx0fVxuLVxuLVx0cmV0dXJuIGlzX3ZhbGlkO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lXG4tdTMyIGNoZWNrX2FuZF9jb3JyZWN0X3JlcXVlc3RlZF9sZW5ndGgoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG9mZiwgdTMyIGxlbilcbi17XG4tXHR1bnNpZ25lZCBpbnQgbm9kZV9zaXplO1xuLVxuLVx0aWYgKCFpc19ibm9kZV9vZmZzZXRfdmFsaWQobm9kZSwgb2ZmKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRub2RlX3NpemUgPSBub2RlLVx1MDAzZXRyZWUtXHUwMDNlbm9kZV9zaXplO1xuLVxuLVx0aWYgKCh1NjQpb2ZmICsgbGVuIFx1MDAzZSBub2RlX3NpemUpIHtcbi1cdFx0dTMyIG5ld19sZW4gPSBub2RlX3NpemUgLSBvZmY7XG4tXG4tXHRcdHByX2VycihcInJlcXVlc3RlZCBsZW5ndGggaGFzIGJlZW4gY29ycmVjdGVkOiBcIlxuLVx0XHQgICAgICAgXCJOT0RFOiBpZCAldSwgdHlwZSAlI3gsIGhlaWdodCAldSwgXCJcbi1cdFx0ICAgICAgIFwibm9kZV9zaXplICV1LCBvZmZzZXQgJXUsIFwiXG4tXHRcdCAgICAgICBcInJlcXVlc3RlZF9sZW4gJXUsIGNvcnJlY3RlZF9sZW4gJXVcXG5cIixcbi1cdFx0ICAgICAgIG5vZGUtXHUwMDNldGhpcywgbm9kZS1cdTAwM2V0eXBlLCBub2RlLVx1MDAzZWhlaWdodCxcbi1cdFx0ICAgICAgIG5vZGUtXHUwMDNldHJlZS1cdTAwM2Vub2RlX3NpemUsIG9mZiwgbGVuLCBuZXdfbGVuKTtcbi1cbi1cdFx0cmV0dXJuIG5ld19sZW47XG4tXHR9XG4tXG4tXHRyZXR1cm4gbGVuO1xuLX1cbi1cbiB2b2lkIGhmc19ibm9kZV9yZWFkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHZvaWQgKmJ1ZiwgdTMyIG9mZiwgdTMyIGxlbilcbiB7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbmRpZmYgLS1naXQgYS9mcy9oZnMvYnRyZWUuYyBiL2ZzL2hmcy9idHJlZS5jXG5pbmRleCAyZWIzN2EyZjY0ZTg2Ni4uNDFiNGU4ZmM5NDYzN2QgMTAwNjQ0XG4tLS0gYS9mcy9oZnMvYnRyZWUuY1xuKysrIGIvZnMvaGZzL2J0cmVlLmNcbkBAIC0xNSw2ICsxNSwxMjEgQEBcbiBcbiAjaW5jbHVkZSBcImJ0cmVlLmhcIlxuIFxuKy8qIENvbnRleHQgZm9yIGl0ZXJhdGluZyBiLXRyZWUgbWFwIHBhZ2VzXG4rICogQHBhZ2VfaWR4OiBUaGUgaW5kZXggb2YgdGhlIHBhZ2Ugd2l0aGluIHRoZSBiLW5vZGUncyBwYWdlIGFycmF5XG4rICogQG9mZjogVGhlIGJ5dGUgb2Zmc2V0IHdpdGhpbiB0aGUgbWFwcGVkIHBhZ2VcbisgKiBAbGVuOiBUaGUgcmVtYWluaW5nIGxlbmd0aCBvZiB0aGUgbWFwIHJlY29yZFxuKyAqL1xuK3N0cnVjdCBoZnNfYm1hcF9jdHgge1xuK1x0dW5zaWduZWQgaW50IHBhZ2VfaWR4O1xuK1x0dW5zaWduZWQgaW50IG9mZjtcbitcdHUxNiBsZW47XG4rfTtcbitcbisvKlxuKyAqIEZpbmRzIHRoZSBzcGVjaWZpYyBwYWdlIGNvbnRhaW5pbmcgdGhlIHJlcXVlc3RlZCBieXRlIG9mZnNldCB3aXRoaW4gdGhlIG1hcFxuKyAqIHJlY29yZC4gQXV0b21hdGljYWxseSBoYW5kbGVzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gaGVhZGVyIGFuZCBtYXAgbm9kZXMuXG4rICogUmV0dXJucyB0aGUgc3RydWN0IHBhZ2UgcG9pbnRlciwgb3IgYW4gRVJSX1BUUiBvbiBmYWlsdXJlLlxuKyAqIE5vdGU6IFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIG1hcHBpbmcvdW5tYXBwaW5nIHRoZSByZXR1cm5lZCBwYWdlLlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqaGZzX2JtYXBfZ2V0X21hcF9wYWdlKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsXG4rXHRcdFx0XHRcdCAgc3RydWN0IGhmc19ibWFwX2N0eCAqY3R4LFxuK1x0XHRcdFx0XHQgIHUzMiBieXRlX29mZnNldClcbit7XG4rXHR1MTYgcmVjX2lkeCwgb2ZmMTY7XG4rXHR1bnNpZ25lZCBpbnQgcGFnZV9vZmY7XG4rXG4rXHRpZiAobm9kZS1cdTAwM2V0aGlzID09IEhGU19UUkVFX0hFQUQpIHtcbitcdFx0aWYgKG5vZGUtXHUwMDNldHlwZSAhPSBIRlNfTk9ERV9IRUFERVIpIHtcbitcdFx0XHRwcl9lcnIoXCJoZnM6IGludmFsaWQgYnRyZWUgaGVhZGVyIG5vZGVcXG5cIik7XG4rXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XG4rXHRcdH1cbitcdFx0cmVjX2lkeCA9IEhGU19CVFJFRV9IRFJfTUFQX1JFQ19JTkRFWDtcbitcdH0gZWxzZSB7XG4rXHRcdGlmIChub2RlLVx1MDAzZXR5cGUgIT0gSEZTX05PREVfTUFQKSB7XG4rXHRcdFx0cHJfZXJyKFwiaGZzOiBpbnZhbGlkIGJ0cmVlIG1hcCBub2RlXFxuXCIpO1xuK1x0XHRcdHJldHVybiBFUlJfUFRSKC1FSU8pO1xuK1x0XHR9XG4rXHRcdHJlY19pZHggPSBIRlNfQlRSRUVfTUFQX05PREVfUkVDX0lOREVYO1xuK1x0fVxuK1xuK1x0Y3R4LVx1MDAzZWxlbiA9IGhmc19icmVjX2xlbm9mZihub2RlLCByZWNfaWR4LCBcdTAwMjZvZmYxNik7XG4rXHRpZiAoIWN0eC1cdTAwM2VsZW4pXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuK1xuK1x0aWYgKCFpc19ibm9kZV9vZmZzZXRfdmFsaWQobm9kZSwgb2ZmMTYpKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcbitcbitcdGN0eC1cdTAwM2VsZW4gPSBjaGVja19hbmRfY29ycmVjdF9yZXF1ZXN0ZWRfbGVuZ3RoKG5vZGUsIG9mZjE2LCBjdHgtXHUwMDNlbGVuKTtcbitcbitcdGlmIChieXRlX29mZnNldCBcdTAwM2U9IGN0eC1cdTAwM2VsZW4pXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuK1xuK1x0cGFnZV9vZmYgPSAodTMyKW9mZjE2ICsgbm9kZS1cdTAwM2VwYWdlX29mZnNldCArIGJ5dGVfb2Zmc2V0O1xuK1x0Y3R4LVx1MDAzZXBhZ2VfaWR4ID0gcGFnZV9vZmYgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4rXHRjdHgtXHUwMDNlb2ZmID0gcGFnZV9vZmYgXHUwMDI2IH5QQUdFX01BU0s7XG4rXG4rXHRyZXR1cm4gbm9kZS1cdTAwM2VwYWdlW2N0eC1cdTAwM2VwYWdlX2lkeF07XG4rfVxuK1xuKy8qKlxuKyAqIGhmc19ibWFwX3Rlc3RfYml0IC0gdGVzdCBhIGJpdCBpbiB0aGUgYi10cmVlIG1hcFxuKyAqIEBub2RlOiB0aGUgYi10cmVlIG5vZGUgY29udGFpbmluZyB0aGUgbWFwIHJlY29yZFxuKyAqIEBub2RlX2JpdF9pZHg6IHRoZSByZWxhdGl2ZSBiaXQgaW5kZXggd2l0aGluIHRoZSBub2RlJ3MgbWFwIHJlY29yZFxuKyAqXG4rICogUmV0dXJucyB0cnVlIGlmIHNldCwgZmFsc2UgaWYgY2xlYXIgb3Igb24gZmFpbHVyZS5cbisgKi9cbitzdGF0aWMgYm9vbCBoZnNfYm1hcF90ZXN0X2JpdChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgbm9kZV9iaXRfaWR4KVxuK3tcbitcdHN0cnVjdCBoZnNfYm1hcF9jdHggY3R4O1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4rXHR1OCAqYm1hcCwgYnl0ZSwgbWFzaztcbitcbitcdHBhZ2UgPSBoZnNfYm1hcF9nZXRfbWFwX3BhZ2Uobm9kZSwgXHUwMDI2Y3R4LCBub2RlX2JpdF9pZHggLyBCSVRTX1BFUl9CWVRFKTtcbitcdGlmIChJU19FUlIocGFnZSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGJtYXAgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4rXHRieXRlID0gYm1hcFtjdHgub2ZmXTtcbitcdGt1bm1hcF9sb2NhbChibWFwKTtcbitcbitcdG1hc2sgPSAxIFx1MDAzY1x1MDAzYyAoNyAtIChub2RlX2JpdF9pZHggJSBCSVRTX1BFUl9CWVRFKSk7XG4rXHRyZXR1cm4gKGJ5dGUgXHUwMDI2IG1hc2spICE9IDA7XG4rfVxuK1xuKy8qKlxuKyAqIGhmc19ibWFwX2NsZWFyX2JpdCAtIGNsZWFyIGEgYml0IGluIHRoZSBiLXRyZWUgbWFwXG4rICogQG5vZGU6IHRoZSBiLXRyZWUgbm9kZSBjb250YWluaW5nIHRoZSBtYXAgcmVjb3JkXG4rICogQG5vZGVfYml0X2lkeDogdGhlIHJlbGF0aXZlIGJpdCBpbmRleCB3aXRoaW4gdGhlIG5vZGUncyBtYXAgcmVjb3JkXG4rICpcbisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVJTlZBTCBpZiBhbHJlYWR5IGNsZWFyLCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlLlxuKyAqL1xuK3N0YXRpYyBpbnQgaGZzX2JtYXBfY2xlYXJfYml0KHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBub2RlX2JpdF9pZHgpXG4re1xuK1x0c3RydWN0IGhmc19ibWFwX2N0eCBjdHg7XG4rXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbitcdHU4ICpibWFwLCBtYXNrO1xuK1xuK1x0cGFnZSA9IGhmc19ibWFwX2dldF9tYXBfcGFnZShub2RlLCBcdTAwMjZjdHgsIG5vZGVfYml0X2lkeCAvIEJJVFNfUEVSX0JZVEUpO1xuK1x0aWYgKElTX0VSUihwYWdlKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIocGFnZSk7XG4rXG4rXHRibWFwID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuK1xuK1x0bWFzayA9IDEgXHUwMDNjXHUwMDNjICg3IC0gKG5vZGVfYml0X2lkeCAlIEJJVFNfUEVSX0JZVEUpKTtcbitcbitcdGlmICghKGJtYXBbY3R4Lm9mZl0gXHUwMDI2IG1hc2spKSB7XG4rXHRcdGt1bm1hcF9sb2NhbChibWFwKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRibWFwW2N0eC5vZmZdIFx1MDAyNj0gfm1hc2s7XG4rXHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcbitcdGt1bm1hcF9sb2NhbChibWFwKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiAvKiBHZXQgYSByZWZlcmVuY2UgdG8gYSBCKlRyZWUgYW5kIGRvIHNvbWUgaW5pdGlhbCBjaGVja3MgKi9cbiBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZXljbXApXG4ge1xuQEAgLTIzLDYgKzEzOCw3IEBAIHN0cnVjdCBoZnNfYnRyZWUgKmhmc19idHJlZV9vcGVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBpZCwgYnRyZWVfa2V5Y21wIGtlXG4gXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuK1x0c3RydWN0IGhmc19ibm9kZSAqbm9kZTtcbiBcdHVuc2lnbmVkIGludCBzaXplO1xuIFx0dTE2IGRibG9jaztcbiBcdHNlY3Rvcl90IHN0YXJ0X2Jsb2NrO1xuQEAgLTE1NSw2ICsyNzEsMjAgQEAgc3RydWN0IGhmc19idHJlZSAqaGZzX2J0cmVlX29wZW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGlkLCBidHJlZV9rZXljbXAga2VcbiBcdGt1bm1hcF9sb2NhbChoZWFkKTtcbiBcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHRmb2xpb19wdXQoZm9saW8pO1xuK1xuK1x0bm9kZSA9IGhmc19ibm9kZV9maW5kKHRyZWUsIEhGU19UUkVFX0hFQUQpO1xuK1x0aWYgKElTX0VSUihub2RlKSlcbitcdFx0Z290byBmcmVlX2lub2RlO1xuK1xuK1x0aWYgKCFoZnNfYm1hcF90ZXN0X2JpdChub2RlLCBIRlNfVFJFRV9IRUFEKSkge1xuK1x0XHRwcl93YXJuKFwiKCVzKTogJXMgKGNuaWQgMHgleCkgYml0bWFwIGNvcnJ1cHRlZCwgZm9yY2luZyByZG9ubHlcXG5cIixcbitcdFx0XHRzYi1cdTAwM2VzX2lkLCBpZCA9PSBIRlNfRVhUX0NOSUQgPyBcImV4dGVudHNcIiA6IFwiY2F0YWxvZ1wiLCBpZCk7XG4rXHRcdHByX3dhcm4oXCJSdW4gZnNjay5oZnMgdG8gcmVwYWlyLlxcblwiKTtcbitcdFx0c2ItXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XG4rXHR9XG4rXG4rXHRoZnNfYm5vZGVfcHV0KG5vZGUpO1xuK1xuIFx0cmV0dXJuIHRyZWU7XG4gXG4gZmFpbF9mb2xpbzpcbkBAIC0yODUsMTEgKzQxNSw5IEBAIGludCBoZnNfYm1hcF9yZXNlcnZlKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiByc3ZkX25vZGVzKVxuIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpXG4ge1xuIFx0c3RydWN0IGhmc19ibm9kZSAqbm9kZSwgKm5leHRfbm9kZTtcbi1cdHN0cnVjdCBwYWdlICoqcGFnZXA7XG4rXHRzdHJ1Y3QgaGZzX2JtYXBfY3R4IGN0eDtcbitcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0dTMyIG5pZHgsIGlkeDtcbi1cdHVuc2lnbmVkIG9mZjtcbi1cdHUxNiBvZmYxNjtcbi1cdHUxNiBsZW47XG4gXHR1OCAqZGF0YSwgYnl0ZSwgbTtcbiBcdGludCBpLCByZXM7XG4gXG5AQCAtMzAxLDI0ICs0MjksMjYgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlcbiBcdG5vZGUgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCBuaWR4KTtcbiBcdGlmIChJU19FUlIobm9kZSkpXG4gXHRcdHJldHVybiBub2RlO1xuLVx0bGVuID0gaGZzX2JyZWNfbGVub2ZmKG5vZGUsIDIsIFx1MDAyNm9mZjE2KTtcbi1cdG9mZiA9IG9mZjE2O1xuIFxuLVx0b2ZmICs9IG5vZGUtXHUwMDNlcGFnZV9vZmZzZXQ7XG4tXHRwYWdlcCA9IG5vZGUtXHUwMDNlcGFnZSArIChvZmYgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuLVx0ZGF0YSA9IGttYXBfbG9jYWxfcGFnZSgqcGFnZXApO1xuLVx0b2ZmIFx1MDAyNj0gflBBR0VfTUFTSztcbitcdHBhZ2UgPSBoZnNfYm1hcF9nZXRfbWFwX3BhZ2Uobm9kZSwgXHUwMDI2Y3R4LCAwKTtcbitcdGlmIChJU19FUlIocGFnZSkpIHtcbitcdFx0cmVzID0gUFRSX0VSUihwYWdlKTtcbitcdFx0aGZzX2Jub2RlX3B1dChub2RlKTtcbitcdFx0cmV0dXJuIEVSUl9QVFIocmVzKTtcbitcdH1cbitcbitcdGRhdGEgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRpZHggPSAwO1xuIFxuIFx0Zm9yICg7Oykge1xuLVx0XHR3aGlsZSAobGVuKSB7XG4tXHRcdFx0Ynl0ZSA9IGRhdGFbb2ZmXTtcbitcdFx0d2hpbGUgKGN0eC5sZW4pIHtcbitcdFx0XHRieXRlID0gZGF0YVtjdHgub2ZmXTtcbiBcdFx0XHRpZiAoYnl0ZSAhPSAweGZmKSB7XG4gXHRcdFx0XHRmb3IgKG0gPSAweDgwLCBpID0gMDsgaSBcdTAwM2MgODsgbSBcdTAwM2VcdTAwM2U9IDEsIGkrKykge1xuIFx0XHRcdFx0XHRpZiAoIShieXRlIFx1MDAyNiBtKSkge1xuIFx0XHRcdFx0XHRcdGlkeCArPSBpO1xuLVx0XHRcdFx0XHRcdGRhdGFbb2ZmXSB8PSBtO1xuLVx0XHRcdFx0XHRcdHNldF9wYWdlX2RpcnR5KCpwYWdlcCk7XG4rXHRcdFx0XHRcdFx0ZGF0YVtjdHgub2ZmXSB8PSBtO1xuK1x0XHRcdFx0XHRcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuIFx0XHRcdFx0XHRcdGt1bm1hcF9sb2NhbChkYXRhKTtcbiBcdFx0XHRcdFx0XHR0cmVlLVx1MDAzZWZyZWVfbm9kZXMtLTtcbiBcdFx0XHRcdFx0XHRtYXJrX2lub2RlX2RpcnR5KHRyZWUtXHUwMDNlaW5vZGUpO1xuQEAgLTMyNywxMyArNDU3LDE0IEBAIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpXG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4tXHRcdFx0aWYgKCsrb2ZmIFx1MDAzZT0gUEFHRV9TSVpFKSB7XG4rXHRcdFx0aWYgKCsrY3R4Lm9mZiBcdTAwM2U9IFBBR0VfU0laRSkge1xuIFx0XHRcdFx0a3VubWFwX2xvY2FsKGRhdGEpO1xuLVx0XHRcdFx0ZGF0YSA9IGttYXBfbG9jYWxfcGFnZSgqKytwYWdlcCk7XG4tXHRcdFx0XHRvZmYgPSAwO1xuK1x0XHRcdFx0cGFnZSA9IG5vZGUtXHUwMDNlcGFnZVsrK2N0eC5wYWdlX2lkeF07XG4rXHRcdFx0XHRkYXRhID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuK1x0XHRcdFx0Y3R4Lm9mZiA9IDA7XG4gXHRcdFx0fVxuIFx0XHRcdGlkeCArPSA4O1xuLVx0XHRcdGxlbi0tO1xuK1x0XHRcdGN0eC5sZW4tLTtcbiBcdFx0fVxuIFx0XHRrdW5tYXBfbG9jYWwoZGF0YSk7XG4gXHRcdG5pZHggPSBub2RlLVx1MDAzZW5leHQ7XG5AQCAtMzQ3LDIyICs0NzgsMjIgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlcbiBcdFx0XHRyZXR1cm4gbmV4dF9ub2RlO1xuIFx0XHRub2RlID0gbmV4dF9ub2RlO1xuIFxuLVx0XHRsZW4gPSBoZnNfYnJlY19sZW5vZmYobm9kZSwgMCwgXHUwMDI2b2ZmMTYpO1xuLVx0XHRvZmYgPSBvZmYxNjtcbi1cdFx0b2ZmICs9IG5vZGUtXHUwMDNlcGFnZV9vZmZzZXQ7XG4tXHRcdHBhZ2VwID0gbm9kZS1cdTAwM2VwYWdlICsgKG9mZiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4tXHRcdGRhdGEgPSBrbWFwX2xvY2FsX3BhZ2UoKnBhZ2VwKTtcbi1cdFx0b2ZmIFx1MDAyNj0gflBBR0VfTUFTSztcbitcdFx0cGFnZSA9IGhmc19ibWFwX2dldF9tYXBfcGFnZShub2RlLCBcdTAwMjZjdHgsIDApO1xuK1x0XHRpZiAoSVNfRVJSKHBhZ2UpKSB7XG4rXHRcdFx0cmVzID0gUFRSX0VSUihwYWdlKTtcbitcdFx0XHRoZnNfYm5vZGVfcHV0KG5vZGUpO1xuK1x0XHRcdHJldHVybiBFUlJfUFRSKHJlcyk7XG4rXHRcdH1cbitcdFx0ZGF0YSA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdH1cbiB9XG4gXG4gdm9pZCBoZnNfYm1hcF9mcmVlKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpXG4ge1xuIFx0c3RydWN0IGhmc19idHJlZSAqdHJlZTtcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0dTE2IG9mZiwgbGVuO1xuIFx0dTMyIG5pZHg7XG4tXHR1OCAqZGF0YSwgYnl0ZSwgbTtcbitcdGludCByZXM7XG4gXG4gXHRoZnNfZGJnKFwibm9kZSAldVxcblwiLCBub2RlLVx1MDAzZXRoaXMpO1xuIFx0dHJlZSA9IG5vZGUtXHUwMDNldHJlZTtcbkBAIC0zOTYsMjMgKzUyNywxOCBAQCB2b2lkIGhmc19ibWFwX2ZyZWUoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcbiBcdFx0fVxuIFx0XHRsZW4gPSBoZnNfYnJlY19sZW5vZmYobm9kZSwgMCwgXHUwMDI2b2ZmKTtcbiBcdH1cbi1cdG9mZiArPSBub2RlLVx1MDAzZXBhZ2Vfb2Zmc2V0ICsgbmlkeCAvIDg7XG4tXHRwYWdlID0gbm9kZS1cdTAwM2VwYWdlW29mZiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVF07XG4tXHRkYXRhID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuLVx0b2ZmIFx1MDAyNj0gflBBR0VfTUFTSztcbi1cdG0gPSAxIFx1MDAzY1x1MDAzYyAofm5pZHggXHUwMDI2IDcpO1xuLVx0Ynl0ZSA9IGRhdGFbb2ZmXTtcbi1cdGlmICghKGJ5dGUgXHUwMDI2IG0pKSB7XG4rXG4rXHRyZXMgPSBoZnNfYm1hcF9jbGVhcl9iaXQobm9kZSwgbmlkeCk7XG4rXHRpZiAocmVzID09IC1FSU5WQUwpIHtcbiBcdFx0cHJfY3JpdChcInRyeWluZyB0byBmcmVlIGZyZWUgYm5vZGUgJXUoJWQpXFxuXCIsXG4tXHRcdFx0bm9kZS1cdTAwM2V0aGlzLCBub2RlLVx1MDAzZXR5cGUpO1xuLVx0XHRrdW5tYXBfbG9jYWwoZGF0YSk7XG4tXHRcdGhmc19ibm9kZV9wdXQobm9kZSk7XG4tXHRcdHJldHVybjtcbitcdFx0XHRuaWR4LCBub2RlLVx1MDAzZXR5cGUpO1xuK1x0fSBlbHNlIGlmIChyZXMpIHtcbitcdFx0cHJfY3JpdChcImZhaWwgdG8gZnJlZSBibm9kZSAldSglZClcXG5cIixcbitcdFx0XHRuaWR4LCBub2RlLVx1MDAzZXR5cGUpO1xuK1x0fSBlbHNlIHtcbitcdFx0dHJlZS1cdTAwM2VmcmVlX25vZGVzKys7XG4rXHRcdG1hcmtfaW5vZGVfZGlydHkodHJlZS1cdTAwM2Vpbm9kZSk7XG4gXHR9XG4tXHRkYXRhW29mZl0gPSBieXRlIFx1MDAyNiB+bTtcbi1cdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuLVx0a3VubWFwX2xvY2FsKGRhdGEpO1xuK1xuIFx0aGZzX2Jub2RlX3B1dChub2RlKTtcbi1cdHRyZWUtXHUwMDNlZnJlZV9ub2RlcysrO1xuLVx0bWFya19pbm9kZV9kaXJ0eSh0cmVlLVx1MDAzZWlub2RlKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvaGZzL2J0cmVlLmggYi9mcy9oZnMvYnRyZWUuaFxuaW5kZXggOTliZTg1OGIyNDQ2NTAuLmI0YzNmMmEzMTQ3MTAwIDEwMDY0NFxuLS0tIGEvZnMvaGZzL2J0cmVlLmhcbisrKyBiL2ZzL2hmcy9idHJlZS5oXG5AQCAtMTI5LDMgKzEyOSw0MyBAQCBleHRlcm4gaW50IF9faGZzX2JyZWNfZmluZChzdHJ1Y3QgaGZzX2Jub2RlICpibm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKTtcbiBleHRlcm4gaW50IGhmc19icmVjX2ZpbmQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKTtcbiBleHRlcm4gaW50IGhmc19icmVjX3JlYWQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLCB2b2lkICpyZWMsIHUzMiByZWNfbGVuKTtcbiBleHRlcm4gaW50IGhmc19icmVjX2dvdG8oc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLCBpbnQgY250KTtcbitcbitzdGF0aWMgaW5saW5lIGJvb2wgaXNfYm5vZGVfb2Zmc2V0X3ZhbGlkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBvZmYpXG4re1xuK1x0Ym9vbCBpc192YWxpZDtcbitcbitcdGlmICghbm9kZSB8fCAhbm9kZS1cdTAwM2V0cmVlKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpc192YWxpZCA9IG9mZiBcdTAwM2Mgbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZTtcbitcbitcdGlmICghaXNfdmFsaWQpIHtcbitcdFx0cHJfZXJyKFwiaW52YWxpZCBvZmZzZXQ6IGlkICV1LCB0eXBlICUjeCwgaCAldSwgc3ogJXUsIG9mZiAldVxcblwiLFxuK1x0XHQgICAgICAgbm9kZS1cdTAwM2V0aGlzLCBub2RlLVx1MDAzZXR5cGUsIG5vZGUtXHUwMDNlaGVpZ2h0LFxuK1x0XHQgICAgICAgbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZSwgb2ZmKTtcbitcdH1cbitcbitcdHJldHVybiBpc192YWxpZDtcbit9XG4rXG4rc3RhdGljIGlubGluZSB1MzIgY2hlY2tfYW5kX2NvcnJlY3RfcmVxdWVzdGVkX2xlbmd0aChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgb2ZmLCB1MzIgbGVuKVxuK3tcbitcdHVuc2lnbmVkIGludCBub2RlX3NpemU7XG4rXG4rXHRpZiAoIWlzX2Jub2RlX29mZnNldF92YWxpZChub2RlLCBvZmYpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdG5vZGVfc2l6ZSA9IG5vZGUtXHUwMDNldHJlZS1cdTAwM2Vub2RlX3NpemU7XG4rXG4rXHRpZiAoKHU2NClvZmYgKyBsZW4gXHUwMDNlIG5vZGVfc2l6ZSkge1xuK1x0XHR1MzIgbmV3X2xlbiA9IG5vZGVfc2l6ZSAtIG9mZjtcbitcbitcdFx0cHJfZXJyKFwiY29ycmVjdGVkIGxlbjogaWQgJXUsIHR5cGUgJSN4LCBoICV1LCBzeiAldSwgb2ZmICV1LCBsZW4gJXUtXHUwMDNlJXVcXG5cIixcbitcdFx0ICAgICAgIG5vZGUtXHUwMDNldGhpcywgbm9kZS1cdTAwM2V0eXBlLCBub2RlLVx1MDAzZWhlaWdodCxcbitcdFx0ICAgICAgIG5vZGVfc2l6ZSwgb2ZmLCBsZW4sIG5ld19sZW4pO1xuK1xuK1x0XHRyZXR1cm4gbmV3X2xlbjtcbitcdH1cbitcbitcdHJldHVybiBsZW47XG4rfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oIGIvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmhcbmluZGV4IDQ1ZmI0YzlmZjlmNWVlLi5kNmE2MTVlNzRiMjZlMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaFxuQEAgLTUxMCwxNCArNTEwLDIxIEBAIHN0cnVjdCBoZnNfYnRyZWVfaGVhZGVyX3JlYyB7XG4gXHRcdFx0XHRcdFx0ICAgYi10cmVlIGJ1dCBub3QgaW4gZXh0ZW50c1xuIFx0XHRcdFx0XHRcdCAgIGItdHJlZSAoaGZzcGx1cykuICovXG4gXG4rLyogSEZTIEJUcmVlIG1pc2MgaW5mbyAqL1xuKyNkZWZpbmUgSEZTX1RSRUVfSEVBRFx0XHRcdFx0MFxuKyNkZWZpbmUgSEZTX0JUUkVFX0hEUl9NQVBfUkVDX0lOREVYXHRcdDJcdC8qIE1hcCAoYml0bWFwKSByZWNvcmQgaW4gSGVhZGVyIG5vZGUgKi9cbisjZGVmaW5lIEhGU19CVFJFRV9NQVBfTk9ERV9SRUNfSU5ERVhcdFx0MFx0LyogTWFwIHJlY29yZCBpbiBNYXAgTm9kZSAqL1xuK1xuIC8qIEhGUysgQlRyZWUgbWlzYyBpbmZvICovXG4tI2RlZmluZSBIRlNQTFVTX1RSRUVfSEVBRFx0XHRcdDBcbisjZGVmaW5lIEhGU1BMVVNfVFJFRV9IRUFEXHRcdFx0SEZTX1RSRUVfSEVBRFxuICNkZWZpbmUgSEZTUExVU19OT0RFX01YU1pcdFx0XHQzMjc2OFxuICNkZWZpbmUgSEZTUExVU19OT0RFX01JTlNaXHRcdFx0NTEyXG4gI2RlZmluZSBIRlNQTFVTX0FUVFJfVFJFRV9OT0RFX1NJWkVcdFx0ODE5MlxuICNkZWZpbmUgSEZTUExVU19CVFJFRV9IRFJfTk9ERV9SRUNTX0NPVU5UXHQzXG4tI2RlZmluZSBIRlNQTFVTX0JUUkVFX0hEUl9NQVBfUkVDX0lOREVYXHRcdDJcdC8qIE1hcCAoYml0bWFwKSByZWNvcmQgaW4gSGVhZGVyIG5vZGUgKi9cbi0jZGVmaW5lIEhGU1BMVVNfQlRSRUVfTUFQX05PREVfUkVDX0lOREVYXHQwXHQvKiBNYXAgcmVjb3JkIGluIE1hcCBOb2RlICovXG4rLyogTWFwIChiaXRtYXApIHJlY29yZCBpbiBIZWFkZXIgbm9kZSAqL1xuKyNkZWZpbmUgSEZTUExVU19CVFJFRV9IRFJfTUFQX1JFQ19JTkRFWFx0XHRIRlNfQlRSRUVfSERSX01BUF9SRUNfSU5ERVhcbisvKiBNYXAgcmVjb3JkIGluIE1hcCBOb2RlICovXG4rI2RlZmluZSBIRlNQTFVTX0JUUkVFX01BUF9OT0RFX1JFQ19JTkRFWFx0SEZTX0JUUkVFX01BUF9OT0RFX1JFQ19JTkRFWFxuICNkZWZpbmUgSEZTUExVU19CVFJFRV9IRFJfVVNFUl9CWVRFU1x0XHQxMjhcbiAjZGVmaW5lIEhGU1BMVVNfQlRSRUVfTUFQX05PREVfUkVDU19DT1VOVFx0MlxuICNkZWZpbmUgSEZTUExVU19CVFJFRV9NQVBfTk9ERV9SRVNFUlZFRF9CWVRFU1x0MlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTM6MTY6MDQuMDgzOTg4ODI5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE4Nzk3MTUxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBIRlMgRmlsZXN5c3RlbSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1ha2luZyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIHRoZSBIRlMgZmlsZXN5c3RlbSBkcml2ZXIuIFNwZWNpZmljYWxseSwgaXQncyB0b3VjaGluZyBjb3JlIGNvbXBvbmVudHM6IGBmcy9oZnMvYnRyZWUuY2AsIGBmcy9oZnMvYm5vZGUuY2AsIGBmcy9oZnMvYnRyZWUuaGAsIGFuZCBgaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmhgLiBUaGlzIGlzbid0IGp1c3QgYSBtaW5vciB0d2Vhazsgd2UncmUgdGFsa2luZyBhYm91dCBkaXJlY3QgbW9kaWZpY2F0aW9ucyB0byBob3cgdGhlIEhGUyBkcml2ZXIgaW50ZXJhY3RzIHdpdGggaXRzIEItdHJlZSBzdHJ1Y3R1cmUgYW5kIGJpdG1hcCBtYW5hZ2VtZW50LlxuXG5UaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb250ZXh0IHN0cnVjdHVyZSwgYHN0cnVjdCBoZnNfYm1hcF9jdHhgLCBhbmQgYSBuZXcgZnVuY3Rpb24sIGBoZnNfYm1hcF9nZXRfbWFwX3BhZ2VgLCB3aGljaCBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSBhcyBhbiBhdHRlbXB0IHRvIHNhZmVseSBtYW5hZ2UgbWVtb3J5IGFjY2VzcyB3aXRoaW4gdGhlIEItdHJlZSBjb250ZXh0LiBJdCBhbHNvIGRlZmluZXMgYGhmc19ibWFwX3Rlc3RfYml0YCBhbmQgYGhmc19ibWFwX2NsZWFyX2JpdGAsIHdoaWNoIEkgY2FuIGluZmVyIGFyZSBiaXQgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyBzcGVjaWZpY2FsbHkgdGFpbG9yZWQgZm9yIGJpdG1hcCBtYW5hZ2VtZW50LCBsaWtlbHkgcmVsYXRlZCB0byBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gd2l0aGluIHRoZSBmaWxlc3lzdGVtLiBDcml0aWNhbGx5LCBleGlzdGluZyBmdW5jdGlvbnMgbGlrZSBgaGZzX2J0cmVlX29wZW5gLCBgaGZzX2JtYXBfYWxsb2NgLCBhbmQgYGhmc19ibWFwX2ZyZWVgIGFyZSBiZWluZyB1cGRhdGVkIHRvIHVzZSB0aGVzZSBuZXcgZnVuY3Rpb25zLiBUaGlzIG1lYW5zIGEgc2lnbmlmaWNhbnQgbW9kaWZpY2F0aW9uIHRvIHRoZSBleGlzdGluZyBjb250cm9sIGZsb3cuXG5cbkdpdmVuIHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzIGFuZCB0aGUgY3JpdGljYWwgbmF0dXJlIG9mIHRoZSB0b3VjaGVkIGNvZGUsIHRoaXMgaXMgZGVmaW5pdGVseSBXb3J0aEZ1enppbmcuIEl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSBIRlMgZmlsZXN5c3RlbS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gdGFyZ2V0IGR1cmluZyBmdXp6aW5nOlxuXG4qICAgYGhmc19ibWFwX2dldF9tYXBfcGFnZWAgKHN0YXRpYylcbiogICBgaGZzX2JtYXBfdGVzdF9iaXRgIChzdGF0aWMpXG4qICAgYGhmc19ibWFwX2NsZWFyX2JpdGAgKHN0YXRpYylcbiogICBgaGZzX2J0cmVlX29wZW5gXG4qICAgYGhmc19ibWFwX2FsbG9jYFxuKiAgIGBoZnNfYm1hcF9mcmVlYFxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSwgYW5kIHdoYXQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBmcy9oZnMvYnRyZWUuY2AgYW5kIG1ha2Ugc3VyZSBpdCdzIGxpbmtlZCBpbiB0aGUgYnVpbGQuIFRoZSBuZWNlc3NhcnkgY29uZmlnIGlzIGBDT05GSUdfSEZTX0ZTYC4gSSdsbCB2ZXJpZnkgYWxsIHRoaXMgdXNpbmcgYGdyZXBwZXJgIGFzIGEgZmluYWwgY2hlY2ssIG1ha2luZyBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MjYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxMzoxNjoxMS4yNzE5NjQ0MDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM5ODA0Nzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIRlNfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2hmcy9LY29uZmlnOjI6Y29uZmlnIEhGU19GU1xcbmZzL2hmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkFwcGxlIE1hY2ludG9zaCBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxMzoxNjoxMS45MTE3Nzc4OTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Mzg5NDQ1MDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEhGUyBGaWxlc3lzdGVtIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIHRoZSBjb25maWcgaW5kaWNhdGVzIHdlJ3JlIGRlYWxpbmcgd2l0aCBgSEZTX0ZTYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4gTG9va2luZyBhdCB0aGUgbW9kaWZpZWQgZmlsZXMsIGl0J3MgY2xlYXIgdGhlc2UgY2hhbmdlcyBhcmUgd2l0aGluIHRoZSBgZnMvaGZzYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBgYm5vZGUuY2AsIGBidHJlZS5jYCwgYGJ0cmVlLmhgLCBhbmQgYGluY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oYC4gQWxsIG9mIHRoaXMgY29uZmlybXMgd2UncmUgaW5kZWVkIGZvY3VzZWQgb24gYEhGU19GU2AuXG5cbk5vdywgSSBuZWVkIHRvIGlkZW50aWZ5IGtleSBmdW5jdGlvbnMuIEkgc2VlIGBoZnNfYnRyZWVfb3BlbmAsIGBoZnNfYm1hcF9hbGxvY2AsIGFuZCBgaGZzX2JtYXBfZnJlZWAgaGF2ZSBiZWVuIHRvdWNoZWQuIExldCdzIHNlZSBpZiB0aGVzZSBhcmUgaG90LXBhdGggZnVuY3Rpb25zLCBiZWNhdXNlIHRoYXQgd291bGQgbWFrZSB0aGVtIGlkZWFsIGZvciBmdXp6aW5nLiBgaGZzX2J0cmVlX29wZW5gIGlzIGNhbGxlZCBkdXJpbmcgbW91bnQgb3Igd2hlbiBvcGVuaW5nIGEgYnRyZWUg4oCTIGRlZmluaXRlbHkgYSBnb29kIGNhbmRpZGF0ZS4gYGhmc19ibWFwX2FsbG9jYCBoYW5kbGVzIGJ0cmVlIG5vZGUgYWxsb2NhdGlvbiwgYW5kIGBoZnNfYm1hcF9mcmVlYCBkb2VzIHRoZSBvcHBvc2l0ZTogcmVsZWFzaW5nIHRob3NlIG5vZGVzLiBCb3RoIGFyZSBjb3JlIG9wZXJhdGlvbnMsIHZlcnkgZ29vZC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgYXJlIGluZGVlZCB0aGUgcmlnaHQgb25lcyB0byBmb2N1cyBvbi4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgc3RhdGljIGZ1bmN0aW9ucywgbGlrZSBgaGZzX2JtYXBfZ2V0X21hcF9wYWdlYCwgYGhmc19ibWFwX3Rlc3RfYml0YCwgYW5kIGBoZnNfYm1hcF9jbGVhcl9iaXRgLiBJdCdzIGdlbmVyYWxseSBiZXR0ZXIgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMsIGV4cG9ydGVkIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlbSwgdW5sZXNzIHRoZSBzdGF0aWNzIGFyZSBzdWJzdGFudGlhbCBpbiB0aGVpciBvd24gcmlnaHQuIEFuZCBpdCBsb29rcyBsaWtlIHRoZXNlIGFyZSBzdGF0aWMgKmFuZCogaGF2ZSBiZWVuIG1vZGlmaWVkLiBUaGV5IGFyZSBhbHNvIG5ldy4gSSBzZWUgYGhmc19idHJlZV9vcGVuYCwgYGhmc19ibWFwX2FsbG9jYCwgYW5kIGBoZnNfYm1hcF9mcmVlYCBhcmUgYWxzbyBtb2RpZmllZC4gU28sIGFsbCBvZiB0aGVzZSBhcmUgY2FuZGlkYXRlcy5cblxuU28sIGhlcmUncyB3aGF0IEknbGwgbGlzdDpcbi0gYGhmc19idHJlZV9vcGVuYFxuLSBgaGZzX2JtYXBfYWxsb2NgXG4tIGBoZnNfYm1hcF9mcmVlYFxuLSBgaGZzX2JtYXBfZ2V0X21hcF9wYWdlYFxuLSBgaGZzX2JtYXBfdGVzdF9iaXRgXG4tIGBoZnNfYm1hcF9jbGVhcl9iaXRgXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBgaGZzX2JtYXBfZ2V0X21hcF9wYWdlYCBzaG91bGQgYmUgaW4gYGZzL2hmcy9idHJlZS5jYC4gWWVwLCBpdCdzIHRoZXJlLiBBbHJpZ2h0LCB0aW1lIHRvIHNldCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY5OSwiT3V0cHV0VG9rZW5zIjoxNzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTM6MTY6MjAuMzAxMjI2MzM5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODY5Nzc2OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhmc19idHJlZV9vcGVuXCIsXG4gICAgXCJoZnNfYm1hcF9hbGxvY1wiLFxuICAgIFwiaGZzX2JtYXBfZnJlZVwiLFxuICAgIFwiaGZzX2JtYXBfZ2V0X21hcF9wYWdlXCIsXG4gICAgXCJoZnNfYm1hcF90ZXN0X2JpdFwiLFxuICAgIFwiaGZzX2JtYXBfY2xlYXJfYml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEhGUyBmaWxlc3lzdGVtJ3MgYnRyZWUgbWFwIGhhbmRsaW5nIGxvZ2ljLiBJdCBhZGRzIG5ldyBmdW5jdGlvbnMgdG8gc2FmZWx5IGdldCBtYXAgcGFnZXMsIHRlc3QgYml0cywgYW5kIGNsZWFyIGJpdHMsIGFuZCBtb2RpZmllcyBub2RlIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgdG8gdXNlIHRoZXNlIG5ldyBmdW5jdGlvbnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyB0aGUgZmlsZXN5c3RlbSBtYW5hZ2VzIGl0cyBpbnRlcm5hbCBidHJlZSBzdHJ1Y3R1cmVzLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNfYnRyZWVfb3BlblwiLFxuICAgIFwiaGZzX2JtYXBfYWxsb2NcIixcbiAgICBcImhmc19ibWFwX2ZyZWVcIixcbiAgICBcImhmc19ibWFwX2dldF9tYXBfcGFnZVwiLFxuICAgIFwiaGZzX2JtYXBfdGVzdF9iaXRcIixcbiAgICBcImhmc19ibWFwX2NsZWFyX2JpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBIRlMgZmlsZXN5c3RlbSdzIGJ0cmVlIG1hcCBoYW5kbGluZyBsb2dpYy4gSXQgYWRkcyBuZXcgZnVuY3Rpb25zIHRvIHNhZmVseSBnZXQgbWFwIHBhZ2VzLCB0ZXN0IGJpdHMsIGFuZCBjbGVhciBiaXRzLCBhbmQgbW9kaWZpZXMgbm9kZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIHRvIHVzZSB0aGVzZSBuZXcgZnVuY3Rpb25zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBob3cgdGhlIGZpbGVzeXN0ZW0gbWFuYWdlcyBpdHMgaW50ZXJuYWwgYnRyZWUgc3RydWN0dXJlcywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowqgbfl[1] Phase: Succeeded StartedAt: 2026-07-16 13:16:32 +0000 UTC FinishedAt: 2026-07-16 13:16:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqgbfl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-16 13:16:32 +0000 UTC FinishedAt: 2026-07-16 13:16:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqgbfl[2] Phase: Succeeded StartedAt: 2026-07-16 13:16:32 +0000 UTC FinishedAt: 2026-07-16 17:28:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-16 13:16:32 +0000 UTC FinishedAt: 2026-07-16 17:28:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-16 13:16:32 +0000 UTC FinishedAt: 2026-07-16 13:16:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-16 13:16:32 +0000 UTC FinishedAt: 2026-07-16 13:16:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqgbfl/series-workflowqgbfl-convert-artifact-745322145/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-16 13:16:53 +0000 UTC FinishedAt: 2026-07-16 13:50:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-16 13:16:53 +0000 UTC FinishedAt: 2026-07-16 13:50:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*23cb43b2-080b-4252-86d3-93c6b43acf3e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqgbfl/series-workflowqgbfl-convert-artifact-745322145/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "49a7b83f-a87e-4fca-889c-c3e42f39717b", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqgbfl/series-workflowqgbfl-build-action-216894927/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-16 13:16:53 +0000 UTC FinishedAt: 2026-07-16 13:50:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*23cb43b2-080b-4252-86d3-93c6b43acf3e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqgbfl/series-workflowqgbfl-convert-artifact-745322145/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "49a7b83f-a87e-4fca-889c-c3e42f39717b", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqgbfl/series-workflowqgbfl-build-action-216894927/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-16 13:50:35 +0000 UTC FinishedAt: 2026-07-16 13:50:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-16 13:50:35 +0000 UTC FinishedAt: 2026-07-16 13:50:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-16 13:50:35 +0000 UTC FinishedAt: 2026-07-16 13:50:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-16 13:50:35 +0000 UTC FinishedAt: 2026-07-16 13:50:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqgbfl/series-workflowqgbfl-convert-artifact-4192806132/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-16 13:50:45 +0000 UTC FinishedAt: 2026-07-16 13:52:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-16 13:50:45 +0000 UTC FinishedAt: 2026-07-16 13:52:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*49a7b83f-a87e-4fca-889c-c3e42f39717b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqgbfl/series-workflowqgbfl-build-action-216894927/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-16 13:52:50 +0000 UTC FinishedAt: 2026-07-16 13:52:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-16 13:52:50 +0000 UTC FinishedAt: 2026-07-16 13:52:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-16 13:52:50 +0000 UTC FinishedAt: 2026-07-16 14:21:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-16 13:52:50 +0000 UTC FinishedAt: 2026-07-16 14:21:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*23cb43b2-080b-4252-86d3-93c6b43acf3e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqgbfl/series-workflowqgbfl-convert-artifact-4192806132/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "bac394b6-4526-49c6-bf23-278febd332af", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqgbfl/series-workflowqgbfl-build-action-2921880000/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-16 13:52:50 +0000 UTC FinishedAt: 2026-07-16 14:20:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*23cb43b2-080b-4252-86d3-93c6b43acf3e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqgbfl/series-workflowqgbfl-convert-artifact-4192806132/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "bac394b6-4526-49c6-bf23-278febd332af", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqgbfl/series-workflowqgbfl-build-action-2921880000/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-16 14:21:27 +0000 UTC FinishedAt: 2026-07-16 14:21:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-16 14:21:28 +0000 UTC FinishedAt: 2026-07-16 14:21:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-16 14:21:28 +0000 UTC FinishedAt: 2026-07-16 14:23:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-16 14:21:28 +0000 UTC FinishedAt: 2026-07-16 14:23:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bac394b6-4526-49c6-bf23-278febd332af,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqgbfl/series-workflowqgbfl-build-action-2921880000/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-16 14:23:32 +0000 UTC FinishedAt: 2026-07-16 17:28:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-16 14:23:32 +0000 UTC FinishedAt: 2026-07-16 17:28:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*49a7b83f-a87e-4fca-889c-c3e42f39717b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bac394b6-4526-49c6-bf23-278febd332af,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqgbfl/series-workflowqgbfl-build-action-216894927/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqgbfl/series-workflowqgbfl-build-action-2921880000/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-16 14:23:32 +0000 UTC FinishedAt: 2026-07-16 14:23:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-16 14:23:32 +0000 UTC FinishedAt: 2026-07-16 14:23:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqgbfl/series-workflowqgbfl-convert-artifact-3655324445/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-16 14:23:32 +0000 UTC FinishedAt: 2026-07-16 14:23:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-16 14:23:32 +0000 UTC FinishedAt: 2026-07-16 14:23:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-16 14:23:32 +0000 UTC FinishedAt: 2026-07-16 14:23:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-16 14:23:42 +0000 UTC FinishedAt: 2026-07-16 17:28:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqgbfl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfs_bmap_free","hfs_bmap_get_map_page","hfs_bmap_test_bit","hfs_bmap_clear_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"309704ad-1a5f-4c4b-99de-ec545c4fadc2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-16 14:23:42 +0000 UTC FinishedAt: 2026-07-16 17:28:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*49a7b83f-a87e-4fca-889c-c3e42f39717b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bac394b6-4526-49c6-bf23-278febd332af,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqgbfl/series-workflowqgbfl-build-action-216894927/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqgbfl/series-workflowqgbfl-build-action-2921880000/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqgbfl/series-workflowqgbfl-convert-artifact-3655324445/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}