Name: series-workflowvdnnz Phase: Succeeded StartedAt: 2026-07-08 05:15:43 +0000 UTC FinishedAt: 2026-07-08 09:54:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdnnz[0] Phase: Succeeded StartedAt: 2026-07-08 05:15:43 +0000 UTC FinishedAt: 2026-07-08 05:25:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdnnz[0].run-triage Phase: Succeeded StartedAt: 2026-07-08 05:15:43 +0000 UTC FinishedAt: 2026-07-08 05:25:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "5200f5f493f79f14bbdc349e402a40dfb32f23c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AMT", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "5200f5f493f79f14bbdc349e402a40dfb32f23c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AMT", "IPV6" ], "series_id": "e57d1bfb-df25-47a7-8437-9232e7d8789b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "amt_dev_xmit", "amt_igmpv3_report_handler", "amt_mldv2_report_handler", "amt_multicast_data_handler", "amt_membership_query_handler", "amt_update_handler", "amt_rcv" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FNVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YW10X2Rldl94bWl0JiMzNDssCiAgICAmIzM0O2FtdF9pZ21wdjNfcmVwb3J0X2hhbmRsZXImIzM0OywKICAgICYjMzQ7YW10X21sZHYyX3JlcG9ydF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O2FtdF9tdWx0aWNhc3RfZGF0YV9oYW5kbGVyJiMzNDssCiAgICAmIzM0O2FtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXImIzM0OywKICAgICYjMzQ7YW10X3VwZGF0ZV9oYW5kbGVyJiMzNDssCiAgICAmIzM0O2FtdF9yY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgdXNlLWFmdGVyLWZyZWUgYW5kIGRhbmdsaW5nIHBvaW50ZXIgYnVncyBpbiB0aGUgQU1UIChBdXRvbWF0aWMgTXVsdGljYXN0IFR1bm5lbGluZykgZHJpdmVyIGNhdXNlZCBieSBgcHNrYl9tYXlfcHVsbGAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zIHJlYWxsb2NhdGluZyB0aGUgc2tiIGhlYWQgd2hpbGUgaG9sZGluZyBwb2ludGVycyB0byBuZXR3b3JrIGhlYWRlcnMuIEl0IGFsc28gYWRkcyBgc2tiX2Nvd19oZWFkYCB0byBwcmV2ZW50IG1vZGlmeWluZyBjbG9uZWQgc2ticy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgbmV0d29yayBkcml2ZXIgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGZ1cnRoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGV4aXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjI1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTNmYmY2MzU3Njk2MDlmMzRhZDljNDUwZjAxNWVlZjQ2MzY0N2M3OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMDU6MjU6MTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYW10LmMgYi9kcml2ZXJzL25ldC9hbXQuY1xuaW5kZXggZjJmMzEzOWUzOGE1OTkuLmY3Mzc1ZTQwYmM4ZjIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvYW10LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2FtdC5jXG5AQCAtMTIxMSw3ICYjNDM7MTIxMSw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhbXRfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0XHRkYXRhID0gdHJ1ZTtcbiBcdFx0fVxuIFx0XHR2NiA9IGZhbHNlO1xuLVx0XHRncm91cC5pcDQgPSBpcGgtXHUwMDNlZGFkZHI7XG4mIzQzO1x0XHRncm91cC5pcDQgPSBpcF9oZHIoc2tiKS1cdTAwM2VkYWRkcjtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiBcdH0gZWxzZSBpZiAoaXBoLVx1MDAzZXZlcnNpb24gPT0gNikge1xuIFx0XHRpcDZoID0gaXB2Nl9oZHIoc2tiKTtcbkBAIC0xMjM1LDcgJiM0MzsxMjM1LDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFtdF9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRcdGRhdGEgPSB0cnVlO1xuIFx0XHR9XG4gXHRcdHY2ID0gdHJ1ZTtcbi1cdFx0Z3JvdXAuaXA2ID0gaXA2aC1cdTAwM2VkYWRkcjtcbiYjNDM7XHRcdGdyb3VwLmlwNiA9IGlwdjZfaGRyKHNrYiktXHUwMDNlZGFkZHI7XG4gI2VuZGlmXG4gXHR9IGVsc2Uge1xuIFx0XHRkZXYtXHUwMDNlc3RhdHMudHhfZXJyb3JzJiM0MzsmIzQzOztcbkBAIC0xMjc4LDEyICYjNDM7MTI3OCwxMiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYW10X2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGdub2RlLCBcdTAwMjZ0dW5uZWwtXHUwMDNlZ3JvdXBzW2hhc2hdLFxuIFx0XHRcdFx0XHRcdCBub2RlKSB7XG4gXHRcdFx0XHRpZiAoIXY2KSB7XG4tXHRcdFx0XHRcdGlmIChnbm9kZS1cdTAwM2Vncm91cF9hZGRyLmlwNCA9PSBpcGgtXHUwMDNlZGFkZHIpXG4mIzQzO1x0XHRcdFx0XHRpZiAoZ25vZGUtXHUwMDNlZ3JvdXBfYWRkci5pcDQgPT0gZ3JvdXAuaXA0KVxuIFx0XHRcdFx0XHRcdGdvdG8gZm91bmQ7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gXHRcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0XHRpZiAoaXB2Nl9hZGRyX2VxdWFsKFx1MDAyNmdub2RlLVx1MDAzZWdyb3VwX2FkZHIuaXA2LFxuLVx0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNmlwNmgtXHUwMDNlZGFkZHIpKVxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZncm91cC5pcDYpKVxuIFx0XHRcdFx0XHRcdGdvdG8gZm91bmQ7XG4gI2VuZGlmXG4gXHRcdFx0XHR9XG5AQCAtMjAwMCwxNCAmIzQzOzIwMDAsMjIgQEAgc3RhdGljIHZvaWQgYW10X2lnbXB2M19yZXBvcnRfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGlnbXB2M19yZXBvcnQgKmlocnYzID0gaWdtcHYzX3JlcG9ydF9oZHIoc2tiKTtcbiBcdGludCBsZW4gPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICYjNDM7IHNpemVvZigqaWhydjMpO1xuIFx0dm9pZCAqemVyb19ncmVjID0gKHZvaWQgKilcdTAwMjZpZ21wdjNfemVyb19ncmVjO1xuLVx0c3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTtcbiBcdHN0cnVjdCBhbXRfZ3JvdXBfbm9kZSAqZ25vZGU7XG4gXHR1bmlvbiBhbXRfYWRkciBncm91cCwgaG9zdDtcbiBcdHN0cnVjdCBpZ21wdjNfZ3JlYyAqZ3JlYztcbiYjNDM7XHRfX2JlMzIgc2FkZHI7XG4gXHR1MTYgbnNyY3M7XG4mIzQzO1x0dTE2IG5ncmVjO1xuIFx0aW50IGk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudG9ocyhpaHJ2My1cdTAwM2VuZ3JlYyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0LyogaWhydjMgYW5kIGlwX2hkcigpIHBvaW50IGludG8gdGhlIHNrYiBoZWFkLCB3aGljaCB0aGVcbiYjNDM7XHQgKiBpcF9tY19tYXlfcHVsbCgpIGNhbGxzIGJlbG93IGNhbiByZWFsbG9jYXRlLiAgUmVhZCBldmVyeSBmaWVsZFxuJiM0MztcdCAqIHRoYXQgaXMgdXNlZCBhZnRlciBhIHB1bGwgYmVmb3JlIHRoZSBmaXJzdCBvbmUgcnVucy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzYWRkciA9IGlwX2hkcihza2IpLVx1MDAzZXNhZGRyO1xuJiM0MztcdG5ncmVjID0gbnRvaHMoaWhydjMtXHUwMDNlbmdyZWMpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuZ3JlYzsgaSYjNDM7JiM0MzspIHtcbiBcdFx0bGVuICYjNDM7PSBzaXplb2YoKmdyZWMpO1xuIFx0XHRpZiAoIWlwX21jX21heV9wdWxsKHNrYiwgbGVuKSlcbiBcdFx0XHRicmVhaztcbkBAIC0yMDE5LDEwICYjNDM7MjAyNywxNCBAQCBzdGF0aWMgdm9pZCBhbXRfaWdtcHYzX3JlcG9ydF9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGlmICghaXBfbWNfbWF5X3B1bGwoc2tiLCBsZW4pKVxuIFx0XHRcdGJyZWFrO1xuIFxuJiM0MztcdFx0LyogaXBfbWNfbWF5X3B1bGwoKSBtYXkgaGF2ZSByZWFsbG9jYXRlZCB0aGUgaGVhZC4gKi9cbiYjNDM7XHRcdGdyZWMgPSAodm9pZCAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyBsZW4gLSBzaXplb2YoKmdyZWMpIC1cbiYjNDM7XHRcdFx0XHRuc3JjcyAqIHNpemVvZihfX2JlMzIpKTtcbiYjNDM7XG4gXHRcdG1lbXNldChcdTAwMjZncm91cCwgMCwgc2l6ZW9mKHVuaW9uIGFtdF9hZGRyKSk7XG4gXHRcdGdyb3VwLmlwNCA9IGdyZWMtXHUwMDNlZ3JlY19tY2E7XG4gXHRcdG1lbXNldChcdTAwMjZob3N0LCAwLCBzaXplb2YodW5pb24gYW10X2FkZHIpKTtcbi1cdFx0aG9zdC5pcDQgPSBpcGgtXHUwMDNlc2FkZHI7XG4mIzQzO1x0XHRob3N0LmlwNCA9IHNhZGRyO1xuIFx0XHRnbm9kZSA9IGFtdF9sb29rdXBfZ3JvdXAodHVubmVsLCBcdTAwMjZncm91cCwgXHUwMDI2aG9zdCwgZmFsc2UpO1xuIFx0XHRpZiAoIWdub2RlKSB7XG4gXHRcdFx0Z25vZGUgPSBhbXRfYWRkX2dyb3VwKGFtdCwgdHVubmVsLCBcdTAwMjZncm91cCwgXHUwMDI2aG9zdCxcbkBAIC0yMTYyLDE0ICYjNDM7MjE3NCwyMiBAQCBzdGF0aWMgdm9pZCBhbXRfbWxkdjJfcmVwb3J0X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBtbGQyX3JlcG9ydCAqbWxkMnIgPSAoc3RydWN0IG1sZDJfcmVwb3J0ICopaWNtcDZfaGRyKHNrYik7XG4gXHRpbnQgbGVuID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSAmIzQzOyBzaXplb2YoKm1sZDJyKTtcbiBcdHZvaWQgKnplcm9fZ3JlYyA9ICh2b2lkICopXHUwMDI2bWxkdjJfemVyb19ncmVjO1xuLVx0c3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpO1xuIFx0c3RydWN0IGFtdF9ncm91cF9ub2RlICpnbm9kZTtcbiBcdHVuaW9uIGFtdF9hZGRyIGdyb3VwLCBob3N0O1xuIFx0c3RydWN0IG1sZDJfZ3JlYyAqZ3JlYztcbiYjNDM7XHRzdHJ1Y3QgaW42X2FkZHIgc2FkZHI7XG4gXHR1MTYgbnNyY3M7XG4mIzQzO1x0dTE2IG5ncmVjO1xuIFx0aW50IGk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudG9ocyhtbGQyci1cdTAwM2VtbGQycl9uZ3JlYyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0LyogbWxkMnIgYW5kIGlwdjZfaGRyKCkgcG9pbnQgaW50byB0aGUgc2tiIGhlYWQsIHdoaWNoIHRoZVxuJiM0MztcdCAqIGlwdjZfbWNfbWF5X3B1bGwoKSBjYWxscyBiZWxvdyBjYW4gcmVhbGxvY2F0ZS4gIFJlYWQgZXZlcnkgZmllbGRcbiYjNDM7XHQgKiB0aGF0IGlzIHVzZWQgYWZ0ZXIgYSBwdWxsIGJlZm9yZSB0aGUgZmlyc3Qgb25lIHJ1bnMuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2FkZHIgPSBpcHY2X2hkcihza2IpLVx1MDAzZXNhZGRyO1xuJiM0MztcdG5ncmVjID0gbnRvaHMobWxkMnItXHUwMDNlbWxkMnJfbmdyZWMpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuZ3JlYzsgaSYjNDM7JiM0MzspIHtcbiBcdFx0bGVuICYjNDM7PSBzaXplb2YoKmdyZWMpO1xuIFx0XHRpZiAoIWlwdjZfbWNfbWF5X3B1bGwoc2tiLCBsZW4pKVxuIFx0XHRcdGJyZWFrO1xuQEAgLTIxODEsMTAgJiM0MzsyMjAxLDE0IEBAIHN0YXRpYyB2b2lkIGFtdF9tbGR2Ml9yZXBvcnRfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRpZiAoIWlwdjZfbWNfbWF5X3B1bGwoc2tiLCBsZW4pKVxuIFx0XHRcdGJyZWFrO1xuIFxuJiM0MztcdFx0LyogaXB2Nl9tY19tYXlfcHVsbCgpIG1heSBoYXZlIHJlYWxsb2NhdGVkIHRoZSBoZWFkLiAqL1xuJiM0MztcdFx0Z3JlYyA9ICh2b2lkICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IGxlbiAtIHNpemVvZigqZ3JlYykgLVxuJiM0MztcdFx0XHRcdG5zcmNzICogc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpO1xuJiM0MztcbiBcdFx0bWVtc2V0KFx1MDAyNmdyb3VwLCAwLCBzaXplb2YodW5pb24gYW10X2FkZHIpKTtcbiBcdFx0Z3JvdXAuaXA2ID0gZ3JlYy1cdTAwM2VncmVjX21jYTtcbiBcdFx0bWVtc2V0KFx1MDAyNmhvc3QsIDAsIHNpemVvZih1bmlvbiBhbXRfYWRkcikpO1xuLVx0XHRob3N0LmlwNiA9IGlwNmgtXHUwMDNlc2FkZHI7XG4mIzQzO1x0XHRob3N0LmlwNiA9IHNhZGRyO1xuIFx0XHRnbm9kZSA9IGFtdF9sb29rdXBfZ3JvdXAodHVubmVsLCBcdTAwMjZncm91cCwgXHUwMDI2aG9zdCwgdHJ1ZSk7XG4gXHRcdGlmICghZ25vZGUpIHtcbiBcdFx0XHRnbm9kZSA9IGFtdF9hZGRfZ3JvdXAoYW10LCB0dW5uZWwsIFx1MDAyNmdyb3VwLCBcdTAwMjZob3N0LFxuQEAgLTIzMDUsNyAmIzQzOzIzMjksMTIgQEAgc3RhdGljIGJvb2wgYW10X211bHRpY2FzdF9kYXRhX2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpldGgpKTtcbiBcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4gXHRza2JfcHVsbChza2IsIHNpemVvZigqZXRoKSk7XG4tXHRldGggPSBldGhfaGRyKHNrYik7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBMMiBoZWFkZXIgaXMgcmV3cml0dGVuIGJlbG93OyBtYWtlIHRoZSBoZWFkIHByaXZhdGUgZmlyc3Qgc28gYVxuJiM0MztcdCAqIGNsb25lZCBza2IgKGZvciBleGFtcGxlIG9uZSB0YWtlbiBieSBhIHBhY2tldCB0YXApIGlzIG5vdCBtb2RpZmllZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMCkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqaXBoKSkpXG4gXHRcdHJldHVybiB0cnVlO1xuQEAgLTIzMTUsNiAmIzQzOzIzNDQsOCBAQCBzdGF0aWMgYm9vbCBhbXRfbXVsdGljYXN0X2RhdGFfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRpZiAoIWlwdjRfaXNfbXVsdGljYXN0KGlwaC1cdTAwM2VkYWRkcikpXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTtcbiYjNDM7XHRcdC8qIHBza2JfbWF5X3B1bGwoKSBhYm92ZSBtYXkgaGF2ZSByZWFsbG9jYXRlZCB0aGUgaGVhZC4gKi9cbiYjNDM7XHRcdGV0aCA9IGV0aF9oZHIoc2tiKTtcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XG4gXHRcdGlwX2V0aF9tY19tYXAoaXBoLVx1MDAzZWRhZGRyLCBldGgtXHUwMDNlaF9kZXN0KTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbkBAIC0yMzI4LDYgJiM0MzsyMzU5LDggQEAgc3RhdGljIGJvb2wgYW10X211bHRpY2FzdF9kYXRhX2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0aWYgKCFpcHY2X2FkZHJfaXNfbXVsdGljYXN0KFx1MDAyNmlwNmgtXHUwMDNlZGFkZHIpKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTtcbiYjNDM7XHRcdC8qIHBza2JfbWF5X3B1bGwoKSBhYm92ZSBtYXkgaGF2ZSByZWFsbG9jYXRlZCB0aGUgaGVhZC4gKi9cbiYjNDM7XHRcdGV0aCA9IGV0aF9oZHIoc2tiKTtcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcbiBcdFx0aXB2Nl9ldGhfbWNfbWFwKFx1MDAyNmlwNmgtXHUwMDNlZGFkZHIsIGV0aC1cdTAwM2VoX2Rlc3QpO1xuICNlbmRpZlxuQEAgLTIzNTMsOCAmIzQzOzIzODYsMTAgQEAgc3RhdGljIGJvb2wgYW10X21lbWJlcnNoaXBfcXVlcnlfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LFxuIFx0c3RydWN0IGFtdF9oZWFkZXJfbWVtYmVyc2hpcF9xdWVyeSAqYW10bXE7XG4gXHRzdHJ1Y3QgaWdtcHYzX3F1ZXJ5ICppaHYzO1xuIFx0c3RydWN0IGV0aGhkciAqZXRoLCAqb2V0aDtcbiYjNDM7XHR1OCBoX3NvdXJjZVtFVEhfQUxFTl07XG4gXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbiBcdGludCBoZHJfc2l6ZSwgbGVuO1xuJiM0MztcdHU2NCByZXNwb25zZV9tYWM7XG4gXG4gXHRoZHJfc2l6ZSA9IHNpemVvZigqYW10bXEpICYjNDM7IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcbiBcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGhkcl9zaXplKSlcbkBAIC0yMzY3LDYgJiM0MzsyNDAyLDEyIEBAIHN0YXRpYyBib29sIGFtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCxcbiBcdGlmIChhbXRtcS1cdTAwM2Vub25jZSAhPSBhbXQtXHUwMDNlbm9uY2UpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuJiM0MztcdC8qIGlwdHVubmVsX3B1bGxfaGVhZGVyKCkgYW5kIHRoZSBwc2tiX21heV9wdWxsKCkgY2FsbHMgYmVsb3cgY2FuXG4mIzQzO1x0ICogcmVhbGxvY2F0ZSB0aGUgc2tiIGhlYWQsIHNvIGFtdG1xIHdvdWxkIGRhbmdsZS4gIFNuYXBzaG90IHRoZSBvbmx5XG4mIzQzO1x0ICogZmllbGQgdXNlZCBhZnRlcndhcmRzLlxuJiM0MztcdCAqL1xuJiM0MztcdHJlc3BvbnNlX21hYyA9IGFtdG1xLVx1MDAzZXJlc3BvbnNlX21hYztcbiYjNDM7XG4gXHRoZHJfc2l6ZSAtPSBzaXplb2YoKmV0aCk7XG4gXHRpZiAoaXB0dW5uZWxfcHVsbF9oZWFkZXIoc2tiLCBoZHJfc2l6ZSwgaHRvbnMoRVRIX1BfVEVCKSwgZmFsc2UpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbkBAIC0yMzc2LDYgJiM0MzsyNDE3LDEzIEBAIHN0YXRpYyBib29sIGFtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCxcbiBcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpldGgpKTtcbiBcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuIFx0ZXRoID0gZXRoX2hkcihza2IpO1xuJiM0MztcdC8qIFNuYXBzaG90IHRoZSBvdXRlciBzb3VyY2UgTUFDIGJlZm9yZSBhIGxhdGVyIHB1bGwgY2FuIGZyZWUgaXQuICovXG4mIzQzO1x0ZXRoZXJfYWRkcl9jb3B5KGhfc291cmNlLCBvZXRoLVx1MDAzZWhfc291cmNlKTtcbiYjNDM7XHQvKiBUaGUgTDIgaGVhZGVyIGlzIHJld3JpdHRlbiBiZWxvdzsgbWFrZSB0aGUgaGVhZCBwcml2YXRlIGZpcnN0IHNvIGFcbiYjNDM7XHQgKiBjbG9uZWQgc2tiIChmb3IgZXhhbXBsZSBvbmUgdGFrZW4gYnkgYSBwYWNrZXQgdGFwKSBpcyBub3QgbW9kaWZpZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNrYl9jb3dfaGVhZChza2IsIDApKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4gXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwaCkpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbkBAIC0yMzg4LDYgJiM0MzsyNDM2LDggQEAgc3RhdGljIGJvb2wgYW10X21lbWJlcnNoaXBfcXVlcnlfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LFxuIFx0XHRcdFx0ICAgc2l6ZW9mKCppaHYzKSkpXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXG4mIzQzO1x0XHQvKiBwc2tiX21heV9wdWxsKCkgYWJvdmUgbWF5IGhhdmUgcmVhbGxvY2F0ZWQgdGhlIGhlYWQuICovXG4mIzQzO1x0XHRpcGggPSBpcF9oZHIoc2tiKTtcbiBcdFx0aWYgKCFpcHY0X2lzX211bHRpY2FzdChpcGgtXHUwMDNlZGFkZHIpKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFxuQEAgLTIzOTUsMTAgJiM0MzsyNDQ1LDExIEBAIHN0YXRpYyBib29sIGFtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCxcbiBcdFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiBcdFx0c2tiX3B1c2goc2tiLCBzaXplb2YoKmlwaCkgJiM0MzsgQU1UX0lQSERSX09QVFMpO1xuIFx0XHRXUklURV9PTkNFKGFtdC1cdTAwM2VyZWFkeTQsIHRydWUpO1xuLVx0XHRhbXQtXHUwMDNlbWFjID0gYW10bXEtXHUwMDNlcmVzcG9uc2VfbWFjO1xuJiM0MztcdFx0YW10LVx1MDAzZW1hYyA9IHJlc3BvbnNlX21hYztcbiBcdFx0YW10LVx1MDAzZXJlcV9jbnQgPSAwO1xuIFx0XHRhbXQtXHUwMDNlcWkgPSBpaHYzLVx1MDAzZXFxaWM7XG4gXHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTtcbiYjNDM7XHRcdGV0aCA9IGV0aF9oZHIoc2tiKTtcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XG4gXHRcdGlwX2V0aF9tY19tYXAoaXBoLVx1MDAzZWRhZGRyLCBldGgtXHUwMDNlaF9kZXN0KTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbkBAIC0yNDIxLDEwICYjNDM7MjQ3MiwxMSBAQCBzdGF0aWMgYm9vbCBhbXRfbWVtYmVyc2hpcF9xdWVyeV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsXG4gXHRcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gXHRcdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCppcDZoKSAmIzQzOyBBTVRfSVA2SERSX09QVFMpO1xuIFx0XHRXUklURV9PTkNFKGFtdC1cdTAwM2VyZWFkeTYsIHRydWUpO1xuLVx0XHRhbXQtXHUwMDNlbWFjID0gYW10bXEtXHUwMDNlcmVzcG9uc2VfbWFjO1xuJiM0MztcdFx0YW10LVx1MDAzZW1hYyA9IHJlc3BvbnNlX21hYztcbiBcdFx0YW10LVx1MDAzZXJlcV9jbnQgPSAwO1xuIFx0XHRhbXQtXHUwMDNlcWkgPSBtbGQycS1cdTAwM2VtbGQycV9xcWljO1xuIFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTtcbiYjNDM7XHRcdGV0aCA9IGV0aF9oZHIoc2tiKTtcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcbiBcdFx0aXB2Nl9ldGhfbWNfbWFwKFx1MDAyNmlwNmgtXHUwMDNlZGFkZHIsIGV0aC1cdTAwM2VoX2Rlc3QpO1xuICNlbmRpZlxuQEAgLTI0MzIsNyAmIzQzOzI0ODQsNyBAQCBzdGF0aWMgYm9vbCBhbXRfbWVtYmVyc2hpcF9xdWVyeV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuLVx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cdTAwM2VoX3NvdXJjZSwgb2V0aC1cdTAwM2VoX3NvdXJjZSk7XG4mIzQzO1x0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cdTAwM2VoX3NvdXJjZSwgaF9zb3VyY2UpO1xuIFx0c2tiLVx1MDAzZXBrdF90eXBlID0gUEFDS0VUX01VTFRJQ0FTVDtcbiBcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FO1xuIFx0bGVuID0gc2tiLVx1MDAzZWxlbjtcbkBAIC0yNDU1LDggJiM0MzsyNTA3LDEzIEBAIHN0YXRpYyBib29sIGFtdF91cGRhdGVfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c3RydWN0IGV0aGhkciAqZXRoO1xuIFx0c3RydWN0IGlwaGRyICppcGg7XG4gXHRpbnQgbGVuLCBoZHJfc2l6ZTtcbiYjNDM7XHRfX2JlMzIgc2FkZHI7XG4gXG4tXHRpcGggPSBpcF9oZHIoc2tiKTtcbiYjNDM7XHQvKiBpcF9oZHIoKSBwb2ludHMgaW50byB0aGUgc2tiIGhlYWQsIHdoaWNoIHRoZSBwc2tiX21heV9wdWxsKCkgL1xuJiM0MztcdCAqIGlwdHVubmVsX3B1bGxfaGVhZGVyKCkgY2FsbHMgYmVsb3cgY2FuIHJlYWxsb2NhdGUuICBTbmFwc2hvdCB0aGVcbiYjNDM7XHQgKiBzb3VyY2UgYWRkcmVzcyB1c2VkIGZvciB0aGUgdHVubmVsIGxvb2t1cCBiZWZvcmUgdGhlIGZpcnN0IHB1bGwuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2FkZHIgPSBpcF9oZHIoc2tiKS1cdTAwM2VzYWRkcjtcbiBcbiBcdGhkcl9zaXplID0gc2l6ZW9mKCphbXRtdSkgJiM0Mzsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuIFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGRyX3NpemUpKVxuQEAgLTI0NzIsNyAmIzQzOzI1MjksNyBAQCBzdGF0aWMgYm9vbCBhbXRfdXBkYXRlX2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodHVubmVsLCBcdTAwMjZhbXQtXHUwMDNldHVubmVsX2xpc3QsIGxpc3QpIHtcbi1cdFx0aWYgKHR1bm5lbC1cdTAwM2VpcDQgPT0gaXBoLVx1MDAzZXNhZGRyKSB7XG4mIzQzO1x0XHRpZiAodHVubmVsLVx1MDAzZWlwNCA9PSBzYWRkcikge1xuIFx0XHRcdGlmICgoYW10bXUtXHUwMDNlbm9uY2UgPT0gdHVubmVsLVx1MDAzZW5vbmNlIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICAgYW10bXUtXHUwMDNlcmVzcG9uc2VfbWFjID09IHR1bm5lbC1cdTAwM2VtYWMpKSB7XG4gXHRcdFx0XHRtb2RfZGVsYXllZF93b3JrKGFtdF93cSwgXHUwMDI2dHVubmVsLVx1MDAzZWdjX3dxLFxuQEAgLTI0OTIsNiAmIzQzOzI1NDksMTIgQEAgc3RhdGljIGJvb2wgYW10X3VwZGF0ZV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwaCkpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiYjNDM7XHQvKiBUaGUgTDIgaGVhZGVyIGlzIHJld3JpdHRlbiBiZWxvdzsgbWFrZSB0aGUgaGVhZCBwcml2YXRlIGZpcnN0IHNvIGFcbiYjNDM7XHQgKiBjbG9uZWQgc2tiIChmb3IgZXhhbXBsZSBvbmUgdGFrZW4gYnkgYSBwYWNrZXQgdGFwKSBpcyBub3QgbW9kaWZpZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNrYl9jb3dfaGVhZChza2IsIDApKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuIFx0aXBoID0gaXBfaGRyKHNrYik7XG4gXHRpZiAoaXBoLVx1MDAzZXZlcnNpb24gPT0gNCkge1xuIFx0XHRpZiAoaXBfbWNfY2hlY2tfaWdtcChza2IpKSB7XG5AQCAtMjUwOCw2ICYjNDM7MjU3MSwxMCBAQCBzdGF0aWMgYm9vbCBhbXRfdXBkYXRlX2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0ZXRoID0gZXRoX2hkcihza2IpO1xuIFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XG4gXHRcdGV0aC1cdTAwM2VoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVApO1xuJiM0MztcdFx0LyogaXBfbWNfY2hlY2tfaWdtcCgpIGFuZCB0aGUgcmVwb3J0IGhhbmRsZXIgbWF5IGhhdmVcbiYjNDM7XHRcdCAqIHJlYWxsb2NhdGVkIHRoZSBoZWFkOyByZS1kZXJpdmUgaXBoLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpcGggPSBpcF9oZHIoc2tiKTtcbiBcdFx0aXBfZXRoX21jX21hcChpcGgtXHUwMDNlZGFkZHIsIGV0aC1cdTAwM2VoX2Rlc3QpO1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuIFx0fSBlbHNlIGlmIChpcGgtXHUwMDNldmVyc2lvbiA9PSA2KSB7XG5AQCAtMjUyNyw2ICYjNDM7MjU5NCwxMCBAQCBzdGF0aWMgYm9vbCBhbXRfdXBkYXRlX2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0ZXRoID0gZXRoX2hkcihza2IpO1xuIFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTtcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcbiYjNDM7XHRcdC8qIGlwdjZfbWNfY2hlY2tfbWxkKCkgYW5kIHRoZSByZXBvcnQgaGFuZGxlciBtYXkgaGF2ZVxuJiM0MztcdFx0ICogcmVhbGxvY2F0ZWQgdGhlIGhlYWQ7IHJlLWRlcml2ZSBpcDZoLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpcDZoID0gaXB2Nl9oZHIoc2tiKTtcbiBcdFx0aXB2Nl9ldGhfbWNfbWFwKFx1MDAyNmlwNmgtXHUwMDNlZGFkZHIsIGV0aC1cdTAwM2VoX2Rlc3QpO1xuICNlbmRpZlxuIFx0fSBlbHNlIHtcbkBAIC0yNzcyLDcgJiM0MzsyODQzLDcgQEAgc3RhdGljIHZvaWQgYW10X2d3X3JjdihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHN0YXRpYyBpbnQgYW10X3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IGFtdF9kZXYgKmFtdDtcbi1cdHN0cnVjdCBpcGhkciAqaXBoO1xuJiM0MztcdF9fYmUzMiBzYWRkcjtcbiBcdGludCB0eXBlO1xuIFx0Ym9vbCBlcnI7XG4gXG5AQCAtMjc4NSw3ICYjNDM7Mjg1NiwxMSBAQCBzdGF0aWMgaW50IGFtdF9yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0fVxuIFxuIFx0c2tiLVx1MDAzZWRldiA9IGFtdC1cdTAwM2VkZXY7XG4tXHRpcGggPSBpcF9oZHIoc2tiKTtcbiYjNDM7XHQvKiBhbXRfcGFyc2VfdHlwZSgpIGNhbGxzIHBza2JfbWF5X3B1bGwoKSwgd2hpY2ggY2FuIHJlYWxsb2NhdGUgdGhlXG4mIzQzO1x0ICogc2tiIGhlYWQgYW5kIGxlYXZlIGEgY2FjaGVkIGlwX2hkcigpIGRhbmdsaW5nLiAgU25hcHNob3QgdGhlIHNvdXJjZVxuJiM0MztcdCAqIGFkZHJlc3MgdXNlZCBiZWxvdyBiZWZvcmUgdGhlIHB1bGwuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2FkZHIgPSBpcF9oZHIoc2tiKS1cdTAwM2VzYWRkcjtcbiBcdHR5cGUgPSBhbXRfcGFyc2VfdHlwZShza2IpO1xuIFx0aWYgKHR5cGUgPT0gLTEpIHtcbiBcdFx0ZXJyID0gdHJ1ZTtcbkBAIC0yNzk1LDcgJiM0MzsyODcwLDcgQEAgc3RhdGljIGludCBhbXRfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlmIChhbXQtXHUwMDNlbW9kZSA9PSBBTVRfTU9ERV9HQVRFV0FZKSB7XG4gXHRcdHN3aXRjaCAodHlwZSkge1xuIFx0XHRjYXNlIEFNVF9NU0dfQURWRVJUSVNFTUVOVDpcbi1cdFx0XHRpZiAoaXBoLVx1MDAzZXNhZGRyICE9IGFtdC1cdTAwM2VkaXNjb3ZlcnlfaXApIHtcbiYjNDM7XHRcdFx0aWYgKHNhZGRyICE9IGFtdC1cdTAwM2VkaXNjb3ZlcnlfaXApIHtcbiBcdFx0XHRcdG5ldGRldl9kYmcoYW10LVx1MDAzZWRldiwgXCYjMzQ7SW52YWxpZCBSZWxheSBJUFxcblwmIzM0Oyk7XG4gXHRcdFx0XHRlcnIgPSB0cnVlO1xuIFx0XHRcdFx0Z290byBkcm9wO1xuQEAgLTI4MDcsNyAmIzQzOzI4ODIsNyBAQCBzdGF0aWMgaW50IGFtdF9yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdH1cbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0Y2FzZSBBTVRfTVNHX01VTFRJQ0FTVF9EQVRBOlxuLVx0XHRcdGlmIChpcGgtXHUwMDNlc2FkZHIgIT0gYW10LVx1MDAzZXJlbW90ZV9pcCkge1xuJiM0MztcdFx0XHRpZiAoc2FkZHIgIT0gYW10LVx1MDAzZXJlbW90ZV9pcCkge1xuIFx0XHRcdFx0bmV0ZGV2X2RiZyhhbXQtXHUwMDNlZGV2LCBcJiMzNDtJbnZhbGlkIFJlbGF5IElQXFxuXCYjMzQ7KTtcbiBcdFx0XHRcdGVyciA9IHRydWU7XG4gXHRcdFx0XHRnb3RvIGRyb3A7XG5AQCAtMjgxOCw3ICYjNDM7Mjg5Myw3IEBAIHN0YXRpYyBpbnQgYW10X3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0Z290byBvdXQ7XG4gXHRcdGNhc2UgQU1UX01TR19NRU1CRVJTSElQX1FVRVJZOlxuLVx0XHRcdGlmIChpcGgtXHUwMDNlc2FkZHIgIT0gYW10LVx1MDAzZXJlbW90ZV9pcCkge1xuJiM0MztcdFx0XHRpZiAoc2FkZHIgIT0gYW10LVx1MDAzZXJlbW90ZV9pcCkge1xuIFx0XHRcdFx0bmV0ZGV2X2RiZyhhbXQtXHUwMDNlZGV2LCBcJiMzNDtJbnZhbGlkIFJlbGF5IElQXFxuXCYjMzQ7KTtcbiBcdFx0XHRcdGVyciA9IHRydWU7XG4gXHRcdFx0XHRnb3RvIGRyb3A7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDU6MjU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QU1UJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbXRfZGV2X3htaXQmIzM0OywKICAgICYjMzQ7YW10X2lnbXB2M19yZXBvcnRfaGFuZGxlciYjMzQ7LAogICAgJiMzNDthbXRfbWxkdjJfcmVwb3J0X2hhbmRsZXImIzM0OywKICAgICYjMzQ7YW10X211bHRpY2FzdF9kYXRhX2hhbmRsZXImIzM0OywKICAgICYjMzQ7YW10X21lbWJlcnNoaXBfcXVlcnlfaGFuZGxlciYjMzQ7LAogICAgJiMzNDthbXRfdXBkYXRlX2hhbmRsZXImIzM0OywKICAgICYjMzQ7YW10X3JjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBtdWx0aXBsZSB1c2UtYWZ0ZXItZnJlZSBhbmQgZGFuZ2xpbmcgcG9pbnRlciBidWdzIGluIHRoZSBBTVQgKEF1dG9tYXRpYyBNdWx0aWNhc3QgVHVubmVsaW5nKSBkcml2ZXIgY2F1c2VkIGJ5IGBwc2tiX21heV9wdWxsYCBhbmQgc2ltaWxhciBmdW5jdGlvbnMgcmVhbGxvY2F0aW5nIHRoZSBza2IgaGVhZCB3aGlsZSBob2xkaW5nIHBvaW50ZXJzIHRvIG5ldHdvcmsgaGVhZGVycy4gSXQgYWxzbyBhZGRzIGBza2JfY293X2hlYWRgIHRvIHByZXZlbnQgbW9kaWZ5aW5nIGNsb25lZCBza2JzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBuZXR3b3JrIGRyaXZlciBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gZnVydGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgZXhpc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUzZmJmNjM1NzY5NjA5ZjM0YWQ5YzQ1MGYwMTVlZWY0NjM2NDdjNzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCA4IDA1OjI1OjExIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYW10LmMgYi9kcml2ZXJzL25ldC9hbXQuYwppbmRleCBmMmYzMTM5ZTM4YTU5OS4uZjczNzVlNDBiYzhmMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FtdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2FtdC5jCkBAIC0xMjExLDcgJiM0MzsxMjExLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFtdF9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCQkJZGF0YSA9IHRydWU7CiAJCX0KIAkJdjYgPSBmYWxzZTsKLQkJZ3JvdXAuaXA0ID0gaXBoLSZndDtkYWRkcjsKJiM0MzsJCWdyb3VwLmlwNCA9IGlwX2hkcihza2IpLSZndDtkYWRkcjsKICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQogCX0gZWxzZSBpZiAoaXBoLSZndDt2ZXJzaW9uID09IDYpIHsKIAkJaXA2aCA9IGlwdjZfaGRyKHNrYik7CkBAIC0xMjM1LDcgJiM0MzsxMjM1LDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFtdF9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCQkJZGF0YSA9IHRydWU7CiAJCX0KIAkJdjYgPSB0cnVlOwotCQlncm91cC5pcDYgPSBpcDZoLSZndDtkYWRkcjsKJiM0MzsJCWdyb3VwLmlwNiA9IGlwdjZfaGRyKHNrYiktJmd0O2RhZGRyOwogI2VuZGlmCiAJfSBlbHNlIHsKIAkJZGV2LSZndDtzdGF0cy50eF9lcnJvcnMmIzQzOyYjNDM7OwpAQCAtMTI3OCwxMiAmIzQzOzEyNzgsMTIgQEAgc3RhdGljIG5ldGRldl90eF90IGFtdF9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGdub2RlLCAmYW1wO3R1bm5lbC0mZ3Q7Z3JvdXBzW2hhc2hdLAogCQkJCQkJIG5vZGUpIHsKIAkJCQlpZiAoIXY2KSB7Ci0JCQkJCWlmIChnbm9kZS0mZ3Q7Z3JvdXBfYWRkci5pcDQgPT0gaXBoLSZndDtkYWRkcikKJiM0MzsJCQkJCWlmIChnbm9kZS0mZ3Q7Z3JvdXBfYWRkci5pcDQgPT0gZ3JvdXAuaXA0KQogCQkJCQkJZ290byBmb3VuZDsKICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQogCQkJCX0gZWxzZSB7CiAJCQkJCWlmIChpcHY2X2FkZHJfZXF1YWwoJmFtcDtnbm9kZS0mZ3Q7Z3JvdXBfYWRkci5pcDYsCi0JCQkJCQkJICAgICZhbXA7aXA2aC0mZ3Q7ZGFkZHIpKQomIzQzOwkJCQkJCQkgICAgJmFtcDtncm91cC5pcDYpKQogCQkJCQkJZ290byBmb3VuZDsKICNlbmRpZgogCQkJCX0KQEAgLTIwMDAsMTQgJiM0MzsyMDAwLDIyIEBAIHN0YXRpYyB2b2lkIGFtdF9pZ21wdjNfcmVwb3J0X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3QgaWdtcHYzX3JlcG9ydCAqaWhydjMgPSBpZ21wdjNfcmVwb3J0X2hkcihza2IpOwogCWludCBsZW4gPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICYjNDM7IHNpemVvZigqaWhydjMpOwogCXZvaWQgKnplcm9fZ3JlYyA9ICh2b2lkICopJmFtcDtpZ21wdjNfemVyb19ncmVjOwotCXN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7CiAJc3RydWN0IGFtdF9ncm91cF9ub2RlICpnbm9kZTsKIAl1bmlvbiBhbXRfYWRkciBncm91cCwgaG9zdDsKIAlzdHJ1Y3QgaWdtcHYzX2dyZWMgKmdyZWM7CiYjNDM7CV9fYmUzMiBzYWRkcjsKIAl1MTYgbnNyY3M7CiYjNDM7CXUxNiBuZ3JlYzsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBudG9ocyhpaHJ2My0mZ3Q7bmdyZWMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkvKiBpaHJ2MyBhbmQgaXBfaGRyKCkgcG9pbnQgaW50byB0aGUgc2tiIGhlYWQsIHdoaWNoIHRoZQomIzQzOwkgKiBpcF9tY19tYXlfcHVsbCgpIGNhbGxzIGJlbG93IGNhbiByZWFsbG9jYXRlLiAgUmVhZCBldmVyeSBmaWVsZAomIzQzOwkgKiB0aGF0IGlzIHVzZWQgYWZ0ZXIgYSBwdWxsIGJlZm9yZSB0aGUgZmlyc3Qgb25lIHJ1bnMuCiYjNDM7CSAqLwomIzQzOwlzYWRkciA9IGlwX2hkcihza2IpLSZndDtzYWRkcjsKJiM0MzsJbmdyZWMgPSBudG9ocyhpaHJ2My0mZ3Q7bmdyZWMpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbmdyZWM7IGkmIzQzOyYjNDM7KSB7CiAJCWxlbiAmIzQzOz0gc2l6ZW9mKCpncmVjKTsKIAkJaWYgKCFpcF9tY19tYXlfcHVsbChza2IsIGxlbikpCiAJCQlicmVhazsKQEAgLTIwMTksMTAgJiM0MzsyMDI3LDE0IEBAIHN0YXRpYyB2b2lkIGFtdF9pZ21wdjNfcmVwb3J0X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJaWYgKCFpcF9tY19tYXlfcHVsbChza2IsIGxlbikpCiAJCQlicmVhazsKIAomIzQzOwkJLyogaXBfbWNfbWF5X3B1bGwoKSBtYXkgaGF2ZSByZWFsbG9jYXRlZCB0aGUgaGVhZC4gKi8KJiM0MzsJCWdyZWMgPSAodm9pZCAqKShza2ItJmd0O2RhdGEgJiM0MzsgbGVuIC0gc2l6ZW9mKCpncmVjKSAtCiYjNDM7CQkJCW5zcmNzICogc2l6ZW9mKF9fYmUzMikpOwomIzQzOwogCQltZW1zZXQoJmFtcDtncm91cCwgMCwgc2l6ZW9mKHVuaW9uIGFtdF9hZGRyKSk7CiAJCWdyb3VwLmlwNCA9IGdyZWMtJmd0O2dyZWNfbWNhOwogCQltZW1zZXQoJmFtcDtob3N0LCAwLCBzaXplb2YodW5pb24gYW10X2FkZHIpKTsKLQkJaG9zdC5pcDQgPSBpcGgtJmd0O3NhZGRyOwomIzQzOwkJaG9zdC5pcDQgPSBzYWRkcjsKIAkJZ25vZGUgPSBhbXRfbG9va3VwX2dyb3VwKHR1bm5lbCwgJmFtcDtncm91cCwgJmFtcDtob3N0LCBmYWxzZSk7CiAJCWlmICghZ25vZGUpIHsKIAkJCWdub2RlID0gYW10X2FkZF9ncm91cChhbXQsIHR1bm5lbCwgJmFtcDtncm91cCwgJmFtcDtob3N0LApAQCAtMjE2MiwxNCAmIzQzOzIxNzQsMjIgQEAgc3RhdGljIHZvaWQgYW10X21sZHYyX3JlcG9ydF9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IsCiAJc3RydWN0IG1sZDJfcmVwb3J0ICptbGQyciA9IChzdHJ1Y3QgbWxkMl9yZXBvcnQgKilpY21wNl9oZHIoc2tiKTsKIAlpbnQgbGVuID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSAmIzQzOyBzaXplb2YoKm1sZDJyKTsKIAl2b2lkICp6ZXJvX2dyZWMgPSAodm9pZCAqKSZhbXA7bWxkdjJfemVyb19ncmVjOwotCXN0cnVjdCBpcHY2aGRyICppcDZoID0gaXB2Nl9oZHIoc2tiKTsKIAlzdHJ1Y3QgYW10X2dyb3VwX25vZGUgKmdub2RlOwogCXVuaW9uIGFtdF9hZGRyIGdyb3VwLCBob3N0OwogCXN0cnVjdCBtbGQyX2dyZWMgKmdyZWM7CiYjNDM7CXN0cnVjdCBpbjZfYWRkciBzYWRkcjsKIAl1MTYgbnNyY3M7CiYjNDM7CXUxNiBuZ3JlYzsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBudG9ocyhtbGQyci0mZ3Q7bWxkMnJfbmdyZWMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkvKiBtbGQyciBhbmQgaXB2Nl9oZHIoKSBwb2ludCBpbnRvIHRoZSBza2IgaGVhZCwgd2hpY2ggdGhlCiYjNDM7CSAqIGlwdjZfbWNfbWF5X3B1bGwoKSBjYWxscyBiZWxvdyBjYW4gcmVhbGxvY2F0ZS4gIFJlYWQgZXZlcnkgZmllbGQKJiM0MzsJICogdGhhdCBpcyB1c2VkIGFmdGVyIGEgcHVsbCBiZWZvcmUgdGhlIGZpcnN0IG9uZSBydW5zLgomIzQzOwkgKi8KJiM0MzsJc2FkZHIgPSBpcHY2X2hkcihza2IpLSZndDtzYWRkcjsKJiM0MzsJbmdyZWMgPSBudG9ocyhtbGQyci0mZ3Q7bWxkMnJfbmdyZWMpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbmdyZWM7IGkmIzQzOyYjNDM7KSB7CiAJCWxlbiAmIzQzOz0gc2l6ZW9mKCpncmVjKTsKIAkJaWYgKCFpcHY2X21jX21heV9wdWxsKHNrYiwgbGVuKSkKIAkJCWJyZWFrOwpAQCAtMjE4MSwxMCAmIzQzOzIyMDEsMTQgQEAgc3RhdGljIHZvaWQgYW10X21sZHYyX3JlcG9ydF9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IsCiAJCWlmICghaXB2Nl9tY19tYXlfcHVsbChza2IsIGxlbikpCiAJCQlicmVhazsKIAomIzQzOwkJLyogaXB2Nl9tY19tYXlfcHVsbCgpIG1heSBoYXZlIHJlYWxsb2NhdGVkIHRoZSBoZWFkLiAqLwomIzQzOwkJZ3JlYyA9ICh2b2lkICopKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBsZW4gLSBzaXplb2YoKmdyZWMpIC0KJiM0MzsJCQkJbnNyY3MgKiBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CiYjNDM7CiAJCW1lbXNldCgmYW1wO2dyb3VwLCAwLCBzaXplb2YodW5pb24gYW10X2FkZHIpKTsKIAkJZ3JvdXAuaXA2ID0gZ3JlYy0mZ3Q7Z3JlY19tY2E7CiAJCW1lbXNldCgmYW1wO2hvc3QsIDAsIHNpemVvZih1bmlvbiBhbXRfYWRkcikpOwotCQlob3N0LmlwNiA9IGlwNmgtJmd0O3NhZGRyOwomIzQzOwkJaG9zdC5pcDYgPSBzYWRkcjsKIAkJZ25vZGUgPSBhbXRfbG9va3VwX2dyb3VwKHR1bm5lbCwgJmFtcDtncm91cCwgJmFtcDtob3N0LCB0cnVlKTsKIAkJaWYgKCFnbm9kZSkgewogCQkJZ25vZGUgPSBhbXRfYWRkX2dyb3VwKGFtdCwgdHVubmVsLCAmYW1wO2dyb3VwLCAmYW1wO2hvc3QsCkBAIC0yMzA1LDcgJiM0MzsyMzI5LDEyIEBAIHN0YXRpYyBib29sIGFtdF9tdWx0aWNhc3RfZGF0YV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IpCiAJc2tiX3B1c2goc2tiLCBzaXplb2YoKmV0aCkpOwogCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJc2tiX3B1bGwoc2tiLCBzaXplb2YoKmV0aCkpOwotCWV0aCA9IGV0aF9oZHIoc2tiKTsKJiM0MzsKJiM0MzsJLyogVGhlIEwyIGhlYWRlciBpcyByZXdyaXR0ZW4gYmVsb3c7IG1ha2UgdGhlIGhlYWQgcHJpdmF0ZSBmaXJzdCBzbyBhCiYjNDM7CSAqIGNsb25lZCBza2IgKGZvciBleGFtcGxlIG9uZSB0YWtlbiBieSBhIHBhY2tldCB0YXApIGlzIG5vdCBtb2RpZmllZC4KJiM0MzsJICovCiYjNDM7CWlmIChza2JfY293X2hlYWQoc2tiLCAwKSkKJiM0MzsJCXJldHVybiB0cnVlOwogCiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCppcGgpKSkKIAkJcmV0dXJuIHRydWU7CkBAIC0yMzE1LDYgJiM0MzsyMzQ0LDggQEAgc3RhdGljIGJvb2wgYW10X211bHRpY2FzdF9kYXRhX2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJaWYgKCFpcHY0X2lzX211bHRpY2FzdChpcGgtJmd0O2RhZGRyKSkKIAkJCXJldHVybiB0cnVlOwogCQlza2ItJmd0O3Byb3RvY29sID0gaHRvbnMoRVRIX1BfSVApOwomIzQzOwkJLyogcHNrYl9tYXlfcHVsbCgpIGFib3ZlIG1heSBoYXZlIHJlYWxsb2NhdGVkIHRoZSBoZWFkLiAqLwomIzQzOwkJZXRoID0gZXRoX2hkcihza2IpOwogCQlldGgtJmd0O2hfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7CiAJCWlwX2V0aF9tY19tYXAoaXBoLSZndDtkYWRkciwgZXRoLSZndDtoX2Rlc3QpOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCkBAIC0yMzI4LDYgJiM0MzsyMzU5LDggQEAgc3RhdGljIGJvb2wgYW10X211bHRpY2FzdF9kYXRhX2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJaWYgKCFpcHY2X2FkZHJfaXNfbXVsdGljYXN0KCZhbXA7aXA2aC0mZ3Q7ZGFkZHIpKQogCQkJcmV0dXJuIHRydWU7CiAJCXNrYi0mZ3Q7cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTsKJiM0MzsJCS8qIHBza2JfbWF5X3B1bGwoKSBhYm92ZSBtYXkgaGF2ZSByZWFsbG9jYXRlZCB0aGUgaGVhZC4gKi8KJiM0MzsJCWV0aCA9IGV0aF9oZHIoc2tiKTsKIAkJZXRoLSZndDtoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVBWNik7CiAJCWlwdjZfZXRoX21jX21hcCgmYW1wO2lwNmgtJmd0O2RhZGRyLCBldGgtJmd0O2hfZGVzdCk7CiAjZW5kaWYKQEAgLTIzNTMsOCAmIzQzOzIzODYsMTAgQEAgc3RhdGljIGJvb2wgYW10X21lbWJlcnNoaXBfcXVlcnlfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LAogCXN0cnVjdCBhbXRfaGVhZGVyX21lbWJlcnNoaXBfcXVlcnkgKmFtdG1xOwogCXN0cnVjdCBpZ21wdjNfcXVlcnkgKmlodjM7CiAJc3RydWN0IGV0aGhkciAqZXRoLCAqb2V0aDsKJiM0MzsJdTggaF9zb3VyY2VbRVRIX0FMRU5dOwogCXN0cnVjdCBpcGhkciAqaXBoOwogCWludCBoZHJfc2l6ZSwgbGVuOwomIzQzOwl1NjQgcmVzcG9uc2VfbWFjOwogCiAJaGRyX3NpemUgPSBzaXplb2YoKmFtdG1xKSAmIzQzOyBzaXplb2Yoc3RydWN0IHVkcGhkcik7CiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGRyX3NpemUpKQpAQCAtMjM2Nyw2ICYjNDM7MjQwMiwxMiBAQCBzdGF0aWMgYm9vbCBhbXRfbWVtYmVyc2hpcF9xdWVyeV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsCiAJaWYgKGFtdG1xLSZndDtub25jZSAhPSBhbXQtJmd0O25vbmNlKQogCQlyZXR1cm4gdHJ1ZTsKIAomIzQzOwkvKiBpcHR1bm5lbF9wdWxsX2hlYWRlcigpIGFuZCB0aGUgcHNrYl9tYXlfcHVsbCgpIGNhbGxzIGJlbG93IGNhbgomIzQzOwkgKiByZWFsbG9jYXRlIHRoZSBza2IgaGVhZCwgc28gYW10bXEgd291bGQgZGFuZ2xlLiAgU25hcHNob3QgdGhlIG9ubHkKJiM0MzsJICogZmllbGQgdXNlZCBhZnRlcndhcmRzLgomIzQzOwkgKi8KJiM0MzsJcmVzcG9uc2VfbWFjID0gYW10bXEtJmd0O3Jlc3BvbnNlX21hYzsKJiM0MzsKIAloZHJfc2l6ZSAtPSBzaXplb2YoKmV0aCk7CiAJaWYgKGlwdHVubmVsX3B1bGxfaGVhZGVyKHNrYiwgaGRyX3NpemUsIGh0b25zKEVUSF9QX1RFQiksIGZhbHNlKSkKIAkJcmV0dXJuIHRydWU7CkBAIC0yMzc2LDYgJiM0MzsyNDE3LDEzIEBAIHN0YXRpYyBib29sIGFtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwKIAlza2JfcHVsbChza2IsIHNpemVvZigqZXRoKSk7CiAJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CiAJZXRoID0gZXRoX2hkcihza2IpOwomIzQzOwkvKiBTbmFwc2hvdCB0aGUgb3V0ZXIgc291cmNlIE1BQyBiZWZvcmUgYSBsYXRlciBwdWxsIGNhbiBmcmVlIGl0LiAqLwomIzQzOwlldGhlcl9hZGRyX2NvcHkoaF9zb3VyY2UsIG9ldGgtJmd0O2hfc291cmNlKTsKJiM0MzsJLyogVGhlIEwyIGhlYWRlciBpcyByZXdyaXR0ZW4gYmVsb3c7IG1ha2UgdGhlIGhlYWQgcHJpdmF0ZSBmaXJzdCBzbyBhCiYjNDM7CSAqIGNsb25lZCBza2IgKGZvciBleGFtcGxlIG9uZSB0YWtlbiBieSBhIHBhY2tldCB0YXApIGlzIG5vdCBtb2RpZmllZC4KJiM0MzsJICovCiYjNDM7CWlmIChza2JfY293X2hlYWQoc2tiLCAwKSkKJiM0MzsJCXJldHVybiB0cnVlOwogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqaXBoKSkpCiAJCXJldHVybiB0cnVlOwogCkBAIC0yMzg4LDYgJiM0MzsyNDM2LDggQEAgc3RhdGljIGJvb2wgYW10X21lbWJlcnNoaXBfcXVlcnlfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LAogCQkJCSAgIHNpemVvZigqaWh2MykpKQogCQkJcmV0dXJuIHRydWU7CiAKJiM0MzsJCS8qIHBza2JfbWF5X3B1bGwoKSBhYm92ZSBtYXkgaGF2ZSByZWFsbG9jYXRlZCB0aGUgaGVhZC4gKi8KJiM0MzsJCWlwaCA9IGlwX2hkcihza2IpOwogCQlpZiAoIWlwdjRfaXNfbXVsdGljYXN0KGlwaC0mZ3Q7ZGFkZHIpKQogCQkJcmV0dXJuIHRydWU7CiAKQEAgLTIzOTUsMTAgJiM0MzsyNDQ1LDExIEBAIHN0YXRpYyBib29sIGFtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwKIAkJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKIAkJc2tiX3B1c2goc2tiLCBzaXplb2YoKmlwaCkgJiM0MzsgQU1UX0lQSERSX09QVFMpOwogCQlXUklURV9PTkNFKGFtdC0mZ3Q7cmVhZHk0LCB0cnVlKTsKLQkJYW10LSZndDttYWMgPSBhbXRtcS0mZ3Q7cmVzcG9uc2VfbWFjOwomIzQzOwkJYW10LSZndDttYWMgPSByZXNwb25zZV9tYWM7CiAJCWFtdC0mZ3Q7cmVxX2NudCA9IDA7CiAJCWFtdC0mZ3Q7cWkgPSBpaHYzLSZndDtxcWljOwogCQlza2ItJmd0O3Byb3RvY29sID0gaHRvbnMoRVRIX1BfSVApOwomIzQzOwkJZXRoID0gZXRoX2hkcihza2IpOwogCQlldGgtJmd0O2hfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7CiAJCWlwX2V0aF9tY19tYXAoaXBoLSZndDtkYWRkciwgZXRoLSZndDtoX2Rlc3QpOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCkBAIC0yNDIxLDEwICYjNDM7MjQ3MiwxMSBAQCBzdGF0aWMgYm9vbCBhbXRfbWVtYmVyc2hpcF9xdWVyeV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsCiAJCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiAJCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKCppcDZoKSAmIzQzOyBBTVRfSVA2SERSX09QVFMpOwogCQlXUklURV9PTkNFKGFtdC0mZ3Q7cmVhZHk2LCB0cnVlKTsKLQkJYW10LSZndDttYWMgPSBhbXRtcS0mZ3Q7cmVzcG9uc2VfbWFjOwomIzQzOwkJYW10LSZndDttYWMgPSByZXNwb25zZV9tYWM7CiAJCWFtdC0mZ3Q7cmVxX2NudCA9IDA7CiAJCWFtdC0mZ3Q7cWkgPSBtbGQycS0mZ3Q7bWxkMnFfcXFpYzsKIAkJc2tiLSZndDtwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpOwomIzQzOwkJZXRoID0gZXRoX2hkcihza2IpOwogCQlldGgtJmd0O2hfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTsKIAkJaXB2Nl9ldGhfbWNfbWFwKCZhbXA7aXA2aC0mZ3Q7ZGFkZHIsIGV0aC0mZ3Q7aF9kZXN0KTsKICNlbmRpZgpAQCAtMjQzMiw3ICYjNDM7MjQ4NCw3IEBAIHN0YXRpYyBib29sIGFtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwKIAkJcmV0dXJuIHRydWU7CiAJfQogCi0JZXRoZXJfYWRkcl9jb3B5KGV0aC0mZ3Q7aF9zb3VyY2UsIG9ldGgtJmd0O2hfc291cmNlKTsKJiM0MzsJZXRoZXJfYWRkcl9jb3B5KGV0aC0mZ3Q7aF9zb3VyY2UsIGhfc291cmNlKTsKIAlza2ItJmd0O3BrdF90eXBlID0gUEFDS0VUX01VTFRJQ0FTVDsKIAlza2ItJmd0O2lwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CiAJbGVuID0gc2tiLSZndDtsZW47CkBAIC0yNDU1LDggJiM0MzsyNTA3LDEzIEBAIHN0YXRpYyBib29sIGFtdF91cGRhdGVfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXN0cnVjdCBldGhoZHIgKmV0aDsKIAlzdHJ1Y3QgaXBoZHIgKmlwaDsKIAlpbnQgbGVuLCBoZHJfc2l6ZTsKJiM0MzsJX19iZTMyIHNhZGRyOwogCi0JaXBoID0gaXBfaGRyKHNrYik7CiYjNDM7CS8qIGlwX2hkcigpIHBvaW50cyBpbnRvIHRoZSBza2IgaGVhZCwgd2hpY2ggdGhlIHBza2JfbWF5X3B1bGwoKSAvCiYjNDM7CSAqIGlwdHVubmVsX3B1bGxfaGVhZGVyKCkgY2FsbHMgYmVsb3cgY2FuIHJlYWxsb2NhdGUuICBTbmFwc2hvdCB0aGUKJiM0MzsJICogc291cmNlIGFkZHJlc3MgdXNlZCBmb3IgdGhlIHR1bm5lbCBsb29rdXAgYmVmb3JlIHRoZSBmaXJzdCBwdWxsLgomIzQzOwkgKi8KJiM0MzsJc2FkZHIgPSBpcF9oZHIoc2tiKS0mZ3Q7c2FkZHI7CiAKIAloZHJfc2l6ZSA9IHNpemVvZigqYW10bXUpICYjNDM7IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJfc2l6ZSkpCkBAIC0yNDcyLDcgJiM0MzsyNTI5LDcgQEAgc3RhdGljIGJvb2wgYW10X3VwZGF0ZV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IpCiAJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0dW5uZWwsICZhbXA7YW10LSZndDt0dW5uZWxfbGlzdCwgbGlzdCkgewotCQlpZiAodHVubmVsLSZndDtpcDQgPT0gaXBoLSZndDtzYWRkcikgewomIzQzOwkJaWYgKHR1bm5lbC0mZ3Q7aXA0ID09IHNhZGRyKSB7CiAJCQlpZiAoKGFtdG11LSZndDtub25jZSA9PSB0dW5uZWwtJmd0O25vbmNlICZhbXA7JmFtcDsKIAkJCSAgICAgYW10bXUtJmd0O3Jlc3BvbnNlX21hYyA9PSB0dW5uZWwtJmd0O21hYykpIHsKIAkJCQltb2RfZGVsYXllZF93b3JrKGFtdF93cSwgJmFtcDt0dW5uZWwtJmd0O2djX3dxLApAQCAtMjQ5Miw2ICYjNDM7MjU0OSwxMiBAQCBzdGF0aWMgYm9vbCBhbXRfdXBkYXRlX2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwaCkpKQogCQlyZXR1cm4gdHJ1ZTsKIAomIzQzOwkvKiBUaGUgTDIgaGVhZGVyIGlzIHJld3JpdHRlbiBiZWxvdzsgbWFrZSB0aGUgaGVhZCBwcml2YXRlIGZpcnN0IHNvIGEKJiM0MzsJICogY2xvbmVkIHNrYiAoZm9yIGV4YW1wbGUgb25lIHRha2VuIGJ5IGEgcGFja2V0IHRhcCkgaXMgbm90IG1vZGlmaWVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKHNrYl9jb3dfaGVhZChza2IsIDApKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiAJaXBoID0gaXBfaGRyKHNrYik7CiAJaWYgKGlwaC0mZ3Q7dmVyc2lvbiA9PSA0KSB7CiAJCWlmIChpcF9tY19jaGVja19pZ21wKHNrYikpIHsKQEAgLTI1MDgsNiAmIzQzOzI1NzEsMTAgQEAgc3RhdGljIGJvb2wgYW10X3VwZGF0ZV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IpCiAJCWV0aCA9IGV0aF9oZHIoc2tiKTsKIAkJc2tiLSZndDtwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTsKIAkJZXRoLSZndDtoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVApOwomIzQzOwkJLyogaXBfbWNfY2hlY2tfaWdtcCgpIGFuZCB0aGUgcmVwb3J0IGhhbmRsZXIgbWF5IGhhdmUKJiM0MzsJCSAqIHJlYWxsb2NhdGVkIHRoZSBoZWFkOyByZS1kZXJpdmUgaXBoLgomIzQzOwkJICovCiYjNDM7CQlpcGggPSBpcF9oZHIoc2tiKTsKIAkJaXBfZXRoX21jX21hcChpcGgtJmd0O2RhZGRyLCBldGgtJmd0O2hfZGVzdCk7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKIAl9IGVsc2UgaWYgKGlwaC0mZ3Q7dmVyc2lvbiA9PSA2KSB7CkBAIC0yNTI3LDYgJiM0MzsyNTk0LDEwIEBAIHN0YXRpYyBib29sIGFtdF91cGRhdGVfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQlldGggPSBldGhfaGRyKHNrYik7CiAJCXNrYi0mZ3Q7cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTsKIAkJZXRoLSZndDtoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVBWNik7CiYjNDM7CQkvKiBpcHY2X21jX2NoZWNrX21sZCgpIGFuZCB0aGUgcmVwb3J0IGhhbmRsZXIgbWF5IGhhdmUKJiM0MzsJCSAqIHJlYWxsb2NhdGVkIHRoZSBoZWFkOyByZS1kZXJpdmUgaXA2aC4KJiM0MzsJCSAqLwomIzQzOwkJaXA2aCA9IGlwdjZfaGRyKHNrYik7CiAJCWlwdjZfZXRoX21jX21hcCgmYW1wO2lwNmgtJmd0O2RhZGRyLCBldGgtJmd0O2hfZGVzdCk7CiAjZW5kaWYKIAl9IGVsc2UgewpAQCAtMjc3Miw3ICYjNDM7Mjg0Myw3IEBAIHN0YXRpYyB2b2lkIGFtdF9nd19yY3Yoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHN0YXRpYyBpbnQgYW10X3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGFtdF9kZXYgKmFtdDsKLQlzdHJ1Y3QgaXBoZHIgKmlwaDsKJiM0MzsJX19iZTMyIHNhZGRyOwogCWludCB0eXBlOwogCWJvb2wgZXJyOwogCkBAIC0yNzg1LDcgJiM0MzsyODU2LDExIEBAIHN0YXRpYyBpbnQgYW10X3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiAJfQogCiAJc2tiLSZndDtkZXYgPSBhbXQtJmd0O2RldjsKLQlpcGggPSBpcF9oZHIoc2tiKTsKJiM0MzsJLyogYW10X3BhcnNlX3R5cGUoKSBjYWxscyBwc2tiX21heV9wdWxsKCksIHdoaWNoIGNhbiByZWFsbG9jYXRlIHRoZQomIzQzOwkgKiBza2IgaGVhZCBhbmQgbGVhdmUgYSBjYWNoZWQgaXBfaGRyKCkgZGFuZ2xpbmcuICBTbmFwc2hvdCB0aGUgc291cmNlCiYjNDM7CSAqIGFkZHJlc3MgdXNlZCBiZWxvdyBiZWZvcmUgdGhlIHB1bGwuCiYjNDM7CSAqLwomIzQzOwlzYWRkciA9IGlwX2hkcihza2IpLSZndDtzYWRkcjsKIAl0eXBlID0gYW10X3BhcnNlX3R5cGUoc2tiKTsKIAlpZiAodHlwZSA9PSAtMSkgewogCQllcnIgPSB0cnVlOwpAQCAtMjc5NSw3ICYjNDM7Mjg3MCw3IEBAIHN0YXRpYyBpbnQgYW10X3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiAJaWYgKGFtdC0mZ3Q7bW9kZSA9PSBBTVRfTU9ERV9HQVRFV0FZKSB7CiAJCXN3aXRjaCAodHlwZSkgewogCQljYXNlIEFNVF9NU0dfQURWRVJUSVNFTUVOVDoKLQkJCWlmIChpcGgtJmd0O3NhZGRyICE9IGFtdC0mZ3Q7ZGlzY292ZXJ5X2lwKSB7CiYjNDM7CQkJaWYgKHNhZGRyICE9IGFtdC0mZ3Q7ZGlzY292ZXJ5X2lwKSB7CiAJCQkJbmV0ZGV2X2RiZyhhbXQtJmd0O2RldiwgJiMzNDtJbnZhbGlkIFJlbGF5IElQXG4mIzM0Oyk7CiAJCQkJZXJyID0gdHJ1ZTsKIAkJCQlnb3RvIGRyb3A7CkBAIC0yODA3LDcgJiM0MzsyODgyLDcgQEAgc3RhdGljIGludCBhbXRfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJCX0KIAkJCWdvdG8gb3V0OwogCQljYXNlIEFNVF9NU0dfTVVMVElDQVNUX0RBVEE6Ci0JCQlpZiAoaXBoLSZndDtzYWRkciAhPSBhbXQtJmd0O3JlbW90ZV9pcCkgewomIzQzOwkJCWlmIChzYWRkciAhPSBhbXQtJmd0O3JlbW90ZV9pcCkgewogCQkJCW5ldGRldl9kYmcoYW10LSZndDtkZXYsICYjMzQ7SW52YWxpZCBSZWxheSBJUFxuJiMzNDspOwogCQkJCWVyciA9IHRydWU7CiAJCQkJZ290byBkcm9wOwpAQCAtMjgxOCw3ICYjNDM7Mjg5Myw3IEBAIHN0YXRpYyBpbnQgYW10X3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiAJCQllbHNlCiAJCQkJZ290byBvdXQ7CiAJCWNhc2UgQU1UX01TR19NRU1CRVJTSElQX1FVRVJZOgotCQkJaWYgKGlwaC0mZ3Q7c2FkZHIgIT0gYW10LSZndDtyZW1vdGVfaXApIHsKJiM0MzsJCQlpZiAoc2FkZHIgIT0gYW10LSZndDtyZW1vdGVfaXApIHsKIAkJCQluZXRkZXZfZGJnKGFtdC0mZ3Q7ZGV2LCAmIzM0O0ludmFsaWQgUmVsYXkgSVBcbiYjMzQ7KTsKIAkJCQllcnIgPSB0cnVlOwogCQkJCWdvdG8gZHJvcDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDU6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg1MQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IEFNVCBEcml2ZXIgRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdGFyZ2V0cyBgZHJpdmVycy9uZXQvYW10LmNgLiBUaGUgY29tbWl0IG1lc3NhZ2UgaXMgcHJldHR5IGJhcmVib25lcywganVzdCBpbmRpY2F0aW5nIGl0JiMzOTtzIGEgcGF0Y2ggZnJvbSBhIHN5ei1jbHVzdGVyIGFuZCB1bmRlciByZXZpZXcuIFRoYXQmIzM5O3MgZmluZSwgdGhlIGNvZGUgaXMgd2hhdCBtYXR0ZXJzLiBUaGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGZpeCwgemVyb2luZyBpbiBvbiBtZW1vcnkgaXNzdWVzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBBTVQgZHJpdmVyLiBUaGV5JiMzOTtyZSBhZGRyZXNzaW5nIGBza2JgIHJlYWxsb2NhdGlvbiBwcm9ibGVtcyDigJMgdGhhdCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHBhY2tldCBidWZmZXIgbWFuYWdlbWVudC4gSSBzZWUgY2FsbHMgbGlrZSBgcHNrYl9tYXlfcHVsbGAsIGBpcF9tY19tYXlfcHVsbGAsIGFuZCBgc2tiX2Nvd19oZWFkYCwgYWxsIGluZGljYXRvcnMgb2YgcG90ZW50aWFsIGhlYWRlciBwb2ludGVyIGludmFsaWRhdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGUgYnVnIGludm9sdmVkIGNhY2hpbmcgcG9pbnRlcnMgdG8gaGVhZGVycyAobGlrZSBgaXBfaGRyKHNrYilgKSAqYmVmb3JlKiB0aGUgYHB1bGxgIG9wZXJhdGlvbiBhbmQgc3Vic2VxdWVudGx5IHVzaW5nIHRob3NlIHN0YWxlIHBvaW50ZXJzLCByZXN1bHRpbmcgaW4gYSB1c2UtYWZ0ZXItZnJlZSBvciBkYW5nbGluZyBwb2ludGVyIHNjZW5hcmlvLiBTbWFydCDigJMgdGhleSYjMzk7dmUgYWRkZWQgYW4gYHNrYl9jb3dfaGVhZChza2IsIDApYCBjYWxsIGJlZm9yZSBhbnkgTDIgaGVhZGVyIHJld3JpdGluZywgZWZmZWN0aXZlbHkgY3JlYXRpbmcgYSBjb3B5IG9mIHRoZSBoZWFkIGRhdGEgdG8gcHJldmVudCBzdWNoIGlzc3Vlcy4KClRoaXMgaXMgYSBnb29kIGNhdGNoLCBhIGNsZWFuIG1lbW9yeSBjb3JydXB0aW9uIGZpeCBpbiBhIGNvcmUga2VybmVsIGNvbXBvbmVudCwgdGhlIEFNVCBkcml2ZXIuIEl04oCZcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0JiMzOTtzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIGl0JiMzOTtzIHJvYnVzdCBhbmQgdG8gdW5jb3ZlciBhbnkgbGF0ZW50IGlzc3Vlcy4gTm93LCBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIG9uIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBhbmQgaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIGluIHRoaXMgQU1UIGNvZGUuIFRpbWUgdG8gZGlnIGludG8gdGhlIGBkcml2ZXJzL25ldC9hbXQuY2AgZmlsZSBpdHNlbGYgYW5kIGl0cyBhc3NvY2lhdGVkIEtjb25maWcgZW50cmllcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBkcml2ZXIgaXMgY29uZmlndXJlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBuZXR3b3JrIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBTVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0yODk9Y29uZmlnIFBGQ1Bcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMwMS1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzAyOmNvbmZpZyBBTVRcbmRyaXZlcnMvbmV0L0tjb25maWctMzAzLVx0dHJpc3RhdGUgXCYjMzQ7QXV0b21hdGljIE11bHRpY2FzdCBUdW5uZWxpbmcgKEFNVClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTIyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQU1UIERyaXZlciBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBgQU1UYCBjb25maWd1cmF0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIFRoZSBwcmVzZW5jZSBvZiBgI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpYCBzdWdnZXN0cyB0aGF0IGBJUFY2YCBpcyBhbHNvIGdvaW5nIHRvIGJlIGEgZmFjdG9yIGhlcmUuCgpOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCB0aGVzZSBmdW5jdGlvbnMgd2l0aGluIGBkcml2ZXJzL25ldC9hbXQuY2A6IGBhbXRfZGV2X3htaXRgLCBgYW10X2lnbXB2M19yZXBvcnRfaGFuZGxlcmAsIGBhbXRfbWxkdjJfcmVwb3J0X2hhbmRsZXJgLCBgYW10X211bHRpY2FzdF9kYXRhX2hhbmRsZXJgLCBgYW10X21lbWJlcnNoaXBfcXVlcnlfaGFuZGxlcmAsIGBhbXRfdXBkYXRlX2hhbmRsZXJgLCBhbmQgYGFtdF9yY3ZgLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHNldCBgRm9jdXNTeW1ib2xzYCB0byB0aG9zZSBmdW5jdGlvbnMgc28gSSBjYW4gY29uY2VudHJhdGUgbXkgZnV6emluZyBlZmZvcnRzIG9uIHRoZW0uCgpJIGp1c3QgZG91YmxlIGNoZWNrZWQgYW5kIHdoaWxlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCB0aGF0JiMzOTtzIG5vdCBhIGNvbmNlcm4gZm9yIG15IHB1cnBvc2VzIHdpdGggYEZvY3VzU3ltYm9sc2AuCgpOb3csIGNvbnNpZGVyaW5nIHRoZXNlIGFyZSBkYXRhIHBhdGggZnVuY3Rpb25zLCBJIG5lZWQgdG8gZXZhbHVhdGUgd2hldGhlciBvciBub3QgdGhleSBhcmUgaG90IHBhdGhzLiBgYW10X2Rldl94bWl0YCBhbmQgYGFtdF9yY3ZgIGFyZSB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgZnVuY3Rpb25zLCByZXNwZWN0aXZlbHksIHNvIHRoZXkgYXJlIHRoZSBkYXRhIHBhdGggZm9yIHRoZSBBTVQgZHJpdmVyLiBIb3dldmVyLCBzaW5jZSBBTVQgaXMgYSBzcGVjaWFsaXplZCB0dW5uZWwsIEkgZG9uJiMzOTt0IHRoaW5rIHRoZXkmIzM5O3JlIGdlbmVyaWMgaG90IHBhdGhzIGluIHRoZSBzYW1lIHdheSBgaXBfcmN2YCBvciBgZGV2X3F1ZXVlX3htaXRgIG1pZ2h0IGJlLiBUaGlzIG1lYW5zIGZ1enppbmcgdGhlc2Ugc3BlY2lmaWNhbGx5IGlzIGEgZ29vZCBpZGVhLgoKRmluYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHZlcmlmeSBgQU1UYCBjb25maWcgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBTVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9Mjg5PWNvbmZpZyBQRkNQXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMDEtXG5kcml2ZXJzL25ldC9LY29uZmlnOjMwMjpjb25maWcgQU1UXG5kcml2ZXJzL25ldC9LY29uZmlnLTMwMy1cdHRyaXN0YXRlIFwmIzM0O0F1dG9tYXRpYyBNdWx0aWNhc3QgVHVubmVsaW5nIChBTVQpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDU6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMzNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCBlbWJlZGRlZCBzeXN0ZW1zLCBLY29uZmlnLCBhbmQgQU1UIChBY3RpdmUgTWFuYWdlbWVudCBUZWNobm9sb2d5KS4KCioqRGVsdmluZyBpbnRvIHRoZSBBTVQgS2NvbmZpZyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IG1pbmQgaW1tZWRpYXRlbHkgY2xpY2tzIHRvIGFjdGlvbiBtb2RlIOKAkyBsZXQmIzM5O3MgZGlzc2VjdCB0aGUgS2NvbmZpZyBmb3IgQU1ULiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1JpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBhbGwgdGhlIHZhcmlhYmxlcyByZWxhdGVkIHRvIEFNVC4mIzM0OyBJJiMzOTttIG1lbnRhbGx5IHByZXBhcmluZyB0byBuYXZpZ2F0ZSB0aGUgZmlsZSwgZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIGtleSBzZXR0aW5ncyB0aGF0IGNvbnRyb2wgQU1UJiMzOTtzIGJlaGF2aW9yLCBmZWF0dXJlcywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGUgdXN1YWwgS2NvbmZpZyBzeW50YXgg4oCTIGBjb25maWdgLCBgYm9vbGAsIGB0cmlzdGF0ZWAsIGBzZWxlY3RgLCBgZGVwZW5kcyBvbmAsIGBkZWZhdWx0YCwgZXRjLiDigJMgYW5kIEkmIzM5O20gcmVhZHkgdG8gcGFyc2UgdGhlIGxvZ2ljIHdpdGhpbi4gRXNzZW50aWFsbHksIEkmIzM5O20gbWVudGFsbHkgcHJlcGFyaW5nIGZvciBhIGRlZXAgZGl2ZSB0byB1bmRlcnN0YW5kIGhvdyBBTVQgaXMgY29uZmlndXJlZCwgZW5hYmxlZCwgYW5kIHdoYXQgaXRzIHNwZWNpZmljIGNhcGFiaWxpdGllcyBhcmUgd2l0aGluIHRoaXMgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwMDpcdFx0ICB3aWxsIGJlIGNhbGxlZCBwZmNwLlxuIDMwMTpcdFxuIDMwMjpcdGNvbmZpZyBBTVRcbiAzMDM6XHRcdHRyaXN0YXRlIFwmIzM0O0F1dG9tYXRpYyBNdWx0aWNhc3QgVHVubmVsaW5nIChBTVQpXCYjMzQ7XG4gMzA0Olx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IElQX01VTFRJQ0FTVFxuIDMwNTpcdFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4gMzA2Olx0XHRoZWxwXG4gMzA3Olx0XHQgIFRoaXMgYWxsb3dzIG9uZSB0byBjcmVhdGUgQU1UKEF1dG9tYXRpYyBNdWx0aWNhc3QgVHVubmVsaW5nKVxuIDMwODpcdFx0ICB2aXJ0dWFsIGludGVyZmFjZXMgdGhhdCBwcm92aWRlIG11bHRpY2FzdCB0dW5uZWxpbmcuXG4gMzA5Olx0XHQgIFRoZXJlIGFyZSB0d28gcm9sZXMsIEdhdGV3YXksIGFuZCBSZWxheS5cbiAzMTA6XHRcdCAgR2F0ZXdheSBFbmNhcHN1bGF0ZXMgSUdNUC9NTEQgdHJhZmZpYyBmcm9tIGxpc3RlbmVycyB0byB0aGUgUmVsYXkuXG4gMzExOlx0XHQgIEdhdGV3YXkgRGVjYXBzdWxhdGVzIG11bHRpY2FzdCB0cmFmZmljIGZyb20gdGhlIFJlbGF5IHRvIExpc3RlbmVycy5cbiAzMTI6XHRcdCAgUmVsYXkgRW5jYXBzdWxhdGVzIG11bHRpY2FzdCB0cmFmZmljIGZyb20gU291cmNlcyB0byBHYXRld2F5LlxuIDMxMzpcdFx0ICBSZWxheSBEZWNhcHN1bGF0ZXMgSUdNUC9NTEQgdHJhZmZpYyBmcm9tIEdhdGV3YXkuXG4gMzE0Olx0XG4gMzE1Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXJzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMzE2Olx0XHQgIHdpbGwgYmUgY2FsbGVkIGFtdC5cbiAzMTc6XHRcbiAzMTg6XHRjb25maWcgTUFDU0VDXG4gMzE5Olx0XHR0cmlzdGF0ZSBcJiMzNDtJRUVFIDgwMi4xQUUgTUFDLWxldmVsIGVuY3J5cHRpb24gKE1BQ3NlYylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTM0CgkJCQkJCQlvdXRwdXQ6IDIwMgoJCQkJCQkJdGhvdWdodHM6IDI1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBBTVQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lIGNvbmNlcm5pbmcgdGhlIEFNVCAoQXV0b21hdGljIE11bHRpY2FzdCBUdW5uZWxpbmcpIGRyaXZlci4gVGhlIGRlcGVuZGVuY2llcyBhcmUgYElORVRgIGFuZCBgSVBfTVVMVElDQVNUYCwgYW5kIGl0IGxvb2tzIGxpa2UgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQU1UYCBhbmQgYElQVjZgIGFyZSBlbmFibGVkIGluIHRoZSBjb25maWd1cmF0aW9ucy4gR29vZCwgc3RhbmRhcmQgc2V0dXAuCgpNeSBpbW1lZGlhdGUgdGFrZWF3YXkgaXMgdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIG5hc3R5IGNvbGxlY3Rpb24gb2YgbWVtb3J5IHNhZmV0eSBpc3N1ZXM6IHVzZS1hZnRlci1mcmVlIGFuZCBkYW5nbGluZyBwb2ludGVyIGJ1Z3MuIFRoZXkmIzM5O3JlIHBpbnBvaW50aW5nIHRoZSBjdWxwcml0cyBhcyBgcHNrYl9tYXlfcHVsbGAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zLCB3aGljaCBhcmUgcmVhbGxvY2F0aW5nIHRoZSBgc2tiYCBoZWFkZXIgd2hpbGUgbmV0d29yayBoZWFkZXIgcG9pbnRlcnMgYXJlIHN0aWxsIGFjdGl2ZS4gU291bmRzIGxpa2UgY2xhc3NpYyByYWNlIGNvbmRpdGlvbnMgaW4gYSBuZXR3b3JrIGNvbnRleHQsIGFuZCB0aGUgc29sdXRpb24gbG9va3MgdG8gYmUgYHNrYl9jb3dfaGVhZGAgdG8gcHJldmVudCBtb2RpZmljYXRpb24gb2YgY2xvbmVkIGBza2JzYC4gSXQmIzM5O3MgZGVmaW5pdGVseSBmdW5jdGlvbmFsLCByaWdodCBvZmYgdGhlIGJhdC4KClNvLCB0aGlzIGNsZWFybHkgd2FycmFudHMgc29tZSBzZXJpb3VzIGZ1enppbmcuIFRoaXMgaXMgcmVhY2hhYmxlIG5ldHdvcmsgZHJpdmVyIGNvZGUsIGFuZCBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24sIHRoZXJl4oCZcyBsaWtlbHkgcG90ZW50aWFsIGZvciBtb3JlIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyB0byBzdGlsbCBleGlzdC4KCkkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzIHRvIGFzc2VzcyB0aGUgZml4IHRob3JvdWdobHk6IGBhbXRfZGV2X3htaXRgLCBgYW10X2lnbXB2M19yZXBvcnRfaGFuZGxlcmAsIGBhbXRfbWxkdjJfcmVwb3J0X2hhbmRsZXJgLCBgYW10X211bHRpY2FzdF9kYXRhX2hhbmRsZXJgLCBgYW10X21lbWJlcnNoaXBfcXVlcnlfaGFuZGxlcmAsIGBhbXRfdXBkYXRlX2hhbmRsZXJgLCBhbmQgYGFtdF9yY3ZgLiBGaXJzdCB0aGluZyBJJiMzOTtsbCBkbyBpcyBkb3VibGUtY2hlY2sgdGhlIG5hbWUsIGp1c3QgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIGNvcnJlY3QuIFllcywgaXQgaXMgaW4gdGhlIGRpZmYuCgpBbHJpZ2h0LCB0aGUgcGF0Y2ggaXMgZnVuY3Rpb25hbCBhbmQgZGVmaW5pdGVseSBmaXhpbmcgYnVncy4gSSYjMzk7bSBnb2luZyB0byBzZXQgaXQgdXAgdG8gY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDU6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FNVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YW10X2Rldl94bWl0JiMzNDssCiAgICAmIzM0O2FtdF9pZ21wdjNfcmVwb3J0X2hhbmRsZXImIzM0OywKICAgICYjMzQ7YW10X21sZHYyX3JlcG9ydF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O2FtdF9tdWx0aWNhc3RfZGF0YV9oYW5kbGVyJiMzNDssCiAgICAmIzM0O2FtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXImIzM0OywKICAgICYjMzQ7YW10X3VwZGF0ZV9oYW5kbGVyJiMzNDssCiAgICAmIzM0O2FtdF9yY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgdXNlLWFmdGVyLWZyZWUgYW5kIGRhbmdsaW5nIHBvaW50ZXIgYnVncyBpbiB0aGUgQU1UIChBdXRvbWF0aWMgTXVsdGljYXN0IFR1bm5lbGluZykgZHJpdmVyIGNhdXNlZCBieSBgcHNrYl9tYXlfcHVsbGAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zIHJlYWxsb2NhdGluZyB0aGUgc2tiIGhlYWQgd2hpbGUgaG9sZGluZyBwb2ludGVycyB0byBuZXR3b3JrIGhlYWRlcnMuIEl0IGFsc28gYWRkcyBgc2tiX2Nvd19oZWFkYCB0byBwcmV2ZW50IG1vZGlmeWluZyBjbG9uZWQgc2ticy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgbmV0d29yayBkcml2ZXIgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGZ1cnRoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGV4aXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBTVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FtdF9kZXZfeG1pdCYjMzQ7LAogICAgJiMzNDthbXRfaWdtcHYzX3JlcG9ydF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O2FtdF9tbGR2Ml9yZXBvcnRfaGFuZGxlciYjMzQ7LAogICAgJiMzNDthbXRfbXVsdGljYXN0X2RhdGFfaGFuZGxlciYjMzQ7LAogICAgJiMzNDthbXRfbWVtYmVyc2hpcF9xdWVyeV9oYW5kbGVyJiMzNDssCiAgICAmIzM0O2FtdF91cGRhdGVfaGFuZGxlciYjMzQ7LAogICAgJiMzNDthbXRfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIG11bHRpcGxlIHVzZS1hZnRlci1mcmVlIGFuZCBkYW5nbGluZyBwb2ludGVyIGJ1Z3MgaW4gdGhlIEFNVCAoQXV0b21hdGljIE11bHRpY2FzdCBUdW5uZWxpbmcpIGRyaXZlciBjYXVzZWQgYnkgYHBza2JfbWF5X3B1bGxgIGFuZCBzaW1pbGFyIGZ1bmN0aW9ucyByZWFsbG9jYXRpbmcgdGhlIHNrYiBoZWFkIHdoaWxlIGhvbGRpbmcgcG9pbnRlcnMgdG8gbmV0d29yayBoZWFkZXJzLiBJdCBhbHNvIGFkZHMgYHNrYl9jb3dfaGVhZGAgdG8gcHJldmVudCBtb2RpZnlpbmcgY2xvbmVkIHNrYnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIG5ldHdvcmsgZHJpdmVyIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBmdXJ0aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBleGlzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjI1OjEzLjMwMjI4NDM2MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDIxMjQ4Mzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFNVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFtdF9kZXZfeG1pdFwiLFxuICAgIFwiYW10X2lnbXB2M19yZXBvcnRfaGFuZGxlclwiLFxuICAgIFwiYW10X21sZHYyX3JlcG9ydF9oYW5kbGVyXCIsXG4gICAgXCJhbXRfbXVsdGljYXN0X2RhdGFfaGFuZGxlclwiLFxuICAgIFwiYW10X21lbWJlcnNoaXBfcXVlcnlfaGFuZGxlclwiLFxuICAgIFwiYW10X3VwZGF0ZV9oYW5kbGVyXCIsXG4gICAgXCJhbXRfcmN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgdXNlLWFmdGVyLWZyZWUgYW5kIGRhbmdsaW5nIHBvaW50ZXIgYnVncyBpbiB0aGUgQU1UIChBdXRvbWF0aWMgTXVsdGljYXN0IFR1bm5lbGluZykgZHJpdmVyIGNhdXNlZCBieSBgcHNrYl9tYXlfcHVsbGAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zIHJlYWxsb2NhdGluZyB0aGUgc2tiIGhlYWQgd2hpbGUgaG9sZGluZyBwb2ludGVycyB0byBuZXR3b3JrIGhlYWRlcnMuIEl0IGFsc28gYWRkcyBgc2tiX2Nvd19oZWFkYCB0byBwcmV2ZW50IG1vZGlmeWluZyBjbG9uZWQgc2ticy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgbmV0d29yayBkcml2ZXIgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGZ1cnRoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGV4aXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNToyNToxMy4zMDIyODk0MDJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxODA1Njk1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDUzZmJmNjM1NzY5NjA5ZjM0YWQ5YzQ1MGYwMTVlZWY0NjM2NDdjNzhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgOCAwNToyNToxMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hbXQuYyBiL2RyaXZlcnMvbmV0L2FtdC5jXFxuaW5kZXggZjJmMzEzOWUzOGE1OTkuLmY3Mzc1ZTQwYmM4ZjIxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2FtdC5jXFxuKysrIGIvZHJpdmVycy9uZXQvYW10LmNcXG5AQCAtMTIxMSw3ICsxMjExLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFtdF9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRcXHRcXHRkYXRhID0gdHJ1ZTtcXG4gXFx0XFx0fVxcbiBcXHRcXHR2NiA9IGZhbHNlO1xcbi1cXHRcXHRncm91cC5pcDQgPSBpcGgtXFx1MDAzZWRhZGRyO1xcbitcXHRcXHRncm91cC5pcDQgPSBpcF9oZHIoc2tiKS1cXHUwMDNlZGFkZHI7XFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbiBcXHR9IGVsc2UgaWYgKGlwaC1cXHUwMDNldmVyc2lvbiA9PSA2KSB7XFxuIFxcdFxcdGlwNmggPSBpcHY2X2hkcihza2IpO1xcbkBAIC0xMjM1LDcgKzEyMzUsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYW10X2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdFxcdFxcdGRhdGEgPSB0cnVlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHY2ID0gdHJ1ZTtcXG4tXFx0XFx0Z3JvdXAuaXA2ID0gaXA2aC1cXHUwMDNlZGFkZHI7XFxuK1xcdFxcdGdyb3VwLmlwNiA9IGlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyO1xcbiAjZW5kaWZcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0ZGV2LVxcdTAwM2VzdGF0cy50eF9lcnJvcnMrKztcXG5AQCAtMTI3OCwxMiArMTI3OCwxMiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYW10X2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdFxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShnbm9kZSwgXFx1MDAyNnR1bm5lbC1cXHUwMDNlZ3JvdXBzW2hhc2hdLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgbm9kZSkge1xcbiBcXHRcXHRcXHRcXHRpZiAoIXY2KSB7XFxuLVxcdFxcdFxcdFxcdFxcdGlmIChnbm9kZS1cXHUwMDNlZ3JvdXBfYWRkci5pcDQgPT0gaXBoLVxcdTAwM2VkYWRkcilcXG4rXFx0XFx0XFx0XFx0XFx0aWYgKGdub2RlLVxcdTAwM2Vncm91cF9hZGRyLmlwNCA9PSBncm91cC5pcDQpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gZm91bmQ7XFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbiBcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHRcXHRpZiAoaXB2Nl9hZGRyX2VxdWFsKFxcdTAwMjZnbm9kZS1cXHUwMDNlZ3JvdXBfYWRkci5pcDYsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2aXA2aC1cXHUwMDNlZGFkZHIpKVxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmdyb3VwLmlwNikpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gZm91bmQ7XFxuICNlbmRpZlxcbiBcXHRcXHRcXHRcXHR9XFxuQEAgLTIwMDAsMTQgKzIwMDAsMjIgQEAgc3RhdGljIHZvaWQgYW10X2lnbXB2M19yZXBvcnRfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRzdHJ1Y3QgaWdtcHYzX3JlcG9ydCAqaWhydjMgPSBpZ21wdjNfcmVwb3J0X2hkcihza2IpO1xcbiBcXHRpbnQgbGVuID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSArIHNpemVvZigqaWhydjMpO1xcbiBcXHR2b2lkICp6ZXJvX2dyZWMgPSAodm9pZCAqKVxcdTAwMjZpZ21wdjNfemVyb19ncmVjO1xcbi1cXHRzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpO1xcbiBcXHRzdHJ1Y3QgYW10X2dyb3VwX25vZGUgKmdub2RlO1xcbiBcXHR1bmlvbiBhbXRfYWRkciBncm91cCwgaG9zdDtcXG4gXFx0c3RydWN0IGlnbXB2M19ncmVjICpncmVjO1xcbitcXHRfX2JlMzIgc2FkZHI7XFxuIFxcdHUxNiBuc3JjcztcXG4rXFx0dTE2IG5ncmVjO1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudG9ocyhpaHJ2My1cXHUwMDNlbmdyZWMpOyBpKyspIHtcXG4rXFx0LyogaWhydjMgYW5kIGlwX2hkcigpIHBvaW50IGludG8gdGhlIHNrYiBoZWFkLCB3aGljaCB0aGVcXG4rXFx0ICogaXBfbWNfbWF5X3B1bGwoKSBjYWxscyBiZWxvdyBjYW4gcmVhbGxvY2F0ZS4gIFJlYWQgZXZlcnkgZmllbGRcXG4rXFx0ICogdGhhdCBpcyB1c2VkIGFmdGVyIGEgcHVsbCBiZWZvcmUgdGhlIGZpcnN0IG9uZSBydW5zLlxcbitcXHQgKi9cXG4rXFx0c2FkZHIgPSBpcF9oZHIoc2tiKS1cXHUwMDNlc2FkZHI7XFxuK1xcdG5ncmVjID0gbnRvaHMoaWhydjMtXFx1MDAzZW5ncmVjKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuZ3JlYzsgaSsrKSB7XFxuIFxcdFxcdGxlbiArPSBzaXplb2YoKmdyZWMpO1xcbiBcXHRcXHRpZiAoIWlwX21jX21heV9wdWxsKHNrYiwgbGVuKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTIwMTksMTAgKzIwMjcsMTQgQEAgc3RhdGljIHZvaWQgYW10X2lnbXB2M19yZXBvcnRfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRpZiAoIWlwX21jX21heV9wdWxsKHNrYiwgbGVuKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbitcXHRcXHQvKiBpcF9tY19tYXlfcHVsbCgpIG1heSBoYXZlIHJlYWxsb2NhdGVkIHRoZSBoZWFkLiAqL1xcbitcXHRcXHRncmVjID0gKHZvaWQgKikoc2tiLVxcdTAwM2VkYXRhICsgbGVuIC0gc2l6ZW9mKCpncmVjKSAtXFxuK1xcdFxcdFxcdFxcdG5zcmNzICogc2l6ZW9mKF9fYmUzMikpO1xcbitcXG4gXFx0XFx0bWVtc2V0KFxcdTAwMjZncm91cCwgMCwgc2l6ZW9mKHVuaW9uIGFtdF9hZGRyKSk7XFxuIFxcdFxcdGdyb3VwLmlwNCA9IGdyZWMtXFx1MDAzZWdyZWNfbWNhO1xcbiBcXHRcXHRtZW1zZXQoXFx1MDAyNmhvc3QsIDAsIHNpemVvZih1bmlvbiBhbXRfYWRkcikpO1xcbi1cXHRcXHRob3N0LmlwNCA9IGlwaC1cXHUwMDNlc2FkZHI7XFxuK1xcdFxcdGhvc3QuaXA0ID0gc2FkZHI7XFxuIFxcdFxcdGdub2RlID0gYW10X2xvb2t1cF9ncm91cCh0dW5uZWwsIFxcdTAwMjZncm91cCwgXFx1MDAyNmhvc3QsIGZhbHNlKTtcXG4gXFx0XFx0aWYgKCFnbm9kZSkge1xcbiBcXHRcXHRcXHRnbm9kZSA9IGFtdF9hZGRfZ3JvdXAoYW10LCB0dW5uZWwsIFxcdTAwMjZncm91cCwgXFx1MDAyNmhvc3QsXFxuQEAgLTIxNjIsMTQgKzIxNzQsMjIgQEAgc3RhdGljIHZvaWQgYW10X21sZHYyX3JlcG9ydF9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHN0cnVjdCBtbGQyX3JlcG9ydCAqbWxkMnIgPSAoc3RydWN0IG1sZDJfcmVwb3J0ICopaWNtcDZfaGRyKHNrYik7XFxuIFxcdGludCBsZW4gPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgc2l6ZW9mKCptbGQycik7XFxuIFxcdHZvaWQgKnplcm9fZ3JlYyA9ICh2b2lkICopXFx1MDAyNm1sZHYyX3plcm9fZ3JlYztcXG4tXFx0c3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpO1xcbiBcXHRzdHJ1Y3QgYW10X2dyb3VwX25vZGUgKmdub2RlO1xcbiBcXHR1bmlvbiBhbXRfYWRkciBncm91cCwgaG9zdDtcXG4gXFx0c3RydWN0IG1sZDJfZ3JlYyAqZ3JlYztcXG4rXFx0c3RydWN0IGluNl9hZGRyIHNhZGRyO1xcbiBcXHR1MTYgbnNyY3M7XFxuK1xcdHUxNiBuZ3JlYztcXG4gXFx0aW50IGk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnRvaHMobWxkMnItXFx1MDAzZW1sZDJyX25ncmVjKTsgaSsrKSB7XFxuK1xcdC8qIG1sZDJyIGFuZCBpcHY2X2hkcigpIHBvaW50IGludG8gdGhlIHNrYiBoZWFkLCB3aGljaCB0aGVcXG4rXFx0ICogaXB2Nl9tY19tYXlfcHVsbCgpIGNhbGxzIGJlbG93IGNhbiByZWFsbG9jYXRlLiAgUmVhZCBldmVyeSBmaWVsZFxcbitcXHQgKiB0aGF0IGlzIHVzZWQgYWZ0ZXIgYSBwdWxsIGJlZm9yZSB0aGUgZmlyc3Qgb25lIHJ1bnMuXFxuK1xcdCAqL1xcbitcXHRzYWRkciA9IGlwdjZfaGRyKHNrYiktXFx1MDAzZXNhZGRyO1xcbitcXHRuZ3JlYyA9IG50b2hzKG1sZDJyLVxcdTAwM2VtbGQycl9uZ3JlYyk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbmdyZWM7IGkrKykge1xcbiBcXHRcXHRsZW4gKz0gc2l6ZW9mKCpncmVjKTtcXG4gXFx0XFx0aWYgKCFpcHY2X21jX21heV9wdWxsKHNrYiwgbGVuKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTIxODEsMTAgKzIyMDEsMTQgQEAgc3RhdGljIHZvaWQgYW10X21sZHYyX3JlcG9ydF9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdGlmICghaXB2Nl9tY19tYXlfcHVsbChza2IsIGxlbikpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4rXFx0XFx0LyogaXB2Nl9tY19tYXlfcHVsbCgpIG1heSBoYXZlIHJlYWxsb2NhdGVkIHRoZSBoZWFkLiAqL1xcbitcXHRcXHRncmVjID0gKHZvaWQgKikoc2tiLVxcdTAwM2VkYXRhICsgbGVuIC0gc2l6ZW9mKCpncmVjKSAtXFxuK1xcdFxcdFxcdFxcdG5zcmNzICogc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpO1xcbitcXG4gXFx0XFx0bWVtc2V0KFxcdTAwMjZncm91cCwgMCwgc2l6ZW9mKHVuaW9uIGFtdF9hZGRyKSk7XFxuIFxcdFxcdGdyb3VwLmlwNiA9IGdyZWMtXFx1MDAzZWdyZWNfbWNhO1xcbiBcXHRcXHRtZW1zZXQoXFx1MDAyNmhvc3QsIDAsIHNpemVvZih1bmlvbiBhbXRfYWRkcikpO1xcbi1cXHRcXHRob3N0LmlwNiA9IGlwNmgtXFx1MDAzZXNhZGRyO1xcbitcXHRcXHRob3N0LmlwNiA9IHNhZGRyO1xcbiBcXHRcXHRnbm9kZSA9IGFtdF9sb29rdXBfZ3JvdXAodHVubmVsLCBcXHUwMDI2Z3JvdXAsIFxcdTAwMjZob3N0LCB0cnVlKTtcXG4gXFx0XFx0aWYgKCFnbm9kZSkge1xcbiBcXHRcXHRcXHRnbm9kZSA9IGFtdF9hZGRfZ3JvdXAoYW10LCB0dW5uZWwsIFxcdTAwMjZncm91cCwgXFx1MDAyNmhvc3QsXFxuQEAgLTIzMDUsNyArMjMyOSwxMiBAQCBzdGF0aWMgYm9vbCBhbXRfbXVsdGljYXN0X2RhdGFfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRza2JfcHVzaChza2IsIHNpemVvZigqZXRoKSk7XFxuIFxcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XFxuIFxcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpldGgpKTtcXG4tXFx0ZXRoID0gZXRoX2hkcihza2IpO1xcbitcXG4rXFx0LyogVGhlIEwyIGhlYWRlciBpcyByZXdyaXR0ZW4gYmVsb3c7IG1ha2UgdGhlIGhlYWQgcHJpdmF0ZSBmaXJzdCBzbyBhXFxuK1xcdCAqIGNsb25lZCBza2IgKGZvciBleGFtcGxlIG9uZSB0YWtlbiBieSBhIHBhY2tldCB0YXApIGlzIG5vdCBtb2RpZmllZC5cXG4rXFx0ICovXFxuK1xcdGlmIChza2JfY293X2hlYWQoc2tiLCAwKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwaCkpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5AQCAtMjMxNSw2ICsyMzQ0LDggQEAgc3RhdGljIGJvb2wgYW10X211bHRpY2FzdF9kYXRhX2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0aWYgKCFpcHY0X2lzX211bHRpY2FzdChpcGgtXFx1MDAzZWRhZGRyKSlcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XFxuK1xcdFxcdC8qIHBza2JfbWF5X3B1bGwoKSBhYm92ZSBtYXkgaGF2ZSByZWFsbG9jYXRlZCB0aGUgaGVhZC4gKi9cXG4rXFx0XFx0ZXRoID0gZXRoX2hkcihza2IpO1xcbiBcXHRcXHRldGgtXFx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XFxuIFxcdFxcdGlwX2V0aF9tY19tYXAoaXBoLVxcdTAwM2VkYWRkciwgZXRoLVxcdTAwM2VoX2Rlc3QpO1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5AQCAtMjMyOCw2ICsyMzU5LDggQEAgc3RhdGljIGJvb2wgYW10X211bHRpY2FzdF9kYXRhX2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0aWYgKCFpcHY2X2FkZHJfaXNfbXVsdGljYXN0KFxcdTAwMjZpcDZoLVxcdTAwM2VkYWRkcikpXFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVBWNik7XFxuK1xcdFxcdC8qIHBza2JfbWF5X3B1bGwoKSBhYm92ZSBtYXkgaGF2ZSByZWFsbG9jYXRlZCB0aGUgaGVhZC4gKi9cXG4rXFx0XFx0ZXRoID0gZXRoX2hkcihza2IpO1xcbiBcXHRcXHRldGgtXFx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcXG4gXFx0XFx0aXB2Nl9ldGhfbWNfbWFwKFxcdTAwMjZpcDZoLVxcdTAwM2VkYWRkciwgZXRoLVxcdTAwM2VoX2Rlc3QpO1xcbiAjZW5kaWZcXG5AQCAtMjM1Myw4ICsyMzg2LDEwIEBAIHN0YXRpYyBib29sIGFtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCxcXG4gXFx0c3RydWN0IGFtdF9oZWFkZXJfbWVtYmVyc2hpcF9xdWVyeSAqYW10bXE7XFxuIFxcdHN0cnVjdCBpZ21wdjNfcXVlcnkgKmlodjM7XFxuIFxcdHN0cnVjdCBldGhoZHIgKmV0aCwgKm9ldGg7XFxuK1xcdHU4IGhfc291cmNlW0VUSF9BTEVOXTtcXG4gXFx0c3RydWN0IGlwaGRyICppcGg7XFxuIFxcdGludCBoZHJfc2l6ZSwgbGVuO1xcbitcXHR1NjQgcmVzcG9uc2VfbWFjO1xcbiBcXG4gXFx0aGRyX3NpemUgPSBzaXplb2YoKmFtdG1xKSArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcXG4gXFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGRyX3NpemUpKVxcbkBAIC0yMzY3LDYgKzI0MDIsMTIgQEAgc3RhdGljIGJvb2wgYW10X21lbWJlcnNoaXBfcXVlcnlfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LFxcbiBcXHRpZiAoYW10bXEtXFx1MDAzZW5vbmNlICE9IGFtdC1cXHUwMDNlbm9uY2UpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4rXFx0LyogaXB0dW5uZWxfcHVsbF9oZWFkZXIoKSBhbmQgdGhlIHBza2JfbWF5X3B1bGwoKSBjYWxscyBiZWxvdyBjYW5cXG4rXFx0ICogcmVhbGxvY2F0ZSB0aGUgc2tiIGhlYWQsIHNvIGFtdG1xIHdvdWxkIGRhbmdsZS4gIFNuYXBzaG90IHRoZSBvbmx5XFxuK1xcdCAqIGZpZWxkIHVzZWQgYWZ0ZXJ3YXJkcy5cXG4rXFx0ICovXFxuK1xcdHJlc3BvbnNlX21hYyA9IGFtdG1xLVxcdTAwM2VyZXNwb25zZV9tYWM7XFxuK1xcbiBcXHRoZHJfc2l6ZSAtPSBzaXplb2YoKmV0aCk7XFxuIFxcdGlmIChpcHR1bm5lbF9wdWxsX2hlYWRlcihza2IsIGhkcl9zaXplLCBodG9ucyhFVEhfUF9URUIpLCBmYWxzZSkpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbkBAIC0yMzc2LDYgKzI0MTcsMTMgQEAgc3RhdGljIGJvb2wgYW10X21lbWJlcnNoaXBfcXVlcnlfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LFxcbiBcXHRza2JfcHVsbChza2IsIHNpemVvZigqZXRoKSk7XFxuIFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiBcXHRldGggPSBldGhfaGRyKHNrYik7XFxuK1xcdC8qIFNuYXBzaG90IHRoZSBvdXRlciBzb3VyY2UgTUFDIGJlZm9yZSBhIGxhdGVyIHB1bGwgY2FuIGZyZWUgaXQuICovXFxuK1xcdGV0aGVyX2FkZHJfY29weShoX3NvdXJjZSwgb2V0aC1cXHUwMDNlaF9zb3VyY2UpO1xcbitcXHQvKiBUaGUgTDIgaGVhZGVyIGlzIHJld3JpdHRlbiBiZWxvdzsgbWFrZSB0aGUgaGVhZCBwcml2YXRlIGZpcnN0IHNvIGFcXG4rXFx0ICogY2xvbmVkIHNrYiAoZm9yIGV4YW1wbGUgb25lIHRha2VuIGJ5IGEgcGFja2V0IHRhcCkgaXMgbm90IG1vZGlmaWVkLlxcbitcXHQgKi9cXG4rXFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIDApKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCppcGgpKSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbkBAIC0yMzg4LDYgKzI0MzYsOCBAQCBzdGF0aWMgYm9vbCBhbXRfbWVtYmVyc2hpcF9xdWVyeV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsXFxuIFxcdFxcdFxcdFxcdCAgIHNpemVvZigqaWh2MykpKVxcbiBcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuK1xcdFxcdC8qIHBza2JfbWF5X3B1bGwoKSBhYm92ZSBtYXkgaGF2ZSByZWFsbG9jYXRlZCB0aGUgaGVhZC4gKi9cXG4rXFx0XFx0aXBoID0gaXBfaGRyKHNrYik7XFxuIFxcdFxcdGlmICghaXB2NF9pc19tdWx0aWNhc3QoaXBoLVxcdTAwM2VkYWRkcikpXFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG5AQCAtMjM5NSwxMCArMjQ0NSwxMSBAQCBzdGF0aWMgYm9vbCBhbXRfbWVtYmVyc2hpcF9xdWVyeV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsXFxuIFxcdFxcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuIFxcdFxcdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCppcGgpICsgQU1UX0lQSERSX09QVFMpO1xcbiBcXHRcXHRXUklURV9PTkNFKGFtdC1cXHUwMDNlcmVhZHk0LCB0cnVlKTtcXG4tXFx0XFx0YW10LVxcdTAwM2VtYWMgPSBhbXRtcS1cXHUwMDNlcmVzcG9uc2VfbWFjO1xcbitcXHRcXHRhbXQtXFx1MDAzZW1hYyA9IHJlc3BvbnNlX21hYztcXG4gXFx0XFx0YW10LVxcdTAwM2VyZXFfY250ID0gMDtcXG4gXFx0XFx0YW10LVxcdTAwM2VxaSA9IGlodjMtXFx1MDAzZXFxaWM7XFxuIFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XFxuK1xcdFxcdGV0aCA9IGV0aF9oZHIoc2tiKTtcXG4gXFx0XFx0ZXRoLVxcdTAwM2VoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVApO1xcbiBcXHRcXHRpcF9ldGhfbWNfbWFwKGlwaC1cXHUwMDNlZGFkZHIsIGV0aC1cXHUwMDNlaF9kZXN0KTtcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuQEAgLTI0MjEsMTAgKzI0NzIsMTEgQEAgc3RhdGljIGJvb2wgYW10X21lbWJlcnNoaXBfcXVlcnlfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LFxcbiBcXHRcXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbiBcXHRcXHRza2JfcHVzaChza2IsIHNpemVvZigqaXA2aCkgKyBBTVRfSVA2SERSX09QVFMpO1xcbiBcXHRcXHRXUklURV9PTkNFKGFtdC1cXHUwMDNlcmVhZHk2LCB0cnVlKTtcXG4tXFx0XFx0YW10LVxcdTAwM2VtYWMgPSBhbXRtcS1cXHUwMDNlcmVzcG9uc2VfbWFjO1xcbitcXHRcXHRhbXQtXFx1MDAzZW1hYyA9IHJlc3BvbnNlX21hYztcXG4gXFx0XFx0YW10LVxcdTAwM2VyZXFfY250ID0gMDtcXG4gXFx0XFx0YW10LVxcdTAwM2VxaSA9IG1sZDJxLVxcdTAwM2VtbGQycV9xcWljO1xcbiBcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVBWNik7XFxuK1xcdFxcdGV0aCA9IGV0aF9oZHIoc2tiKTtcXG4gXFx0XFx0ZXRoLVxcdTAwM2VoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVBWNik7XFxuIFxcdFxcdGlwdjZfZXRoX21jX21hcChcXHUwMDI2aXA2aC1cXHUwMDNlZGFkZHIsIGV0aC1cXHUwMDNlaF9kZXN0KTtcXG4gI2VuZGlmXFxuQEAgLTI0MzIsNyArMjQ4NCw3IEBAIHN0YXRpYyBib29sIGFtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCxcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdGV0aGVyX2FkZHJfY29weShldGgtXFx1MDAzZWhfc291cmNlLCBvZXRoLVxcdTAwM2VoX3NvdXJjZSk7XFxuK1xcdGV0aGVyX2FkZHJfY29weShldGgtXFx1MDAzZWhfc291cmNlLCBoX3NvdXJjZSk7XFxuIFxcdHNrYi1cXHUwMDNlcGt0X3R5cGUgPSBQQUNLRVRfTVVMVElDQVNUO1xcbiBcXHRza2ItXFx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7XFxuIFxcdGxlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbkBAIC0yNDU1LDggKzI1MDcsMTMgQEAgc3RhdGljIGJvb2wgYW10X3VwZGF0ZV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdHN0cnVjdCBldGhoZHIgKmV0aDtcXG4gXFx0c3RydWN0IGlwaGRyICppcGg7XFxuIFxcdGludCBsZW4sIGhkcl9zaXplO1xcbitcXHRfX2JlMzIgc2FkZHI7XFxuIFxcbi1cXHRpcGggPSBpcF9oZHIoc2tiKTtcXG4rXFx0LyogaXBfaGRyKCkgcG9pbnRzIGludG8gdGhlIHNrYiBoZWFkLCB3aGljaCB0aGUgcHNrYl9tYXlfcHVsbCgpIC9cXG4rXFx0ICogaXB0dW5uZWxfcHVsbF9oZWFkZXIoKSBjYWxscyBiZWxvdyBjYW4gcmVhbGxvY2F0ZS4gIFNuYXBzaG90IHRoZVxcbitcXHQgKiBzb3VyY2UgYWRkcmVzcyB1c2VkIGZvciB0aGUgdHVubmVsIGxvb2t1cCBiZWZvcmUgdGhlIGZpcnN0IHB1bGwuXFxuK1xcdCAqL1xcbitcXHRzYWRkciA9IGlwX2hkcihza2IpLVxcdTAwM2VzYWRkcjtcXG4gXFxuIFxcdGhkcl9zaXplID0gc2l6ZW9mKCphbXRtdSkgKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7XFxuIFxcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGhkcl9zaXplKSlcXG5AQCAtMjQ3Miw3ICsyNTI5LDcgQEAgc3RhdGljIGJvb2wgYW10X3VwZGF0ZV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodHVubmVsLCBcXHUwMDI2YW10LVxcdTAwM2V0dW5uZWxfbGlzdCwgbGlzdCkge1xcbi1cXHRcXHRpZiAodHVubmVsLVxcdTAwM2VpcDQgPT0gaXBoLVxcdTAwM2VzYWRkcikge1xcbitcXHRcXHRpZiAodHVubmVsLVxcdTAwM2VpcDQgPT0gc2FkZHIpIHtcXG4gXFx0XFx0XFx0aWYgKChhbXRtdS1cXHUwMDNlbm9uY2UgPT0gdHVubmVsLVxcdTAwM2Vub25jZSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgIGFtdG11LVxcdTAwM2VyZXNwb25zZV9tYWMgPT0gdHVubmVsLVxcdTAwM2VtYWMpKSB7XFxuIFxcdFxcdFxcdFxcdG1vZF9kZWxheWVkX3dvcmsoYW10X3dxLCBcXHUwMDI2dHVubmVsLVxcdTAwM2VnY193cSxcXG5AQCAtMjQ5Miw2ICsyNTQ5LDEyIEBAIHN0YXRpYyBib29sIGFtdF91cGRhdGVfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwaCkpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuK1xcdC8qIFRoZSBMMiBoZWFkZXIgaXMgcmV3cml0dGVuIGJlbG93OyBtYWtlIHRoZSBoZWFkIHByaXZhdGUgZmlyc3Qgc28gYVxcbitcXHQgKiBjbG9uZWQgc2tiIChmb3IgZXhhbXBsZSBvbmUgdGFrZW4gYnkgYSBwYWNrZXQgdGFwKSBpcyBub3QgbW9kaWZpZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMCkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4gXFx0aXBoID0gaXBfaGRyKHNrYik7XFxuIFxcdGlmIChpcGgtXFx1MDAzZXZlcnNpb24gPT0gNCkge1xcbiBcXHRcXHRpZiAoaXBfbWNfY2hlY2tfaWdtcChza2IpKSB7XFxuQEAgLTI1MDgsNiArMjU3MSwxMCBAQCBzdGF0aWMgYm9vbCBhbXRfdXBkYXRlX2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0ZXRoID0gZXRoX2hkcihza2IpO1xcbiBcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApO1xcbiBcXHRcXHRldGgtXFx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XFxuK1xcdFxcdC8qIGlwX21jX2NoZWNrX2lnbXAoKSBhbmQgdGhlIHJlcG9ydCBoYW5kbGVyIG1heSBoYXZlXFxuK1xcdFxcdCAqIHJlYWxsb2NhdGVkIHRoZSBoZWFkOyByZS1kZXJpdmUgaXBoLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aXBoID0gaXBfaGRyKHNrYik7XFxuIFxcdFxcdGlwX2V0aF9tY19tYXAoaXBoLVxcdTAwM2VkYWRkciwgZXRoLVxcdTAwM2VoX2Rlc3QpO1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4gXFx0fSBlbHNlIGlmIChpcGgtXFx1MDAzZXZlcnNpb24gPT0gNikge1xcbkBAIC0yNTI3LDYgKzI1OTQsMTAgQEAgc3RhdGljIGJvb2wgYW10X3VwZGF0ZV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdGV0aCA9IGV0aF9oZHIoc2tiKTtcXG4gXFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xcbiBcXHRcXHRldGgtXFx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcXG4rXFx0XFx0LyogaXB2Nl9tY19jaGVja19tbGQoKSBhbmQgdGhlIHJlcG9ydCBoYW5kbGVyIG1heSBoYXZlXFxuK1xcdFxcdCAqIHJlYWxsb2NhdGVkIHRoZSBoZWFkOyByZS1kZXJpdmUgaXA2aC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlwNmggPSBpcHY2X2hkcihza2IpO1xcbiBcXHRcXHRpcHY2X2V0aF9tY19tYXAoXFx1MDAyNmlwNmgtXFx1MDAzZWRhZGRyLCBldGgtXFx1MDAzZWhfZGVzdCk7XFxuICNlbmRpZlxcbiBcXHR9IGVsc2Uge1xcbkBAIC0yNzcyLDcgKzI4NDMsNyBAQCBzdGF0aWMgdm9pZCBhbXRfZ3dfcmN2KHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IpXFxuIHN0YXRpYyBpbnQgYW10X3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4gXFx0c3RydWN0IGFtdF9kZXYgKmFtdDtcXG4tXFx0c3RydWN0IGlwaGRyICppcGg7XFxuK1xcdF9fYmUzMiBzYWRkcjtcXG4gXFx0aW50IHR5cGU7XFxuIFxcdGJvb2wgZXJyO1xcbiBcXG5AQCAtMjc4NSw3ICsyODU2LDExIEBAIHN0YXRpYyBpbnQgYW10X3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdH1cXG4gXFxuIFxcdHNrYi1cXHUwMDNlZGV2ID0gYW10LVxcdTAwM2VkZXY7XFxuLVxcdGlwaCA9IGlwX2hkcihza2IpO1xcbitcXHQvKiBhbXRfcGFyc2VfdHlwZSgpIGNhbGxzIHBza2JfbWF5X3B1bGwoKSwgd2hpY2ggY2FuIHJlYWxsb2NhdGUgdGhlXFxuK1xcdCAqIHNrYiBoZWFkIGFuZCBsZWF2ZSBhIGNhY2hlZCBpcF9oZHIoKSBkYW5nbGluZy4gIFNuYXBzaG90IHRoZSBzb3VyY2VcXG4rXFx0ICogYWRkcmVzcyB1c2VkIGJlbG93IGJlZm9yZSB0aGUgcHVsbC5cXG4rXFx0ICovXFxuK1xcdHNhZGRyID0gaXBfaGRyKHNrYiktXFx1MDAzZXNhZGRyO1xcbiBcXHR0eXBlID0gYW10X3BhcnNlX3R5cGUoc2tiKTtcXG4gXFx0aWYgKHR5cGUgPT0gLTEpIHtcXG4gXFx0XFx0ZXJyID0gdHJ1ZTtcXG5AQCAtMjc5NSw3ICsyODcwLDcgQEAgc3RhdGljIGludCBhbXRfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0aWYgKGFtdC1cXHUwMDNlbW9kZSA9PSBBTVRfTU9ERV9HQVRFV0FZKSB7XFxuIFxcdFxcdHN3aXRjaCAodHlwZSkge1xcbiBcXHRcXHRjYXNlIEFNVF9NU0dfQURWRVJUSVNFTUVOVDpcXG4tXFx0XFx0XFx0aWYgKGlwaC1cXHUwMDNlc2FkZHIgIT0gYW10LVxcdTAwM2VkaXNjb3ZlcnlfaXApIHtcXG4rXFx0XFx0XFx0aWYgKHNhZGRyICE9IGFtdC1cXHUwMDNlZGlzY292ZXJ5X2lwKSB7XFxuIFxcdFxcdFxcdFxcdG5ldGRldl9kYmcoYW10LVxcdTAwM2VkZXYsIFxcXCJJbnZhbGlkIFJlbGF5IElQXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0XFx0ZXJyID0gdHJ1ZTtcXG4gXFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbkBAIC0yODA3LDcgKzI4ODIsNyBAQCBzdGF0aWMgaW50IGFtdF9yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHRjYXNlIEFNVF9NU0dfTVVMVElDQVNUX0RBVEE6XFxuLVxcdFxcdFxcdGlmIChpcGgtXFx1MDAzZXNhZGRyICE9IGFtdC1cXHUwMDNlcmVtb3RlX2lwKSB7XFxuK1xcdFxcdFxcdGlmIChzYWRkciAhPSBhbXQtXFx1MDAzZXJlbW90ZV9pcCkge1xcbiBcXHRcXHRcXHRcXHRuZXRkZXZfZGJnKGFtdC1cXHUwMDNlZGV2LCBcXFwiSW52YWxpZCBSZWxheSBJUFxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdFxcdGVyciA9IHRydWU7XFxuIFxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG5AQCAtMjgxOCw3ICsyODkzLDcgQEAgc3RhdGljIGludCBhbXRfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0Y2FzZSBBTVRfTVNHX01FTUJFUlNISVBfUVVFUlk6XFxuLVxcdFxcdFxcdGlmIChpcGgtXFx1MDAzZXNhZGRyICE9IGFtdC1cXHUwMDNlcmVtb3RlX2lwKSB7XFxuK1xcdFxcdFxcdGlmIChzYWRkciAhPSBhbXQtXFx1MDAzZXJlbW90ZV9pcCkge1xcbiBcXHRcXHRcXHRcXHRuZXRkZXZfZGJnKGFtdC1cXHUwMDNlZGV2LCBcXFwiSW52YWxpZCBSZWxheSBJUFxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdFxcdGVyciA9IHRydWU7XFxuIFxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDU6MjU6MTMuOTIwOTMwNjkyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDgwMjU5MTQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBTVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbXRfZGV2X3htaXRcIixcbiAgICBcImFtdF9pZ21wdjNfcmVwb3J0X2hhbmRsZXJcIixcbiAgICBcImFtdF9tbGR2Ml9yZXBvcnRfaGFuZGxlclwiLFxuICAgIFwiYW10X211bHRpY2FzdF9kYXRhX2hhbmRsZXJcIixcbiAgICBcImFtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXJcIixcbiAgICBcImFtdF91cGRhdGVfaGFuZGxlclwiLFxuICAgIFwiYW10X3JjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG11bHRpcGxlIHVzZS1hZnRlci1mcmVlIGFuZCBkYW5nbGluZyBwb2ludGVyIGJ1Z3MgaW4gdGhlIEFNVCAoQXV0b21hdGljIE11bHRpY2FzdCBUdW5uZWxpbmcpIGRyaXZlciBjYXVzZWQgYnkgYHBza2JfbWF5X3B1bGxgIGFuZCBzaW1pbGFyIGZ1bmN0aW9ucyByZWFsbG9jYXRpbmcgdGhlIHNrYiBoZWFkIHdoaWxlIGhvbGRpbmcgcG9pbnRlcnMgdG8gbmV0d29yayBoZWFkZXJzLiBJdCBhbHNvIGFkZHMgYHNrYl9jb3dfaGVhZGAgdG8gcHJldmVudCBtb2RpZnlpbmcgY2xvbmVkIHNrYnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIG5ldHdvcmsgZHJpdmVyIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBmdXJ0aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBleGlzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1M2ZiZjYzNTc2OTYwOWYzNGFkOWM0NTBmMDE1ZWVmNDYzNjQ3Yzc4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAwNToyNToxMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FtdC5jIGIvZHJpdmVycy9uZXQvYW10LmNcbmluZGV4IGYyZjMxMzllMzhhNTk5Li5mNzM3NWU0MGJjOGYyMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2FtdC5jXG4rKysgYi9kcml2ZXJzL25ldC9hbXQuY1xuQEAgLTEyMTEsNyArMTIxMSw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhbXRfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0XHRkYXRhID0gdHJ1ZTtcbiBcdFx0fVxuIFx0XHR2NiA9IGZhbHNlO1xuLVx0XHRncm91cC5pcDQgPSBpcGgtXHUwMDNlZGFkZHI7XG4rXHRcdGdyb3VwLmlwNCA9IGlwX2hkcihza2IpLVx1MDAzZWRhZGRyO1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuIFx0fSBlbHNlIGlmIChpcGgtXHUwMDNldmVyc2lvbiA9PSA2KSB7XG4gXHRcdGlwNmggPSBpcHY2X2hkcihza2IpO1xuQEAgLTEyMzUsNyArMTIzNSw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhbXRfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0XHRkYXRhID0gdHJ1ZTtcbiBcdFx0fVxuIFx0XHR2NiA9IHRydWU7XG4tXHRcdGdyb3VwLmlwNiA9IGlwNmgtXHUwMDNlZGFkZHI7XG4rXHRcdGdyb3VwLmlwNiA9IGlwdjZfaGRyKHNrYiktXHUwMDNlZGFkZHI7XG4gI2VuZGlmXG4gXHR9IGVsc2Uge1xuIFx0XHRkZXYtXHUwMDNlc3RhdHMudHhfZXJyb3JzKys7XG5AQCAtMTI3OCwxMiArMTI3OCwxMiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYW10X2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGdub2RlLCBcdTAwMjZ0dW5uZWwtXHUwMDNlZ3JvdXBzW2hhc2hdLFxuIFx0XHRcdFx0XHRcdCBub2RlKSB7XG4gXHRcdFx0XHRpZiAoIXY2KSB7XG4tXHRcdFx0XHRcdGlmIChnbm9kZS1cdTAwM2Vncm91cF9hZGRyLmlwNCA9PSBpcGgtXHUwMDNlZGFkZHIpXG4rXHRcdFx0XHRcdGlmIChnbm9kZS1cdTAwM2Vncm91cF9hZGRyLmlwNCA9PSBncm91cC5pcDQpXG4gXHRcdFx0XHRcdFx0Z290byBmb3VuZDtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiBcdFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRcdGlmIChpcHY2X2FkZHJfZXF1YWwoXHUwMDI2Z25vZGUtXHUwMDNlZ3JvdXBfYWRkci5pcDYsXG4tXHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2aXA2aC1cdTAwM2VkYWRkcikpXG4rXHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2Z3JvdXAuaXA2KSlcbiBcdFx0XHRcdFx0XHRnb3RvIGZvdW5kO1xuICNlbmRpZlxuIFx0XHRcdFx0fVxuQEAgLTIwMDAsMTQgKzIwMDAsMjIgQEAgc3RhdGljIHZvaWQgYW10X2lnbXB2M19yZXBvcnRfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGlnbXB2M19yZXBvcnQgKmlocnYzID0gaWdtcHYzX3JlcG9ydF9oZHIoc2tiKTtcbiBcdGludCBsZW4gPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgc2l6ZW9mKCppaHJ2Myk7XG4gXHR2b2lkICp6ZXJvX2dyZWMgPSAodm9pZCAqKVx1MDAyNmlnbXB2M196ZXJvX2dyZWM7XG4tXHRzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpO1xuIFx0c3RydWN0IGFtdF9ncm91cF9ub2RlICpnbm9kZTtcbiBcdHVuaW9uIGFtdF9hZGRyIGdyb3VwLCBob3N0O1xuIFx0c3RydWN0IGlnbXB2M19ncmVjICpncmVjO1xuK1x0X19iZTMyIHNhZGRyO1xuIFx0dTE2IG5zcmNzO1xuK1x0dTE2IG5ncmVjO1xuIFx0aW50IGk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudG9ocyhpaHJ2My1cdTAwM2VuZ3JlYyk7IGkrKykge1xuK1x0LyogaWhydjMgYW5kIGlwX2hkcigpIHBvaW50IGludG8gdGhlIHNrYiBoZWFkLCB3aGljaCB0aGVcbitcdCAqIGlwX21jX21heV9wdWxsKCkgY2FsbHMgYmVsb3cgY2FuIHJlYWxsb2NhdGUuICBSZWFkIGV2ZXJ5IGZpZWxkXG4rXHQgKiB0aGF0IGlzIHVzZWQgYWZ0ZXIgYSBwdWxsIGJlZm9yZSB0aGUgZmlyc3Qgb25lIHJ1bnMuXG4rXHQgKi9cbitcdHNhZGRyID0gaXBfaGRyKHNrYiktXHUwMDNlc2FkZHI7XG4rXHRuZ3JlYyA9IG50b2hzKGlocnYzLVx1MDAzZW5ncmVjKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5ncmVjOyBpKyspIHtcbiBcdFx0bGVuICs9IHNpemVvZigqZ3JlYyk7XG4gXHRcdGlmICghaXBfbWNfbWF5X3B1bGwoc2tiLCBsZW4pKVxuIFx0XHRcdGJyZWFrO1xuQEAgLTIwMTksMTAgKzIwMjcsMTQgQEAgc3RhdGljIHZvaWQgYW10X2lnbXB2M19yZXBvcnRfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRpZiAoIWlwX21jX21heV9wdWxsKHNrYiwgbGVuKSlcbiBcdFx0XHRicmVhaztcbiBcbitcdFx0LyogaXBfbWNfbWF5X3B1bGwoKSBtYXkgaGF2ZSByZWFsbG9jYXRlZCB0aGUgaGVhZC4gKi9cbitcdFx0Z3JlYyA9ICh2b2lkICopKHNrYi1cdTAwM2VkYXRhICsgbGVuIC0gc2l6ZW9mKCpncmVjKSAtXG4rXHRcdFx0XHRuc3JjcyAqIHNpemVvZihfX2JlMzIpKTtcbitcbiBcdFx0bWVtc2V0KFx1MDAyNmdyb3VwLCAwLCBzaXplb2YodW5pb24gYW10X2FkZHIpKTtcbiBcdFx0Z3JvdXAuaXA0ID0gZ3JlYy1cdTAwM2VncmVjX21jYTtcbiBcdFx0bWVtc2V0KFx1MDAyNmhvc3QsIDAsIHNpemVvZih1bmlvbiBhbXRfYWRkcikpO1xuLVx0XHRob3N0LmlwNCA9IGlwaC1cdTAwM2VzYWRkcjtcbitcdFx0aG9zdC5pcDQgPSBzYWRkcjtcbiBcdFx0Z25vZGUgPSBhbXRfbG9va3VwX2dyb3VwKHR1bm5lbCwgXHUwMDI2Z3JvdXAsIFx1MDAyNmhvc3QsIGZhbHNlKTtcbiBcdFx0aWYgKCFnbm9kZSkge1xuIFx0XHRcdGdub2RlID0gYW10X2FkZF9ncm91cChhbXQsIHR1bm5lbCwgXHUwMDI2Z3JvdXAsIFx1MDAyNmhvc3QsXG5AQCAtMjE2MiwxNCArMjE3NCwyMiBAQCBzdGF0aWMgdm9pZCBhbXRfbWxkdjJfcmVwb3J0X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBtbGQyX3JlcG9ydCAqbWxkMnIgPSAoc3RydWN0IG1sZDJfcmVwb3J0ICopaWNtcDZfaGRyKHNrYik7XG4gXHRpbnQgbGVuID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSArIHNpemVvZigqbWxkMnIpO1xuIFx0dm9pZCAqemVyb19ncmVjID0gKHZvaWQgKilcdTAwMjZtbGR2Ml96ZXJvX2dyZWM7XG4tXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7XG4gXHRzdHJ1Y3QgYW10X2dyb3VwX25vZGUgKmdub2RlO1xuIFx0dW5pb24gYW10X2FkZHIgZ3JvdXAsIGhvc3Q7XG4gXHRzdHJ1Y3QgbWxkMl9ncmVjICpncmVjO1xuK1x0c3RydWN0IGluNl9hZGRyIHNhZGRyO1xuIFx0dTE2IG5zcmNzO1xuK1x0dTE2IG5ncmVjO1xuIFx0aW50IGk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudG9ocyhtbGQyci1cdTAwM2VtbGQycl9uZ3JlYyk7IGkrKykge1xuK1x0LyogbWxkMnIgYW5kIGlwdjZfaGRyKCkgcG9pbnQgaW50byB0aGUgc2tiIGhlYWQsIHdoaWNoIHRoZVxuK1x0ICogaXB2Nl9tY19tYXlfcHVsbCgpIGNhbGxzIGJlbG93IGNhbiByZWFsbG9jYXRlLiAgUmVhZCBldmVyeSBmaWVsZFxuK1x0ICogdGhhdCBpcyB1c2VkIGFmdGVyIGEgcHVsbCBiZWZvcmUgdGhlIGZpcnN0IG9uZSBydW5zLlxuK1x0ICovXG4rXHRzYWRkciA9IGlwdjZfaGRyKHNrYiktXHUwMDNlc2FkZHI7XG4rXHRuZ3JlYyA9IG50b2hzKG1sZDJyLVx1MDAzZW1sZDJyX25ncmVjKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5ncmVjOyBpKyspIHtcbiBcdFx0bGVuICs9IHNpemVvZigqZ3JlYyk7XG4gXHRcdGlmICghaXB2Nl9tY19tYXlfcHVsbChza2IsIGxlbikpXG4gXHRcdFx0YnJlYWs7XG5AQCAtMjE4MSwxMCArMjIwMSwxNCBAQCBzdGF0aWMgdm9pZCBhbXRfbWxkdjJfcmVwb3J0X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0aWYgKCFpcHY2X21jX21heV9wdWxsKHNrYiwgbGVuKSlcbiBcdFx0XHRicmVhaztcbiBcbitcdFx0LyogaXB2Nl9tY19tYXlfcHVsbCgpIG1heSBoYXZlIHJlYWxsb2NhdGVkIHRoZSBoZWFkLiAqL1xuK1x0XHRncmVjID0gKHZvaWQgKikoc2tiLVx1MDAzZWRhdGEgKyBsZW4gLSBzaXplb2YoKmdyZWMpIC1cbitcdFx0XHRcdG5zcmNzICogc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpO1xuK1xuIFx0XHRtZW1zZXQoXHUwMDI2Z3JvdXAsIDAsIHNpemVvZih1bmlvbiBhbXRfYWRkcikpO1xuIFx0XHRncm91cC5pcDYgPSBncmVjLVx1MDAzZWdyZWNfbWNhO1xuIFx0XHRtZW1zZXQoXHUwMDI2aG9zdCwgMCwgc2l6ZW9mKHVuaW9uIGFtdF9hZGRyKSk7XG4tXHRcdGhvc3QuaXA2ID0gaXA2aC1cdTAwM2VzYWRkcjtcbitcdFx0aG9zdC5pcDYgPSBzYWRkcjtcbiBcdFx0Z25vZGUgPSBhbXRfbG9va3VwX2dyb3VwKHR1bm5lbCwgXHUwMDI2Z3JvdXAsIFx1MDAyNmhvc3QsIHRydWUpO1xuIFx0XHRpZiAoIWdub2RlKSB7XG4gXHRcdFx0Z25vZGUgPSBhbXRfYWRkX2dyb3VwKGFtdCwgdHVubmVsLCBcdTAwMjZncm91cCwgXHUwMDI2aG9zdCxcbkBAIC0yMzA1LDcgKzIzMjksMTIgQEAgc3RhdGljIGJvb2wgYW10X211bHRpY2FzdF9kYXRhX2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpldGgpKTtcbiBcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4gXHRza2JfcHVsbChza2IsIHNpemVvZigqZXRoKSk7XG4tXHRldGggPSBldGhfaGRyKHNrYik7XG4rXG4rXHQvKiBUaGUgTDIgaGVhZGVyIGlzIHJld3JpdHRlbiBiZWxvdzsgbWFrZSB0aGUgaGVhZCBwcml2YXRlIGZpcnN0IHNvIGFcbitcdCAqIGNsb25lZCBza2IgKGZvciBleGFtcGxlIG9uZSB0YWtlbiBieSBhIHBhY2tldCB0YXApIGlzIG5vdCBtb2RpZmllZC5cbitcdCAqL1xuK1x0aWYgKHNrYl9jb3dfaGVhZChza2IsIDApKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqaXBoKSkpXG4gXHRcdHJldHVybiB0cnVlO1xuQEAgLTIzMTUsNiArMjM0NCw4IEBAIHN0YXRpYyBib29sIGFtdF9tdWx0aWNhc3RfZGF0YV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdGlmICghaXB2NF9pc19tdWx0aWNhc3QoaXBoLVx1MDAzZWRhZGRyKSlcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApO1xuK1x0XHQvKiBwc2tiX21heV9wdWxsKCkgYWJvdmUgbWF5IGhhdmUgcmVhbGxvY2F0ZWQgdGhlIGhlYWQuICovXG4rXHRcdGV0aCA9IGV0aF9oZHIoc2tiKTtcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XG4gXHRcdGlwX2V0aF9tY19tYXAoaXBoLVx1MDAzZWRhZGRyLCBldGgtXHUwMDNlaF9kZXN0KTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbkBAIC0yMzI4LDYgKzIzNTksOCBAQCBzdGF0aWMgYm9vbCBhbXRfbXVsdGljYXN0X2RhdGFfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRpZiAoIWlwdjZfYWRkcl9pc19tdWx0aWNhc3QoXHUwMDI2aXA2aC1cdTAwM2VkYWRkcikpXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xuK1x0XHQvKiBwc2tiX21heV9wdWxsKCkgYWJvdmUgbWF5IGhhdmUgcmVhbGxvY2F0ZWQgdGhlIGhlYWQuICovXG4rXHRcdGV0aCA9IGV0aF9oZHIoc2tiKTtcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcbiBcdFx0aXB2Nl9ldGhfbWNfbWFwKFx1MDAyNmlwNmgtXHUwMDNlZGFkZHIsIGV0aC1cdTAwM2VoX2Rlc3QpO1xuICNlbmRpZlxuQEAgLTIzNTMsOCArMjM4NiwxMCBAQCBzdGF0aWMgYm9vbCBhbXRfbWVtYmVyc2hpcF9xdWVyeV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsXG4gXHRzdHJ1Y3QgYW10X2hlYWRlcl9tZW1iZXJzaGlwX3F1ZXJ5ICphbXRtcTtcbiBcdHN0cnVjdCBpZ21wdjNfcXVlcnkgKmlodjM7XG4gXHRzdHJ1Y3QgZXRoaGRyICpldGgsICpvZXRoO1xuK1x0dTggaF9zb3VyY2VbRVRIX0FMRU5dO1xuIFx0c3RydWN0IGlwaGRyICppcGg7XG4gXHRpbnQgaGRyX3NpemUsIGxlbjtcbitcdHU2NCByZXNwb25zZV9tYWM7XG4gXG4gXHRoZHJfc2l6ZSA9IHNpemVvZigqYW10bXEpICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuIFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGRyX3NpemUpKVxuQEAgLTIzNjcsNiArMjQwMiwxMiBAQCBzdGF0aWMgYm9vbCBhbXRfbWVtYmVyc2hpcF9xdWVyeV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsXG4gXHRpZiAoYW10bXEtXHUwMDNlbm9uY2UgIT0gYW10LVx1MDAzZW5vbmNlKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbitcdC8qIGlwdHVubmVsX3B1bGxfaGVhZGVyKCkgYW5kIHRoZSBwc2tiX21heV9wdWxsKCkgY2FsbHMgYmVsb3cgY2FuXG4rXHQgKiByZWFsbG9jYXRlIHRoZSBza2IgaGVhZCwgc28gYW10bXEgd291bGQgZGFuZ2xlLiAgU25hcHNob3QgdGhlIG9ubHlcbitcdCAqIGZpZWxkIHVzZWQgYWZ0ZXJ3YXJkcy5cbitcdCAqL1xuK1x0cmVzcG9uc2VfbWFjID0gYW10bXEtXHUwMDNlcmVzcG9uc2VfbWFjO1xuK1xuIFx0aGRyX3NpemUgLT0gc2l6ZW9mKCpldGgpO1xuIFx0aWYgKGlwdHVubmVsX3B1bGxfaGVhZGVyKHNrYiwgaGRyX3NpemUsIGh0b25zKEVUSF9QX1RFQiksIGZhbHNlKSlcbiBcdFx0cmV0dXJuIHRydWU7XG5AQCAtMjM3Niw2ICsyNDE3LDEzIEBAIHN0YXRpYyBib29sIGFtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCxcbiBcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpldGgpKTtcbiBcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuIFx0ZXRoID0gZXRoX2hkcihza2IpO1xuK1x0LyogU25hcHNob3QgdGhlIG91dGVyIHNvdXJjZSBNQUMgYmVmb3JlIGEgbGF0ZXIgcHVsbCBjYW4gZnJlZSBpdC4gKi9cbitcdGV0aGVyX2FkZHJfY29weShoX3NvdXJjZSwgb2V0aC1cdTAwM2VoX3NvdXJjZSk7XG4rXHQvKiBUaGUgTDIgaGVhZGVyIGlzIHJld3JpdHRlbiBiZWxvdzsgbWFrZSB0aGUgaGVhZCBwcml2YXRlIGZpcnN0IHNvIGFcbitcdCAqIGNsb25lZCBza2IgKGZvciBleGFtcGxlIG9uZSB0YWtlbiBieSBhIHBhY2tldCB0YXApIGlzIG5vdCBtb2RpZmllZC5cbitcdCAqL1xuK1x0aWYgKHNrYl9jb3dfaGVhZChza2IsIDApKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbiBcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqaXBoKSkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuQEAgLTIzODgsNiArMjQzNiw4IEBAIHN0YXRpYyBib29sIGFtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCxcbiBcdFx0XHRcdCAgIHNpemVvZigqaWh2MykpKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFxuK1x0XHQvKiBwc2tiX21heV9wdWxsKCkgYWJvdmUgbWF5IGhhdmUgcmVhbGxvY2F0ZWQgdGhlIGhlYWQuICovXG4rXHRcdGlwaCA9IGlwX2hkcihza2IpO1xuIFx0XHRpZiAoIWlwdjRfaXNfbXVsdGljYXN0KGlwaC1cdTAwM2VkYWRkcikpXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXG5AQCAtMjM5NSwxMCArMjQ0NSwxMSBAQCBzdGF0aWMgYm9vbCBhbXRfbWVtYmVyc2hpcF9xdWVyeV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsXG4gXHRcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gXHRcdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCppcGgpICsgQU1UX0lQSERSX09QVFMpO1xuIFx0XHRXUklURV9PTkNFKGFtdC1cdTAwM2VyZWFkeTQsIHRydWUpO1xuLVx0XHRhbXQtXHUwMDNlbWFjID0gYW10bXEtXHUwMDNlcmVzcG9uc2VfbWFjO1xuK1x0XHRhbXQtXHUwMDNlbWFjID0gcmVzcG9uc2VfbWFjO1xuIFx0XHRhbXQtXHUwMDNlcmVxX2NudCA9IDA7XG4gXHRcdGFtdC1cdTAwM2VxaSA9IGlodjMtXHUwMDNlcXFpYztcbiBcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApO1xuK1x0XHRldGggPSBldGhfaGRyKHNrYik7XG4gXHRcdGV0aC1cdTAwM2VoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVApO1xuIFx0XHRpcF9ldGhfbWNfbWFwKGlwaC1cdTAwM2VkYWRkciwgZXRoLVx1MDAzZWhfZGVzdCk7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5AQCAtMjQyMSwxMCArMjQ3MiwxMSBAQCBzdGF0aWMgYm9vbCBhbXRfbWVtYmVyc2hpcF9xdWVyeV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsXG4gXHRcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gXHRcdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCppcDZoKSArIEFNVF9JUDZIRFJfT1BUUyk7XG4gXHRcdFdSSVRFX09OQ0UoYW10LVx1MDAzZXJlYWR5NiwgdHJ1ZSk7XG4tXHRcdGFtdC1cdTAwM2VtYWMgPSBhbXRtcS1cdTAwM2VyZXNwb25zZV9tYWM7XG4rXHRcdGFtdC1cdTAwM2VtYWMgPSByZXNwb25zZV9tYWM7XG4gXHRcdGFtdC1cdTAwM2VyZXFfY250ID0gMDtcbiBcdFx0YW10LVx1MDAzZXFpID0gbWxkMnEtXHUwMDNlbWxkMnFfcXFpYztcbiBcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVBWNik7XG4rXHRcdGV0aCA9IGV0aF9oZHIoc2tiKTtcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcbiBcdFx0aXB2Nl9ldGhfbWNfbWFwKFx1MDAyNmlwNmgtXHUwMDNlZGFkZHIsIGV0aC1cdTAwM2VoX2Rlc3QpO1xuICNlbmRpZlxuQEAgLTI0MzIsNyArMjQ4NCw3IEBAIHN0YXRpYyBib29sIGFtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCxcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG4tXHRldGhlcl9hZGRyX2NvcHkoZXRoLVx1MDAzZWhfc291cmNlLCBvZXRoLVx1MDAzZWhfc291cmNlKTtcbitcdGV0aGVyX2FkZHJfY29weShldGgtXHUwMDNlaF9zb3VyY2UsIGhfc291cmNlKTtcbiBcdHNrYi1cdTAwM2Vwa3RfdHlwZSA9IFBBQ0tFVF9NVUxUSUNBU1Q7XG4gXHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTtcbiBcdGxlbiA9IHNrYi1cdTAwM2VsZW47XG5AQCAtMjQ1NSw4ICsyNTA3LDEzIEBAIHN0YXRpYyBib29sIGFtdF91cGRhdGVfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c3RydWN0IGV0aGhkciAqZXRoO1xuIFx0c3RydWN0IGlwaGRyICppcGg7XG4gXHRpbnQgbGVuLCBoZHJfc2l6ZTtcbitcdF9fYmUzMiBzYWRkcjtcbiBcbi1cdGlwaCA9IGlwX2hkcihza2IpO1xuK1x0LyogaXBfaGRyKCkgcG9pbnRzIGludG8gdGhlIHNrYiBoZWFkLCB3aGljaCB0aGUgcHNrYl9tYXlfcHVsbCgpIC9cbitcdCAqIGlwdHVubmVsX3B1bGxfaGVhZGVyKCkgY2FsbHMgYmVsb3cgY2FuIHJlYWxsb2NhdGUuICBTbmFwc2hvdCB0aGVcbitcdCAqIHNvdXJjZSBhZGRyZXNzIHVzZWQgZm9yIHRoZSB0dW5uZWwgbG9va3VwIGJlZm9yZSB0aGUgZmlyc3QgcHVsbC5cbitcdCAqL1xuK1x0c2FkZHIgPSBpcF9oZHIoc2tiKS1cdTAwM2VzYWRkcjtcbiBcbiBcdGhkcl9zaXplID0gc2l6ZW9mKCphbXRtdSkgKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7XG4gXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJfc2l6ZSkpXG5AQCAtMjQ3Miw3ICsyNTI5LDcgQEAgc3RhdGljIGJvb2wgYW10X3VwZGF0ZV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHR1bm5lbCwgXHUwMDI2YW10LVx1MDAzZXR1bm5lbF9saXN0LCBsaXN0KSB7XG4tXHRcdGlmICh0dW5uZWwtXHUwMDNlaXA0ID09IGlwaC1cdTAwM2VzYWRkcikge1xuK1x0XHRpZiAodHVubmVsLVx1MDAzZWlwNCA9PSBzYWRkcikge1xuIFx0XHRcdGlmICgoYW10bXUtXHUwMDNlbm9uY2UgPT0gdHVubmVsLVx1MDAzZW5vbmNlIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICAgYW10bXUtXHUwMDNlcmVzcG9uc2VfbWFjID09IHR1bm5lbC1cdTAwM2VtYWMpKSB7XG4gXHRcdFx0XHRtb2RfZGVsYXllZF93b3JrKGFtdF93cSwgXHUwMDI2dHVubmVsLVx1MDAzZWdjX3dxLFxuQEAgLTI0OTIsNiArMjU0OSwxMiBAQCBzdGF0aWMgYm9vbCBhbXRfdXBkYXRlX2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqaXBoKSkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuK1x0LyogVGhlIEwyIGhlYWRlciBpcyByZXdyaXR0ZW4gYmVsb3c7IG1ha2UgdGhlIGhlYWQgcHJpdmF0ZSBmaXJzdCBzbyBhXG4rXHQgKiBjbG9uZWQgc2tiIChmb3IgZXhhbXBsZSBvbmUgdGFrZW4gYnkgYSBwYWNrZXQgdGFwKSBpcyBub3QgbW9kaWZpZWQuXG4rXHQgKi9cbitcdGlmIChza2JfY293X2hlYWQoc2tiLCAwKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4gXHRpcGggPSBpcF9oZHIoc2tiKTtcbiBcdGlmIChpcGgtXHUwMDNldmVyc2lvbiA9PSA0KSB7XG4gXHRcdGlmIChpcF9tY19jaGVja19pZ21wKHNrYikpIHtcbkBAIC0yNTA4LDYgKzI1NzEsMTAgQEAgc3RhdGljIGJvb2wgYW10X3VwZGF0ZV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdGV0aCA9IGV0aF9oZHIoc2tiKTtcbiBcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApO1xuIFx0XHRldGgtXHUwMDNlaF9wcm90byA9IGh0b25zKEVUSF9QX0lQKTtcbitcdFx0LyogaXBfbWNfY2hlY2tfaWdtcCgpIGFuZCB0aGUgcmVwb3J0IGhhbmRsZXIgbWF5IGhhdmVcbitcdFx0ICogcmVhbGxvY2F0ZWQgdGhlIGhlYWQ7IHJlLWRlcml2ZSBpcGguXG4rXHRcdCAqL1xuK1x0XHRpcGggPSBpcF9oZHIoc2tiKTtcbiBcdFx0aXBfZXRoX21jX21hcChpcGgtXHUwMDNlZGFkZHIsIGV0aC1cdTAwM2VoX2Rlc3QpO1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuIFx0fSBlbHNlIGlmIChpcGgtXHUwMDNldmVyc2lvbiA9PSA2KSB7XG5AQCAtMjUyNyw2ICsyNTk0LDEwIEBAIHN0YXRpYyBib29sIGFtdF91cGRhdGVfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRldGggPSBldGhfaGRyKHNrYik7XG4gXHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xuIFx0XHRldGgtXHUwMDNlaF9wcm90byA9IGh0b25zKEVUSF9QX0lQVjYpO1xuK1x0XHQvKiBpcHY2X21jX2NoZWNrX21sZCgpIGFuZCB0aGUgcmVwb3J0IGhhbmRsZXIgbWF5IGhhdmVcbitcdFx0ICogcmVhbGxvY2F0ZWQgdGhlIGhlYWQ7IHJlLWRlcml2ZSBpcDZoLlxuK1x0XHQgKi9cbitcdFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XG4gXHRcdGlwdjZfZXRoX21jX21hcChcdTAwMjZpcDZoLVx1MDAzZWRhZGRyLCBldGgtXHUwMDNlaF9kZXN0KTtcbiAjZW5kaWZcbiBcdH0gZWxzZSB7XG5AQCAtMjc3Miw3ICsyODQzLDcgQEAgc3RhdGljIHZvaWQgYW10X2d3X3JjdihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHN0YXRpYyBpbnQgYW10X3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IGFtdF9kZXYgKmFtdDtcbi1cdHN0cnVjdCBpcGhkciAqaXBoO1xuK1x0X19iZTMyIHNhZGRyO1xuIFx0aW50IHR5cGU7XG4gXHRib29sIGVycjtcbiBcbkBAIC0yNzg1LDcgKzI4NTYsMTEgQEAgc3RhdGljIGludCBhbXRfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdH1cbiBcbiBcdHNrYi1cdTAwM2VkZXYgPSBhbXQtXHUwMDNlZGV2O1xuLVx0aXBoID0gaXBfaGRyKHNrYik7XG4rXHQvKiBhbXRfcGFyc2VfdHlwZSgpIGNhbGxzIHBza2JfbWF5X3B1bGwoKSwgd2hpY2ggY2FuIHJlYWxsb2NhdGUgdGhlXG4rXHQgKiBza2IgaGVhZCBhbmQgbGVhdmUgYSBjYWNoZWQgaXBfaGRyKCkgZGFuZ2xpbmcuICBTbmFwc2hvdCB0aGUgc291cmNlXG4rXHQgKiBhZGRyZXNzIHVzZWQgYmVsb3cgYmVmb3JlIHRoZSBwdWxsLlxuK1x0ICovXG4rXHRzYWRkciA9IGlwX2hkcihza2IpLVx1MDAzZXNhZGRyO1xuIFx0dHlwZSA9IGFtdF9wYXJzZV90eXBlKHNrYik7XG4gXHRpZiAodHlwZSA9PSAtMSkge1xuIFx0XHRlcnIgPSB0cnVlO1xuQEAgLTI3OTUsNyArMjg3MCw3IEBAIHN0YXRpYyBpbnQgYW10X3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpZiAoYW10LVx1MDAzZW1vZGUgPT0gQU1UX01PREVfR0FURVdBWSkge1xuIFx0XHRzd2l0Y2ggKHR5cGUpIHtcbiBcdFx0Y2FzZSBBTVRfTVNHX0FEVkVSVElTRU1FTlQ6XG4tXHRcdFx0aWYgKGlwaC1cdTAwM2VzYWRkciAhPSBhbXQtXHUwMDNlZGlzY292ZXJ5X2lwKSB7XG4rXHRcdFx0aWYgKHNhZGRyICE9IGFtdC1cdTAwM2VkaXNjb3ZlcnlfaXApIHtcbiBcdFx0XHRcdG5ldGRldl9kYmcoYW10LVx1MDAzZWRldiwgXCJJbnZhbGlkIFJlbGF5IElQXFxuXCIpO1xuIFx0XHRcdFx0ZXJyID0gdHJ1ZTtcbiBcdFx0XHRcdGdvdG8gZHJvcDtcbkBAIC0yODA3LDcgKzI4ODIsNyBAQCBzdGF0aWMgaW50IGFtdF9yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdH1cbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0Y2FzZSBBTVRfTVNHX01VTFRJQ0FTVF9EQVRBOlxuLVx0XHRcdGlmIChpcGgtXHUwMDNlc2FkZHIgIT0gYW10LVx1MDAzZXJlbW90ZV9pcCkge1xuK1x0XHRcdGlmIChzYWRkciAhPSBhbXQtXHUwMDNlcmVtb3RlX2lwKSB7XG4gXHRcdFx0XHRuZXRkZXZfZGJnKGFtdC1cdTAwM2VkZXYsIFwiSW52YWxpZCBSZWxheSBJUFxcblwiKTtcbiBcdFx0XHRcdGVyciA9IHRydWU7XG4gXHRcdFx0XHRnb3RvIGRyb3A7XG5AQCAtMjgxOCw3ICsyODkzLDcgQEAgc3RhdGljIGludCBhbXRfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0Y2FzZSBBTVRfTVNHX01FTUJFUlNISVBfUVVFUlk6XG4tXHRcdFx0aWYgKGlwaC1cdTAwM2VzYWRkciAhPSBhbXQtXHUwMDNlcmVtb3RlX2lwKSB7XG4rXHRcdFx0aWYgKHNhZGRyICE9IGFtdC1cdTAwM2VyZW1vdGVfaXApIHtcbiBcdFx0XHRcdG5ldGRldl9kYmcoYW10LVx1MDAzZWRldiwgXCJJbnZhbGlkIFJlbGF5IElQXFxuXCIpO1xuIFx0XHRcdFx0ZXJyID0gdHJ1ZTtcbiBcdFx0XHRcdGdvdG8gZHJvcDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjI1OjEzLjkyMDkzMjQ4MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MjU3OTUwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBBTVQgRHJpdmVyIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0YXJnZXRzIGBkcml2ZXJzL25ldC9hbXQuY2AuIFRoZSBjb21taXQgbWVzc2FnZSBpcyBwcmV0dHkgYmFyZWJvbmVzLCBqdXN0IGluZGljYXRpbmcgaXQncyBhIHBhdGNoIGZyb20gYSBzeXotY2x1c3RlciBhbmQgdW5kZXIgcmV2aWV3LiBUaGF0J3MgZmluZSwgdGhlIGNvZGUgaXMgd2hhdCBtYXR0ZXJzLiBUaGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGZpeCwgemVyb2luZyBpbiBvbiBtZW1vcnkgaXNzdWVzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBBTVQgZHJpdmVyLiBUaGV5J3JlIGFkZHJlc3NpbmcgYHNrYmAgcmVhbGxvY2F0aW9uIHByb2JsZW1zIOKAkyB0aGF0IG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCBwYWNrZXQgYnVmZmVyIG1hbmFnZW1lbnQuIEkgc2VlIGNhbGxzIGxpa2UgYHBza2JfbWF5X3B1bGxgLCBgaXBfbWNfbWF5X3B1bGxgLCBhbmQgYHNrYl9jb3dfaGVhZGAsIGFsbCBpbmRpY2F0b3JzIG9mIHBvdGVudGlhbCBoZWFkZXIgcG9pbnRlciBpbnZhbGlkYXRpb24uIEl0IHNlZW1zIGxpa2UgdGhlIGJ1ZyBpbnZvbHZlZCBjYWNoaW5nIHBvaW50ZXJzIHRvIGhlYWRlcnMgKGxpa2UgYGlwX2hkcihza2IpYCkgKmJlZm9yZSogdGhlIGBwdWxsYCBvcGVyYXRpb24gYW5kIHN1YnNlcXVlbnRseSB1c2luZyB0aG9zZSBzdGFsZSBwb2ludGVycywgcmVzdWx0aW5nIGluIGEgdXNlLWFmdGVyLWZyZWUgb3IgZGFuZ2xpbmcgcG9pbnRlciBzY2VuYXJpby4gU21hcnQg4oCTIHRoZXkndmUgYWRkZWQgYW4gYHNrYl9jb3dfaGVhZChza2IsIDApYCBjYWxsIGJlZm9yZSBhbnkgTDIgaGVhZGVyIHJld3JpdGluZywgZWZmZWN0aXZlbHkgY3JlYXRpbmcgYSBjb3B5IG9mIHRoZSBoZWFkIGRhdGEgdG8gcHJldmVudCBzdWNoIGlzc3Vlcy5cblxuVGhpcyBpcyBhIGdvb2QgY2F0Y2gsIGEgY2xlYW4gbWVtb3J5IGNvcnJ1cHRpb24gZml4IGluIGEgY29yZSBrZXJuZWwgY29tcG9uZW50LCB0aGUgQU1UIGRyaXZlci4gSXTigJlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQncyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBpdCdzIHJvYnVzdCBhbmQgdG8gdW5jb3ZlciBhbnkgbGF0ZW50IGlzc3Vlcy4gTm93LCBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIG9uIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBhbmQgaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIGluIHRoaXMgQU1UIGNvZGUuIFRpbWUgdG8gZGlnIGludG8gdGhlIGBkcml2ZXJzL25ldC9hbXQuY2AgZmlsZSBpdHNlbGYgYW5kIGl0cyBhc3NvY2lhdGVkIEtjb25maWcgZW50cmllcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBkcml2ZXIgaXMgY29uZmlndXJlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBuZXR3b3JrIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODUxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDU6MjU6MTkuMzQ2NzMwMTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY1NTIwNzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBTVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9Mjg5PWNvbmZpZyBQRkNQXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTMwMS1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjMwMjpjb25maWcgQU1UXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMDMtXFx0dHJpc3RhdGUgXFxcIkF1dG9tYXRpYyBNdWx0aWNhc3QgVHVubmVsaW5nIChBTVQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNToyNToxOS43MTIyNTg5ODVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDQ4NDY1ODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQU1UIERyaXZlciBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBgQU1UYCBjb25maWd1cmF0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIFRoZSBwcmVzZW5jZSBvZiBgI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpYCBzdWdnZXN0cyB0aGF0IGBJUFY2YCBpcyBhbHNvIGdvaW5nIHRvIGJlIGEgZmFjdG9yIGhlcmUuXG5cbk5vdywgbGV0J3MgemVybyBpbiBvbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBhcm91bmQgdGhlc2UgZnVuY3Rpb25zIHdpdGhpbiBgZHJpdmVycy9uZXQvYW10LmNgOiBgYW10X2Rldl94bWl0YCwgYGFtdF9pZ21wdjNfcmVwb3J0X2hhbmRsZXJgLCBgYW10X21sZHYyX3JlcG9ydF9oYW5kbGVyYCwgYGFtdF9tdWx0aWNhc3RfZGF0YV9oYW5kbGVyYCwgYGFtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXJgLCBgYW10X3VwZGF0ZV9oYW5kbGVyYCwgYW5kIGBhbXRfcmN2YC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHNldCBgRm9jdXNTeW1ib2xzYCB0byB0aG9zZSBmdW5jdGlvbnMgc28gSSBjYW4gY29uY2VudHJhdGUgbXkgZnV6emluZyBlZmZvcnRzIG9uIHRoZW0uXG5cbkkganVzdCBkb3VibGUgY2hlY2tlZCBhbmQgd2hpbGUgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIHRoYXQncyBub3QgYSBjb25jZXJuIGZvciBteSBwdXJwb3NlcyB3aXRoIGBGb2N1c1N5bWJvbHNgLlxuXG5Ob3csIGNvbnNpZGVyaW5nIHRoZXNlIGFyZSBkYXRhIHBhdGggZnVuY3Rpb25zLCBJIG5lZWQgdG8gZXZhbHVhdGUgd2hldGhlciBvciBub3QgdGhleSBhcmUgaG90IHBhdGhzLiBgYW10X2Rldl94bWl0YCBhbmQgYGFtdF9yY3ZgIGFyZSB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgZnVuY3Rpb25zLCByZXNwZWN0aXZlbHksIHNvIHRoZXkgYXJlIHRoZSBkYXRhIHBhdGggZm9yIHRoZSBBTVQgZHJpdmVyLiBIb3dldmVyLCBzaW5jZSBBTVQgaXMgYSBzcGVjaWFsaXplZCB0dW5uZWwsIEkgZG9uJ3QgdGhpbmsgdGhleSdyZSBnZW5lcmljIGhvdCBwYXRocyBpbiB0aGUgc2FtZSB3YXkgYGlwX3JjdmAgb3IgYGRldl9xdWV1ZV94bWl0YCBtaWdodCBiZS4gVGhpcyBtZWFucyBmdXp6aW5nIHRoZXNlIHNwZWNpZmljYWxseSBpcyBhIGdvb2QgaWRlYS5cblxuRmluYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHZlcmlmeSBgQU1UYCBjb25maWcgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTIyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjI1OjI1LjE2MDcyNzgzMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI5OTI3NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFNVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9Mjg5PWNvbmZpZyBQRkNQXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTMwMS1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjMwMjpjb25maWcgQU1UXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMDMtXFx0dHJpc3RhdGUgXFxcIkF1dG9tYXRpYyBNdWx0aWNhc3QgVHVubmVsaW5nIChBTVQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNToyNToyNS4zMTM3MjcyMDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDc2ODQ0NDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbHJlYWR5IHF1aXRlIGZhbWlsaWFyIHdpdGggZW1iZWRkZWQgc3lzdGVtcywgS2NvbmZpZywgYW5kIEFNVCAoQWN0aXZlIE1hbmFnZW1lbnQgVGVjaG5vbG9neSkuXG5cbioqRGVsdmluZyBpbnRvIHRoZSBBTVQgS2NvbmZpZyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgbWluZCBpbW1lZGlhdGVseSBjbGlja3MgdG8gYWN0aW9uIG1vZGUg4oCTIGxldCdzIGRpc3NlY3QgdGhlIEtjb25maWcgZm9yIEFNVC4gSSdtIHRoaW5raW5nLCBcIlJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGFsbCB0aGUgdmFyaWFibGVzIHJlbGF0ZWQgdG8gQU1ULlwiIEknbSBtZW50YWxseSBwcmVwYXJpbmcgdG8gbmF2aWdhdGUgdGhlIGZpbGUsIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZXMuIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIGtleSBzZXR0aW5ncyB0aGF0IGNvbnRyb2wgQU1UJ3MgYmVoYXZpb3IsIGZlYXR1cmVzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIEknbSBhbnRpY2lwYXRpbmcgdGhlIHVzdWFsIEtjb25maWcgc3ludGF4IOKAkyBgY29uZmlnYCwgYGJvb2xgLCBgdHJpc3RhdGVgLCBgc2VsZWN0YCwgYGRlcGVuZHMgb25gLCBgZGVmYXVsdGAsIGV0Yy4g4oCTIGFuZCBJJ20gcmVhZHkgdG8gcGFyc2UgdGhlIGxvZ2ljIHdpdGhpbi4gRXNzZW50aWFsbHksIEknbSBtZW50YWxseSBwcmVwYXJpbmcgZm9yIGEgZGVlcCBkaXZlIHRvIHVuZGVyc3RhbmQgaG93IEFNVCBpcyBjb25maWd1cmVkLCBlbmFibGVkLCBhbmQgd2hhdCBpdHMgc3BlY2lmaWMgY2FwYWJpbGl0aWVzIGFyZSB3aXRoaW4gdGhpcyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzM2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDU6MjU6MjguMzkwNTc0MTY1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzAwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzAwOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgcGZjcC5cXG4gMzAxOlxcdFxcbiAzMDI6XFx0Y29uZmlnIEFNVFxcbiAzMDM6XFx0XFx0dHJpc3RhdGUgXFxcIkF1dG9tYXRpYyBNdWx0aWNhc3QgVHVubmVsaW5nIChBTVQpXFxcIlxcbiAzMDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IElQX01VTFRJQ0FTVFxcbiAzMDU6XFx0XFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuIDMwNjpcXHRcXHRoZWxwXFxuIDMwNzpcXHRcXHQgIFRoaXMgYWxsb3dzIG9uZSB0byBjcmVhdGUgQU1UKEF1dG9tYXRpYyBNdWx0aWNhc3QgVHVubmVsaW5nKVxcbiAzMDg6XFx0XFx0ICB2aXJ0dWFsIGludGVyZmFjZXMgdGhhdCBwcm92aWRlIG11bHRpY2FzdCB0dW5uZWxpbmcuXFxuIDMwOTpcXHRcXHQgIFRoZXJlIGFyZSB0d28gcm9sZXMsIEdhdGV3YXksIGFuZCBSZWxheS5cXG4gMzEwOlxcdFxcdCAgR2F0ZXdheSBFbmNhcHN1bGF0ZXMgSUdNUC9NTEQgdHJhZmZpYyBmcm9tIGxpc3RlbmVycyB0byB0aGUgUmVsYXkuXFxuIDMxMTpcXHRcXHQgIEdhdGV3YXkgRGVjYXBzdWxhdGVzIG11bHRpY2FzdCB0cmFmZmljIGZyb20gdGhlIFJlbGF5IHRvIExpc3RlbmVycy5cXG4gMzEyOlxcdFxcdCAgUmVsYXkgRW5jYXBzdWxhdGVzIG11bHRpY2FzdCB0cmFmZmljIGZyb20gU291cmNlcyB0byBHYXRld2F5LlxcbiAzMTM6XFx0XFx0ICBSZWxheSBEZWNhcHN1bGF0ZXMgSUdNUC9NTEQgdHJhZmZpYyBmcm9tIEdhdGV3YXkuXFxuIDMxNDpcXHRcXG4gMzE1OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlcnMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMzE2OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgYW10LlxcbiAzMTc6XFx0XFxuIDMxODpcXHRjb25maWcgTUFDU0VDXFxuIDMxOTpcXHRcXHR0cmlzdGF0ZSBcXFwiSUVFRSA4MDIuMUFFIE1BQy1sZXZlbCBlbmNyeXB0aW9uIChNQUNzZWMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNToyNToyOC4zOTA2OTI3NzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjEyMzMyMzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFNVCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lIGNvbmNlcm5pbmcgdGhlIEFNVCAoQXV0b21hdGljIE11bHRpY2FzdCBUdW5uZWxpbmcpIGRyaXZlci4gVGhlIGRlcGVuZGVuY2llcyBhcmUgYElORVRgIGFuZCBgSVBfTVVMVElDQVNUYCwgYW5kIGl0IGxvb2tzIGxpa2UgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQU1UYCBhbmQgYElQVjZgIGFyZSBlbmFibGVkIGluIHRoZSBjb25maWd1cmF0aW9ucy4gR29vZCwgc3RhbmRhcmQgc2V0dXAuXG5cbk15IGltbWVkaWF0ZSB0YWtlYXdheSBpcyB0aGF0IHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgbmFzdHkgY29sbGVjdGlvbiBvZiBtZW1vcnkgc2FmZXR5IGlzc3VlczogdXNlLWFmdGVyLWZyZWUgYW5kIGRhbmdsaW5nIHBvaW50ZXIgYnVncy4gVGhleSdyZSBwaW5wb2ludGluZyB0aGUgY3VscHJpdHMgYXMgYHBza2JfbWF5X3B1bGxgIGFuZCBzaW1pbGFyIGZ1bmN0aW9ucywgd2hpY2ggYXJlIHJlYWxsb2NhdGluZyB0aGUgYHNrYmAgaGVhZGVyIHdoaWxlIG5ldHdvcmsgaGVhZGVyIHBvaW50ZXJzIGFyZSBzdGlsbCBhY3RpdmUuIFNvdW5kcyBsaWtlIGNsYXNzaWMgcmFjZSBjb25kaXRpb25zIGluIGEgbmV0d29yayBjb250ZXh0LCBhbmQgdGhlIHNvbHV0aW9uIGxvb2tzIHRvIGJlIGBza2JfY293X2hlYWRgIHRvIHByZXZlbnQgbW9kaWZpY2F0aW9uIG9mIGNsb25lZCBgc2tic2AuIEl0J3MgZGVmaW5pdGVseSBmdW5jdGlvbmFsLCByaWdodCBvZmYgdGhlIGJhdC5cblxuU28sIHRoaXMgY2xlYXJseSB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZy4gVGhpcyBpcyByZWFjaGFibGUgbmV0d29yayBkcml2ZXIgY29kZSwgYW5kIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbiwgdGhlcmXigJlzIGxpa2VseSBwb3RlbnRpYWwgZm9yIG1vcmUgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIHRvIHN0aWxsIGV4aXN0LlxuXG5JIG5lZWQgdG8gZm9jdXMgb24gdGhlc2Ugc3ltYm9scyB0byBhc3Nlc3MgdGhlIGZpeCB0aG9yb3VnaGx5OiBgYW10X2Rldl94bWl0YCwgYGFtdF9pZ21wdjNfcmVwb3J0X2hhbmRsZXJgLCBgYW10X21sZHYyX3JlcG9ydF9oYW5kbGVyYCwgYGFtdF9tdWx0aWNhc3RfZGF0YV9oYW5kbGVyYCwgYGFtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXJgLCBgYW10X3VwZGF0ZV9oYW5kbGVyYCwgYW5kIGBhbXRfcmN2YC4gRmlyc3QgdGhpbmcgSSdsbCBkbyBpcyBkb3VibGUtY2hlY2sgdGhlIG5hbWUsIGp1c3QgdG8gbWFrZSBzdXJlIGl0J3MgY29ycmVjdC4gWWVzLCBpdCBpcyBpbiB0aGUgZGlmZi5cblxuQWxyaWdodCwgdGhlIHBhdGNoIGlzIGZ1bmN0aW9uYWwgYW5kIGRlZmluaXRlbHkgZml4aW5nIGJ1Z3MuIEknbSBnb2luZyB0byBzZXQgaXQgdXAgdG8gY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkzNCwiT3V0cHV0VG9rZW5zIjoyMDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNToyNTozNC42MDMwMjcxNDFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA0ODY0MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFNVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFtdF9kZXZfeG1pdFwiLFxuICAgIFwiYW10X2lnbXB2M19yZXBvcnRfaGFuZGxlclwiLFxuICAgIFwiYW10X21sZHYyX3JlcG9ydF9oYW5kbGVyXCIsXG4gICAgXCJhbXRfbXVsdGljYXN0X2RhdGFfaGFuZGxlclwiLFxuICAgIFwiYW10X21lbWJlcnNoaXBfcXVlcnlfaGFuZGxlclwiLFxuICAgIFwiYW10X3VwZGF0ZV9oYW5kbGVyXCIsXG4gICAgXCJhbXRfcmN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgdXNlLWFmdGVyLWZyZWUgYW5kIGRhbmdsaW5nIHBvaW50ZXIgYnVncyBpbiB0aGUgQU1UIChBdXRvbWF0aWMgTXVsdGljYXN0IFR1bm5lbGluZykgZHJpdmVyIGNhdXNlZCBieSBgcHNrYl9tYXlfcHVsbGAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zIHJlYWxsb2NhdGluZyB0aGUgc2tiIGhlYWQgd2hpbGUgaG9sZGluZyBwb2ludGVycyB0byBuZXR3b3JrIGhlYWRlcnMuIEl0IGFsc28gYWRkcyBgc2tiX2Nvd19oZWFkYCB0byBwcmV2ZW50IG1vZGlmeWluZyBjbG9uZWQgc2ticy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgbmV0d29yayBkcml2ZXIgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGZ1cnRoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGV4aXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFNVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFtdF9kZXZfeG1pdFwiLFxuICAgIFwiYW10X2lnbXB2M19yZXBvcnRfaGFuZGxlclwiLFxuICAgIFwiYW10X21sZHYyX3JlcG9ydF9oYW5kbGVyXCIsXG4gICAgXCJhbXRfbXVsdGljYXN0X2RhdGFfaGFuZGxlclwiLFxuICAgIFwiYW10X21lbWJlcnNoaXBfcXVlcnlfaGFuZGxlclwiLFxuICAgIFwiYW10X3VwZGF0ZV9oYW5kbGVyXCIsXG4gICAgXCJhbXRfcmN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgdXNlLWFmdGVyLWZyZWUgYW5kIGRhbmdsaW5nIHBvaW50ZXIgYnVncyBpbiB0aGUgQU1UIChBdXRvbWF0aWMgTXVsdGljYXN0IFR1bm5lbGluZykgZHJpdmVyIGNhdXNlZCBieSBgcHNrYl9tYXlfcHVsbGAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zIHJlYWxsb2NhdGluZyB0aGUgc2tiIGhlYWQgd2hpbGUgaG9sZGluZyBwb2ludGVycyB0byBuZXR3b3JrIGhlYWRlcnMuIEl0IGFsc28gYWRkcyBgc2tiX2Nvd19oZWFkYCB0byBwcmV2ZW50IG1vZGlmeWluZyBjbG9uZWQgc2ticy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgbmV0d29yayBkcml2ZXIgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGZ1cnRoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGV4aXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdnnz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-08 05:15:43 +0000 UTC FinishedAt: 2026-07-08 05:25:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "5200f5f493f79f14bbdc349e402a40dfb32f23c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AMT", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "5200f5f493f79f14bbdc349e402a40dfb32f23c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AMT", "IPV6" ], "series_id": "e57d1bfb-df25-47a7-8437-9232e7d8789b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "amt_dev_xmit", "amt_igmpv3_report_handler", "amt_mldv2_report_handler", "amt_multicast_data_handler", "amt_membership_query_handler", "amt_update_handler", "amt_rcv" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FNVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YW10X2Rldl94bWl0JiMzNDssCiAgICAmIzM0O2FtdF9pZ21wdjNfcmVwb3J0X2hhbmRsZXImIzM0OywKICAgICYjMzQ7YW10X21sZHYyX3JlcG9ydF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O2FtdF9tdWx0aWNhc3RfZGF0YV9oYW5kbGVyJiMzNDssCiAgICAmIzM0O2FtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXImIzM0OywKICAgICYjMzQ7YW10X3VwZGF0ZV9oYW5kbGVyJiMzNDssCiAgICAmIzM0O2FtdF9yY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgdXNlLWFmdGVyLWZyZWUgYW5kIGRhbmdsaW5nIHBvaW50ZXIgYnVncyBpbiB0aGUgQU1UIChBdXRvbWF0aWMgTXVsdGljYXN0IFR1bm5lbGluZykgZHJpdmVyIGNhdXNlZCBieSBgcHNrYl9tYXlfcHVsbGAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zIHJlYWxsb2NhdGluZyB0aGUgc2tiIGhlYWQgd2hpbGUgaG9sZGluZyBwb2ludGVycyB0byBuZXR3b3JrIGhlYWRlcnMuIEl0IGFsc28gYWRkcyBgc2tiX2Nvd19oZWFkYCB0byBwcmV2ZW50IG1vZGlmeWluZyBjbG9uZWQgc2ticy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgbmV0d29yayBkcml2ZXIgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGZ1cnRoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGV4aXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjI1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTNmYmY2MzU3Njk2MDlmMzRhZDljNDUwZjAxNWVlZjQ2MzY0N2M3OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMDU6MjU6MTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYW10LmMgYi9kcml2ZXJzL25ldC9hbXQuY1xuaW5kZXggZjJmMzEzOWUzOGE1OTkuLmY3Mzc1ZTQwYmM4ZjIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvYW10LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2FtdC5jXG5AQCAtMTIxMSw3ICYjNDM7MTIxMSw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhbXRfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0XHRkYXRhID0gdHJ1ZTtcbiBcdFx0fVxuIFx0XHR2NiA9IGZhbHNlO1xuLVx0XHRncm91cC5pcDQgPSBpcGgtXHUwMDNlZGFkZHI7XG4mIzQzO1x0XHRncm91cC5pcDQgPSBpcF9oZHIoc2tiKS1cdTAwM2VkYWRkcjtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiBcdH0gZWxzZSBpZiAoaXBoLVx1MDAzZXZlcnNpb24gPT0gNikge1xuIFx0XHRpcDZoID0gaXB2Nl9oZHIoc2tiKTtcbkBAIC0xMjM1LDcgJiM0MzsxMjM1LDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFtdF9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRcdGRhdGEgPSB0cnVlO1xuIFx0XHR9XG4gXHRcdHY2ID0gdHJ1ZTtcbi1cdFx0Z3JvdXAuaXA2ID0gaXA2aC1cdTAwM2VkYWRkcjtcbiYjNDM7XHRcdGdyb3VwLmlwNiA9IGlwdjZfaGRyKHNrYiktXHUwMDNlZGFkZHI7XG4gI2VuZGlmXG4gXHR9IGVsc2Uge1xuIFx0XHRkZXYtXHUwMDNlc3RhdHMudHhfZXJyb3JzJiM0MzsmIzQzOztcbkBAIC0xMjc4LDEyICYjNDM7MTI3OCwxMiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYW10X2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGdub2RlLCBcdTAwMjZ0dW5uZWwtXHUwMDNlZ3JvdXBzW2hhc2hdLFxuIFx0XHRcdFx0XHRcdCBub2RlKSB7XG4gXHRcdFx0XHRpZiAoIXY2KSB7XG4tXHRcdFx0XHRcdGlmIChnbm9kZS1cdTAwM2Vncm91cF9hZGRyLmlwNCA9PSBpcGgtXHUwMDNlZGFkZHIpXG4mIzQzO1x0XHRcdFx0XHRpZiAoZ25vZGUtXHUwMDNlZ3JvdXBfYWRkci5pcDQgPT0gZ3JvdXAuaXA0KVxuIFx0XHRcdFx0XHRcdGdvdG8gZm91bmQ7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gXHRcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0XHRpZiAoaXB2Nl9hZGRyX2VxdWFsKFx1MDAyNmdub2RlLVx1MDAzZWdyb3VwX2FkZHIuaXA2LFxuLVx0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNmlwNmgtXHUwMDNlZGFkZHIpKVxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZncm91cC5pcDYpKVxuIFx0XHRcdFx0XHRcdGdvdG8gZm91bmQ7XG4gI2VuZGlmXG4gXHRcdFx0XHR9XG5AQCAtMjAwMCwxNCAmIzQzOzIwMDAsMjIgQEAgc3RhdGljIHZvaWQgYW10X2lnbXB2M19yZXBvcnRfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGlnbXB2M19yZXBvcnQgKmlocnYzID0gaWdtcHYzX3JlcG9ydF9oZHIoc2tiKTtcbiBcdGludCBsZW4gPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICYjNDM7IHNpemVvZigqaWhydjMpO1xuIFx0dm9pZCAqemVyb19ncmVjID0gKHZvaWQgKilcdTAwMjZpZ21wdjNfemVyb19ncmVjO1xuLVx0c3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTtcbiBcdHN0cnVjdCBhbXRfZ3JvdXBfbm9kZSAqZ25vZGU7XG4gXHR1bmlvbiBhbXRfYWRkciBncm91cCwgaG9zdDtcbiBcdHN0cnVjdCBpZ21wdjNfZ3JlYyAqZ3JlYztcbiYjNDM7XHRfX2JlMzIgc2FkZHI7XG4gXHR1MTYgbnNyY3M7XG4mIzQzO1x0dTE2IG5ncmVjO1xuIFx0aW50IGk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudG9ocyhpaHJ2My1cdTAwM2VuZ3JlYyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0LyogaWhydjMgYW5kIGlwX2hkcigpIHBvaW50IGludG8gdGhlIHNrYiBoZWFkLCB3aGljaCB0aGVcbiYjNDM7XHQgKiBpcF9tY19tYXlfcHVsbCgpIGNhbGxzIGJlbG93IGNhbiByZWFsbG9jYXRlLiAgUmVhZCBldmVyeSBmaWVsZFxuJiM0MztcdCAqIHRoYXQgaXMgdXNlZCBhZnRlciBhIHB1bGwgYmVmb3JlIHRoZSBmaXJzdCBvbmUgcnVucy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzYWRkciA9IGlwX2hkcihza2IpLVx1MDAzZXNhZGRyO1xuJiM0MztcdG5ncmVjID0gbnRvaHMoaWhydjMtXHUwMDNlbmdyZWMpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuZ3JlYzsgaSYjNDM7JiM0MzspIHtcbiBcdFx0bGVuICYjNDM7PSBzaXplb2YoKmdyZWMpO1xuIFx0XHRpZiAoIWlwX21jX21heV9wdWxsKHNrYiwgbGVuKSlcbiBcdFx0XHRicmVhaztcbkBAIC0yMDE5LDEwICYjNDM7MjAyNywxNCBAQCBzdGF0aWMgdm9pZCBhbXRfaWdtcHYzX3JlcG9ydF9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGlmICghaXBfbWNfbWF5X3B1bGwoc2tiLCBsZW4pKVxuIFx0XHRcdGJyZWFrO1xuIFxuJiM0MztcdFx0LyogaXBfbWNfbWF5X3B1bGwoKSBtYXkgaGF2ZSByZWFsbG9jYXRlZCB0aGUgaGVhZC4gKi9cbiYjNDM7XHRcdGdyZWMgPSAodm9pZCAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyBsZW4gLSBzaXplb2YoKmdyZWMpIC1cbiYjNDM7XHRcdFx0XHRuc3JjcyAqIHNpemVvZihfX2JlMzIpKTtcbiYjNDM7XG4gXHRcdG1lbXNldChcdTAwMjZncm91cCwgMCwgc2l6ZW9mKHVuaW9uIGFtdF9hZGRyKSk7XG4gXHRcdGdyb3VwLmlwNCA9IGdyZWMtXHUwMDNlZ3JlY19tY2E7XG4gXHRcdG1lbXNldChcdTAwMjZob3N0LCAwLCBzaXplb2YodW5pb24gYW10X2FkZHIpKTtcbi1cdFx0aG9zdC5pcDQgPSBpcGgtXHUwMDNlc2FkZHI7XG4mIzQzO1x0XHRob3N0LmlwNCA9IHNhZGRyO1xuIFx0XHRnbm9kZSA9IGFtdF9sb29rdXBfZ3JvdXAodHVubmVsLCBcdTAwMjZncm91cCwgXHUwMDI2aG9zdCwgZmFsc2UpO1xuIFx0XHRpZiAoIWdub2RlKSB7XG4gXHRcdFx0Z25vZGUgPSBhbXRfYWRkX2dyb3VwKGFtdCwgdHVubmVsLCBcdTAwMjZncm91cCwgXHUwMDI2aG9zdCxcbkBAIC0yMTYyLDE0ICYjNDM7MjE3NCwyMiBAQCBzdGF0aWMgdm9pZCBhbXRfbWxkdjJfcmVwb3J0X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBtbGQyX3JlcG9ydCAqbWxkMnIgPSAoc3RydWN0IG1sZDJfcmVwb3J0ICopaWNtcDZfaGRyKHNrYik7XG4gXHRpbnQgbGVuID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSAmIzQzOyBzaXplb2YoKm1sZDJyKTtcbiBcdHZvaWQgKnplcm9fZ3JlYyA9ICh2b2lkICopXHUwMDI2bWxkdjJfemVyb19ncmVjO1xuLVx0c3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpO1xuIFx0c3RydWN0IGFtdF9ncm91cF9ub2RlICpnbm9kZTtcbiBcdHVuaW9uIGFtdF9hZGRyIGdyb3VwLCBob3N0O1xuIFx0c3RydWN0IG1sZDJfZ3JlYyAqZ3JlYztcbiYjNDM7XHRzdHJ1Y3QgaW42X2FkZHIgc2FkZHI7XG4gXHR1MTYgbnNyY3M7XG4mIzQzO1x0dTE2IG5ncmVjO1xuIFx0aW50IGk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudG9ocyhtbGQyci1cdTAwM2VtbGQycl9uZ3JlYyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0LyogbWxkMnIgYW5kIGlwdjZfaGRyKCkgcG9pbnQgaW50byB0aGUgc2tiIGhlYWQsIHdoaWNoIHRoZVxuJiM0MztcdCAqIGlwdjZfbWNfbWF5X3B1bGwoKSBjYWxscyBiZWxvdyBjYW4gcmVhbGxvY2F0ZS4gIFJlYWQgZXZlcnkgZmllbGRcbiYjNDM7XHQgKiB0aGF0IGlzIHVzZWQgYWZ0ZXIgYSBwdWxsIGJlZm9yZSB0aGUgZmlyc3Qgb25lIHJ1bnMuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2FkZHIgPSBpcHY2X2hkcihza2IpLVx1MDAzZXNhZGRyO1xuJiM0MztcdG5ncmVjID0gbnRvaHMobWxkMnItXHUwMDNlbWxkMnJfbmdyZWMpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuZ3JlYzsgaSYjNDM7JiM0MzspIHtcbiBcdFx0bGVuICYjNDM7PSBzaXplb2YoKmdyZWMpO1xuIFx0XHRpZiAoIWlwdjZfbWNfbWF5X3B1bGwoc2tiLCBsZW4pKVxuIFx0XHRcdGJyZWFrO1xuQEAgLTIxODEsMTAgJiM0MzsyMjAxLDE0IEBAIHN0YXRpYyB2b2lkIGFtdF9tbGR2Ml9yZXBvcnRfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRpZiAoIWlwdjZfbWNfbWF5X3B1bGwoc2tiLCBsZW4pKVxuIFx0XHRcdGJyZWFrO1xuIFxuJiM0MztcdFx0LyogaXB2Nl9tY19tYXlfcHVsbCgpIG1heSBoYXZlIHJlYWxsb2NhdGVkIHRoZSBoZWFkLiAqL1xuJiM0MztcdFx0Z3JlYyA9ICh2b2lkICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IGxlbiAtIHNpemVvZigqZ3JlYykgLVxuJiM0MztcdFx0XHRcdG5zcmNzICogc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpO1xuJiM0MztcbiBcdFx0bWVtc2V0KFx1MDAyNmdyb3VwLCAwLCBzaXplb2YodW5pb24gYW10X2FkZHIpKTtcbiBcdFx0Z3JvdXAuaXA2ID0gZ3JlYy1cdTAwM2VncmVjX21jYTtcbiBcdFx0bWVtc2V0KFx1MDAyNmhvc3QsIDAsIHNpemVvZih1bmlvbiBhbXRfYWRkcikpO1xuLVx0XHRob3N0LmlwNiA9IGlwNmgtXHUwMDNlc2FkZHI7XG4mIzQzO1x0XHRob3N0LmlwNiA9IHNhZGRyO1xuIFx0XHRnbm9kZSA9IGFtdF9sb29rdXBfZ3JvdXAodHVubmVsLCBcdTAwMjZncm91cCwgXHUwMDI2aG9zdCwgdHJ1ZSk7XG4gXHRcdGlmICghZ25vZGUpIHtcbiBcdFx0XHRnbm9kZSA9IGFtdF9hZGRfZ3JvdXAoYW10LCB0dW5uZWwsIFx1MDAyNmdyb3VwLCBcdTAwMjZob3N0LFxuQEAgLTIzMDUsNyAmIzQzOzIzMjksMTIgQEAgc3RhdGljIGJvb2wgYW10X211bHRpY2FzdF9kYXRhX2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpldGgpKTtcbiBcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4gXHRza2JfcHVsbChza2IsIHNpemVvZigqZXRoKSk7XG4tXHRldGggPSBldGhfaGRyKHNrYik7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBMMiBoZWFkZXIgaXMgcmV3cml0dGVuIGJlbG93OyBtYWtlIHRoZSBoZWFkIHByaXZhdGUgZmlyc3Qgc28gYVxuJiM0MztcdCAqIGNsb25lZCBza2IgKGZvciBleGFtcGxlIG9uZSB0YWtlbiBieSBhIHBhY2tldCB0YXApIGlzIG5vdCBtb2RpZmllZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMCkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqaXBoKSkpXG4gXHRcdHJldHVybiB0cnVlO1xuQEAgLTIzMTUsNiAmIzQzOzIzNDQsOCBAQCBzdGF0aWMgYm9vbCBhbXRfbXVsdGljYXN0X2RhdGFfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRpZiAoIWlwdjRfaXNfbXVsdGljYXN0KGlwaC1cdTAwM2VkYWRkcikpXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTtcbiYjNDM7XHRcdC8qIHBza2JfbWF5X3B1bGwoKSBhYm92ZSBtYXkgaGF2ZSByZWFsbG9jYXRlZCB0aGUgaGVhZC4gKi9cbiYjNDM7XHRcdGV0aCA9IGV0aF9oZHIoc2tiKTtcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XG4gXHRcdGlwX2V0aF9tY19tYXAoaXBoLVx1MDAzZWRhZGRyLCBldGgtXHUwMDNlaF9kZXN0KTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbkBAIC0yMzI4LDYgJiM0MzsyMzU5LDggQEAgc3RhdGljIGJvb2wgYW10X211bHRpY2FzdF9kYXRhX2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0aWYgKCFpcHY2X2FkZHJfaXNfbXVsdGljYXN0KFx1MDAyNmlwNmgtXHUwMDNlZGFkZHIpKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTtcbiYjNDM7XHRcdC8qIHBza2JfbWF5X3B1bGwoKSBhYm92ZSBtYXkgaGF2ZSByZWFsbG9jYXRlZCB0aGUgaGVhZC4gKi9cbiYjNDM7XHRcdGV0aCA9IGV0aF9oZHIoc2tiKTtcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcbiBcdFx0aXB2Nl9ldGhfbWNfbWFwKFx1MDAyNmlwNmgtXHUwMDNlZGFkZHIsIGV0aC1cdTAwM2VoX2Rlc3QpO1xuICNlbmRpZlxuQEAgLTIzNTMsOCAmIzQzOzIzODYsMTAgQEAgc3RhdGljIGJvb2wgYW10X21lbWJlcnNoaXBfcXVlcnlfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LFxuIFx0c3RydWN0IGFtdF9oZWFkZXJfbWVtYmVyc2hpcF9xdWVyeSAqYW10bXE7XG4gXHRzdHJ1Y3QgaWdtcHYzX3F1ZXJ5ICppaHYzO1xuIFx0c3RydWN0IGV0aGhkciAqZXRoLCAqb2V0aDtcbiYjNDM7XHR1OCBoX3NvdXJjZVtFVEhfQUxFTl07XG4gXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbiBcdGludCBoZHJfc2l6ZSwgbGVuO1xuJiM0MztcdHU2NCByZXNwb25zZV9tYWM7XG4gXG4gXHRoZHJfc2l6ZSA9IHNpemVvZigqYW10bXEpICYjNDM7IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcbiBcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGhkcl9zaXplKSlcbkBAIC0yMzY3LDYgJiM0MzsyNDAyLDEyIEBAIHN0YXRpYyBib29sIGFtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCxcbiBcdGlmIChhbXRtcS1cdTAwM2Vub25jZSAhPSBhbXQtXHUwMDNlbm9uY2UpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuJiM0MztcdC8qIGlwdHVubmVsX3B1bGxfaGVhZGVyKCkgYW5kIHRoZSBwc2tiX21heV9wdWxsKCkgY2FsbHMgYmVsb3cgY2FuXG4mIzQzO1x0ICogcmVhbGxvY2F0ZSB0aGUgc2tiIGhlYWQsIHNvIGFtdG1xIHdvdWxkIGRhbmdsZS4gIFNuYXBzaG90IHRoZSBvbmx5XG4mIzQzO1x0ICogZmllbGQgdXNlZCBhZnRlcndhcmRzLlxuJiM0MztcdCAqL1xuJiM0MztcdHJlc3BvbnNlX21hYyA9IGFtdG1xLVx1MDAzZXJlc3BvbnNlX21hYztcbiYjNDM7XG4gXHRoZHJfc2l6ZSAtPSBzaXplb2YoKmV0aCk7XG4gXHRpZiAoaXB0dW5uZWxfcHVsbF9oZWFkZXIoc2tiLCBoZHJfc2l6ZSwgaHRvbnMoRVRIX1BfVEVCKSwgZmFsc2UpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbkBAIC0yMzc2LDYgJiM0MzsyNDE3LDEzIEBAIHN0YXRpYyBib29sIGFtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCxcbiBcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpldGgpKTtcbiBcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuIFx0ZXRoID0gZXRoX2hkcihza2IpO1xuJiM0MztcdC8qIFNuYXBzaG90IHRoZSBvdXRlciBzb3VyY2UgTUFDIGJlZm9yZSBhIGxhdGVyIHB1bGwgY2FuIGZyZWUgaXQuICovXG4mIzQzO1x0ZXRoZXJfYWRkcl9jb3B5KGhfc291cmNlLCBvZXRoLVx1MDAzZWhfc291cmNlKTtcbiYjNDM7XHQvKiBUaGUgTDIgaGVhZGVyIGlzIHJld3JpdHRlbiBiZWxvdzsgbWFrZSB0aGUgaGVhZCBwcml2YXRlIGZpcnN0IHNvIGFcbiYjNDM7XHQgKiBjbG9uZWQgc2tiIChmb3IgZXhhbXBsZSBvbmUgdGFrZW4gYnkgYSBwYWNrZXQgdGFwKSBpcyBub3QgbW9kaWZpZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNrYl9jb3dfaGVhZChza2IsIDApKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4gXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwaCkpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbkBAIC0yMzg4LDYgJiM0MzsyNDM2LDggQEAgc3RhdGljIGJvb2wgYW10X21lbWJlcnNoaXBfcXVlcnlfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LFxuIFx0XHRcdFx0ICAgc2l6ZW9mKCppaHYzKSkpXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXG4mIzQzO1x0XHQvKiBwc2tiX21heV9wdWxsKCkgYWJvdmUgbWF5IGhhdmUgcmVhbGxvY2F0ZWQgdGhlIGhlYWQuICovXG4mIzQzO1x0XHRpcGggPSBpcF9oZHIoc2tiKTtcbiBcdFx0aWYgKCFpcHY0X2lzX211bHRpY2FzdChpcGgtXHUwMDNlZGFkZHIpKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFxuQEAgLTIzOTUsMTAgJiM0MzsyNDQ1LDExIEBAIHN0YXRpYyBib29sIGFtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCxcbiBcdFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiBcdFx0c2tiX3B1c2goc2tiLCBzaXplb2YoKmlwaCkgJiM0MzsgQU1UX0lQSERSX09QVFMpO1xuIFx0XHRXUklURV9PTkNFKGFtdC1cdTAwM2VyZWFkeTQsIHRydWUpO1xuLVx0XHRhbXQtXHUwMDNlbWFjID0gYW10bXEtXHUwMDNlcmVzcG9uc2VfbWFjO1xuJiM0MztcdFx0YW10LVx1MDAzZW1hYyA9IHJlc3BvbnNlX21hYztcbiBcdFx0YW10LVx1MDAzZXJlcV9jbnQgPSAwO1xuIFx0XHRhbXQtXHUwMDNlcWkgPSBpaHYzLVx1MDAzZXFxaWM7XG4gXHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTtcbiYjNDM7XHRcdGV0aCA9IGV0aF9oZHIoc2tiKTtcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XG4gXHRcdGlwX2V0aF9tY19tYXAoaXBoLVx1MDAzZWRhZGRyLCBldGgtXHUwMDNlaF9kZXN0KTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbkBAIC0yNDIxLDEwICYjNDM7MjQ3MiwxMSBAQCBzdGF0aWMgYm9vbCBhbXRfbWVtYmVyc2hpcF9xdWVyeV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsXG4gXHRcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gXHRcdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCppcDZoKSAmIzQzOyBBTVRfSVA2SERSX09QVFMpO1xuIFx0XHRXUklURV9PTkNFKGFtdC1cdTAwM2VyZWFkeTYsIHRydWUpO1xuLVx0XHRhbXQtXHUwMDNlbWFjID0gYW10bXEtXHUwMDNlcmVzcG9uc2VfbWFjO1xuJiM0MztcdFx0YW10LVx1MDAzZW1hYyA9IHJlc3BvbnNlX21hYztcbiBcdFx0YW10LVx1MDAzZXJlcV9jbnQgPSAwO1xuIFx0XHRhbXQtXHUwMDNlcWkgPSBtbGQycS1cdTAwM2VtbGQycV9xcWljO1xuIFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTtcbiYjNDM7XHRcdGV0aCA9IGV0aF9oZHIoc2tiKTtcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcbiBcdFx0aXB2Nl9ldGhfbWNfbWFwKFx1MDAyNmlwNmgtXHUwMDNlZGFkZHIsIGV0aC1cdTAwM2VoX2Rlc3QpO1xuICNlbmRpZlxuQEAgLTI0MzIsNyAmIzQzOzI0ODQsNyBAQCBzdGF0aWMgYm9vbCBhbXRfbWVtYmVyc2hpcF9xdWVyeV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuLVx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cdTAwM2VoX3NvdXJjZSwgb2V0aC1cdTAwM2VoX3NvdXJjZSk7XG4mIzQzO1x0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cdTAwM2VoX3NvdXJjZSwgaF9zb3VyY2UpO1xuIFx0c2tiLVx1MDAzZXBrdF90eXBlID0gUEFDS0VUX01VTFRJQ0FTVDtcbiBcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FO1xuIFx0bGVuID0gc2tiLVx1MDAzZWxlbjtcbkBAIC0yNDU1LDggJiM0MzsyNTA3LDEzIEBAIHN0YXRpYyBib29sIGFtdF91cGRhdGVfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c3RydWN0IGV0aGhkciAqZXRoO1xuIFx0c3RydWN0IGlwaGRyICppcGg7XG4gXHRpbnQgbGVuLCBoZHJfc2l6ZTtcbiYjNDM7XHRfX2JlMzIgc2FkZHI7XG4gXG4tXHRpcGggPSBpcF9oZHIoc2tiKTtcbiYjNDM7XHQvKiBpcF9oZHIoKSBwb2ludHMgaW50byB0aGUgc2tiIGhlYWQsIHdoaWNoIHRoZSBwc2tiX21heV9wdWxsKCkgL1xuJiM0MztcdCAqIGlwdHVubmVsX3B1bGxfaGVhZGVyKCkgY2FsbHMgYmVsb3cgY2FuIHJlYWxsb2NhdGUuICBTbmFwc2hvdCB0aGVcbiYjNDM7XHQgKiBzb3VyY2UgYWRkcmVzcyB1c2VkIGZvciB0aGUgdHVubmVsIGxvb2t1cCBiZWZvcmUgdGhlIGZpcnN0IHB1bGwuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2FkZHIgPSBpcF9oZHIoc2tiKS1cdTAwM2VzYWRkcjtcbiBcbiBcdGhkcl9zaXplID0gc2l6ZW9mKCphbXRtdSkgJiM0Mzsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuIFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGRyX3NpemUpKVxuQEAgLTI0NzIsNyAmIzQzOzI1MjksNyBAQCBzdGF0aWMgYm9vbCBhbXRfdXBkYXRlX2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodHVubmVsLCBcdTAwMjZhbXQtXHUwMDNldHVubmVsX2xpc3QsIGxpc3QpIHtcbi1cdFx0aWYgKHR1bm5lbC1cdTAwM2VpcDQgPT0gaXBoLVx1MDAzZXNhZGRyKSB7XG4mIzQzO1x0XHRpZiAodHVubmVsLVx1MDAzZWlwNCA9PSBzYWRkcikge1xuIFx0XHRcdGlmICgoYW10bXUtXHUwMDNlbm9uY2UgPT0gdHVubmVsLVx1MDAzZW5vbmNlIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICAgYW10bXUtXHUwMDNlcmVzcG9uc2VfbWFjID09IHR1bm5lbC1cdTAwM2VtYWMpKSB7XG4gXHRcdFx0XHRtb2RfZGVsYXllZF93b3JrKGFtdF93cSwgXHUwMDI2dHVubmVsLVx1MDAzZWdjX3dxLFxuQEAgLTI0OTIsNiAmIzQzOzI1NDksMTIgQEAgc3RhdGljIGJvb2wgYW10X3VwZGF0ZV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwaCkpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiYjNDM7XHQvKiBUaGUgTDIgaGVhZGVyIGlzIHJld3JpdHRlbiBiZWxvdzsgbWFrZSB0aGUgaGVhZCBwcml2YXRlIGZpcnN0IHNvIGFcbiYjNDM7XHQgKiBjbG9uZWQgc2tiIChmb3IgZXhhbXBsZSBvbmUgdGFrZW4gYnkgYSBwYWNrZXQgdGFwKSBpcyBub3QgbW9kaWZpZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNrYl9jb3dfaGVhZChza2IsIDApKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuIFx0aXBoID0gaXBfaGRyKHNrYik7XG4gXHRpZiAoaXBoLVx1MDAzZXZlcnNpb24gPT0gNCkge1xuIFx0XHRpZiAoaXBfbWNfY2hlY2tfaWdtcChza2IpKSB7XG5AQCAtMjUwOCw2ICYjNDM7MjU3MSwxMCBAQCBzdGF0aWMgYm9vbCBhbXRfdXBkYXRlX2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0ZXRoID0gZXRoX2hkcihza2IpO1xuIFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XG4gXHRcdGV0aC1cdTAwM2VoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVApO1xuJiM0MztcdFx0LyogaXBfbWNfY2hlY2tfaWdtcCgpIGFuZCB0aGUgcmVwb3J0IGhhbmRsZXIgbWF5IGhhdmVcbiYjNDM7XHRcdCAqIHJlYWxsb2NhdGVkIHRoZSBoZWFkOyByZS1kZXJpdmUgaXBoLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpcGggPSBpcF9oZHIoc2tiKTtcbiBcdFx0aXBfZXRoX21jX21hcChpcGgtXHUwMDNlZGFkZHIsIGV0aC1cdTAwM2VoX2Rlc3QpO1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuIFx0fSBlbHNlIGlmIChpcGgtXHUwMDNldmVyc2lvbiA9PSA2KSB7XG5AQCAtMjUyNyw2ICYjNDM7MjU5NCwxMCBAQCBzdGF0aWMgYm9vbCBhbXRfdXBkYXRlX2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0ZXRoID0gZXRoX2hkcihza2IpO1xuIFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTtcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcbiYjNDM7XHRcdC8qIGlwdjZfbWNfY2hlY2tfbWxkKCkgYW5kIHRoZSByZXBvcnQgaGFuZGxlciBtYXkgaGF2ZVxuJiM0MztcdFx0ICogcmVhbGxvY2F0ZWQgdGhlIGhlYWQ7IHJlLWRlcml2ZSBpcDZoLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpcDZoID0gaXB2Nl9oZHIoc2tiKTtcbiBcdFx0aXB2Nl9ldGhfbWNfbWFwKFx1MDAyNmlwNmgtXHUwMDNlZGFkZHIsIGV0aC1cdTAwM2VoX2Rlc3QpO1xuICNlbmRpZlxuIFx0fSBlbHNlIHtcbkBAIC0yNzcyLDcgJiM0MzsyODQzLDcgQEAgc3RhdGljIHZvaWQgYW10X2d3X3JjdihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHN0YXRpYyBpbnQgYW10X3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IGFtdF9kZXYgKmFtdDtcbi1cdHN0cnVjdCBpcGhkciAqaXBoO1xuJiM0MztcdF9fYmUzMiBzYWRkcjtcbiBcdGludCB0eXBlO1xuIFx0Ym9vbCBlcnI7XG4gXG5AQCAtMjc4NSw3ICYjNDM7Mjg1NiwxMSBAQCBzdGF0aWMgaW50IGFtdF9yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0fVxuIFxuIFx0c2tiLVx1MDAzZWRldiA9IGFtdC1cdTAwM2VkZXY7XG4tXHRpcGggPSBpcF9oZHIoc2tiKTtcbiYjNDM7XHQvKiBhbXRfcGFyc2VfdHlwZSgpIGNhbGxzIHBza2JfbWF5X3B1bGwoKSwgd2hpY2ggY2FuIHJlYWxsb2NhdGUgdGhlXG4mIzQzO1x0ICogc2tiIGhlYWQgYW5kIGxlYXZlIGEgY2FjaGVkIGlwX2hkcigpIGRhbmdsaW5nLiAgU25hcHNob3QgdGhlIHNvdXJjZVxuJiM0MztcdCAqIGFkZHJlc3MgdXNlZCBiZWxvdyBiZWZvcmUgdGhlIHB1bGwuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2FkZHIgPSBpcF9oZHIoc2tiKS1cdTAwM2VzYWRkcjtcbiBcdHR5cGUgPSBhbXRfcGFyc2VfdHlwZShza2IpO1xuIFx0aWYgKHR5cGUgPT0gLTEpIHtcbiBcdFx0ZXJyID0gdHJ1ZTtcbkBAIC0yNzk1LDcgJiM0MzsyODcwLDcgQEAgc3RhdGljIGludCBhbXRfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlmIChhbXQtXHUwMDNlbW9kZSA9PSBBTVRfTU9ERV9HQVRFV0FZKSB7XG4gXHRcdHN3aXRjaCAodHlwZSkge1xuIFx0XHRjYXNlIEFNVF9NU0dfQURWRVJUSVNFTUVOVDpcbi1cdFx0XHRpZiAoaXBoLVx1MDAzZXNhZGRyICE9IGFtdC1cdTAwM2VkaXNjb3ZlcnlfaXApIHtcbiYjNDM7XHRcdFx0aWYgKHNhZGRyICE9IGFtdC1cdTAwM2VkaXNjb3ZlcnlfaXApIHtcbiBcdFx0XHRcdG5ldGRldl9kYmcoYW10LVx1MDAzZWRldiwgXCYjMzQ7SW52YWxpZCBSZWxheSBJUFxcblwmIzM0Oyk7XG4gXHRcdFx0XHRlcnIgPSB0cnVlO1xuIFx0XHRcdFx0Z290byBkcm9wO1xuQEAgLTI4MDcsNyAmIzQzOzI4ODIsNyBAQCBzdGF0aWMgaW50IGFtdF9yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdH1cbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0Y2FzZSBBTVRfTVNHX01VTFRJQ0FTVF9EQVRBOlxuLVx0XHRcdGlmIChpcGgtXHUwMDNlc2FkZHIgIT0gYW10LVx1MDAzZXJlbW90ZV9pcCkge1xuJiM0MztcdFx0XHRpZiAoc2FkZHIgIT0gYW10LVx1MDAzZXJlbW90ZV9pcCkge1xuIFx0XHRcdFx0bmV0ZGV2X2RiZyhhbXQtXHUwMDNlZGV2LCBcJiMzNDtJbnZhbGlkIFJlbGF5IElQXFxuXCYjMzQ7KTtcbiBcdFx0XHRcdGVyciA9IHRydWU7XG4gXHRcdFx0XHRnb3RvIGRyb3A7XG5AQCAtMjgxOCw3ICYjNDM7Mjg5Myw3IEBAIHN0YXRpYyBpbnQgYW10X3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0Z290byBvdXQ7XG4gXHRcdGNhc2UgQU1UX01TR19NRU1CRVJTSElQX1FVRVJZOlxuLVx0XHRcdGlmIChpcGgtXHUwMDNlc2FkZHIgIT0gYW10LVx1MDAzZXJlbW90ZV9pcCkge1xuJiM0MztcdFx0XHRpZiAoc2FkZHIgIT0gYW10LVx1MDAzZXJlbW90ZV9pcCkge1xuIFx0XHRcdFx0bmV0ZGV2X2RiZyhhbXQtXHUwMDNlZGV2LCBcJiMzNDtJbnZhbGlkIFJlbGF5IElQXFxuXCYjMzQ7KTtcbiBcdFx0XHRcdGVyciA9IHRydWU7XG4gXHRcdFx0XHRnb3RvIGRyb3A7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDU6MjU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QU1UJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbXRfZGV2X3htaXQmIzM0OywKICAgICYjMzQ7YW10X2lnbXB2M19yZXBvcnRfaGFuZGxlciYjMzQ7LAogICAgJiMzNDthbXRfbWxkdjJfcmVwb3J0X2hhbmRsZXImIzM0OywKICAgICYjMzQ7YW10X211bHRpY2FzdF9kYXRhX2hhbmRsZXImIzM0OywKICAgICYjMzQ7YW10X21lbWJlcnNoaXBfcXVlcnlfaGFuZGxlciYjMzQ7LAogICAgJiMzNDthbXRfdXBkYXRlX2hhbmRsZXImIzM0OywKICAgICYjMzQ7YW10X3JjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBtdWx0aXBsZSB1c2UtYWZ0ZXItZnJlZSBhbmQgZGFuZ2xpbmcgcG9pbnRlciBidWdzIGluIHRoZSBBTVQgKEF1dG9tYXRpYyBNdWx0aWNhc3QgVHVubmVsaW5nKSBkcml2ZXIgY2F1c2VkIGJ5IGBwc2tiX21heV9wdWxsYCBhbmQgc2ltaWxhciBmdW5jdGlvbnMgcmVhbGxvY2F0aW5nIHRoZSBza2IgaGVhZCB3aGlsZSBob2xkaW5nIHBvaW50ZXJzIHRvIG5ldHdvcmsgaGVhZGVycy4gSXQgYWxzbyBhZGRzIGBza2JfY293X2hlYWRgIHRvIHByZXZlbnQgbW9kaWZ5aW5nIGNsb25lZCBza2JzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBuZXR3b3JrIGRyaXZlciBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gZnVydGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgZXhpc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUzZmJmNjM1NzY5NjA5ZjM0YWQ5YzQ1MGYwMTVlZWY0NjM2NDdjNzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCA4IDA1OjI1OjExIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYW10LmMgYi9kcml2ZXJzL25ldC9hbXQuYwppbmRleCBmMmYzMTM5ZTM4YTU5OS4uZjczNzVlNDBiYzhmMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FtdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2FtdC5jCkBAIC0xMjExLDcgJiM0MzsxMjExLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFtdF9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCQkJZGF0YSA9IHRydWU7CiAJCX0KIAkJdjYgPSBmYWxzZTsKLQkJZ3JvdXAuaXA0ID0gaXBoLSZndDtkYWRkcjsKJiM0MzsJCWdyb3VwLmlwNCA9IGlwX2hkcihza2IpLSZndDtkYWRkcjsKICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQogCX0gZWxzZSBpZiAoaXBoLSZndDt2ZXJzaW9uID09IDYpIHsKIAkJaXA2aCA9IGlwdjZfaGRyKHNrYik7CkBAIC0xMjM1LDcgJiM0MzsxMjM1LDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFtdF9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCQkJZGF0YSA9IHRydWU7CiAJCX0KIAkJdjYgPSB0cnVlOwotCQlncm91cC5pcDYgPSBpcDZoLSZndDtkYWRkcjsKJiM0MzsJCWdyb3VwLmlwNiA9IGlwdjZfaGRyKHNrYiktJmd0O2RhZGRyOwogI2VuZGlmCiAJfSBlbHNlIHsKIAkJZGV2LSZndDtzdGF0cy50eF9lcnJvcnMmIzQzOyYjNDM7OwpAQCAtMTI3OCwxMiAmIzQzOzEyNzgsMTIgQEAgc3RhdGljIG5ldGRldl90eF90IGFtdF9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGdub2RlLCAmYW1wO3R1bm5lbC0mZ3Q7Z3JvdXBzW2hhc2hdLAogCQkJCQkJIG5vZGUpIHsKIAkJCQlpZiAoIXY2KSB7Ci0JCQkJCWlmIChnbm9kZS0mZ3Q7Z3JvdXBfYWRkci5pcDQgPT0gaXBoLSZndDtkYWRkcikKJiM0MzsJCQkJCWlmIChnbm9kZS0mZ3Q7Z3JvdXBfYWRkci5pcDQgPT0gZ3JvdXAuaXA0KQogCQkJCQkJZ290byBmb3VuZDsKICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQogCQkJCX0gZWxzZSB7CiAJCQkJCWlmIChpcHY2X2FkZHJfZXF1YWwoJmFtcDtnbm9kZS0mZ3Q7Z3JvdXBfYWRkci5pcDYsCi0JCQkJCQkJICAgICZhbXA7aXA2aC0mZ3Q7ZGFkZHIpKQomIzQzOwkJCQkJCQkgICAgJmFtcDtncm91cC5pcDYpKQogCQkJCQkJZ290byBmb3VuZDsKICNlbmRpZgogCQkJCX0KQEAgLTIwMDAsMTQgJiM0MzsyMDAwLDIyIEBAIHN0YXRpYyB2b2lkIGFtdF9pZ21wdjNfcmVwb3J0X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3QgaWdtcHYzX3JlcG9ydCAqaWhydjMgPSBpZ21wdjNfcmVwb3J0X2hkcihza2IpOwogCWludCBsZW4gPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICYjNDM7IHNpemVvZigqaWhydjMpOwogCXZvaWQgKnplcm9fZ3JlYyA9ICh2b2lkICopJmFtcDtpZ21wdjNfemVyb19ncmVjOwotCXN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7CiAJc3RydWN0IGFtdF9ncm91cF9ub2RlICpnbm9kZTsKIAl1bmlvbiBhbXRfYWRkciBncm91cCwgaG9zdDsKIAlzdHJ1Y3QgaWdtcHYzX2dyZWMgKmdyZWM7CiYjNDM7CV9fYmUzMiBzYWRkcjsKIAl1MTYgbnNyY3M7CiYjNDM7CXUxNiBuZ3JlYzsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBudG9ocyhpaHJ2My0mZ3Q7bmdyZWMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkvKiBpaHJ2MyBhbmQgaXBfaGRyKCkgcG9pbnQgaW50byB0aGUgc2tiIGhlYWQsIHdoaWNoIHRoZQomIzQzOwkgKiBpcF9tY19tYXlfcHVsbCgpIGNhbGxzIGJlbG93IGNhbiByZWFsbG9jYXRlLiAgUmVhZCBldmVyeSBmaWVsZAomIzQzOwkgKiB0aGF0IGlzIHVzZWQgYWZ0ZXIgYSBwdWxsIGJlZm9yZSB0aGUgZmlyc3Qgb25lIHJ1bnMuCiYjNDM7CSAqLwomIzQzOwlzYWRkciA9IGlwX2hkcihza2IpLSZndDtzYWRkcjsKJiM0MzsJbmdyZWMgPSBudG9ocyhpaHJ2My0mZ3Q7bmdyZWMpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbmdyZWM7IGkmIzQzOyYjNDM7KSB7CiAJCWxlbiAmIzQzOz0gc2l6ZW9mKCpncmVjKTsKIAkJaWYgKCFpcF9tY19tYXlfcHVsbChza2IsIGxlbikpCiAJCQlicmVhazsKQEAgLTIwMTksMTAgJiM0MzsyMDI3LDE0IEBAIHN0YXRpYyB2b2lkIGFtdF9pZ21wdjNfcmVwb3J0X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJaWYgKCFpcF9tY19tYXlfcHVsbChza2IsIGxlbikpCiAJCQlicmVhazsKIAomIzQzOwkJLyogaXBfbWNfbWF5X3B1bGwoKSBtYXkgaGF2ZSByZWFsbG9jYXRlZCB0aGUgaGVhZC4gKi8KJiM0MzsJCWdyZWMgPSAodm9pZCAqKShza2ItJmd0O2RhdGEgJiM0MzsgbGVuIC0gc2l6ZW9mKCpncmVjKSAtCiYjNDM7CQkJCW5zcmNzICogc2l6ZW9mKF9fYmUzMikpOwomIzQzOwogCQltZW1zZXQoJmFtcDtncm91cCwgMCwgc2l6ZW9mKHVuaW9uIGFtdF9hZGRyKSk7CiAJCWdyb3VwLmlwNCA9IGdyZWMtJmd0O2dyZWNfbWNhOwogCQltZW1zZXQoJmFtcDtob3N0LCAwLCBzaXplb2YodW5pb24gYW10X2FkZHIpKTsKLQkJaG9zdC5pcDQgPSBpcGgtJmd0O3NhZGRyOwomIzQzOwkJaG9zdC5pcDQgPSBzYWRkcjsKIAkJZ25vZGUgPSBhbXRfbG9va3VwX2dyb3VwKHR1bm5lbCwgJmFtcDtncm91cCwgJmFtcDtob3N0LCBmYWxzZSk7CiAJCWlmICghZ25vZGUpIHsKIAkJCWdub2RlID0gYW10X2FkZF9ncm91cChhbXQsIHR1bm5lbCwgJmFtcDtncm91cCwgJmFtcDtob3N0LApAQCAtMjE2MiwxNCAmIzQzOzIxNzQsMjIgQEAgc3RhdGljIHZvaWQgYW10X21sZHYyX3JlcG9ydF9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IsCiAJc3RydWN0IG1sZDJfcmVwb3J0ICptbGQyciA9IChzdHJ1Y3QgbWxkMl9yZXBvcnQgKilpY21wNl9oZHIoc2tiKTsKIAlpbnQgbGVuID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSAmIzQzOyBzaXplb2YoKm1sZDJyKTsKIAl2b2lkICp6ZXJvX2dyZWMgPSAodm9pZCAqKSZhbXA7bWxkdjJfemVyb19ncmVjOwotCXN0cnVjdCBpcHY2aGRyICppcDZoID0gaXB2Nl9oZHIoc2tiKTsKIAlzdHJ1Y3QgYW10X2dyb3VwX25vZGUgKmdub2RlOwogCXVuaW9uIGFtdF9hZGRyIGdyb3VwLCBob3N0OwogCXN0cnVjdCBtbGQyX2dyZWMgKmdyZWM7CiYjNDM7CXN0cnVjdCBpbjZfYWRkciBzYWRkcjsKIAl1MTYgbnNyY3M7CiYjNDM7CXUxNiBuZ3JlYzsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBudG9ocyhtbGQyci0mZ3Q7bWxkMnJfbmdyZWMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkvKiBtbGQyciBhbmQgaXB2Nl9oZHIoKSBwb2ludCBpbnRvIHRoZSBza2IgaGVhZCwgd2hpY2ggdGhlCiYjNDM7CSAqIGlwdjZfbWNfbWF5X3B1bGwoKSBjYWxscyBiZWxvdyBjYW4gcmVhbGxvY2F0ZS4gIFJlYWQgZXZlcnkgZmllbGQKJiM0MzsJICogdGhhdCBpcyB1c2VkIGFmdGVyIGEgcHVsbCBiZWZvcmUgdGhlIGZpcnN0IG9uZSBydW5zLgomIzQzOwkgKi8KJiM0MzsJc2FkZHIgPSBpcHY2X2hkcihza2IpLSZndDtzYWRkcjsKJiM0MzsJbmdyZWMgPSBudG9ocyhtbGQyci0mZ3Q7bWxkMnJfbmdyZWMpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbmdyZWM7IGkmIzQzOyYjNDM7KSB7CiAJCWxlbiAmIzQzOz0gc2l6ZW9mKCpncmVjKTsKIAkJaWYgKCFpcHY2X21jX21heV9wdWxsKHNrYiwgbGVuKSkKIAkJCWJyZWFrOwpAQCAtMjE4MSwxMCAmIzQzOzIyMDEsMTQgQEAgc3RhdGljIHZvaWQgYW10X21sZHYyX3JlcG9ydF9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IsCiAJCWlmICghaXB2Nl9tY19tYXlfcHVsbChza2IsIGxlbikpCiAJCQlicmVhazsKIAomIzQzOwkJLyogaXB2Nl9tY19tYXlfcHVsbCgpIG1heSBoYXZlIHJlYWxsb2NhdGVkIHRoZSBoZWFkLiAqLwomIzQzOwkJZ3JlYyA9ICh2b2lkICopKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBsZW4gLSBzaXplb2YoKmdyZWMpIC0KJiM0MzsJCQkJbnNyY3MgKiBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CiYjNDM7CiAJCW1lbXNldCgmYW1wO2dyb3VwLCAwLCBzaXplb2YodW5pb24gYW10X2FkZHIpKTsKIAkJZ3JvdXAuaXA2ID0gZ3JlYy0mZ3Q7Z3JlY19tY2E7CiAJCW1lbXNldCgmYW1wO2hvc3QsIDAsIHNpemVvZih1bmlvbiBhbXRfYWRkcikpOwotCQlob3N0LmlwNiA9IGlwNmgtJmd0O3NhZGRyOwomIzQzOwkJaG9zdC5pcDYgPSBzYWRkcjsKIAkJZ25vZGUgPSBhbXRfbG9va3VwX2dyb3VwKHR1bm5lbCwgJmFtcDtncm91cCwgJmFtcDtob3N0LCB0cnVlKTsKIAkJaWYgKCFnbm9kZSkgewogCQkJZ25vZGUgPSBhbXRfYWRkX2dyb3VwKGFtdCwgdHVubmVsLCAmYW1wO2dyb3VwLCAmYW1wO2hvc3QsCkBAIC0yMzA1LDcgJiM0MzsyMzI5LDEyIEBAIHN0YXRpYyBib29sIGFtdF9tdWx0aWNhc3RfZGF0YV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IpCiAJc2tiX3B1c2goc2tiLCBzaXplb2YoKmV0aCkpOwogCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJc2tiX3B1bGwoc2tiLCBzaXplb2YoKmV0aCkpOwotCWV0aCA9IGV0aF9oZHIoc2tiKTsKJiM0MzsKJiM0MzsJLyogVGhlIEwyIGhlYWRlciBpcyByZXdyaXR0ZW4gYmVsb3c7IG1ha2UgdGhlIGhlYWQgcHJpdmF0ZSBmaXJzdCBzbyBhCiYjNDM7CSAqIGNsb25lZCBza2IgKGZvciBleGFtcGxlIG9uZSB0YWtlbiBieSBhIHBhY2tldCB0YXApIGlzIG5vdCBtb2RpZmllZC4KJiM0MzsJICovCiYjNDM7CWlmIChza2JfY293X2hlYWQoc2tiLCAwKSkKJiM0MzsJCXJldHVybiB0cnVlOwogCiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCppcGgpKSkKIAkJcmV0dXJuIHRydWU7CkBAIC0yMzE1LDYgJiM0MzsyMzQ0LDggQEAgc3RhdGljIGJvb2wgYW10X211bHRpY2FzdF9kYXRhX2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJaWYgKCFpcHY0X2lzX211bHRpY2FzdChpcGgtJmd0O2RhZGRyKSkKIAkJCXJldHVybiB0cnVlOwogCQlza2ItJmd0O3Byb3RvY29sID0gaHRvbnMoRVRIX1BfSVApOwomIzQzOwkJLyogcHNrYl9tYXlfcHVsbCgpIGFib3ZlIG1heSBoYXZlIHJlYWxsb2NhdGVkIHRoZSBoZWFkLiAqLwomIzQzOwkJZXRoID0gZXRoX2hkcihza2IpOwogCQlldGgtJmd0O2hfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7CiAJCWlwX2V0aF9tY19tYXAoaXBoLSZndDtkYWRkciwgZXRoLSZndDtoX2Rlc3QpOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCkBAIC0yMzI4LDYgJiM0MzsyMzU5LDggQEAgc3RhdGljIGJvb2wgYW10X211bHRpY2FzdF9kYXRhX2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJaWYgKCFpcHY2X2FkZHJfaXNfbXVsdGljYXN0KCZhbXA7aXA2aC0mZ3Q7ZGFkZHIpKQogCQkJcmV0dXJuIHRydWU7CiAJCXNrYi0mZ3Q7cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTsKJiM0MzsJCS8qIHBza2JfbWF5X3B1bGwoKSBhYm92ZSBtYXkgaGF2ZSByZWFsbG9jYXRlZCB0aGUgaGVhZC4gKi8KJiM0MzsJCWV0aCA9IGV0aF9oZHIoc2tiKTsKIAkJZXRoLSZndDtoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVBWNik7CiAJCWlwdjZfZXRoX21jX21hcCgmYW1wO2lwNmgtJmd0O2RhZGRyLCBldGgtJmd0O2hfZGVzdCk7CiAjZW5kaWYKQEAgLTIzNTMsOCAmIzQzOzIzODYsMTAgQEAgc3RhdGljIGJvb2wgYW10X21lbWJlcnNoaXBfcXVlcnlfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LAogCXN0cnVjdCBhbXRfaGVhZGVyX21lbWJlcnNoaXBfcXVlcnkgKmFtdG1xOwogCXN0cnVjdCBpZ21wdjNfcXVlcnkgKmlodjM7CiAJc3RydWN0IGV0aGhkciAqZXRoLCAqb2V0aDsKJiM0MzsJdTggaF9zb3VyY2VbRVRIX0FMRU5dOwogCXN0cnVjdCBpcGhkciAqaXBoOwogCWludCBoZHJfc2l6ZSwgbGVuOwomIzQzOwl1NjQgcmVzcG9uc2VfbWFjOwogCiAJaGRyX3NpemUgPSBzaXplb2YoKmFtdG1xKSAmIzQzOyBzaXplb2Yoc3RydWN0IHVkcGhkcik7CiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGRyX3NpemUpKQpAQCAtMjM2Nyw2ICYjNDM7MjQwMiwxMiBAQCBzdGF0aWMgYm9vbCBhbXRfbWVtYmVyc2hpcF9xdWVyeV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsCiAJaWYgKGFtdG1xLSZndDtub25jZSAhPSBhbXQtJmd0O25vbmNlKQogCQlyZXR1cm4gdHJ1ZTsKIAomIzQzOwkvKiBpcHR1bm5lbF9wdWxsX2hlYWRlcigpIGFuZCB0aGUgcHNrYl9tYXlfcHVsbCgpIGNhbGxzIGJlbG93IGNhbgomIzQzOwkgKiByZWFsbG9jYXRlIHRoZSBza2IgaGVhZCwgc28gYW10bXEgd291bGQgZGFuZ2xlLiAgU25hcHNob3QgdGhlIG9ubHkKJiM0MzsJICogZmllbGQgdXNlZCBhZnRlcndhcmRzLgomIzQzOwkgKi8KJiM0MzsJcmVzcG9uc2VfbWFjID0gYW10bXEtJmd0O3Jlc3BvbnNlX21hYzsKJiM0MzsKIAloZHJfc2l6ZSAtPSBzaXplb2YoKmV0aCk7CiAJaWYgKGlwdHVubmVsX3B1bGxfaGVhZGVyKHNrYiwgaGRyX3NpemUsIGh0b25zKEVUSF9QX1RFQiksIGZhbHNlKSkKIAkJcmV0dXJuIHRydWU7CkBAIC0yMzc2LDYgJiM0MzsyNDE3LDEzIEBAIHN0YXRpYyBib29sIGFtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwKIAlza2JfcHVsbChza2IsIHNpemVvZigqZXRoKSk7CiAJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CiAJZXRoID0gZXRoX2hkcihza2IpOwomIzQzOwkvKiBTbmFwc2hvdCB0aGUgb3V0ZXIgc291cmNlIE1BQyBiZWZvcmUgYSBsYXRlciBwdWxsIGNhbiBmcmVlIGl0LiAqLwomIzQzOwlldGhlcl9hZGRyX2NvcHkoaF9zb3VyY2UsIG9ldGgtJmd0O2hfc291cmNlKTsKJiM0MzsJLyogVGhlIEwyIGhlYWRlciBpcyByZXdyaXR0ZW4gYmVsb3c7IG1ha2UgdGhlIGhlYWQgcHJpdmF0ZSBmaXJzdCBzbyBhCiYjNDM7CSAqIGNsb25lZCBza2IgKGZvciBleGFtcGxlIG9uZSB0YWtlbiBieSBhIHBhY2tldCB0YXApIGlzIG5vdCBtb2RpZmllZC4KJiM0MzsJICovCiYjNDM7CWlmIChza2JfY293X2hlYWQoc2tiLCAwKSkKJiM0MzsJCXJldHVybiB0cnVlOwogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqaXBoKSkpCiAJCXJldHVybiB0cnVlOwogCkBAIC0yMzg4LDYgJiM0MzsyNDM2LDggQEAgc3RhdGljIGJvb2wgYW10X21lbWJlcnNoaXBfcXVlcnlfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LAogCQkJCSAgIHNpemVvZigqaWh2MykpKQogCQkJcmV0dXJuIHRydWU7CiAKJiM0MzsJCS8qIHBza2JfbWF5X3B1bGwoKSBhYm92ZSBtYXkgaGF2ZSByZWFsbG9jYXRlZCB0aGUgaGVhZC4gKi8KJiM0MzsJCWlwaCA9IGlwX2hkcihza2IpOwogCQlpZiAoIWlwdjRfaXNfbXVsdGljYXN0KGlwaC0mZ3Q7ZGFkZHIpKQogCQkJcmV0dXJuIHRydWU7CiAKQEAgLTIzOTUsMTAgJiM0MzsyNDQ1LDExIEBAIHN0YXRpYyBib29sIGFtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwKIAkJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKIAkJc2tiX3B1c2goc2tiLCBzaXplb2YoKmlwaCkgJiM0MzsgQU1UX0lQSERSX09QVFMpOwogCQlXUklURV9PTkNFKGFtdC0mZ3Q7cmVhZHk0LCB0cnVlKTsKLQkJYW10LSZndDttYWMgPSBhbXRtcS0mZ3Q7cmVzcG9uc2VfbWFjOwomIzQzOwkJYW10LSZndDttYWMgPSByZXNwb25zZV9tYWM7CiAJCWFtdC0mZ3Q7cmVxX2NudCA9IDA7CiAJCWFtdC0mZ3Q7cWkgPSBpaHYzLSZndDtxcWljOwogCQlza2ItJmd0O3Byb3RvY29sID0gaHRvbnMoRVRIX1BfSVApOwomIzQzOwkJZXRoID0gZXRoX2hkcihza2IpOwogCQlldGgtJmd0O2hfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7CiAJCWlwX2V0aF9tY19tYXAoaXBoLSZndDtkYWRkciwgZXRoLSZndDtoX2Rlc3QpOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCkBAIC0yNDIxLDEwICYjNDM7MjQ3MiwxMSBAQCBzdGF0aWMgYm9vbCBhbXRfbWVtYmVyc2hpcF9xdWVyeV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsCiAJCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiAJCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKCppcDZoKSAmIzQzOyBBTVRfSVA2SERSX09QVFMpOwogCQlXUklURV9PTkNFKGFtdC0mZ3Q7cmVhZHk2LCB0cnVlKTsKLQkJYW10LSZndDttYWMgPSBhbXRtcS0mZ3Q7cmVzcG9uc2VfbWFjOwomIzQzOwkJYW10LSZndDttYWMgPSByZXNwb25zZV9tYWM7CiAJCWFtdC0mZ3Q7cmVxX2NudCA9IDA7CiAJCWFtdC0mZ3Q7cWkgPSBtbGQycS0mZ3Q7bWxkMnFfcXFpYzsKIAkJc2tiLSZndDtwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpOwomIzQzOwkJZXRoID0gZXRoX2hkcihza2IpOwogCQlldGgtJmd0O2hfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTsKIAkJaXB2Nl9ldGhfbWNfbWFwKCZhbXA7aXA2aC0mZ3Q7ZGFkZHIsIGV0aC0mZ3Q7aF9kZXN0KTsKICNlbmRpZgpAQCAtMjQzMiw3ICYjNDM7MjQ4NCw3IEBAIHN0YXRpYyBib29sIGFtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwKIAkJcmV0dXJuIHRydWU7CiAJfQogCi0JZXRoZXJfYWRkcl9jb3B5KGV0aC0mZ3Q7aF9zb3VyY2UsIG9ldGgtJmd0O2hfc291cmNlKTsKJiM0MzsJZXRoZXJfYWRkcl9jb3B5KGV0aC0mZ3Q7aF9zb3VyY2UsIGhfc291cmNlKTsKIAlza2ItJmd0O3BrdF90eXBlID0gUEFDS0VUX01VTFRJQ0FTVDsKIAlza2ItJmd0O2lwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CiAJbGVuID0gc2tiLSZndDtsZW47CkBAIC0yNDU1LDggJiM0MzsyNTA3LDEzIEBAIHN0YXRpYyBib29sIGFtdF91cGRhdGVfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXN0cnVjdCBldGhoZHIgKmV0aDsKIAlzdHJ1Y3QgaXBoZHIgKmlwaDsKIAlpbnQgbGVuLCBoZHJfc2l6ZTsKJiM0MzsJX19iZTMyIHNhZGRyOwogCi0JaXBoID0gaXBfaGRyKHNrYik7CiYjNDM7CS8qIGlwX2hkcigpIHBvaW50cyBpbnRvIHRoZSBza2IgaGVhZCwgd2hpY2ggdGhlIHBza2JfbWF5X3B1bGwoKSAvCiYjNDM7CSAqIGlwdHVubmVsX3B1bGxfaGVhZGVyKCkgY2FsbHMgYmVsb3cgY2FuIHJlYWxsb2NhdGUuICBTbmFwc2hvdCB0aGUKJiM0MzsJICogc291cmNlIGFkZHJlc3MgdXNlZCBmb3IgdGhlIHR1bm5lbCBsb29rdXAgYmVmb3JlIHRoZSBmaXJzdCBwdWxsLgomIzQzOwkgKi8KJiM0MzsJc2FkZHIgPSBpcF9oZHIoc2tiKS0mZ3Q7c2FkZHI7CiAKIAloZHJfc2l6ZSA9IHNpemVvZigqYW10bXUpICYjNDM7IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJfc2l6ZSkpCkBAIC0yNDcyLDcgJiM0MzsyNTI5LDcgQEAgc3RhdGljIGJvb2wgYW10X3VwZGF0ZV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IpCiAJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0dW5uZWwsICZhbXA7YW10LSZndDt0dW5uZWxfbGlzdCwgbGlzdCkgewotCQlpZiAodHVubmVsLSZndDtpcDQgPT0gaXBoLSZndDtzYWRkcikgewomIzQzOwkJaWYgKHR1bm5lbC0mZ3Q7aXA0ID09IHNhZGRyKSB7CiAJCQlpZiAoKGFtdG11LSZndDtub25jZSA9PSB0dW5uZWwtJmd0O25vbmNlICZhbXA7JmFtcDsKIAkJCSAgICAgYW10bXUtJmd0O3Jlc3BvbnNlX21hYyA9PSB0dW5uZWwtJmd0O21hYykpIHsKIAkJCQltb2RfZGVsYXllZF93b3JrKGFtdF93cSwgJmFtcDt0dW5uZWwtJmd0O2djX3dxLApAQCAtMjQ5Miw2ICYjNDM7MjU0OSwxMiBAQCBzdGF0aWMgYm9vbCBhbXRfdXBkYXRlX2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwaCkpKQogCQlyZXR1cm4gdHJ1ZTsKIAomIzQzOwkvKiBUaGUgTDIgaGVhZGVyIGlzIHJld3JpdHRlbiBiZWxvdzsgbWFrZSB0aGUgaGVhZCBwcml2YXRlIGZpcnN0IHNvIGEKJiM0MzsJICogY2xvbmVkIHNrYiAoZm9yIGV4YW1wbGUgb25lIHRha2VuIGJ5IGEgcGFja2V0IHRhcCkgaXMgbm90IG1vZGlmaWVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKHNrYl9jb3dfaGVhZChza2IsIDApKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiAJaXBoID0gaXBfaGRyKHNrYik7CiAJaWYgKGlwaC0mZ3Q7dmVyc2lvbiA9PSA0KSB7CiAJCWlmIChpcF9tY19jaGVja19pZ21wKHNrYikpIHsKQEAgLTI1MDgsNiAmIzQzOzI1NzEsMTAgQEAgc3RhdGljIGJvb2wgYW10X3VwZGF0ZV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IpCiAJCWV0aCA9IGV0aF9oZHIoc2tiKTsKIAkJc2tiLSZndDtwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTsKIAkJZXRoLSZndDtoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVApOwomIzQzOwkJLyogaXBfbWNfY2hlY2tfaWdtcCgpIGFuZCB0aGUgcmVwb3J0IGhhbmRsZXIgbWF5IGhhdmUKJiM0MzsJCSAqIHJlYWxsb2NhdGVkIHRoZSBoZWFkOyByZS1kZXJpdmUgaXBoLgomIzQzOwkJICovCiYjNDM7CQlpcGggPSBpcF9oZHIoc2tiKTsKIAkJaXBfZXRoX21jX21hcChpcGgtJmd0O2RhZGRyLCBldGgtJmd0O2hfZGVzdCk7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKIAl9IGVsc2UgaWYgKGlwaC0mZ3Q7dmVyc2lvbiA9PSA2KSB7CkBAIC0yNTI3LDYgJiM0MzsyNTk0LDEwIEBAIHN0YXRpYyBib29sIGFtdF91cGRhdGVfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQlldGggPSBldGhfaGRyKHNrYik7CiAJCXNrYi0mZ3Q7cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTsKIAkJZXRoLSZndDtoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVBWNik7CiYjNDM7CQkvKiBpcHY2X21jX2NoZWNrX21sZCgpIGFuZCB0aGUgcmVwb3J0IGhhbmRsZXIgbWF5IGhhdmUKJiM0MzsJCSAqIHJlYWxsb2NhdGVkIHRoZSBoZWFkOyByZS1kZXJpdmUgaXA2aC4KJiM0MzsJCSAqLwomIzQzOwkJaXA2aCA9IGlwdjZfaGRyKHNrYik7CiAJCWlwdjZfZXRoX21jX21hcCgmYW1wO2lwNmgtJmd0O2RhZGRyLCBldGgtJmd0O2hfZGVzdCk7CiAjZW5kaWYKIAl9IGVsc2UgewpAQCAtMjc3Miw3ICYjNDM7Mjg0Myw3IEBAIHN0YXRpYyB2b2lkIGFtdF9nd19yY3Yoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHN0YXRpYyBpbnQgYW10X3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGFtdF9kZXYgKmFtdDsKLQlzdHJ1Y3QgaXBoZHIgKmlwaDsKJiM0MzsJX19iZTMyIHNhZGRyOwogCWludCB0eXBlOwogCWJvb2wgZXJyOwogCkBAIC0yNzg1LDcgJiM0MzsyODU2LDExIEBAIHN0YXRpYyBpbnQgYW10X3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiAJfQogCiAJc2tiLSZndDtkZXYgPSBhbXQtJmd0O2RldjsKLQlpcGggPSBpcF9oZHIoc2tiKTsKJiM0MzsJLyogYW10X3BhcnNlX3R5cGUoKSBjYWxscyBwc2tiX21heV9wdWxsKCksIHdoaWNoIGNhbiByZWFsbG9jYXRlIHRoZQomIzQzOwkgKiBza2IgaGVhZCBhbmQgbGVhdmUgYSBjYWNoZWQgaXBfaGRyKCkgZGFuZ2xpbmcuICBTbmFwc2hvdCB0aGUgc291cmNlCiYjNDM7CSAqIGFkZHJlc3MgdXNlZCBiZWxvdyBiZWZvcmUgdGhlIHB1bGwuCiYjNDM7CSAqLwomIzQzOwlzYWRkciA9IGlwX2hkcihza2IpLSZndDtzYWRkcjsKIAl0eXBlID0gYW10X3BhcnNlX3R5cGUoc2tiKTsKIAlpZiAodHlwZSA9PSAtMSkgewogCQllcnIgPSB0cnVlOwpAQCAtMjc5NSw3ICYjNDM7Mjg3MCw3IEBAIHN0YXRpYyBpbnQgYW10X3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiAJaWYgKGFtdC0mZ3Q7bW9kZSA9PSBBTVRfTU9ERV9HQVRFV0FZKSB7CiAJCXN3aXRjaCAodHlwZSkgewogCQljYXNlIEFNVF9NU0dfQURWRVJUSVNFTUVOVDoKLQkJCWlmIChpcGgtJmd0O3NhZGRyICE9IGFtdC0mZ3Q7ZGlzY292ZXJ5X2lwKSB7CiYjNDM7CQkJaWYgKHNhZGRyICE9IGFtdC0mZ3Q7ZGlzY292ZXJ5X2lwKSB7CiAJCQkJbmV0ZGV2X2RiZyhhbXQtJmd0O2RldiwgJiMzNDtJbnZhbGlkIFJlbGF5IElQXG4mIzM0Oyk7CiAJCQkJZXJyID0gdHJ1ZTsKIAkJCQlnb3RvIGRyb3A7CkBAIC0yODA3LDcgJiM0MzsyODgyLDcgQEAgc3RhdGljIGludCBhbXRfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJCX0KIAkJCWdvdG8gb3V0OwogCQljYXNlIEFNVF9NU0dfTVVMVElDQVNUX0RBVEE6Ci0JCQlpZiAoaXBoLSZndDtzYWRkciAhPSBhbXQtJmd0O3JlbW90ZV9pcCkgewomIzQzOwkJCWlmIChzYWRkciAhPSBhbXQtJmd0O3JlbW90ZV9pcCkgewogCQkJCW5ldGRldl9kYmcoYW10LSZndDtkZXYsICYjMzQ7SW52YWxpZCBSZWxheSBJUFxuJiMzNDspOwogCQkJCWVyciA9IHRydWU7CiAJCQkJZ290byBkcm9wOwpAQCAtMjgxOCw3ICYjNDM7Mjg5Myw3IEBAIHN0YXRpYyBpbnQgYW10X3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiAJCQllbHNlCiAJCQkJZ290byBvdXQ7CiAJCWNhc2UgQU1UX01TR19NRU1CRVJTSElQX1FVRVJZOgotCQkJaWYgKGlwaC0mZ3Q7c2FkZHIgIT0gYW10LSZndDtyZW1vdGVfaXApIHsKJiM0MzsJCQlpZiAoc2FkZHIgIT0gYW10LSZndDtyZW1vdGVfaXApIHsKIAkJCQluZXRkZXZfZGJnKGFtdC0mZ3Q7ZGV2LCAmIzM0O0ludmFsaWQgUmVsYXkgSVBcbiYjMzQ7KTsKIAkJCQllcnIgPSB0cnVlOwogCQkJCWdvdG8gZHJvcDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDU6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg1MQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IEFNVCBEcml2ZXIgRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdGFyZ2V0cyBgZHJpdmVycy9uZXQvYW10LmNgLiBUaGUgY29tbWl0IG1lc3NhZ2UgaXMgcHJldHR5IGJhcmVib25lcywganVzdCBpbmRpY2F0aW5nIGl0JiMzOTtzIGEgcGF0Y2ggZnJvbSBhIHN5ei1jbHVzdGVyIGFuZCB1bmRlciByZXZpZXcuIFRoYXQmIzM5O3MgZmluZSwgdGhlIGNvZGUgaXMgd2hhdCBtYXR0ZXJzLiBUaGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGZpeCwgemVyb2luZyBpbiBvbiBtZW1vcnkgaXNzdWVzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBBTVQgZHJpdmVyLiBUaGV5JiMzOTtyZSBhZGRyZXNzaW5nIGBza2JgIHJlYWxsb2NhdGlvbiBwcm9ibGVtcyDigJMgdGhhdCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHBhY2tldCBidWZmZXIgbWFuYWdlbWVudC4gSSBzZWUgY2FsbHMgbGlrZSBgcHNrYl9tYXlfcHVsbGAsIGBpcF9tY19tYXlfcHVsbGAsIGFuZCBgc2tiX2Nvd19oZWFkYCwgYWxsIGluZGljYXRvcnMgb2YgcG90ZW50aWFsIGhlYWRlciBwb2ludGVyIGludmFsaWRhdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGUgYnVnIGludm9sdmVkIGNhY2hpbmcgcG9pbnRlcnMgdG8gaGVhZGVycyAobGlrZSBgaXBfaGRyKHNrYilgKSAqYmVmb3JlKiB0aGUgYHB1bGxgIG9wZXJhdGlvbiBhbmQgc3Vic2VxdWVudGx5IHVzaW5nIHRob3NlIHN0YWxlIHBvaW50ZXJzLCByZXN1bHRpbmcgaW4gYSB1c2UtYWZ0ZXItZnJlZSBvciBkYW5nbGluZyBwb2ludGVyIHNjZW5hcmlvLiBTbWFydCDigJMgdGhleSYjMzk7dmUgYWRkZWQgYW4gYHNrYl9jb3dfaGVhZChza2IsIDApYCBjYWxsIGJlZm9yZSBhbnkgTDIgaGVhZGVyIHJld3JpdGluZywgZWZmZWN0aXZlbHkgY3JlYXRpbmcgYSBjb3B5IG9mIHRoZSBoZWFkIGRhdGEgdG8gcHJldmVudCBzdWNoIGlzc3Vlcy4KClRoaXMgaXMgYSBnb29kIGNhdGNoLCBhIGNsZWFuIG1lbW9yeSBjb3JydXB0aW9uIGZpeCBpbiBhIGNvcmUga2VybmVsIGNvbXBvbmVudCwgdGhlIEFNVCBkcml2ZXIuIEl04oCZcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0JiMzOTtzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIGl0JiMzOTtzIHJvYnVzdCBhbmQgdG8gdW5jb3ZlciBhbnkgbGF0ZW50IGlzc3Vlcy4gTm93LCBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIG9uIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBhbmQgaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIGluIHRoaXMgQU1UIGNvZGUuIFRpbWUgdG8gZGlnIGludG8gdGhlIGBkcml2ZXJzL25ldC9hbXQuY2AgZmlsZSBpdHNlbGYgYW5kIGl0cyBhc3NvY2lhdGVkIEtjb25maWcgZW50cmllcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBkcml2ZXIgaXMgY29uZmlndXJlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBuZXR3b3JrIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBTVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0yODk9Y29uZmlnIFBGQ1Bcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMwMS1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzAyOmNvbmZpZyBBTVRcbmRyaXZlcnMvbmV0L0tjb25maWctMzAzLVx0dHJpc3RhdGUgXCYjMzQ7QXV0b21hdGljIE11bHRpY2FzdCBUdW5uZWxpbmcgKEFNVClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTIyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQU1UIERyaXZlciBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBgQU1UYCBjb25maWd1cmF0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIFRoZSBwcmVzZW5jZSBvZiBgI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpYCBzdWdnZXN0cyB0aGF0IGBJUFY2YCBpcyBhbHNvIGdvaW5nIHRvIGJlIGEgZmFjdG9yIGhlcmUuCgpOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCB0aGVzZSBmdW5jdGlvbnMgd2l0aGluIGBkcml2ZXJzL25ldC9hbXQuY2A6IGBhbXRfZGV2X3htaXRgLCBgYW10X2lnbXB2M19yZXBvcnRfaGFuZGxlcmAsIGBhbXRfbWxkdjJfcmVwb3J0X2hhbmRsZXJgLCBgYW10X211bHRpY2FzdF9kYXRhX2hhbmRsZXJgLCBgYW10X21lbWJlcnNoaXBfcXVlcnlfaGFuZGxlcmAsIGBhbXRfdXBkYXRlX2hhbmRsZXJgLCBhbmQgYGFtdF9yY3ZgLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHNldCBgRm9jdXNTeW1ib2xzYCB0byB0aG9zZSBmdW5jdGlvbnMgc28gSSBjYW4gY29uY2VudHJhdGUgbXkgZnV6emluZyBlZmZvcnRzIG9uIHRoZW0uCgpJIGp1c3QgZG91YmxlIGNoZWNrZWQgYW5kIHdoaWxlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCB0aGF0JiMzOTtzIG5vdCBhIGNvbmNlcm4gZm9yIG15IHB1cnBvc2VzIHdpdGggYEZvY3VzU3ltYm9sc2AuCgpOb3csIGNvbnNpZGVyaW5nIHRoZXNlIGFyZSBkYXRhIHBhdGggZnVuY3Rpb25zLCBJIG5lZWQgdG8gZXZhbHVhdGUgd2hldGhlciBvciBub3QgdGhleSBhcmUgaG90IHBhdGhzLiBgYW10X2Rldl94bWl0YCBhbmQgYGFtdF9yY3ZgIGFyZSB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgZnVuY3Rpb25zLCByZXNwZWN0aXZlbHksIHNvIHRoZXkgYXJlIHRoZSBkYXRhIHBhdGggZm9yIHRoZSBBTVQgZHJpdmVyLiBIb3dldmVyLCBzaW5jZSBBTVQgaXMgYSBzcGVjaWFsaXplZCB0dW5uZWwsIEkgZG9uJiMzOTt0IHRoaW5rIHRoZXkmIzM5O3JlIGdlbmVyaWMgaG90IHBhdGhzIGluIHRoZSBzYW1lIHdheSBgaXBfcmN2YCBvciBgZGV2X3F1ZXVlX3htaXRgIG1pZ2h0IGJlLiBUaGlzIG1lYW5zIGZ1enppbmcgdGhlc2Ugc3BlY2lmaWNhbGx5IGlzIGEgZ29vZCBpZGVhLgoKRmluYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHZlcmlmeSBgQU1UYCBjb25maWcgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBTVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9Mjg5PWNvbmZpZyBQRkNQXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMDEtXG5kcml2ZXJzL25ldC9LY29uZmlnOjMwMjpjb25maWcgQU1UXG5kcml2ZXJzL25ldC9LY29uZmlnLTMwMy1cdHRyaXN0YXRlIFwmIzM0O0F1dG9tYXRpYyBNdWx0aWNhc3QgVHVubmVsaW5nIChBTVQpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDU6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMzNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCBlbWJlZGRlZCBzeXN0ZW1zLCBLY29uZmlnLCBhbmQgQU1UIChBY3RpdmUgTWFuYWdlbWVudCBUZWNobm9sb2d5KS4KCioqRGVsdmluZyBpbnRvIHRoZSBBTVQgS2NvbmZpZyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IG1pbmQgaW1tZWRpYXRlbHkgY2xpY2tzIHRvIGFjdGlvbiBtb2RlIOKAkyBsZXQmIzM5O3MgZGlzc2VjdCB0aGUgS2NvbmZpZyBmb3IgQU1ULiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1JpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBhbGwgdGhlIHZhcmlhYmxlcyByZWxhdGVkIHRvIEFNVC4mIzM0OyBJJiMzOTttIG1lbnRhbGx5IHByZXBhcmluZyB0byBuYXZpZ2F0ZSB0aGUgZmlsZSwgZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIGtleSBzZXR0aW5ncyB0aGF0IGNvbnRyb2wgQU1UJiMzOTtzIGJlaGF2aW9yLCBmZWF0dXJlcywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGUgdXN1YWwgS2NvbmZpZyBzeW50YXgg4oCTIGBjb25maWdgLCBgYm9vbGAsIGB0cmlzdGF0ZWAsIGBzZWxlY3RgLCBgZGVwZW5kcyBvbmAsIGBkZWZhdWx0YCwgZXRjLiDigJMgYW5kIEkmIzM5O20gcmVhZHkgdG8gcGFyc2UgdGhlIGxvZ2ljIHdpdGhpbi4gRXNzZW50aWFsbHksIEkmIzM5O20gbWVudGFsbHkgcHJlcGFyaW5nIGZvciBhIGRlZXAgZGl2ZSB0byB1bmRlcnN0YW5kIGhvdyBBTVQgaXMgY29uZmlndXJlZCwgZW5hYmxlZCwgYW5kIHdoYXQgaXRzIHNwZWNpZmljIGNhcGFiaWxpdGllcyBhcmUgd2l0aGluIHRoaXMgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwMDpcdFx0ICB3aWxsIGJlIGNhbGxlZCBwZmNwLlxuIDMwMTpcdFxuIDMwMjpcdGNvbmZpZyBBTVRcbiAzMDM6XHRcdHRyaXN0YXRlIFwmIzM0O0F1dG9tYXRpYyBNdWx0aWNhc3QgVHVubmVsaW5nIChBTVQpXCYjMzQ7XG4gMzA0Olx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IElQX01VTFRJQ0FTVFxuIDMwNTpcdFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4gMzA2Olx0XHRoZWxwXG4gMzA3Olx0XHQgIFRoaXMgYWxsb3dzIG9uZSB0byBjcmVhdGUgQU1UKEF1dG9tYXRpYyBNdWx0aWNhc3QgVHVubmVsaW5nKVxuIDMwODpcdFx0ICB2aXJ0dWFsIGludGVyZmFjZXMgdGhhdCBwcm92aWRlIG11bHRpY2FzdCB0dW5uZWxpbmcuXG4gMzA5Olx0XHQgIFRoZXJlIGFyZSB0d28gcm9sZXMsIEdhdGV3YXksIGFuZCBSZWxheS5cbiAzMTA6XHRcdCAgR2F0ZXdheSBFbmNhcHN1bGF0ZXMgSUdNUC9NTEQgdHJhZmZpYyBmcm9tIGxpc3RlbmVycyB0byB0aGUgUmVsYXkuXG4gMzExOlx0XHQgIEdhdGV3YXkgRGVjYXBzdWxhdGVzIG11bHRpY2FzdCB0cmFmZmljIGZyb20gdGhlIFJlbGF5IHRvIExpc3RlbmVycy5cbiAzMTI6XHRcdCAgUmVsYXkgRW5jYXBzdWxhdGVzIG11bHRpY2FzdCB0cmFmZmljIGZyb20gU291cmNlcyB0byBHYXRld2F5LlxuIDMxMzpcdFx0ICBSZWxheSBEZWNhcHN1bGF0ZXMgSUdNUC9NTEQgdHJhZmZpYyBmcm9tIEdhdGV3YXkuXG4gMzE0Olx0XG4gMzE1Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXJzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMzE2Olx0XHQgIHdpbGwgYmUgY2FsbGVkIGFtdC5cbiAzMTc6XHRcbiAzMTg6XHRjb25maWcgTUFDU0VDXG4gMzE5Olx0XHR0cmlzdGF0ZSBcJiMzNDtJRUVFIDgwMi4xQUUgTUFDLWxldmVsIGVuY3J5cHRpb24gKE1BQ3NlYylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTM0CgkJCQkJCQlvdXRwdXQ6IDIwMgoJCQkJCQkJdGhvdWdodHM6IDI1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBBTVQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lIGNvbmNlcm5pbmcgdGhlIEFNVCAoQXV0b21hdGljIE11bHRpY2FzdCBUdW5uZWxpbmcpIGRyaXZlci4gVGhlIGRlcGVuZGVuY2llcyBhcmUgYElORVRgIGFuZCBgSVBfTVVMVElDQVNUYCwgYW5kIGl0IGxvb2tzIGxpa2UgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQU1UYCBhbmQgYElQVjZgIGFyZSBlbmFibGVkIGluIHRoZSBjb25maWd1cmF0aW9ucy4gR29vZCwgc3RhbmRhcmQgc2V0dXAuCgpNeSBpbW1lZGlhdGUgdGFrZWF3YXkgaXMgdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIG5hc3R5IGNvbGxlY3Rpb24gb2YgbWVtb3J5IHNhZmV0eSBpc3N1ZXM6IHVzZS1hZnRlci1mcmVlIGFuZCBkYW5nbGluZyBwb2ludGVyIGJ1Z3MuIFRoZXkmIzM5O3JlIHBpbnBvaW50aW5nIHRoZSBjdWxwcml0cyBhcyBgcHNrYl9tYXlfcHVsbGAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zLCB3aGljaCBhcmUgcmVhbGxvY2F0aW5nIHRoZSBgc2tiYCBoZWFkZXIgd2hpbGUgbmV0d29yayBoZWFkZXIgcG9pbnRlcnMgYXJlIHN0aWxsIGFjdGl2ZS4gU291bmRzIGxpa2UgY2xhc3NpYyByYWNlIGNvbmRpdGlvbnMgaW4gYSBuZXR3b3JrIGNvbnRleHQsIGFuZCB0aGUgc29sdXRpb24gbG9va3MgdG8gYmUgYHNrYl9jb3dfaGVhZGAgdG8gcHJldmVudCBtb2RpZmljYXRpb24gb2YgY2xvbmVkIGBza2JzYC4gSXQmIzM5O3MgZGVmaW5pdGVseSBmdW5jdGlvbmFsLCByaWdodCBvZmYgdGhlIGJhdC4KClNvLCB0aGlzIGNsZWFybHkgd2FycmFudHMgc29tZSBzZXJpb3VzIGZ1enppbmcuIFRoaXMgaXMgcmVhY2hhYmxlIG5ldHdvcmsgZHJpdmVyIGNvZGUsIGFuZCBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24sIHRoZXJl4oCZcyBsaWtlbHkgcG90ZW50aWFsIGZvciBtb3JlIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyB0byBzdGlsbCBleGlzdC4KCkkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzIHRvIGFzc2VzcyB0aGUgZml4IHRob3JvdWdobHk6IGBhbXRfZGV2X3htaXRgLCBgYW10X2lnbXB2M19yZXBvcnRfaGFuZGxlcmAsIGBhbXRfbWxkdjJfcmVwb3J0X2hhbmRsZXJgLCBgYW10X211bHRpY2FzdF9kYXRhX2hhbmRsZXJgLCBgYW10X21lbWJlcnNoaXBfcXVlcnlfaGFuZGxlcmAsIGBhbXRfdXBkYXRlX2hhbmRsZXJgLCBhbmQgYGFtdF9yY3ZgLiBGaXJzdCB0aGluZyBJJiMzOTtsbCBkbyBpcyBkb3VibGUtY2hlY2sgdGhlIG5hbWUsIGp1c3QgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIGNvcnJlY3QuIFllcywgaXQgaXMgaW4gdGhlIGRpZmYuCgpBbHJpZ2h0LCB0aGUgcGF0Y2ggaXMgZnVuY3Rpb25hbCBhbmQgZGVmaW5pdGVseSBmaXhpbmcgYnVncy4gSSYjMzk7bSBnb2luZyB0byBzZXQgaXQgdXAgdG8gY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDU6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FNVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YW10X2Rldl94bWl0JiMzNDssCiAgICAmIzM0O2FtdF9pZ21wdjNfcmVwb3J0X2hhbmRsZXImIzM0OywKICAgICYjMzQ7YW10X21sZHYyX3JlcG9ydF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O2FtdF9tdWx0aWNhc3RfZGF0YV9oYW5kbGVyJiMzNDssCiAgICAmIzM0O2FtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXImIzM0OywKICAgICYjMzQ7YW10X3VwZGF0ZV9oYW5kbGVyJiMzNDssCiAgICAmIzM0O2FtdF9yY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgdXNlLWFmdGVyLWZyZWUgYW5kIGRhbmdsaW5nIHBvaW50ZXIgYnVncyBpbiB0aGUgQU1UIChBdXRvbWF0aWMgTXVsdGljYXN0IFR1bm5lbGluZykgZHJpdmVyIGNhdXNlZCBieSBgcHNrYl9tYXlfcHVsbGAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zIHJlYWxsb2NhdGluZyB0aGUgc2tiIGhlYWQgd2hpbGUgaG9sZGluZyBwb2ludGVycyB0byBuZXR3b3JrIGhlYWRlcnMuIEl0IGFsc28gYWRkcyBgc2tiX2Nvd19oZWFkYCB0byBwcmV2ZW50IG1vZGlmeWluZyBjbG9uZWQgc2ticy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgbmV0d29yayBkcml2ZXIgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGZ1cnRoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGV4aXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBTVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FtdF9kZXZfeG1pdCYjMzQ7LAogICAgJiMzNDthbXRfaWdtcHYzX3JlcG9ydF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O2FtdF9tbGR2Ml9yZXBvcnRfaGFuZGxlciYjMzQ7LAogICAgJiMzNDthbXRfbXVsdGljYXN0X2RhdGFfaGFuZGxlciYjMzQ7LAogICAgJiMzNDthbXRfbWVtYmVyc2hpcF9xdWVyeV9oYW5kbGVyJiMzNDssCiAgICAmIzM0O2FtdF91cGRhdGVfaGFuZGxlciYjMzQ7LAogICAgJiMzNDthbXRfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIG11bHRpcGxlIHVzZS1hZnRlci1mcmVlIGFuZCBkYW5nbGluZyBwb2ludGVyIGJ1Z3MgaW4gdGhlIEFNVCAoQXV0b21hdGljIE11bHRpY2FzdCBUdW5uZWxpbmcpIGRyaXZlciBjYXVzZWQgYnkgYHBza2JfbWF5X3B1bGxgIGFuZCBzaW1pbGFyIGZ1bmN0aW9ucyByZWFsbG9jYXRpbmcgdGhlIHNrYiBoZWFkIHdoaWxlIGhvbGRpbmcgcG9pbnRlcnMgdG8gbmV0d29yayBoZWFkZXJzLiBJdCBhbHNvIGFkZHMgYHNrYl9jb3dfaGVhZGAgdG8gcHJldmVudCBtb2RpZnlpbmcgY2xvbmVkIHNrYnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIG5ldHdvcmsgZHJpdmVyIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBmdXJ0aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBleGlzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjI1OjEzLjMwMjI4NDM2MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDIxMjQ4Mzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFNVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFtdF9kZXZfeG1pdFwiLFxuICAgIFwiYW10X2lnbXB2M19yZXBvcnRfaGFuZGxlclwiLFxuICAgIFwiYW10X21sZHYyX3JlcG9ydF9oYW5kbGVyXCIsXG4gICAgXCJhbXRfbXVsdGljYXN0X2RhdGFfaGFuZGxlclwiLFxuICAgIFwiYW10X21lbWJlcnNoaXBfcXVlcnlfaGFuZGxlclwiLFxuICAgIFwiYW10X3VwZGF0ZV9oYW5kbGVyXCIsXG4gICAgXCJhbXRfcmN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgdXNlLWFmdGVyLWZyZWUgYW5kIGRhbmdsaW5nIHBvaW50ZXIgYnVncyBpbiB0aGUgQU1UIChBdXRvbWF0aWMgTXVsdGljYXN0IFR1bm5lbGluZykgZHJpdmVyIGNhdXNlZCBieSBgcHNrYl9tYXlfcHVsbGAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zIHJlYWxsb2NhdGluZyB0aGUgc2tiIGhlYWQgd2hpbGUgaG9sZGluZyBwb2ludGVycyB0byBuZXR3b3JrIGhlYWRlcnMuIEl0IGFsc28gYWRkcyBgc2tiX2Nvd19oZWFkYCB0byBwcmV2ZW50IG1vZGlmeWluZyBjbG9uZWQgc2ticy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgbmV0d29yayBkcml2ZXIgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGZ1cnRoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGV4aXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNToyNToxMy4zMDIyODk0MDJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxODA1Njk1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDUzZmJmNjM1NzY5NjA5ZjM0YWQ5YzQ1MGYwMTVlZWY0NjM2NDdjNzhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgOCAwNToyNToxMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hbXQuYyBiL2RyaXZlcnMvbmV0L2FtdC5jXFxuaW5kZXggZjJmMzEzOWUzOGE1OTkuLmY3Mzc1ZTQwYmM4ZjIxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2FtdC5jXFxuKysrIGIvZHJpdmVycy9uZXQvYW10LmNcXG5AQCAtMTIxMSw3ICsxMjExLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFtdF9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRcXHRcXHRkYXRhID0gdHJ1ZTtcXG4gXFx0XFx0fVxcbiBcXHRcXHR2NiA9IGZhbHNlO1xcbi1cXHRcXHRncm91cC5pcDQgPSBpcGgtXFx1MDAzZWRhZGRyO1xcbitcXHRcXHRncm91cC5pcDQgPSBpcF9oZHIoc2tiKS1cXHUwMDNlZGFkZHI7XFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbiBcXHR9IGVsc2UgaWYgKGlwaC1cXHUwMDNldmVyc2lvbiA9PSA2KSB7XFxuIFxcdFxcdGlwNmggPSBpcHY2X2hkcihza2IpO1xcbkBAIC0xMjM1LDcgKzEyMzUsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYW10X2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdFxcdFxcdGRhdGEgPSB0cnVlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHY2ID0gdHJ1ZTtcXG4tXFx0XFx0Z3JvdXAuaXA2ID0gaXA2aC1cXHUwMDNlZGFkZHI7XFxuK1xcdFxcdGdyb3VwLmlwNiA9IGlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyO1xcbiAjZW5kaWZcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0ZGV2LVxcdTAwM2VzdGF0cy50eF9lcnJvcnMrKztcXG5AQCAtMTI3OCwxMiArMTI3OCwxMiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYW10X2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdFxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShnbm9kZSwgXFx1MDAyNnR1bm5lbC1cXHUwMDNlZ3JvdXBzW2hhc2hdLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgbm9kZSkge1xcbiBcXHRcXHRcXHRcXHRpZiAoIXY2KSB7XFxuLVxcdFxcdFxcdFxcdFxcdGlmIChnbm9kZS1cXHUwMDNlZ3JvdXBfYWRkci5pcDQgPT0gaXBoLVxcdTAwM2VkYWRkcilcXG4rXFx0XFx0XFx0XFx0XFx0aWYgKGdub2RlLVxcdTAwM2Vncm91cF9hZGRyLmlwNCA9PSBncm91cC5pcDQpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gZm91bmQ7XFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbiBcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHRcXHRpZiAoaXB2Nl9hZGRyX2VxdWFsKFxcdTAwMjZnbm9kZS1cXHUwMDNlZ3JvdXBfYWRkci5pcDYsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2aXA2aC1cXHUwMDNlZGFkZHIpKVxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmdyb3VwLmlwNikpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gZm91bmQ7XFxuICNlbmRpZlxcbiBcXHRcXHRcXHRcXHR9XFxuQEAgLTIwMDAsMTQgKzIwMDAsMjIgQEAgc3RhdGljIHZvaWQgYW10X2lnbXB2M19yZXBvcnRfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRzdHJ1Y3QgaWdtcHYzX3JlcG9ydCAqaWhydjMgPSBpZ21wdjNfcmVwb3J0X2hkcihza2IpO1xcbiBcXHRpbnQgbGVuID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSArIHNpemVvZigqaWhydjMpO1xcbiBcXHR2b2lkICp6ZXJvX2dyZWMgPSAodm9pZCAqKVxcdTAwMjZpZ21wdjNfemVyb19ncmVjO1xcbi1cXHRzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpO1xcbiBcXHRzdHJ1Y3QgYW10X2dyb3VwX25vZGUgKmdub2RlO1xcbiBcXHR1bmlvbiBhbXRfYWRkciBncm91cCwgaG9zdDtcXG4gXFx0c3RydWN0IGlnbXB2M19ncmVjICpncmVjO1xcbitcXHRfX2JlMzIgc2FkZHI7XFxuIFxcdHUxNiBuc3JjcztcXG4rXFx0dTE2IG5ncmVjO1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudG9ocyhpaHJ2My1cXHUwMDNlbmdyZWMpOyBpKyspIHtcXG4rXFx0LyogaWhydjMgYW5kIGlwX2hkcigpIHBvaW50IGludG8gdGhlIHNrYiBoZWFkLCB3aGljaCB0aGVcXG4rXFx0ICogaXBfbWNfbWF5X3B1bGwoKSBjYWxscyBiZWxvdyBjYW4gcmVhbGxvY2F0ZS4gIFJlYWQgZXZlcnkgZmllbGRcXG4rXFx0ICogdGhhdCBpcyB1c2VkIGFmdGVyIGEgcHVsbCBiZWZvcmUgdGhlIGZpcnN0IG9uZSBydW5zLlxcbitcXHQgKi9cXG4rXFx0c2FkZHIgPSBpcF9oZHIoc2tiKS1cXHUwMDNlc2FkZHI7XFxuK1xcdG5ncmVjID0gbnRvaHMoaWhydjMtXFx1MDAzZW5ncmVjKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuZ3JlYzsgaSsrKSB7XFxuIFxcdFxcdGxlbiArPSBzaXplb2YoKmdyZWMpO1xcbiBcXHRcXHRpZiAoIWlwX21jX21heV9wdWxsKHNrYiwgbGVuKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTIwMTksMTAgKzIwMjcsMTQgQEAgc3RhdGljIHZvaWQgYW10X2lnbXB2M19yZXBvcnRfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRpZiAoIWlwX21jX21heV9wdWxsKHNrYiwgbGVuKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbitcXHRcXHQvKiBpcF9tY19tYXlfcHVsbCgpIG1heSBoYXZlIHJlYWxsb2NhdGVkIHRoZSBoZWFkLiAqL1xcbitcXHRcXHRncmVjID0gKHZvaWQgKikoc2tiLVxcdTAwM2VkYXRhICsgbGVuIC0gc2l6ZW9mKCpncmVjKSAtXFxuK1xcdFxcdFxcdFxcdG5zcmNzICogc2l6ZW9mKF9fYmUzMikpO1xcbitcXG4gXFx0XFx0bWVtc2V0KFxcdTAwMjZncm91cCwgMCwgc2l6ZW9mKHVuaW9uIGFtdF9hZGRyKSk7XFxuIFxcdFxcdGdyb3VwLmlwNCA9IGdyZWMtXFx1MDAzZWdyZWNfbWNhO1xcbiBcXHRcXHRtZW1zZXQoXFx1MDAyNmhvc3QsIDAsIHNpemVvZih1bmlvbiBhbXRfYWRkcikpO1xcbi1cXHRcXHRob3N0LmlwNCA9IGlwaC1cXHUwMDNlc2FkZHI7XFxuK1xcdFxcdGhvc3QuaXA0ID0gc2FkZHI7XFxuIFxcdFxcdGdub2RlID0gYW10X2xvb2t1cF9ncm91cCh0dW5uZWwsIFxcdTAwMjZncm91cCwgXFx1MDAyNmhvc3QsIGZhbHNlKTtcXG4gXFx0XFx0aWYgKCFnbm9kZSkge1xcbiBcXHRcXHRcXHRnbm9kZSA9IGFtdF9hZGRfZ3JvdXAoYW10LCB0dW5uZWwsIFxcdTAwMjZncm91cCwgXFx1MDAyNmhvc3QsXFxuQEAgLTIxNjIsMTQgKzIxNzQsMjIgQEAgc3RhdGljIHZvaWQgYW10X21sZHYyX3JlcG9ydF9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHN0cnVjdCBtbGQyX3JlcG9ydCAqbWxkMnIgPSAoc3RydWN0IG1sZDJfcmVwb3J0ICopaWNtcDZfaGRyKHNrYik7XFxuIFxcdGludCBsZW4gPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgc2l6ZW9mKCptbGQycik7XFxuIFxcdHZvaWQgKnplcm9fZ3JlYyA9ICh2b2lkICopXFx1MDAyNm1sZHYyX3plcm9fZ3JlYztcXG4tXFx0c3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpO1xcbiBcXHRzdHJ1Y3QgYW10X2dyb3VwX25vZGUgKmdub2RlO1xcbiBcXHR1bmlvbiBhbXRfYWRkciBncm91cCwgaG9zdDtcXG4gXFx0c3RydWN0IG1sZDJfZ3JlYyAqZ3JlYztcXG4rXFx0c3RydWN0IGluNl9hZGRyIHNhZGRyO1xcbiBcXHR1MTYgbnNyY3M7XFxuK1xcdHUxNiBuZ3JlYztcXG4gXFx0aW50IGk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnRvaHMobWxkMnItXFx1MDAzZW1sZDJyX25ncmVjKTsgaSsrKSB7XFxuK1xcdC8qIG1sZDJyIGFuZCBpcHY2X2hkcigpIHBvaW50IGludG8gdGhlIHNrYiBoZWFkLCB3aGljaCB0aGVcXG4rXFx0ICogaXB2Nl9tY19tYXlfcHVsbCgpIGNhbGxzIGJlbG93IGNhbiByZWFsbG9jYXRlLiAgUmVhZCBldmVyeSBmaWVsZFxcbitcXHQgKiB0aGF0IGlzIHVzZWQgYWZ0ZXIgYSBwdWxsIGJlZm9yZSB0aGUgZmlyc3Qgb25lIHJ1bnMuXFxuK1xcdCAqL1xcbitcXHRzYWRkciA9IGlwdjZfaGRyKHNrYiktXFx1MDAzZXNhZGRyO1xcbitcXHRuZ3JlYyA9IG50b2hzKG1sZDJyLVxcdTAwM2VtbGQycl9uZ3JlYyk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbmdyZWM7IGkrKykge1xcbiBcXHRcXHRsZW4gKz0gc2l6ZW9mKCpncmVjKTtcXG4gXFx0XFx0aWYgKCFpcHY2X21jX21heV9wdWxsKHNrYiwgbGVuKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTIxODEsMTAgKzIyMDEsMTQgQEAgc3RhdGljIHZvaWQgYW10X21sZHYyX3JlcG9ydF9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdGlmICghaXB2Nl9tY19tYXlfcHVsbChza2IsIGxlbikpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4rXFx0XFx0LyogaXB2Nl9tY19tYXlfcHVsbCgpIG1heSBoYXZlIHJlYWxsb2NhdGVkIHRoZSBoZWFkLiAqL1xcbitcXHRcXHRncmVjID0gKHZvaWQgKikoc2tiLVxcdTAwM2VkYXRhICsgbGVuIC0gc2l6ZW9mKCpncmVjKSAtXFxuK1xcdFxcdFxcdFxcdG5zcmNzICogc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpO1xcbitcXG4gXFx0XFx0bWVtc2V0KFxcdTAwMjZncm91cCwgMCwgc2l6ZW9mKHVuaW9uIGFtdF9hZGRyKSk7XFxuIFxcdFxcdGdyb3VwLmlwNiA9IGdyZWMtXFx1MDAzZWdyZWNfbWNhO1xcbiBcXHRcXHRtZW1zZXQoXFx1MDAyNmhvc3QsIDAsIHNpemVvZih1bmlvbiBhbXRfYWRkcikpO1xcbi1cXHRcXHRob3N0LmlwNiA9IGlwNmgtXFx1MDAzZXNhZGRyO1xcbitcXHRcXHRob3N0LmlwNiA9IHNhZGRyO1xcbiBcXHRcXHRnbm9kZSA9IGFtdF9sb29rdXBfZ3JvdXAodHVubmVsLCBcXHUwMDI2Z3JvdXAsIFxcdTAwMjZob3N0LCB0cnVlKTtcXG4gXFx0XFx0aWYgKCFnbm9kZSkge1xcbiBcXHRcXHRcXHRnbm9kZSA9IGFtdF9hZGRfZ3JvdXAoYW10LCB0dW5uZWwsIFxcdTAwMjZncm91cCwgXFx1MDAyNmhvc3QsXFxuQEAgLTIzMDUsNyArMjMyOSwxMiBAQCBzdGF0aWMgYm9vbCBhbXRfbXVsdGljYXN0X2RhdGFfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRza2JfcHVzaChza2IsIHNpemVvZigqZXRoKSk7XFxuIFxcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XFxuIFxcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpldGgpKTtcXG4tXFx0ZXRoID0gZXRoX2hkcihza2IpO1xcbitcXG4rXFx0LyogVGhlIEwyIGhlYWRlciBpcyByZXdyaXR0ZW4gYmVsb3c7IG1ha2UgdGhlIGhlYWQgcHJpdmF0ZSBmaXJzdCBzbyBhXFxuK1xcdCAqIGNsb25lZCBza2IgKGZvciBleGFtcGxlIG9uZSB0YWtlbiBieSBhIHBhY2tldCB0YXApIGlzIG5vdCBtb2RpZmllZC5cXG4rXFx0ICovXFxuK1xcdGlmIChza2JfY293X2hlYWQoc2tiLCAwKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwaCkpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5AQCAtMjMxNSw2ICsyMzQ0LDggQEAgc3RhdGljIGJvb2wgYW10X211bHRpY2FzdF9kYXRhX2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0aWYgKCFpcHY0X2lzX211bHRpY2FzdChpcGgtXFx1MDAzZWRhZGRyKSlcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XFxuK1xcdFxcdC8qIHBza2JfbWF5X3B1bGwoKSBhYm92ZSBtYXkgaGF2ZSByZWFsbG9jYXRlZCB0aGUgaGVhZC4gKi9cXG4rXFx0XFx0ZXRoID0gZXRoX2hkcihza2IpO1xcbiBcXHRcXHRldGgtXFx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XFxuIFxcdFxcdGlwX2V0aF9tY19tYXAoaXBoLVxcdTAwM2VkYWRkciwgZXRoLVxcdTAwM2VoX2Rlc3QpO1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5AQCAtMjMyOCw2ICsyMzU5LDggQEAgc3RhdGljIGJvb2wgYW10X211bHRpY2FzdF9kYXRhX2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0aWYgKCFpcHY2X2FkZHJfaXNfbXVsdGljYXN0KFxcdTAwMjZpcDZoLVxcdTAwM2VkYWRkcikpXFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVBWNik7XFxuK1xcdFxcdC8qIHBza2JfbWF5X3B1bGwoKSBhYm92ZSBtYXkgaGF2ZSByZWFsbG9jYXRlZCB0aGUgaGVhZC4gKi9cXG4rXFx0XFx0ZXRoID0gZXRoX2hkcihza2IpO1xcbiBcXHRcXHRldGgtXFx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcXG4gXFx0XFx0aXB2Nl9ldGhfbWNfbWFwKFxcdTAwMjZpcDZoLVxcdTAwM2VkYWRkciwgZXRoLVxcdTAwM2VoX2Rlc3QpO1xcbiAjZW5kaWZcXG5AQCAtMjM1Myw4ICsyMzg2LDEwIEBAIHN0YXRpYyBib29sIGFtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCxcXG4gXFx0c3RydWN0IGFtdF9oZWFkZXJfbWVtYmVyc2hpcF9xdWVyeSAqYW10bXE7XFxuIFxcdHN0cnVjdCBpZ21wdjNfcXVlcnkgKmlodjM7XFxuIFxcdHN0cnVjdCBldGhoZHIgKmV0aCwgKm9ldGg7XFxuK1xcdHU4IGhfc291cmNlW0VUSF9BTEVOXTtcXG4gXFx0c3RydWN0IGlwaGRyICppcGg7XFxuIFxcdGludCBoZHJfc2l6ZSwgbGVuO1xcbitcXHR1NjQgcmVzcG9uc2VfbWFjO1xcbiBcXG4gXFx0aGRyX3NpemUgPSBzaXplb2YoKmFtdG1xKSArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcXG4gXFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGRyX3NpemUpKVxcbkBAIC0yMzY3LDYgKzI0MDIsMTIgQEAgc3RhdGljIGJvb2wgYW10X21lbWJlcnNoaXBfcXVlcnlfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LFxcbiBcXHRpZiAoYW10bXEtXFx1MDAzZW5vbmNlICE9IGFtdC1cXHUwMDNlbm9uY2UpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4rXFx0LyogaXB0dW5uZWxfcHVsbF9oZWFkZXIoKSBhbmQgdGhlIHBza2JfbWF5X3B1bGwoKSBjYWxscyBiZWxvdyBjYW5cXG4rXFx0ICogcmVhbGxvY2F0ZSB0aGUgc2tiIGhlYWQsIHNvIGFtdG1xIHdvdWxkIGRhbmdsZS4gIFNuYXBzaG90IHRoZSBvbmx5XFxuK1xcdCAqIGZpZWxkIHVzZWQgYWZ0ZXJ3YXJkcy5cXG4rXFx0ICovXFxuK1xcdHJlc3BvbnNlX21hYyA9IGFtdG1xLVxcdTAwM2VyZXNwb25zZV9tYWM7XFxuK1xcbiBcXHRoZHJfc2l6ZSAtPSBzaXplb2YoKmV0aCk7XFxuIFxcdGlmIChpcHR1bm5lbF9wdWxsX2hlYWRlcihza2IsIGhkcl9zaXplLCBodG9ucyhFVEhfUF9URUIpLCBmYWxzZSkpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbkBAIC0yMzc2LDYgKzI0MTcsMTMgQEAgc3RhdGljIGJvb2wgYW10X21lbWJlcnNoaXBfcXVlcnlfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LFxcbiBcXHRza2JfcHVsbChza2IsIHNpemVvZigqZXRoKSk7XFxuIFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiBcXHRldGggPSBldGhfaGRyKHNrYik7XFxuK1xcdC8qIFNuYXBzaG90IHRoZSBvdXRlciBzb3VyY2UgTUFDIGJlZm9yZSBhIGxhdGVyIHB1bGwgY2FuIGZyZWUgaXQuICovXFxuK1xcdGV0aGVyX2FkZHJfY29weShoX3NvdXJjZSwgb2V0aC1cXHUwMDNlaF9zb3VyY2UpO1xcbitcXHQvKiBUaGUgTDIgaGVhZGVyIGlzIHJld3JpdHRlbiBiZWxvdzsgbWFrZSB0aGUgaGVhZCBwcml2YXRlIGZpcnN0IHNvIGFcXG4rXFx0ICogY2xvbmVkIHNrYiAoZm9yIGV4YW1wbGUgb25lIHRha2VuIGJ5IGEgcGFja2V0IHRhcCkgaXMgbm90IG1vZGlmaWVkLlxcbitcXHQgKi9cXG4rXFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIDApKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCppcGgpKSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbkBAIC0yMzg4LDYgKzI0MzYsOCBAQCBzdGF0aWMgYm9vbCBhbXRfbWVtYmVyc2hpcF9xdWVyeV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsXFxuIFxcdFxcdFxcdFxcdCAgIHNpemVvZigqaWh2MykpKVxcbiBcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuK1xcdFxcdC8qIHBza2JfbWF5X3B1bGwoKSBhYm92ZSBtYXkgaGF2ZSByZWFsbG9jYXRlZCB0aGUgaGVhZC4gKi9cXG4rXFx0XFx0aXBoID0gaXBfaGRyKHNrYik7XFxuIFxcdFxcdGlmICghaXB2NF9pc19tdWx0aWNhc3QoaXBoLVxcdTAwM2VkYWRkcikpXFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG5AQCAtMjM5NSwxMCArMjQ0NSwxMSBAQCBzdGF0aWMgYm9vbCBhbXRfbWVtYmVyc2hpcF9xdWVyeV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsXFxuIFxcdFxcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuIFxcdFxcdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCppcGgpICsgQU1UX0lQSERSX09QVFMpO1xcbiBcXHRcXHRXUklURV9PTkNFKGFtdC1cXHUwMDNlcmVhZHk0LCB0cnVlKTtcXG4tXFx0XFx0YW10LVxcdTAwM2VtYWMgPSBhbXRtcS1cXHUwMDNlcmVzcG9uc2VfbWFjO1xcbitcXHRcXHRhbXQtXFx1MDAzZW1hYyA9IHJlc3BvbnNlX21hYztcXG4gXFx0XFx0YW10LVxcdTAwM2VyZXFfY250ID0gMDtcXG4gXFx0XFx0YW10LVxcdTAwM2VxaSA9IGlodjMtXFx1MDAzZXFxaWM7XFxuIFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XFxuK1xcdFxcdGV0aCA9IGV0aF9oZHIoc2tiKTtcXG4gXFx0XFx0ZXRoLVxcdTAwM2VoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVApO1xcbiBcXHRcXHRpcF9ldGhfbWNfbWFwKGlwaC1cXHUwMDNlZGFkZHIsIGV0aC1cXHUwMDNlaF9kZXN0KTtcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuQEAgLTI0MjEsMTAgKzI0NzIsMTEgQEAgc3RhdGljIGJvb2wgYW10X21lbWJlcnNoaXBfcXVlcnlfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LFxcbiBcXHRcXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbiBcXHRcXHRza2JfcHVzaChza2IsIHNpemVvZigqaXA2aCkgKyBBTVRfSVA2SERSX09QVFMpO1xcbiBcXHRcXHRXUklURV9PTkNFKGFtdC1cXHUwMDNlcmVhZHk2LCB0cnVlKTtcXG4tXFx0XFx0YW10LVxcdTAwM2VtYWMgPSBhbXRtcS1cXHUwMDNlcmVzcG9uc2VfbWFjO1xcbitcXHRcXHRhbXQtXFx1MDAzZW1hYyA9IHJlc3BvbnNlX21hYztcXG4gXFx0XFx0YW10LVxcdTAwM2VyZXFfY250ID0gMDtcXG4gXFx0XFx0YW10LVxcdTAwM2VxaSA9IG1sZDJxLVxcdTAwM2VtbGQycV9xcWljO1xcbiBcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVBWNik7XFxuK1xcdFxcdGV0aCA9IGV0aF9oZHIoc2tiKTtcXG4gXFx0XFx0ZXRoLVxcdTAwM2VoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVBWNik7XFxuIFxcdFxcdGlwdjZfZXRoX21jX21hcChcXHUwMDI2aXA2aC1cXHUwMDNlZGFkZHIsIGV0aC1cXHUwMDNlaF9kZXN0KTtcXG4gI2VuZGlmXFxuQEAgLTI0MzIsNyArMjQ4NCw3IEBAIHN0YXRpYyBib29sIGFtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCxcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdGV0aGVyX2FkZHJfY29weShldGgtXFx1MDAzZWhfc291cmNlLCBvZXRoLVxcdTAwM2VoX3NvdXJjZSk7XFxuK1xcdGV0aGVyX2FkZHJfY29weShldGgtXFx1MDAzZWhfc291cmNlLCBoX3NvdXJjZSk7XFxuIFxcdHNrYi1cXHUwMDNlcGt0X3R5cGUgPSBQQUNLRVRfTVVMVElDQVNUO1xcbiBcXHRza2ItXFx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7XFxuIFxcdGxlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbkBAIC0yNDU1LDggKzI1MDcsMTMgQEAgc3RhdGljIGJvb2wgYW10X3VwZGF0ZV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdHN0cnVjdCBldGhoZHIgKmV0aDtcXG4gXFx0c3RydWN0IGlwaGRyICppcGg7XFxuIFxcdGludCBsZW4sIGhkcl9zaXplO1xcbitcXHRfX2JlMzIgc2FkZHI7XFxuIFxcbi1cXHRpcGggPSBpcF9oZHIoc2tiKTtcXG4rXFx0LyogaXBfaGRyKCkgcG9pbnRzIGludG8gdGhlIHNrYiBoZWFkLCB3aGljaCB0aGUgcHNrYl9tYXlfcHVsbCgpIC9cXG4rXFx0ICogaXB0dW5uZWxfcHVsbF9oZWFkZXIoKSBjYWxscyBiZWxvdyBjYW4gcmVhbGxvY2F0ZS4gIFNuYXBzaG90IHRoZVxcbitcXHQgKiBzb3VyY2UgYWRkcmVzcyB1c2VkIGZvciB0aGUgdHVubmVsIGxvb2t1cCBiZWZvcmUgdGhlIGZpcnN0IHB1bGwuXFxuK1xcdCAqL1xcbitcXHRzYWRkciA9IGlwX2hkcihza2IpLVxcdTAwM2VzYWRkcjtcXG4gXFxuIFxcdGhkcl9zaXplID0gc2l6ZW9mKCphbXRtdSkgKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7XFxuIFxcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGhkcl9zaXplKSlcXG5AQCAtMjQ3Miw3ICsyNTI5LDcgQEAgc3RhdGljIGJvb2wgYW10X3VwZGF0ZV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodHVubmVsLCBcXHUwMDI2YW10LVxcdTAwM2V0dW5uZWxfbGlzdCwgbGlzdCkge1xcbi1cXHRcXHRpZiAodHVubmVsLVxcdTAwM2VpcDQgPT0gaXBoLVxcdTAwM2VzYWRkcikge1xcbitcXHRcXHRpZiAodHVubmVsLVxcdTAwM2VpcDQgPT0gc2FkZHIpIHtcXG4gXFx0XFx0XFx0aWYgKChhbXRtdS1cXHUwMDNlbm9uY2UgPT0gdHVubmVsLVxcdTAwM2Vub25jZSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgIGFtdG11LVxcdTAwM2VyZXNwb25zZV9tYWMgPT0gdHVubmVsLVxcdTAwM2VtYWMpKSB7XFxuIFxcdFxcdFxcdFxcdG1vZF9kZWxheWVkX3dvcmsoYW10X3dxLCBcXHUwMDI2dHVubmVsLVxcdTAwM2VnY193cSxcXG5AQCAtMjQ5Miw2ICsyNTQ5LDEyIEBAIHN0YXRpYyBib29sIGFtdF91cGRhdGVfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwaCkpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuK1xcdC8qIFRoZSBMMiBoZWFkZXIgaXMgcmV3cml0dGVuIGJlbG93OyBtYWtlIHRoZSBoZWFkIHByaXZhdGUgZmlyc3Qgc28gYVxcbitcXHQgKiBjbG9uZWQgc2tiIChmb3IgZXhhbXBsZSBvbmUgdGFrZW4gYnkgYSBwYWNrZXQgdGFwKSBpcyBub3QgbW9kaWZpZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMCkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4gXFx0aXBoID0gaXBfaGRyKHNrYik7XFxuIFxcdGlmIChpcGgtXFx1MDAzZXZlcnNpb24gPT0gNCkge1xcbiBcXHRcXHRpZiAoaXBfbWNfY2hlY2tfaWdtcChza2IpKSB7XFxuQEAgLTI1MDgsNiArMjU3MSwxMCBAQCBzdGF0aWMgYm9vbCBhbXRfdXBkYXRlX2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0ZXRoID0gZXRoX2hkcihza2IpO1xcbiBcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApO1xcbiBcXHRcXHRldGgtXFx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XFxuK1xcdFxcdC8qIGlwX21jX2NoZWNrX2lnbXAoKSBhbmQgdGhlIHJlcG9ydCBoYW5kbGVyIG1heSBoYXZlXFxuK1xcdFxcdCAqIHJlYWxsb2NhdGVkIHRoZSBoZWFkOyByZS1kZXJpdmUgaXBoLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aXBoID0gaXBfaGRyKHNrYik7XFxuIFxcdFxcdGlwX2V0aF9tY19tYXAoaXBoLVxcdTAwM2VkYWRkciwgZXRoLVxcdTAwM2VoX2Rlc3QpO1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4gXFx0fSBlbHNlIGlmIChpcGgtXFx1MDAzZXZlcnNpb24gPT0gNikge1xcbkBAIC0yNTI3LDYgKzI1OTQsMTAgQEAgc3RhdGljIGJvb2wgYW10X3VwZGF0ZV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdGV0aCA9IGV0aF9oZHIoc2tiKTtcXG4gXFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xcbiBcXHRcXHRldGgtXFx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcXG4rXFx0XFx0LyogaXB2Nl9tY19jaGVja19tbGQoKSBhbmQgdGhlIHJlcG9ydCBoYW5kbGVyIG1heSBoYXZlXFxuK1xcdFxcdCAqIHJlYWxsb2NhdGVkIHRoZSBoZWFkOyByZS1kZXJpdmUgaXA2aC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlwNmggPSBpcHY2X2hkcihza2IpO1xcbiBcXHRcXHRpcHY2X2V0aF9tY19tYXAoXFx1MDAyNmlwNmgtXFx1MDAzZWRhZGRyLCBldGgtXFx1MDAzZWhfZGVzdCk7XFxuICNlbmRpZlxcbiBcXHR9IGVsc2Uge1xcbkBAIC0yNzcyLDcgKzI4NDMsNyBAQCBzdGF0aWMgdm9pZCBhbXRfZ3dfcmN2KHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IpXFxuIHN0YXRpYyBpbnQgYW10X3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4gXFx0c3RydWN0IGFtdF9kZXYgKmFtdDtcXG4tXFx0c3RydWN0IGlwaGRyICppcGg7XFxuK1xcdF9fYmUzMiBzYWRkcjtcXG4gXFx0aW50IHR5cGU7XFxuIFxcdGJvb2wgZXJyO1xcbiBcXG5AQCAtMjc4NSw3ICsyODU2LDExIEBAIHN0YXRpYyBpbnQgYW10X3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdH1cXG4gXFxuIFxcdHNrYi1cXHUwMDNlZGV2ID0gYW10LVxcdTAwM2VkZXY7XFxuLVxcdGlwaCA9IGlwX2hkcihza2IpO1xcbitcXHQvKiBhbXRfcGFyc2VfdHlwZSgpIGNhbGxzIHBza2JfbWF5X3B1bGwoKSwgd2hpY2ggY2FuIHJlYWxsb2NhdGUgdGhlXFxuK1xcdCAqIHNrYiBoZWFkIGFuZCBsZWF2ZSBhIGNhY2hlZCBpcF9oZHIoKSBkYW5nbGluZy4gIFNuYXBzaG90IHRoZSBzb3VyY2VcXG4rXFx0ICogYWRkcmVzcyB1c2VkIGJlbG93IGJlZm9yZSB0aGUgcHVsbC5cXG4rXFx0ICovXFxuK1xcdHNhZGRyID0gaXBfaGRyKHNrYiktXFx1MDAzZXNhZGRyO1xcbiBcXHR0eXBlID0gYW10X3BhcnNlX3R5cGUoc2tiKTtcXG4gXFx0aWYgKHR5cGUgPT0gLTEpIHtcXG4gXFx0XFx0ZXJyID0gdHJ1ZTtcXG5AQCAtMjc5NSw3ICsyODcwLDcgQEAgc3RhdGljIGludCBhbXRfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0aWYgKGFtdC1cXHUwMDNlbW9kZSA9PSBBTVRfTU9ERV9HQVRFV0FZKSB7XFxuIFxcdFxcdHN3aXRjaCAodHlwZSkge1xcbiBcXHRcXHRjYXNlIEFNVF9NU0dfQURWRVJUSVNFTUVOVDpcXG4tXFx0XFx0XFx0aWYgKGlwaC1cXHUwMDNlc2FkZHIgIT0gYW10LVxcdTAwM2VkaXNjb3ZlcnlfaXApIHtcXG4rXFx0XFx0XFx0aWYgKHNhZGRyICE9IGFtdC1cXHUwMDNlZGlzY292ZXJ5X2lwKSB7XFxuIFxcdFxcdFxcdFxcdG5ldGRldl9kYmcoYW10LVxcdTAwM2VkZXYsIFxcXCJJbnZhbGlkIFJlbGF5IElQXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0XFx0ZXJyID0gdHJ1ZTtcXG4gXFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbkBAIC0yODA3LDcgKzI4ODIsNyBAQCBzdGF0aWMgaW50IGFtdF9yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHRjYXNlIEFNVF9NU0dfTVVMVElDQVNUX0RBVEE6XFxuLVxcdFxcdFxcdGlmIChpcGgtXFx1MDAzZXNhZGRyICE9IGFtdC1cXHUwMDNlcmVtb3RlX2lwKSB7XFxuK1xcdFxcdFxcdGlmIChzYWRkciAhPSBhbXQtXFx1MDAzZXJlbW90ZV9pcCkge1xcbiBcXHRcXHRcXHRcXHRuZXRkZXZfZGJnKGFtdC1cXHUwMDNlZGV2LCBcXFwiSW52YWxpZCBSZWxheSBJUFxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdFxcdGVyciA9IHRydWU7XFxuIFxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG5AQCAtMjgxOCw3ICsyODkzLDcgQEAgc3RhdGljIGludCBhbXRfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0Y2FzZSBBTVRfTVNHX01FTUJFUlNISVBfUVVFUlk6XFxuLVxcdFxcdFxcdGlmIChpcGgtXFx1MDAzZXNhZGRyICE9IGFtdC1cXHUwMDNlcmVtb3RlX2lwKSB7XFxuK1xcdFxcdFxcdGlmIChzYWRkciAhPSBhbXQtXFx1MDAzZXJlbW90ZV9pcCkge1xcbiBcXHRcXHRcXHRcXHRuZXRkZXZfZGJnKGFtdC1cXHUwMDNlZGV2LCBcXFwiSW52YWxpZCBSZWxheSBJUFxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdFxcdGVyciA9IHRydWU7XFxuIFxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDU6MjU6MTMuOTIwOTMwNjkyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDgwMjU5MTQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBTVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbXRfZGV2X3htaXRcIixcbiAgICBcImFtdF9pZ21wdjNfcmVwb3J0X2hhbmRsZXJcIixcbiAgICBcImFtdF9tbGR2Ml9yZXBvcnRfaGFuZGxlclwiLFxuICAgIFwiYW10X211bHRpY2FzdF9kYXRhX2hhbmRsZXJcIixcbiAgICBcImFtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXJcIixcbiAgICBcImFtdF91cGRhdGVfaGFuZGxlclwiLFxuICAgIFwiYW10X3JjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG11bHRpcGxlIHVzZS1hZnRlci1mcmVlIGFuZCBkYW5nbGluZyBwb2ludGVyIGJ1Z3MgaW4gdGhlIEFNVCAoQXV0b21hdGljIE11bHRpY2FzdCBUdW5uZWxpbmcpIGRyaXZlciBjYXVzZWQgYnkgYHBza2JfbWF5X3B1bGxgIGFuZCBzaW1pbGFyIGZ1bmN0aW9ucyByZWFsbG9jYXRpbmcgdGhlIHNrYiBoZWFkIHdoaWxlIGhvbGRpbmcgcG9pbnRlcnMgdG8gbmV0d29yayBoZWFkZXJzLiBJdCBhbHNvIGFkZHMgYHNrYl9jb3dfaGVhZGAgdG8gcHJldmVudCBtb2RpZnlpbmcgY2xvbmVkIHNrYnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIG5ldHdvcmsgZHJpdmVyIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBmdXJ0aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBleGlzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1M2ZiZjYzNTc2OTYwOWYzNGFkOWM0NTBmMDE1ZWVmNDYzNjQ3Yzc4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAwNToyNToxMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FtdC5jIGIvZHJpdmVycy9uZXQvYW10LmNcbmluZGV4IGYyZjMxMzllMzhhNTk5Li5mNzM3NWU0MGJjOGYyMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2FtdC5jXG4rKysgYi9kcml2ZXJzL25ldC9hbXQuY1xuQEAgLTEyMTEsNyArMTIxMSw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhbXRfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0XHRkYXRhID0gdHJ1ZTtcbiBcdFx0fVxuIFx0XHR2NiA9IGZhbHNlO1xuLVx0XHRncm91cC5pcDQgPSBpcGgtXHUwMDNlZGFkZHI7XG4rXHRcdGdyb3VwLmlwNCA9IGlwX2hkcihza2IpLVx1MDAzZWRhZGRyO1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuIFx0fSBlbHNlIGlmIChpcGgtXHUwMDNldmVyc2lvbiA9PSA2KSB7XG4gXHRcdGlwNmggPSBpcHY2X2hkcihza2IpO1xuQEAgLTEyMzUsNyArMTIzNSw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhbXRfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0XHRkYXRhID0gdHJ1ZTtcbiBcdFx0fVxuIFx0XHR2NiA9IHRydWU7XG4tXHRcdGdyb3VwLmlwNiA9IGlwNmgtXHUwMDNlZGFkZHI7XG4rXHRcdGdyb3VwLmlwNiA9IGlwdjZfaGRyKHNrYiktXHUwMDNlZGFkZHI7XG4gI2VuZGlmXG4gXHR9IGVsc2Uge1xuIFx0XHRkZXYtXHUwMDNlc3RhdHMudHhfZXJyb3JzKys7XG5AQCAtMTI3OCwxMiArMTI3OCwxMiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYW10X2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGdub2RlLCBcdTAwMjZ0dW5uZWwtXHUwMDNlZ3JvdXBzW2hhc2hdLFxuIFx0XHRcdFx0XHRcdCBub2RlKSB7XG4gXHRcdFx0XHRpZiAoIXY2KSB7XG4tXHRcdFx0XHRcdGlmIChnbm9kZS1cdTAwM2Vncm91cF9hZGRyLmlwNCA9PSBpcGgtXHUwMDNlZGFkZHIpXG4rXHRcdFx0XHRcdGlmIChnbm9kZS1cdTAwM2Vncm91cF9hZGRyLmlwNCA9PSBncm91cC5pcDQpXG4gXHRcdFx0XHRcdFx0Z290byBmb3VuZDtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiBcdFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRcdGlmIChpcHY2X2FkZHJfZXF1YWwoXHUwMDI2Z25vZGUtXHUwMDNlZ3JvdXBfYWRkci5pcDYsXG4tXHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2aXA2aC1cdTAwM2VkYWRkcikpXG4rXHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2Z3JvdXAuaXA2KSlcbiBcdFx0XHRcdFx0XHRnb3RvIGZvdW5kO1xuICNlbmRpZlxuIFx0XHRcdFx0fVxuQEAgLTIwMDAsMTQgKzIwMDAsMjIgQEAgc3RhdGljIHZvaWQgYW10X2lnbXB2M19yZXBvcnRfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGlnbXB2M19yZXBvcnQgKmlocnYzID0gaWdtcHYzX3JlcG9ydF9oZHIoc2tiKTtcbiBcdGludCBsZW4gPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgc2l6ZW9mKCppaHJ2Myk7XG4gXHR2b2lkICp6ZXJvX2dyZWMgPSAodm9pZCAqKVx1MDAyNmlnbXB2M196ZXJvX2dyZWM7XG4tXHRzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpO1xuIFx0c3RydWN0IGFtdF9ncm91cF9ub2RlICpnbm9kZTtcbiBcdHVuaW9uIGFtdF9hZGRyIGdyb3VwLCBob3N0O1xuIFx0c3RydWN0IGlnbXB2M19ncmVjICpncmVjO1xuK1x0X19iZTMyIHNhZGRyO1xuIFx0dTE2IG5zcmNzO1xuK1x0dTE2IG5ncmVjO1xuIFx0aW50IGk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudG9ocyhpaHJ2My1cdTAwM2VuZ3JlYyk7IGkrKykge1xuK1x0LyogaWhydjMgYW5kIGlwX2hkcigpIHBvaW50IGludG8gdGhlIHNrYiBoZWFkLCB3aGljaCB0aGVcbitcdCAqIGlwX21jX21heV9wdWxsKCkgY2FsbHMgYmVsb3cgY2FuIHJlYWxsb2NhdGUuICBSZWFkIGV2ZXJ5IGZpZWxkXG4rXHQgKiB0aGF0IGlzIHVzZWQgYWZ0ZXIgYSBwdWxsIGJlZm9yZSB0aGUgZmlyc3Qgb25lIHJ1bnMuXG4rXHQgKi9cbitcdHNhZGRyID0gaXBfaGRyKHNrYiktXHUwMDNlc2FkZHI7XG4rXHRuZ3JlYyA9IG50b2hzKGlocnYzLVx1MDAzZW5ncmVjKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5ncmVjOyBpKyspIHtcbiBcdFx0bGVuICs9IHNpemVvZigqZ3JlYyk7XG4gXHRcdGlmICghaXBfbWNfbWF5X3B1bGwoc2tiLCBsZW4pKVxuIFx0XHRcdGJyZWFrO1xuQEAgLTIwMTksMTAgKzIwMjcsMTQgQEAgc3RhdGljIHZvaWQgYW10X2lnbXB2M19yZXBvcnRfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRpZiAoIWlwX21jX21heV9wdWxsKHNrYiwgbGVuKSlcbiBcdFx0XHRicmVhaztcbiBcbitcdFx0LyogaXBfbWNfbWF5X3B1bGwoKSBtYXkgaGF2ZSByZWFsbG9jYXRlZCB0aGUgaGVhZC4gKi9cbitcdFx0Z3JlYyA9ICh2b2lkICopKHNrYi1cdTAwM2VkYXRhICsgbGVuIC0gc2l6ZW9mKCpncmVjKSAtXG4rXHRcdFx0XHRuc3JjcyAqIHNpemVvZihfX2JlMzIpKTtcbitcbiBcdFx0bWVtc2V0KFx1MDAyNmdyb3VwLCAwLCBzaXplb2YodW5pb24gYW10X2FkZHIpKTtcbiBcdFx0Z3JvdXAuaXA0ID0gZ3JlYy1cdTAwM2VncmVjX21jYTtcbiBcdFx0bWVtc2V0KFx1MDAyNmhvc3QsIDAsIHNpemVvZih1bmlvbiBhbXRfYWRkcikpO1xuLVx0XHRob3N0LmlwNCA9IGlwaC1cdTAwM2VzYWRkcjtcbitcdFx0aG9zdC5pcDQgPSBzYWRkcjtcbiBcdFx0Z25vZGUgPSBhbXRfbG9va3VwX2dyb3VwKHR1bm5lbCwgXHUwMDI2Z3JvdXAsIFx1MDAyNmhvc3QsIGZhbHNlKTtcbiBcdFx0aWYgKCFnbm9kZSkge1xuIFx0XHRcdGdub2RlID0gYW10X2FkZF9ncm91cChhbXQsIHR1bm5lbCwgXHUwMDI2Z3JvdXAsIFx1MDAyNmhvc3QsXG5AQCAtMjE2MiwxNCArMjE3NCwyMiBAQCBzdGF0aWMgdm9pZCBhbXRfbWxkdjJfcmVwb3J0X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBtbGQyX3JlcG9ydCAqbWxkMnIgPSAoc3RydWN0IG1sZDJfcmVwb3J0ICopaWNtcDZfaGRyKHNrYik7XG4gXHRpbnQgbGVuID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSArIHNpemVvZigqbWxkMnIpO1xuIFx0dm9pZCAqemVyb19ncmVjID0gKHZvaWQgKilcdTAwMjZtbGR2Ml96ZXJvX2dyZWM7XG4tXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7XG4gXHRzdHJ1Y3QgYW10X2dyb3VwX25vZGUgKmdub2RlO1xuIFx0dW5pb24gYW10X2FkZHIgZ3JvdXAsIGhvc3Q7XG4gXHRzdHJ1Y3QgbWxkMl9ncmVjICpncmVjO1xuK1x0c3RydWN0IGluNl9hZGRyIHNhZGRyO1xuIFx0dTE2IG5zcmNzO1xuK1x0dTE2IG5ncmVjO1xuIFx0aW50IGk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudG9ocyhtbGQyci1cdTAwM2VtbGQycl9uZ3JlYyk7IGkrKykge1xuK1x0LyogbWxkMnIgYW5kIGlwdjZfaGRyKCkgcG9pbnQgaW50byB0aGUgc2tiIGhlYWQsIHdoaWNoIHRoZVxuK1x0ICogaXB2Nl9tY19tYXlfcHVsbCgpIGNhbGxzIGJlbG93IGNhbiByZWFsbG9jYXRlLiAgUmVhZCBldmVyeSBmaWVsZFxuK1x0ICogdGhhdCBpcyB1c2VkIGFmdGVyIGEgcHVsbCBiZWZvcmUgdGhlIGZpcnN0IG9uZSBydW5zLlxuK1x0ICovXG4rXHRzYWRkciA9IGlwdjZfaGRyKHNrYiktXHUwMDNlc2FkZHI7XG4rXHRuZ3JlYyA9IG50b2hzKG1sZDJyLVx1MDAzZW1sZDJyX25ncmVjKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5ncmVjOyBpKyspIHtcbiBcdFx0bGVuICs9IHNpemVvZigqZ3JlYyk7XG4gXHRcdGlmICghaXB2Nl9tY19tYXlfcHVsbChza2IsIGxlbikpXG4gXHRcdFx0YnJlYWs7XG5AQCAtMjE4MSwxMCArMjIwMSwxNCBAQCBzdGF0aWMgdm9pZCBhbXRfbWxkdjJfcmVwb3J0X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0aWYgKCFpcHY2X21jX21heV9wdWxsKHNrYiwgbGVuKSlcbiBcdFx0XHRicmVhaztcbiBcbitcdFx0LyogaXB2Nl9tY19tYXlfcHVsbCgpIG1heSBoYXZlIHJlYWxsb2NhdGVkIHRoZSBoZWFkLiAqL1xuK1x0XHRncmVjID0gKHZvaWQgKikoc2tiLVx1MDAzZWRhdGEgKyBsZW4gLSBzaXplb2YoKmdyZWMpIC1cbitcdFx0XHRcdG5zcmNzICogc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpO1xuK1xuIFx0XHRtZW1zZXQoXHUwMDI2Z3JvdXAsIDAsIHNpemVvZih1bmlvbiBhbXRfYWRkcikpO1xuIFx0XHRncm91cC5pcDYgPSBncmVjLVx1MDAzZWdyZWNfbWNhO1xuIFx0XHRtZW1zZXQoXHUwMDI2aG9zdCwgMCwgc2l6ZW9mKHVuaW9uIGFtdF9hZGRyKSk7XG4tXHRcdGhvc3QuaXA2ID0gaXA2aC1cdTAwM2VzYWRkcjtcbitcdFx0aG9zdC5pcDYgPSBzYWRkcjtcbiBcdFx0Z25vZGUgPSBhbXRfbG9va3VwX2dyb3VwKHR1bm5lbCwgXHUwMDI2Z3JvdXAsIFx1MDAyNmhvc3QsIHRydWUpO1xuIFx0XHRpZiAoIWdub2RlKSB7XG4gXHRcdFx0Z25vZGUgPSBhbXRfYWRkX2dyb3VwKGFtdCwgdHVubmVsLCBcdTAwMjZncm91cCwgXHUwMDI2aG9zdCxcbkBAIC0yMzA1LDcgKzIzMjksMTIgQEAgc3RhdGljIGJvb2wgYW10X211bHRpY2FzdF9kYXRhX2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpldGgpKTtcbiBcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4gXHRza2JfcHVsbChza2IsIHNpemVvZigqZXRoKSk7XG4tXHRldGggPSBldGhfaGRyKHNrYik7XG4rXG4rXHQvKiBUaGUgTDIgaGVhZGVyIGlzIHJld3JpdHRlbiBiZWxvdzsgbWFrZSB0aGUgaGVhZCBwcml2YXRlIGZpcnN0IHNvIGFcbitcdCAqIGNsb25lZCBza2IgKGZvciBleGFtcGxlIG9uZSB0YWtlbiBieSBhIHBhY2tldCB0YXApIGlzIG5vdCBtb2RpZmllZC5cbitcdCAqL1xuK1x0aWYgKHNrYl9jb3dfaGVhZChza2IsIDApKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqaXBoKSkpXG4gXHRcdHJldHVybiB0cnVlO1xuQEAgLTIzMTUsNiArMjM0NCw4IEBAIHN0YXRpYyBib29sIGFtdF9tdWx0aWNhc3RfZGF0YV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdGlmICghaXB2NF9pc19tdWx0aWNhc3QoaXBoLVx1MDAzZWRhZGRyKSlcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApO1xuK1x0XHQvKiBwc2tiX21heV9wdWxsKCkgYWJvdmUgbWF5IGhhdmUgcmVhbGxvY2F0ZWQgdGhlIGhlYWQuICovXG4rXHRcdGV0aCA9IGV0aF9oZHIoc2tiKTtcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XG4gXHRcdGlwX2V0aF9tY19tYXAoaXBoLVx1MDAzZWRhZGRyLCBldGgtXHUwMDNlaF9kZXN0KTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbkBAIC0yMzI4LDYgKzIzNTksOCBAQCBzdGF0aWMgYm9vbCBhbXRfbXVsdGljYXN0X2RhdGFfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRpZiAoIWlwdjZfYWRkcl9pc19tdWx0aWNhc3QoXHUwMDI2aXA2aC1cdTAwM2VkYWRkcikpXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xuK1x0XHQvKiBwc2tiX21heV9wdWxsKCkgYWJvdmUgbWF5IGhhdmUgcmVhbGxvY2F0ZWQgdGhlIGhlYWQuICovXG4rXHRcdGV0aCA9IGV0aF9oZHIoc2tiKTtcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcbiBcdFx0aXB2Nl9ldGhfbWNfbWFwKFx1MDAyNmlwNmgtXHUwMDNlZGFkZHIsIGV0aC1cdTAwM2VoX2Rlc3QpO1xuICNlbmRpZlxuQEAgLTIzNTMsOCArMjM4NiwxMCBAQCBzdGF0aWMgYm9vbCBhbXRfbWVtYmVyc2hpcF9xdWVyeV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsXG4gXHRzdHJ1Y3QgYW10X2hlYWRlcl9tZW1iZXJzaGlwX3F1ZXJ5ICphbXRtcTtcbiBcdHN0cnVjdCBpZ21wdjNfcXVlcnkgKmlodjM7XG4gXHRzdHJ1Y3QgZXRoaGRyICpldGgsICpvZXRoO1xuK1x0dTggaF9zb3VyY2VbRVRIX0FMRU5dO1xuIFx0c3RydWN0IGlwaGRyICppcGg7XG4gXHRpbnQgaGRyX3NpemUsIGxlbjtcbitcdHU2NCByZXNwb25zZV9tYWM7XG4gXG4gXHRoZHJfc2l6ZSA9IHNpemVvZigqYW10bXEpICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuIFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGRyX3NpemUpKVxuQEAgLTIzNjcsNiArMjQwMiwxMiBAQCBzdGF0aWMgYm9vbCBhbXRfbWVtYmVyc2hpcF9xdWVyeV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsXG4gXHRpZiAoYW10bXEtXHUwMDNlbm9uY2UgIT0gYW10LVx1MDAzZW5vbmNlKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbitcdC8qIGlwdHVubmVsX3B1bGxfaGVhZGVyKCkgYW5kIHRoZSBwc2tiX21heV9wdWxsKCkgY2FsbHMgYmVsb3cgY2FuXG4rXHQgKiByZWFsbG9jYXRlIHRoZSBza2IgaGVhZCwgc28gYW10bXEgd291bGQgZGFuZ2xlLiAgU25hcHNob3QgdGhlIG9ubHlcbitcdCAqIGZpZWxkIHVzZWQgYWZ0ZXJ3YXJkcy5cbitcdCAqL1xuK1x0cmVzcG9uc2VfbWFjID0gYW10bXEtXHUwMDNlcmVzcG9uc2VfbWFjO1xuK1xuIFx0aGRyX3NpemUgLT0gc2l6ZW9mKCpldGgpO1xuIFx0aWYgKGlwdHVubmVsX3B1bGxfaGVhZGVyKHNrYiwgaGRyX3NpemUsIGh0b25zKEVUSF9QX1RFQiksIGZhbHNlKSlcbiBcdFx0cmV0dXJuIHRydWU7XG5AQCAtMjM3Niw2ICsyNDE3LDEzIEBAIHN0YXRpYyBib29sIGFtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCxcbiBcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpldGgpKTtcbiBcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuIFx0ZXRoID0gZXRoX2hkcihza2IpO1xuK1x0LyogU25hcHNob3QgdGhlIG91dGVyIHNvdXJjZSBNQUMgYmVmb3JlIGEgbGF0ZXIgcHVsbCBjYW4gZnJlZSBpdC4gKi9cbitcdGV0aGVyX2FkZHJfY29weShoX3NvdXJjZSwgb2V0aC1cdTAwM2VoX3NvdXJjZSk7XG4rXHQvKiBUaGUgTDIgaGVhZGVyIGlzIHJld3JpdHRlbiBiZWxvdzsgbWFrZSB0aGUgaGVhZCBwcml2YXRlIGZpcnN0IHNvIGFcbitcdCAqIGNsb25lZCBza2IgKGZvciBleGFtcGxlIG9uZSB0YWtlbiBieSBhIHBhY2tldCB0YXApIGlzIG5vdCBtb2RpZmllZC5cbitcdCAqL1xuK1x0aWYgKHNrYl9jb3dfaGVhZChza2IsIDApKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbiBcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqaXBoKSkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuQEAgLTIzODgsNiArMjQzNiw4IEBAIHN0YXRpYyBib29sIGFtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCxcbiBcdFx0XHRcdCAgIHNpemVvZigqaWh2MykpKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFxuK1x0XHQvKiBwc2tiX21heV9wdWxsKCkgYWJvdmUgbWF5IGhhdmUgcmVhbGxvY2F0ZWQgdGhlIGhlYWQuICovXG4rXHRcdGlwaCA9IGlwX2hkcihza2IpO1xuIFx0XHRpZiAoIWlwdjRfaXNfbXVsdGljYXN0KGlwaC1cdTAwM2VkYWRkcikpXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXG5AQCAtMjM5NSwxMCArMjQ0NSwxMSBAQCBzdGF0aWMgYm9vbCBhbXRfbWVtYmVyc2hpcF9xdWVyeV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsXG4gXHRcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gXHRcdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCppcGgpICsgQU1UX0lQSERSX09QVFMpO1xuIFx0XHRXUklURV9PTkNFKGFtdC1cdTAwM2VyZWFkeTQsIHRydWUpO1xuLVx0XHRhbXQtXHUwMDNlbWFjID0gYW10bXEtXHUwMDNlcmVzcG9uc2VfbWFjO1xuK1x0XHRhbXQtXHUwMDNlbWFjID0gcmVzcG9uc2VfbWFjO1xuIFx0XHRhbXQtXHUwMDNlcmVxX2NudCA9IDA7XG4gXHRcdGFtdC1cdTAwM2VxaSA9IGlodjMtXHUwMDNlcXFpYztcbiBcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApO1xuK1x0XHRldGggPSBldGhfaGRyKHNrYik7XG4gXHRcdGV0aC1cdTAwM2VoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVApO1xuIFx0XHRpcF9ldGhfbWNfbWFwKGlwaC1cdTAwM2VkYWRkciwgZXRoLVx1MDAzZWhfZGVzdCk7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5AQCAtMjQyMSwxMCArMjQ3MiwxMSBAQCBzdGF0aWMgYm9vbCBhbXRfbWVtYmVyc2hpcF9xdWVyeV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsXG4gXHRcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gXHRcdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCppcDZoKSArIEFNVF9JUDZIRFJfT1BUUyk7XG4gXHRcdFdSSVRFX09OQ0UoYW10LVx1MDAzZXJlYWR5NiwgdHJ1ZSk7XG4tXHRcdGFtdC1cdTAwM2VtYWMgPSBhbXRtcS1cdTAwM2VyZXNwb25zZV9tYWM7XG4rXHRcdGFtdC1cdTAwM2VtYWMgPSByZXNwb25zZV9tYWM7XG4gXHRcdGFtdC1cdTAwM2VyZXFfY250ID0gMDtcbiBcdFx0YW10LVx1MDAzZXFpID0gbWxkMnEtXHUwMDNlbWxkMnFfcXFpYztcbiBcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVBWNik7XG4rXHRcdGV0aCA9IGV0aF9oZHIoc2tiKTtcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcbiBcdFx0aXB2Nl9ldGhfbWNfbWFwKFx1MDAyNmlwNmgtXHUwMDNlZGFkZHIsIGV0aC1cdTAwM2VoX2Rlc3QpO1xuICNlbmRpZlxuQEAgLTI0MzIsNyArMjQ4NCw3IEBAIHN0YXRpYyBib29sIGFtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCxcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG4tXHRldGhlcl9hZGRyX2NvcHkoZXRoLVx1MDAzZWhfc291cmNlLCBvZXRoLVx1MDAzZWhfc291cmNlKTtcbitcdGV0aGVyX2FkZHJfY29weShldGgtXHUwMDNlaF9zb3VyY2UsIGhfc291cmNlKTtcbiBcdHNrYi1cdTAwM2Vwa3RfdHlwZSA9IFBBQ0tFVF9NVUxUSUNBU1Q7XG4gXHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTtcbiBcdGxlbiA9IHNrYi1cdTAwM2VsZW47XG5AQCAtMjQ1NSw4ICsyNTA3LDEzIEBAIHN0YXRpYyBib29sIGFtdF91cGRhdGVfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c3RydWN0IGV0aGhkciAqZXRoO1xuIFx0c3RydWN0IGlwaGRyICppcGg7XG4gXHRpbnQgbGVuLCBoZHJfc2l6ZTtcbitcdF9fYmUzMiBzYWRkcjtcbiBcbi1cdGlwaCA9IGlwX2hkcihza2IpO1xuK1x0LyogaXBfaGRyKCkgcG9pbnRzIGludG8gdGhlIHNrYiBoZWFkLCB3aGljaCB0aGUgcHNrYl9tYXlfcHVsbCgpIC9cbitcdCAqIGlwdHVubmVsX3B1bGxfaGVhZGVyKCkgY2FsbHMgYmVsb3cgY2FuIHJlYWxsb2NhdGUuICBTbmFwc2hvdCB0aGVcbitcdCAqIHNvdXJjZSBhZGRyZXNzIHVzZWQgZm9yIHRoZSB0dW5uZWwgbG9va3VwIGJlZm9yZSB0aGUgZmlyc3QgcHVsbC5cbitcdCAqL1xuK1x0c2FkZHIgPSBpcF9oZHIoc2tiKS1cdTAwM2VzYWRkcjtcbiBcbiBcdGhkcl9zaXplID0gc2l6ZW9mKCphbXRtdSkgKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7XG4gXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJfc2l6ZSkpXG5AQCAtMjQ3Miw3ICsyNTI5LDcgQEAgc3RhdGljIGJvb2wgYW10X3VwZGF0ZV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHR1bm5lbCwgXHUwMDI2YW10LVx1MDAzZXR1bm5lbF9saXN0LCBsaXN0KSB7XG4tXHRcdGlmICh0dW5uZWwtXHUwMDNlaXA0ID09IGlwaC1cdTAwM2VzYWRkcikge1xuK1x0XHRpZiAodHVubmVsLVx1MDAzZWlwNCA9PSBzYWRkcikge1xuIFx0XHRcdGlmICgoYW10bXUtXHUwMDNlbm9uY2UgPT0gdHVubmVsLVx1MDAzZW5vbmNlIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICAgYW10bXUtXHUwMDNlcmVzcG9uc2VfbWFjID09IHR1bm5lbC1cdTAwM2VtYWMpKSB7XG4gXHRcdFx0XHRtb2RfZGVsYXllZF93b3JrKGFtdF93cSwgXHUwMDI2dHVubmVsLVx1MDAzZWdjX3dxLFxuQEAgLTI0OTIsNiArMjU0OSwxMiBAQCBzdGF0aWMgYm9vbCBhbXRfdXBkYXRlX2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqaXBoKSkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuK1x0LyogVGhlIEwyIGhlYWRlciBpcyByZXdyaXR0ZW4gYmVsb3c7IG1ha2UgdGhlIGhlYWQgcHJpdmF0ZSBmaXJzdCBzbyBhXG4rXHQgKiBjbG9uZWQgc2tiIChmb3IgZXhhbXBsZSBvbmUgdGFrZW4gYnkgYSBwYWNrZXQgdGFwKSBpcyBub3QgbW9kaWZpZWQuXG4rXHQgKi9cbitcdGlmIChza2JfY293X2hlYWQoc2tiLCAwKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4gXHRpcGggPSBpcF9oZHIoc2tiKTtcbiBcdGlmIChpcGgtXHUwMDNldmVyc2lvbiA9PSA0KSB7XG4gXHRcdGlmIChpcF9tY19jaGVja19pZ21wKHNrYikpIHtcbkBAIC0yNTA4LDYgKzI1NzEsMTAgQEAgc3RhdGljIGJvb2wgYW10X3VwZGF0ZV9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdGV0aCA9IGV0aF9oZHIoc2tiKTtcbiBcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApO1xuIFx0XHRldGgtXHUwMDNlaF9wcm90byA9IGh0b25zKEVUSF9QX0lQKTtcbitcdFx0LyogaXBfbWNfY2hlY2tfaWdtcCgpIGFuZCB0aGUgcmVwb3J0IGhhbmRsZXIgbWF5IGhhdmVcbitcdFx0ICogcmVhbGxvY2F0ZWQgdGhlIGhlYWQ7IHJlLWRlcml2ZSBpcGguXG4rXHRcdCAqL1xuK1x0XHRpcGggPSBpcF9oZHIoc2tiKTtcbiBcdFx0aXBfZXRoX21jX21hcChpcGgtXHUwMDNlZGFkZHIsIGV0aC1cdTAwM2VoX2Rlc3QpO1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuIFx0fSBlbHNlIGlmIChpcGgtXHUwMDNldmVyc2lvbiA9PSA2KSB7XG5AQCAtMjUyNyw2ICsyNTk0LDEwIEBAIHN0YXRpYyBib29sIGFtdF91cGRhdGVfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRldGggPSBldGhfaGRyKHNrYik7XG4gXHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xuIFx0XHRldGgtXHUwMDNlaF9wcm90byA9IGh0b25zKEVUSF9QX0lQVjYpO1xuK1x0XHQvKiBpcHY2X21jX2NoZWNrX21sZCgpIGFuZCB0aGUgcmVwb3J0IGhhbmRsZXIgbWF5IGhhdmVcbitcdFx0ICogcmVhbGxvY2F0ZWQgdGhlIGhlYWQ7IHJlLWRlcml2ZSBpcDZoLlxuK1x0XHQgKi9cbitcdFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XG4gXHRcdGlwdjZfZXRoX21jX21hcChcdTAwMjZpcDZoLVx1MDAzZWRhZGRyLCBldGgtXHUwMDNlaF9kZXN0KTtcbiAjZW5kaWZcbiBcdH0gZWxzZSB7XG5AQCAtMjc3Miw3ICsyODQzLDcgQEAgc3RhdGljIHZvaWQgYW10X2d3X3JjdihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHN0YXRpYyBpbnQgYW10X3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IGFtdF9kZXYgKmFtdDtcbi1cdHN0cnVjdCBpcGhkciAqaXBoO1xuK1x0X19iZTMyIHNhZGRyO1xuIFx0aW50IHR5cGU7XG4gXHRib29sIGVycjtcbiBcbkBAIC0yNzg1LDcgKzI4NTYsMTEgQEAgc3RhdGljIGludCBhbXRfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdH1cbiBcbiBcdHNrYi1cdTAwM2VkZXYgPSBhbXQtXHUwMDNlZGV2O1xuLVx0aXBoID0gaXBfaGRyKHNrYik7XG4rXHQvKiBhbXRfcGFyc2VfdHlwZSgpIGNhbGxzIHBza2JfbWF5X3B1bGwoKSwgd2hpY2ggY2FuIHJlYWxsb2NhdGUgdGhlXG4rXHQgKiBza2IgaGVhZCBhbmQgbGVhdmUgYSBjYWNoZWQgaXBfaGRyKCkgZGFuZ2xpbmcuICBTbmFwc2hvdCB0aGUgc291cmNlXG4rXHQgKiBhZGRyZXNzIHVzZWQgYmVsb3cgYmVmb3JlIHRoZSBwdWxsLlxuK1x0ICovXG4rXHRzYWRkciA9IGlwX2hkcihza2IpLVx1MDAzZXNhZGRyO1xuIFx0dHlwZSA9IGFtdF9wYXJzZV90eXBlKHNrYik7XG4gXHRpZiAodHlwZSA9PSAtMSkge1xuIFx0XHRlcnIgPSB0cnVlO1xuQEAgLTI3OTUsNyArMjg3MCw3IEBAIHN0YXRpYyBpbnQgYW10X3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpZiAoYW10LVx1MDAzZW1vZGUgPT0gQU1UX01PREVfR0FURVdBWSkge1xuIFx0XHRzd2l0Y2ggKHR5cGUpIHtcbiBcdFx0Y2FzZSBBTVRfTVNHX0FEVkVSVElTRU1FTlQ6XG4tXHRcdFx0aWYgKGlwaC1cdTAwM2VzYWRkciAhPSBhbXQtXHUwMDNlZGlzY292ZXJ5X2lwKSB7XG4rXHRcdFx0aWYgKHNhZGRyICE9IGFtdC1cdTAwM2VkaXNjb3ZlcnlfaXApIHtcbiBcdFx0XHRcdG5ldGRldl9kYmcoYW10LVx1MDAzZWRldiwgXCJJbnZhbGlkIFJlbGF5IElQXFxuXCIpO1xuIFx0XHRcdFx0ZXJyID0gdHJ1ZTtcbiBcdFx0XHRcdGdvdG8gZHJvcDtcbkBAIC0yODA3LDcgKzI4ODIsNyBAQCBzdGF0aWMgaW50IGFtdF9yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdH1cbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0Y2FzZSBBTVRfTVNHX01VTFRJQ0FTVF9EQVRBOlxuLVx0XHRcdGlmIChpcGgtXHUwMDNlc2FkZHIgIT0gYW10LVx1MDAzZXJlbW90ZV9pcCkge1xuK1x0XHRcdGlmIChzYWRkciAhPSBhbXQtXHUwMDNlcmVtb3RlX2lwKSB7XG4gXHRcdFx0XHRuZXRkZXZfZGJnKGFtdC1cdTAwM2VkZXYsIFwiSW52YWxpZCBSZWxheSBJUFxcblwiKTtcbiBcdFx0XHRcdGVyciA9IHRydWU7XG4gXHRcdFx0XHRnb3RvIGRyb3A7XG5AQCAtMjgxOCw3ICsyODkzLDcgQEAgc3RhdGljIGludCBhbXRfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0Y2FzZSBBTVRfTVNHX01FTUJFUlNISVBfUVVFUlk6XG4tXHRcdFx0aWYgKGlwaC1cdTAwM2VzYWRkciAhPSBhbXQtXHUwMDNlcmVtb3RlX2lwKSB7XG4rXHRcdFx0aWYgKHNhZGRyICE9IGFtdC1cdTAwM2VyZW1vdGVfaXApIHtcbiBcdFx0XHRcdG5ldGRldl9kYmcoYW10LVx1MDAzZWRldiwgXCJJbnZhbGlkIFJlbGF5IElQXFxuXCIpO1xuIFx0XHRcdFx0ZXJyID0gdHJ1ZTtcbiBcdFx0XHRcdGdvdG8gZHJvcDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjI1OjEzLjkyMDkzMjQ4MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MjU3OTUwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBBTVQgRHJpdmVyIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0YXJnZXRzIGBkcml2ZXJzL25ldC9hbXQuY2AuIFRoZSBjb21taXQgbWVzc2FnZSBpcyBwcmV0dHkgYmFyZWJvbmVzLCBqdXN0IGluZGljYXRpbmcgaXQncyBhIHBhdGNoIGZyb20gYSBzeXotY2x1c3RlciBhbmQgdW5kZXIgcmV2aWV3LiBUaGF0J3MgZmluZSwgdGhlIGNvZGUgaXMgd2hhdCBtYXR0ZXJzLiBUaGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGZpeCwgemVyb2luZyBpbiBvbiBtZW1vcnkgaXNzdWVzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBBTVQgZHJpdmVyLiBUaGV5J3JlIGFkZHJlc3NpbmcgYHNrYmAgcmVhbGxvY2F0aW9uIHByb2JsZW1zIOKAkyB0aGF0IG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCBwYWNrZXQgYnVmZmVyIG1hbmFnZW1lbnQuIEkgc2VlIGNhbGxzIGxpa2UgYHBza2JfbWF5X3B1bGxgLCBgaXBfbWNfbWF5X3B1bGxgLCBhbmQgYHNrYl9jb3dfaGVhZGAsIGFsbCBpbmRpY2F0b3JzIG9mIHBvdGVudGlhbCBoZWFkZXIgcG9pbnRlciBpbnZhbGlkYXRpb24uIEl0IHNlZW1zIGxpa2UgdGhlIGJ1ZyBpbnZvbHZlZCBjYWNoaW5nIHBvaW50ZXJzIHRvIGhlYWRlcnMgKGxpa2UgYGlwX2hkcihza2IpYCkgKmJlZm9yZSogdGhlIGBwdWxsYCBvcGVyYXRpb24gYW5kIHN1YnNlcXVlbnRseSB1c2luZyB0aG9zZSBzdGFsZSBwb2ludGVycywgcmVzdWx0aW5nIGluIGEgdXNlLWFmdGVyLWZyZWUgb3IgZGFuZ2xpbmcgcG9pbnRlciBzY2VuYXJpby4gU21hcnQg4oCTIHRoZXkndmUgYWRkZWQgYW4gYHNrYl9jb3dfaGVhZChza2IsIDApYCBjYWxsIGJlZm9yZSBhbnkgTDIgaGVhZGVyIHJld3JpdGluZywgZWZmZWN0aXZlbHkgY3JlYXRpbmcgYSBjb3B5IG9mIHRoZSBoZWFkIGRhdGEgdG8gcHJldmVudCBzdWNoIGlzc3Vlcy5cblxuVGhpcyBpcyBhIGdvb2QgY2F0Y2gsIGEgY2xlYW4gbWVtb3J5IGNvcnJ1cHRpb24gZml4IGluIGEgY29yZSBrZXJuZWwgY29tcG9uZW50LCB0aGUgQU1UIGRyaXZlci4gSXTigJlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQncyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBpdCdzIHJvYnVzdCBhbmQgdG8gdW5jb3ZlciBhbnkgbGF0ZW50IGlzc3Vlcy4gTm93LCBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIG9uIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBhbmQgaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIGluIHRoaXMgQU1UIGNvZGUuIFRpbWUgdG8gZGlnIGludG8gdGhlIGBkcml2ZXJzL25ldC9hbXQuY2AgZmlsZSBpdHNlbGYgYW5kIGl0cyBhc3NvY2lhdGVkIEtjb25maWcgZW50cmllcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBkcml2ZXIgaXMgY29uZmlndXJlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBuZXR3b3JrIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODUxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDU6MjU6MTkuMzQ2NzMwMTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY1NTIwNzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBTVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9Mjg5PWNvbmZpZyBQRkNQXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTMwMS1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjMwMjpjb25maWcgQU1UXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMDMtXFx0dHJpc3RhdGUgXFxcIkF1dG9tYXRpYyBNdWx0aWNhc3QgVHVubmVsaW5nIChBTVQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNToyNToxOS43MTIyNTg5ODVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDQ4NDY1ODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQU1UIERyaXZlciBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBgQU1UYCBjb25maWd1cmF0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIFRoZSBwcmVzZW5jZSBvZiBgI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpYCBzdWdnZXN0cyB0aGF0IGBJUFY2YCBpcyBhbHNvIGdvaW5nIHRvIGJlIGEgZmFjdG9yIGhlcmUuXG5cbk5vdywgbGV0J3MgemVybyBpbiBvbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBhcm91bmQgdGhlc2UgZnVuY3Rpb25zIHdpdGhpbiBgZHJpdmVycy9uZXQvYW10LmNgOiBgYW10X2Rldl94bWl0YCwgYGFtdF9pZ21wdjNfcmVwb3J0X2hhbmRsZXJgLCBgYW10X21sZHYyX3JlcG9ydF9oYW5kbGVyYCwgYGFtdF9tdWx0aWNhc3RfZGF0YV9oYW5kbGVyYCwgYGFtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXJgLCBgYW10X3VwZGF0ZV9oYW5kbGVyYCwgYW5kIGBhbXRfcmN2YC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHNldCBgRm9jdXNTeW1ib2xzYCB0byB0aG9zZSBmdW5jdGlvbnMgc28gSSBjYW4gY29uY2VudHJhdGUgbXkgZnV6emluZyBlZmZvcnRzIG9uIHRoZW0uXG5cbkkganVzdCBkb3VibGUgY2hlY2tlZCBhbmQgd2hpbGUgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIHRoYXQncyBub3QgYSBjb25jZXJuIGZvciBteSBwdXJwb3NlcyB3aXRoIGBGb2N1c1N5bWJvbHNgLlxuXG5Ob3csIGNvbnNpZGVyaW5nIHRoZXNlIGFyZSBkYXRhIHBhdGggZnVuY3Rpb25zLCBJIG5lZWQgdG8gZXZhbHVhdGUgd2hldGhlciBvciBub3QgdGhleSBhcmUgaG90IHBhdGhzLiBgYW10X2Rldl94bWl0YCBhbmQgYGFtdF9yY3ZgIGFyZSB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgZnVuY3Rpb25zLCByZXNwZWN0aXZlbHksIHNvIHRoZXkgYXJlIHRoZSBkYXRhIHBhdGggZm9yIHRoZSBBTVQgZHJpdmVyLiBIb3dldmVyLCBzaW5jZSBBTVQgaXMgYSBzcGVjaWFsaXplZCB0dW5uZWwsIEkgZG9uJ3QgdGhpbmsgdGhleSdyZSBnZW5lcmljIGhvdCBwYXRocyBpbiB0aGUgc2FtZSB3YXkgYGlwX3JjdmAgb3IgYGRldl9xdWV1ZV94bWl0YCBtaWdodCBiZS4gVGhpcyBtZWFucyBmdXp6aW5nIHRoZXNlIHNwZWNpZmljYWxseSBpcyBhIGdvb2QgaWRlYS5cblxuRmluYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHZlcmlmeSBgQU1UYCBjb25maWcgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTIyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjI1OjI1LjE2MDcyNzgzMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI5OTI3NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFNVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9Mjg5PWNvbmZpZyBQRkNQXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTMwMS1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjMwMjpjb25maWcgQU1UXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMDMtXFx0dHJpc3RhdGUgXFxcIkF1dG9tYXRpYyBNdWx0aWNhc3QgVHVubmVsaW5nIChBTVQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNToyNToyNS4zMTM3MjcyMDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDc2ODQ0NDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbHJlYWR5IHF1aXRlIGZhbWlsaWFyIHdpdGggZW1iZWRkZWQgc3lzdGVtcywgS2NvbmZpZywgYW5kIEFNVCAoQWN0aXZlIE1hbmFnZW1lbnQgVGVjaG5vbG9neSkuXG5cbioqRGVsdmluZyBpbnRvIHRoZSBBTVQgS2NvbmZpZyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgbWluZCBpbW1lZGlhdGVseSBjbGlja3MgdG8gYWN0aW9uIG1vZGUg4oCTIGxldCdzIGRpc3NlY3QgdGhlIEtjb25maWcgZm9yIEFNVC4gSSdtIHRoaW5raW5nLCBcIlJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGFsbCB0aGUgdmFyaWFibGVzIHJlbGF0ZWQgdG8gQU1ULlwiIEknbSBtZW50YWxseSBwcmVwYXJpbmcgdG8gbmF2aWdhdGUgdGhlIGZpbGUsIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZXMuIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIGtleSBzZXR0aW5ncyB0aGF0IGNvbnRyb2wgQU1UJ3MgYmVoYXZpb3IsIGZlYXR1cmVzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIEknbSBhbnRpY2lwYXRpbmcgdGhlIHVzdWFsIEtjb25maWcgc3ludGF4IOKAkyBgY29uZmlnYCwgYGJvb2xgLCBgdHJpc3RhdGVgLCBgc2VsZWN0YCwgYGRlcGVuZHMgb25gLCBgZGVmYXVsdGAsIGV0Yy4g4oCTIGFuZCBJJ20gcmVhZHkgdG8gcGFyc2UgdGhlIGxvZ2ljIHdpdGhpbi4gRXNzZW50aWFsbHksIEknbSBtZW50YWxseSBwcmVwYXJpbmcgZm9yIGEgZGVlcCBkaXZlIHRvIHVuZGVyc3RhbmQgaG93IEFNVCBpcyBjb25maWd1cmVkLCBlbmFibGVkLCBhbmQgd2hhdCBpdHMgc3BlY2lmaWMgY2FwYWJpbGl0aWVzIGFyZSB3aXRoaW4gdGhpcyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzM2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDU6MjU6MjguMzkwNTc0MTY1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzAwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzAwOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgcGZjcC5cXG4gMzAxOlxcdFxcbiAzMDI6XFx0Y29uZmlnIEFNVFxcbiAzMDM6XFx0XFx0dHJpc3RhdGUgXFxcIkF1dG9tYXRpYyBNdWx0aWNhc3QgVHVubmVsaW5nIChBTVQpXFxcIlxcbiAzMDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IElQX01VTFRJQ0FTVFxcbiAzMDU6XFx0XFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuIDMwNjpcXHRcXHRoZWxwXFxuIDMwNzpcXHRcXHQgIFRoaXMgYWxsb3dzIG9uZSB0byBjcmVhdGUgQU1UKEF1dG9tYXRpYyBNdWx0aWNhc3QgVHVubmVsaW5nKVxcbiAzMDg6XFx0XFx0ICB2aXJ0dWFsIGludGVyZmFjZXMgdGhhdCBwcm92aWRlIG11bHRpY2FzdCB0dW5uZWxpbmcuXFxuIDMwOTpcXHRcXHQgIFRoZXJlIGFyZSB0d28gcm9sZXMsIEdhdGV3YXksIGFuZCBSZWxheS5cXG4gMzEwOlxcdFxcdCAgR2F0ZXdheSBFbmNhcHN1bGF0ZXMgSUdNUC9NTEQgdHJhZmZpYyBmcm9tIGxpc3RlbmVycyB0byB0aGUgUmVsYXkuXFxuIDMxMTpcXHRcXHQgIEdhdGV3YXkgRGVjYXBzdWxhdGVzIG11bHRpY2FzdCB0cmFmZmljIGZyb20gdGhlIFJlbGF5IHRvIExpc3RlbmVycy5cXG4gMzEyOlxcdFxcdCAgUmVsYXkgRW5jYXBzdWxhdGVzIG11bHRpY2FzdCB0cmFmZmljIGZyb20gU291cmNlcyB0byBHYXRld2F5LlxcbiAzMTM6XFx0XFx0ICBSZWxheSBEZWNhcHN1bGF0ZXMgSUdNUC9NTEQgdHJhZmZpYyBmcm9tIEdhdGV3YXkuXFxuIDMxNDpcXHRcXG4gMzE1OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlcnMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMzE2OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgYW10LlxcbiAzMTc6XFx0XFxuIDMxODpcXHRjb25maWcgTUFDU0VDXFxuIDMxOTpcXHRcXHR0cmlzdGF0ZSBcXFwiSUVFRSA4MDIuMUFFIE1BQy1sZXZlbCBlbmNyeXB0aW9uIChNQUNzZWMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNToyNToyOC4zOTA2OTI3NzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjEyMzMyMzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFNVCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lIGNvbmNlcm5pbmcgdGhlIEFNVCAoQXV0b21hdGljIE11bHRpY2FzdCBUdW5uZWxpbmcpIGRyaXZlci4gVGhlIGRlcGVuZGVuY2llcyBhcmUgYElORVRgIGFuZCBgSVBfTVVMVElDQVNUYCwgYW5kIGl0IGxvb2tzIGxpa2UgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQU1UYCBhbmQgYElQVjZgIGFyZSBlbmFibGVkIGluIHRoZSBjb25maWd1cmF0aW9ucy4gR29vZCwgc3RhbmRhcmQgc2V0dXAuXG5cbk15IGltbWVkaWF0ZSB0YWtlYXdheSBpcyB0aGF0IHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgbmFzdHkgY29sbGVjdGlvbiBvZiBtZW1vcnkgc2FmZXR5IGlzc3VlczogdXNlLWFmdGVyLWZyZWUgYW5kIGRhbmdsaW5nIHBvaW50ZXIgYnVncy4gVGhleSdyZSBwaW5wb2ludGluZyB0aGUgY3VscHJpdHMgYXMgYHBza2JfbWF5X3B1bGxgIGFuZCBzaW1pbGFyIGZ1bmN0aW9ucywgd2hpY2ggYXJlIHJlYWxsb2NhdGluZyB0aGUgYHNrYmAgaGVhZGVyIHdoaWxlIG5ldHdvcmsgaGVhZGVyIHBvaW50ZXJzIGFyZSBzdGlsbCBhY3RpdmUuIFNvdW5kcyBsaWtlIGNsYXNzaWMgcmFjZSBjb25kaXRpb25zIGluIGEgbmV0d29yayBjb250ZXh0LCBhbmQgdGhlIHNvbHV0aW9uIGxvb2tzIHRvIGJlIGBza2JfY293X2hlYWRgIHRvIHByZXZlbnQgbW9kaWZpY2F0aW9uIG9mIGNsb25lZCBgc2tic2AuIEl0J3MgZGVmaW5pdGVseSBmdW5jdGlvbmFsLCByaWdodCBvZmYgdGhlIGJhdC5cblxuU28sIHRoaXMgY2xlYXJseSB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZy4gVGhpcyBpcyByZWFjaGFibGUgbmV0d29yayBkcml2ZXIgY29kZSwgYW5kIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbiwgdGhlcmXigJlzIGxpa2VseSBwb3RlbnRpYWwgZm9yIG1vcmUgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIHRvIHN0aWxsIGV4aXN0LlxuXG5JIG5lZWQgdG8gZm9jdXMgb24gdGhlc2Ugc3ltYm9scyB0byBhc3Nlc3MgdGhlIGZpeCB0aG9yb3VnaGx5OiBgYW10X2Rldl94bWl0YCwgYGFtdF9pZ21wdjNfcmVwb3J0X2hhbmRsZXJgLCBgYW10X21sZHYyX3JlcG9ydF9oYW5kbGVyYCwgYGFtdF9tdWx0aWNhc3RfZGF0YV9oYW5kbGVyYCwgYGFtdF9tZW1iZXJzaGlwX3F1ZXJ5X2hhbmRsZXJgLCBgYW10X3VwZGF0ZV9oYW5kbGVyYCwgYW5kIGBhbXRfcmN2YC4gRmlyc3QgdGhpbmcgSSdsbCBkbyBpcyBkb3VibGUtY2hlY2sgdGhlIG5hbWUsIGp1c3QgdG8gbWFrZSBzdXJlIGl0J3MgY29ycmVjdC4gWWVzLCBpdCBpcyBpbiB0aGUgZGlmZi5cblxuQWxyaWdodCwgdGhlIHBhdGNoIGlzIGZ1bmN0aW9uYWwgYW5kIGRlZmluaXRlbHkgZml4aW5nIGJ1Z3MuIEknbSBnb2luZyB0byBzZXQgaXQgdXAgdG8gY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkzNCwiT3V0cHV0VG9rZW5zIjoyMDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNToyNTozNC42MDMwMjcxNDFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA0ODY0MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFNVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFtdF9kZXZfeG1pdFwiLFxuICAgIFwiYW10X2lnbXB2M19yZXBvcnRfaGFuZGxlclwiLFxuICAgIFwiYW10X21sZHYyX3JlcG9ydF9oYW5kbGVyXCIsXG4gICAgXCJhbXRfbXVsdGljYXN0X2RhdGFfaGFuZGxlclwiLFxuICAgIFwiYW10X21lbWJlcnNoaXBfcXVlcnlfaGFuZGxlclwiLFxuICAgIFwiYW10X3VwZGF0ZV9oYW5kbGVyXCIsXG4gICAgXCJhbXRfcmN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgdXNlLWFmdGVyLWZyZWUgYW5kIGRhbmdsaW5nIHBvaW50ZXIgYnVncyBpbiB0aGUgQU1UIChBdXRvbWF0aWMgTXVsdGljYXN0IFR1bm5lbGluZykgZHJpdmVyIGNhdXNlZCBieSBgcHNrYl9tYXlfcHVsbGAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zIHJlYWxsb2NhdGluZyB0aGUgc2tiIGhlYWQgd2hpbGUgaG9sZGluZyBwb2ludGVycyB0byBuZXR3b3JrIGhlYWRlcnMuIEl0IGFsc28gYWRkcyBgc2tiX2Nvd19oZWFkYCB0byBwcmV2ZW50IG1vZGlmeWluZyBjbG9uZWQgc2ticy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgbmV0d29yayBkcml2ZXIgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGZ1cnRoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGV4aXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFNVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFtdF9kZXZfeG1pdFwiLFxuICAgIFwiYW10X2lnbXB2M19yZXBvcnRfaGFuZGxlclwiLFxuICAgIFwiYW10X21sZHYyX3JlcG9ydF9oYW5kbGVyXCIsXG4gICAgXCJhbXRfbXVsdGljYXN0X2RhdGFfaGFuZGxlclwiLFxuICAgIFwiYW10X21lbWJlcnNoaXBfcXVlcnlfaGFuZGxlclwiLFxuICAgIFwiYW10X3VwZGF0ZV9oYW5kbGVyXCIsXG4gICAgXCJhbXRfcmN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgdXNlLWFmdGVyLWZyZWUgYW5kIGRhbmdsaW5nIHBvaW50ZXIgYnVncyBpbiB0aGUgQU1UIChBdXRvbWF0aWMgTXVsdGljYXN0IFR1bm5lbGluZykgZHJpdmVyIGNhdXNlZCBieSBgcHNrYl9tYXlfcHVsbGAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zIHJlYWxsb2NhdGluZyB0aGUgc2tiIGhlYWQgd2hpbGUgaG9sZGluZyBwb2ludGVycyB0byBuZXR3b3JrIGhlYWRlcnMuIEl0IGFsc28gYWRkcyBgc2tiX2Nvd19oZWFkYCB0byBwcmV2ZW50IG1vZGlmeWluZyBjbG9uZWQgc2ticy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgbmV0d29yayBkcml2ZXIgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGZ1cnRoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGV4aXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdnnz[1] Phase: Succeeded StartedAt: 2026-07-08 05:25:46 +0000 UTC FinishedAt: 2026-07-08 05:25:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdnnz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-08 05:25:46 +0000 UTC FinishedAt: 2026-07-08 05:25:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdnnz[2] Phase: Succeeded StartedAt: 2026-07-08 05:25:46 +0000 UTC FinishedAt: 2026-07-08 09:54:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-08 05:25:46 +0000 UTC FinishedAt: 2026-07-08 09:54:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-08 05:25:46 +0000 UTC FinishedAt: 2026-07-08 05:26:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-08 05:25:46 +0000 UTC FinishedAt: 2026-07-08 05:25:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},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-workflowvdnnz/series-workflowvdnnz-convert-artifact-817632962/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-08 05:26:08 +0000 UTC FinishedAt: 2026-07-08 06:06:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-08 05:26:08 +0000 UTC FinishedAt: 2026-07-08 06:06:51 +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:*a57c8121-83b2-41fa-b2f1-906bc91e49d9,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-workflowvdnnz/series-workflowvdnnz-convert-artifact-817632962/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": "e7b6acf4-c0af-474d-912d-67067d639167", "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-workflowvdnnz/series-workflowvdnnz-build-action-472830336/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-08 05:26:08 +0000 UTC FinishedAt: 2026-07-08 06:06:41 +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:*a57c8121-83b2-41fa-b2f1-906bc91e49d9,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-workflowvdnnz/series-workflowvdnnz-convert-artifact-817632962/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": "e7b6acf4-c0af-474d-912d-67067d639167", "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-workflowvdnnz/series-workflowvdnnz-build-action-472830336/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-08 06:06:51 +0000 UTC FinishedAt: 2026-07-08 06:06:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-08 06:06:51 +0000 UTC FinishedAt: 2026-07-08 06:06:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-08 06:06:51 +0000 UTC FinishedAt: 2026-07-08 06:07:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-08 06:06:51 +0000 UTC FinishedAt: 2026-07-08 06:07:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},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-workflowvdnnz/series-workflowvdnnz-convert-artifact-4092135965/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-08 06:07:11 +0000 UTC FinishedAt: 2026-07-08 06:09:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-08 06:07:11 +0000 UTC FinishedAt: 2026-07-08 06:09:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e7b6acf4-c0af-474d-912d-67067d639167,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-workflowvdnnz/series-workflowvdnnz-build-action-472830336/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-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-08 06:09:31 +0000 UTC FinishedAt: 2026-07-08 06:09:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-08 06:09:31 +0000 UTC FinishedAt: 2026-07-08 06:09:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-08 06:09:31 +0000 UTC FinishedAt: 2026-07-08 06:49:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-08 06:09:31 +0000 UTC FinishedAt: 2026-07-08 06:49:15 +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:*a57c8121-83b2-41fa-b2f1-906bc91e49d9,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-workflowvdnnz/series-workflowvdnnz-convert-artifact-4092135965/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": "c054e56b-12c7-4c95-b520-00e5105ada73", "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-workflowvdnnz/series-workflowvdnnz-build-action-1059706617/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-08 06:09:31 +0000 UTC FinishedAt: 2026-07-08 06:49:05 +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:*a57c8121-83b2-41fa-b2f1-906bc91e49d9,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-workflowvdnnz/series-workflowvdnnz-convert-artifact-4092135965/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": "c054e56b-12c7-4c95-b520-00e5105ada73", "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-workflowvdnnz/series-workflowvdnnz-build-action-1059706617/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-08 06:49:15 +0000 UTC FinishedAt: 2026-07-08 06:49:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-08 06:49:15 +0000 UTC FinishedAt: 2026-07-08 06:49:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-08 06:49:15 +0000 UTC FinishedAt: 2026-07-08 06:51:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-08 06:49:15 +0000 UTC FinishedAt: 2026-07-08 06:51:07 +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:*c054e56b-12c7-4c95-b520-00e5105ada73,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-workflowvdnnz/series-workflowvdnnz-build-action-1059706617/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-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-08 06:51:17 +0000 UTC FinishedAt: 2026-07-08 09:54:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-08 06:51:17 +0000 UTC FinishedAt: 2026-07-08 09:54:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"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:*e7b6acf4-c0af-474d-912d-67067d639167,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c054e56b-12c7-4c95-b520-00e5105ada73,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-workflowvdnnz/series-workflowvdnnz-build-action-472830336/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-workflowvdnnz/series-workflowvdnnz-build-action-1059706617/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-08 06:51:17 +0000 UTC FinishedAt: 2026-07-08 06:51:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-08 06:51:17 +0000 UTC FinishedAt: 2026-07-08 06:51:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"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-workflowvdnnz/series-workflowvdnnz-convert-artifact-1018980002/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-08 06:51:17 +0000 UTC FinishedAt: 2026-07-08 06:51:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-08 06:51:17 +0000 UTC FinishedAt: 2026-07-08 06:51:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-08 06:51:17 +0000 UTC FinishedAt: 2026-07-08 06:51:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-08 06:51:27 +0000 UTC FinishedAt: 2026-07-08 09:54:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdnnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amt_dev_xmit","amt_igmpv3_report_handler","amt_mldv2_report_handler","amt_multicast_data_handler","amt_membership_query_handler","amt_update_handler","amt_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5200f5f493f79f14bbdc349e402a40dfb32f23c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["AMT","IPV6"],"series_id":"e57d1bfb-df25-47a7-8437-9232e7d8789b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-08 06:51:27 +0000 UTC FinishedAt: 2026-07-08 09:54:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e7b6acf4-c0af-474d-912d-67067d639167,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c054e56b-12c7-4c95-b520-00e5105ada73,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-workflowvdnnz/series-workflowvdnnz-build-action-472830336/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-workflowvdnnz/series-workflowvdnnz-build-action-1059706617/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-workflowvdnnz/series-workflowvdnnz-convert-artifact-1018980002/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,}