Name: series-workflowhzkpm Phase: Succeeded StartedAt: 2026-07-19 13:48:58 +0000 UTC FinishedAt: 2026-07-19 18:50:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzkpm[0] Phase: Succeeded StartedAt: 2026-07-19 13:48:58 +0000 UTC FinishedAt: 2026-07-19 14:20:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzkpm[0].run-triage Phase: Succeeded StartedAt: 2026-07-19 13:48:58 +0000 UTC FinishedAt: 2026-07-19 14:20:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ce6b4d3216b63f902bb8e9695ee6c10c83415f65", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ce6b4d3216b63f902bb8e9695ee6c10c83415f65", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "IPV6" ], "series_id": "ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ndisc_check_ns_na", "br_is_nd_neigh_msg", "br_nd_send" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE5IDE0OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmRpc2NfY2hlY2tfbnNfbmEmIzM0OywKICAgICYjMzQ7YnJfaXNfbmRfbmVpZ2hfbXNnJiMzNDssCiAgICAmIzM0O2JyX25kX3NlbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgbmRpc2NfY2hlY2tfbnNfbmFgIHRvIHZhbGlkYXRlIElQdjYgTmVpZ2hib3IgU29saWNpdGF0aW9uIGFuZCBBZHZlcnRpc2VtZW50IHBhY2tldHMsIGFuZCB1cGRhdGVzIHRoZSBicmlkZ2UgTkQgcHJveHkgY29kZSB0byB1c2UgaXQuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBwcm9jZXNzZXMgdW50cnVzdGVkIG5ldHdvcmsgcGFja2V0cyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAxNDoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRlZWVhNjIxODI1MjczYWViNTk2ZmIyMjE2ZWU0YTFkMDU0MmIzYjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxOSAxNDoxOToyMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZGlzYy5oIGIvaW5jbHVkZS9uZXQvbmRpc2MuaFxuaW5kZXggM2RhMWE2ZjhkM2Y5MjAuLjllNTM3OWFkMmQ4ZTAwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbmRpc2MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmRpc2MuaFxuQEAgLTQzMCw2ICYjNDM7NDMwLDggQEAgdm9pZCBuZGlzY191cGRhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsXG4gXHRcdCAgY29uc3QgdTggKmxsYWRkciwgdTggbmV3LCB1MzIgZmxhZ3MsIHU4IGljbXA2X3R5cGUsXG4gXHRcdCAgc3RydWN0IG5kaXNjX29wdGlvbnMgKm5kb3B0cyk7XG4gXG4mIzQzO2ludCBuZGlzY19jaGVja19uc19uYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiYjNDM7XG4gLypcbiAgKlx0SUdNUFxuICAqL1xuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMgYi9uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jXG5pbmRleCAyM2ViNjkzMWEyYjRhZC4uNzg2M2JlYWUwYzU1NWQgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jXG5AQCAtMTksNiAmIzQzOzE5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvYWRkcmNvbmYuaFx1MDAzZVxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcDZfY2hlY2tzdW0uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvbmRpc2MuaFx1MDAzZVxuICNlbmRpZlxuIFxuICNpbmNsdWRlIFwmIzM0O2JyX3ByaXZhdGUuaFwmIzM0O1xuQEAgLTIzNCwyMSAmIzQzOzIzNSwxNSBAQCB2b2lkIGJyX2RvX3Byb3h5X3N1cHByZXNzX2FycChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4gI2VuZGlmXG4gXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4tc3RydWN0IG5kX21zZyAqYnJfaXNfbmRfbmVpZ2hfbXNnKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZF9tc2cgKm1zZylcbiYjNDM7c3RydWN0IG5kX21zZyAqYnJfaXNfbmRfbmVpZ2hfbXNnKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IG5kX21zZyAqbTtcbi1cbi1cdG0gPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBza2JfbmV0d29ya19vZmZzZXQoc2tiKSAmIzQzO1xuLVx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLCBzaXplb2YoKm1zZyksIG1zZyk7XG4tXHRpZiAoIW0pXG4mIzQzO1x0aWYgKG5kaXNjX2NoZWNrX25zX25hKHNrYikpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0aWYgKG0tXHUwMDNlaWNtcGguaWNtcDZfY29kZSAhPSAwIHx8XG4tXHQgICAgKG0tXHUwMDNlaWNtcGguaWNtcDZfdHlwZSAhPSBORElTQ19ORUlHSEJPVVJfU09MSUNJVEFUSU9OIFx1MDAyNlx1MDAyNlxuLVx0ICAgICBtLVx1MDAzZWljbXBoLmljbXA2X3R5cGUgIT0gTkRJU0NfTkVJR0hCT1VSX0FEVkVSVElTRU1FTlQpKVxuJiM0MztcdGlmIChza2JfbGluZWFyaXplKHNrYikpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0cmV0dXJuIG07XG4mIzQzO1x0cmV0dXJuIChzdHJ1Y3QgbmRfbXNnICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYnJfbmRfc2VuZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG5AQCAtMjU3LDE3ICYjNDM7MjUyLDE4IEBAIHN0YXRpYyB2b2lkIGJyX25kX3NlbmQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSByZXF1ZXN0LVx1MDAzZWRldjtcbiBcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnO1xuJiM0MztcdHN0cnVjdCBuZGlzY19vcHRpb25zIG5kb3B0cztcbiBcdHN0cnVjdCBuZF9tc2cgKm5hLCAqbnM7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7XG4gXHRzdHJ1Y3QgaXB2NmhkciAqcGlwNjtcbiBcdGludCBuYV9vbGVuID0gODsgLyogb3B0IGhkciAmIzQzOyBFVEhfQUxFTiBmb3IgdGFyZ2V0ICovXG4gXHRpbnQgbnNfb2xlbjtcbi1cdGludCBpLCBsZW47XG4gXHR1OCAqZGFkZHI7XG4gXHRib29sIGRhZDtcbiBcdHUxNiBwdmlkO1xuJiM0MztcdGludCBsZW47XG4gXG4tXHRpZiAoIWRldiB8fCBza2JfbGluZWFyaXplKHJlcXVlc3QpKVxuJiM0MztcdGlmICghZGV2KVxuIFx0XHRyZXR1cm47XG4gXG4gXHRsZW4gPSBMTF9SRVNFUlZFRF9TUEFDRShkZXYpICYjNDM7IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgJiM0MztcbkBAIC0yODQsMjMgJiM0MzsyODAsMjMgQEAgc3RhdGljIHZvaWQgYnJfbmRfc2VuZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4gXHRza2Jfc2V0X21hY19oZWFkZXIocmVwbHksIDApO1xuIFxuIFx0ZGFkZHIgPSBldGhfaGRyKHJlcXVlc3QpLVx1MDAzZWhfc291cmNlO1xuLVx0bnMgPSAoc3RydWN0IG5kX21zZyAqKShza2JfbmV0d29ya19oZWFkZXIocmVxdWVzdCkgJiM0Mztcbi1cdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4tXG4tXHQvKiBEbyB3ZSBuZWVkIG9wdGlvbiBwcm9jZXNzaW5nID8gKi9cbi1cdG5zX29sZW4gPSByZXF1ZXN0LVx1MDAzZWxlbiAtIChza2JfbmV0d29ya19vZmZzZXQocmVxdWVzdCkgJiM0Mztcbi1cdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkgLSBzaXplb2YoKm5zKTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5zX29sZW4gLSAxOyBpICYjNDM7PSAobnMtXHUwMDNlb3B0W2kgJiM0MzsgMV0gXHUwMDNjXHUwMDNjIDMpKSB7XG4tXHRcdGlmICghbnMtXHUwMDNlb3B0W2kgJiM0MzsgMV0gfHwgaSAmIzQzOyAobnMtXHUwMDNlb3B0W2kgJiM0MzsgMV0gXHUwMDNjXHUwMDNjIDMpIFx1MDAzZSBuc19vbGVuKSB7XG4tXHRcdFx0a2ZyZWVfc2tiKHJlcGx5KTtcbi1cdFx0XHRyZXR1cm47XG4tXHRcdH1cbi1cdFx0aWYgKG5zLVx1MDAzZW9wdFtpXSA9PSBORF9PUFRfU09VUkNFX0xMX0FERFIpIHtcbi1cdFx0XHRpZiAoKG5zLVx1MDAzZW9wdFtpICYjNDM7IDFdIFx1MDAzY1x1MDAzYyAzKSBcdTAwM2U9XG4tXHRcdFx0ICAgIHNpemVvZihzdHJ1Y3QgbmRfb3B0X2hkcikgJiM0MzsgRVRIX0FMRU4pXG4tXHRcdFx0XHRkYWRkciA9IG5zLVx1MDAzZW9wdCAmIzQzOyBpICYjNDM7IHNpemVvZihzdHJ1Y3QgbmRfb3B0X2hkcik7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbiYjNDM7XHRucyA9IChzdHJ1Y3QgbmRfbXNnICopc2tiX3RyYW5zcG9ydF9oZWFkZXIocmVxdWVzdCk7XG4mIzQzO1xuJiM0MztcdC8qIERlcml2ZSB0aGUgb3B0aW9uIGxlbmd0aCBmcm9tIHRoZSBJUHY2IHBheWxvYWQgbGVuZ3RoIHNvIHRoYXQgYW55XG4mIzQzO1x0ICogdHJhaWxpbmcgTDIgcGFkZGluZyBpbiB0aGUgc2tiIGlzIG5vdCBwYXJzZWQgYXMgTkQgb3B0aW9ucy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRuc19vbGVuID0gbnRvaHMoaXB2Nl9oZHIocmVxdWVzdCktXHUwMDNlcGF5bG9hZF9sZW4pIC0gc2l6ZW9mKCpucyk7XG4mIzQzO1x0aWYgKCFuZGlzY19wYXJzZV9vcHRpb25zKGRldiwgbnMtXHUwMDNlb3B0LCBuc19vbGVuLCBcdTAwMjZuZG9wdHMpKSB7XG4mIzQzO1x0XHRrZnJlZV9za2IocmVwbHkpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG5kb3B0cy5uZF9vcHRzX3NyY19sbGFkZHIpIHtcbiYjNDM7XHRcdHU4ICpsbGFkZHI7XG4mIzQzO1xuJiM0MztcdFx0bGxhZGRyID0gbmRpc2Nfb3B0X2FkZHJfZGF0YShuZG9wdHMubmRfb3B0c19zcmNfbGxhZGRyLCBkZXYpO1xuJiM0MztcdFx0aWYgKGxsYWRkcilcbiYjNDM7XHRcdFx0ZGFkZHIgPSBsbGFkZHI7XG4gXHR9XG4gXG4gXHRkYWQgPSBpcHY2X2FkZHJfYW55KFx1MDAyNmlwdjZfaGRyKHJlcXVlc3QpLVx1MDAzZXNhZGRyKTtcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xuaW5kZXggZTdmMzQzYWIyMmQzNzkuLmZmNTVkYWI3MzYzMjZiIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xuQEAgLTgwLDkgJiM0Mzs4MCw5IEBAIG5ldGRldl90eF90IGJyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdCAgIHBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICYjNDM7XG4gXHRcdFx0XHQgc2l6ZW9mKHN0cnVjdCBuZF9tc2cpKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgaXB2Nl9oZHIoc2tiKS1cdTAwM2VuZXh0aGRyID09IElQUFJPVE9fSUNNUFY2KSB7XG4tXHRcdFx0c3RydWN0IG5kX21zZyAqbXNnLCBfbXNnO1xuJiM0MztcdFx0XHRzdHJ1Y3QgbmRfbXNnICptc2c7XG4gXG4tXHRcdFx0bXNnID0gYnJfaXNfbmRfbmVpZ2hfbXNnKHNrYiwgXHUwMDI2X21zZyk7XG4mIzQzO1x0XHRcdG1zZyA9IGJyX2lzX25kX25laWdoX21zZyhza2IpO1xuIFx0XHRcdGlmIChtc2cpXG4gXHRcdFx0XHRicl9kb19zdXBwcmVzc19uZChza2IsIGJyLCB2aWQsIE5VTEwsIG1zZyk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jXG5pbmRleCBkZGI4ZjAwMmE0MGU4Mi4uZDg3YTVmOWZhOTJiNzAgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX2lucHV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xuQEAgLTE3Niw5ICYjNDM7MTc2LDkgQEAgaW50IGJyX2hhbmRsZV9mcmFtZV9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2JcbiBcdFx0ICAgcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgJiM0MztcbiBcdFx0XHRcdCBzaXplb2Yoc3RydWN0IG5kX21zZykpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICBpcHY2X2hkcihza2IpLVx1MDAzZW5leHRoZHIgPT0gSVBQUk9UT19JQ01QVjYpIHtcbi1cdFx0XHRzdHJ1Y3QgbmRfbXNnICptc2csIF9tc2c7XG4mIzQzO1x0XHRcdHN0cnVjdCBuZF9tc2cgKm1zZztcbiBcbi1cdFx0XHRtc2cgPSBicl9pc19uZF9uZWlnaF9tc2coc2tiLCBcdTAwMjZfbXNnKTtcbiYjNDM7XHRcdFx0bXNnID0gYnJfaXNfbmRfbmVpZ2hfbXNnKHNrYik7XG4gXHRcdFx0aWYgKG1zZylcbiBcdFx0XHRcdGJyX2RvX3N1cHByZXNzX25kKHNrYiwgYnIsIHZpZCwgcCwgbXNnKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaCBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXG5pbmRleCBkNTVlYTk1MTZlM2UzNi4uMTZlZDA5ZWJmZmMzY2YgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcbkBAIC0yMzYxLDcgJiM0MzsyMzYxLDcgQEAgdm9pZCBicl9kb19wcm94eV9zdXBwcmVzc19hcnAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0XHRcdCAgICAgIHUxNiB2aWQsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApO1xuIHZvaWQgYnJfZG9fc3VwcHJlc3NfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0XHQgICAgICAgdTE2IHZpZCwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IG5kX21zZyAqbXNnKTtcbi1zdHJ1Y3QgbmRfbXNnICpicl9pc19uZF9uZWlnaF9tc2coY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5kX21zZyAqbSk7XG4mIzQzO3N0cnVjdCBuZF9tc2cgKmJyX2lzX25kX25laWdoX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBib29sIGJyX2lzX25laWdoX3N1cHByZXNzX2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IHZpZCk7XG4gYm9vbCBicl9pc19uZWlnaF9mb3J3YXJkX2dyYXRfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgdmlkKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9NYWtlZmlsZSBiL25ldC9pcHY2L01ha2VmaWxlXG5pbmRleCA1YjBjZDY0ODgwMjEyNC4uY2Y1ZTAxZjgzY2UzZDAgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvTWFrZWZpbGVcbkBAIC01MSw3ICYjNDM7NTEsNyBAQCBvYmotJChzdWJzdCBtLHksJChDT05GSUdfSVBWNikpICYjNDM7PSBpbmV0Nl9oYXNodGFibGVzLm9cbiBcbiBpZm5lcSAoJChDT05GSUdfSVBWNiksKVxuIG9iai0kKENPTkZJR19ORVRfVURQX1RVTk5FTCkgJiM0Mzs9IGlwNl91ZHBfdHVubmVsLm9cbi1vYmoteSAmIzQzOz0gbWNhc3Rfc25vb3Aub1xuJiM0MztvYmoteSAmIzQzOz0gbWNhc3Rfc25vb3AubyBuZGlzY19zbm9vcC5vXG4gb2JqLSQoQ09ORklHX1RDUF9BTykgJiM0Mzs9IHRjcF9hby5vXG4gZW5kaWZcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuY1xuaW5kZXggZjg2N2VjOGQzZDkwNTEuLmQ4YjQ1ODhmNmJmZjkyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvbmRpc2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmRpc2MuY1xuQEAgLTI4Myw2ICYjNDM7MjgzLDcgQEAgc3RydWN0IG5kaXNjX29wdGlvbnMgKm5kaXNjX3BhcnNlX29wdGlvbnMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdH1cbiBcdHJldHVybiBuZG9wdHM7XG4gfVxuJiM0MztFWFBPUlRfU1lNQk9MKG5kaXNjX3BhcnNlX29wdGlvbnMpO1xuIFxuIGludCBuZGlzY19tY19tYXAoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLCBjaGFyICpidWYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkaXIpXG4ge1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25kaXNjX3Nub29wLmMgYi9uZXQvaXB2Ni9uZGlzY19zbm9vcC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmE5M2VlZDI3YTFmNmQ3XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZGlzY19zbm9vcC5jXG5AQCAtMCwwICYjNDM7MSwxOTAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2FkZHJjb25mLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9jaGVja3N1bS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9pcHY2LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L25kaXNjLmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbmRpc2NfY2hlY2tfaXA2aGRyKHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCBsZW47XG4mIzQzO1xuJiM0MztcdG9mZnNldCA9IHNrYl9uZXR3b3JrX29mZnNldChza2IpICYjNDM7IHNpemVvZigqaXA2aCk7XG4mIzQzO1x0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgb2Zmc2V0KSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpcDZoID0gaXB2Nl9oZHIoc2tiKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlwNmgtXHUwMDNldmVyc2lvbiAhPSA2KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChpcDZoLVx1MDAzZW5leHRoZHIgIT0gSVBQUk9UT19JQ01QVjYpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01TRztcbiYjNDM7XG4mIzQzO1x0LyogUkZDIDQ4NjEgNy4xLjEgLyA3LjEuMjogbXVzdCBub3QgaGF2ZSBiZWVuIGZvcndhcmRlZCBieSBhIHJvdXRlciAqL1xuJiM0MztcdGlmIChpcDZoLVx1MDAzZWhvcF9saW1pdCAhPSAyNTUpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0bGVuID0gb2Zmc2V0ICYjNDM7IG50b2hzKGlwNmgtXHUwMDNlcGF5bG9hZF9sZW4pO1xuJiM0MztcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBsZW4gfHwgbGVuIFx1MDAzYz0gb2Zmc2V0KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIG9mZnNldCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19zdW0xNiBuZGlzY192YWxpZGF0ZV9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHNrYl9jaGVja3N1bV92YWxpZGF0ZShza2IsIElQUFJPVE9fSUNNUFY2LCBpcDZfY29tcHV0ZV9wc2V1ZG8pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG5kaXNjX2NoZWNrX2ljbXB2NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGxlbiA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpY21wNmhkcik7XG4mIzQzO1x0dW5zaWduZWQgaW50IHRyYW5zcG9ydF9sZW4gPSBpcHY2X3RyYW5zcG9ydF9sZW4oc2tiKTtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2NoaztcbiYjNDM7XHRzdHJ1Y3QgaWNtcDZoZHIgKmhkcjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgbGVuKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHQvKiBSRkMgNDg2MSA3LjEuMSAvIDcuMS4yOiB0aGUgSUNNUHY2IGNoZWNrc3VtIG11c3QgYmUgdmFsaWQgKi9cbiYjNDM7XHRza2JfY2hrID0gc2tiX2NoZWNrc3VtX3RyaW1tZWQoc2tiLCB0cmFuc3BvcnRfbGVuLFxuJiM0MztcdFx0XHRcdCAgICAgICBuZGlzY192YWxpZGF0ZV9jaGVja3N1bSk7XG4mIzQzO1x0aWYgKCFza2JfY2hrKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChza2JfY2hrICE9IHNrYilcbiYjNDM7XHRcdGtmcmVlX3NrYihza2JfY2hrKTtcbiYjNDM7XG4mIzQzO1x0LyogUkZDIDQ4NjEgNy4xLjEgLyA3LjEuMjogQ29kZSBtdXN0IGJlIDAgKi9cbiYjNDM7XHRoZHIgPSAoc3RydWN0IGljbXA2aGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiYjNDM7XHRpZiAoaGRyLVx1MDAzZWljbXA2X2NvZGUgIT0gMClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBuZGlzY19jaGVja19vcHRpb25zKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBvcHRzX2xlbixcbiYjNDM7XHRcdFx0ICAgICAgIGJvb2wgcmVqZWN0X3NsbGEpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSAmIzQzOyBzaXplb2Yoc3RydWN0IG5kX21zZyk7XG4mIzQzO1x0c3RydWN0IG5kX29wdF9oZHIgKm9wdCwgX29wdDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKG9wdHNfbGVuIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRpZiAob3B0c19sZW4gXHUwMDNjIHNpemVvZigqb3B0KSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0b3B0ID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX29wdCksIFx1MDAyNl9vcHQpO1xuJiM0MztcdFx0aWYgKCFvcHQpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdC8qIFJGQyA0ODYxIDcuMS4xIC8gNy4xLjI6IGFsbCBvcHRpb24gbGVuZ3RocyBtdXN0IGJlIFx1MDAzZSAwICovXG4mIzQzO1x0XHRpZiAoIW9wdC1cdTAwM2VuZF9vcHRfbGVuKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBSRkMgNDg2MSA3LjEuMTogREFEIE5TIG11c3Qgbm90IGNvbnRhaW4gYSBzb3VyY2UgbGluay1sYXllclxuJiM0MztcdFx0ICogYWRkcmVzcyBvcHRpb25cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHJlamVjdF9zbGxhIFx1MDAyNlx1MDAyNiBvcHQtXHUwMDNlbmRfb3B0X3R5cGUgPT0gTkRfT1BUX1NPVVJDRV9MTF9BRERSKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAob3B0LVx1MDAzZW5kX29wdF9sZW4gKiA4IFx1MDAzZSBvcHRzX2xlbilcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0b2Zmc2V0ICYjNDM7PSBvcHQtXHUwMDNlbmRfb3B0X2xlbiAqIDg7XG4mIzQzO1x0XHRvcHRzX2xlbiAtPSBvcHQtXHUwMDNlbmRfb3B0X2xlbiAqIDg7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBuZGlzY19jaGVja19uZF9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBsZW4gPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICYjNDM7IHNpemVvZihzdHJ1Y3QgbmRfbXNnKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgdHJhbnNwb3J0X2xlbiA9IGlwdjZfdHJhbnNwb3J0X2xlbihza2IpO1xuJiM0MztcdGJvb2wgcmVqZWN0X3NsbGEgPSBmYWxzZTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgbmRfbXNnICptc2c7XG4mIzQzO1xuJiM0MztcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGxlbikpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0LyogUkZDIDQ4NjEgNy4xLjEgLyA3LjEuMjogSUNNUCBsZW5ndGggaXMgYXQgbGVhc3Qgc2l6ZW9mKG5kX21zZykgKi9cbiYjNDM7XHRpZiAodHJhbnNwb3J0X2xlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBuZF9tc2cpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdG1zZyA9IChzdHJ1Y3QgbmRfbXNnICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiYjNDM7XG4mIzQzO1x0LyogUkZDIDQ4NjEgNy4xLjEgLyA3LjEuMjogVGFyZ2V0IEFkZHJlc3MgbXVzdCBub3QgYmUgYVxuJiM0MztcdCAqIG11bHRpY2FzdCBhZGRyZXNzXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGlwdjZfYWRkcl9pc19tdWx0aWNhc3QoXHUwMDI2bXNnLVx1MDAzZXRhcmdldCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChtc2ctXHUwMDNlaWNtcGguaWNtcDZfdHlwZSkge1xuJiM0MztcdGNhc2UgTkRJU0NfTkVJR0hCT1VSX1NPTElDSVRBVElPTjpcbiYjNDM7XHRcdGlmIChpcHY2X2FkZHJfYW55KFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlc2FkZHIpKSB7XG4mIzQzO1x0XHRcdC8qIFJGQyA0ODYxIDcuMS4xOiBEQUQgTlMgZGVzdGluYXRpb24gbXVzdCBiZSBhXG4mIzQzO1x0XHRcdCAqIHNvbGljaXRlZC1ub2RlIG11bHRpY2FzdCBhZGRyZXNzXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoIWlwdjZfYWRkcl9pc19zb2xpY3RfbXVsdChcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyKSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0LyogUkZDIDQ4NjEgNy4xLjE6IERBRCBOUyBtdXN0IG5vdCBjb250YWluIGEgc291cmNlXG4mIzQzO1x0XHRcdCAqIGxpbmstbGF5ZXIgYWRkcmVzcyBvcHRpb25cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHJlamVjdF9zbGxhID0gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTkRJU0NfTkVJR0hCT1VSX0FEVkVSVElTRU1FTlQ6XG4mIzQzO1x0XHQvKiBSRkMgNDg2MSA3LjEuMjogU29saWNpdGVkIGZsYWcgbXVzdCBiZSAwIGZvclxuJiM0MztcdFx0ICogbXVsdGljYXN0IGRlc3RpbmF0aW9uc1xuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoaXB2Nl9hZGRyX2lzX211bHRpY2FzdChcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBtc2ctXHUwMDNlaWNtcGguaWNtcDZfc29saWNpdGVkKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RBVEE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gbmRpc2NfY2hlY2tfb3B0aW9ucyhza2IsIHRyYW5zcG9ydF9sZW4gLSBzaXplb2Yoc3RydWN0IG5kX21zZyksXG4mIzQzO1x0XHRcdFx0ICAgcmVqZWN0X3NsbGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogbmRpc2NfY2hlY2tfbnNfbmEgLSB2YWxpZGF0ZSBhbiBOUy9OQSBwYWNrZXQgYW5kIHNldCBpdHMgdHJhbnNwb3J0IGhlYWRlclxuJiM0MzsgKiBAc2tiOiB0aGUgc2tiIHRvIHZhbGlkYXRlXG4mIzQzOyAqXG4mIzQzOyAqIFZhbGlkYXRlcyBhbiBJUHY2IHBhY2tldCBmb3IgY29tcGxpYW5jZSB3aXRoIFJGQyA0ODYxIHNlY3Rpb25zIDcuMS4xXG4mIzQzOyAqIChOZWlnaGJvciBTb2xpY2l0YXRpb24pIGFuZCA3LjEuMiAoTmVpZ2hib3IgQWR2ZXJ0aXNlbWVudCkuIElmIHZhbGlkLFxuJiM0MzsgKiBzZXRzIHRoZSBza2IgdHJhbnNwb3J0IGhlYWRlci5cbiYjNDM7ICpcbiYjNDM7ICogQ2FsbGVyIG5lZWRzIHRvIHNldCB0aGUgc2tiIG5ldHdvcmsgaGVhZGVyLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46XG4mIzQzOyAqICogMCAgICAgICAgLSB2YWxpZCBOUy9OQTsgdGhlIHNrYiB0cmFuc3BvcnQgaGVhZGVyIGhhcyBiZWVuIHNldC5cbiYjNDM7ICogKiAtRUlOVkFMICAtIGEgYnJva2VuIHBhY2tldCB3YXMgZGV0ZWN0ZWQsIGkuZS4gaXQgdmlvbGF0ZXMgc29tZVxuJiM0MzsgKiAgICAgICAgICAgICAgaW50ZXJuZXQgc3RhbmRhcmQuXG4mIzQzOyAqICogLUVOT01TRyAgLSBJUCBoZWFkZXIgdmFsaWRhdGlvbiBzdWNjZWVkZWQgYnV0IGl0IGlzIG5vdCBhbiBJQ01QdjZcbiYjNDM7ICogICAgICAgICAgICAgIHBhY2tldC5cbiYjNDM7ICogKiAtRU5PREFUQSAtIElQJiM0MztJQ01QdjYgaGVhZGVyIHZhbGlkYXRpb24gc3VjY2VlZGVkIGJ1dCBpdCBpcyBub3QgYVxuJiM0MzsgKiAgICAgICAgICAgICAgTmVpZ2hib3IgU29saWNpdGF0aW9uIG9yIE5laWdoYm9yIEFkdmVydGlzZW1lbnQuXG4mIzQzOyAqL1xuJiM0MztpbnQgbmRpc2NfY2hlY2tfbnNfbmEoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IG5kaXNjX2NoZWNrX2lwNmhkcihza2IpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBuZGlzY19jaGVja19pY21wdjYoc2tiKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG5kaXNjX2NoZWNrX25kX21zZyhza2IpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wobmRpc2NfY2hlY2tfbnNfbmEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDE0OjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmRpc2NfY2hlY2tfbnNfbmEmIzM0OywKICAgICYjMzQ7YnJfaXNfbmRfbmVpZ2hfbXNnJiMzNDssCiAgICAmIzM0O2JyX25kX3NlbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgbmRpc2NfY2hlY2tfbnNfbmFgIHRvIHZhbGlkYXRlIElQdjYgTmVpZ2hib3IgU29saWNpdGF0aW9uIGFuZCBBZHZlcnRpc2VtZW50IHBhY2tldHMsIGFuZCB1cGRhdGVzIHRoZSBicmlkZ2UgTkQgcHJveHkgY29kZSB0byB1c2UgaXQuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBwcm9jZXNzZXMgdW50cnVzdGVkIG5ldHdvcmsgcGFja2V0cyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGVlZWE2MjE4MjUyNzNhZWI1OTZmYjIyMTZlZTRhMWQwNTQyYjNiMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDE5IDE0OjE5OjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmRpc2MuaCBiL2luY2x1ZGUvbmV0L25kaXNjLmgKaW5kZXggM2RhMWE2ZjhkM2Y5MjAuLjllNTM3OWFkMmQ4ZTAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZGlzYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25kaXNjLmgKQEAgLTQzMCw2ICYjNDM7NDMwLDggQEAgdm9pZCBuZGlzY191cGRhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsCiAJCSAgY29uc3QgdTggKmxsYWRkciwgdTggbmV3LCB1MzIgZmxhZ3MsIHU4IGljbXA2X3R5cGUsCiAJCSAgc3RydWN0IG5kaXNjX29wdGlvbnMgKm5kb3B0cyk7CiAKJiM0MztpbnQgbmRpc2NfY2hlY2tfbnNfbmEoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiYjNDM7CiAvKgogICoJSUdNUAogICovCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jIGIvbmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYwppbmRleCAyM2ViNjkzMWEyYjRhZC4uNzg2M2JlYWUwYzU1NWQgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYwpAQCAtMTksNiAmIzQzOzE5LDcgQEAKICNpbmNsdWRlICZsdDtuZXQvYWRkcmNvbmYuaCZndDsKICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQogI2luY2x1ZGUgJmx0O25ldC9pcDZfY2hlY2tzdW0uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L25kaXNjLmgmZ3Q7CiAjZW5kaWYKIAogI2luY2x1ZGUgJiMzNDticl9wcml2YXRlLmgmIzM0OwpAQCAtMjM0LDIxICYjNDM7MjM1LDE1IEBAIHZvaWQgYnJfZG9fcHJveHlfc3VwcHJlc3NfYXJwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfYnJpZGdlICpiciwKICNlbmRpZgogCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKLXN0cnVjdCBuZF9tc2cgKmJyX2lzX25kX25laWdoX21zZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmRfbXNnICptc2cpCiYjNDM7c3RydWN0IG5kX21zZyAqYnJfaXNfbmRfbmVpZ2hfbXNnKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IG5kX21zZyAqbTsKLQotCW0gPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBza2JfbmV0d29ya19vZmZzZXQoc2tiKSAmIzQzOwotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXB2NmhkciksIHNpemVvZigqbXNnKSwgbXNnKTsKLQlpZiAoIW0pCiYjNDM7CWlmIChuZGlzY19jaGVja19uc19uYShza2IpKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmIChtLSZndDtpY21waC5pY21wNl9jb2RlICE9IDAgfHwKLQkgICAgKG0tJmd0O2ljbXBoLmljbXA2X3R5cGUgIT0gTkRJU0NfTkVJR0hCT1VSX1NPTElDSVRBVElPTiAmYW1wOyZhbXA7Ci0JICAgICBtLSZndDtpY21waC5pY21wNl90eXBlICE9IE5ESVNDX05FSUdIQk9VUl9BRFZFUlRJU0VNRU5UKSkKJiM0MzsJaWYgKHNrYl9saW5lYXJpemUoc2tiKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlyZXR1cm4gbTsKJiM0MzsJcmV0dXJuIChzdHJ1Y3QgbmRfbXNnICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKIH0KIAogc3RhdGljIHZvaWQgYnJfbmRfc2VuZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCkBAIC0yNTcsMTcgJiM0MzsyNTIsMTggQEAgc3RhdGljIHZvaWQgYnJfbmRfc2VuZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJlcXVlc3QtJmd0O2RldjsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZzsKJiM0MzsJc3RydWN0IG5kaXNjX29wdGlvbnMgbmRvcHRzOwogCXN0cnVjdCBuZF9tc2cgKm5hLCAqbnM7CiAJc3RydWN0IHNrX2J1ZmYgKnJlcGx5OwogCXN0cnVjdCBpcHY2aGRyICpwaXA2OwogCWludCBuYV9vbGVuID0gODsgLyogb3B0IGhkciAmIzQzOyBFVEhfQUxFTiBmb3IgdGFyZ2V0ICovCiAJaW50IG5zX29sZW47Ci0JaW50IGksIGxlbjsKIAl1OCAqZGFkZHI7CiAJYm9vbCBkYWQ7CiAJdTE2IHB2aWQ7CiYjNDM7CWludCBsZW47CiAKLQlpZiAoIWRldiB8fCBza2JfbGluZWFyaXplKHJlcXVlc3QpKQomIzQzOwlpZiAoIWRldikKIAkJcmV0dXJuOwogCiAJbGVuID0gTExfUkVTRVJWRURfU1BBQ0UoZGV2KSAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICYjNDM7CkBAIC0yODQsMjMgJiM0MzsyODAsMjMgQEAgc3RhdGljIHZvaWQgYnJfbmRfc2VuZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCiAJc2tiX3NldF9tYWNfaGVhZGVyKHJlcGx5LCAwKTsKIAogCWRhZGRyID0gZXRoX2hkcihyZXF1ZXN0KS0mZ3Q7aF9zb3VyY2U7Ci0JbnMgPSAoc3RydWN0IG5kX21zZyAqKShza2JfbmV0d29ya19oZWFkZXIocmVxdWVzdCkgJiM0MzsKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTsKLQotCS8qIERvIHdlIG5lZWQgb3B0aW9uIHByb2Nlc3NpbmcgPyAqLwotCW5zX29sZW4gPSByZXF1ZXN0LSZndDtsZW4gLSAoc2tiX25ldHdvcmtfb2Zmc2V0KHJlcXVlc3QpICYjNDM7Ci0JCQkJICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSAtIHNpemVvZigqbnMpOwotCWZvciAoaSA9IDA7IGkgJmx0OyBuc19vbGVuIC0gMTsgaSAmIzQzOz0gKG5zLSZndDtvcHRbaSAmIzQzOyAxXSAmbHQ7Jmx0OyAzKSkgewotCQlpZiAoIW5zLSZndDtvcHRbaSAmIzQzOyAxXSB8fCBpICYjNDM7IChucy0mZ3Q7b3B0W2kgJiM0MzsgMV0gJmx0OyZsdDsgMykgJmd0OyBuc19vbGVuKSB7Ci0JCQlrZnJlZV9za2IocmVwbHkpOwotCQkJcmV0dXJuOwotCQl9Ci0JCWlmIChucy0mZ3Q7b3B0W2ldID09IE5EX09QVF9TT1VSQ0VfTExfQUREUikgewotCQkJaWYgKChucy0mZ3Q7b3B0W2kgJiM0MzsgMV0gJmx0OyZsdDsgMykgJmd0Oz0KLQkJCSAgICBzaXplb2Yoc3RydWN0IG5kX29wdF9oZHIpICYjNDM7IEVUSF9BTEVOKQotCQkJCWRhZGRyID0gbnMtJmd0O29wdCAmIzQzOyBpICYjNDM7IHNpemVvZihzdHJ1Y3QgbmRfb3B0X2hkcik7Ci0JCQlicmVhazsKLQkJfQomIzQzOwlucyA9IChzdHJ1Y3QgbmRfbXNnICopc2tiX3RyYW5zcG9ydF9oZWFkZXIocmVxdWVzdCk7CiYjNDM7CiYjNDM7CS8qIERlcml2ZSB0aGUgb3B0aW9uIGxlbmd0aCBmcm9tIHRoZSBJUHY2IHBheWxvYWQgbGVuZ3RoIHNvIHRoYXQgYW55CiYjNDM7CSAqIHRyYWlsaW5nIEwyIHBhZGRpbmcgaW4gdGhlIHNrYiBpcyBub3QgcGFyc2VkIGFzIE5EIG9wdGlvbnMuCiYjNDM7CSAqLwomIzQzOwluc19vbGVuID0gbnRvaHMoaXB2Nl9oZHIocmVxdWVzdCktJmd0O3BheWxvYWRfbGVuKSAtIHNpemVvZigqbnMpOwomIzQzOwlpZiAoIW5kaXNjX3BhcnNlX29wdGlvbnMoZGV2LCBucy0mZ3Q7b3B0LCBuc19vbGVuLCAmYW1wO25kb3B0cykpIHsKJiM0MzsJCWtmcmVlX3NrYihyZXBseSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG5kb3B0cy5uZF9vcHRzX3NyY19sbGFkZHIpIHsKJiM0MzsJCXU4ICpsbGFkZHI7CiYjNDM7CiYjNDM7CQlsbGFkZHIgPSBuZGlzY19vcHRfYWRkcl9kYXRhKG5kb3B0cy5uZF9vcHRzX3NyY19sbGFkZHIsIGRldik7CiYjNDM7CQlpZiAobGxhZGRyKQomIzQzOwkJCWRhZGRyID0gbGxhZGRyOwogCX0KIAogCWRhZCA9IGlwdjZfYWRkcl9hbnkoJmFtcDtpcHY2X2hkcihyZXF1ZXN0KS0mZ3Q7c2FkZHIpOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9kZXZpY2UuYyBiL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMKaW5kZXggZTdmMzQzYWIyMmQzNzkuLmZmNTVkYWI3MzYzMjZiIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMKQEAgLTgwLDkgJiM0Mzs4MCw5IEBAIG5ldGRldl90eF90IGJyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCSAgIHBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICYjNDM7CiAJCQkJIHNpemVvZihzdHJ1Y3QgbmRfbXNnKSkgJmFtcDsmYW1wOwogCQkgICBpcHY2X2hkcihza2IpLSZndDtuZXh0aGRyID09IElQUFJPVE9fSUNNUFY2KSB7Ci0JCQlzdHJ1Y3QgbmRfbXNnICptc2csIF9tc2c7CiYjNDM7CQkJc3RydWN0IG5kX21zZyAqbXNnOwogCi0JCQltc2cgPSBicl9pc19uZF9uZWlnaF9tc2coc2tiLCAmYW1wO19tc2cpOwomIzQzOwkJCW1zZyA9IGJyX2lzX25kX25laWdoX21zZyhza2IpOwogCQkJaWYgKG1zZykKIAkJCQlicl9kb19zdXBwcmVzc19uZChza2IsIGJyLCB2aWQsIE5VTEwsIG1zZyk7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jCmluZGV4IGRkYjhmMDAyYTQwZTgyLi5kODdhNWY5ZmE5MmI3MCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuYwpAQCAtMTc2LDkgJiM0MzsxNzYsOSBAQCBpbnQgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYgogCQkgICBwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSAmIzQzOwogCQkJCSBzaXplb2Yoc3RydWN0IG5kX21zZykpICZhbXA7JmFtcDsKIAkJICAgaXB2Nl9oZHIoc2tiKS0mZ3Q7bmV4dGhkciA9PSBJUFBST1RPX0lDTVBWNikgewotCQkJc3RydWN0IG5kX21zZyAqbXNnLCBfbXNnOwomIzQzOwkJCXN0cnVjdCBuZF9tc2cgKm1zZzsKIAotCQkJbXNnID0gYnJfaXNfbmRfbmVpZ2hfbXNnKHNrYiwgJmFtcDtfbXNnKTsKJiM0MzsJCQltc2cgPSBicl9pc19uZF9uZWlnaF9tc2coc2tiKTsKIAkJCWlmIChtc2cpCiAJCQkJYnJfZG9fc3VwcHJlc3NfbmQoc2tiLCBiciwgdmlkLCBwLCBtc2cpOwogCX0KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKaW5kZXggZDU1ZWE5NTE2ZTNlMzYuLjE2ZWQwOWViZmZjM2NmIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaApAQCAtMjM2MSw3ICYjNDM7MjM2MSw3IEBAIHZvaWQgYnJfZG9fcHJveHlfc3VwcHJlc3NfYXJwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfYnJpZGdlICpiciwKIAkJCSAgICAgIHUxNiB2aWQsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApOwogdm9pZCBicl9kb19zdXBwcmVzc19uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCiAJCSAgICAgICB1MTYgdmlkLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3QgbmRfbXNnICptc2cpOwotc3RydWN0IG5kX21zZyAqYnJfaXNfbmRfbmVpZ2hfbXNnKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZF9tc2cgKm0pOwomIzQzO3N0cnVjdCBuZF9tc2cgKmJyX2lzX25kX25laWdoX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGJvb2wgYnJfaXNfbmVpZ2hfc3VwcHJlc3NfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgdmlkKTsKIGJvb2wgYnJfaXNfbmVpZ2hfZm9yd2FyZF9ncmF0X2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IHZpZCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9pcHY2L01ha2VmaWxlIGIvbmV0L2lwdjYvTWFrZWZpbGUKaW5kZXggNWIwY2Q2NDg4MDIxMjQuLmNmNWUwMWY4M2NlM2QwIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9NYWtlZmlsZQpAQCAtNTEsNyAmIzQzOzUxLDcgQEAgb2JqLSQoc3Vic3QgbSx5LCQoQ09ORklHX0lQVjYpKSAmIzQzOz0gaW5ldDZfaGFzaHRhYmxlcy5vCiAKIGlmbmVxICgkKENPTkZJR19JUFY2KSwpCiBvYmotJChDT05GSUdfTkVUX1VEUF9UVU5ORUwpICYjNDM7PSBpcDZfdWRwX3R1bm5lbC5vCi1vYmoteSAmIzQzOz0gbWNhc3Rfc25vb3AubwomIzQzO29iai15ICYjNDM7PSBtY2FzdF9zbm9vcC5vIG5kaXNjX3Nub29wLm8KIG9iai0kKENPTkZJR19UQ1BfQU8pICYjNDM7PSB0Y3BfYW8ubwogZW5kaWYKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmMKaW5kZXggZjg2N2VjOGQzZDkwNTEuLmQ4YjQ1ODhmNmJmZjkyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZGlzYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25kaXNjLmMKQEAgLTI4Myw2ICYjNDM7MjgzLDcgQEAgc3RydWN0IG5kaXNjX29wdGlvbnMgKm5kaXNjX3BhcnNlX29wdGlvbnMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAl9CiAJcmV0dXJuIG5kb3B0czsKIH0KJiM0MztFWFBPUlRfU1lNQk9MKG5kaXNjX3BhcnNlX29wdGlvbnMpOwogCiBpbnQgbmRpc2NfbWNfbWFwKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgY2hhciAqYnVmLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGlyKQogewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2Nfc25vb3AuYyBiL25ldC9pcHY2L25kaXNjX3Nub29wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmE5M2VlZDI3YTFmNmQ3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmRpc2Nfc25vb3AuYwpAQCAtMCwwICYjNDM7MSwxOTAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvYWRkcmNvbmYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2lwNl9jaGVja3N1bS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvaXB2Ni5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvbmRpc2MuaCZndDsKJiM0MzsKJiM0MztzdGF0aWMgaW50IG5kaXNjX2NoZWNrX2lwNmhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNmg7CiYjNDM7CXVuc2lnbmVkIGludCBvZmZzZXQsIGxlbjsKJiM0MzsKJiM0MzsJb2Zmc2V0ID0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikgJiM0Mzsgc2l6ZW9mKCppcDZoKTsKJiM0MzsJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgb2Zmc2V0KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpcDZoID0gaXB2Nl9oZHIoc2tiKTsKJiM0MzsKJiM0MzsJaWYgKGlwNmgtJmd0O3ZlcnNpb24gIT0gNikKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoaXA2aC0mZ3Q7bmV4dGhkciAhPSBJUFBST1RPX0lDTVBWNikKJiM0MzsJCXJldHVybiAtRU5PTVNHOwomIzQzOwomIzQzOwkvKiBSRkMgNDg2MSA3LjEuMSAvIDcuMS4yOiBtdXN0IG5vdCBoYXZlIGJlZW4gZm9yd2FyZGVkIGJ5IGEgcm91dGVyICovCiYjNDM7CWlmIChpcDZoLSZndDtob3BfbGltaXQgIT0gMjU1KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWxlbiA9IG9mZnNldCAmIzQzOyBudG9ocyhpcDZoLSZndDtwYXlsb2FkX2xlbik7CiYjNDM7CWlmIChza2ItJmd0O2xlbiAmbHQ7IGxlbiB8fCBsZW4gJmx0Oz0gb2Zmc2V0KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIG9mZnNldCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19zdW0xNiBuZGlzY192YWxpZGF0ZV9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJcmV0dXJuIHNrYl9jaGVja3N1bV92YWxpZGF0ZShza2IsIElQUFJPVE9fSUNNUFY2LCBpcDZfY29tcHV0ZV9wc2V1ZG8pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG5kaXNjX2NoZWNrX2ljbXB2NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGxlbiA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpY21wNmhkcik7CiYjNDM7CXVuc2lnbmVkIGludCB0cmFuc3BvcnRfbGVuID0gaXB2Nl90cmFuc3BvcnRfbGVuKHNrYik7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2JfY2hrOwomIzQzOwlzdHJ1Y3QgaWNtcDZoZHIgKmhkcjsKJiM0MzsKJiM0MzsJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgbGVuKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkvKiBSRkMgNDg2MSA3LjEuMSAvIDcuMS4yOiB0aGUgSUNNUHY2IGNoZWNrc3VtIG11c3QgYmUgdmFsaWQgKi8KJiM0MzsJc2tiX2NoayA9IHNrYl9jaGVja3N1bV90cmltbWVkKHNrYiwgdHJhbnNwb3J0X2xlbiwKJiM0MzsJCQkJICAgICAgIG5kaXNjX3ZhbGlkYXRlX2NoZWNrc3VtKTsKJiM0MzsJaWYgKCFza2JfY2hrKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChza2JfY2hrICE9IHNrYikKJiM0MzsJCWtmcmVlX3NrYihza2JfY2hrKTsKJiM0MzsKJiM0MzsJLyogUkZDIDQ4NjEgNy4xLjEgLyA3LjEuMjogQ29kZSBtdXN0IGJlIDAgKi8KJiM0MzsJaGRyID0gKHN0cnVjdCBpY21wNmhkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiYjNDM7CWlmIChoZHItJmd0O2ljbXA2X2NvZGUgIT0gMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBuZGlzY19jaGVja19vcHRpb25zKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBvcHRzX2xlbiwKJiM0MzsJCQkgICAgICAgYm9vbCByZWplY3Rfc2xsYSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBvZmZzZXQgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICYjNDM7IHNpemVvZihzdHJ1Y3QgbmRfbXNnKTsKJiM0MzsJc3RydWN0IG5kX29wdF9oZHIgKm9wdCwgX29wdDsKJiM0MzsKJiM0MzsJd2hpbGUgKG9wdHNfbGVuICZndDsgMCkgewomIzQzOwkJaWYgKG9wdHNfbGVuICZsdDsgc2l6ZW9mKCpvcHQpKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJb3B0ID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX29wdCksICZhbXA7X29wdCk7CiYjNDM7CQlpZiAoIW9wdCkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCS8qIFJGQyA0ODYxIDcuMS4xIC8gNy4xLjI6IGFsbCBvcHRpb24gbGVuZ3RocyBtdXN0IGJlICZndDsgMCAqLwomIzQzOwkJaWYgKCFvcHQtJmd0O25kX29wdF9sZW4pCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQkvKiBSRkMgNDg2MSA3LjEuMTogREFEIE5TIG11c3Qgbm90IGNvbnRhaW4gYSBzb3VyY2UgbGluay1sYXllcgomIzQzOwkJICogYWRkcmVzcyBvcHRpb24KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHJlamVjdF9zbGxhICZhbXA7JmFtcDsgb3B0LSZndDtuZF9vcHRfdHlwZSA9PSBORF9PUFRfU09VUkNFX0xMX0FERFIpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQlpZiAob3B0LSZndDtuZF9vcHRfbGVuICogOCAmZ3Q7IG9wdHNfbGVuKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJb2Zmc2V0ICYjNDM7PSBvcHQtJmd0O25kX29wdF9sZW4gKiA4OwomIzQzOwkJb3B0c19sZW4gLT0gb3B0LSZndDtuZF9vcHRfbGVuICogODsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBuZGlzY19jaGVja19uZF9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBsZW4gPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICYjNDM7IHNpemVvZihzdHJ1Y3QgbmRfbXNnKTsKJiM0MzsJdW5zaWduZWQgaW50IHRyYW5zcG9ydF9sZW4gPSBpcHY2X3RyYW5zcG9ydF9sZW4oc2tiKTsKJiM0MzsJYm9vbCByZWplY3Rfc2xsYSA9IGZhbHNlOwomIzQzOwljb25zdCBzdHJ1Y3QgbmRfbXNnICptc2c7CiYjNDM7CiYjNDM7CWlmICghcHNrYl9tYXlfcHVsbChza2IsIGxlbikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJLyogUkZDIDQ4NjEgNy4xLjEgLyA3LjEuMjogSUNNUCBsZW5ndGggaXMgYXQgbGVhc3Qgc2l6ZW9mKG5kX21zZykgKi8KJiM0MzsJaWYgKHRyYW5zcG9ydF9sZW4gJmx0OyBzaXplb2Yoc3RydWN0IG5kX21zZykpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJbXNnID0gKHN0cnVjdCBuZF9tc2cgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpOwomIzQzOwomIzQzOwkvKiBSRkMgNDg2MSA3LjEuMSAvIDcuMS4yOiBUYXJnZXQgQWRkcmVzcyBtdXN0IG5vdCBiZSBhCiYjNDM7CSAqIG11bHRpY2FzdCBhZGRyZXNzCiYjNDM7CSAqLwomIzQzOwlpZiAoaXB2Nl9hZGRyX2lzX211bHRpY2FzdCgmYW1wO21zZy0mZ3Q7dGFyZ2V0KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlzd2l0Y2ggKG1zZy0mZ3Q7aWNtcGguaWNtcDZfdHlwZSkgewomIzQzOwljYXNlIE5ESVNDX05FSUdIQk9VUl9TT0xJQ0lUQVRJT046CiYjNDM7CQlpZiAoaXB2Nl9hZGRyX2FueSgmYW1wO2lwdjZfaGRyKHNrYiktJmd0O3NhZGRyKSkgewomIzQzOwkJCS8qIFJGQyA0ODYxIDcuMS4xOiBEQUQgTlMgZGVzdGluYXRpb24gbXVzdCBiZSBhCiYjNDM7CQkJICogc29saWNpdGVkLW5vZGUgbXVsdGljYXN0IGFkZHJlc3MKJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoIWlwdjZfYWRkcl9pc19zb2xpY3RfbXVsdCgmYW1wO2lwdjZfaGRyKHNrYiktJmd0O2RhZGRyKSkKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJLyogUkZDIDQ4NjEgNy4xLjE6IERBRCBOUyBtdXN0IG5vdCBjb250YWluIGEgc291cmNlCiYjNDM7CQkJICogbGluay1sYXllciBhZGRyZXNzIG9wdGlvbgomIzQzOwkJCSAqLwomIzQzOwkJCXJlamVjdF9zbGxhID0gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE5ESVNDX05FSUdIQk9VUl9BRFZFUlRJU0VNRU5UOgomIzQzOwkJLyogUkZDIDQ4NjEgNy4xLjI6IFNvbGljaXRlZCBmbGFnIG11c3QgYmUgMCBmb3IKJiM0MzsJCSAqIG11bHRpY2FzdCBkZXN0aW5hdGlvbnMKJiM0MzsJCSAqLwomIzQzOwkJaWYgKGlwdjZfYWRkcl9pc19tdWx0aWNhc3QoJmFtcDtpcHY2X2hkcihza2IpLSZndDtkYWRkcikgJmFtcDsmYW1wOwomIzQzOwkJICAgIG1zZy0mZ3Q7aWNtcGguaWNtcDZfc29saWNpdGVkKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVOT0RBVEE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIG5kaXNjX2NoZWNrX29wdGlvbnMoc2tiLCB0cmFuc3BvcnRfbGVuIC0gc2l6ZW9mKHN0cnVjdCBuZF9tc2cpLAomIzQzOwkJCQkgICByZWplY3Rfc2xsYSk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIG5kaXNjX2NoZWNrX25zX25hIC0gdmFsaWRhdGUgYW4gTlMvTkEgcGFja2V0IGFuZCBzZXQgaXRzIHRyYW5zcG9ydCBoZWFkZXIKJiM0MzsgKiBAc2tiOiB0aGUgc2tiIHRvIHZhbGlkYXRlCiYjNDM7ICoKJiM0MzsgKiBWYWxpZGF0ZXMgYW4gSVB2NiBwYWNrZXQgZm9yIGNvbXBsaWFuY2Ugd2l0aCBSRkMgNDg2MSBzZWN0aW9ucyA3LjEuMQomIzQzOyAqIChOZWlnaGJvciBTb2xpY2l0YXRpb24pIGFuZCA3LjEuMiAoTmVpZ2hib3IgQWR2ZXJ0aXNlbWVudCkuIElmIHZhbGlkLAomIzQzOyAqIHNldHMgdGhlIHNrYiB0cmFuc3BvcnQgaGVhZGVyLgomIzQzOyAqCiYjNDM7ICogQ2FsbGVyIG5lZWRzIHRvIHNldCB0aGUgc2tiIG5ldHdvcmsgaGVhZGVyLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogMCAgICAgICAgLSB2YWxpZCBOUy9OQTsgdGhlIHNrYiB0cmFuc3BvcnQgaGVhZGVyIGhhcyBiZWVuIHNldC4KJiM0MzsgKiAqIC1FSU5WQUwgIC0gYSBicm9rZW4gcGFja2V0IHdhcyBkZXRlY3RlZCwgaS5lLiBpdCB2aW9sYXRlcyBzb21lCiYjNDM7ICogICAgICAgICAgICAgIGludGVybmV0IHN0YW5kYXJkLgomIzQzOyAqICogLUVOT01TRyAgLSBJUCBoZWFkZXIgdmFsaWRhdGlvbiBzdWNjZWVkZWQgYnV0IGl0IGlzIG5vdCBhbiBJQ01QdjYKJiM0MzsgKiAgICAgICAgICAgICAgcGFja2V0LgomIzQzOyAqICogLUVOT0RBVEEgLSBJUCYjNDM7SUNNUHY2IGhlYWRlciB2YWxpZGF0aW9uIHN1Y2NlZWRlZCBidXQgaXQgaXMgbm90IGEKJiM0MzsgKiAgICAgICAgICAgICAgTmVpZ2hib3IgU29saWNpdGF0aW9uIG9yIE5laWdoYm9yIEFkdmVydGlzZW1lbnQuCiYjNDM7ICovCiYjNDM7aW50IG5kaXNjX2NoZWNrX25zX25hKHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBuZGlzY19jaGVja19pcDZoZHIoc2tiKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBuZGlzY19jaGVja19pY21wdjYoc2tiKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gbmRpc2NfY2hlY2tfbmRfbXNnKHNrYik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wobmRpc2NfY2hlY2tfbnNfbmEpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAxNDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjczCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIElQdjYgTmVpZ2hib3IgRGlzY292ZXJ5IFNub29waW5nIENvZGUqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIG1ha2luZyBjaGFuZ2VzIGFjcm9zcyBzZXZlcmFsIGZpbGVzIHJlbGF0ZWQgdG8gYnJpZGdpbmcgYW5kIElQdjYgbmVpZ2hib3IgZGlzY292ZXJ5LiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHRvdWNoaW5nIGBuZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jYCwgYG5ldC9icmlkZ2UvYnJfZGV2aWNlLmNgLCBgbmV0L2JyaWRnZS9icl9pbnB1dC5jYCwgYG5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oYCwgYG5ldC9pcHY2L01ha2VmaWxlYCwgYG5ldC9pcHY2L25kaXNjLmNgLCBhbmQgaW1wb3J0YW50bHksICphZGRzKiBhIG5ldyBmaWxlIGBuZXQvaXB2Ni9uZGlzY19zbm9vcC5jYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBuZXcgZnVuY3Rpb25hbGl0eSwgYW5kIHdpdGggdGhlIGNoYW5nZXMgdG8gdGhlIGV4aXN0aW5nIGZpbGVzIEkgY2FuIGFzc3VtZSB0aGlzIGlzIGEgcHJldHR5IHRob3JvdWdoIHJld29yayBvZiB0aGUgd2F5IGJyaWRnZSBkZXZpY2VzIGhhbmRsZSBJUHY2IE5EIHBhY2tldHMuCgpUaGUgcGF0Y2ggc2VlbXMgdG8gaW50cm9kdWNlIGEgbmV3IHZhbGlkYXRpb24gZnVuY3Rpb24sIGBuZGlzY19jaGVja19uc19uYWAsIHdoaWNoLCBiYXNlZCBvbiB0aGUgbmFtZSwgaXMgbWVhbnQgdG8gdmFsaWRhdGUgSVB2NiBOZWlnaGJvciBTb2xpY2l0YXRpb24gYW5kIE5laWdoYm9yIEFkdmVydGlzZW1lbnQgcGFja2V0cy4gRnVydGhlcm1vcmUsIHRoZSBvbGQgYGJyX2lzX25kX25laWdoX21zZ2AgbG9naWMgaXMgcmVwbGFjZWQgYnkgdGhpcyBuZXcgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbiBgbmRpc2NfcGFyc2Vfb3B0aW9uc2AgaXMgYWxzbyBiZWluZyBleHBvcnRlZCwgYW5kIHVzZWQgaW4gYGJyX25kX3NlbmRgLgoKVGhpcyBpcyBhbGwgZnVuY3Rpb25hbCBjb2RlLCBpdCYjMzk7cyByZWFjaGFibGUgdmlhIGJyaWRnZSBkZXZpY2VzLCBhbmQgSVB2NiBORCBwYWNrZXRzLiBMb29rcyBsaWtlIGEgZ3JlYXQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgZmFjdCB0aGF0IHRoZXkmIzM5O3ZlIHJlcGxhY2VkIGEgcHJldmlvdXMgYmxvY2sgb2YgY29kZSBpcyBhIGdyZWVuIGxpZ2h0IHRvIHN0YXJ0LgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gVGhlIG5ldyBjb2RlIGlzIGluIGBuZXQvaXB2Ni9uZGlzY19zbm9vcC5jYCwgYW5kIHRoYXQmIzM5O3MgY29tcGlsZWQgaWYgYENPTkZJR19JUFY2YCBpcyBlbmFibGVkLiBMZXQmIzM5O3MgbWFrZSBzdXJlLCBsb29raW5nIGF0IGBuZXQvaXB2Ni9NYWtlZmlsZWA6CgpgYGBtYWtlZmlsZQppZm5lcSAoJChDT05GSUdfSVBWNiksKQpvYmoteSAmIzQzOz0gbWNhc3Rfc25vb3AubyBuZGlzY19zbm9vcC5vCmBgYAoKWWVwLCBgbmRpc2Nfc25vb3Aub2AgaXMgYmVpbmcgaW5jbHVkZWQgd2hlbiBgQ09ORklHX0lQVjZgIGlzIHNldC4KCkJ1dCB3aGF0IGFib3V0IHRoZSBicmlkZ2Ugc2lkZT8gVGhlIGNoYW5nZXMgdG8gYGJyX2FycF9uZF9wcm94eS5jYCBhcmUga2V5LiBMb29raW5nIGF0IHRoYXQgZmlsZSwgSSBzZWUgYCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KWAgYXJvdW5kIHRoZSBORCBwcm94eSBsb2dpYy4gVGhhdCBtZWFucyB3ZSBhYnNvbHV0ZWx5IG5lZWQgYENPTkZJR19CUklER0VgICphbmQqIGBDT05GSUdfSVBWNmAgZW5hYmxlZC4KClRvIGJlIGV4dHJhIGNlcnRhaW4sIEkgc2hvdWxkIGNoZWNrIHRoZSBNYWtlZmlsZSBpbiBgbmV0L2JyaWRnZWAgdG8gbWFrZSBzdXJlIGBicl9hcnBfbmRfcHJveHkuY2AgaXMgY29tcGlsZWQgY29uZGl0aW9uYWxseS4gSSYjMzk7bGwganVzdCB1c2UgYHJlYWQtZmlsZWAgb24gYG5ldC9icmlkZ2UvTWFrZWZpbGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDE0OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIHRoZSBJRUVFIDgwMi4xZCBldGhlcm5ldCBicmlkZ2luZyBsYXllci5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0b2JqLSQoQ09ORklHX0JSSURHRSkgJiM0Mzs9IGJyaWRnZS5vXG4gICA3Olx0XG4gICA4Olx0YnJpZGdlLXlcdDo9IGJyLm8gYnJfZGV2aWNlLm8gYnJfZmRiLm8gYnJfZm9yd2FyZC5vIGJyX2lmLm8gYnJfaW5wdXQubyBcXFxuICAgOTpcdFx0XHRcdGJyX2lvY3RsLm8gYnJfc3RwLm8gYnJfc3RwX2JwZHUubyBcXFxuICAxMDpcdFx0XHRcdGJyX3N0cF9pZi5vIGJyX3N0cF90aW1lci5vIGJyX25ldGxpbmsubyBcXFxuICAxMTpcdFx0XHRcdGJyX25ldGxpbmtfdHVubmVsLm8gYnJfYXJwX25kX3Byb3h5Lm9cbiAgMTI6XHRcbiAgMTM6XHRicmlkZ2UtJChDT05GSUdfU1lTRlMpICYjNDM7PSBicl9zeXNmc19pZi5vIGJyX3N5c2ZzX2JyLm9cbiAgMTQ6XHRcbiAgMTU6XHRicmlkZ2UtJChzdWJzdCBtLHksJChDT05GSUdfQlJJREdFX05FVEZJTFRFUikpICYjNDM7PSBicl9uZl9jb3JlLm9cbiAgMTY6XHRcbiAgMTc6XHRicl9uZXRmaWx0ZXIteSA6PSBicl9uZXRmaWx0ZXJfaG9va3Mub1xuICAxODpcdGJyX25ldGZpbHRlci0kKHN1YnN0IG0seSwkKENPTkZJR19JUFY2KSkgJiM0Mzs9IGJyX25ldGZpbHRlcl9pcHY2Lm9cbiAgMTk6XHRvYmotJChDT05GSUdfQlJJREdFX05FVEZJTFRFUikgJiM0Mzs9IGJyX25ldGZpbHRlci5vXG4gIDIwOlx0XG4gIDIxOlx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HKSAmIzQzOz0gYnJfbXVsdGljYXN0Lm8gYnJfbWRiLm8gYnJfbXVsdGljYXN0X2VodC5vXG4gIDIyOlx0XG4gIDIzOlx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklORykgJiM0Mzs9IGJyX3ZsYW4ubyBicl92bGFuX3R1bm5lbC5vIGJyX3ZsYW5fb3B0aW9ucy5vIGJyX21zdC5vXG4gIDI0Olx0XG4gIDI1Olx0YnJpZGdlLSQoQ09ORklHX05FVF9TV0lUQ0hERVYpICYjNDM7PSBicl9zd2l0Y2hkZXYub1xuICAyNjpcdFxuICAyNzpcdG9iai0kKENPTkZJR19ORVRGSUxURVIpICYjNDM7PSBuZXRmaWx0ZXIvXG4gIDI4Olx0XG4gIDI5Olx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9NUlApXHQmIzQzOz0gYnJfbXJwX3N3aXRjaGRldi5vIGJyX21ycC5vIGJyX21ycF9uZXRsaW5rLm9cbiAgMzA6XHRcbiAgMzE6XHRicmlkZ2UtJChDT05GSUdfQlJJREdFX0NGTSlcdCYjNDM7PSBicl9jZm0ubyBicl9jZm1fbmV0bGluay5vXG4gIDMyOlx0XG4gIDMzOlx0aWZkZWYgQ09ORklHX0dDT1ZfUFJPRklMRV9ORVRGSUxURVJcbiAgMzQ6XHRHQ09WX1BST0ZJTEVfYnJfbmZfY29yZS5vIDo9IHlcbiAgMzU6XHRHQ09WX1BST0ZJTEVfYnJfbmV0ZmlsdGVyX2hvb2tzLm8gOj0geVxuICAzNjpcdEdDT1ZfUFJPRklMRV9icl9uZXRmaWx0ZXJfaXB2Ni5vIDo9IHlcbiAgMzc6XHRlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDE0OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzODMKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA0NjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgTkQgUHJveHlpbmcgaW4gQnJpZGdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGJyX2FycF9uZF9wcm94eS5vYCBpcyBhbHdheXMgYnVpbHQgd2hlbiBgQ09ORklHX0JSSURHRWAgaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBzZW5zZS4gRGl2aW5nIGludG8gYGJyX2FycF9uZF9wcm94eS5jYCwgSSBzZWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gd2l0aCBgI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpYCBmb3IgdGhlIE5EIHByb3h5IGZ1bmN0aW9uYWxpdHkuIFRoZXJlZm9yZSwgd2UgY2xlYXJseSBuZWVkIGJvdGggYEJSSURHRWAgYW5kIGBJUFY2YCBjb25maWd1cmVkIGZvciB0aGlzIHRvIHdvcmsgYXMgaW50ZW5kZWQuCgpOb3csIGxldCYjMzk7cyB6b29tIGluIG9uIHRoZSByZWxldmFudCBzeW1ib2xzLiBJIGhhZCBhIGxpc3Qgc3RhcnRpbmcgd2l0aCBgbmRpc2NfY2hlY2tfbnNfbmFgLCBgYnJfaXNfbmRfbmVpZ2hfbXNnYCwgYGJyX25kX3NlbmRgLCBgbmRpc2NfY2hlY2tfaXA2aGRyYCwgYG5kaXNjX2NoZWNrX2ljbXB2NmAsIGBuZGlzY19jaGVja19vcHRpb25zYCwgYW5kIGBuZGlzY19jaGVja19uZF9tc2dgLiBIb3dldmVyLCB3YWl0IGEgbWludXRlLi4uIEkgbm93IHJlY2FsbCB0aGF0IHRoZSBgbmRpc2NfY2hlY2tfKmAgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYG5kaXNjX2NoZWNrX2lwNmhkcmAsIGBuZGlzY19jaGVja19pY21wdjZgLCBgbmRpc2NfY2hlY2tfb3B0aW9uc2AsIGFuZCBgbmRpc2NfY2hlY2tfbmRfbXNnYCBhcmUgYWxsIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBuZXQvaXB2Ni9uZGlzY19zbm9vcC5jYC4gU28gdGhleSBhcmVuJiMzOTt0IHBhcnQgb2YgdGhlIGV4cG9zZWQgaW50ZXJmYWNlLiBUaGVyZWZvcmUsIEkgY2FuIHNhZmVseSByZW1vdmUgdGhlbSBmcm9tIHRoZSBsaXN0LCBiZWNhdXNlIHRoZXkgYXJlIG5vdCBleHRlcm5hbGx5IGxpbmtlZC4KCkkgKmNhbiogbGlzdCBgbmRpc2NfY2hlY2tfbnNfbmFgIGJlY2F1c2UgdGhhdCYjMzk7cyBleHBvcnRlZC4gQWxzbywgYGJyX2lzX25kX25laWdoX21zZ2AgYW5kIGBicl9uZF9zZW5kYCBhcmUgbG9jYXRlZCBpbiBgbmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuY2AsIHNvIHRob3NlIGFyZSByZWxldmFudCBhcyB3ZWxsLgoKVG8gdmVyaWZ5IG15IGFzc3VtcHRpb25zLCBsZXQgbWUgcmVjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGhlIHBhdGNoIGFsdGVycyBgbmV0L2lwdjYvbmRpc2Nfc25vb3AuY2AsIHdoaWNoLCBhcyB3ZSBrbm93LCByZXF1aXJlcyBgQ09ORklHX0lQVjZgLiBBZGRpdGlvbmFsbHksIHRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBuZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jYCwgYW5kIHRoYXQgb2J2aW91c2x5IGRlbWFuZHMgYENPTkZJR19CUklER0VgLiBTbywgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IHN0YW5kczogYEJSSURHRWAgYW5kIGBJUFY2YCBhcmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4KCkxldCYjMzk7cyBjaGVjayB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlcyBmb3IgYSBzZWNvbmQuIGBicl9uZF9zZW5kYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGdvb2QgdG8ga25vdywgYW5kIGBicl9pc19uZF9uZWlnaF9tc2dgIGlzIG5vdCBzdGF0aWMuIFRoYXQmIzM5O3MgYSBnb29kIGRpc3RpbmN0aW9uIHRvIG1ha2UuIGBuZGlzY19jaGVja19uc19uYWAgaXMgZGVmaW5pdGVseSBleHBvcnRlZC4KClRoZXJlZm9yZSwgZm9yIHRoaXMgcGFydGljdWxhciBhbmFseXNpcywgSSB3aWxsIGxpc3Qgb25seSB0aGUgZm9sbG93aW5nIHRocmVlIHN5bWJvbHM6CgoqICAgYG5kaXNjX2NoZWNrX25zX25hYAoqICAgYGJyX2lzX25kX25laWdoX21zZ2AKKiAgIGBicl9uZF9zZW5kYAoKRmluYWxseSwgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgYnJfaXNfbmRfbmVpZ2hfbXNnYCBpc24mIzM5O3QgY2FsbGVkIGZyb20gYW55d2hlcmUgdW5leHBlY3RlZC4gVGhhdCYjMzk7cyBhbHdheXMgYSBnb29kIHByYWN0aWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDE0OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX2lzX25kX25laWdoX21zZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jPTEyNT12b2lkIGJyX2RvX3Byb3h5X3N1cHByZXNzX2FycChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy0yMzctI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jOjIzODpzdHJ1Y3QgbmRfbXNnICpicl9pc19uZF9uZWlnaF9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMjM5LXtcbi0tXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTMwPW5ldGRldl90eF90IGJyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy04NC1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6ODU6XHRcdFx0bXNnID0gYnJfaXNfbmRfbmVpZ2hfbXNnKHNrYik7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTg2LVx0XHRcdGlmIChtc2cpXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTc2PWludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0xODAtXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MTgxOlx0XHRcdG1zZyA9IGJyX2lzX25kX25laWdoX21zZyhza2IpO1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTE4Mi1cdFx0XHRpZiAobXNnKVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTIzNjI9dm9pZCBicl9kb19zdXBwcmVzc19uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMzYzLVx0XHQgICAgICAgdTE2IHZpZCwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IG5kX21zZyAqbXNnKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjIzNjQ6c3RydWN0IG5kX21zZyAqYnJfaXNfbmRfbmVpZ2hfbXNnKHN0cnVjdCBza19idWZmICpza2IpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjM2NS1ib29sIGJyX2lzX25laWdoX3N1cHByZXNzX2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IHZpZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMTQ6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMzQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFJlYWNoYWJpbGl0eSBpbiB0aGUgQnJpZGdpbmcgQ29kZSoqCgpBbHJpZ2h0LCBzbyB0aGUgY2FsbCBzdGFjayBoYXMgbGVkIG1lIGhlcmUuIEl0JiMzOTtzIGNvbmZpcm1lZDogdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uLCB0aGF0JiMzOTtzIGl0LCBJIHNlZSwgSSYjMzk7dmUgZ290IGl0LiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBib3RoIGBicl9kZXZfeG1pdGAgYW5kIGBicl9oYW5kbGVfZnJhbWVfZmluaXNoYC4gR29vZCwgdGhhdCBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIG9mIHdoZXJlIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyB1dGlsaXplZC4gV2UmIzM5O3ZlIGdvdCBhIGRlZmluaXRlIHBhdGgsIHdoaWNoIG1lYW5zIHRoaXMgY29kZSBwYXRoIGlzIGRlZmluaXRlbHkgbGl2ZS4KCk5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIHRvIHVuZGVyc3RhbmQgdGhpcyBpbnRlcmFjdGlvbiBpcyB0byBleGFtaW5lIHRoZSBgYnJfbmRfc2VuZGAgZnVuY3Rpb24uIEkgd2lsbCBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gdG8gY29uZmlybSBpdHMgb3BlcmF0aW9uIGFuZCBpbnRlcmFjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAxNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl9uZF9zZW5kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM9MjM4PXN0cnVjdCBuZF9tc2cgKmJyX2lzX25kX25laWdoX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMjQ4LVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzoyNDk6c3RhdGljIHZvaWQgYnJfbmRfc2VuZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTI1MC1cdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpyZXF1ZXN0LCBzdHJ1Y3QgbmVpZ2hib3VyICpuLFxuLS1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM9NDEwPXZvaWQgYnJfZG9fc3VwcHJlc3NfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtNDgzLVx0XHRcdFx0aWYgKHZpZCAhPSAwKVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzo0ODQ6XHRcdFx0XHRcdGJyX25kX3NlbmQoYnIsIHAsIHNrYiwgbixcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtNDg1LVx0XHRcdFx0XHRcdCAgIHNrYi1cdTAwM2V2bGFuX3Byb3RvLFxuLS1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtNDg3LVx0XHRcdFx0ZWxzZVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzo0ODg6XHRcdFx0XHRcdGJyX25kX3NlbmQoYnIsIHAsIHNrYiwgbiwgMCwgMCk7XG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTQ4OS1cdFx0XHRcdHJlcGxpZWQgPSB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDE0OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjMyCgkJCQkJCQlvdXRwdXQ6IDEyNgoJCQkJCQkJdGhvdWdodHM6IDIwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFJhdGlvbmFsZTogSVB2NiBOZWlnaGJvciBEaXNjb3ZlcnkgU25vb3BpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyBiZWVuIHRyaWdnZXJlZCBieSBgYnJfZG9fc3VwcHJlc3NfbmRgLiBJIHNlZSBpdCBpbnRyb2R1Y2VzIGBuZXQvaXB2Ni9uZGlzY19zbm9vcC5jYCB3aGljaCBpbmNsdWRlcyB0aGUgbmV3IGZ1bmN0aW9uIGBuZGlzY19jaGVja19uc19uYWAuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IGl0JiMzOTtzIGEgZGVkaWNhdGVkIHZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIElQdjYgTmVpZ2hib3IgU29saWNpdGF0aW9uIChOUykgYW5kIEFkdmVydGlzZW1lbnQgKE5BKSBwYWNrZXRzLiBUaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBicl9pc19uZF9uZWlnaF9tc2dgIGFuZCBgYnJfbmRfc2VuZGAgaW4gYG5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmNgLCBzbyBpdCYjMzk7cyBpbnRlZ3JhdGluZyB0aGlzIG5ldyB2YWxpZGF0aW9uIGxvZ2ljIGludG8gdGhlIGJyaWRnZSBORCBwcm94eS4KCkdpdmVuIHRoYXQgdGhpcyBpbnZvbHZlcyBuZXcsIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQmIzM5O3MgZ29pbmcgdG8gYmUgaGFuZGxpbmcgcG90ZW50aWFsbHkgdW50cnVzdGVkIG5ldHdvcmsgdHJhZmZpYywgbXkgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgKmRlZmluaXRlbHkqIFdvcnRoRnV6emluZy4gVGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZSBpcyBjbGVhcjogbWFsZm9ybWVkIE5TL05BIHBhY2tldHMgY291bGQgbGVhZCB0byB2YXJpb3VzIGlzc3Vlcy4gTXkgZm9jdXMgd2lsbCBiZSBvbiBgbmRpc2NfY2hlY2tfbnNfbmFgLCBgYnJfaXNfbmRfbmVpZ2hfbXNnYCwgYW5kIGBicl9uZF9zZW5kYC4gVGhlIGZ1enppbmcgY29uZmlndXJhdGlvbiByZXF1aXJlcyB0aGF0IGJvdGggYEJSSURHRWAgYW5kIGBJUFY2YCBhcmUgZW5hYmxlZCwgZ2l2ZW4gdGhlIGZ1bmN0aW9uYWwgc2NvcGUgb2YgdGhlIHBhdGNoIGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBuZXR3b3JrIHByb3RvY29scy4gSXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIGZpbmRpbmcgc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGVycm9ycyByZWxhdGVkIHRvIElQdjYgTkQgcHJveHkgYmVoYXZpb3VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAxNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZGlzY19jaGVja19uc19uYSYjMzQ7LAogICAgJiMzNDticl9pc19uZF9uZWlnaF9tc2cmIzM0OywKICAgICYjMzQ7YnJfbmRfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBuZGlzY19jaGVja19uc19uYWAgdG8gdmFsaWRhdGUgSVB2NiBOZWlnaGJvciBTb2xpY2l0YXRpb24gYW5kIEFkdmVydGlzZW1lbnQgcGFja2V0cywgYW5kIHVwZGF0ZXMgdGhlIGJyaWRnZSBORCBwcm94eSBjb2RlIHRvIHVzZSBpdC4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHByb2Nlc3NlcyB1bnRydXN0ZWQgbmV0d29yayBwYWNrZXRzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25kaXNjX2NoZWNrX25zX25hJiMzNDssCiAgICAmIzM0O2JyX2lzX25kX25laWdoX21zZyYjMzQ7LAogICAgJiMzNDticl9uZF9zZW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYG5kaXNjX2NoZWNrX25zX25hYCB0byB2YWxpZGF0ZSBJUHY2IE5laWdoYm9yIFNvbGljaXRhdGlvbiBhbmQgQWR2ZXJ0aXNlbWVudCBwYWNrZXRzLCBhbmQgdXBkYXRlcyB0aGUgYnJpZGdlIE5EIHByb3h5IGNvZGUgdG8gdXNlIGl0LiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgcHJvY2Vzc2VzIHVudHJ1c3RlZCBuZXR3b3JrIHBhY2tldHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxNDoxOToyNS41NzQ0ODgwNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMTc3NzkwNDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5kaXNjX2NoZWNrX25zX25hXCIsXG4gICAgXCJicl9pc19uZF9uZWlnaF9tc2dcIixcbiAgICBcImJyX25kX3NlbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBuZGlzY19jaGVja19uc19uYWAgdG8gdmFsaWRhdGUgSVB2NiBOZWlnaGJvciBTb2xpY2l0YXRpb24gYW5kIEFkdmVydGlzZW1lbnQgcGFja2V0cywgYW5kIHVwZGF0ZXMgdGhlIGJyaWRnZSBORCBwcm94eSBjb2RlIHRvIHVzZSBpdC4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHByb2Nlc3NlcyB1bnRydXN0ZWQgbmV0d29yayBwYWNrZXRzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxNDoxOToyNS41NzQ0OTM3OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY5NzYyODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGVlZWE2MjE4MjUyNzNhZWI1OTZmYjIyMTZlZTRhMWQwNTQyYjNiMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCAxOSAxNDoxOToyMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZGlzYy5oIGIvaW5jbHVkZS9uZXQvbmRpc2MuaFxcbmluZGV4IDNkYTFhNmY4ZDNmOTIwLi45ZTUzNzlhZDJkOGUwMCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9uZGlzYy5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbmRpc2MuaFxcbkBAIC00MzAsNiArNDMwLDggQEAgdm9pZCBuZGlzY191cGRhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsXFxuIFxcdFxcdCAgY29uc3QgdTggKmxsYWRkciwgdTggbmV3LCB1MzIgZmxhZ3MsIHU4IGljbXA2X3R5cGUsXFxuIFxcdFxcdCAgc3RydWN0IG5kaXNjX29wdGlvbnMgKm5kb3B0cyk7XFxuIFxcbitpbnQgbmRpc2NfY2hlY2tfbnNfbmEoc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuK1xcbiAvKlxcbiAgKlxcdElHTVBcXG4gICovXFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMgYi9uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jXFxuaW5kZXggMjNlYjY5MzFhMmI0YWQuLjc4NjNiZWFlMGM1NTVkIDEwMDY0NFxcbi0tLSBhL25ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmNcXG4rKysgYi9uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jXFxuQEAgLTE5LDYgKzE5LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9hZGRyY29uZi5oXFx1MDAzZVxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfY2hlY2tzdW0uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9uZGlzYy5oXFx1MDAzZVxcbiAjZW5kaWZcXG4gXFxuICNpbmNsdWRlIFxcXCJicl9wcml2YXRlLmhcXFwiXFxuQEAgLTIzNCwyMSArMjM1LDE1IEBAIHZvaWQgYnJfZG9fcHJveHlfc3VwcHJlc3NfYXJwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4gI2VuZGlmXFxuIFxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4tc3RydWN0IG5kX21zZyAqYnJfaXNfbmRfbmVpZ2hfbXNnKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZF9tc2cgKm1zZylcXG4rc3RydWN0IG5kX21zZyAqYnJfaXNfbmRfbmVpZ2hfbXNnKHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4tXFx0c3RydWN0IG5kX21zZyAqbTtcXG4tXFxuLVxcdG0gPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBza2JfbmV0d29ya19vZmZzZXQoc2tiKSArXFxuLVxcdFxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLCBzaXplb2YoKm1zZyksIG1zZyk7XFxuLVxcdGlmICghbSlcXG4rXFx0aWYgKG5kaXNjX2NoZWNrX25zX25hKHNrYikpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4tXFx0aWYgKG0tXFx1MDAzZWljbXBoLmljbXA2X2NvZGUgIT0gMCB8fFxcbi1cXHQgICAgKG0tXFx1MDAzZWljbXBoLmljbXA2X3R5cGUgIT0gTkRJU0NfTkVJR0hCT1VSX1NPTElDSVRBVElPTiBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgIG0tXFx1MDAzZWljbXBoLmljbXA2X3R5cGUgIT0gTkRJU0NfTkVJR0hCT1VSX0FEVkVSVElTRU1FTlQpKVxcbitcXHRpZiAoc2tiX2xpbmVhcml6ZShza2IpKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdHJldHVybiBtO1xcbitcXHRyZXR1cm4gKHN0cnVjdCBuZF9tc2cgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBicl9uZF9zZW5kKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG5AQCAtMjU3LDE3ICsyNTIsMTggQEAgc3RhdGljIHZvaWQgYnJfbmRfc2VuZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJlcXVlc3QtXFx1MDAzZWRldjtcXG4gXFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XFxuK1xcdHN0cnVjdCBuZGlzY19vcHRpb25zIG5kb3B0cztcXG4gXFx0c3RydWN0IG5kX21zZyAqbmEsICpucztcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xcbiBcXHRzdHJ1Y3QgaXB2NmhkciAqcGlwNjtcXG4gXFx0aW50IG5hX29sZW4gPSA4OyAvKiBvcHQgaGRyICsgRVRIX0FMRU4gZm9yIHRhcmdldCAqL1xcbiBcXHRpbnQgbnNfb2xlbjtcXG4tXFx0aW50IGksIGxlbjtcXG4gXFx0dTggKmRhZGRyO1xcbiBcXHRib29sIGRhZDtcXG4gXFx0dTE2IHB2aWQ7XFxuK1xcdGludCBsZW47XFxuIFxcbi1cXHRpZiAoIWRldiB8fCBza2JfbGluZWFyaXplKHJlcXVlc3QpKVxcbitcXHRpZiAoIWRldilcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0bGVuID0gTExfUkVTRVJWRURfU1BBQ0UoZGV2KSArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgK1xcbkBAIC0yODQsMjMgKzI4MCwyMyBAQCBzdGF0aWMgdm9pZCBicl9uZF9zZW5kKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4gXFx0c2tiX3NldF9tYWNfaGVhZGVyKHJlcGx5LCAwKTtcXG4gXFxuIFxcdGRhZGRyID0gZXRoX2hkcihyZXF1ZXN0KS1cXHUwMDNlaF9zb3VyY2U7XFxuLVxcdG5zID0gKHN0cnVjdCBuZF9tc2cgKikoc2tiX25ldHdvcmtfaGVhZGVyKHJlcXVlc3QpICtcXG4tXFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpO1xcbi1cXG4tXFx0LyogRG8gd2UgbmVlZCBvcHRpb24gcHJvY2Vzc2luZyA/ICovXFxuLVxcdG5zX29sZW4gPSByZXF1ZXN0LVxcdTAwM2VsZW4gLSAoc2tiX25ldHdvcmtfb2Zmc2V0KHJlcXVlc3QpICtcXG4tXFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSAtIHNpemVvZigqbnMpO1xcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnNfb2xlbiAtIDE7IGkgKz0gKG5zLVxcdTAwM2VvcHRbaSArIDFdIFxcdTAwM2NcXHUwMDNjIDMpKSB7XFxuLVxcdFxcdGlmICghbnMtXFx1MDAzZW9wdFtpICsgMV0gfHwgaSArIChucy1cXHUwMDNlb3B0W2kgKyAxXSBcXHUwMDNjXFx1MDAzYyAzKSBcXHUwMDNlIG5zX29sZW4pIHtcXG4tXFx0XFx0XFx0a2ZyZWVfc2tiKHJlcGx5KTtcXG4tXFx0XFx0XFx0cmV0dXJuO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGlmIChucy1cXHUwMDNlb3B0W2ldID09IE5EX09QVF9TT1VSQ0VfTExfQUREUikge1xcbi1cXHRcXHRcXHRpZiAoKG5zLVxcdTAwM2VvcHRbaSArIDFdIFxcdTAwM2NcXHUwMDNjIDMpIFxcdTAwM2U9XFxuLVxcdFxcdFxcdCAgICBzaXplb2Yoc3RydWN0IG5kX29wdF9oZHIpICsgRVRIX0FMRU4pXFxuLVxcdFxcdFxcdFxcdGRhZGRyID0gbnMtXFx1MDAzZW9wdCArIGkgKyBzaXplb2Yoc3RydWN0IG5kX29wdF9oZHIpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbitcXHRucyA9IChzdHJ1Y3QgbmRfbXNnICopc2tiX3RyYW5zcG9ydF9oZWFkZXIocmVxdWVzdCk7XFxuK1xcbitcXHQvKiBEZXJpdmUgdGhlIG9wdGlvbiBsZW5ndGggZnJvbSB0aGUgSVB2NiBwYXlsb2FkIGxlbmd0aCBzbyB0aGF0IGFueVxcbitcXHQgKiB0cmFpbGluZyBMMiBwYWRkaW5nIGluIHRoZSBza2IgaXMgbm90IHBhcnNlZCBhcyBORCBvcHRpb25zLlxcbitcXHQgKi9cXG4rXFx0bnNfb2xlbiA9IG50b2hzKGlwdjZfaGRyKHJlcXVlc3QpLVxcdTAwM2VwYXlsb2FkX2xlbikgLSBzaXplb2YoKm5zKTtcXG4rXFx0aWYgKCFuZGlzY19wYXJzZV9vcHRpb25zKGRldiwgbnMtXFx1MDAzZW9wdCwgbnNfb2xlbiwgXFx1MDAyNm5kb3B0cykpIHtcXG4rXFx0XFx0a2ZyZWVfc2tiKHJlcGx5KTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobmRvcHRzLm5kX29wdHNfc3JjX2xsYWRkcikge1xcbitcXHRcXHR1OCAqbGxhZGRyO1xcbitcXG4rXFx0XFx0bGxhZGRyID0gbmRpc2Nfb3B0X2FkZHJfZGF0YShuZG9wdHMubmRfb3B0c19zcmNfbGxhZGRyLCBkZXYpO1xcbitcXHRcXHRpZiAobGxhZGRyKVxcbitcXHRcXHRcXHRkYWRkciA9IGxsYWRkcjtcXG4gXFx0fVxcbiBcXG4gXFx0ZGFkID0gaXB2Nl9hZGRyX2FueShcXHUwMDI2aXB2Nl9oZHIocmVxdWVzdCktXFx1MDAzZXNhZGRyKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9kZXZpY2UuYyBiL25ldC9icmlkZ2UvYnJfZGV2aWNlLmNcXG5pbmRleCBlN2YzNDNhYjIyZDM3OS4uZmY1NWRhYjczNjMyNmIgMTAwNjQ0XFxuLS0tIGEvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xcbisrKyBiL25ldC9icmlkZ2UvYnJfZGV2aWNlLmNcXG5AQCAtODAsOSArODAsOSBAQCBuZXRkZXZfdHhfdCBicl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRcXHQgICBwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSArXFxuIFxcdFxcdFxcdFxcdCBzaXplb2Yoc3RydWN0IG5kX21zZykpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgIGlwdjZfaGRyKHNrYiktXFx1MDAzZW5leHRoZHIgPT0gSVBQUk9UT19JQ01QVjYpIHtcXG4tXFx0XFx0XFx0c3RydWN0IG5kX21zZyAqbXNnLCBfbXNnO1xcbitcXHRcXHRcXHRzdHJ1Y3QgbmRfbXNnICptc2c7XFxuIFxcbi1cXHRcXHRcXHRtc2cgPSBicl9pc19uZF9uZWlnaF9tc2coc2tiLCBcXHUwMDI2X21zZyk7XFxuK1xcdFxcdFxcdG1zZyA9IGJyX2lzX25kX25laWdoX21zZyhza2IpO1xcbiBcXHRcXHRcXHRpZiAobXNnKVxcbiBcXHRcXHRcXHRcXHRicl9kb19zdXBwcmVzc19uZChza2IsIGJyLCB2aWQsIE5VTEwsIG1zZyk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jXFxuaW5kZXggZGRiOGYwMDJhNDBlODIuLmQ4N2E1ZjlmYTkyYjcwIDEwMDY0NFxcbi0tLSBhL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xcbisrKyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xcbkBAIC0xNzYsOSArMTc2LDkgQEAgaW50IGJyX2hhbmRsZV9mcmFtZV9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2JcXG4gXFx0XFx0ICAgcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgK1xcbiBcXHRcXHRcXHRcXHQgc2l6ZW9mKHN0cnVjdCBuZF9tc2cpKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICBpcHY2X2hkcihza2IpLVxcdTAwM2VuZXh0aGRyID09IElQUFJPVE9fSUNNUFY2KSB7XFxuLVxcdFxcdFxcdHN0cnVjdCBuZF9tc2cgKm1zZywgX21zZztcXG4rXFx0XFx0XFx0c3RydWN0IG5kX21zZyAqbXNnO1xcbiBcXG4tXFx0XFx0XFx0bXNnID0gYnJfaXNfbmRfbmVpZ2hfbXNnKHNrYiwgXFx1MDAyNl9tc2cpO1xcbitcXHRcXHRcXHRtc2cgPSBicl9pc19uZF9uZWlnaF9tc2coc2tiKTtcXG4gXFx0XFx0XFx0aWYgKG1zZylcXG4gXFx0XFx0XFx0XFx0YnJfZG9fc3VwcHJlc3NfbmQoc2tiLCBiciwgdmlkLCBwLCBtc2cpO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcXG5pbmRleCBkNTVlYTk1MTZlM2UzNi4uMTZlZDA5ZWJmZmMzY2YgMTAwNjQ0XFxuLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcXG4rKysgYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxcbkBAIC0yMzYxLDcgKzIzNjEsNyBAQCB2b2lkIGJyX2RvX3Byb3h5X3N1cHByZXNzX2FycChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuIFxcdFxcdFxcdCAgICAgIHUxNiB2aWQsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApO1xcbiB2b2lkIGJyX2RvX3N1cHByZXNzX25kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4gXFx0XFx0ICAgICAgIHUxNiB2aWQsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBuZF9tc2cgKm1zZyk7XFxuLXN0cnVjdCBuZF9tc2cgKmJyX2lzX25kX25laWdoX21zZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmRfbXNnICptKTtcXG4rc3RydWN0IG5kX21zZyAqYnJfaXNfbmRfbmVpZ2hfbXNnKHN0cnVjdCBza19idWZmICpza2IpO1xcbiBib29sIGJyX2lzX25laWdoX3N1cHByZXNzX2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IHZpZCk7XFxuIGJvb2wgYnJfaXNfbmVpZ2hfZm9yd2FyZF9ncmF0X2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IHZpZCk7XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9NYWtlZmlsZSBiL25ldC9pcHY2L01ha2VmaWxlXFxuaW5kZXggNWIwY2Q2NDg4MDIxMjQuLmNmNWUwMWY4M2NlM2QwIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L01ha2VmaWxlXFxuKysrIGIvbmV0L2lwdjYvTWFrZWZpbGVcXG5AQCAtNTEsNyArNTEsNyBAQCBvYmotJChzdWJzdCBtLHksJChDT05GSUdfSVBWNikpICs9IGluZXQ2X2hhc2h0YWJsZXMub1xcbiBcXG4gaWZuZXEgKCQoQ09ORklHX0lQVjYpLClcXG4gb2JqLSQoQ09ORklHX05FVF9VRFBfVFVOTkVMKSArPSBpcDZfdWRwX3R1bm5lbC5vXFxuLW9iai15ICs9IG1jYXN0X3Nub29wLm9cXG4rb2JqLXkgKz0gbWNhc3Rfc25vb3AubyBuZGlzY19zbm9vcC5vXFxuIG9iai0kKENPTkZJR19UQ1BfQU8pICs9IHRjcF9hby5vXFxuIGVuZGlmXFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuY1xcbmluZGV4IGY4NjdlYzhkM2Q5MDUxLi5kOGI0NTg4ZjZiZmY5MiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9uZGlzYy5jXFxuKysrIGIvbmV0L2lwdjYvbmRpc2MuY1xcbkBAIC0yODMsNiArMjgzLDcgQEAgc3RydWN0IG5kaXNjX29wdGlvbnMgKm5kaXNjX3BhcnNlX29wdGlvbnMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0fVxcbiBcXHRyZXR1cm4gbmRvcHRzO1xcbiB9XFxuK0VYUE9SVF9TWU1CT0wobmRpc2NfcGFyc2Vfb3B0aW9ucyk7XFxuIFxcbiBpbnQgbmRpc2NfbWNfbWFwKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgY2hhciAqYnVmLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGlyKVxcbiB7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25kaXNjX3Nub29wLmMgYi9uZXQvaXB2Ni9uZGlzY19zbm9vcC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYTkzZWVkMjdhMWY2ZDdcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvbmV0L2lwdjYvbmRpc2Nfc25vb3AuY1xcbkBAIC0wLDAgKzEsMTkwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9hZGRyY29uZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2lwNl9jaGVja3N1bS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2lwdjYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9uZGlzYy5oXFx1MDAzZVxcbitcXG4rc3RhdGljIGludCBuZGlzY19jaGVja19pcDZoZHIoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcXG4rXFx0dW5zaWduZWQgaW50IG9mZnNldCwgbGVuO1xcbitcXG4rXFx0b2Zmc2V0ID0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikgKyBzaXplb2YoKmlwNmgpO1xcbitcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBvZmZzZXQpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlwNmggPSBpcHY2X2hkcihza2IpO1xcbitcXG4rXFx0aWYgKGlwNmgtXFx1MDAzZXZlcnNpb24gIT0gNilcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAoaXA2aC1cXHUwMDNlbmV4dGhkciAhPSBJUFBST1RPX0lDTVBWNilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NU0c7XFxuK1xcbitcXHQvKiBSRkMgNDg2MSA3LjEuMSAvIDcuMS4yOiBtdXN0IG5vdCBoYXZlIGJlZW4gZm9yd2FyZGVkIGJ5IGEgcm91dGVyICovXFxuK1xcdGlmIChpcDZoLVxcdTAwM2Vob3BfbGltaXQgIT0gMjU1KVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGxlbiA9IG9mZnNldCArIG50b2hzKGlwNmgtXFx1MDAzZXBheWxvYWRfbGVuKTtcXG4rXFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2MgbGVuIHx8IGxlbiBcXHUwMDNjPSBvZmZzZXQpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0c2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKHNrYiwgb2Zmc2V0KTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgX19zdW0xNiBuZGlzY192YWxpZGF0ZV9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHJldHVybiBza2JfY2hlY2tzdW1fdmFsaWRhdGUoc2tiLCBJUFBST1RPX0lDTVBWNiwgaXA2X2NvbXB1dGVfcHNldWRvKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBuZGlzY19jaGVja19pY21wdjYoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgbGVuID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSArIHNpemVvZihzdHJ1Y3QgaWNtcDZoZHIpO1xcbitcXHR1bnNpZ25lZCBpbnQgdHJhbnNwb3J0X2xlbiA9IGlwdjZfdHJhbnNwb3J0X2xlbihza2IpO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2NoaztcXG4rXFx0c3RydWN0IGljbXA2aGRyICpoZHI7XFxuK1xcbitcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBsZW4pKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdC8qIFJGQyA0ODYxIDcuMS4xIC8gNy4xLjI6IHRoZSBJQ01QdjYgY2hlY2tzdW0gbXVzdCBiZSB2YWxpZCAqL1xcbitcXHRza2JfY2hrID0gc2tiX2NoZWNrc3VtX3RyaW1tZWQoc2tiLCB0cmFuc3BvcnRfbGVuLFxcbitcXHRcXHRcXHRcXHQgICAgICAgbmRpc2NfdmFsaWRhdGVfY2hlY2tzdW0pO1xcbitcXHRpZiAoIXNrYl9jaGspXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKHNrYl9jaGsgIT0gc2tiKVxcbitcXHRcXHRrZnJlZV9za2Ioc2tiX2Noayk7XFxuK1xcbitcXHQvKiBSRkMgNDg2MSA3LjEuMSAvIDcuMS4yOiBDb2RlIG11c3QgYmUgMCAqL1xcbitcXHRoZHIgPSAoc3RydWN0IGljbXA2aGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG4rXFx0aWYgKGhkci1cXHUwMDNlaWNtcDZfY29kZSAhPSAwKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG5kaXNjX2NoZWNrX29wdGlvbnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG9wdHNfbGVuLFxcbitcXHRcXHRcXHQgICAgICAgYm9vbCByZWplY3Rfc2xsYSlcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSArIHNpemVvZihzdHJ1Y3QgbmRfbXNnKTtcXG4rXFx0c3RydWN0IG5kX29wdF9oZHIgKm9wdCwgX29wdDtcXG4rXFxuK1xcdHdoaWxlIChvcHRzX2xlbiBcXHUwMDNlIDApIHtcXG4rXFx0XFx0aWYgKG9wdHNfbGVuIFxcdTAwM2Mgc2l6ZW9mKCpvcHQpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdFxcdG9wdCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9vcHQpLCBcXHUwMDI2X29wdCk7XFxuK1xcdFxcdGlmICghb3B0KVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdFxcdC8qIFJGQyA0ODYxIDcuMS4xIC8gNy4xLjI6IGFsbCBvcHRpb24gbGVuZ3RocyBtdXN0IGJlIFxcdTAwM2UgMCAqL1xcbitcXHRcXHRpZiAoIW9wdC1cXHUwMDNlbmRfb3B0X2xlbilcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHQvKiBSRkMgNDg2MSA3LjEuMTogREFEIE5TIG11c3Qgbm90IGNvbnRhaW4gYSBzb3VyY2UgbGluay1sYXllclxcbitcXHRcXHQgKiBhZGRyZXNzIG9wdGlvblxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHJlamVjdF9zbGxhIFxcdTAwMjZcXHUwMDI2IG9wdC1cXHUwMDNlbmRfb3B0X3R5cGUgPT0gTkRfT1BUX1NPVVJDRV9MTF9BRERSKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdFxcdGlmIChvcHQtXFx1MDAzZW5kX29wdF9sZW4gKiA4IFxcdTAwM2Ugb3B0c19sZW4pXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0b2Zmc2V0ICs9IG9wdC1cXHUwMDNlbmRfb3B0X2xlbiAqIDg7XFxuK1xcdFxcdG9wdHNfbGVuIC09IG9wdC1cXHUwMDNlbmRfb3B0X2xlbiAqIDg7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG5kaXNjX2NoZWNrX25kX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBsZW4gPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgc2l6ZW9mKHN0cnVjdCBuZF9tc2cpO1xcbitcXHR1bnNpZ25lZCBpbnQgdHJhbnNwb3J0X2xlbiA9IGlwdjZfdHJhbnNwb3J0X2xlbihza2IpO1xcbitcXHRib29sIHJlamVjdF9zbGxhID0gZmFsc2U7XFxuK1xcdGNvbnN0IHN0cnVjdCBuZF9tc2cgKm1zZztcXG4rXFxuK1xcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGxlbikpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0LyogUkZDIDQ4NjEgNy4xLjEgLyA3LjEuMjogSUNNUCBsZW5ndGggaXMgYXQgbGVhc3Qgc2l6ZW9mKG5kX21zZykgKi9cXG4rXFx0aWYgKHRyYW5zcG9ydF9sZW4gXFx1MDAzYyBzaXplb2Yoc3RydWN0IG5kX21zZykpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bXNnID0gKHN0cnVjdCBuZF9tc2cgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbitcXG4rXFx0LyogUkZDIDQ4NjEgNy4xLjEgLyA3LjEuMjogVGFyZ2V0IEFkZHJlc3MgbXVzdCBub3QgYmUgYVxcbitcXHQgKiBtdWx0aWNhc3QgYWRkcmVzc1xcbitcXHQgKi9cXG4rXFx0aWYgKGlwdjZfYWRkcl9pc19tdWx0aWNhc3QoXFx1MDAyNm1zZy1cXHUwMDNldGFyZ2V0KSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRzd2l0Y2ggKG1zZy1cXHUwMDNlaWNtcGguaWNtcDZfdHlwZSkge1xcbitcXHRjYXNlIE5ESVNDX05FSUdIQk9VUl9TT0xJQ0lUQVRJT046XFxuK1xcdFxcdGlmIChpcHY2X2FkZHJfYW55KFxcdTAwMjZpcHY2X2hkcihza2IpLVxcdTAwM2VzYWRkcikpIHtcXG4rXFx0XFx0XFx0LyogUkZDIDQ4NjEgNy4xLjE6IERBRCBOUyBkZXN0aW5hdGlvbiBtdXN0IGJlIGFcXG4rXFx0XFx0XFx0ICogc29saWNpdGVkLW5vZGUgbXVsdGljYXN0IGFkZHJlc3NcXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmICghaXB2Nl9hZGRyX2lzX3NvbGljdF9tdWx0KFxcdTAwMjZpcHY2X2hkcihza2IpLVxcdTAwM2VkYWRkcikpXFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHQvKiBSRkMgNDg2MSA3LjEuMTogREFEIE5TIG11c3Qgbm90IGNvbnRhaW4gYSBzb3VyY2VcXG4rXFx0XFx0XFx0ICogbGluay1sYXllciBhZGRyZXNzIG9wdGlvblxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0cmVqZWN0X3NsbGEgPSB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE5ESVNDX05FSUdIQk9VUl9BRFZFUlRJU0VNRU5UOlxcbitcXHRcXHQvKiBSRkMgNDg2MSA3LjEuMjogU29saWNpdGVkIGZsYWcgbXVzdCBiZSAwIGZvclxcbitcXHRcXHQgKiBtdWx0aWNhc3QgZGVzdGluYXRpb25zXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoaXB2Nl9hZGRyX2lzX211bHRpY2FzdChcXHUwMDI2aXB2Nl9oZHIoc2tiKS1cXHUwMDNlZGFkZHIpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBtc2ctXFx1MDAzZWljbXBoLmljbXA2X3NvbGljaXRlZClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVOT0RBVEE7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBuZGlzY19jaGVja19vcHRpb25zKHNrYiwgdHJhbnNwb3J0X2xlbiAtIHNpemVvZihzdHJ1Y3QgbmRfbXNnKSxcXG4rXFx0XFx0XFx0XFx0ICAgcmVqZWN0X3NsbGEpO1xcbit9XFxuK1xcbisvKipcXG4rICogbmRpc2NfY2hlY2tfbnNfbmEgLSB2YWxpZGF0ZSBhbiBOUy9OQSBwYWNrZXQgYW5kIHNldCBpdHMgdHJhbnNwb3J0IGhlYWRlclxcbisgKiBAc2tiOiB0aGUgc2tiIHRvIHZhbGlkYXRlXFxuKyAqXFxuKyAqIFZhbGlkYXRlcyBhbiBJUHY2IHBhY2tldCBmb3IgY29tcGxpYW5jZSB3aXRoIFJGQyA0ODYxIHNlY3Rpb25zIDcuMS4xXFxuKyAqIChOZWlnaGJvciBTb2xpY2l0YXRpb24pIGFuZCA3LjEuMiAoTmVpZ2hib3IgQWR2ZXJ0aXNlbWVudCkuIElmIHZhbGlkLFxcbisgKiBzZXRzIHRoZSBza2IgdHJhbnNwb3J0IGhlYWRlci5cXG4rICpcXG4rICogQ2FsbGVyIG5lZWRzIHRvIHNldCB0aGUgc2tiIG5ldHdvcmsgaGVhZGVyLlxcbisgKlxcbisgKiBSZXR1cm46XFxuKyAqICogMCAgICAgICAgLSB2YWxpZCBOUy9OQTsgdGhlIHNrYiB0cmFuc3BvcnQgaGVhZGVyIGhhcyBiZWVuIHNldC5cXG4rICogKiAtRUlOVkFMICAtIGEgYnJva2VuIHBhY2tldCB3YXMgZGV0ZWN0ZWQsIGkuZS4gaXQgdmlvbGF0ZXMgc29tZVxcbisgKiAgICAgICAgICAgICAgaW50ZXJuZXQgc3RhbmRhcmQuXFxuKyAqICogLUVOT01TRyAgLSBJUCBoZWFkZXIgdmFsaWRhdGlvbiBzdWNjZWVkZWQgYnV0IGl0IGlzIG5vdCBhbiBJQ01QdjZcXG4rICogICAgICAgICAgICAgIHBhY2tldC5cXG4rICogKiAtRU5PREFUQSAtIElQK0lDTVB2NiBoZWFkZXIgdmFsaWRhdGlvbiBzdWNjZWVkZWQgYnV0IGl0IGlzIG5vdCBhXFxuKyAqICAgICAgICAgICAgICBOZWlnaGJvciBTb2xpY2l0YXRpb24gb3IgTmVpZ2hib3IgQWR2ZXJ0aXNlbWVudC5cXG4rICovXFxuK2ludCBuZGlzY19jaGVja19uc19uYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBuZGlzY19jaGVja19pcDZoZHIoc2tiKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBuZGlzY19jaGVja19pY21wdjYoc2tiKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gbmRpc2NfY2hlY2tfbmRfbXNnKHNrYik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChuZGlzY19jaGVja19uc19uYSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDE0OjE5OjI2LjI0NTA5ODkxN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1MDcxNjYwNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmRpc2NfY2hlY2tfbnNfbmFcIixcbiAgICBcImJyX2lzX25kX25laWdoX21zZ1wiLFxuICAgIFwiYnJfbmRfc2VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYG5kaXNjX2NoZWNrX25zX25hYCB0byB2YWxpZGF0ZSBJUHY2IE5laWdoYm9yIFNvbGljaXRhdGlvbiBhbmQgQWR2ZXJ0aXNlbWVudCBwYWNrZXRzLCBhbmQgdXBkYXRlcyB0aGUgYnJpZGdlIE5EIHByb3h5IGNvZGUgdG8gdXNlIGl0LiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgcHJvY2Vzc2VzIHVudHJ1c3RlZCBuZXR3b3JrIHBhY2tldHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGVlZWE2MjE4MjUyNzNhZWI1OTZmYjIyMTZlZTRhMWQwNTQyYjNiMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDE5IDE0OjE5OjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmRpc2MuaCBiL2luY2x1ZGUvbmV0L25kaXNjLmhcbmluZGV4IDNkYTFhNmY4ZDNmOTIwLi45ZTUzNzlhZDJkOGUwMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25kaXNjLmhcbisrKyBiL2luY2x1ZGUvbmV0L25kaXNjLmhcbkBAIC00MzAsNiArNDMwLDggQEAgdm9pZCBuZGlzY191cGRhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsXG4gXHRcdCAgY29uc3QgdTggKmxsYWRkciwgdTggbmV3LCB1MzIgZmxhZ3MsIHU4IGljbXA2X3R5cGUsXG4gXHRcdCAgc3RydWN0IG5kaXNjX29wdGlvbnMgKm5kb3B0cyk7XG4gXG4raW50IG5kaXNjX2NoZWNrX25zX25hKHN0cnVjdCBza19idWZmICpza2IpO1xuK1xuIC8qXG4gICpcdElHTVBcbiAgKi9cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jIGIvbmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuY1xuaW5kZXggMjNlYjY5MzFhMmI0YWQuLjc4NjNiZWFlMGM1NTVkIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuY1xuKysrIGIvbmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuY1xuQEAgLTE5LDYgKzE5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvYWRkcmNvbmYuaFx1MDAzZVxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcDZfY2hlY2tzdW0uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9uZGlzYy5oXHUwMDNlXG4gI2VuZGlmXG4gXG4gI2luY2x1ZGUgXCJicl9wcml2YXRlLmhcIlxuQEAgLTIzNCwyMSArMjM1LDE1IEBAIHZvaWQgYnJfZG9fcHJveHlfc3VwcHJlc3NfYXJwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiAjZW5kaWZcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbi1zdHJ1Y3QgbmRfbXNnICpicl9pc19uZF9uZWlnaF9tc2coY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5kX21zZyAqbXNnKVxuK3N0cnVjdCBuZF9tc2cgKmJyX2lzX25kX25laWdoX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBuZF9tc2cgKm07XG4tXG4tXHRtID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikgK1xuLVx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLCBzaXplb2YoKm1zZyksIG1zZyk7XG4tXHRpZiAoIW0pXG4rXHRpZiAobmRpc2NfY2hlY2tfbnNfbmEoc2tiKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRpZiAobS1cdTAwM2VpY21waC5pY21wNl9jb2RlICE9IDAgfHxcbi1cdCAgICAobS1cdTAwM2VpY21waC5pY21wNl90eXBlICE9IE5ESVNDX05FSUdIQk9VUl9TT0xJQ0lUQVRJT04gXHUwMDI2XHUwMDI2XG4tXHQgICAgIG0tXHUwMDNlaWNtcGguaWNtcDZfdHlwZSAhPSBORElTQ19ORUlHSEJPVVJfQURWRVJUSVNFTUVOVCkpXG4rXHRpZiAoc2tiX2xpbmVhcml6ZShza2IpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdHJldHVybiBtO1xuK1x0cmV0dXJuIChzdHJ1Y3QgbmRfbXNnICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYnJfbmRfc2VuZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG5AQCAtMjU3LDE3ICsyNTIsMTggQEAgc3RhdGljIHZvaWQgYnJfbmRfc2VuZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJlcXVlc3QtXHUwMDNlZGV2O1xuIFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XG4rXHRzdHJ1Y3QgbmRpc2Nfb3B0aW9ucyBuZG9wdHM7XG4gXHRzdHJ1Y3QgbmRfbXNnICpuYSwgKm5zO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xuIFx0c3RydWN0IGlwdjZoZHIgKnBpcDY7XG4gXHRpbnQgbmFfb2xlbiA9IDg7IC8qIG9wdCBoZHIgKyBFVEhfQUxFTiBmb3IgdGFyZ2V0ICovXG4gXHRpbnQgbnNfb2xlbjtcbi1cdGludCBpLCBsZW47XG4gXHR1OCAqZGFkZHI7XG4gXHRib29sIGRhZDtcbiBcdHUxNiBwdmlkO1xuK1x0aW50IGxlbjtcbiBcbi1cdGlmICghZGV2IHx8IHNrYl9saW5lYXJpemUocmVxdWVzdCkpXG4rXHRpZiAoIWRldilcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bGVuID0gTExfUkVTRVJWRURfU1BBQ0UoZGV2KSArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgK1xuQEAgLTI4NCwyMyArMjgwLDIzIEBAIHN0YXRpYyB2b2lkIGJyX25kX3NlbmQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuIFx0c2tiX3NldF9tYWNfaGVhZGVyKHJlcGx5LCAwKTtcbiBcbiBcdGRhZGRyID0gZXRoX2hkcihyZXF1ZXN0KS1cdTAwM2VoX3NvdXJjZTtcbi1cdG5zID0gKHN0cnVjdCBuZF9tc2cgKikoc2tiX25ldHdvcmtfaGVhZGVyKHJlcXVlc3QpICtcbi1cdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4tXG4tXHQvKiBEbyB3ZSBuZWVkIG9wdGlvbiBwcm9jZXNzaW5nID8gKi9cbi1cdG5zX29sZW4gPSByZXF1ZXN0LVx1MDAzZWxlbiAtIChza2JfbmV0d29ya19vZmZzZXQocmVxdWVzdCkgK1xuLVx0XHRcdFx0ICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSAtIHNpemVvZigqbnMpO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnNfb2xlbiAtIDE7IGkgKz0gKG5zLVx1MDAzZW9wdFtpICsgMV0gXHUwMDNjXHUwMDNjIDMpKSB7XG4tXHRcdGlmICghbnMtXHUwMDNlb3B0W2kgKyAxXSB8fCBpICsgKG5zLVx1MDAzZW9wdFtpICsgMV0gXHUwMDNjXHUwMDNjIDMpIFx1MDAzZSBuc19vbGVuKSB7XG4tXHRcdFx0a2ZyZWVfc2tiKHJlcGx5KTtcbi1cdFx0XHRyZXR1cm47XG4tXHRcdH1cbi1cdFx0aWYgKG5zLVx1MDAzZW9wdFtpXSA9PSBORF9PUFRfU09VUkNFX0xMX0FERFIpIHtcbi1cdFx0XHRpZiAoKG5zLVx1MDAzZW9wdFtpICsgMV0gXHUwMDNjXHUwMDNjIDMpIFx1MDAzZT1cbi1cdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCBuZF9vcHRfaGRyKSArIEVUSF9BTEVOKVxuLVx0XHRcdFx0ZGFkZHIgPSBucy1cdTAwM2VvcHQgKyBpICsgc2l6ZW9mKHN0cnVjdCBuZF9vcHRfaGRyKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuK1x0bnMgPSAoc3RydWN0IG5kX21zZyAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHJlcXVlc3QpO1xuK1xuK1x0LyogRGVyaXZlIHRoZSBvcHRpb24gbGVuZ3RoIGZyb20gdGhlIElQdjYgcGF5bG9hZCBsZW5ndGggc28gdGhhdCBhbnlcbitcdCAqIHRyYWlsaW5nIEwyIHBhZGRpbmcgaW4gdGhlIHNrYiBpcyBub3QgcGFyc2VkIGFzIE5EIG9wdGlvbnMuXG4rXHQgKi9cbitcdG5zX29sZW4gPSBudG9ocyhpcHY2X2hkcihyZXF1ZXN0KS1cdTAwM2VwYXlsb2FkX2xlbikgLSBzaXplb2YoKm5zKTtcbitcdGlmICghbmRpc2NfcGFyc2Vfb3B0aW9ucyhkZXYsIG5zLVx1MDAzZW9wdCwgbnNfb2xlbiwgXHUwMDI2bmRvcHRzKSkge1xuK1x0XHRrZnJlZV9za2IocmVwbHkpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAobmRvcHRzLm5kX29wdHNfc3JjX2xsYWRkcikge1xuK1x0XHR1OCAqbGxhZGRyO1xuK1xuK1x0XHRsbGFkZHIgPSBuZGlzY19vcHRfYWRkcl9kYXRhKG5kb3B0cy5uZF9vcHRzX3NyY19sbGFkZHIsIGRldik7XG4rXHRcdGlmIChsbGFkZHIpXG4rXHRcdFx0ZGFkZHIgPSBsbGFkZHI7XG4gXHR9XG4gXG4gXHRkYWQgPSBpcHY2X2FkZHJfYW55KFx1MDAyNmlwdjZfaGRyKHJlcXVlc3QpLVx1MDAzZXNhZGRyKTtcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xuaW5kZXggZTdmMzQzYWIyMmQzNzkuLmZmNTVkYWI3MzYzMjZiIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xuKysrIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xuQEAgLTgwLDkgKzgwLDkgQEAgbmV0ZGV2X3R4X3QgYnJfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0ICAgcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgK1xuIFx0XHRcdFx0IHNpemVvZihzdHJ1Y3QgbmRfbXNnKSkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgIGlwdjZfaGRyKHNrYiktXHUwMDNlbmV4dGhkciA9PSBJUFBST1RPX0lDTVBWNikge1xuLVx0XHRcdHN0cnVjdCBuZF9tc2cgKm1zZywgX21zZztcbitcdFx0XHRzdHJ1Y3QgbmRfbXNnICptc2c7XG4gXG4tXHRcdFx0bXNnID0gYnJfaXNfbmRfbmVpZ2hfbXNnKHNrYiwgXHUwMDI2X21zZyk7XG4rXHRcdFx0bXNnID0gYnJfaXNfbmRfbmVpZ2hfbXNnKHNrYik7XG4gXHRcdFx0aWYgKG1zZylcbiBcdFx0XHRcdGJyX2RvX3N1cHByZXNzX25kKHNrYiwgYnIsIHZpZCwgTlVMTCwgbXNnKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmNcbmluZGV4IGRkYjhmMDAyYTQwZTgyLi5kODdhNWY5ZmE5MmI3MCAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xuKysrIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jXG5AQCAtMTc2LDkgKzE3Niw5IEBAIGludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiXG4gXHRcdCAgIHBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICtcbiBcdFx0XHRcdCBzaXplb2Yoc3RydWN0IG5kX21zZykpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICBpcHY2X2hkcihza2IpLVx1MDAzZW5leHRoZHIgPT0gSVBQUk9UT19JQ01QVjYpIHtcbi1cdFx0XHRzdHJ1Y3QgbmRfbXNnICptc2csIF9tc2c7XG4rXHRcdFx0c3RydWN0IG5kX21zZyAqbXNnO1xuIFxuLVx0XHRcdG1zZyA9IGJyX2lzX25kX25laWdoX21zZyhza2IsIFx1MDAyNl9tc2cpO1xuK1x0XHRcdG1zZyA9IGJyX2lzX25kX25laWdoX21zZyhza2IpO1xuIFx0XHRcdGlmIChtc2cpXG4gXHRcdFx0XHRicl9kb19zdXBwcmVzc19uZChza2IsIGJyLCB2aWQsIHAsIG1zZyk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmggYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxuaW5kZXggZDU1ZWE5NTE2ZTNlMzYuLjE2ZWQwOWViZmZjM2NmIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcbisrKyBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXG5AQCAtMjM2MSw3ICsyMzYxLDcgQEAgdm9pZCBicl9kb19wcm94eV9zdXBwcmVzc19hcnAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0XHRcdCAgICAgIHUxNiB2aWQsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApO1xuIHZvaWQgYnJfZG9fc3VwcHJlc3NfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0XHQgICAgICAgdTE2IHZpZCwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IG5kX21zZyAqbXNnKTtcbi1zdHJ1Y3QgbmRfbXNnICpicl9pc19uZF9uZWlnaF9tc2coY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5kX21zZyAqbSk7XG4rc3RydWN0IG5kX21zZyAqYnJfaXNfbmRfbmVpZ2hfbXNnKHN0cnVjdCBza19idWZmICpza2IpO1xuIGJvb2wgYnJfaXNfbmVpZ2hfc3VwcHJlc3NfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgdmlkKTtcbiBib29sIGJyX2lzX25laWdoX2ZvcndhcmRfZ3JhdF9lbmFibGVkKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiB2aWQpO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L01ha2VmaWxlIGIvbmV0L2lwdjYvTWFrZWZpbGVcbmluZGV4IDViMGNkNjQ4ODAyMTI0Li5jZjVlMDFmODNjZTNkMCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L01ha2VmaWxlXG4rKysgYi9uZXQvaXB2Ni9NYWtlZmlsZVxuQEAgLTUxLDcgKzUxLDcgQEAgb2JqLSQoc3Vic3QgbSx5LCQoQ09ORklHX0lQVjYpKSArPSBpbmV0Nl9oYXNodGFibGVzLm9cbiBcbiBpZm5lcSAoJChDT05GSUdfSVBWNiksKVxuIG9iai0kKENPTkZJR19ORVRfVURQX1RVTk5FTCkgKz0gaXA2X3VkcF90dW5uZWwub1xuLW9iai15ICs9IG1jYXN0X3Nub29wLm9cbitvYmoteSArPSBtY2FzdF9zbm9vcC5vIG5kaXNjX3Nub29wLm9cbiBvYmotJChDT05GSUdfVENQX0FPKSArPSB0Y3BfYW8ub1xuIGVuZGlmXG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmNcbmluZGV4IGY4NjdlYzhkM2Q5MDUxLi5kOGI0NTg4ZjZiZmY5MiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25kaXNjLmNcbisrKyBiL25ldC9pcHY2L25kaXNjLmNcbkBAIC0yODMsNiArMjgzLDcgQEAgc3RydWN0IG5kaXNjX29wdGlvbnMgKm5kaXNjX3BhcnNlX29wdGlvbnMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdH1cbiBcdHJldHVybiBuZG9wdHM7XG4gfVxuK0VYUE9SVF9TWU1CT0wobmRpc2NfcGFyc2Vfb3B0aW9ucyk7XG4gXG4gaW50IG5kaXNjX21jX21hcChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIGNoYXIgKmJ1Ziwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRpcilcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2Nfc25vb3AuYyBiL25ldC9pcHY2L25kaXNjX3Nub29wLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYTkzZWVkMjdhMWY2ZDdcbi0tLSAvZGV2L251bGxcbisrKyBiL25ldC9pcHY2L25kaXNjX3Nub29wLmNcbkBAIC0wLDAgKzEsMTkwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2FkZHJjb25mLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X2NoZWNrc3VtLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvaXB2Ni5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L25kaXNjLmhcdTAwM2VcbitcbitzdGF0aWMgaW50IG5kaXNjX2NoZWNrX2lwNmhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoO1xuK1x0dW5zaWduZWQgaW50IG9mZnNldCwgbGVuO1xuK1xuK1x0b2Zmc2V0ID0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikgKyBzaXplb2YoKmlwNmgpO1xuK1x0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgb2Zmc2V0KSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpcDZoID0gaXB2Nl9oZHIoc2tiKTtcbitcbitcdGlmIChpcDZoLVx1MDAzZXZlcnNpb24gIT0gNilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoaXA2aC1cdTAwM2VuZXh0aGRyICE9IElQUFJPVE9fSUNNUFY2KVxuK1x0XHRyZXR1cm4gLUVOT01TRztcbitcbitcdC8qIFJGQyA0ODYxIDcuMS4xIC8gNy4xLjI6IG11c3Qgbm90IGhhdmUgYmVlbiBmb3J3YXJkZWQgYnkgYSByb3V0ZXIgKi9cbitcdGlmIChpcDZoLVx1MDAzZWhvcF9saW1pdCAhPSAyNTUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0bGVuID0gb2Zmc2V0ICsgbnRvaHMoaXA2aC1cdTAwM2VwYXlsb2FkX2xlbik7XG4rXHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgbGVuIHx8IGxlbiBcdTAwM2M9IG9mZnNldClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBvZmZzZXQpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBfX3N1bTE2IG5kaXNjX3ZhbGlkYXRlX2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0cmV0dXJuIHNrYl9jaGVja3N1bV92YWxpZGF0ZShza2IsIElQUFJPVE9fSUNNUFY2LCBpcDZfY29tcHV0ZV9wc2V1ZG8pO1xuK31cbitcbitzdGF0aWMgaW50IG5kaXNjX2NoZWNrX2ljbXB2NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHVuc2lnbmVkIGludCBsZW4gPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgc2l6ZW9mKHN0cnVjdCBpY21wNmhkcik7XG4rXHR1bnNpZ25lZCBpbnQgdHJhbnNwb3J0X2xlbiA9IGlwdjZfdHJhbnNwb3J0X2xlbihza2IpO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYl9jaGs7XG4rXHRzdHJ1Y3QgaWNtcDZoZHIgKmhkcjtcbitcbitcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGxlbikpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0LyogUkZDIDQ4NjEgNy4xLjEgLyA3LjEuMjogdGhlIElDTVB2NiBjaGVja3N1bSBtdXN0IGJlIHZhbGlkICovXG4rXHRza2JfY2hrID0gc2tiX2NoZWNrc3VtX3RyaW1tZWQoc2tiLCB0cmFuc3BvcnRfbGVuLFxuK1x0XHRcdFx0ICAgICAgIG5kaXNjX3ZhbGlkYXRlX2NoZWNrc3VtKTtcbitcdGlmICghc2tiX2NoaylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoc2tiX2NoayAhPSBza2IpXG4rXHRcdGtmcmVlX3NrYihza2JfY2hrKTtcbitcbitcdC8qIFJGQyA0ODYxIDcuMS4xIC8gNy4xLjI6IENvZGUgbXVzdCBiZSAwICovXG4rXHRoZHIgPSAoc3RydWN0IGljbXA2aGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbitcdGlmIChoZHItXHUwMDNlaWNtcDZfY29kZSAhPSAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IG5kaXNjX2NoZWNrX29wdGlvbnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG9wdHNfbGVuLFxuK1x0XHRcdCAgICAgICBib29sIHJlamVjdF9zbGxhKVxuK3tcbitcdHVuc2lnbmVkIGludCBvZmZzZXQgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgc2l6ZW9mKHN0cnVjdCBuZF9tc2cpO1xuK1x0c3RydWN0IG5kX29wdF9oZHIgKm9wdCwgX29wdDtcbitcbitcdHdoaWxlIChvcHRzX2xlbiBcdTAwM2UgMCkge1xuK1x0XHRpZiAob3B0c19sZW4gXHUwMDNjIHNpemVvZigqb3B0KSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0b3B0ID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX29wdCksIFx1MDAyNl9vcHQpO1xuK1x0XHRpZiAoIW9wdClcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0LyogUkZDIDQ4NjEgNy4xLjEgLyA3LjEuMjogYWxsIG9wdGlvbiBsZW5ndGhzIG11c3QgYmUgXHUwMDNlIDAgKi9cbitcdFx0aWYgKCFvcHQtXHUwMDNlbmRfb3B0X2xlbilcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0LyogUkZDIDQ4NjEgNy4xLjE6IERBRCBOUyBtdXN0IG5vdCBjb250YWluIGEgc291cmNlIGxpbmstbGF5ZXJcbitcdFx0ICogYWRkcmVzcyBvcHRpb25cbitcdFx0ICovXG4rXHRcdGlmIChyZWplY3Rfc2xsYSBcdTAwMjZcdTAwMjYgb3B0LVx1MDAzZW5kX29wdF90eXBlID09IE5EX09QVF9TT1VSQ0VfTExfQUREUilcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0aWYgKG9wdC1cdTAwM2VuZF9vcHRfbGVuICogOCBcdTAwM2Ugb3B0c19sZW4pXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdG9mZnNldCArPSBvcHQtXHUwMDNlbmRfb3B0X2xlbiAqIDg7XG4rXHRcdG9wdHNfbGVuIC09IG9wdC1cdTAwM2VuZF9vcHRfbGVuICogODtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IG5kaXNjX2NoZWNrX25kX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHVuc2lnbmVkIGludCBsZW4gPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgc2l6ZW9mKHN0cnVjdCBuZF9tc2cpO1xuK1x0dW5zaWduZWQgaW50IHRyYW5zcG9ydF9sZW4gPSBpcHY2X3RyYW5zcG9ydF9sZW4oc2tiKTtcbitcdGJvb2wgcmVqZWN0X3NsbGEgPSBmYWxzZTtcbitcdGNvbnN0IHN0cnVjdCBuZF9tc2cgKm1zZztcbitcbitcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGxlbikpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0LyogUkZDIDQ4NjEgNy4xLjEgLyA3LjEuMjogSUNNUCBsZW5ndGggaXMgYXQgbGVhc3Qgc2l6ZW9mKG5kX21zZykgKi9cbitcdGlmICh0cmFuc3BvcnRfbGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IG5kX21zZykpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0bXNnID0gKHN0cnVjdCBuZF9tc2cgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuK1xuK1x0LyogUkZDIDQ4NjEgNy4xLjEgLyA3LjEuMjogVGFyZ2V0IEFkZHJlc3MgbXVzdCBub3QgYmUgYVxuK1x0ICogbXVsdGljYXN0IGFkZHJlc3NcbitcdCAqL1xuK1x0aWYgKGlwdjZfYWRkcl9pc19tdWx0aWNhc3QoXHUwMDI2bXNnLVx1MDAzZXRhcmdldCkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0c3dpdGNoIChtc2ctXHUwMDNlaWNtcGguaWNtcDZfdHlwZSkge1xuK1x0Y2FzZSBORElTQ19ORUlHSEJPVVJfU09MSUNJVEFUSU9OOlxuK1x0XHRpZiAoaXB2Nl9hZGRyX2FueShcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZXNhZGRyKSkge1xuK1x0XHRcdC8qIFJGQyA0ODYxIDcuMS4xOiBEQUQgTlMgZGVzdGluYXRpb24gbXVzdCBiZSBhXG4rXHRcdFx0ICogc29saWNpdGVkLW5vZGUgbXVsdGljYXN0IGFkZHJlc3NcbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoIWlwdjZfYWRkcl9pc19zb2xpY3RfbXVsdChcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyKSlcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdC8qIFJGQyA0ODYxIDcuMS4xOiBEQUQgTlMgbXVzdCBub3QgY29udGFpbiBhIHNvdXJjZVxuK1x0XHRcdCAqIGxpbmstbGF5ZXIgYWRkcmVzcyBvcHRpb25cbitcdFx0XHQgKi9cbitcdFx0XHRyZWplY3Rfc2xsYSA9IHRydWU7XG4rXHRcdH1cbitcdFx0YnJlYWs7XG4rXHRjYXNlIE5ESVNDX05FSUdIQk9VUl9BRFZFUlRJU0VNRU5UOlxuK1x0XHQvKiBSRkMgNDg2MSA3LjEuMjogU29saWNpdGVkIGZsYWcgbXVzdCBiZSAwIGZvclxuK1x0XHQgKiBtdWx0aWNhc3QgZGVzdGluYXRpb25zXG4rXHRcdCAqL1xuK1x0XHRpZiAoaXB2Nl9hZGRyX2lzX211bHRpY2FzdChcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIG1zZy1cdTAwM2VpY21waC5pY21wNl9zb2xpY2l0ZWQpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FTk9EQVRBO1xuK1x0fVxuK1xuK1x0cmV0dXJuIG5kaXNjX2NoZWNrX29wdGlvbnMoc2tiLCB0cmFuc3BvcnRfbGVuIC0gc2l6ZW9mKHN0cnVjdCBuZF9tc2cpLFxuK1x0XHRcdFx0ICAgcmVqZWN0X3NsbGEpO1xuK31cbitcbisvKipcbisgKiBuZGlzY19jaGVja19uc19uYSAtIHZhbGlkYXRlIGFuIE5TL05BIHBhY2tldCBhbmQgc2V0IGl0cyB0cmFuc3BvcnQgaGVhZGVyXG4rICogQHNrYjogdGhlIHNrYiB0byB2YWxpZGF0ZVxuKyAqXG4rICogVmFsaWRhdGVzIGFuIElQdjYgcGFja2V0IGZvciBjb21wbGlhbmNlIHdpdGggUkZDIDQ4NjEgc2VjdGlvbnMgNy4xLjFcbisgKiAoTmVpZ2hib3IgU29saWNpdGF0aW9uKSBhbmQgNy4xLjIgKE5laWdoYm9yIEFkdmVydGlzZW1lbnQpLiBJZiB2YWxpZCxcbisgKiBzZXRzIHRoZSBza2IgdHJhbnNwb3J0IGhlYWRlci5cbisgKlxuKyAqIENhbGxlciBuZWVkcyB0byBzZXQgdGhlIHNrYiBuZXR3b3JrIGhlYWRlci5cbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDAgICAgICAgIC0gdmFsaWQgTlMvTkE7IHRoZSBza2IgdHJhbnNwb3J0IGhlYWRlciBoYXMgYmVlbiBzZXQuXG4rICogKiAtRUlOVkFMICAtIGEgYnJva2VuIHBhY2tldCB3YXMgZGV0ZWN0ZWQsIGkuZS4gaXQgdmlvbGF0ZXMgc29tZVxuKyAqICAgICAgICAgICAgICBpbnRlcm5ldCBzdGFuZGFyZC5cbisgKiAqIC1FTk9NU0cgIC0gSVAgaGVhZGVyIHZhbGlkYXRpb24gc3VjY2VlZGVkIGJ1dCBpdCBpcyBub3QgYW4gSUNNUHY2XG4rICogICAgICAgICAgICAgIHBhY2tldC5cbisgKiAqIC1FTk9EQVRBIC0gSVArSUNNUHY2IGhlYWRlciB2YWxpZGF0aW9uIHN1Y2NlZWRlZCBidXQgaXQgaXMgbm90IGFcbisgKiAgICAgICAgICAgICAgTmVpZ2hib3IgU29saWNpdGF0aW9uIG9yIE5laWdoYm9yIEFkdmVydGlzZW1lbnQuXG4rICovXG4raW50IG5kaXNjX2NoZWNrX25zX25hKHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IG5kaXNjX2NoZWNrX2lwNmhkcihza2IpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IG5kaXNjX2NoZWNrX2ljbXB2Nihza2IpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBuZGlzY19jaGVja19uZF9tc2coc2tiKTtcbit9XG4rRVhQT1JUX1NZTUJPTChuZGlzY19jaGVja19uc19uYSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxNDoxOToyNi4yNDUxMDA1ODdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTE1MjI2Njg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIElQdjYgTmVpZ2hib3IgRGlzY292ZXJ5IFNub29waW5nIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIG1ha2luZyBjaGFuZ2VzIGFjcm9zcyBzZXZlcmFsIGZpbGVzIHJlbGF0ZWQgdG8gYnJpZGdpbmcgYW5kIElQdjYgbmVpZ2hib3IgZGlzY292ZXJ5LiBTcGVjaWZpY2FsbHksIGl0J3MgdG91Y2hpbmcgYG5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmNgLCBgbmV0L2JyaWRnZS9icl9kZXZpY2UuY2AsIGBuZXQvYnJpZGdlL2JyX2lucHV0LmNgLCBgbmV0L2JyaWRnZS9icl9wcml2YXRlLmhgLCBgbmV0L2lwdjYvTWFrZWZpbGVgLCBgbmV0L2lwdjYvbmRpc2MuY2AsIGFuZCBpbXBvcnRhbnRseSwgKmFkZHMqIGEgbmV3IGZpbGUgYG5ldC9pcHY2L25kaXNjX3Nub29wLmNgLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIG5ldyBmdW5jdGlvbmFsaXR5LCBhbmQgd2l0aCB0aGUgY2hhbmdlcyB0byB0aGUgZXhpc3RpbmcgZmlsZXMgSSBjYW4gYXNzdW1lIHRoaXMgaXMgYSBwcmV0dHkgdGhvcm91Z2ggcmV3b3JrIG9mIHRoZSB3YXkgYnJpZGdlIGRldmljZXMgaGFuZGxlIElQdjYgTkQgcGFja2V0cy5cblxuVGhlIHBhdGNoIHNlZW1zIHRvIGludHJvZHVjZSBhIG5ldyB2YWxpZGF0aW9uIGZ1bmN0aW9uLCBgbmRpc2NfY2hlY2tfbnNfbmFgLCB3aGljaCwgYmFzZWQgb24gdGhlIG5hbWUsIGlzIG1lYW50IHRvIHZhbGlkYXRlIElQdjYgTmVpZ2hib3IgU29saWNpdGF0aW9uIGFuZCBOZWlnaGJvciBBZHZlcnRpc2VtZW50IHBhY2tldHMuIEZ1cnRoZXJtb3JlLCB0aGUgb2xkIGBicl9pc19uZF9uZWlnaF9tc2dgIGxvZ2ljIGlzIHJlcGxhY2VkIGJ5IHRoaXMgbmV3IGZ1bmN0aW9uLiBUaGUgZnVuY3Rpb24gYG5kaXNjX3BhcnNlX29wdGlvbnNgIGlzIGFsc28gYmVpbmcgZXhwb3J0ZWQsIGFuZCB1c2VkIGluIGBicl9uZF9zZW5kYC5cblxuVGhpcyBpcyBhbGwgZnVuY3Rpb25hbCBjb2RlLCBpdCdzIHJlYWNoYWJsZSB2aWEgYnJpZGdlIGRldmljZXMsIGFuZCBJUHY2IE5EIHBhY2tldHMuIExvb2tzIGxpa2UgYSBncmVhdCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBmYWN0IHRoYXQgdGhleSd2ZSByZXBsYWNlZCBhIHByZXZpb3VzIGJsb2NrIG9mIGNvZGUgaXMgYSBncmVlbiBsaWdodCB0byBzdGFydC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgbmV3IGNvZGUgaXMgaW4gYG5ldC9pcHY2L25kaXNjX3Nub29wLmNgLCBhbmQgdGhhdCdzIGNvbXBpbGVkIGlmIGBDT05GSUdfSVBWNmAgaXMgZW5hYmxlZC4gTGV0J3MgbWFrZSBzdXJlLCBsb29raW5nIGF0IGBuZXQvaXB2Ni9NYWtlZmlsZWA6XG5cbmBgYG1ha2VmaWxlXG5pZm5lcSAoJChDT05GSUdfSVBWNiksKVxub2JqLXkgKz0gbWNhc3Rfc25vb3AubyBuZGlzY19zbm9vcC5vXG5gYGBcblxuWWVwLCBgbmRpc2Nfc25vb3Aub2AgaXMgYmVpbmcgaW5jbHVkZWQgd2hlbiBgQ09ORklHX0lQVjZgIGlzIHNldC5cblxuQnV0IHdoYXQgYWJvdXQgdGhlIGJyaWRnZSBzaWRlPyBUaGUgY2hhbmdlcyB0byBgYnJfYXJwX25kX3Byb3h5LmNgIGFyZSBrZXkuIExvb2tpbmcgYXQgdGhhdCBmaWxlLCBJIHNlZSBgI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpYCBhcm91bmQgdGhlIE5EIHByb3h5IGxvZ2ljLiBUaGF0IG1lYW5zIHdlIGFic29sdXRlbHkgbmVlZCBgQ09ORklHX0JSSURHRWAgKmFuZCogYENPTkZJR19JUFY2YCBlbmFibGVkLlxuXG5UbyBiZSBleHRyYSBjZXJ0YWluLCBJIHNob3VsZCBjaGVjayB0aGUgTWFrZWZpbGUgaW4gYG5ldC9icmlkZ2VgIHRvIG1ha2Ugc3VyZSBgYnJfYXJwX25kX3Byb3h5LmNgIGlzIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHkuIEknbGwganVzdCB1c2UgYHJlYWQtZmlsZWAgb24gYG5ldC9icmlkZ2UvTWFrZWZpbGVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjczLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTQ6MTk6MzMuMTYwMzI5NzUzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgSUVFRSA4MDIuMWQgZXRoZXJuZXQgYnJpZGdpbmcgbGF5ZXIuXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai0kKENPTkZJR19CUklER0UpICs9IGJyaWRnZS5vXFxuICAgNzpcXHRcXG4gICA4OlxcdGJyaWRnZS15XFx0Oj0gYnIubyBicl9kZXZpY2UubyBicl9mZGIubyBicl9mb3J3YXJkLm8gYnJfaWYubyBicl9pbnB1dC5vIFxcXFxcXG4gICA5OlxcdFxcdFxcdFxcdGJyX2lvY3RsLm8gYnJfc3RwLm8gYnJfc3RwX2JwZHUubyBcXFxcXFxuICAxMDpcXHRcXHRcXHRcXHRicl9zdHBfaWYubyBicl9zdHBfdGltZXIubyBicl9uZXRsaW5rLm8gXFxcXFxcbiAgMTE6XFx0XFx0XFx0XFx0YnJfbmV0bGlua190dW5uZWwubyBicl9hcnBfbmRfcHJveHkub1xcbiAgMTI6XFx0XFxuICAxMzpcXHRicmlkZ2UtJChDT05GSUdfU1lTRlMpICs9IGJyX3N5c2ZzX2lmLm8gYnJfc3lzZnNfYnIub1xcbiAgMTQ6XFx0XFxuICAxNTpcXHRicmlkZ2UtJChzdWJzdCBtLHksJChDT05GSUdfQlJJREdFX05FVEZJTFRFUikpICs9IGJyX25mX2NvcmUub1xcbiAgMTY6XFx0XFxuICAxNzpcXHRicl9uZXRmaWx0ZXIteSA6PSBicl9uZXRmaWx0ZXJfaG9va3Mub1xcbiAgMTg6XFx0YnJfbmV0ZmlsdGVyLSQoc3Vic3QgbSx5LCQoQ09ORklHX0lQVjYpKSArPSBicl9uZXRmaWx0ZXJfaXB2Ni5vXFxuICAxOTpcXHRvYmotJChDT05GSUdfQlJJREdFX05FVEZJTFRFUikgKz0gYnJfbmV0ZmlsdGVyLm9cXG4gIDIwOlxcdFxcbiAgMjE6XFx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HKSArPSBicl9tdWx0aWNhc3QubyBicl9tZGIubyBicl9tdWx0aWNhc3RfZWh0Lm9cXG4gIDIyOlxcdFxcbiAgMjM6XFx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklORykgKz0gYnJfdmxhbi5vIGJyX3ZsYW5fdHVubmVsLm8gYnJfdmxhbl9vcHRpb25zLm8gYnJfbXN0Lm9cXG4gIDI0OlxcdFxcbiAgMjU6XFx0YnJpZGdlLSQoQ09ORklHX05FVF9TV0lUQ0hERVYpICs9IGJyX3N3aXRjaGRldi5vXFxuICAyNjpcXHRcXG4gIDI3OlxcdG9iai0kKENPTkZJR19ORVRGSUxURVIpICs9IG5ldGZpbHRlci9cXG4gIDI4OlxcdFxcbiAgMjk6XFx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9NUlApXFx0Kz0gYnJfbXJwX3N3aXRjaGRldi5vIGJyX21ycC5vIGJyX21ycF9uZXRsaW5rLm9cXG4gIDMwOlxcdFxcbiAgMzE6XFx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9DRk0pXFx0Kz0gYnJfY2ZtLm8gYnJfY2ZtX25ldGxpbmsub1xcbiAgMzI6XFx0XFxuICAzMzpcXHRpZmRlZiBDT05GSUdfR0NPVl9QUk9GSUxFX05FVEZJTFRFUlxcbiAgMzQ6XFx0R0NPVl9QUk9GSUxFX2JyX25mX2NvcmUubyA6PSB5XFxuICAzNTpcXHRHQ09WX1BST0ZJTEVfYnJfbmV0ZmlsdGVyX2hvb2tzLm8gOj0geVxcbiAgMzY6XFx0R0NPVl9QUk9GSUxFX2JyX25ldGZpbHRlcl9pcHY2Lm8gOj0geVxcbiAgMzc6XFx0ZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTQ6MTk6MzMuMTYwNDI4MTI0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA0MTA3OTkyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBORCBQcm94eWluZyBpbiBCcmlkZ2VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGJyX2FycF9uZF9wcm94eS5vYCBpcyBhbHdheXMgYnVpbHQgd2hlbiBgQ09ORklHX0JSSURHRWAgaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBzZW5zZS4gRGl2aW5nIGludG8gYGJyX2FycF9uZF9wcm94eS5jYCwgSSBzZWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gd2l0aCBgI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpYCBmb3IgdGhlIE5EIHByb3h5IGZ1bmN0aW9uYWxpdHkuIFRoZXJlZm9yZSwgd2UgY2xlYXJseSBuZWVkIGJvdGggYEJSSURHRWAgYW5kIGBJUFY2YCBjb25maWd1cmVkIGZvciB0aGlzIHRvIHdvcmsgYXMgaW50ZW5kZWQuXG5cbk5vdywgbGV0J3Mgem9vbSBpbiBvbiB0aGUgcmVsZXZhbnQgc3ltYm9scy4gSSBoYWQgYSBsaXN0IHN0YXJ0aW5nIHdpdGggYG5kaXNjX2NoZWNrX25zX25hYCwgYGJyX2lzX25kX25laWdoX21zZ2AsIGBicl9uZF9zZW5kYCwgYG5kaXNjX2NoZWNrX2lwNmhkcmAsIGBuZGlzY19jaGVja19pY21wdjZgLCBgbmRpc2NfY2hlY2tfb3B0aW9uc2AsIGFuZCBgbmRpc2NfY2hlY2tfbmRfbXNnYC4gSG93ZXZlciwgd2FpdCBhIG1pbnV0ZS4uLiBJIG5vdyByZWNhbGwgdGhhdCB0aGUgYG5kaXNjX2NoZWNrXypgIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBuZGlzY19jaGVja19pcDZoZHJgLCBgbmRpc2NfY2hlY2tfaWNtcHY2YCwgYG5kaXNjX2NoZWNrX29wdGlvbnNgLCBhbmQgYG5kaXNjX2NoZWNrX25kX21zZ2AgYXJlIGFsbCBzdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgbmV0L2lwdjYvbmRpc2Nfc25vb3AuY2AuIFNvIHRoZXkgYXJlbid0IHBhcnQgb2YgdGhlIGV4cG9zZWQgaW50ZXJmYWNlLiBUaGVyZWZvcmUsIEkgY2FuIHNhZmVseSByZW1vdmUgdGhlbSBmcm9tIHRoZSBsaXN0LCBiZWNhdXNlIHRoZXkgYXJlIG5vdCBleHRlcm5hbGx5IGxpbmtlZC5cblxuSSAqY2FuKiBsaXN0IGBuZGlzY19jaGVja19uc19uYWAgYmVjYXVzZSB0aGF0J3MgZXhwb3J0ZWQuIEFsc28sIGBicl9pc19uZF9uZWlnaF9tc2dgIGFuZCBgYnJfbmRfc2VuZGAgYXJlIGxvY2F0ZWQgaW4gYG5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmNgLCBzbyB0aG9zZSBhcmUgcmVsZXZhbnQgYXMgd2VsbC5cblxuVG8gdmVyaWZ5IG15IGFzc3VtcHRpb25zLCBsZXQgbWUgcmVjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGhlIHBhdGNoIGFsdGVycyBgbmV0L2lwdjYvbmRpc2Nfc25vb3AuY2AsIHdoaWNoLCBhcyB3ZSBrbm93LCByZXF1aXJlcyBgQ09ORklHX0lQVjZgLiBBZGRpdGlvbmFsbHksIHRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBuZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jYCwgYW5kIHRoYXQgb2J2aW91c2x5IGRlbWFuZHMgYENPTkZJR19CUklER0VgLiBTbywgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IHN0YW5kczogYEJSSURHRWAgYW5kIGBJUFY2YCBhcmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy5cblxuTGV0J3MgY2hlY2sgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgZm9yIGEgc2Vjb25kLiBgYnJfbmRfc2VuZGAgaXMgc3RhdGljLCB3aGljaCBpcyBnb29kIHRvIGtub3csIGFuZCBgYnJfaXNfbmRfbmVpZ2hfbXNnYCBpcyBub3Qgc3RhdGljLiBUaGF0J3MgYSBnb29kIGRpc3RpbmN0aW9uIHRvIG1ha2UuIGBuZGlzY19jaGVja19uc19uYWAgaXMgZGVmaW5pdGVseSBleHBvcnRlZC5cblxuVGhlcmVmb3JlLCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGFuYWx5c2lzLCBJIHdpbGwgbGlzdCBvbmx5IHRoZSBmb2xsb3dpbmcgdGhyZWUgc3ltYm9sczpcblxuKiAgIGBuZGlzY19jaGVja19uc19uYWBcbiogICBgYnJfaXNfbmRfbmVpZ2hfbXNnYFxuKiAgIGBicl9uZF9zZW5kYFxuXG5GaW5hbGx5LCBsZXQncyBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGJyX2lzX25kX25laWdoX21zZ2AgaXNuJ3QgY2FsbGVkIGZyb20gYW55d2hlcmUgdW5leHBlY3RlZC4gVGhhdCdzIGFsd2F5cyBhIGdvb2QgcHJhY3RpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzODMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxNDoxOTo0MC4yMDE1MTAxNDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM3OTYwOTM2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9pc19uZF9uZWlnaF9tc2dcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYz0xMjU9dm9pZCBicl9kb19wcm94eV9zdXBwcmVzc19hcnAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy0yMzctI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzoyMzg6c3RydWN0IG5kX21zZyAqYnJfaXNfbmRfbmVpZ2hfbXNnKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy0yMzkte1xcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0zMD1uZXRkZXZfdHhfdCBicl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy04NC1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjg1OlxcdFxcdFxcdG1zZyA9IGJyX2lzX25kX25laWdoX21zZyhza2IpO1xcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtODYtXFx0XFx0XFx0aWYgKG1zZylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz03Nj1pbnQgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0xODAtXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjE4MTpcXHRcXHRcXHRtc2cgPSBicl9pc19uZF9uZWlnaF9tc2coc2tiKTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMTgyLVxcdFxcdFxcdGlmIChtc2cpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0yMzYyPXZvaWQgYnJfZG9fc3VwcHJlc3NfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTIzNjMtXFx0XFx0ICAgICAgIHUxNiB2aWQsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBuZF9tc2cgKm1zZyk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MjM2NDpzdHJ1Y3QgbmRfbXNnICpicl9pc19uZF9uZWlnaF9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjM2NS1ib29sIGJyX2lzX25laWdoX3N1cHByZXNzX2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IHZpZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDE0OjE5OjQ0LjU4MTE4Nzk0MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTI1NjgyNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgUmVhY2hhYmlsaXR5IGluIHRoZSBCcmlkZ2luZyBDb2RlKipcblxuQWxyaWdodCwgc28gdGhlIGNhbGwgc3RhY2sgaGFzIGxlZCBtZSBoZXJlLiBJdCdzIGNvbmZpcm1lZDogdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uLCB0aGF0J3MgaXQsIEkgc2VlLCBJJ3ZlIGdvdCBpdC4gSXQncyBjYWxsZWQgZnJvbSBib3RoIGBicl9kZXZfeG1pdGAgYW5kIGBicl9oYW5kbGVfZnJhbWVfZmluaXNoYC4gR29vZCwgdGhhdCBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIG9mIHdoZXJlIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyB1dGlsaXplZC4gV2UndmUgZ290IGEgZGVmaW5pdGUgcGF0aCwgd2hpY2ggbWVhbnMgdGhpcyBjb2RlIHBhdGggaXMgZGVmaW5pdGVseSBsaXZlLlxuXG5Ob3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byB1bmRlcnN0YW5kIHRoaXMgaW50ZXJhY3Rpb24gaXMgdG8gZXhhbWluZSB0aGUgYGJyX25kX3NlbmRgIGZ1bmN0aW9uLiBJIHdpbGwgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIHRvIGNvbmZpcm0gaXRzIG9wZXJhdGlvbiBhbmQgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDM0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTQ6MTk6NDcuNjczNzU4NjQzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzA4OTQxNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfbmRfc2VuZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jPTIzOD1zdHJ1Y3QgbmRfbXNnICpicl9pc19uZF9uZWlnaF9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMjQ4LVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM6MjQ5OnN0YXRpYyB2b2lkIGJyX25kX3NlbmQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMjUwLVxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVxdWVzdCwgc3RydWN0IG5laWdoYm91ciAqbixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM9NDEwPXZvaWQgYnJfZG9fc3VwcHJlc3NfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy00ODMtXFx0XFx0XFx0XFx0aWYgKHZpZCAhPSAwKVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM6NDg0OlxcdFxcdFxcdFxcdFxcdGJyX25kX3NlbmQoYnIsIHAsIHNrYiwgbixcXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTQ4NS1cXHRcXHRcXHRcXHRcXHRcXHQgICBza2ItXFx1MDAzZXZsYW5fcHJvdG8sXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTQ4Ny1cXHRcXHRcXHRcXHRlbHNlXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzo0ODg6XFx0XFx0XFx0XFx0XFx0YnJfbmRfc2VuZChiciwgcCwgc2tiLCBuLCAwLCAwKTtcXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTQ4OS1cXHRcXHRcXHRcXHRyZXBsaWVkID0gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTQ6MTk6NTIuMjQ0NjU4MzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjg5MzU4MTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUmF0aW9uYWxlOiBJUHY2IE5laWdoYm9yIERpc2NvdmVyeSBTbm9vcGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIGJlZW4gdHJpZ2dlcmVkIGJ5IGBicl9kb19zdXBwcmVzc19uZGAuIEkgc2VlIGl0IGludHJvZHVjZXMgYG5ldC9pcHY2L25kaXNjX3Nub29wLmNgIHdoaWNoIGluY2x1ZGVzIHRoZSBuZXcgZnVuY3Rpb24gYG5kaXNjX2NoZWNrX25zX25hYC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgaXQncyBhIGRlZGljYXRlZCB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBJUHY2IE5laWdoYm9yIFNvbGljaXRhdGlvbiAoTlMpIGFuZCBBZHZlcnRpc2VtZW50IChOQSkgcGFja2V0cy4gVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgYnJfaXNfbmRfbmVpZ2hfbXNnYCBhbmQgYGJyX25kX3NlbmRgIGluIGBuZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jYCwgc28gaXQncyBpbnRlZ3JhdGluZyB0aGlzIG5ldyB2YWxpZGF0aW9uIGxvZ2ljIGludG8gdGhlIGJyaWRnZSBORCBwcm94eS5cblxuR2l2ZW4gdGhhdCB0aGlzIGludm9sdmVzIG5ldywgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCdzIGdvaW5nIHRvIGJlIGhhbmRsaW5nIHBvdGVudGlhbGx5IHVudHJ1c3RlZCBuZXR3b3JrIHRyYWZmaWMsIG15IGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzICpkZWZpbml0ZWx5KiBXb3J0aEZ1enppbmcuIFRoZSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UgaXMgY2xlYXI6IG1hbGZvcm1lZCBOUy9OQSBwYWNrZXRzIGNvdWxkIGxlYWQgdG8gdmFyaW91cyBpc3N1ZXMuIE15IGZvY3VzIHdpbGwgYmUgb24gYG5kaXNjX2NoZWNrX25zX25hYCwgYGJyX2lzX25kX25laWdoX21zZ2AsIGFuZCBgYnJfbmRfc2VuZGAuIFRoZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24gcmVxdWlyZXMgdGhhdCBib3RoIGBCUklER0VgIGFuZCBgSVBWNmAgYXJlIGVuYWJsZWQsIGdpdmVuIHRoZSBmdW5jdGlvbmFsIHNjb3BlIG9mIHRoZSBwYXRjaCBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgbmV0d29yayBwcm90b2NvbHMuIEl0J3MgYSBwcmltZSB0YXJnZXQgZm9yIGZpbmRpbmcgc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGVycm9ycyByZWxhdGVkIHRvIElQdjYgTkQgcHJveHkgYmVoYXZpb3VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYzMiwiT3V0cHV0VG9rZW5zIjoxMjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTQ6MTk6NTcuNTM0MDE5MTkxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4MjM3ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZGlzY19jaGVja19uc19uYVwiLFxuICAgIFwiYnJfaXNfbmRfbmVpZ2hfbXNnXCIsXG4gICAgXCJicl9uZF9zZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgbmRpc2NfY2hlY2tfbnNfbmFgIHRvIHZhbGlkYXRlIElQdjYgTmVpZ2hib3IgU29saWNpdGF0aW9uIGFuZCBBZHZlcnRpc2VtZW50IHBhY2tldHMsIGFuZCB1cGRhdGVzIHRoZSBicmlkZ2UgTkQgcHJveHkgY29kZSB0byB1c2UgaXQuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBwcm9jZXNzZXMgdW50cnVzdGVkIG5ldHdvcmsgcGFja2V0cyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZGlzY19jaGVja19uc19uYVwiLFxuICAgIFwiYnJfaXNfbmRfbmVpZ2hfbXNnXCIsXG4gICAgXCJicl9uZF9zZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgbmRpc2NfY2hlY2tfbnNfbmFgIHRvIHZhbGlkYXRlIElQdjYgTmVpZ2hib3IgU29saWNpdGF0aW9uIGFuZCBBZHZlcnRpc2VtZW50IHBhY2tldHMsIGFuZCB1cGRhdGVzIHRoZSBicmlkZ2UgTkQgcHJveHkgY29kZSB0byB1c2UgaXQuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBwcm9jZXNzZXMgdW50cnVzdGVkIG5ldHdvcmsgcGFja2V0cyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowhzkpm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-19 13:48:58 +0000 UTC FinishedAt: 2026-07-19 14:19:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ce6b4d3216b63f902bb8e9695ee6c10c83415f65", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ce6b4d3216b63f902bb8e9695ee6c10c83415f65", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "IPV6" ], "series_id": "ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ndisc_check_ns_na", "br_is_nd_neigh_msg", "br_nd_send" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE5IDE0OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmRpc2NfY2hlY2tfbnNfbmEmIzM0OywKICAgICYjMzQ7YnJfaXNfbmRfbmVpZ2hfbXNnJiMzNDssCiAgICAmIzM0O2JyX25kX3NlbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgbmRpc2NfY2hlY2tfbnNfbmFgIHRvIHZhbGlkYXRlIElQdjYgTmVpZ2hib3IgU29saWNpdGF0aW9uIGFuZCBBZHZlcnRpc2VtZW50IHBhY2tldHMsIGFuZCB1cGRhdGVzIHRoZSBicmlkZ2UgTkQgcHJveHkgY29kZSB0byB1c2UgaXQuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBwcm9jZXNzZXMgdW50cnVzdGVkIG5ldHdvcmsgcGFja2V0cyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAxNDoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRlZWVhNjIxODI1MjczYWViNTk2ZmIyMjE2ZWU0YTFkMDU0MmIzYjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxOSAxNDoxOToyMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZGlzYy5oIGIvaW5jbHVkZS9uZXQvbmRpc2MuaFxuaW5kZXggM2RhMWE2ZjhkM2Y5MjAuLjllNTM3OWFkMmQ4ZTAwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbmRpc2MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmRpc2MuaFxuQEAgLTQzMCw2ICYjNDM7NDMwLDggQEAgdm9pZCBuZGlzY191cGRhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsXG4gXHRcdCAgY29uc3QgdTggKmxsYWRkciwgdTggbmV3LCB1MzIgZmxhZ3MsIHU4IGljbXA2X3R5cGUsXG4gXHRcdCAgc3RydWN0IG5kaXNjX29wdGlvbnMgKm5kb3B0cyk7XG4gXG4mIzQzO2ludCBuZGlzY19jaGVja19uc19uYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiYjNDM7XG4gLypcbiAgKlx0SUdNUFxuICAqL1xuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMgYi9uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jXG5pbmRleCAyM2ViNjkzMWEyYjRhZC4uNzg2M2JlYWUwYzU1NWQgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jXG5AQCAtMTksNiAmIzQzOzE5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvYWRkcmNvbmYuaFx1MDAzZVxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcDZfY2hlY2tzdW0uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvbmRpc2MuaFx1MDAzZVxuICNlbmRpZlxuIFxuICNpbmNsdWRlIFwmIzM0O2JyX3ByaXZhdGUuaFwmIzM0O1xuQEAgLTIzNCwyMSAmIzQzOzIzNSwxNSBAQCB2b2lkIGJyX2RvX3Byb3h5X3N1cHByZXNzX2FycChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4gI2VuZGlmXG4gXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4tc3RydWN0IG5kX21zZyAqYnJfaXNfbmRfbmVpZ2hfbXNnKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZF9tc2cgKm1zZylcbiYjNDM7c3RydWN0IG5kX21zZyAqYnJfaXNfbmRfbmVpZ2hfbXNnKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IG5kX21zZyAqbTtcbi1cbi1cdG0gPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBza2JfbmV0d29ya19vZmZzZXQoc2tiKSAmIzQzO1xuLVx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLCBzaXplb2YoKm1zZyksIG1zZyk7XG4tXHRpZiAoIW0pXG4mIzQzO1x0aWYgKG5kaXNjX2NoZWNrX25zX25hKHNrYikpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0aWYgKG0tXHUwMDNlaWNtcGguaWNtcDZfY29kZSAhPSAwIHx8XG4tXHQgICAgKG0tXHUwMDNlaWNtcGguaWNtcDZfdHlwZSAhPSBORElTQ19ORUlHSEJPVVJfU09MSUNJVEFUSU9OIFx1MDAyNlx1MDAyNlxuLVx0ICAgICBtLVx1MDAzZWljbXBoLmljbXA2X3R5cGUgIT0gTkRJU0NfTkVJR0hCT1VSX0FEVkVSVElTRU1FTlQpKVxuJiM0MztcdGlmIChza2JfbGluZWFyaXplKHNrYikpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0cmV0dXJuIG07XG4mIzQzO1x0cmV0dXJuIChzdHJ1Y3QgbmRfbXNnICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYnJfbmRfc2VuZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG5AQCAtMjU3LDE3ICYjNDM7MjUyLDE4IEBAIHN0YXRpYyB2b2lkIGJyX25kX3NlbmQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSByZXF1ZXN0LVx1MDAzZWRldjtcbiBcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnO1xuJiM0MztcdHN0cnVjdCBuZGlzY19vcHRpb25zIG5kb3B0cztcbiBcdHN0cnVjdCBuZF9tc2cgKm5hLCAqbnM7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7XG4gXHRzdHJ1Y3QgaXB2NmhkciAqcGlwNjtcbiBcdGludCBuYV9vbGVuID0gODsgLyogb3B0IGhkciAmIzQzOyBFVEhfQUxFTiBmb3IgdGFyZ2V0ICovXG4gXHRpbnQgbnNfb2xlbjtcbi1cdGludCBpLCBsZW47XG4gXHR1OCAqZGFkZHI7XG4gXHRib29sIGRhZDtcbiBcdHUxNiBwdmlkO1xuJiM0MztcdGludCBsZW47XG4gXG4tXHRpZiAoIWRldiB8fCBza2JfbGluZWFyaXplKHJlcXVlc3QpKVxuJiM0MztcdGlmICghZGV2KVxuIFx0XHRyZXR1cm47XG4gXG4gXHRsZW4gPSBMTF9SRVNFUlZFRF9TUEFDRShkZXYpICYjNDM7IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgJiM0MztcbkBAIC0yODQsMjMgJiM0MzsyODAsMjMgQEAgc3RhdGljIHZvaWQgYnJfbmRfc2VuZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4gXHRza2Jfc2V0X21hY19oZWFkZXIocmVwbHksIDApO1xuIFxuIFx0ZGFkZHIgPSBldGhfaGRyKHJlcXVlc3QpLVx1MDAzZWhfc291cmNlO1xuLVx0bnMgPSAoc3RydWN0IG5kX21zZyAqKShza2JfbmV0d29ya19oZWFkZXIocmVxdWVzdCkgJiM0Mztcbi1cdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4tXG4tXHQvKiBEbyB3ZSBuZWVkIG9wdGlvbiBwcm9jZXNzaW5nID8gKi9cbi1cdG5zX29sZW4gPSByZXF1ZXN0LVx1MDAzZWxlbiAtIChza2JfbmV0d29ya19vZmZzZXQocmVxdWVzdCkgJiM0Mztcbi1cdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkgLSBzaXplb2YoKm5zKTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5zX29sZW4gLSAxOyBpICYjNDM7PSAobnMtXHUwMDNlb3B0W2kgJiM0MzsgMV0gXHUwMDNjXHUwMDNjIDMpKSB7XG4tXHRcdGlmICghbnMtXHUwMDNlb3B0W2kgJiM0MzsgMV0gfHwgaSAmIzQzOyAobnMtXHUwMDNlb3B0W2kgJiM0MzsgMV0gXHUwMDNjXHUwMDNjIDMpIFx1MDAzZSBuc19vbGVuKSB7XG4tXHRcdFx0a2ZyZWVfc2tiKHJlcGx5KTtcbi1cdFx0XHRyZXR1cm47XG4tXHRcdH1cbi1cdFx0aWYgKG5zLVx1MDAzZW9wdFtpXSA9PSBORF9PUFRfU09VUkNFX0xMX0FERFIpIHtcbi1cdFx0XHRpZiAoKG5zLVx1MDAzZW9wdFtpICYjNDM7IDFdIFx1MDAzY1x1MDAzYyAzKSBcdTAwM2U9XG4tXHRcdFx0ICAgIHNpemVvZihzdHJ1Y3QgbmRfb3B0X2hkcikgJiM0MzsgRVRIX0FMRU4pXG4tXHRcdFx0XHRkYWRkciA9IG5zLVx1MDAzZW9wdCAmIzQzOyBpICYjNDM7IHNpemVvZihzdHJ1Y3QgbmRfb3B0X2hkcik7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbiYjNDM7XHRucyA9IChzdHJ1Y3QgbmRfbXNnICopc2tiX3RyYW5zcG9ydF9oZWFkZXIocmVxdWVzdCk7XG4mIzQzO1xuJiM0MztcdC8qIERlcml2ZSB0aGUgb3B0aW9uIGxlbmd0aCBmcm9tIHRoZSBJUHY2IHBheWxvYWQgbGVuZ3RoIHNvIHRoYXQgYW55XG4mIzQzO1x0ICogdHJhaWxpbmcgTDIgcGFkZGluZyBpbiB0aGUgc2tiIGlzIG5vdCBwYXJzZWQgYXMgTkQgb3B0aW9ucy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRuc19vbGVuID0gbnRvaHMoaXB2Nl9oZHIocmVxdWVzdCktXHUwMDNlcGF5bG9hZF9sZW4pIC0gc2l6ZW9mKCpucyk7XG4mIzQzO1x0aWYgKCFuZGlzY19wYXJzZV9vcHRpb25zKGRldiwgbnMtXHUwMDNlb3B0LCBuc19vbGVuLCBcdTAwMjZuZG9wdHMpKSB7XG4mIzQzO1x0XHRrZnJlZV9za2IocmVwbHkpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG5kb3B0cy5uZF9vcHRzX3NyY19sbGFkZHIpIHtcbiYjNDM7XHRcdHU4ICpsbGFkZHI7XG4mIzQzO1xuJiM0MztcdFx0bGxhZGRyID0gbmRpc2Nfb3B0X2FkZHJfZGF0YShuZG9wdHMubmRfb3B0c19zcmNfbGxhZGRyLCBkZXYpO1xuJiM0MztcdFx0aWYgKGxsYWRkcilcbiYjNDM7XHRcdFx0ZGFkZHIgPSBsbGFkZHI7XG4gXHR9XG4gXG4gXHRkYWQgPSBpcHY2X2FkZHJfYW55KFx1MDAyNmlwdjZfaGRyKHJlcXVlc3QpLVx1MDAzZXNhZGRyKTtcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xuaW5kZXggZTdmMzQzYWIyMmQzNzkuLmZmNTVkYWI3MzYzMjZiIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xuQEAgLTgwLDkgJiM0Mzs4MCw5IEBAIG5ldGRldl90eF90IGJyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdCAgIHBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICYjNDM7XG4gXHRcdFx0XHQgc2l6ZW9mKHN0cnVjdCBuZF9tc2cpKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgaXB2Nl9oZHIoc2tiKS1cdTAwM2VuZXh0aGRyID09IElQUFJPVE9fSUNNUFY2KSB7XG4tXHRcdFx0c3RydWN0IG5kX21zZyAqbXNnLCBfbXNnO1xuJiM0MztcdFx0XHRzdHJ1Y3QgbmRfbXNnICptc2c7XG4gXG4tXHRcdFx0bXNnID0gYnJfaXNfbmRfbmVpZ2hfbXNnKHNrYiwgXHUwMDI2X21zZyk7XG4mIzQzO1x0XHRcdG1zZyA9IGJyX2lzX25kX25laWdoX21zZyhza2IpO1xuIFx0XHRcdGlmIChtc2cpXG4gXHRcdFx0XHRicl9kb19zdXBwcmVzc19uZChza2IsIGJyLCB2aWQsIE5VTEwsIG1zZyk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jXG5pbmRleCBkZGI4ZjAwMmE0MGU4Mi4uZDg3YTVmOWZhOTJiNzAgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX2lucHV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xuQEAgLTE3Niw5ICYjNDM7MTc2LDkgQEAgaW50IGJyX2hhbmRsZV9mcmFtZV9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2JcbiBcdFx0ICAgcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgJiM0MztcbiBcdFx0XHRcdCBzaXplb2Yoc3RydWN0IG5kX21zZykpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICBpcHY2X2hkcihza2IpLVx1MDAzZW5leHRoZHIgPT0gSVBQUk9UT19JQ01QVjYpIHtcbi1cdFx0XHRzdHJ1Y3QgbmRfbXNnICptc2csIF9tc2c7XG4mIzQzO1x0XHRcdHN0cnVjdCBuZF9tc2cgKm1zZztcbiBcbi1cdFx0XHRtc2cgPSBicl9pc19uZF9uZWlnaF9tc2coc2tiLCBcdTAwMjZfbXNnKTtcbiYjNDM7XHRcdFx0bXNnID0gYnJfaXNfbmRfbmVpZ2hfbXNnKHNrYik7XG4gXHRcdFx0aWYgKG1zZylcbiBcdFx0XHRcdGJyX2RvX3N1cHByZXNzX25kKHNrYiwgYnIsIHZpZCwgcCwgbXNnKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaCBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXG5pbmRleCBkNTVlYTk1MTZlM2UzNi4uMTZlZDA5ZWJmZmMzY2YgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcbkBAIC0yMzYxLDcgJiM0MzsyMzYxLDcgQEAgdm9pZCBicl9kb19wcm94eV9zdXBwcmVzc19hcnAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0XHRcdCAgICAgIHUxNiB2aWQsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApO1xuIHZvaWQgYnJfZG9fc3VwcHJlc3NfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0XHQgICAgICAgdTE2IHZpZCwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IG5kX21zZyAqbXNnKTtcbi1zdHJ1Y3QgbmRfbXNnICpicl9pc19uZF9uZWlnaF9tc2coY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5kX21zZyAqbSk7XG4mIzQzO3N0cnVjdCBuZF9tc2cgKmJyX2lzX25kX25laWdoX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBib29sIGJyX2lzX25laWdoX3N1cHByZXNzX2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IHZpZCk7XG4gYm9vbCBicl9pc19uZWlnaF9mb3J3YXJkX2dyYXRfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgdmlkKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9NYWtlZmlsZSBiL25ldC9pcHY2L01ha2VmaWxlXG5pbmRleCA1YjBjZDY0ODgwMjEyNC4uY2Y1ZTAxZjgzY2UzZDAgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvTWFrZWZpbGVcbkBAIC01MSw3ICYjNDM7NTEsNyBAQCBvYmotJChzdWJzdCBtLHksJChDT05GSUdfSVBWNikpICYjNDM7PSBpbmV0Nl9oYXNodGFibGVzLm9cbiBcbiBpZm5lcSAoJChDT05GSUdfSVBWNiksKVxuIG9iai0kKENPTkZJR19ORVRfVURQX1RVTk5FTCkgJiM0Mzs9IGlwNl91ZHBfdHVubmVsLm9cbi1vYmoteSAmIzQzOz0gbWNhc3Rfc25vb3Aub1xuJiM0MztvYmoteSAmIzQzOz0gbWNhc3Rfc25vb3AubyBuZGlzY19zbm9vcC5vXG4gb2JqLSQoQ09ORklHX1RDUF9BTykgJiM0Mzs9IHRjcF9hby5vXG4gZW5kaWZcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuY1xuaW5kZXggZjg2N2VjOGQzZDkwNTEuLmQ4YjQ1ODhmNmJmZjkyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvbmRpc2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmRpc2MuY1xuQEAgLTI4Myw2ICYjNDM7MjgzLDcgQEAgc3RydWN0IG5kaXNjX29wdGlvbnMgKm5kaXNjX3BhcnNlX29wdGlvbnMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdH1cbiBcdHJldHVybiBuZG9wdHM7XG4gfVxuJiM0MztFWFBPUlRfU1lNQk9MKG5kaXNjX3BhcnNlX29wdGlvbnMpO1xuIFxuIGludCBuZGlzY19tY19tYXAoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLCBjaGFyICpidWYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkaXIpXG4ge1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25kaXNjX3Nub29wLmMgYi9uZXQvaXB2Ni9uZGlzY19zbm9vcC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmE5M2VlZDI3YTFmNmQ3XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZGlzY19zbm9vcC5jXG5AQCAtMCwwICYjNDM7MSwxOTAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2FkZHJjb25mLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9jaGVja3N1bS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9pcHY2LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L25kaXNjLmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbmRpc2NfY2hlY2tfaXA2aGRyKHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCBsZW47XG4mIzQzO1xuJiM0MztcdG9mZnNldCA9IHNrYl9uZXR3b3JrX29mZnNldChza2IpICYjNDM7IHNpemVvZigqaXA2aCk7XG4mIzQzO1x0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgb2Zmc2V0KSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpcDZoID0gaXB2Nl9oZHIoc2tiKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlwNmgtXHUwMDNldmVyc2lvbiAhPSA2KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChpcDZoLVx1MDAzZW5leHRoZHIgIT0gSVBQUk9UT19JQ01QVjYpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01TRztcbiYjNDM7XG4mIzQzO1x0LyogUkZDIDQ4NjEgNy4xLjEgLyA3LjEuMjogbXVzdCBub3QgaGF2ZSBiZWVuIGZvcndhcmRlZCBieSBhIHJvdXRlciAqL1xuJiM0MztcdGlmIChpcDZoLVx1MDAzZWhvcF9saW1pdCAhPSAyNTUpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0bGVuID0gb2Zmc2V0ICYjNDM7IG50b2hzKGlwNmgtXHUwMDNlcGF5bG9hZF9sZW4pO1xuJiM0MztcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBsZW4gfHwgbGVuIFx1MDAzYz0gb2Zmc2V0KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIG9mZnNldCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19zdW0xNiBuZGlzY192YWxpZGF0ZV9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHNrYl9jaGVja3N1bV92YWxpZGF0ZShza2IsIElQUFJPVE9fSUNNUFY2LCBpcDZfY29tcHV0ZV9wc2V1ZG8pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG5kaXNjX2NoZWNrX2ljbXB2NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGxlbiA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpY21wNmhkcik7XG4mIzQzO1x0dW5zaWduZWQgaW50IHRyYW5zcG9ydF9sZW4gPSBpcHY2X3RyYW5zcG9ydF9sZW4oc2tiKTtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2NoaztcbiYjNDM7XHRzdHJ1Y3QgaWNtcDZoZHIgKmhkcjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgbGVuKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHQvKiBSRkMgNDg2MSA3LjEuMSAvIDcuMS4yOiB0aGUgSUNNUHY2IGNoZWNrc3VtIG11c3QgYmUgdmFsaWQgKi9cbiYjNDM7XHRza2JfY2hrID0gc2tiX2NoZWNrc3VtX3RyaW1tZWQoc2tiLCB0cmFuc3BvcnRfbGVuLFxuJiM0MztcdFx0XHRcdCAgICAgICBuZGlzY192YWxpZGF0ZV9jaGVja3N1bSk7XG4mIzQzO1x0aWYgKCFza2JfY2hrKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChza2JfY2hrICE9IHNrYilcbiYjNDM7XHRcdGtmcmVlX3NrYihza2JfY2hrKTtcbiYjNDM7XG4mIzQzO1x0LyogUkZDIDQ4NjEgNy4xLjEgLyA3LjEuMjogQ29kZSBtdXN0IGJlIDAgKi9cbiYjNDM7XHRoZHIgPSAoc3RydWN0IGljbXA2aGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiYjNDM7XHRpZiAoaGRyLVx1MDAzZWljbXA2X2NvZGUgIT0gMClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBuZGlzY19jaGVja19vcHRpb25zKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBvcHRzX2xlbixcbiYjNDM7XHRcdFx0ICAgICAgIGJvb2wgcmVqZWN0X3NsbGEpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSAmIzQzOyBzaXplb2Yoc3RydWN0IG5kX21zZyk7XG4mIzQzO1x0c3RydWN0IG5kX29wdF9oZHIgKm9wdCwgX29wdDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKG9wdHNfbGVuIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRpZiAob3B0c19sZW4gXHUwMDNjIHNpemVvZigqb3B0KSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0b3B0ID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX29wdCksIFx1MDAyNl9vcHQpO1xuJiM0MztcdFx0aWYgKCFvcHQpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdC8qIFJGQyA0ODYxIDcuMS4xIC8gNy4xLjI6IGFsbCBvcHRpb24gbGVuZ3RocyBtdXN0IGJlIFx1MDAzZSAwICovXG4mIzQzO1x0XHRpZiAoIW9wdC1cdTAwM2VuZF9vcHRfbGVuKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBSRkMgNDg2MSA3LjEuMTogREFEIE5TIG11c3Qgbm90IGNvbnRhaW4gYSBzb3VyY2UgbGluay1sYXllclxuJiM0MztcdFx0ICogYWRkcmVzcyBvcHRpb25cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHJlamVjdF9zbGxhIFx1MDAyNlx1MDAyNiBvcHQtXHUwMDNlbmRfb3B0X3R5cGUgPT0gTkRfT1BUX1NPVVJDRV9MTF9BRERSKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAob3B0LVx1MDAzZW5kX29wdF9sZW4gKiA4IFx1MDAzZSBvcHRzX2xlbilcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0b2Zmc2V0ICYjNDM7PSBvcHQtXHUwMDNlbmRfb3B0X2xlbiAqIDg7XG4mIzQzO1x0XHRvcHRzX2xlbiAtPSBvcHQtXHUwMDNlbmRfb3B0X2xlbiAqIDg7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBuZGlzY19jaGVja19uZF9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBsZW4gPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICYjNDM7IHNpemVvZihzdHJ1Y3QgbmRfbXNnKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgdHJhbnNwb3J0X2xlbiA9IGlwdjZfdHJhbnNwb3J0X2xlbihza2IpO1xuJiM0MztcdGJvb2wgcmVqZWN0X3NsbGEgPSBmYWxzZTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgbmRfbXNnICptc2c7XG4mIzQzO1xuJiM0MztcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGxlbikpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0LyogUkZDIDQ4NjEgNy4xLjEgLyA3LjEuMjogSUNNUCBsZW5ndGggaXMgYXQgbGVhc3Qgc2l6ZW9mKG5kX21zZykgKi9cbiYjNDM7XHRpZiAodHJhbnNwb3J0X2xlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBuZF9tc2cpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdG1zZyA9IChzdHJ1Y3QgbmRfbXNnICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiYjNDM7XG4mIzQzO1x0LyogUkZDIDQ4NjEgNy4xLjEgLyA3LjEuMjogVGFyZ2V0IEFkZHJlc3MgbXVzdCBub3QgYmUgYVxuJiM0MztcdCAqIG11bHRpY2FzdCBhZGRyZXNzXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGlwdjZfYWRkcl9pc19tdWx0aWNhc3QoXHUwMDI2bXNnLVx1MDAzZXRhcmdldCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChtc2ctXHUwMDNlaWNtcGguaWNtcDZfdHlwZSkge1xuJiM0MztcdGNhc2UgTkRJU0NfTkVJR0hCT1VSX1NPTElDSVRBVElPTjpcbiYjNDM7XHRcdGlmIChpcHY2X2FkZHJfYW55KFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlc2FkZHIpKSB7XG4mIzQzO1x0XHRcdC8qIFJGQyA0ODYxIDcuMS4xOiBEQUQgTlMgZGVzdGluYXRpb24gbXVzdCBiZSBhXG4mIzQzO1x0XHRcdCAqIHNvbGljaXRlZC1ub2RlIG11bHRpY2FzdCBhZGRyZXNzXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoIWlwdjZfYWRkcl9pc19zb2xpY3RfbXVsdChcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyKSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0LyogUkZDIDQ4NjEgNy4xLjE6IERBRCBOUyBtdXN0IG5vdCBjb250YWluIGEgc291cmNlXG4mIzQzO1x0XHRcdCAqIGxpbmstbGF5ZXIgYWRkcmVzcyBvcHRpb25cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHJlamVjdF9zbGxhID0gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTkRJU0NfTkVJR0hCT1VSX0FEVkVSVElTRU1FTlQ6XG4mIzQzO1x0XHQvKiBSRkMgNDg2MSA3LjEuMjogU29saWNpdGVkIGZsYWcgbXVzdCBiZSAwIGZvclxuJiM0MztcdFx0ICogbXVsdGljYXN0IGRlc3RpbmF0aW9uc1xuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoaXB2Nl9hZGRyX2lzX211bHRpY2FzdChcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBtc2ctXHUwMDNlaWNtcGguaWNtcDZfc29saWNpdGVkKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RBVEE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gbmRpc2NfY2hlY2tfb3B0aW9ucyhza2IsIHRyYW5zcG9ydF9sZW4gLSBzaXplb2Yoc3RydWN0IG5kX21zZyksXG4mIzQzO1x0XHRcdFx0ICAgcmVqZWN0X3NsbGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogbmRpc2NfY2hlY2tfbnNfbmEgLSB2YWxpZGF0ZSBhbiBOUy9OQSBwYWNrZXQgYW5kIHNldCBpdHMgdHJhbnNwb3J0IGhlYWRlclxuJiM0MzsgKiBAc2tiOiB0aGUgc2tiIHRvIHZhbGlkYXRlXG4mIzQzOyAqXG4mIzQzOyAqIFZhbGlkYXRlcyBhbiBJUHY2IHBhY2tldCBmb3IgY29tcGxpYW5jZSB3aXRoIFJGQyA0ODYxIHNlY3Rpb25zIDcuMS4xXG4mIzQzOyAqIChOZWlnaGJvciBTb2xpY2l0YXRpb24pIGFuZCA3LjEuMiAoTmVpZ2hib3IgQWR2ZXJ0aXNlbWVudCkuIElmIHZhbGlkLFxuJiM0MzsgKiBzZXRzIHRoZSBza2IgdHJhbnNwb3J0IGhlYWRlci5cbiYjNDM7ICpcbiYjNDM7ICogQ2FsbGVyIG5lZWRzIHRvIHNldCB0aGUgc2tiIG5ldHdvcmsgaGVhZGVyLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46XG4mIzQzOyAqICogMCAgICAgICAgLSB2YWxpZCBOUy9OQTsgdGhlIHNrYiB0cmFuc3BvcnQgaGVhZGVyIGhhcyBiZWVuIHNldC5cbiYjNDM7ICogKiAtRUlOVkFMICAtIGEgYnJva2VuIHBhY2tldCB3YXMgZGV0ZWN0ZWQsIGkuZS4gaXQgdmlvbGF0ZXMgc29tZVxuJiM0MzsgKiAgICAgICAgICAgICAgaW50ZXJuZXQgc3RhbmRhcmQuXG4mIzQzOyAqICogLUVOT01TRyAgLSBJUCBoZWFkZXIgdmFsaWRhdGlvbiBzdWNjZWVkZWQgYnV0IGl0IGlzIG5vdCBhbiBJQ01QdjZcbiYjNDM7ICogICAgICAgICAgICAgIHBhY2tldC5cbiYjNDM7ICogKiAtRU5PREFUQSAtIElQJiM0MztJQ01QdjYgaGVhZGVyIHZhbGlkYXRpb24gc3VjY2VlZGVkIGJ1dCBpdCBpcyBub3QgYVxuJiM0MzsgKiAgICAgICAgICAgICAgTmVpZ2hib3IgU29saWNpdGF0aW9uIG9yIE5laWdoYm9yIEFkdmVydGlzZW1lbnQuXG4mIzQzOyAqL1xuJiM0MztpbnQgbmRpc2NfY2hlY2tfbnNfbmEoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IG5kaXNjX2NoZWNrX2lwNmhkcihza2IpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBuZGlzY19jaGVja19pY21wdjYoc2tiKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG5kaXNjX2NoZWNrX25kX21zZyhza2IpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wobmRpc2NfY2hlY2tfbnNfbmEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDE0OjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmRpc2NfY2hlY2tfbnNfbmEmIzM0OywKICAgICYjMzQ7YnJfaXNfbmRfbmVpZ2hfbXNnJiMzNDssCiAgICAmIzM0O2JyX25kX3NlbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgbmRpc2NfY2hlY2tfbnNfbmFgIHRvIHZhbGlkYXRlIElQdjYgTmVpZ2hib3IgU29saWNpdGF0aW9uIGFuZCBBZHZlcnRpc2VtZW50IHBhY2tldHMsIGFuZCB1cGRhdGVzIHRoZSBicmlkZ2UgTkQgcHJveHkgY29kZSB0byB1c2UgaXQuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBwcm9jZXNzZXMgdW50cnVzdGVkIG5ldHdvcmsgcGFja2V0cyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGVlZWE2MjE4MjUyNzNhZWI1OTZmYjIyMTZlZTRhMWQwNTQyYjNiMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDE5IDE0OjE5OjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmRpc2MuaCBiL2luY2x1ZGUvbmV0L25kaXNjLmgKaW5kZXggM2RhMWE2ZjhkM2Y5MjAuLjllNTM3OWFkMmQ4ZTAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZGlzYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25kaXNjLmgKQEAgLTQzMCw2ICYjNDM7NDMwLDggQEAgdm9pZCBuZGlzY191cGRhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsCiAJCSAgY29uc3QgdTggKmxsYWRkciwgdTggbmV3LCB1MzIgZmxhZ3MsIHU4IGljbXA2X3R5cGUsCiAJCSAgc3RydWN0IG5kaXNjX29wdGlvbnMgKm5kb3B0cyk7CiAKJiM0MztpbnQgbmRpc2NfY2hlY2tfbnNfbmEoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiYjNDM7CiAvKgogICoJSUdNUAogICovCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jIGIvbmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYwppbmRleCAyM2ViNjkzMWEyYjRhZC4uNzg2M2JlYWUwYzU1NWQgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYwpAQCAtMTksNiAmIzQzOzE5LDcgQEAKICNpbmNsdWRlICZsdDtuZXQvYWRkcmNvbmYuaCZndDsKICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQogI2luY2x1ZGUgJmx0O25ldC9pcDZfY2hlY2tzdW0uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L25kaXNjLmgmZ3Q7CiAjZW5kaWYKIAogI2luY2x1ZGUgJiMzNDticl9wcml2YXRlLmgmIzM0OwpAQCAtMjM0LDIxICYjNDM7MjM1LDE1IEBAIHZvaWQgYnJfZG9fcHJveHlfc3VwcHJlc3NfYXJwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfYnJpZGdlICpiciwKICNlbmRpZgogCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKLXN0cnVjdCBuZF9tc2cgKmJyX2lzX25kX25laWdoX21zZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmRfbXNnICptc2cpCiYjNDM7c3RydWN0IG5kX21zZyAqYnJfaXNfbmRfbmVpZ2hfbXNnKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IG5kX21zZyAqbTsKLQotCW0gPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBza2JfbmV0d29ya19vZmZzZXQoc2tiKSAmIzQzOwotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXB2NmhkciksIHNpemVvZigqbXNnKSwgbXNnKTsKLQlpZiAoIW0pCiYjNDM7CWlmIChuZGlzY19jaGVja19uc19uYShza2IpKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmIChtLSZndDtpY21waC5pY21wNl9jb2RlICE9IDAgfHwKLQkgICAgKG0tJmd0O2ljbXBoLmljbXA2X3R5cGUgIT0gTkRJU0NfTkVJR0hCT1VSX1NPTElDSVRBVElPTiAmYW1wOyZhbXA7Ci0JICAgICBtLSZndDtpY21waC5pY21wNl90eXBlICE9IE5ESVNDX05FSUdIQk9VUl9BRFZFUlRJU0VNRU5UKSkKJiM0MzsJaWYgKHNrYl9saW5lYXJpemUoc2tiKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlyZXR1cm4gbTsKJiM0MzsJcmV0dXJuIChzdHJ1Y3QgbmRfbXNnICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKIH0KIAogc3RhdGljIHZvaWQgYnJfbmRfc2VuZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCkBAIC0yNTcsMTcgJiM0MzsyNTIsMTggQEAgc3RhdGljIHZvaWQgYnJfbmRfc2VuZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJlcXVlc3QtJmd0O2RldjsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZzsKJiM0MzsJc3RydWN0IG5kaXNjX29wdGlvbnMgbmRvcHRzOwogCXN0cnVjdCBuZF9tc2cgKm5hLCAqbnM7CiAJc3RydWN0IHNrX2J1ZmYgKnJlcGx5OwogCXN0cnVjdCBpcHY2aGRyICpwaXA2OwogCWludCBuYV9vbGVuID0gODsgLyogb3B0IGhkciAmIzQzOyBFVEhfQUxFTiBmb3IgdGFyZ2V0ICovCiAJaW50IG5zX29sZW47Ci0JaW50IGksIGxlbjsKIAl1OCAqZGFkZHI7CiAJYm9vbCBkYWQ7CiAJdTE2IHB2aWQ7CiYjNDM7CWludCBsZW47CiAKLQlpZiAoIWRldiB8fCBza2JfbGluZWFyaXplKHJlcXVlc3QpKQomIzQzOwlpZiAoIWRldikKIAkJcmV0dXJuOwogCiAJbGVuID0gTExfUkVTRVJWRURfU1BBQ0UoZGV2KSAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICYjNDM7CkBAIC0yODQsMjMgJiM0MzsyODAsMjMgQEAgc3RhdGljIHZvaWQgYnJfbmRfc2VuZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCiAJc2tiX3NldF9tYWNfaGVhZGVyKHJlcGx5LCAwKTsKIAogCWRhZGRyID0gZXRoX2hkcihyZXF1ZXN0KS0mZ3Q7aF9zb3VyY2U7Ci0JbnMgPSAoc3RydWN0IG5kX21zZyAqKShza2JfbmV0d29ya19oZWFkZXIocmVxdWVzdCkgJiM0MzsKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTsKLQotCS8qIERvIHdlIG5lZWQgb3B0aW9uIHByb2Nlc3NpbmcgPyAqLwotCW5zX29sZW4gPSByZXF1ZXN0LSZndDtsZW4gLSAoc2tiX25ldHdvcmtfb2Zmc2V0KHJlcXVlc3QpICYjNDM7Ci0JCQkJICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSAtIHNpemVvZigqbnMpOwotCWZvciAoaSA9IDA7IGkgJmx0OyBuc19vbGVuIC0gMTsgaSAmIzQzOz0gKG5zLSZndDtvcHRbaSAmIzQzOyAxXSAmbHQ7Jmx0OyAzKSkgewotCQlpZiAoIW5zLSZndDtvcHRbaSAmIzQzOyAxXSB8fCBpICYjNDM7IChucy0mZ3Q7b3B0W2kgJiM0MzsgMV0gJmx0OyZsdDsgMykgJmd0OyBuc19vbGVuKSB7Ci0JCQlrZnJlZV9za2IocmVwbHkpOwotCQkJcmV0dXJuOwotCQl9Ci0JCWlmIChucy0mZ3Q7b3B0W2ldID09IE5EX09QVF9TT1VSQ0VfTExfQUREUikgewotCQkJaWYgKChucy0mZ3Q7b3B0W2kgJiM0MzsgMV0gJmx0OyZsdDsgMykgJmd0Oz0KLQkJCSAgICBzaXplb2Yoc3RydWN0IG5kX29wdF9oZHIpICYjNDM7IEVUSF9BTEVOKQotCQkJCWRhZGRyID0gbnMtJmd0O29wdCAmIzQzOyBpICYjNDM7IHNpemVvZihzdHJ1Y3QgbmRfb3B0X2hkcik7Ci0JCQlicmVhazsKLQkJfQomIzQzOwlucyA9IChzdHJ1Y3QgbmRfbXNnICopc2tiX3RyYW5zcG9ydF9oZWFkZXIocmVxdWVzdCk7CiYjNDM7CiYjNDM7CS8qIERlcml2ZSB0aGUgb3B0aW9uIGxlbmd0aCBmcm9tIHRoZSBJUHY2IHBheWxvYWQgbGVuZ3RoIHNvIHRoYXQgYW55CiYjNDM7CSAqIHRyYWlsaW5nIEwyIHBhZGRpbmcgaW4gdGhlIHNrYiBpcyBub3QgcGFyc2VkIGFzIE5EIG9wdGlvbnMuCiYjNDM7CSAqLwomIzQzOwluc19vbGVuID0gbnRvaHMoaXB2Nl9oZHIocmVxdWVzdCktJmd0O3BheWxvYWRfbGVuKSAtIHNpemVvZigqbnMpOwomIzQzOwlpZiAoIW5kaXNjX3BhcnNlX29wdGlvbnMoZGV2LCBucy0mZ3Q7b3B0LCBuc19vbGVuLCAmYW1wO25kb3B0cykpIHsKJiM0MzsJCWtmcmVlX3NrYihyZXBseSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG5kb3B0cy5uZF9vcHRzX3NyY19sbGFkZHIpIHsKJiM0MzsJCXU4ICpsbGFkZHI7CiYjNDM7CiYjNDM7CQlsbGFkZHIgPSBuZGlzY19vcHRfYWRkcl9kYXRhKG5kb3B0cy5uZF9vcHRzX3NyY19sbGFkZHIsIGRldik7CiYjNDM7CQlpZiAobGxhZGRyKQomIzQzOwkJCWRhZGRyID0gbGxhZGRyOwogCX0KIAogCWRhZCA9IGlwdjZfYWRkcl9hbnkoJmFtcDtpcHY2X2hkcihyZXF1ZXN0KS0mZ3Q7c2FkZHIpOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9kZXZpY2UuYyBiL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMKaW5kZXggZTdmMzQzYWIyMmQzNzkuLmZmNTVkYWI3MzYzMjZiIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMKQEAgLTgwLDkgJiM0Mzs4MCw5IEBAIG5ldGRldl90eF90IGJyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCSAgIHBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICYjNDM7CiAJCQkJIHNpemVvZihzdHJ1Y3QgbmRfbXNnKSkgJmFtcDsmYW1wOwogCQkgICBpcHY2X2hkcihza2IpLSZndDtuZXh0aGRyID09IElQUFJPVE9fSUNNUFY2KSB7Ci0JCQlzdHJ1Y3QgbmRfbXNnICptc2csIF9tc2c7CiYjNDM7CQkJc3RydWN0IG5kX21zZyAqbXNnOwogCi0JCQltc2cgPSBicl9pc19uZF9uZWlnaF9tc2coc2tiLCAmYW1wO19tc2cpOwomIzQzOwkJCW1zZyA9IGJyX2lzX25kX25laWdoX21zZyhza2IpOwogCQkJaWYgKG1zZykKIAkJCQlicl9kb19zdXBwcmVzc19uZChza2IsIGJyLCB2aWQsIE5VTEwsIG1zZyk7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jCmluZGV4IGRkYjhmMDAyYTQwZTgyLi5kODdhNWY5ZmE5MmI3MCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuYwpAQCAtMTc2LDkgJiM0MzsxNzYsOSBAQCBpbnQgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYgogCQkgICBwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSAmIzQzOwogCQkJCSBzaXplb2Yoc3RydWN0IG5kX21zZykpICZhbXA7JmFtcDsKIAkJICAgaXB2Nl9oZHIoc2tiKS0mZ3Q7bmV4dGhkciA9PSBJUFBST1RPX0lDTVBWNikgewotCQkJc3RydWN0IG5kX21zZyAqbXNnLCBfbXNnOwomIzQzOwkJCXN0cnVjdCBuZF9tc2cgKm1zZzsKIAotCQkJbXNnID0gYnJfaXNfbmRfbmVpZ2hfbXNnKHNrYiwgJmFtcDtfbXNnKTsKJiM0MzsJCQltc2cgPSBicl9pc19uZF9uZWlnaF9tc2coc2tiKTsKIAkJCWlmIChtc2cpCiAJCQkJYnJfZG9fc3VwcHJlc3NfbmQoc2tiLCBiciwgdmlkLCBwLCBtc2cpOwogCX0KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKaW5kZXggZDU1ZWE5NTE2ZTNlMzYuLjE2ZWQwOWViZmZjM2NmIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaApAQCAtMjM2MSw3ICYjNDM7MjM2MSw3IEBAIHZvaWQgYnJfZG9fcHJveHlfc3VwcHJlc3NfYXJwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfYnJpZGdlICpiciwKIAkJCSAgICAgIHUxNiB2aWQsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApOwogdm9pZCBicl9kb19zdXBwcmVzc19uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCiAJCSAgICAgICB1MTYgdmlkLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3QgbmRfbXNnICptc2cpOwotc3RydWN0IG5kX21zZyAqYnJfaXNfbmRfbmVpZ2hfbXNnKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZF9tc2cgKm0pOwomIzQzO3N0cnVjdCBuZF9tc2cgKmJyX2lzX25kX25laWdoX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGJvb2wgYnJfaXNfbmVpZ2hfc3VwcHJlc3NfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgdmlkKTsKIGJvb2wgYnJfaXNfbmVpZ2hfZm9yd2FyZF9ncmF0X2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IHZpZCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9pcHY2L01ha2VmaWxlIGIvbmV0L2lwdjYvTWFrZWZpbGUKaW5kZXggNWIwY2Q2NDg4MDIxMjQuLmNmNWUwMWY4M2NlM2QwIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9NYWtlZmlsZQpAQCAtNTEsNyAmIzQzOzUxLDcgQEAgb2JqLSQoc3Vic3QgbSx5LCQoQ09ORklHX0lQVjYpKSAmIzQzOz0gaW5ldDZfaGFzaHRhYmxlcy5vCiAKIGlmbmVxICgkKENPTkZJR19JUFY2KSwpCiBvYmotJChDT05GSUdfTkVUX1VEUF9UVU5ORUwpICYjNDM7PSBpcDZfdWRwX3R1bm5lbC5vCi1vYmoteSAmIzQzOz0gbWNhc3Rfc25vb3AubwomIzQzO29iai15ICYjNDM7PSBtY2FzdF9zbm9vcC5vIG5kaXNjX3Nub29wLm8KIG9iai0kKENPTkZJR19UQ1BfQU8pICYjNDM7PSB0Y3BfYW8ubwogZW5kaWYKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmMKaW5kZXggZjg2N2VjOGQzZDkwNTEuLmQ4YjQ1ODhmNmJmZjkyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZGlzYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25kaXNjLmMKQEAgLTI4Myw2ICYjNDM7MjgzLDcgQEAgc3RydWN0IG5kaXNjX29wdGlvbnMgKm5kaXNjX3BhcnNlX29wdGlvbnMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAl9CiAJcmV0dXJuIG5kb3B0czsKIH0KJiM0MztFWFBPUlRfU1lNQk9MKG5kaXNjX3BhcnNlX29wdGlvbnMpOwogCiBpbnQgbmRpc2NfbWNfbWFwKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgY2hhciAqYnVmLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGlyKQogewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2Nfc25vb3AuYyBiL25ldC9pcHY2L25kaXNjX3Nub29wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmE5M2VlZDI3YTFmNmQ3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmRpc2Nfc25vb3AuYwpAQCAtMCwwICYjNDM7MSwxOTAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvYWRkcmNvbmYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2lwNl9jaGVja3N1bS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvaXB2Ni5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvbmRpc2MuaCZndDsKJiM0MzsKJiM0MztzdGF0aWMgaW50IG5kaXNjX2NoZWNrX2lwNmhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNmg7CiYjNDM7CXVuc2lnbmVkIGludCBvZmZzZXQsIGxlbjsKJiM0MzsKJiM0MzsJb2Zmc2V0ID0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikgJiM0Mzsgc2l6ZW9mKCppcDZoKTsKJiM0MzsJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgb2Zmc2V0KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpcDZoID0gaXB2Nl9oZHIoc2tiKTsKJiM0MzsKJiM0MzsJaWYgKGlwNmgtJmd0O3ZlcnNpb24gIT0gNikKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoaXA2aC0mZ3Q7bmV4dGhkciAhPSBJUFBST1RPX0lDTVBWNikKJiM0MzsJCXJldHVybiAtRU5PTVNHOwomIzQzOwomIzQzOwkvKiBSRkMgNDg2MSA3LjEuMSAvIDcuMS4yOiBtdXN0IG5vdCBoYXZlIGJlZW4gZm9yd2FyZGVkIGJ5IGEgcm91dGVyICovCiYjNDM7CWlmIChpcDZoLSZndDtob3BfbGltaXQgIT0gMjU1KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWxlbiA9IG9mZnNldCAmIzQzOyBudG9ocyhpcDZoLSZndDtwYXlsb2FkX2xlbik7CiYjNDM7CWlmIChza2ItJmd0O2xlbiAmbHQ7IGxlbiB8fCBsZW4gJmx0Oz0gb2Zmc2V0KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIG9mZnNldCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19zdW0xNiBuZGlzY192YWxpZGF0ZV9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJcmV0dXJuIHNrYl9jaGVja3N1bV92YWxpZGF0ZShza2IsIElQUFJPVE9fSUNNUFY2LCBpcDZfY29tcHV0ZV9wc2V1ZG8pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG5kaXNjX2NoZWNrX2ljbXB2NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGxlbiA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpY21wNmhkcik7CiYjNDM7CXVuc2lnbmVkIGludCB0cmFuc3BvcnRfbGVuID0gaXB2Nl90cmFuc3BvcnRfbGVuKHNrYik7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2JfY2hrOwomIzQzOwlzdHJ1Y3QgaWNtcDZoZHIgKmhkcjsKJiM0MzsKJiM0MzsJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgbGVuKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkvKiBSRkMgNDg2MSA3LjEuMSAvIDcuMS4yOiB0aGUgSUNNUHY2IGNoZWNrc3VtIG11c3QgYmUgdmFsaWQgKi8KJiM0MzsJc2tiX2NoayA9IHNrYl9jaGVja3N1bV90cmltbWVkKHNrYiwgdHJhbnNwb3J0X2xlbiwKJiM0MzsJCQkJICAgICAgIG5kaXNjX3ZhbGlkYXRlX2NoZWNrc3VtKTsKJiM0MzsJaWYgKCFza2JfY2hrKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChza2JfY2hrICE9IHNrYikKJiM0MzsJCWtmcmVlX3NrYihza2JfY2hrKTsKJiM0MzsKJiM0MzsJLyogUkZDIDQ4NjEgNy4xLjEgLyA3LjEuMjogQ29kZSBtdXN0IGJlIDAgKi8KJiM0MzsJaGRyID0gKHN0cnVjdCBpY21wNmhkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiYjNDM7CWlmIChoZHItJmd0O2ljbXA2X2NvZGUgIT0gMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBuZGlzY19jaGVja19vcHRpb25zKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBvcHRzX2xlbiwKJiM0MzsJCQkgICAgICAgYm9vbCByZWplY3Rfc2xsYSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBvZmZzZXQgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICYjNDM7IHNpemVvZihzdHJ1Y3QgbmRfbXNnKTsKJiM0MzsJc3RydWN0IG5kX29wdF9oZHIgKm9wdCwgX29wdDsKJiM0MzsKJiM0MzsJd2hpbGUgKG9wdHNfbGVuICZndDsgMCkgewomIzQzOwkJaWYgKG9wdHNfbGVuICZsdDsgc2l6ZW9mKCpvcHQpKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJb3B0ID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX29wdCksICZhbXA7X29wdCk7CiYjNDM7CQlpZiAoIW9wdCkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCS8qIFJGQyA0ODYxIDcuMS4xIC8gNy4xLjI6IGFsbCBvcHRpb24gbGVuZ3RocyBtdXN0IGJlICZndDsgMCAqLwomIzQzOwkJaWYgKCFvcHQtJmd0O25kX29wdF9sZW4pCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQkvKiBSRkMgNDg2MSA3LjEuMTogREFEIE5TIG11c3Qgbm90IGNvbnRhaW4gYSBzb3VyY2UgbGluay1sYXllcgomIzQzOwkJICogYWRkcmVzcyBvcHRpb24KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHJlamVjdF9zbGxhICZhbXA7JmFtcDsgb3B0LSZndDtuZF9vcHRfdHlwZSA9PSBORF9PUFRfU09VUkNFX0xMX0FERFIpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQlpZiAob3B0LSZndDtuZF9vcHRfbGVuICogOCAmZ3Q7IG9wdHNfbGVuKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJb2Zmc2V0ICYjNDM7PSBvcHQtJmd0O25kX29wdF9sZW4gKiA4OwomIzQzOwkJb3B0c19sZW4gLT0gb3B0LSZndDtuZF9vcHRfbGVuICogODsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBuZGlzY19jaGVja19uZF9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBsZW4gPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICYjNDM7IHNpemVvZihzdHJ1Y3QgbmRfbXNnKTsKJiM0MzsJdW5zaWduZWQgaW50IHRyYW5zcG9ydF9sZW4gPSBpcHY2X3RyYW5zcG9ydF9sZW4oc2tiKTsKJiM0MzsJYm9vbCByZWplY3Rfc2xsYSA9IGZhbHNlOwomIzQzOwljb25zdCBzdHJ1Y3QgbmRfbXNnICptc2c7CiYjNDM7CiYjNDM7CWlmICghcHNrYl9tYXlfcHVsbChza2IsIGxlbikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJLyogUkZDIDQ4NjEgNy4xLjEgLyA3LjEuMjogSUNNUCBsZW5ndGggaXMgYXQgbGVhc3Qgc2l6ZW9mKG5kX21zZykgKi8KJiM0MzsJaWYgKHRyYW5zcG9ydF9sZW4gJmx0OyBzaXplb2Yoc3RydWN0IG5kX21zZykpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJbXNnID0gKHN0cnVjdCBuZF9tc2cgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpOwomIzQzOwomIzQzOwkvKiBSRkMgNDg2MSA3LjEuMSAvIDcuMS4yOiBUYXJnZXQgQWRkcmVzcyBtdXN0IG5vdCBiZSBhCiYjNDM7CSAqIG11bHRpY2FzdCBhZGRyZXNzCiYjNDM7CSAqLwomIzQzOwlpZiAoaXB2Nl9hZGRyX2lzX211bHRpY2FzdCgmYW1wO21zZy0mZ3Q7dGFyZ2V0KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlzd2l0Y2ggKG1zZy0mZ3Q7aWNtcGguaWNtcDZfdHlwZSkgewomIzQzOwljYXNlIE5ESVNDX05FSUdIQk9VUl9TT0xJQ0lUQVRJT046CiYjNDM7CQlpZiAoaXB2Nl9hZGRyX2FueSgmYW1wO2lwdjZfaGRyKHNrYiktJmd0O3NhZGRyKSkgewomIzQzOwkJCS8qIFJGQyA0ODYxIDcuMS4xOiBEQUQgTlMgZGVzdGluYXRpb24gbXVzdCBiZSBhCiYjNDM7CQkJICogc29saWNpdGVkLW5vZGUgbXVsdGljYXN0IGFkZHJlc3MKJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoIWlwdjZfYWRkcl9pc19zb2xpY3RfbXVsdCgmYW1wO2lwdjZfaGRyKHNrYiktJmd0O2RhZGRyKSkKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJLyogUkZDIDQ4NjEgNy4xLjE6IERBRCBOUyBtdXN0IG5vdCBjb250YWluIGEgc291cmNlCiYjNDM7CQkJICogbGluay1sYXllciBhZGRyZXNzIG9wdGlvbgomIzQzOwkJCSAqLwomIzQzOwkJCXJlamVjdF9zbGxhID0gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE5ESVNDX05FSUdIQk9VUl9BRFZFUlRJU0VNRU5UOgomIzQzOwkJLyogUkZDIDQ4NjEgNy4xLjI6IFNvbGljaXRlZCBmbGFnIG11c3QgYmUgMCBmb3IKJiM0MzsJCSAqIG11bHRpY2FzdCBkZXN0aW5hdGlvbnMKJiM0MzsJCSAqLwomIzQzOwkJaWYgKGlwdjZfYWRkcl9pc19tdWx0aWNhc3QoJmFtcDtpcHY2X2hkcihza2IpLSZndDtkYWRkcikgJmFtcDsmYW1wOwomIzQzOwkJICAgIG1zZy0mZ3Q7aWNtcGguaWNtcDZfc29saWNpdGVkKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVOT0RBVEE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIG5kaXNjX2NoZWNrX29wdGlvbnMoc2tiLCB0cmFuc3BvcnRfbGVuIC0gc2l6ZW9mKHN0cnVjdCBuZF9tc2cpLAomIzQzOwkJCQkgICByZWplY3Rfc2xsYSk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIG5kaXNjX2NoZWNrX25zX25hIC0gdmFsaWRhdGUgYW4gTlMvTkEgcGFja2V0IGFuZCBzZXQgaXRzIHRyYW5zcG9ydCBoZWFkZXIKJiM0MzsgKiBAc2tiOiB0aGUgc2tiIHRvIHZhbGlkYXRlCiYjNDM7ICoKJiM0MzsgKiBWYWxpZGF0ZXMgYW4gSVB2NiBwYWNrZXQgZm9yIGNvbXBsaWFuY2Ugd2l0aCBSRkMgNDg2MSBzZWN0aW9ucyA3LjEuMQomIzQzOyAqIChOZWlnaGJvciBTb2xpY2l0YXRpb24pIGFuZCA3LjEuMiAoTmVpZ2hib3IgQWR2ZXJ0aXNlbWVudCkuIElmIHZhbGlkLAomIzQzOyAqIHNldHMgdGhlIHNrYiB0cmFuc3BvcnQgaGVhZGVyLgomIzQzOyAqCiYjNDM7ICogQ2FsbGVyIG5lZWRzIHRvIHNldCB0aGUgc2tiIG5ldHdvcmsgaGVhZGVyLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogMCAgICAgICAgLSB2YWxpZCBOUy9OQTsgdGhlIHNrYiB0cmFuc3BvcnQgaGVhZGVyIGhhcyBiZWVuIHNldC4KJiM0MzsgKiAqIC1FSU5WQUwgIC0gYSBicm9rZW4gcGFja2V0IHdhcyBkZXRlY3RlZCwgaS5lLiBpdCB2aW9sYXRlcyBzb21lCiYjNDM7ICogICAgICAgICAgICAgIGludGVybmV0IHN0YW5kYXJkLgomIzQzOyAqICogLUVOT01TRyAgLSBJUCBoZWFkZXIgdmFsaWRhdGlvbiBzdWNjZWVkZWQgYnV0IGl0IGlzIG5vdCBhbiBJQ01QdjYKJiM0MzsgKiAgICAgICAgICAgICAgcGFja2V0LgomIzQzOyAqICogLUVOT0RBVEEgLSBJUCYjNDM7SUNNUHY2IGhlYWRlciB2YWxpZGF0aW9uIHN1Y2NlZWRlZCBidXQgaXQgaXMgbm90IGEKJiM0MzsgKiAgICAgICAgICAgICAgTmVpZ2hib3IgU29saWNpdGF0aW9uIG9yIE5laWdoYm9yIEFkdmVydGlzZW1lbnQuCiYjNDM7ICovCiYjNDM7aW50IG5kaXNjX2NoZWNrX25zX25hKHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBuZGlzY19jaGVja19pcDZoZHIoc2tiKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBuZGlzY19jaGVja19pY21wdjYoc2tiKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gbmRpc2NfY2hlY2tfbmRfbXNnKHNrYik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wobmRpc2NfY2hlY2tfbnNfbmEpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAxNDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjczCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIElQdjYgTmVpZ2hib3IgRGlzY292ZXJ5IFNub29waW5nIENvZGUqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIG1ha2luZyBjaGFuZ2VzIGFjcm9zcyBzZXZlcmFsIGZpbGVzIHJlbGF0ZWQgdG8gYnJpZGdpbmcgYW5kIElQdjYgbmVpZ2hib3IgZGlzY292ZXJ5LiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHRvdWNoaW5nIGBuZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jYCwgYG5ldC9icmlkZ2UvYnJfZGV2aWNlLmNgLCBgbmV0L2JyaWRnZS9icl9pbnB1dC5jYCwgYG5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oYCwgYG5ldC9pcHY2L01ha2VmaWxlYCwgYG5ldC9pcHY2L25kaXNjLmNgLCBhbmQgaW1wb3J0YW50bHksICphZGRzKiBhIG5ldyBmaWxlIGBuZXQvaXB2Ni9uZGlzY19zbm9vcC5jYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBuZXcgZnVuY3Rpb25hbGl0eSwgYW5kIHdpdGggdGhlIGNoYW5nZXMgdG8gdGhlIGV4aXN0aW5nIGZpbGVzIEkgY2FuIGFzc3VtZSB0aGlzIGlzIGEgcHJldHR5IHRob3JvdWdoIHJld29yayBvZiB0aGUgd2F5IGJyaWRnZSBkZXZpY2VzIGhhbmRsZSBJUHY2IE5EIHBhY2tldHMuCgpUaGUgcGF0Y2ggc2VlbXMgdG8gaW50cm9kdWNlIGEgbmV3IHZhbGlkYXRpb24gZnVuY3Rpb24sIGBuZGlzY19jaGVja19uc19uYWAsIHdoaWNoLCBiYXNlZCBvbiB0aGUgbmFtZSwgaXMgbWVhbnQgdG8gdmFsaWRhdGUgSVB2NiBOZWlnaGJvciBTb2xpY2l0YXRpb24gYW5kIE5laWdoYm9yIEFkdmVydGlzZW1lbnQgcGFja2V0cy4gRnVydGhlcm1vcmUsIHRoZSBvbGQgYGJyX2lzX25kX25laWdoX21zZ2AgbG9naWMgaXMgcmVwbGFjZWQgYnkgdGhpcyBuZXcgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbiBgbmRpc2NfcGFyc2Vfb3B0aW9uc2AgaXMgYWxzbyBiZWluZyBleHBvcnRlZCwgYW5kIHVzZWQgaW4gYGJyX25kX3NlbmRgLgoKVGhpcyBpcyBhbGwgZnVuY3Rpb25hbCBjb2RlLCBpdCYjMzk7cyByZWFjaGFibGUgdmlhIGJyaWRnZSBkZXZpY2VzLCBhbmQgSVB2NiBORCBwYWNrZXRzLiBMb29rcyBsaWtlIGEgZ3JlYXQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgZmFjdCB0aGF0IHRoZXkmIzM5O3ZlIHJlcGxhY2VkIGEgcHJldmlvdXMgYmxvY2sgb2YgY29kZSBpcyBhIGdyZWVuIGxpZ2h0IHRvIHN0YXJ0LgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gVGhlIG5ldyBjb2RlIGlzIGluIGBuZXQvaXB2Ni9uZGlzY19zbm9vcC5jYCwgYW5kIHRoYXQmIzM5O3MgY29tcGlsZWQgaWYgYENPTkZJR19JUFY2YCBpcyBlbmFibGVkLiBMZXQmIzM5O3MgbWFrZSBzdXJlLCBsb29raW5nIGF0IGBuZXQvaXB2Ni9NYWtlZmlsZWA6CgpgYGBtYWtlZmlsZQppZm5lcSAoJChDT05GSUdfSVBWNiksKQpvYmoteSAmIzQzOz0gbWNhc3Rfc25vb3AubyBuZGlzY19zbm9vcC5vCmBgYAoKWWVwLCBgbmRpc2Nfc25vb3Aub2AgaXMgYmVpbmcgaW5jbHVkZWQgd2hlbiBgQ09ORklHX0lQVjZgIGlzIHNldC4KCkJ1dCB3aGF0IGFib3V0IHRoZSBicmlkZ2Ugc2lkZT8gVGhlIGNoYW5nZXMgdG8gYGJyX2FycF9uZF9wcm94eS5jYCBhcmUga2V5LiBMb29raW5nIGF0IHRoYXQgZmlsZSwgSSBzZWUgYCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KWAgYXJvdW5kIHRoZSBORCBwcm94eSBsb2dpYy4gVGhhdCBtZWFucyB3ZSBhYnNvbHV0ZWx5IG5lZWQgYENPTkZJR19CUklER0VgICphbmQqIGBDT05GSUdfSVBWNmAgZW5hYmxlZC4KClRvIGJlIGV4dHJhIGNlcnRhaW4sIEkgc2hvdWxkIGNoZWNrIHRoZSBNYWtlZmlsZSBpbiBgbmV0L2JyaWRnZWAgdG8gbWFrZSBzdXJlIGBicl9hcnBfbmRfcHJveHkuY2AgaXMgY29tcGlsZWQgY29uZGl0aW9uYWxseS4gSSYjMzk7bGwganVzdCB1c2UgYHJlYWQtZmlsZWAgb24gYG5ldC9icmlkZ2UvTWFrZWZpbGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDE0OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIHRoZSBJRUVFIDgwMi4xZCBldGhlcm5ldCBicmlkZ2luZyBsYXllci5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0b2JqLSQoQ09ORklHX0JSSURHRSkgJiM0Mzs9IGJyaWRnZS5vXG4gICA3Olx0XG4gICA4Olx0YnJpZGdlLXlcdDo9IGJyLm8gYnJfZGV2aWNlLm8gYnJfZmRiLm8gYnJfZm9yd2FyZC5vIGJyX2lmLm8gYnJfaW5wdXQubyBcXFxuICAgOTpcdFx0XHRcdGJyX2lvY3RsLm8gYnJfc3RwLm8gYnJfc3RwX2JwZHUubyBcXFxuICAxMDpcdFx0XHRcdGJyX3N0cF9pZi5vIGJyX3N0cF90aW1lci5vIGJyX25ldGxpbmsubyBcXFxuICAxMTpcdFx0XHRcdGJyX25ldGxpbmtfdHVubmVsLm8gYnJfYXJwX25kX3Byb3h5Lm9cbiAgMTI6XHRcbiAgMTM6XHRicmlkZ2UtJChDT05GSUdfU1lTRlMpICYjNDM7PSBicl9zeXNmc19pZi5vIGJyX3N5c2ZzX2JyLm9cbiAgMTQ6XHRcbiAgMTU6XHRicmlkZ2UtJChzdWJzdCBtLHksJChDT05GSUdfQlJJREdFX05FVEZJTFRFUikpICYjNDM7PSBicl9uZl9jb3JlLm9cbiAgMTY6XHRcbiAgMTc6XHRicl9uZXRmaWx0ZXIteSA6PSBicl9uZXRmaWx0ZXJfaG9va3Mub1xuICAxODpcdGJyX25ldGZpbHRlci0kKHN1YnN0IG0seSwkKENPTkZJR19JUFY2KSkgJiM0Mzs9IGJyX25ldGZpbHRlcl9pcHY2Lm9cbiAgMTk6XHRvYmotJChDT05GSUdfQlJJREdFX05FVEZJTFRFUikgJiM0Mzs9IGJyX25ldGZpbHRlci5vXG4gIDIwOlx0XG4gIDIxOlx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HKSAmIzQzOz0gYnJfbXVsdGljYXN0Lm8gYnJfbWRiLm8gYnJfbXVsdGljYXN0X2VodC5vXG4gIDIyOlx0XG4gIDIzOlx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklORykgJiM0Mzs9IGJyX3ZsYW4ubyBicl92bGFuX3R1bm5lbC5vIGJyX3ZsYW5fb3B0aW9ucy5vIGJyX21zdC5vXG4gIDI0Olx0XG4gIDI1Olx0YnJpZGdlLSQoQ09ORklHX05FVF9TV0lUQ0hERVYpICYjNDM7PSBicl9zd2l0Y2hkZXYub1xuICAyNjpcdFxuICAyNzpcdG9iai0kKENPTkZJR19ORVRGSUxURVIpICYjNDM7PSBuZXRmaWx0ZXIvXG4gIDI4Olx0XG4gIDI5Olx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9NUlApXHQmIzQzOz0gYnJfbXJwX3N3aXRjaGRldi5vIGJyX21ycC5vIGJyX21ycF9uZXRsaW5rLm9cbiAgMzA6XHRcbiAgMzE6XHRicmlkZ2UtJChDT05GSUdfQlJJREdFX0NGTSlcdCYjNDM7PSBicl9jZm0ubyBicl9jZm1fbmV0bGluay5vXG4gIDMyOlx0XG4gIDMzOlx0aWZkZWYgQ09ORklHX0dDT1ZfUFJPRklMRV9ORVRGSUxURVJcbiAgMzQ6XHRHQ09WX1BST0ZJTEVfYnJfbmZfY29yZS5vIDo9IHlcbiAgMzU6XHRHQ09WX1BST0ZJTEVfYnJfbmV0ZmlsdGVyX2hvb2tzLm8gOj0geVxuICAzNjpcdEdDT1ZfUFJPRklMRV9icl9uZXRmaWx0ZXJfaXB2Ni5vIDo9IHlcbiAgMzc6XHRlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDE0OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzODMKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA0NjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgTkQgUHJveHlpbmcgaW4gQnJpZGdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGJyX2FycF9uZF9wcm94eS5vYCBpcyBhbHdheXMgYnVpbHQgd2hlbiBgQ09ORklHX0JSSURHRWAgaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBzZW5zZS4gRGl2aW5nIGludG8gYGJyX2FycF9uZF9wcm94eS5jYCwgSSBzZWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gd2l0aCBgI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpYCBmb3IgdGhlIE5EIHByb3h5IGZ1bmN0aW9uYWxpdHkuIFRoZXJlZm9yZSwgd2UgY2xlYXJseSBuZWVkIGJvdGggYEJSSURHRWAgYW5kIGBJUFY2YCBjb25maWd1cmVkIGZvciB0aGlzIHRvIHdvcmsgYXMgaW50ZW5kZWQuCgpOb3csIGxldCYjMzk7cyB6b29tIGluIG9uIHRoZSByZWxldmFudCBzeW1ib2xzLiBJIGhhZCBhIGxpc3Qgc3RhcnRpbmcgd2l0aCBgbmRpc2NfY2hlY2tfbnNfbmFgLCBgYnJfaXNfbmRfbmVpZ2hfbXNnYCwgYGJyX25kX3NlbmRgLCBgbmRpc2NfY2hlY2tfaXA2aGRyYCwgYG5kaXNjX2NoZWNrX2ljbXB2NmAsIGBuZGlzY19jaGVja19vcHRpb25zYCwgYW5kIGBuZGlzY19jaGVja19uZF9tc2dgLiBIb3dldmVyLCB3YWl0IGEgbWludXRlLi4uIEkgbm93IHJlY2FsbCB0aGF0IHRoZSBgbmRpc2NfY2hlY2tfKmAgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYG5kaXNjX2NoZWNrX2lwNmhkcmAsIGBuZGlzY19jaGVja19pY21wdjZgLCBgbmRpc2NfY2hlY2tfb3B0aW9uc2AsIGFuZCBgbmRpc2NfY2hlY2tfbmRfbXNnYCBhcmUgYWxsIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBuZXQvaXB2Ni9uZGlzY19zbm9vcC5jYC4gU28gdGhleSBhcmVuJiMzOTt0IHBhcnQgb2YgdGhlIGV4cG9zZWQgaW50ZXJmYWNlLiBUaGVyZWZvcmUsIEkgY2FuIHNhZmVseSByZW1vdmUgdGhlbSBmcm9tIHRoZSBsaXN0LCBiZWNhdXNlIHRoZXkgYXJlIG5vdCBleHRlcm5hbGx5IGxpbmtlZC4KCkkgKmNhbiogbGlzdCBgbmRpc2NfY2hlY2tfbnNfbmFgIGJlY2F1c2UgdGhhdCYjMzk7cyBleHBvcnRlZC4gQWxzbywgYGJyX2lzX25kX25laWdoX21zZ2AgYW5kIGBicl9uZF9zZW5kYCBhcmUgbG9jYXRlZCBpbiBgbmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuY2AsIHNvIHRob3NlIGFyZSByZWxldmFudCBhcyB3ZWxsLgoKVG8gdmVyaWZ5IG15IGFzc3VtcHRpb25zLCBsZXQgbWUgcmVjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGhlIHBhdGNoIGFsdGVycyBgbmV0L2lwdjYvbmRpc2Nfc25vb3AuY2AsIHdoaWNoLCBhcyB3ZSBrbm93LCByZXF1aXJlcyBgQ09ORklHX0lQVjZgLiBBZGRpdGlvbmFsbHksIHRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBuZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jYCwgYW5kIHRoYXQgb2J2aW91c2x5IGRlbWFuZHMgYENPTkZJR19CUklER0VgLiBTbywgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IHN0YW5kczogYEJSSURHRWAgYW5kIGBJUFY2YCBhcmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4KCkxldCYjMzk7cyBjaGVjayB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlcyBmb3IgYSBzZWNvbmQuIGBicl9uZF9zZW5kYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGdvb2QgdG8ga25vdywgYW5kIGBicl9pc19uZF9uZWlnaF9tc2dgIGlzIG5vdCBzdGF0aWMuIFRoYXQmIzM5O3MgYSBnb29kIGRpc3RpbmN0aW9uIHRvIG1ha2UuIGBuZGlzY19jaGVja19uc19uYWAgaXMgZGVmaW5pdGVseSBleHBvcnRlZC4KClRoZXJlZm9yZSwgZm9yIHRoaXMgcGFydGljdWxhciBhbmFseXNpcywgSSB3aWxsIGxpc3Qgb25seSB0aGUgZm9sbG93aW5nIHRocmVlIHN5bWJvbHM6CgoqICAgYG5kaXNjX2NoZWNrX25zX25hYAoqICAgYGJyX2lzX25kX25laWdoX21zZ2AKKiAgIGBicl9uZF9zZW5kYAoKRmluYWxseSwgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgYnJfaXNfbmRfbmVpZ2hfbXNnYCBpc24mIzM5O3QgY2FsbGVkIGZyb20gYW55d2hlcmUgdW5leHBlY3RlZC4gVGhhdCYjMzk7cyBhbHdheXMgYSBnb29kIHByYWN0aWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDE0OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX2lzX25kX25laWdoX21zZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jPTEyNT12b2lkIGJyX2RvX3Byb3h5X3N1cHByZXNzX2FycChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy0yMzctI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jOjIzODpzdHJ1Y3QgbmRfbXNnICpicl9pc19uZF9uZWlnaF9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMjM5LXtcbi0tXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTMwPW5ldGRldl90eF90IGJyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy04NC1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6ODU6XHRcdFx0bXNnID0gYnJfaXNfbmRfbmVpZ2hfbXNnKHNrYik7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTg2LVx0XHRcdGlmIChtc2cpXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTc2PWludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0xODAtXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MTgxOlx0XHRcdG1zZyA9IGJyX2lzX25kX25laWdoX21zZyhza2IpO1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTE4Mi1cdFx0XHRpZiAobXNnKVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTIzNjI9dm9pZCBicl9kb19zdXBwcmVzc19uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMzYzLVx0XHQgICAgICAgdTE2IHZpZCwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IG5kX21zZyAqbXNnKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjIzNjQ6c3RydWN0IG5kX21zZyAqYnJfaXNfbmRfbmVpZ2hfbXNnKHN0cnVjdCBza19idWZmICpza2IpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjM2NS1ib29sIGJyX2lzX25laWdoX3N1cHByZXNzX2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IHZpZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMTQ6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMzQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFJlYWNoYWJpbGl0eSBpbiB0aGUgQnJpZGdpbmcgQ29kZSoqCgpBbHJpZ2h0LCBzbyB0aGUgY2FsbCBzdGFjayBoYXMgbGVkIG1lIGhlcmUuIEl0JiMzOTtzIGNvbmZpcm1lZDogdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uLCB0aGF0JiMzOTtzIGl0LCBJIHNlZSwgSSYjMzk7dmUgZ290IGl0LiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBib3RoIGBicl9kZXZfeG1pdGAgYW5kIGBicl9oYW5kbGVfZnJhbWVfZmluaXNoYC4gR29vZCwgdGhhdCBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIG9mIHdoZXJlIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyB1dGlsaXplZC4gV2UmIzM5O3ZlIGdvdCBhIGRlZmluaXRlIHBhdGgsIHdoaWNoIG1lYW5zIHRoaXMgY29kZSBwYXRoIGlzIGRlZmluaXRlbHkgbGl2ZS4KCk5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIHRvIHVuZGVyc3RhbmQgdGhpcyBpbnRlcmFjdGlvbiBpcyB0byBleGFtaW5lIHRoZSBgYnJfbmRfc2VuZGAgZnVuY3Rpb24uIEkgd2lsbCBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gdG8gY29uZmlybSBpdHMgb3BlcmF0aW9uIGFuZCBpbnRlcmFjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAxNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl9uZF9zZW5kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM9MjM4PXN0cnVjdCBuZF9tc2cgKmJyX2lzX25kX25laWdoX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMjQ4LVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzoyNDk6c3RhdGljIHZvaWQgYnJfbmRfc2VuZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTI1MC1cdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpyZXF1ZXN0LCBzdHJ1Y3QgbmVpZ2hib3VyICpuLFxuLS1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM9NDEwPXZvaWQgYnJfZG9fc3VwcHJlc3NfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtNDgzLVx0XHRcdFx0aWYgKHZpZCAhPSAwKVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzo0ODQ6XHRcdFx0XHRcdGJyX25kX3NlbmQoYnIsIHAsIHNrYiwgbixcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtNDg1LVx0XHRcdFx0XHRcdCAgIHNrYi1cdTAwM2V2bGFuX3Byb3RvLFxuLS1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtNDg3LVx0XHRcdFx0ZWxzZVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzo0ODg6XHRcdFx0XHRcdGJyX25kX3NlbmQoYnIsIHAsIHNrYiwgbiwgMCwgMCk7XG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTQ4OS1cdFx0XHRcdHJlcGxpZWQgPSB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDE0OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjMyCgkJCQkJCQlvdXRwdXQ6IDEyNgoJCQkJCQkJdGhvdWdodHM6IDIwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFJhdGlvbmFsZTogSVB2NiBOZWlnaGJvciBEaXNjb3ZlcnkgU25vb3BpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyBiZWVuIHRyaWdnZXJlZCBieSBgYnJfZG9fc3VwcHJlc3NfbmRgLiBJIHNlZSBpdCBpbnRyb2R1Y2VzIGBuZXQvaXB2Ni9uZGlzY19zbm9vcC5jYCB3aGljaCBpbmNsdWRlcyB0aGUgbmV3IGZ1bmN0aW9uIGBuZGlzY19jaGVja19uc19uYWAuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IGl0JiMzOTtzIGEgZGVkaWNhdGVkIHZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIElQdjYgTmVpZ2hib3IgU29saWNpdGF0aW9uIChOUykgYW5kIEFkdmVydGlzZW1lbnQgKE5BKSBwYWNrZXRzLiBUaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBicl9pc19uZF9uZWlnaF9tc2dgIGFuZCBgYnJfbmRfc2VuZGAgaW4gYG5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmNgLCBzbyBpdCYjMzk7cyBpbnRlZ3JhdGluZyB0aGlzIG5ldyB2YWxpZGF0aW9uIGxvZ2ljIGludG8gdGhlIGJyaWRnZSBORCBwcm94eS4KCkdpdmVuIHRoYXQgdGhpcyBpbnZvbHZlcyBuZXcsIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQmIzM5O3MgZ29pbmcgdG8gYmUgaGFuZGxpbmcgcG90ZW50aWFsbHkgdW50cnVzdGVkIG5ldHdvcmsgdHJhZmZpYywgbXkgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgKmRlZmluaXRlbHkqIFdvcnRoRnV6emluZy4gVGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZSBpcyBjbGVhcjogbWFsZm9ybWVkIE5TL05BIHBhY2tldHMgY291bGQgbGVhZCB0byB2YXJpb3VzIGlzc3Vlcy4gTXkgZm9jdXMgd2lsbCBiZSBvbiBgbmRpc2NfY2hlY2tfbnNfbmFgLCBgYnJfaXNfbmRfbmVpZ2hfbXNnYCwgYW5kIGBicl9uZF9zZW5kYC4gVGhlIGZ1enppbmcgY29uZmlndXJhdGlvbiByZXF1aXJlcyB0aGF0IGJvdGggYEJSSURHRWAgYW5kIGBJUFY2YCBhcmUgZW5hYmxlZCwgZ2l2ZW4gdGhlIGZ1bmN0aW9uYWwgc2NvcGUgb2YgdGhlIHBhdGNoIGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBuZXR3b3JrIHByb3RvY29scy4gSXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIGZpbmRpbmcgc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGVycm9ycyByZWxhdGVkIHRvIElQdjYgTkQgcHJveHkgYmVoYXZpb3VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAxNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZGlzY19jaGVja19uc19uYSYjMzQ7LAogICAgJiMzNDticl9pc19uZF9uZWlnaF9tc2cmIzM0OywKICAgICYjMzQ7YnJfbmRfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBuZGlzY19jaGVja19uc19uYWAgdG8gdmFsaWRhdGUgSVB2NiBOZWlnaGJvciBTb2xpY2l0YXRpb24gYW5kIEFkdmVydGlzZW1lbnQgcGFja2V0cywgYW5kIHVwZGF0ZXMgdGhlIGJyaWRnZSBORCBwcm94eSBjb2RlIHRvIHVzZSBpdC4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHByb2Nlc3NlcyB1bnRydXN0ZWQgbmV0d29yayBwYWNrZXRzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25kaXNjX2NoZWNrX25zX25hJiMzNDssCiAgICAmIzM0O2JyX2lzX25kX25laWdoX21zZyYjMzQ7LAogICAgJiMzNDticl9uZF9zZW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYG5kaXNjX2NoZWNrX25zX25hYCB0byB2YWxpZGF0ZSBJUHY2IE5laWdoYm9yIFNvbGljaXRhdGlvbiBhbmQgQWR2ZXJ0aXNlbWVudCBwYWNrZXRzLCBhbmQgdXBkYXRlcyB0aGUgYnJpZGdlIE5EIHByb3h5IGNvZGUgdG8gdXNlIGl0LiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgcHJvY2Vzc2VzIHVudHJ1c3RlZCBuZXR3b3JrIHBhY2tldHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxNDoxOToyNS41NzQ0ODgwNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMTc3NzkwNDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5kaXNjX2NoZWNrX25zX25hXCIsXG4gICAgXCJicl9pc19uZF9uZWlnaF9tc2dcIixcbiAgICBcImJyX25kX3NlbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBuZGlzY19jaGVja19uc19uYWAgdG8gdmFsaWRhdGUgSVB2NiBOZWlnaGJvciBTb2xpY2l0YXRpb24gYW5kIEFkdmVydGlzZW1lbnQgcGFja2V0cywgYW5kIHVwZGF0ZXMgdGhlIGJyaWRnZSBORCBwcm94eSBjb2RlIHRvIHVzZSBpdC4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHByb2Nlc3NlcyB1bnRydXN0ZWQgbmV0d29yayBwYWNrZXRzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxNDoxOToyNS41NzQ0OTM3OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY5NzYyODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGVlZWE2MjE4MjUyNzNhZWI1OTZmYjIyMTZlZTRhMWQwNTQyYjNiMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCAxOSAxNDoxOToyMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZGlzYy5oIGIvaW5jbHVkZS9uZXQvbmRpc2MuaFxcbmluZGV4IDNkYTFhNmY4ZDNmOTIwLi45ZTUzNzlhZDJkOGUwMCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9uZGlzYy5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbmRpc2MuaFxcbkBAIC00MzAsNiArNDMwLDggQEAgdm9pZCBuZGlzY191cGRhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsXFxuIFxcdFxcdCAgY29uc3QgdTggKmxsYWRkciwgdTggbmV3LCB1MzIgZmxhZ3MsIHU4IGljbXA2X3R5cGUsXFxuIFxcdFxcdCAgc3RydWN0IG5kaXNjX29wdGlvbnMgKm5kb3B0cyk7XFxuIFxcbitpbnQgbmRpc2NfY2hlY2tfbnNfbmEoc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuK1xcbiAvKlxcbiAgKlxcdElHTVBcXG4gICovXFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMgYi9uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jXFxuaW5kZXggMjNlYjY5MzFhMmI0YWQuLjc4NjNiZWFlMGM1NTVkIDEwMDY0NFxcbi0tLSBhL25ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmNcXG4rKysgYi9uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jXFxuQEAgLTE5LDYgKzE5LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9hZGRyY29uZi5oXFx1MDAzZVxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfY2hlY2tzdW0uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9uZGlzYy5oXFx1MDAzZVxcbiAjZW5kaWZcXG4gXFxuICNpbmNsdWRlIFxcXCJicl9wcml2YXRlLmhcXFwiXFxuQEAgLTIzNCwyMSArMjM1LDE1IEBAIHZvaWQgYnJfZG9fcHJveHlfc3VwcHJlc3NfYXJwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4gI2VuZGlmXFxuIFxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4tc3RydWN0IG5kX21zZyAqYnJfaXNfbmRfbmVpZ2hfbXNnKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZF9tc2cgKm1zZylcXG4rc3RydWN0IG5kX21zZyAqYnJfaXNfbmRfbmVpZ2hfbXNnKHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4tXFx0c3RydWN0IG5kX21zZyAqbTtcXG4tXFxuLVxcdG0gPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBza2JfbmV0d29ya19vZmZzZXQoc2tiKSArXFxuLVxcdFxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLCBzaXplb2YoKm1zZyksIG1zZyk7XFxuLVxcdGlmICghbSlcXG4rXFx0aWYgKG5kaXNjX2NoZWNrX25zX25hKHNrYikpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4tXFx0aWYgKG0tXFx1MDAzZWljbXBoLmljbXA2X2NvZGUgIT0gMCB8fFxcbi1cXHQgICAgKG0tXFx1MDAzZWljbXBoLmljbXA2X3R5cGUgIT0gTkRJU0NfTkVJR0hCT1VSX1NPTElDSVRBVElPTiBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgIG0tXFx1MDAzZWljbXBoLmljbXA2X3R5cGUgIT0gTkRJU0NfTkVJR0hCT1VSX0FEVkVSVElTRU1FTlQpKVxcbitcXHRpZiAoc2tiX2xpbmVhcml6ZShza2IpKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdHJldHVybiBtO1xcbitcXHRyZXR1cm4gKHN0cnVjdCBuZF9tc2cgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBicl9uZF9zZW5kKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG5AQCAtMjU3LDE3ICsyNTIsMTggQEAgc3RhdGljIHZvaWQgYnJfbmRfc2VuZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJlcXVlc3QtXFx1MDAzZWRldjtcXG4gXFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XFxuK1xcdHN0cnVjdCBuZGlzY19vcHRpb25zIG5kb3B0cztcXG4gXFx0c3RydWN0IG5kX21zZyAqbmEsICpucztcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xcbiBcXHRzdHJ1Y3QgaXB2NmhkciAqcGlwNjtcXG4gXFx0aW50IG5hX29sZW4gPSA4OyAvKiBvcHQgaGRyICsgRVRIX0FMRU4gZm9yIHRhcmdldCAqL1xcbiBcXHRpbnQgbnNfb2xlbjtcXG4tXFx0aW50IGksIGxlbjtcXG4gXFx0dTggKmRhZGRyO1xcbiBcXHRib29sIGRhZDtcXG4gXFx0dTE2IHB2aWQ7XFxuK1xcdGludCBsZW47XFxuIFxcbi1cXHRpZiAoIWRldiB8fCBza2JfbGluZWFyaXplKHJlcXVlc3QpKVxcbitcXHRpZiAoIWRldilcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0bGVuID0gTExfUkVTRVJWRURfU1BBQ0UoZGV2KSArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgK1xcbkBAIC0yODQsMjMgKzI4MCwyMyBAQCBzdGF0aWMgdm9pZCBicl9uZF9zZW5kKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4gXFx0c2tiX3NldF9tYWNfaGVhZGVyKHJlcGx5LCAwKTtcXG4gXFxuIFxcdGRhZGRyID0gZXRoX2hkcihyZXF1ZXN0KS1cXHUwMDNlaF9zb3VyY2U7XFxuLVxcdG5zID0gKHN0cnVjdCBuZF9tc2cgKikoc2tiX25ldHdvcmtfaGVhZGVyKHJlcXVlc3QpICtcXG4tXFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpO1xcbi1cXG4tXFx0LyogRG8gd2UgbmVlZCBvcHRpb24gcHJvY2Vzc2luZyA/ICovXFxuLVxcdG5zX29sZW4gPSByZXF1ZXN0LVxcdTAwM2VsZW4gLSAoc2tiX25ldHdvcmtfb2Zmc2V0KHJlcXVlc3QpICtcXG4tXFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSAtIHNpemVvZigqbnMpO1xcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnNfb2xlbiAtIDE7IGkgKz0gKG5zLVxcdTAwM2VvcHRbaSArIDFdIFxcdTAwM2NcXHUwMDNjIDMpKSB7XFxuLVxcdFxcdGlmICghbnMtXFx1MDAzZW9wdFtpICsgMV0gfHwgaSArIChucy1cXHUwMDNlb3B0W2kgKyAxXSBcXHUwMDNjXFx1MDAzYyAzKSBcXHUwMDNlIG5zX29sZW4pIHtcXG4tXFx0XFx0XFx0a2ZyZWVfc2tiKHJlcGx5KTtcXG4tXFx0XFx0XFx0cmV0dXJuO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGlmIChucy1cXHUwMDNlb3B0W2ldID09IE5EX09QVF9TT1VSQ0VfTExfQUREUikge1xcbi1cXHRcXHRcXHRpZiAoKG5zLVxcdTAwM2VvcHRbaSArIDFdIFxcdTAwM2NcXHUwMDNjIDMpIFxcdTAwM2U9XFxuLVxcdFxcdFxcdCAgICBzaXplb2Yoc3RydWN0IG5kX29wdF9oZHIpICsgRVRIX0FMRU4pXFxuLVxcdFxcdFxcdFxcdGRhZGRyID0gbnMtXFx1MDAzZW9wdCArIGkgKyBzaXplb2Yoc3RydWN0IG5kX29wdF9oZHIpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbitcXHRucyA9IChzdHJ1Y3QgbmRfbXNnICopc2tiX3RyYW5zcG9ydF9oZWFkZXIocmVxdWVzdCk7XFxuK1xcbitcXHQvKiBEZXJpdmUgdGhlIG9wdGlvbiBsZW5ndGggZnJvbSB0aGUgSVB2NiBwYXlsb2FkIGxlbmd0aCBzbyB0aGF0IGFueVxcbitcXHQgKiB0cmFpbGluZyBMMiBwYWRkaW5nIGluIHRoZSBza2IgaXMgbm90IHBhcnNlZCBhcyBORCBvcHRpb25zLlxcbitcXHQgKi9cXG4rXFx0bnNfb2xlbiA9IG50b2hzKGlwdjZfaGRyKHJlcXVlc3QpLVxcdTAwM2VwYXlsb2FkX2xlbikgLSBzaXplb2YoKm5zKTtcXG4rXFx0aWYgKCFuZGlzY19wYXJzZV9vcHRpb25zKGRldiwgbnMtXFx1MDAzZW9wdCwgbnNfb2xlbiwgXFx1MDAyNm5kb3B0cykpIHtcXG4rXFx0XFx0a2ZyZWVfc2tiKHJlcGx5KTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobmRvcHRzLm5kX29wdHNfc3JjX2xsYWRkcikge1xcbitcXHRcXHR1OCAqbGxhZGRyO1xcbitcXG4rXFx0XFx0bGxhZGRyID0gbmRpc2Nfb3B0X2FkZHJfZGF0YShuZG9wdHMubmRfb3B0c19zcmNfbGxhZGRyLCBkZXYpO1xcbitcXHRcXHRpZiAobGxhZGRyKVxcbitcXHRcXHRcXHRkYWRkciA9IGxsYWRkcjtcXG4gXFx0fVxcbiBcXG4gXFx0ZGFkID0gaXB2Nl9hZGRyX2FueShcXHUwMDI2aXB2Nl9oZHIocmVxdWVzdCktXFx1MDAzZXNhZGRyKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9kZXZpY2UuYyBiL25ldC9icmlkZ2UvYnJfZGV2aWNlLmNcXG5pbmRleCBlN2YzNDNhYjIyZDM3OS4uZmY1NWRhYjczNjMyNmIgMTAwNjQ0XFxuLS0tIGEvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xcbisrKyBiL25ldC9icmlkZ2UvYnJfZGV2aWNlLmNcXG5AQCAtODAsOSArODAsOSBAQCBuZXRkZXZfdHhfdCBicl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRcXHQgICBwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSArXFxuIFxcdFxcdFxcdFxcdCBzaXplb2Yoc3RydWN0IG5kX21zZykpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgIGlwdjZfaGRyKHNrYiktXFx1MDAzZW5leHRoZHIgPT0gSVBQUk9UT19JQ01QVjYpIHtcXG4tXFx0XFx0XFx0c3RydWN0IG5kX21zZyAqbXNnLCBfbXNnO1xcbitcXHRcXHRcXHRzdHJ1Y3QgbmRfbXNnICptc2c7XFxuIFxcbi1cXHRcXHRcXHRtc2cgPSBicl9pc19uZF9uZWlnaF9tc2coc2tiLCBcXHUwMDI2X21zZyk7XFxuK1xcdFxcdFxcdG1zZyA9IGJyX2lzX25kX25laWdoX21zZyhza2IpO1xcbiBcXHRcXHRcXHRpZiAobXNnKVxcbiBcXHRcXHRcXHRcXHRicl9kb19zdXBwcmVzc19uZChza2IsIGJyLCB2aWQsIE5VTEwsIG1zZyk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jXFxuaW5kZXggZGRiOGYwMDJhNDBlODIuLmQ4N2E1ZjlmYTkyYjcwIDEwMDY0NFxcbi0tLSBhL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xcbisrKyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xcbkBAIC0xNzYsOSArMTc2LDkgQEAgaW50IGJyX2hhbmRsZV9mcmFtZV9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2JcXG4gXFx0XFx0ICAgcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgK1xcbiBcXHRcXHRcXHRcXHQgc2l6ZW9mKHN0cnVjdCBuZF9tc2cpKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICBpcHY2X2hkcihza2IpLVxcdTAwM2VuZXh0aGRyID09IElQUFJPVE9fSUNNUFY2KSB7XFxuLVxcdFxcdFxcdHN0cnVjdCBuZF9tc2cgKm1zZywgX21zZztcXG4rXFx0XFx0XFx0c3RydWN0IG5kX21zZyAqbXNnO1xcbiBcXG4tXFx0XFx0XFx0bXNnID0gYnJfaXNfbmRfbmVpZ2hfbXNnKHNrYiwgXFx1MDAyNl9tc2cpO1xcbitcXHRcXHRcXHRtc2cgPSBicl9pc19uZF9uZWlnaF9tc2coc2tiKTtcXG4gXFx0XFx0XFx0aWYgKG1zZylcXG4gXFx0XFx0XFx0XFx0YnJfZG9fc3VwcHJlc3NfbmQoc2tiLCBiciwgdmlkLCBwLCBtc2cpO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcXG5pbmRleCBkNTVlYTk1MTZlM2UzNi4uMTZlZDA5ZWJmZmMzY2YgMTAwNjQ0XFxuLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcXG4rKysgYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxcbkBAIC0yMzYxLDcgKzIzNjEsNyBAQCB2b2lkIGJyX2RvX3Byb3h5X3N1cHByZXNzX2FycChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuIFxcdFxcdFxcdCAgICAgIHUxNiB2aWQsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApO1xcbiB2b2lkIGJyX2RvX3N1cHByZXNzX25kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4gXFx0XFx0ICAgICAgIHUxNiB2aWQsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBuZF9tc2cgKm1zZyk7XFxuLXN0cnVjdCBuZF9tc2cgKmJyX2lzX25kX25laWdoX21zZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmRfbXNnICptKTtcXG4rc3RydWN0IG5kX21zZyAqYnJfaXNfbmRfbmVpZ2hfbXNnKHN0cnVjdCBza19idWZmICpza2IpO1xcbiBib29sIGJyX2lzX25laWdoX3N1cHByZXNzX2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IHZpZCk7XFxuIGJvb2wgYnJfaXNfbmVpZ2hfZm9yd2FyZF9ncmF0X2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IHZpZCk7XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9NYWtlZmlsZSBiL25ldC9pcHY2L01ha2VmaWxlXFxuaW5kZXggNWIwY2Q2NDg4MDIxMjQuLmNmNWUwMWY4M2NlM2QwIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L01ha2VmaWxlXFxuKysrIGIvbmV0L2lwdjYvTWFrZWZpbGVcXG5AQCAtNTEsNyArNTEsNyBAQCBvYmotJChzdWJzdCBtLHksJChDT05GSUdfSVBWNikpICs9IGluZXQ2X2hhc2h0YWJsZXMub1xcbiBcXG4gaWZuZXEgKCQoQ09ORklHX0lQVjYpLClcXG4gb2JqLSQoQ09ORklHX05FVF9VRFBfVFVOTkVMKSArPSBpcDZfdWRwX3R1bm5lbC5vXFxuLW9iai15ICs9IG1jYXN0X3Nub29wLm9cXG4rb2JqLXkgKz0gbWNhc3Rfc25vb3AubyBuZGlzY19zbm9vcC5vXFxuIG9iai0kKENPTkZJR19UQ1BfQU8pICs9IHRjcF9hby5vXFxuIGVuZGlmXFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuY1xcbmluZGV4IGY4NjdlYzhkM2Q5MDUxLi5kOGI0NTg4ZjZiZmY5MiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9uZGlzYy5jXFxuKysrIGIvbmV0L2lwdjYvbmRpc2MuY1xcbkBAIC0yODMsNiArMjgzLDcgQEAgc3RydWN0IG5kaXNjX29wdGlvbnMgKm5kaXNjX3BhcnNlX29wdGlvbnMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0fVxcbiBcXHRyZXR1cm4gbmRvcHRzO1xcbiB9XFxuK0VYUE9SVF9TWU1CT0wobmRpc2NfcGFyc2Vfb3B0aW9ucyk7XFxuIFxcbiBpbnQgbmRpc2NfbWNfbWFwKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgY2hhciAqYnVmLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGlyKVxcbiB7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25kaXNjX3Nub29wLmMgYi9uZXQvaXB2Ni9uZGlzY19zbm9vcC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYTkzZWVkMjdhMWY2ZDdcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvbmV0L2lwdjYvbmRpc2Nfc25vb3AuY1xcbkBAIC0wLDAgKzEsMTkwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9hZGRyY29uZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2lwNl9jaGVja3N1bS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2lwdjYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9uZGlzYy5oXFx1MDAzZVxcbitcXG4rc3RhdGljIGludCBuZGlzY19jaGVja19pcDZoZHIoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcXG4rXFx0dW5zaWduZWQgaW50IG9mZnNldCwgbGVuO1xcbitcXG4rXFx0b2Zmc2V0ID0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikgKyBzaXplb2YoKmlwNmgpO1xcbitcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBvZmZzZXQpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlwNmggPSBpcHY2X2hkcihza2IpO1xcbitcXG4rXFx0aWYgKGlwNmgtXFx1MDAzZXZlcnNpb24gIT0gNilcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAoaXA2aC1cXHUwMDNlbmV4dGhkciAhPSBJUFBST1RPX0lDTVBWNilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NU0c7XFxuK1xcbitcXHQvKiBSRkMgNDg2MSA3LjEuMSAvIDcuMS4yOiBtdXN0IG5vdCBoYXZlIGJlZW4gZm9yd2FyZGVkIGJ5IGEgcm91dGVyICovXFxuK1xcdGlmIChpcDZoLVxcdTAwM2Vob3BfbGltaXQgIT0gMjU1KVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGxlbiA9IG9mZnNldCArIG50b2hzKGlwNmgtXFx1MDAzZXBheWxvYWRfbGVuKTtcXG4rXFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2MgbGVuIHx8IGxlbiBcXHUwMDNjPSBvZmZzZXQpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0c2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKHNrYiwgb2Zmc2V0KTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgX19zdW0xNiBuZGlzY192YWxpZGF0ZV9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHJldHVybiBza2JfY2hlY2tzdW1fdmFsaWRhdGUoc2tiLCBJUFBST1RPX0lDTVBWNiwgaXA2X2NvbXB1dGVfcHNldWRvKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBuZGlzY19jaGVja19pY21wdjYoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgbGVuID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSArIHNpemVvZihzdHJ1Y3QgaWNtcDZoZHIpO1xcbitcXHR1bnNpZ25lZCBpbnQgdHJhbnNwb3J0X2xlbiA9IGlwdjZfdHJhbnNwb3J0X2xlbihza2IpO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2NoaztcXG4rXFx0c3RydWN0IGljbXA2aGRyICpoZHI7XFxuK1xcbitcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBsZW4pKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdC8qIFJGQyA0ODYxIDcuMS4xIC8gNy4xLjI6IHRoZSBJQ01QdjYgY2hlY2tzdW0gbXVzdCBiZSB2YWxpZCAqL1xcbitcXHRza2JfY2hrID0gc2tiX2NoZWNrc3VtX3RyaW1tZWQoc2tiLCB0cmFuc3BvcnRfbGVuLFxcbitcXHRcXHRcXHRcXHQgICAgICAgbmRpc2NfdmFsaWRhdGVfY2hlY2tzdW0pO1xcbitcXHRpZiAoIXNrYl9jaGspXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKHNrYl9jaGsgIT0gc2tiKVxcbitcXHRcXHRrZnJlZV9za2Ioc2tiX2Noayk7XFxuK1xcbitcXHQvKiBSRkMgNDg2MSA3LjEuMSAvIDcuMS4yOiBDb2RlIG11c3QgYmUgMCAqL1xcbitcXHRoZHIgPSAoc3RydWN0IGljbXA2aGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG4rXFx0aWYgKGhkci1cXHUwMDNlaWNtcDZfY29kZSAhPSAwKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG5kaXNjX2NoZWNrX29wdGlvbnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG9wdHNfbGVuLFxcbitcXHRcXHRcXHQgICAgICAgYm9vbCByZWplY3Rfc2xsYSlcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSArIHNpemVvZihzdHJ1Y3QgbmRfbXNnKTtcXG4rXFx0c3RydWN0IG5kX29wdF9oZHIgKm9wdCwgX29wdDtcXG4rXFxuK1xcdHdoaWxlIChvcHRzX2xlbiBcXHUwMDNlIDApIHtcXG4rXFx0XFx0aWYgKG9wdHNfbGVuIFxcdTAwM2Mgc2l6ZW9mKCpvcHQpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdFxcdG9wdCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9vcHQpLCBcXHUwMDI2X29wdCk7XFxuK1xcdFxcdGlmICghb3B0KVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdFxcdC8qIFJGQyA0ODYxIDcuMS4xIC8gNy4xLjI6IGFsbCBvcHRpb24gbGVuZ3RocyBtdXN0IGJlIFxcdTAwM2UgMCAqL1xcbitcXHRcXHRpZiAoIW9wdC1cXHUwMDNlbmRfb3B0X2xlbilcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHQvKiBSRkMgNDg2MSA3LjEuMTogREFEIE5TIG11c3Qgbm90IGNvbnRhaW4gYSBzb3VyY2UgbGluay1sYXllclxcbitcXHRcXHQgKiBhZGRyZXNzIG9wdGlvblxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHJlamVjdF9zbGxhIFxcdTAwMjZcXHUwMDI2IG9wdC1cXHUwMDNlbmRfb3B0X3R5cGUgPT0gTkRfT1BUX1NPVVJDRV9MTF9BRERSKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdFxcdGlmIChvcHQtXFx1MDAzZW5kX29wdF9sZW4gKiA4IFxcdTAwM2Ugb3B0c19sZW4pXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0b2Zmc2V0ICs9IG9wdC1cXHUwMDNlbmRfb3B0X2xlbiAqIDg7XFxuK1xcdFxcdG9wdHNfbGVuIC09IG9wdC1cXHUwMDNlbmRfb3B0X2xlbiAqIDg7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG5kaXNjX2NoZWNrX25kX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBsZW4gPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgc2l6ZW9mKHN0cnVjdCBuZF9tc2cpO1xcbitcXHR1bnNpZ25lZCBpbnQgdHJhbnNwb3J0X2xlbiA9IGlwdjZfdHJhbnNwb3J0X2xlbihza2IpO1xcbitcXHRib29sIHJlamVjdF9zbGxhID0gZmFsc2U7XFxuK1xcdGNvbnN0IHN0cnVjdCBuZF9tc2cgKm1zZztcXG4rXFxuK1xcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGxlbikpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0LyogUkZDIDQ4NjEgNy4xLjEgLyA3LjEuMjogSUNNUCBsZW5ndGggaXMgYXQgbGVhc3Qgc2l6ZW9mKG5kX21zZykgKi9cXG4rXFx0aWYgKHRyYW5zcG9ydF9sZW4gXFx1MDAzYyBzaXplb2Yoc3RydWN0IG5kX21zZykpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bXNnID0gKHN0cnVjdCBuZF9tc2cgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbitcXG4rXFx0LyogUkZDIDQ4NjEgNy4xLjEgLyA3LjEuMjogVGFyZ2V0IEFkZHJlc3MgbXVzdCBub3QgYmUgYVxcbitcXHQgKiBtdWx0aWNhc3QgYWRkcmVzc1xcbitcXHQgKi9cXG4rXFx0aWYgKGlwdjZfYWRkcl9pc19tdWx0aWNhc3QoXFx1MDAyNm1zZy1cXHUwMDNldGFyZ2V0KSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRzd2l0Y2ggKG1zZy1cXHUwMDNlaWNtcGguaWNtcDZfdHlwZSkge1xcbitcXHRjYXNlIE5ESVNDX05FSUdIQk9VUl9TT0xJQ0lUQVRJT046XFxuK1xcdFxcdGlmIChpcHY2X2FkZHJfYW55KFxcdTAwMjZpcHY2X2hkcihza2IpLVxcdTAwM2VzYWRkcikpIHtcXG4rXFx0XFx0XFx0LyogUkZDIDQ4NjEgNy4xLjE6IERBRCBOUyBkZXN0aW5hdGlvbiBtdXN0IGJlIGFcXG4rXFx0XFx0XFx0ICogc29saWNpdGVkLW5vZGUgbXVsdGljYXN0IGFkZHJlc3NcXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmICghaXB2Nl9hZGRyX2lzX3NvbGljdF9tdWx0KFxcdTAwMjZpcHY2X2hkcihza2IpLVxcdTAwM2VkYWRkcikpXFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHQvKiBSRkMgNDg2MSA3LjEuMTogREFEIE5TIG11c3Qgbm90IGNvbnRhaW4gYSBzb3VyY2VcXG4rXFx0XFx0XFx0ICogbGluay1sYXllciBhZGRyZXNzIG9wdGlvblxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0cmVqZWN0X3NsbGEgPSB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE5ESVNDX05FSUdIQk9VUl9BRFZFUlRJU0VNRU5UOlxcbitcXHRcXHQvKiBSRkMgNDg2MSA3LjEuMjogU29saWNpdGVkIGZsYWcgbXVzdCBiZSAwIGZvclxcbitcXHRcXHQgKiBtdWx0aWNhc3QgZGVzdGluYXRpb25zXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoaXB2Nl9hZGRyX2lzX211bHRpY2FzdChcXHUwMDI2aXB2Nl9oZHIoc2tiKS1cXHUwMDNlZGFkZHIpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBtc2ctXFx1MDAzZWljbXBoLmljbXA2X3NvbGljaXRlZClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVOT0RBVEE7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBuZGlzY19jaGVja19vcHRpb25zKHNrYiwgdHJhbnNwb3J0X2xlbiAtIHNpemVvZihzdHJ1Y3QgbmRfbXNnKSxcXG4rXFx0XFx0XFx0XFx0ICAgcmVqZWN0X3NsbGEpO1xcbit9XFxuK1xcbisvKipcXG4rICogbmRpc2NfY2hlY2tfbnNfbmEgLSB2YWxpZGF0ZSBhbiBOUy9OQSBwYWNrZXQgYW5kIHNldCBpdHMgdHJhbnNwb3J0IGhlYWRlclxcbisgKiBAc2tiOiB0aGUgc2tiIHRvIHZhbGlkYXRlXFxuKyAqXFxuKyAqIFZhbGlkYXRlcyBhbiBJUHY2IHBhY2tldCBmb3IgY29tcGxpYW5jZSB3aXRoIFJGQyA0ODYxIHNlY3Rpb25zIDcuMS4xXFxuKyAqIChOZWlnaGJvciBTb2xpY2l0YXRpb24pIGFuZCA3LjEuMiAoTmVpZ2hib3IgQWR2ZXJ0aXNlbWVudCkuIElmIHZhbGlkLFxcbisgKiBzZXRzIHRoZSBza2IgdHJhbnNwb3J0IGhlYWRlci5cXG4rICpcXG4rICogQ2FsbGVyIG5lZWRzIHRvIHNldCB0aGUgc2tiIG5ldHdvcmsgaGVhZGVyLlxcbisgKlxcbisgKiBSZXR1cm46XFxuKyAqICogMCAgICAgICAgLSB2YWxpZCBOUy9OQTsgdGhlIHNrYiB0cmFuc3BvcnQgaGVhZGVyIGhhcyBiZWVuIHNldC5cXG4rICogKiAtRUlOVkFMICAtIGEgYnJva2VuIHBhY2tldCB3YXMgZGV0ZWN0ZWQsIGkuZS4gaXQgdmlvbGF0ZXMgc29tZVxcbisgKiAgICAgICAgICAgICAgaW50ZXJuZXQgc3RhbmRhcmQuXFxuKyAqICogLUVOT01TRyAgLSBJUCBoZWFkZXIgdmFsaWRhdGlvbiBzdWNjZWVkZWQgYnV0IGl0IGlzIG5vdCBhbiBJQ01QdjZcXG4rICogICAgICAgICAgICAgIHBhY2tldC5cXG4rICogKiAtRU5PREFUQSAtIElQK0lDTVB2NiBoZWFkZXIgdmFsaWRhdGlvbiBzdWNjZWVkZWQgYnV0IGl0IGlzIG5vdCBhXFxuKyAqICAgICAgICAgICAgICBOZWlnaGJvciBTb2xpY2l0YXRpb24gb3IgTmVpZ2hib3IgQWR2ZXJ0aXNlbWVudC5cXG4rICovXFxuK2ludCBuZGlzY19jaGVja19uc19uYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBuZGlzY19jaGVja19pcDZoZHIoc2tiKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBuZGlzY19jaGVja19pY21wdjYoc2tiKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gbmRpc2NfY2hlY2tfbmRfbXNnKHNrYik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChuZGlzY19jaGVja19uc19uYSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDE0OjE5OjI2LjI0NTA5ODkxN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1MDcxNjYwNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmRpc2NfY2hlY2tfbnNfbmFcIixcbiAgICBcImJyX2lzX25kX25laWdoX21zZ1wiLFxuICAgIFwiYnJfbmRfc2VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYG5kaXNjX2NoZWNrX25zX25hYCB0byB2YWxpZGF0ZSBJUHY2IE5laWdoYm9yIFNvbGljaXRhdGlvbiBhbmQgQWR2ZXJ0aXNlbWVudCBwYWNrZXRzLCBhbmQgdXBkYXRlcyB0aGUgYnJpZGdlIE5EIHByb3h5IGNvZGUgdG8gdXNlIGl0LiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgcHJvY2Vzc2VzIHVudHJ1c3RlZCBuZXR3b3JrIHBhY2tldHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGVlZWE2MjE4MjUyNzNhZWI1OTZmYjIyMTZlZTRhMWQwNTQyYjNiMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDE5IDE0OjE5OjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmRpc2MuaCBiL2luY2x1ZGUvbmV0L25kaXNjLmhcbmluZGV4IDNkYTFhNmY4ZDNmOTIwLi45ZTUzNzlhZDJkOGUwMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25kaXNjLmhcbisrKyBiL2luY2x1ZGUvbmV0L25kaXNjLmhcbkBAIC00MzAsNiArNDMwLDggQEAgdm9pZCBuZGlzY191cGRhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsXG4gXHRcdCAgY29uc3QgdTggKmxsYWRkciwgdTggbmV3LCB1MzIgZmxhZ3MsIHU4IGljbXA2X3R5cGUsXG4gXHRcdCAgc3RydWN0IG5kaXNjX29wdGlvbnMgKm5kb3B0cyk7XG4gXG4raW50IG5kaXNjX2NoZWNrX25zX25hKHN0cnVjdCBza19idWZmICpza2IpO1xuK1xuIC8qXG4gICpcdElHTVBcbiAgKi9cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jIGIvbmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuY1xuaW5kZXggMjNlYjY5MzFhMmI0YWQuLjc4NjNiZWFlMGM1NTVkIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuY1xuKysrIGIvbmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuY1xuQEAgLTE5LDYgKzE5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvYWRkcmNvbmYuaFx1MDAzZVxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcDZfY2hlY2tzdW0uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9uZGlzYy5oXHUwMDNlXG4gI2VuZGlmXG4gXG4gI2luY2x1ZGUgXCJicl9wcml2YXRlLmhcIlxuQEAgLTIzNCwyMSArMjM1LDE1IEBAIHZvaWQgYnJfZG9fcHJveHlfc3VwcHJlc3NfYXJwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiAjZW5kaWZcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbi1zdHJ1Y3QgbmRfbXNnICpicl9pc19uZF9uZWlnaF9tc2coY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5kX21zZyAqbXNnKVxuK3N0cnVjdCBuZF9tc2cgKmJyX2lzX25kX25laWdoX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBuZF9tc2cgKm07XG4tXG4tXHRtID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikgK1xuLVx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLCBzaXplb2YoKm1zZyksIG1zZyk7XG4tXHRpZiAoIW0pXG4rXHRpZiAobmRpc2NfY2hlY2tfbnNfbmEoc2tiKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRpZiAobS1cdTAwM2VpY21waC5pY21wNl9jb2RlICE9IDAgfHxcbi1cdCAgICAobS1cdTAwM2VpY21waC5pY21wNl90eXBlICE9IE5ESVNDX05FSUdIQk9VUl9TT0xJQ0lUQVRJT04gXHUwMDI2XHUwMDI2XG4tXHQgICAgIG0tXHUwMDNlaWNtcGguaWNtcDZfdHlwZSAhPSBORElTQ19ORUlHSEJPVVJfQURWRVJUSVNFTUVOVCkpXG4rXHRpZiAoc2tiX2xpbmVhcml6ZShza2IpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdHJldHVybiBtO1xuK1x0cmV0dXJuIChzdHJ1Y3QgbmRfbXNnICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYnJfbmRfc2VuZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG5AQCAtMjU3LDE3ICsyNTIsMTggQEAgc3RhdGljIHZvaWQgYnJfbmRfc2VuZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJlcXVlc3QtXHUwMDNlZGV2O1xuIFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XG4rXHRzdHJ1Y3QgbmRpc2Nfb3B0aW9ucyBuZG9wdHM7XG4gXHRzdHJ1Y3QgbmRfbXNnICpuYSwgKm5zO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xuIFx0c3RydWN0IGlwdjZoZHIgKnBpcDY7XG4gXHRpbnQgbmFfb2xlbiA9IDg7IC8qIG9wdCBoZHIgKyBFVEhfQUxFTiBmb3IgdGFyZ2V0ICovXG4gXHRpbnQgbnNfb2xlbjtcbi1cdGludCBpLCBsZW47XG4gXHR1OCAqZGFkZHI7XG4gXHRib29sIGRhZDtcbiBcdHUxNiBwdmlkO1xuK1x0aW50IGxlbjtcbiBcbi1cdGlmICghZGV2IHx8IHNrYl9saW5lYXJpemUocmVxdWVzdCkpXG4rXHRpZiAoIWRldilcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bGVuID0gTExfUkVTRVJWRURfU1BBQ0UoZGV2KSArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgK1xuQEAgLTI4NCwyMyArMjgwLDIzIEBAIHN0YXRpYyB2b2lkIGJyX25kX3NlbmQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuIFx0c2tiX3NldF9tYWNfaGVhZGVyKHJlcGx5LCAwKTtcbiBcbiBcdGRhZGRyID0gZXRoX2hkcihyZXF1ZXN0KS1cdTAwM2VoX3NvdXJjZTtcbi1cdG5zID0gKHN0cnVjdCBuZF9tc2cgKikoc2tiX25ldHdvcmtfaGVhZGVyKHJlcXVlc3QpICtcbi1cdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4tXG4tXHQvKiBEbyB3ZSBuZWVkIG9wdGlvbiBwcm9jZXNzaW5nID8gKi9cbi1cdG5zX29sZW4gPSByZXF1ZXN0LVx1MDAzZWxlbiAtIChza2JfbmV0d29ya19vZmZzZXQocmVxdWVzdCkgK1xuLVx0XHRcdFx0ICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSAtIHNpemVvZigqbnMpO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnNfb2xlbiAtIDE7IGkgKz0gKG5zLVx1MDAzZW9wdFtpICsgMV0gXHUwMDNjXHUwMDNjIDMpKSB7XG4tXHRcdGlmICghbnMtXHUwMDNlb3B0W2kgKyAxXSB8fCBpICsgKG5zLVx1MDAzZW9wdFtpICsgMV0gXHUwMDNjXHUwMDNjIDMpIFx1MDAzZSBuc19vbGVuKSB7XG4tXHRcdFx0a2ZyZWVfc2tiKHJlcGx5KTtcbi1cdFx0XHRyZXR1cm47XG4tXHRcdH1cbi1cdFx0aWYgKG5zLVx1MDAzZW9wdFtpXSA9PSBORF9PUFRfU09VUkNFX0xMX0FERFIpIHtcbi1cdFx0XHRpZiAoKG5zLVx1MDAzZW9wdFtpICsgMV0gXHUwMDNjXHUwMDNjIDMpIFx1MDAzZT1cbi1cdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCBuZF9vcHRfaGRyKSArIEVUSF9BTEVOKVxuLVx0XHRcdFx0ZGFkZHIgPSBucy1cdTAwM2VvcHQgKyBpICsgc2l6ZW9mKHN0cnVjdCBuZF9vcHRfaGRyKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuK1x0bnMgPSAoc3RydWN0IG5kX21zZyAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHJlcXVlc3QpO1xuK1xuK1x0LyogRGVyaXZlIHRoZSBvcHRpb24gbGVuZ3RoIGZyb20gdGhlIElQdjYgcGF5bG9hZCBsZW5ndGggc28gdGhhdCBhbnlcbitcdCAqIHRyYWlsaW5nIEwyIHBhZGRpbmcgaW4gdGhlIHNrYiBpcyBub3QgcGFyc2VkIGFzIE5EIG9wdGlvbnMuXG4rXHQgKi9cbitcdG5zX29sZW4gPSBudG9ocyhpcHY2X2hkcihyZXF1ZXN0KS1cdTAwM2VwYXlsb2FkX2xlbikgLSBzaXplb2YoKm5zKTtcbitcdGlmICghbmRpc2NfcGFyc2Vfb3B0aW9ucyhkZXYsIG5zLVx1MDAzZW9wdCwgbnNfb2xlbiwgXHUwMDI2bmRvcHRzKSkge1xuK1x0XHRrZnJlZV9za2IocmVwbHkpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAobmRvcHRzLm5kX29wdHNfc3JjX2xsYWRkcikge1xuK1x0XHR1OCAqbGxhZGRyO1xuK1xuK1x0XHRsbGFkZHIgPSBuZGlzY19vcHRfYWRkcl9kYXRhKG5kb3B0cy5uZF9vcHRzX3NyY19sbGFkZHIsIGRldik7XG4rXHRcdGlmIChsbGFkZHIpXG4rXHRcdFx0ZGFkZHIgPSBsbGFkZHI7XG4gXHR9XG4gXG4gXHRkYWQgPSBpcHY2X2FkZHJfYW55KFx1MDAyNmlwdjZfaGRyKHJlcXVlc3QpLVx1MDAzZXNhZGRyKTtcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xuaW5kZXggZTdmMzQzYWIyMmQzNzkuLmZmNTVkYWI3MzYzMjZiIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xuKysrIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xuQEAgLTgwLDkgKzgwLDkgQEAgbmV0ZGV2X3R4X3QgYnJfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0ICAgcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgK1xuIFx0XHRcdFx0IHNpemVvZihzdHJ1Y3QgbmRfbXNnKSkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgIGlwdjZfaGRyKHNrYiktXHUwMDNlbmV4dGhkciA9PSBJUFBST1RPX0lDTVBWNikge1xuLVx0XHRcdHN0cnVjdCBuZF9tc2cgKm1zZywgX21zZztcbitcdFx0XHRzdHJ1Y3QgbmRfbXNnICptc2c7XG4gXG4tXHRcdFx0bXNnID0gYnJfaXNfbmRfbmVpZ2hfbXNnKHNrYiwgXHUwMDI2X21zZyk7XG4rXHRcdFx0bXNnID0gYnJfaXNfbmRfbmVpZ2hfbXNnKHNrYik7XG4gXHRcdFx0aWYgKG1zZylcbiBcdFx0XHRcdGJyX2RvX3N1cHByZXNzX25kKHNrYiwgYnIsIHZpZCwgTlVMTCwgbXNnKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmNcbmluZGV4IGRkYjhmMDAyYTQwZTgyLi5kODdhNWY5ZmE5MmI3MCAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xuKysrIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jXG5AQCAtMTc2LDkgKzE3Niw5IEBAIGludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiXG4gXHRcdCAgIHBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICtcbiBcdFx0XHRcdCBzaXplb2Yoc3RydWN0IG5kX21zZykpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICBpcHY2X2hkcihza2IpLVx1MDAzZW5leHRoZHIgPT0gSVBQUk9UT19JQ01QVjYpIHtcbi1cdFx0XHRzdHJ1Y3QgbmRfbXNnICptc2csIF9tc2c7XG4rXHRcdFx0c3RydWN0IG5kX21zZyAqbXNnO1xuIFxuLVx0XHRcdG1zZyA9IGJyX2lzX25kX25laWdoX21zZyhza2IsIFx1MDAyNl9tc2cpO1xuK1x0XHRcdG1zZyA9IGJyX2lzX25kX25laWdoX21zZyhza2IpO1xuIFx0XHRcdGlmIChtc2cpXG4gXHRcdFx0XHRicl9kb19zdXBwcmVzc19uZChza2IsIGJyLCB2aWQsIHAsIG1zZyk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmggYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxuaW5kZXggZDU1ZWE5NTE2ZTNlMzYuLjE2ZWQwOWViZmZjM2NmIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcbisrKyBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXG5AQCAtMjM2MSw3ICsyMzYxLDcgQEAgdm9pZCBicl9kb19wcm94eV9zdXBwcmVzc19hcnAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0XHRcdCAgICAgIHUxNiB2aWQsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApO1xuIHZvaWQgYnJfZG9fc3VwcHJlc3NfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0XHQgICAgICAgdTE2IHZpZCwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IG5kX21zZyAqbXNnKTtcbi1zdHJ1Y3QgbmRfbXNnICpicl9pc19uZF9uZWlnaF9tc2coY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5kX21zZyAqbSk7XG4rc3RydWN0IG5kX21zZyAqYnJfaXNfbmRfbmVpZ2hfbXNnKHN0cnVjdCBza19idWZmICpza2IpO1xuIGJvb2wgYnJfaXNfbmVpZ2hfc3VwcHJlc3NfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgdmlkKTtcbiBib29sIGJyX2lzX25laWdoX2ZvcndhcmRfZ3JhdF9lbmFibGVkKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiB2aWQpO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L01ha2VmaWxlIGIvbmV0L2lwdjYvTWFrZWZpbGVcbmluZGV4IDViMGNkNjQ4ODAyMTI0Li5jZjVlMDFmODNjZTNkMCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L01ha2VmaWxlXG4rKysgYi9uZXQvaXB2Ni9NYWtlZmlsZVxuQEAgLTUxLDcgKzUxLDcgQEAgb2JqLSQoc3Vic3QgbSx5LCQoQ09ORklHX0lQVjYpKSArPSBpbmV0Nl9oYXNodGFibGVzLm9cbiBcbiBpZm5lcSAoJChDT05GSUdfSVBWNiksKVxuIG9iai0kKENPTkZJR19ORVRfVURQX1RVTk5FTCkgKz0gaXA2X3VkcF90dW5uZWwub1xuLW9iai15ICs9IG1jYXN0X3Nub29wLm9cbitvYmoteSArPSBtY2FzdF9zbm9vcC5vIG5kaXNjX3Nub29wLm9cbiBvYmotJChDT05GSUdfVENQX0FPKSArPSB0Y3BfYW8ub1xuIGVuZGlmXG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmNcbmluZGV4IGY4NjdlYzhkM2Q5MDUxLi5kOGI0NTg4ZjZiZmY5MiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25kaXNjLmNcbisrKyBiL25ldC9pcHY2L25kaXNjLmNcbkBAIC0yODMsNiArMjgzLDcgQEAgc3RydWN0IG5kaXNjX29wdGlvbnMgKm5kaXNjX3BhcnNlX29wdGlvbnMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdH1cbiBcdHJldHVybiBuZG9wdHM7XG4gfVxuK0VYUE9SVF9TWU1CT0wobmRpc2NfcGFyc2Vfb3B0aW9ucyk7XG4gXG4gaW50IG5kaXNjX21jX21hcChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIGNoYXIgKmJ1Ziwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRpcilcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2Nfc25vb3AuYyBiL25ldC9pcHY2L25kaXNjX3Nub29wLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYTkzZWVkMjdhMWY2ZDdcbi0tLSAvZGV2L251bGxcbisrKyBiL25ldC9pcHY2L25kaXNjX3Nub29wLmNcbkBAIC0wLDAgKzEsMTkwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2FkZHJjb25mLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X2NoZWNrc3VtLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvaXB2Ni5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L25kaXNjLmhcdTAwM2VcbitcbitzdGF0aWMgaW50IG5kaXNjX2NoZWNrX2lwNmhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoO1xuK1x0dW5zaWduZWQgaW50IG9mZnNldCwgbGVuO1xuK1xuK1x0b2Zmc2V0ID0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikgKyBzaXplb2YoKmlwNmgpO1xuK1x0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgb2Zmc2V0KSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpcDZoID0gaXB2Nl9oZHIoc2tiKTtcbitcbitcdGlmIChpcDZoLVx1MDAzZXZlcnNpb24gIT0gNilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoaXA2aC1cdTAwM2VuZXh0aGRyICE9IElQUFJPVE9fSUNNUFY2KVxuK1x0XHRyZXR1cm4gLUVOT01TRztcbitcbitcdC8qIFJGQyA0ODYxIDcuMS4xIC8gNy4xLjI6IG11c3Qgbm90IGhhdmUgYmVlbiBmb3J3YXJkZWQgYnkgYSByb3V0ZXIgKi9cbitcdGlmIChpcDZoLVx1MDAzZWhvcF9saW1pdCAhPSAyNTUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0bGVuID0gb2Zmc2V0ICsgbnRvaHMoaXA2aC1cdTAwM2VwYXlsb2FkX2xlbik7XG4rXHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgbGVuIHx8IGxlbiBcdTAwM2M9IG9mZnNldClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBvZmZzZXQpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBfX3N1bTE2IG5kaXNjX3ZhbGlkYXRlX2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0cmV0dXJuIHNrYl9jaGVja3N1bV92YWxpZGF0ZShza2IsIElQUFJPVE9fSUNNUFY2LCBpcDZfY29tcHV0ZV9wc2V1ZG8pO1xuK31cbitcbitzdGF0aWMgaW50IG5kaXNjX2NoZWNrX2ljbXB2NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHVuc2lnbmVkIGludCBsZW4gPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgc2l6ZW9mKHN0cnVjdCBpY21wNmhkcik7XG4rXHR1bnNpZ25lZCBpbnQgdHJhbnNwb3J0X2xlbiA9IGlwdjZfdHJhbnNwb3J0X2xlbihza2IpO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYl9jaGs7XG4rXHRzdHJ1Y3QgaWNtcDZoZHIgKmhkcjtcbitcbitcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGxlbikpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0LyogUkZDIDQ4NjEgNy4xLjEgLyA3LjEuMjogdGhlIElDTVB2NiBjaGVja3N1bSBtdXN0IGJlIHZhbGlkICovXG4rXHRza2JfY2hrID0gc2tiX2NoZWNrc3VtX3RyaW1tZWQoc2tiLCB0cmFuc3BvcnRfbGVuLFxuK1x0XHRcdFx0ICAgICAgIG5kaXNjX3ZhbGlkYXRlX2NoZWNrc3VtKTtcbitcdGlmICghc2tiX2NoaylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoc2tiX2NoayAhPSBza2IpXG4rXHRcdGtmcmVlX3NrYihza2JfY2hrKTtcbitcbitcdC8qIFJGQyA0ODYxIDcuMS4xIC8gNy4xLjI6IENvZGUgbXVzdCBiZSAwICovXG4rXHRoZHIgPSAoc3RydWN0IGljbXA2aGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbitcdGlmIChoZHItXHUwMDNlaWNtcDZfY29kZSAhPSAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IG5kaXNjX2NoZWNrX29wdGlvbnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG9wdHNfbGVuLFxuK1x0XHRcdCAgICAgICBib29sIHJlamVjdF9zbGxhKVxuK3tcbitcdHVuc2lnbmVkIGludCBvZmZzZXQgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgc2l6ZW9mKHN0cnVjdCBuZF9tc2cpO1xuK1x0c3RydWN0IG5kX29wdF9oZHIgKm9wdCwgX29wdDtcbitcbitcdHdoaWxlIChvcHRzX2xlbiBcdTAwM2UgMCkge1xuK1x0XHRpZiAob3B0c19sZW4gXHUwMDNjIHNpemVvZigqb3B0KSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0b3B0ID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX29wdCksIFx1MDAyNl9vcHQpO1xuK1x0XHRpZiAoIW9wdClcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0LyogUkZDIDQ4NjEgNy4xLjEgLyA3LjEuMjogYWxsIG9wdGlvbiBsZW5ndGhzIG11c3QgYmUgXHUwMDNlIDAgKi9cbitcdFx0aWYgKCFvcHQtXHUwMDNlbmRfb3B0X2xlbilcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0LyogUkZDIDQ4NjEgNy4xLjE6IERBRCBOUyBtdXN0IG5vdCBjb250YWluIGEgc291cmNlIGxpbmstbGF5ZXJcbitcdFx0ICogYWRkcmVzcyBvcHRpb25cbitcdFx0ICovXG4rXHRcdGlmIChyZWplY3Rfc2xsYSBcdTAwMjZcdTAwMjYgb3B0LVx1MDAzZW5kX29wdF90eXBlID09IE5EX09QVF9TT1VSQ0VfTExfQUREUilcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0aWYgKG9wdC1cdTAwM2VuZF9vcHRfbGVuICogOCBcdTAwM2Ugb3B0c19sZW4pXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdG9mZnNldCArPSBvcHQtXHUwMDNlbmRfb3B0X2xlbiAqIDg7XG4rXHRcdG9wdHNfbGVuIC09IG9wdC1cdTAwM2VuZF9vcHRfbGVuICogODtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IG5kaXNjX2NoZWNrX25kX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHVuc2lnbmVkIGludCBsZW4gPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgc2l6ZW9mKHN0cnVjdCBuZF9tc2cpO1xuK1x0dW5zaWduZWQgaW50IHRyYW5zcG9ydF9sZW4gPSBpcHY2X3RyYW5zcG9ydF9sZW4oc2tiKTtcbitcdGJvb2wgcmVqZWN0X3NsbGEgPSBmYWxzZTtcbitcdGNvbnN0IHN0cnVjdCBuZF9tc2cgKm1zZztcbitcbitcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGxlbikpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0LyogUkZDIDQ4NjEgNy4xLjEgLyA3LjEuMjogSUNNUCBsZW5ndGggaXMgYXQgbGVhc3Qgc2l6ZW9mKG5kX21zZykgKi9cbitcdGlmICh0cmFuc3BvcnRfbGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IG5kX21zZykpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0bXNnID0gKHN0cnVjdCBuZF9tc2cgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuK1xuK1x0LyogUkZDIDQ4NjEgNy4xLjEgLyA3LjEuMjogVGFyZ2V0IEFkZHJlc3MgbXVzdCBub3QgYmUgYVxuK1x0ICogbXVsdGljYXN0IGFkZHJlc3NcbitcdCAqL1xuK1x0aWYgKGlwdjZfYWRkcl9pc19tdWx0aWNhc3QoXHUwMDI2bXNnLVx1MDAzZXRhcmdldCkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0c3dpdGNoIChtc2ctXHUwMDNlaWNtcGguaWNtcDZfdHlwZSkge1xuK1x0Y2FzZSBORElTQ19ORUlHSEJPVVJfU09MSUNJVEFUSU9OOlxuK1x0XHRpZiAoaXB2Nl9hZGRyX2FueShcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZXNhZGRyKSkge1xuK1x0XHRcdC8qIFJGQyA0ODYxIDcuMS4xOiBEQUQgTlMgZGVzdGluYXRpb24gbXVzdCBiZSBhXG4rXHRcdFx0ICogc29saWNpdGVkLW5vZGUgbXVsdGljYXN0IGFkZHJlc3NcbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoIWlwdjZfYWRkcl9pc19zb2xpY3RfbXVsdChcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyKSlcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdC8qIFJGQyA0ODYxIDcuMS4xOiBEQUQgTlMgbXVzdCBub3QgY29udGFpbiBhIHNvdXJjZVxuK1x0XHRcdCAqIGxpbmstbGF5ZXIgYWRkcmVzcyBvcHRpb25cbitcdFx0XHQgKi9cbitcdFx0XHRyZWplY3Rfc2xsYSA9IHRydWU7XG4rXHRcdH1cbitcdFx0YnJlYWs7XG4rXHRjYXNlIE5ESVNDX05FSUdIQk9VUl9BRFZFUlRJU0VNRU5UOlxuK1x0XHQvKiBSRkMgNDg2MSA3LjEuMjogU29saWNpdGVkIGZsYWcgbXVzdCBiZSAwIGZvclxuK1x0XHQgKiBtdWx0aWNhc3QgZGVzdGluYXRpb25zXG4rXHRcdCAqL1xuK1x0XHRpZiAoaXB2Nl9hZGRyX2lzX211bHRpY2FzdChcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIG1zZy1cdTAwM2VpY21waC5pY21wNl9zb2xpY2l0ZWQpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FTk9EQVRBO1xuK1x0fVxuK1xuK1x0cmV0dXJuIG5kaXNjX2NoZWNrX29wdGlvbnMoc2tiLCB0cmFuc3BvcnRfbGVuIC0gc2l6ZW9mKHN0cnVjdCBuZF9tc2cpLFxuK1x0XHRcdFx0ICAgcmVqZWN0X3NsbGEpO1xuK31cbitcbisvKipcbisgKiBuZGlzY19jaGVja19uc19uYSAtIHZhbGlkYXRlIGFuIE5TL05BIHBhY2tldCBhbmQgc2V0IGl0cyB0cmFuc3BvcnQgaGVhZGVyXG4rICogQHNrYjogdGhlIHNrYiB0byB2YWxpZGF0ZVxuKyAqXG4rICogVmFsaWRhdGVzIGFuIElQdjYgcGFja2V0IGZvciBjb21wbGlhbmNlIHdpdGggUkZDIDQ4NjEgc2VjdGlvbnMgNy4xLjFcbisgKiAoTmVpZ2hib3IgU29saWNpdGF0aW9uKSBhbmQgNy4xLjIgKE5laWdoYm9yIEFkdmVydGlzZW1lbnQpLiBJZiB2YWxpZCxcbisgKiBzZXRzIHRoZSBza2IgdHJhbnNwb3J0IGhlYWRlci5cbisgKlxuKyAqIENhbGxlciBuZWVkcyB0byBzZXQgdGhlIHNrYiBuZXR3b3JrIGhlYWRlci5cbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDAgICAgICAgIC0gdmFsaWQgTlMvTkE7IHRoZSBza2IgdHJhbnNwb3J0IGhlYWRlciBoYXMgYmVlbiBzZXQuXG4rICogKiAtRUlOVkFMICAtIGEgYnJva2VuIHBhY2tldCB3YXMgZGV0ZWN0ZWQsIGkuZS4gaXQgdmlvbGF0ZXMgc29tZVxuKyAqICAgICAgICAgICAgICBpbnRlcm5ldCBzdGFuZGFyZC5cbisgKiAqIC1FTk9NU0cgIC0gSVAgaGVhZGVyIHZhbGlkYXRpb24gc3VjY2VlZGVkIGJ1dCBpdCBpcyBub3QgYW4gSUNNUHY2XG4rICogICAgICAgICAgICAgIHBhY2tldC5cbisgKiAqIC1FTk9EQVRBIC0gSVArSUNNUHY2IGhlYWRlciB2YWxpZGF0aW9uIHN1Y2NlZWRlZCBidXQgaXQgaXMgbm90IGFcbisgKiAgICAgICAgICAgICAgTmVpZ2hib3IgU29saWNpdGF0aW9uIG9yIE5laWdoYm9yIEFkdmVydGlzZW1lbnQuXG4rICovXG4raW50IG5kaXNjX2NoZWNrX25zX25hKHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IG5kaXNjX2NoZWNrX2lwNmhkcihza2IpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IG5kaXNjX2NoZWNrX2ljbXB2Nihza2IpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBuZGlzY19jaGVja19uZF9tc2coc2tiKTtcbit9XG4rRVhQT1JUX1NZTUJPTChuZGlzY19jaGVja19uc19uYSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxNDoxOToyNi4yNDUxMDA1ODdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTE1MjI2Njg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIElQdjYgTmVpZ2hib3IgRGlzY292ZXJ5IFNub29waW5nIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIG1ha2luZyBjaGFuZ2VzIGFjcm9zcyBzZXZlcmFsIGZpbGVzIHJlbGF0ZWQgdG8gYnJpZGdpbmcgYW5kIElQdjYgbmVpZ2hib3IgZGlzY292ZXJ5LiBTcGVjaWZpY2FsbHksIGl0J3MgdG91Y2hpbmcgYG5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmNgLCBgbmV0L2JyaWRnZS9icl9kZXZpY2UuY2AsIGBuZXQvYnJpZGdlL2JyX2lucHV0LmNgLCBgbmV0L2JyaWRnZS9icl9wcml2YXRlLmhgLCBgbmV0L2lwdjYvTWFrZWZpbGVgLCBgbmV0L2lwdjYvbmRpc2MuY2AsIGFuZCBpbXBvcnRhbnRseSwgKmFkZHMqIGEgbmV3IGZpbGUgYG5ldC9pcHY2L25kaXNjX3Nub29wLmNgLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIG5ldyBmdW5jdGlvbmFsaXR5LCBhbmQgd2l0aCB0aGUgY2hhbmdlcyB0byB0aGUgZXhpc3RpbmcgZmlsZXMgSSBjYW4gYXNzdW1lIHRoaXMgaXMgYSBwcmV0dHkgdGhvcm91Z2ggcmV3b3JrIG9mIHRoZSB3YXkgYnJpZGdlIGRldmljZXMgaGFuZGxlIElQdjYgTkQgcGFja2V0cy5cblxuVGhlIHBhdGNoIHNlZW1zIHRvIGludHJvZHVjZSBhIG5ldyB2YWxpZGF0aW9uIGZ1bmN0aW9uLCBgbmRpc2NfY2hlY2tfbnNfbmFgLCB3aGljaCwgYmFzZWQgb24gdGhlIG5hbWUsIGlzIG1lYW50IHRvIHZhbGlkYXRlIElQdjYgTmVpZ2hib3IgU29saWNpdGF0aW9uIGFuZCBOZWlnaGJvciBBZHZlcnRpc2VtZW50IHBhY2tldHMuIEZ1cnRoZXJtb3JlLCB0aGUgb2xkIGBicl9pc19uZF9uZWlnaF9tc2dgIGxvZ2ljIGlzIHJlcGxhY2VkIGJ5IHRoaXMgbmV3IGZ1bmN0aW9uLiBUaGUgZnVuY3Rpb24gYG5kaXNjX3BhcnNlX29wdGlvbnNgIGlzIGFsc28gYmVpbmcgZXhwb3J0ZWQsIGFuZCB1c2VkIGluIGBicl9uZF9zZW5kYC5cblxuVGhpcyBpcyBhbGwgZnVuY3Rpb25hbCBjb2RlLCBpdCdzIHJlYWNoYWJsZSB2aWEgYnJpZGdlIGRldmljZXMsIGFuZCBJUHY2IE5EIHBhY2tldHMuIExvb2tzIGxpa2UgYSBncmVhdCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBmYWN0IHRoYXQgdGhleSd2ZSByZXBsYWNlZCBhIHByZXZpb3VzIGJsb2NrIG9mIGNvZGUgaXMgYSBncmVlbiBsaWdodCB0byBzdGFydC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgbmV3IGNvZGUgaXMgaW4gYG5ldC9pcHY2L25kaXNjX3Nub29wLmNgLCBhbmQgdGhhdCdzIGNvbXBpbGVkIGlmIGBDT05GSUdfSVBWNmAgaXMgZW5hYmxlZC4gTGV0J3MgbWFrZSBzdXJlLCBsb29raW5nIGF0IGBuZXQvaXB2Ni9NYWtlZmlsZWA6XG5cbmBgYG1ha2VmaWxlXG5pZm5lcSAoJChDT05GSUdfSVBWNiksKVxub2JqLXkgKz0gbWNhc3Rfc25vb3AubyBuZGlzY19zbm9vcC5vXG5gYGBcblxuWWVwLCBgbmRpc2Nfc25vb3Aub2AgaXMgYmVpbmcgaW5jbHVkZWQgd2hlbiBgQ09ORklHX0lQVjZgIGlzIHNldC5cblxuQnV0IHdoYXQgYWJvdXQgdGhlIGJyaWRnZSBzaWRlPyBUaGUgY2hhbmdlcyB0byBgYnJfYXJwX25kX3Byb3h5LmNgIGFyZSBrZXkuIExvb2tpbmcgYXQgdGhhdCBmaWxlLCBJIHNlZSBgI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpYCBhcm91bmQgdGhlIE5EIHByb3h5IGxvZ2ljLiBUaGF0IG1lYW5zIHdlIGFic29sdXRlbHkgbmVlZCBgQ09ORklHX0JSSURHRWAgKmFuZCogYENPTkZJR19JUFY2YCBlbmFibGVkLlxuXG5UbyBiZSBleHRyYSBjZXJ0YWluLCBJIHNob3VsZCBjaGVjayB0aGUgTWFrZWZpbGUgaW4gYG5ldC9icmlkZ2VgIHRvIG1ha2Ugc3VyZSBgYnJfYXJwX25kX3Byb3h5LmNgIGlzIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHkuIEknbGwganVzdCB1c2UgYHJlYWQtZmlsZWAgb24gYG5ldC9icmlkZ2UvTWFrZWZpbGVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjczLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTQ6MTk6MzMuMTYwMzI5NzUzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgSUVFRSA4MDIuMWQgZXRoZXJuZXQgYnJpZGdpbmcgbGF5ZXIuXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai0kKENPTkZJR19CUklER0UpICs9IGJyaWRnZS5vXFxuICAgNzpcXHRcXG4gICA4OlxcdGJyaWRnZS15XFx0Oj0gYnIubyBicl9kZXZpY2UubyBicl9mZGIubyBicl9mb3J3YXJkLm8gYnJfaWYubyBicl9pbnB1dC5vIFxcXFxcXG4gICA5OlxcdFxcdFxcdFxcdGJyX2lvY3RsLm8gYnJfc3RwLm8gYnJfc3RwX2JwZHUubyBcXFxcXFxuICAxMDpcXHRcXHRcXHRcXHRicl9zdHBfaWYubyBicl9zdHBfdGltZXIubyBicl9uZXRsaW5rLm8gXFxcXFxcbiAgMTE6XFx0XFx0XFx0XFx0YnJfbmV0bGlua190dW5uZWwubyBicl9hcnBfbmRfcHJveHkub1xcbiAgMTI6XFx0XFxuICAxMzpcXHRicmlkZ2UtJChDT05GSUdfU1lTRlMpICs9IGJyX3N5c2ZzX2lmLm8gYnJfc3lzZnNfYnIub1xcbiAgMTQ6XFx0XFxuICAxNTpcXHRicmlkZ2UtJChzdWJzdCBtLHksJChDT05GSUdfQlJJREdFX05FVEZJTFRFUikpICs9IGJyX25mX2NvcmUub1xcbiAgMTY6XFx0XFxuICAxNzpcXHRicl9uZXRmaWx0ZXIteSA6PSBicl9uZXRmaWx0ZXJfaG9va3Mub1xcbiAgMTg6XFx0YnJfbmV0ZmlsdGVyLSQoc3Vic3QgbSx5LCQoQ09ORklHX0lQVjYpKSArPSBicl9uZXRmaWx0ZXJfaXB2Ni5vXFxuICAxOTpcXHRvYmotJChDT05GSUdfQlJJREdFX05FVEZJTFRFUikgKz0gYnJfbmV0ZmlsdGVyLm9cXG4gIDIwOlxcdFxcbiAgMjE6XFx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HKSArPSBicl9tdWx0aWNhc3QubyBicl9tZGIubyBicl9tdWx0aWNhc3RfZWh0Lm9cXG4gIDIyOlxcdFxcbiAgMjM6XFx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklORykgKz0gYnJfdmxhbi5vIGJyX3ZsYW5fdHVubmVsLm8gYnJfdmxhbl9vcHRpb25zLm8gYnJfbXN0Lm9cXG4gIDI0OlxcdFxcbiAgMjU6XFx0YnJpZGdlLSQoQ09ORklHX05FVF9TV0lUQ0hERVYpICs9IGJyX3N3aXRjaGRldi5vXFxuICAyNjpcXHRcXG4gIDI3OlxcdG9iai0kKENPTkZJR19ORVRGSUxURVIpICs9IG5ldGZpbHRlci9cXG4gIDI4OlxcdFxcbiAgMjk6XFx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9NUlApXFx0Kz0gYnJfbXJwX3N3aXRjaGRldi5vIGJyX21ycC5vIGJyX21ycF9uZXRsaW5rLm9cXG4gIDMwOlxcdFxcbiAgMzE6XFx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9DRk0pXFx0Kz0gYnJfY2ZtLm8gYnJfY2ZtX25ldGxpbmsub1xcbiAgMzI6XFx0XFxuICAzMzpcXHRpZmRlZiBDT05GSUdfR0NPVl9QUk9GSUxFX05FVEZJTFRFUlxcbiAgMzQ6XFx0R0NPVl9QUk9GSUxFX2JyX25mX2NvcmUubyA6PSB5XFxuICAzNTpcXHRHQ09WX1BST0ZJTEVfYnJfbmV0ZmlsdGVyX2hvb2tzLm8gOj0geVxcbiAgMzY6XFx0R0NPVl9QUk9GSUxFX2JyX25ldGZpbHRlcl9pcHY2Lm8gOj0geVxcbiAgMzc6XFx0ZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTQ6MTk6MzMuMTYwNDI4MTI0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA0MTA3OTkyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBORCBQcm94eWluZyBpbiBCcmlkZ2VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGJyX2FycF9uZF9wcm94eS5vYCBpcyBhbHdheXMgYnVpbHQgd2hlbiBgQ09ORklHX0JSSURHRWAgaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBzZW5zZS4gRGl2aW5nIGludG8gYGJyX2FycF9uZF9wcm94eS5jYCwgSSBzZWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gd2l0aCBgI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpYCBmb3IgdGhlIE5EIHByb3h5IGZ1bmN0aW9uYWxpdHkuIFRoZXJlZm9yZSwgd2UgY2xlYXJseSBuZWVkIGJvdGggYEJSSURHRWAgYW5kIGBJUFY2YCBjb25maWd1cmVkIGZvciB0aGlzIHRvIHdvcmsgYXMgaW50ZW5kZWQuXG5cbk5vdywgbGV0J3Mgem9vbSBpbiBvbiB0aGUgcmVsZXZhbnQgc3ltYm9scy4gSSBoYWQgYSBsaXN0IHN0YXJ0aW5nIHdpdGggYG5kaXNjX2NoZWNrX25zX25hYCwgYGJyX2lzX25kX25laWdoX21zZ2AsIGBicl9uZF9zZW5kYCwgYG5kaXNjX2NoZWNrX2lwNmhkcmAsIGBuZGlzY19jaGVja19pY21wdjZgLCBgbmRpc2NfY2hlY2tfb3B0aW9uc2AsIGFuZCBgbmRpc2NfY2hlY2tfbmRfbXNnYC4gSG93ZXZlciwgd2FpdCBhIG1pbnV0ZS4uLiBJIG5vdyByZWNhbGwgdGhhdCB0aGUgYG5kaXNjX2NoZWNrXypgIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBuZGlzY19jaGVja19pcDZoZHJgLCBgbmRpc2NfY2hlY2tfaWNtcHY2YCwgYG5kaXNjX2NoZWNrX29wdGlvbnNgLCBhbmQgYG5kaXNjX2NoZWNrX25kX21zZ2AgYXJlIGFsbCBzdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgbmV0L2lwdjYvbmRpc2Nfc25vb3AuY2AuIFNvIHRoZXkgYXJlbid0IHBhcnQgb2YgdGhlIGV4cG9zZWQgaW50ZXJmYWNlLiBUaGVyZWZvcmUsIEkgY2FuIHNhZmVseSByZW1vdmUgdGhlbSBmcm9tIHRoZSBsaXN0LCBiZWNhdXNlIHRoZXkgYXJlIG5vdCBleHRlcm5hbGx5IGxpbmtlZC5cblxuSSAqY2FuKiBsaXN0IGBuZGlzY19jaGVja19uc19uYWAgYmVjYXVzZSB0aGF0J3MgZXhwb3J0ZWQuIEFsc28sIGBicl9pc19uZF9uZWlnaF9tc2dgIGFuZCBgYnJfbmRfc2VuZGAgYXJlIGxvY2F0ZWQgaW4gYG5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmNgLCBzbyB0aG9zZSBhcmUgcmVsZXZhbnQgYXMgd2VsbC5cblxuVG8gdmVyaWZ5IG15IGFzc3VtcHRpb25zLCBsZXQgbWUgcmVjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGhlIHBhdGNoIGFsdGVycyBgbmV0L2lwdjYvbmRpc2Nfc25vb3AuY2AsIHdoaWNoLCBhcyB3ZSBrbm93LCByZXF1aXJlcyBgQ09ORklHX0lQVjZgLiBBZGRpdGlvbmFsbHksIHRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBuZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jYCwgYW5kIHRoYXQgb2J2aW91c2x5IGRlbWFuZHMgYENPTkZJR19CUklER0VgLiBTbywgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IHN0YW5kczogYEJSSURHRWAgYW5kIGBJUFY2YCBhcmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy5cblxuTGV0J3MgY2hlY2sgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgZm9yIGEgc2Vjb25kLiBgYnJfbmRfc2VuZGAgaXMgc3RhdGljLCB3aGljaCBpcyBnb29kIHRvIGtub3csIGFuZCBgYnJfaXNfbmRfbmVpZ2hfbXNnYCBpcyBub3Qgc3RhdGljLiBUaGF0J3MgYSBnb29kIGRpc3RpbmN0aW9uIHRvIG1ha2UuIGBuZGlzY19jaGVja19uc19uYWAgaXMgZGVmaW5pdGVseSBleHBvcnRlZC5cblxuVGhlcmVmb3JlLCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGFuYWx5c2lzLCBJIHdpbGwgbGlzdCBvbmx5IHRoZSBmb2xsb3dpbmcgdGhyZWUgc3ltYm9sczpcblxuKiAgIGBuZGlzY19jaGVja19uc19uYWBcbiogICBgYnJfaXNfbmRfbmVpZ2hfbXNnYFxuKiAgIGBicl9uZF9zZW5kYFxuXG5GaW5hbGx5LCBsZXQncyBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGJyX2lzX25kX25laWdoX21zZ2AgaXNuJ3QgY2FsbGVkIGZyb20gYW55d2hlcmUgdW5leHBlY3RlZC4gVGhhdCdzIGFsd2F5cyBhIGdvb2QgcHJhY3RpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzODMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxNDoxOTo0MC4yMDE1MTAxNDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM3OTYwOTM2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9pc19uZF9uZWlnaF9tc2dcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYz0xMjU9dm9pZCBicl9kb19wcm94eV9zdXBwcmVzc19hcnAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy0yMzctI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzoyMzg6c3RydWN0IG5kX21zZyAqYnJfaXNfbmRfbmVpZ2hfbXNnKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy0yMzkte1xcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0zMD1uZXRkZXZfdHhfdCBicl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy04NC1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjg1OlxcdFxcdFxcdG1zZyA9IGJyX2lzX25kX25laWdoX21zZyhza2IpO1xcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtODYtXFx0XFx0XFx0aWYgKG1zZylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz03Nj1pbnQgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0xODAtXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjE4MTpcXHRcXHRcXHRtc2cgPSBicl9pc19uZF9uZWlnaF9tc2coc2tiKTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMTgyLVxcdFxcdFxcdGlmIChtc2cpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0yMzYyPXZvaWQgYnJfZG9fc3VwcHJlc3NfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTIzNjMtXFx0XFx0ICAgICAgIHUxNiB2aWQsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBuZF9tc2cgKm1zZyk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MjM2NDpzdHJ1Y3QgbmRfbXNnICpicl9pc19uZF9uZWlnaF9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjM2NS1ib29sIGJyX2lzX25laWdoX3N1cHByZXNzX2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IHZpZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDE0OjE5OjQ0LjU4MTE4Nzk0MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTI1NjgyNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgUmVhY2hhYmlsaXR5IGluIHRoZSBCcmlkZ2luZyBDb2RlKipcblxuQWxyaWdodCwgc28gdGhlIGNhbGwgc3RhY2sgaGFzIGxlZCBtZSBoZXJlLiBJdCdzIGNvbmZpcm1lZDogdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uLCB0aGF0J3MgaXQsIEkgc2VlLCBJJ3ZlIGdvdCBpdC4gSXQncyBjYWxsZWQgZnJvbSBib3RoIGBicl9kZXZfeG1pdGAgYW5kIGBicl9oYW5kbGVfZnJhbWVfZmluaXNoYC4gR29vZCwgdGhhdCBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIG9mIHdoZXJlIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyB1dGlsaXplZC4gV2UndmUgZ290IGEgZGVmaW5pdGUgcGF0aCwgd2hpY2ggbWVhbnMgdGhpcyBjb2RlIHBhdGggaXMgZGVmaW5pdGVseSBsaXZlLlxuXG5Ob3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byB1bmRlcnN0YW5kIHRoaXMgaW50ZXJhY3Rpb24gaXMgdG8gZXhhbWluZSB0aGUgYGJyX25kX3NlbmRgIGZ1bmN0aW9uLiBJIHdpbGwgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIHRvIGNvbmZpcm0gaXRzIG9wZXJhdGlvbiBhbmQgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDM0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTQ6MTk6NDcuNjczNzU4NjQzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzA4OTQxNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfbmRfc2VuZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jPTIzOD1zdHJ1Y3QgbmRfbXNnICpicl9pc19uZF9uZWlnaF9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMjQ4LVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM6MjQ5OnN0YXRpYyB2b2lkIGJyX25kX3NlbmQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMjUwLVxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVxdWVzdCwgc3RydWN0IG5laWdoYm91ciAqbixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM9NDEwPXZvaWQgYnJfZG9fc3VwcHJlc3NfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy00ODMtXFx0XFx0XFx0XFx0aWYgKHZpZCAhPSAwKVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM6NDg0OlxcdFxcdFxcdFxcdFxcdGJyX25kX3NlbmQoYnIsIHAsIHNrYiwgbixcXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTQ4NS1cXHRcXHRcXHRcXHRcXHRcXHQgICBza2ItXFx1MDAzZXZsYW5fcHJvdG8sXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTQ4Ny1cXHRcXHRcXHRcXHRlbHNlXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzo0ODg6XFx0XFx0XFx0XFx0XFx0YnJfbmRfc2VuZChiciwgcCwgc2tiLCBuLCAwLCAwKTtcXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTQ4OS1cXHRcXHRcXHRcXHRyZXBsaWVkID0gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTQ6MTk6NTIuMjQ0NjU4MzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjg5MzU4MTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUmF0aW9uYWxlOiBJUHY2IE5laWdoYm9yIERpc2NvdmVyeSBTbm9vcGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIGJlZW4gdHJpZ2dlcmVkIGJ5IGBicl9kb19zdXBwcmVzc19uZGAuIEkgc2VlIGl0IGludHJvZHVjZXMgYG5ldC9pcHY2L25kaXNjX3Nub29wLmNgIHdoaWNoIGluY2x1ZGVzIHRoZSBuZXcgZnVuY3Rpb24gYG5kaXNjX2NoZWNrX25zX25hYC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgaXQncyBhIGRlZGljYXRlZCB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBJUHY2IE5laWdoYm9yIFNvbGljaXRhdGlvbiAoTlMpIGFuZCBBZHZlcnRpc2VtZW50IChOQSkgcGFja2V0cy4gVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgYnJfaXNfbmRfbmVpZ2hfbXNnYCBhbmQgYGJyX25kX3NlbmRgIGluIGBuZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jYCwgc28gaXQncyBpbnRlZ3JhdGluZyB0aGlzIG5ldyB2YWxpZGF0aW9uIGxvZ2ljIGludG8gdGhlIGJyaWRnZSBORCBwcm94eS5cblxuR2l2ZW4gdGhhdCB0aGlzIGludm9sdmVzIG5ldywgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCdzIGdvaW5nIHRvIGJlIGhhbmRsaW5nIHBvdGVudGlhbGx5IHVudHJ1c3RlZCBuZXR3b3JrIHRyYWZmaWMsIG15IGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzICpkZWZpbml0ZWx5KiBXb3J0aEZ1enppbmcuIFRoZSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UgaXMgY2xlYXI6IG1hbGZvcm1lZCBOUy9OQSBwYWNrZXRzIGNvdWxkIGxlYWQgdG8gdmFyaW91cyBpc3N1ZXMuIE15IGZvY3VzIHdpbGwgYmUgb24gYG5kaXNjX2NoZWNrX25zX25hYCwgYGJyX2lzX25kX25laWdoX21zZ2AsIGFuZCBgYnJfbmRfc2VuZGAuIFRoZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24gcmVxdWlyZXMgdGhhdCBib3RoIGBCUklER0VgIGFuZCBgSVBWNmAgYXJlIGVuYWJsZWQsIGdpdmVuIHRoZSBmdW5jdGlvbmFsIHNjb3BlIG9mIHRoZSBwYXRjaCBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgbmV0d29yayBwcm90b2NvbHMuIEl0J3MgYSBwcmltZSB0YXJnZXQgZm9yIGZpbmRpbmcgc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGVycm9ycyByZWxhdGVkIHRvIElQdjYgTkQgcHJveHkgYmVoYXZpb3VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYzMiwiT3V0cHV0VG9rZW5zIjoxMjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTQ6MTk6NTcuNTM0MDE5MTkxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4MjM3ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZGlzY19jaGVja19uc19uYVwiLFxuICAgIFwiYnJfaXNfbmRfbmVpZ2hfbXNnXCIsXG4gICAgXCJicl9uZF9zZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgbmRpc2NfY2hlY2tfbnNfbmFgIHRvIHZhbGlkYXRlIElQdjYgTmVpZ2hib3IgU29saWNpdGF0aW9uIGFuZCBBZHZlcnRpc2VtZW50IHBhY2tldHMsIGFuZCB1cGRhdGVzIHRoZSBicmlkZ2UgTkQgcHJveHkgY29kZSB0byB1c2UgaXQuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBwcm9jZXNzZXMgdW50cnVzdGVkIG5ldHdvcmsgcGFja2V0cyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZGlzY19jaGVja19uc19uYVwiLFxuICAgIFwiYnJfaXNfbmRfbmVpZ2hfbXNnXCIsXG4gICAgXCJicl9uZF9zZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgbmRpc2NfY2hlY2tfbnNfbmFgIHRvIHZhbGlkYXRlIElQdjYgTmVpZ2hib3IgU29saWNpdGF0aW9uIGFuZCBBZHZlcnRpc2VtZW50IHBhY2tldHMsIGFuZCB1cGRhdGVzIHRoZSBicmlkZ2UgTkQgcHJveHkgY29kZSB0byB1c2UgaXQuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBwcm9jZXNzZXMgdW50cnVzdGVkIG5ldHdvcmsgcGFja2V0cyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowhzkpm[1] Phase: Succeeded StartedAt: 2026-07-19 14:20:09 +0000 UTC FinishedAt: 2026-07-19 14:20:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzkpm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-19 14:20:09 +0000 UTC FinishedAt: 2026-07-19 14:20:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzkpm[2] Phase: Succeeded StartedAt: 2026-07-19 14:20:09 +0000 UTC FinishedAt: 2026-07-19 18:50:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-19 14:20:09 +0000 UTC FinishedAt: 2026-07-19 18:50:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-19 14:20:09 +0000 UTC FinishedAt: 2026-07-19 14:20:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-19 14:20:09 +0000 UTC FinishedAt: 2026-07-19 14:20:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflowhzkpm/series-workflowhzkpm-convert-artifact-2627927818/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-19 14:20:19 +0000 UTC FinishedAt: 2026-07-19 14:55:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-19 14:20:19 +0000 UTC FinishedAt: 2026-07-19 14:55:03 +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:*5b22b5f8-63dc-4642-aa2c-d654fc2a5611,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-workflowhzkpm/series-workflowhzkpm-convert-artifact-2627927818/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": "28289834-c412-4ca2-9fce-ce83e7a0e31d", "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-workflowhzkpm/series-workflowhzkpm-build-action-3329468920/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-19 14:20:19 +0000 UTC FinishedAt: 2026-07-19 14:54:53 +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:*5b22b5f8-63dc-4642-aa2c-d654fc2a5611,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-workflowhzkpm/series-workflowhzkpm-convert-artifact-2627927818/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": "28289834-c412-4ca2-9fce-ce83e7a0e31d", "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-workflowhzkpm/series-workflowhzkpm-build-action-3329468920/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-19 14:55:03 +0000 UTC FinishedAt: 2026-07-19 14:55:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-19 14:55:03 +0000 UTC FinishedAt: 2026-07-19 14:55:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-19 14:55:03 +0000 UTC FinishedAt: 2026-07-19 14:55:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-19 14:55:03 +0000 UTC FinishedAt: 2026-07-19 14:55:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflowhzkpm/series-workflowhzkpm-convert-artifact-1281428389/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-19 14:55:13 +0000 UTC FinishedAt: 2026-07-19 14:57:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-19 14:55:13 +0000 UTC FinishedAt: 2026-07-19 14:57:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*28289834-c412-4ca2-9fce-ce83e7a0e31d,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-workflowhzkpm/series-workflowhzkpm-build-action-3329468920/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-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-19 14:57:12 +0000 UTC FinishedAt: 2026-07-19 14:57:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-19 14:57:12 +0000 UTC FinishedAt: 2026-07-19 14:57:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-19 14:57:12 +0000 UTC FinishedAt: 2026-07-19 15:45:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-19 14:57:12 +0000 UTC FinishedAt: 2026-07-19 15:45:48 +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:*5b22b5f8-63dc-4642-aa2c-d654fc2a5611,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-workflowhzkpm/series-workflowhzkpm-convert-artifact-1281428389/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": "0adb112c-052d-4a77-a676-4c9880de90f6", "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-workflowhzkpm/series-workflowhzkpm-build-action-3818537969/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-19 14:57:12 +0000 UTC FinishedAt: 2026-07-19 15:45:38 +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:*5b22b5f8-63dc-4642-aa2c-d654fc2a5611,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-workflowhzkpm/series-workflowhzkpm-convert-artifact-1281428389/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": "0adb112c-052d-4a77-a676-4c9880de90f6", "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-workflowhzkpm/series-workflowhzkpm-build-action-3818537969/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-19 15:45:48 +0000 UTC FinishedAt: 2026-07-19 15:45:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-19 15:45:48 +0000 UTC FinishedAt: 2026-07-19 15:45:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-19 15:45:48 +0000 UTC FinishedAt: 2026-07-19 15:47:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-19 15:45:48 +0000 UTC FinishedAt: 2026-07-19 15:47:38 +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:*0adb112c-052d-4a77-a676-4c9880de90f6,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-workflowhzkpm/series-workflowhzkpm-build-action-3818537969/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-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-19 15:47:48 +0000 UTC FinishedAt: 2026-07-19 18:50:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-19 15:47:48 +0000 UTC FinishedAt: 2026-07-19 18:50:31 +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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"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:*28289834-c412-4ca2-9fce-ce83e7a0e31d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0adb112c-052d-4a77-a676-4c9880de90f6,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-workflowhzkpm/series-workflowhzkpm-build-action-3329468920/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-workflowhzkpm/series-workflowhzkpm-build-action-3818537969/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-19 15:47:48 +0000 UTC FinishedAt: 2026-07-19 15:47:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-19 15:47:48 +0000 UTC FinishedAt: 2026-07-19 15:47:52 +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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"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-workflowhzkpm/series-workflowhzkpm-convert-artifact-3297116458/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-19 15:47:48 +0000 UTC FinishedAt: 2026-07-19 15:47:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-19 15:47:48 +0000 UTC FinishedAt: 2026-07-19 15:47:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-19 15:47:48 +0000 UTC FinishedAt: 2026-07-19 15:47:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-19 15:47:58 +0000 UTC FinishedAt: 2026-07-19 18:50:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzkpm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["ndisc_check_ns_na","br_is_nd_neigh_msg","br_nd_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","IPV6"],"series_id":"ff5ed0e5-d226-402a-b7ef-77c5e3c3eeff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-19 15:47:58 +0000 UTC FinishedAt: 2026-07-19 18:50:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*28289834-c412-4ca2-9fce-ce83e7a0e31d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0adb112c-052d-4a77-a676-4c9880de90f6,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-workflowhzkpm/series-workflowhzkpm-build-action-3329468920/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-workflowhzkpm/series-workflowhzkpm-build-action-3818537969/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-workflowhzkpm/series-workflowhzkpm-convert-artifact-3297116458/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,}