Name: series-workflowhn9p6 Phase: Succeeded StartedAt: 2026-08-05 14:36:37 +0000 UTC FinishedAt: 2026-08-05 18:39:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhn9p6[0] Phase: Succeeded StartedAt: 2026-08-05 14:36:37 +0000 UTC FinishedAt: 2026-08-05 14:54:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhn9p6[0].run-triage Phase: Succeeded StartedAt: 2026-08-05 14:36:37 +0000 UTC FinishedAt: 2026-08-05 14:54:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "26ba17d845193dac4921ae1ab280d28d1938052e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PACKET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "26ba17d845193dac4921ae1ab280d28d1938052e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PACKET" ], "series_id": "77706732-e29e-477d-8391-cf2a31c54cf1" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "packet_sendmsg_spkt", "tpacket_snd", "packet_snd" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBQ0tFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhY2tldF9zZW5kbXNnX3Nwa3QmIzM0OywKICAgICYjMzQ7dHBhY2tldF9zbmQmIzM0OywKICAgICYjMzQ7cGFja2V0X3NuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBBRl9QQUNLRVQgc29ja2V0IGltcGxlbWVudGF0aW9uIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uIHdpdGggYGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGFuZCByZW1vdmVzIGEgYENBUF9TWVNfUkFXSU9gIGNoZWNrIGluIGBkZXZfdmFsaWRhdGVfaGVhZGVyYC4gVGhpcyBhZmZlY3RzIHBhY2tldCB0cmFuc21pc3Npb24gdmlhIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHBhY2tldF9zbmRgLCBhbmQgYHRwYWNrZXRfc25kYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgcGF0aHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkIGJ5IHRoZSBjaGFuZ2VzIGluIGhlYWRlciBsZW5ndGggaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxNWZmMTBmMjEwOWNkMjVkNTE5YjZmZmMwMjYxMGNiZDk5NzI1MDljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgNSAxNDo1MzowNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggOTk4MWQ2MzdmOGI1NC4uODg0MGIxMjY5NzlmZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbkBAIC0zMDAsOSAmIzQzOzMwMCwxMSBAQCBzdHJ1Y3QgaGhfY2FjaGUge1xuICAqIFdlIGNvdWxkIHVzZSBvdGhlciBhbGlnbm1lbnQgdmFsdWVzLCBidXQgd2UgbXVzdCBtYWludGFpbiB0aGVcbiAgKiByZWxhdGlvbnNoaXAgSEggYWxpZ25tZW50IFx1MDAzYz0gTEwgYWxpZ25tZW50LlxuICAqL1xuLSNkZWZpbmUgTExfUkVTRVJWRURfU1BBQ0UoZGV2KSBcXFxuLVx0KCgoKGRldiktXHUwMDNlaGFyZF9oZWFkZXJfbGVuICYjNDM7IFJFQURfT05DRSgoZGV2KS1cdTAwM2VuZWVkZWRfaGVhZHJvb20pKSBcXFxuJiM0MzsjZGVmaW5lIExMX1JFU0VSVkVEX1NQQUNFX0VYKGRldiwgaGxlbikgXFxcbiYjNDM7XHQoKCgoaGxlbikgJiM0MzsgUkVBRF9PTkNFKChkZXYpLVx1MDAzZW5lZWRlZF9oZWFkcm9vbSkpIFxcXG4gXHQgIFx1MDAyNiB+KEhIX0RBVEFfTU9EIC0gMSkpICYjNDM7IEhIX0RBVEFfTU9EKVxuJiM0MzsjZGVmaW5lIExMX1JFU0VSVkVEX1NQQUNFKGRldikgXFxcbiYjNDM7XHRMTF9SRVNFUlZFRF9TUEFDRV9FWChkZXYsIChkZXYpLVx1MDAzZWhhcmRfaGVhZGVyX2xlbilcbiAjZGVmaW5lIExMX1JFU0VSVkVEX1NQQUNFX0VYVFJBKGRldixleHRyYSkgXFxcbiBcdCgoKChkZXYpLVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAmIzQzOyBSRUFEX09OQ0UoKGRldiktXHUwMDNlbmVlZGVkX2hlYWRyb29tKSAmIzQzOyAoZXh0cmEpKSBcXFxuIFx0ICBcdTAwMjYgfihISF9EQVRBX01PRCAtIDEpKSAmIzQzOyBISF9EQVRBX01PRClcbkBAIC0zNTMxLDExICYjNDM7MzUzMyw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBkZXZfdmFsaWRhdGVfaGVhZGVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAobGVuIFx1MDAzYyBkZXYtXHUwMDNlbWluX2hlYWRlcl9sZW4pXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGlmIChjYXBhYmxlKENBUF9TWVNfUkFXSU8pKSB7XG4tXHRcdG1lbXNldChsbF9oZWFkZXIgJiM0MzsgbGVuLCAwLCBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gbGVuKTtcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHR9XG4tXG4gXHRpZiAoZGV2LVx1MDAzZWhlYWRlcl9vcHMgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VoZWFkZXJfb3BzLVx1MDAzZXZhbGlkYXRlKVxuIFx0XHRyZXR1cm4gZGV2LVx1MDAzZWhlYWRlcl9vcHMtXHUwMDNldmFsaWRhdGUobGxfaGVhZGVyLCBsZW4pO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jXG5pbmRleCBlNzVkMjkzMjQ3NWFjLi5lOWI2ODEwYzg4NWU1IDEwMDY0NFxuLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuQEAgLTE5NTMsOCAmIzQzOzE5NTMsOSBAQCBzdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnX3Nwa3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiBcdHN0cnVjdCBzb2NrY21fY29va2llIHNvY2tjO1xuIFx0X19iZTE2IHByb3RvID0gMDtcbi1cdGludCBlcnI7XG4mIzQzO1x0aW50IGhhcmRfaGVhZGVyX2xlbjtcbiBcdGludCBleHRyYV9sZW4gPSAwO1xuJiM0MztcdGludCBlcnI7XG4gXG4gXHQvKlxuIFx0ICpcdEdldCBhbmQgdmVyaWZ5IHRoZSBhZGRyZXNzLlxuQEAgLTE5OTcsMTQgJiM0MzsxOTk4LDE4IEBAIHN0YXRpYyBpbnQgcGFja2V0X3NlbmRtc2dfc3BrdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4gXHRcdGV4dHJhX2xlbiA9IDQ7IC8qIFdlJiMzOTtyZSBkb2luZyBvdXIgb3duIENSQyAqL1xuIFx0fVxuIFxuJiM0MztcdC8qIEtlZXAgdGhlIGFsbG9jYXRpb24tdGltZSBoZWFkZXIgbGVuZ3RoIGFjcm9zcyByZXRyeS4gKi9cbiYjNDM7XHRpZiAoIXNrYilcbiYjNDM7XHRcdGhhcmRfaGVhZGVyX2xlbiA9IFJFQURfT05DRShkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbiYjNDM7XG4gXHRlcnIgPSAtRU1TR1NJWkU7XG4tXHRpZiAobGVuIFx1MDAzZSBkZXYtXHUwMDNlbXR1ICYjNDM7IGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gJiM0MzsgVkxBTl9ITEVOICYjNDM7IGV4dHJhX2xlbilcbiYjNDM7XHRpZiAobGVuIFx1MDAzZSBkZXYtXHUwMDNlbXR1ICYjNDM7IGhhcmRfaGVhZGVyX2xlbiAmIzQzOyBWTEFOX0hMRU4gJiM0MzsgZXh0cmFfbGVuKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4gXHRpZiAoIXNrYikge1xuLVx0XHRzaXplX3QgcmVzZXJ2ZWQgPSBMTF9SRVNFUlZFRF9TUEFDRShkZXYpO1xuJiM0MztcdFx0c2l6ZV90IHJlc2VydmVkID0gTExfUkVTRVJWRURfU1BBQ0VfRVgoZGV2LCBoYXJkX2hlYWRlcl9sZW4pO1xuIFx0XHRpbnQgdGxlbiA9IGRldi1cdTAwM2VuZWVkZWRfdGFpbHJvb207XG4tXHRcdHVuc2lnbmVkIGludCBoaGxlbiA9IGRldi1cdTAwM2VoZWFkZXJfb3BzID8gZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA6IDA7XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgaGhsZW4gPSBkZXYtXHUwMDNlaGVhZGVyX29wcyA/IGhhcmRfaGVhZGVyX2xlbiA6IDA7XG4gXG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRza2IgPSBzb2NrX3dtYWxsb2Moc2ssIGxlbiAmIzQzOyByZXNlcnZlZCAmIzQzOyB0bGVuLCAwLCBHRlBfS0VSTkVMKTtcbkBAIC0yMDM0LDcgJiM0MzsyMDM5LDcgQEAgc3RhdGljIGludCBwYWNrZXRfc2VuZG1zZ19zcGt0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbiBcdFx0ZXJyID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuLVx0aWYgKGxlbiBcdTAwM2UgKGRldi1cdTAwM2VtdHUgJiM0MzsgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAmIzQzOyBleHRyYV9sZW4pIFx1MDAyNlx1MDAyNlxuJiM0MztcdGlmIChsZW4gXHUwMDNlIChkZXYtXHUwMDNlbXR1ICYjNDM7IGhhcmRfaGVhZGVyX2xlbiAmIzQzOyBleHRyYV9sZW4pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFwYWNrZXRfZXh0cmFfdmxhbl9sZW5fYWxsb3dlZChkZXYsIHNrYikpIHtcbiBcdFx0ZXJyID0gLUVNU0dTSVpFO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG5AQCAtMjU2OSw2ICYjNDM7MjU3NCw3IEBAIHN0YXRpYyBpbnQgcGFja2V0X3NuZF92bmV0X3BhcnNlKHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90ICpsZW4sXG4gc3RhdGljIGludCB0cGFja2V0X2ZpbGxfc2tiKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHZvaWQgKmZyYW1lLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBpbnQgdHBfbGVuLFxuIFx0XHRfX2JlMTYgcHJvdG8sIHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBobGVuLCBpbnQgY29weWxlbixcbiYjNDM7XHRcdGludCBoYXJkX2hlYWRlcl9sZW4sXG4gXHRcdGNvbnN0IHN0cnVjdCBzb2NrY21fY29va2llICpzb2NrYylcbiB7XG4gXHR1bmlvbiB0cGFja2V0X3VoZHIgcGg7XG5AQCAtMjYwMCw4ICYjNDM7MjYwNiw4IEBAIHN0YXRpYyBpbnQgdHBhY2tldF9maWxsX3NrYihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0fSBlbHNlIGlmIChjb3B5bGVuKSB7XG4gXHRcdGludCBoZHJsZW4gPSBtaW5fdChpbnQsIGNvcHlsZW4sIHRwX2xlbik7XG4gXG4tXHRcdHNrYl9wdXNoKHNrYiwgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4tXHRcdHNrYl9wdXQoc2tiLCBjb3B5bGVuIC0gZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4mIzQzO1x0XHRza2JfcHVzaChza2IsIGhhcmRfaGVhZGVyX2xlbik7XG4mIzQzO1x0XHRza2JfcHV0KHNrYiwgY29weWxlbiAtIGhhcmRfaGVhZGVyX2xlbik7XG4gXHRcdGVyciA9IHNrYl9zdG9yZV9iaXRzKHNrYiwgMCwgZGF0YSwgaGRybGVuKTtcbiBcdFx0aWYgKHVubGlrZWx5KGVycikpXG4gXHRcdFx0cmV0dXJuIGVycjtcbkBAIC0yNzMyLDcgJiM0MzsyNzM4LDcgQEAgc3RhdGljIGludCB0cGFja2V0X3NuZChzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3QgbXNnaGRyICptc2cpXG4gXHR2b2lkICpkYXRhO1xuIFx0aW50IGxlbl9zdW0gPSAwO1xuIFx0aW50IHN0YXR1cyA9IFRQX1NUQVRVU19BVkFJTEFCTEU7XG4tXHRpbnQgaGxlbiwgdGxlbiwgY29weWxlbiA9IDA7XG4mIzQzO1x0aW50IGhhcmRfaGVhZGVyX2xlbiwgaGxlbiwgdGxlbiwgY29weWxlbiA9IDA7XG4gXHRsb25nIHRpbWVvO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZwby1cdTAwM2VwZ192ZWNfbG9jayk7XG5AQCAtMjc3OSw4ICYjNDM7Mjc4NSw5IEBAIHN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxuIFx0XHRcdGdvdG8gb3V0X3B1dDtcbiBcdH1cbiBcbiYjNDM7XHRoYXJkX2hlYWRlcl9sZW4gPSBSRUFEX09OQ0UoZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4gXHRpZiAocG8tXHUwMDNlc2suc2tfc29ja2V0LVx1MDAzZXR5cGUgPT0gU09DS19SQVcpXG4tXHRcdHJlc2VydmUgPSBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuJiM0MztcdFx0cmVzZXJ2ZSA9IGhhcmRfaGVhZGVyX2xlbjtcbiBcdHNpemVfbWF4ID0gcG8tXHUwMDNldHhfcmluZy5mcmFtZV9zaXplXG4gXHRcdC0gKHBvLVx1MDAzZXRwX2hkcmxlbiAtIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpKTtcbiBcbkBAIC0yODE3LDcgJiM0MzsyODI0LDcgQEAgc3RhdGljIGludCB0cGFja2V0X3NuZChzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3QgbXNnaGRyICptc2cpXG4gXHRcdFx0Z290byB0cGFja2V0X2Vycm9yO1xuIFxuIFx0XHRzdGF0dXMgPSBUUF9TVEFUVVNfU0VORF9SRVFVRVNUO1xuLVx0XHRobGVuID0gTExfUkVTRVJWRURfU1BBQ0UoZGV2KTtcbiYjNDM7XHRcdGhsZW4gPSBMTF9SRVNFUlZFRF9TUEFDRV9FWChkZXYsIGhhcmRfaGVhZGVyX2xlbik7XG4gXHRcdHRsZW4gPSBkZXYtXHUwMDNlbmVlZGVkX3RhaWxyb29tO1xuIFx0XHRpZiAodm5ldF9oZHJfc3opIHtcbiBcdFx0XHRkYXRhICYjNDM7PSB2bmV0X2hkcl9zejtcbkBAIC0yODM1LDEwICYjNDM7Mjg0MiwxMCBAQCBzdGF0aWMgaW50IHRwYWNrZXRfc25kKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBtc2doZHIgKm1zZylcbiBcdFx0XHRcdFx0XHQgICAgdm5ldF9oZHIuaGRyX2xlbik7XG4gXHRcdFx0aGFzX3ZuZXRfaGRyID0gdHJ1ZTtcbiBcdFx0fVxuLVx0XHRjb3B5bGVuID0gbWF4X3QoaW50LCBjb3B5bGVuLCBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbiYjNDM7XHRcdGNvcHlsZW4gPSBtYXhfdChpbnQsIGNvcHlsZW4sIGhhcmRfaGVhZGVyX2xlbik7XG4gXHRcdHNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9za2IoXHUwMDI2cG8tXHUwMDNlc2ssXG4gXHRcdFx0XHRobGVuICYjNDM7IHRsZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9sbCkgJiM0Mztcbi1cdFx0XHRcdChjb3B5bGVuIC0gZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiksXG4mIzQzO1x0XHRcdFx0KGNvcHlsZW4gLSBoYXJkX2hlYWRlcl9sZW4pLFxuIFx0XHRcdFx0IW5lZWRfd2FpdCwgXHUwMDI2ZXJyKTtcbiBcbiBcdFx0aWYgKHVubGlrZWx5KHNrYiA9PSBOVUxMKSkge1xuQEAgLTI4NDgsNyAmIzQzOzI4NTUsOCBAQCBzdGF0aWMgaW50IHRwYWNrZXRfc25kKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBtc2doZHIgKm1zZylcbiBcdFx0XHRnb3RvIG91dF9zdGF0dXM7XG4gXHRcdH1cbiBcdFx0dHBfbGVuID0gdHBhY2tldF9maWxsX3NrYihwbywgc2tiLCBwaCwgZGV2LCBkYXRhLCB0cF9sZW4sIHByb3RvLFxuLVx0XHRcdFx0XHQgIGFkZHIsIGhsZW4sIGNvcHlsZW4sIFx1MDAyNnNvY2tjKTtcbiYjNDM7XHRcdFx0XHRcdCAgYWRkciwgaGxlbiwgY29weWxlbiwgaGFyZF9oZWFkZXJfbGVuLFxuJiM0MztcdFx0XHRcdFx0ICBcdTAwMjZzb2NrYyk7XG4gXHRcdGlmIChsaWtlbHkodHBfbGVuIFx1MDAzZT0gMCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICB0cF9sZW4gXHUwMDNlIGRldi1cdTAwM2VtdHUgJiM0MzsgcmVzZXJ2ZSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICF2bmV0X2hkcl9zeiBcdTAwMjZcdTAwMjZcbkBAIC0yOTU2LDcgJiM0MzsyOTY0LDcgQEAgc3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiBcdGludCBvZmZzZXQgPSAwO1xuIFx0c3RydWN0IHBhY2tldF9zb2NrICpwbyA9IHBrdF9zayhzayk7XG4gXHRpbnQgdm5ldF9oZHJfc3ogPSBSRUFEX09OQ0UocG8tXHUwMDNldm5ldF9oZHJfc3opO1xuLVx0aW50IGhsZW4sIHRsZW4sIGxpbmVhcjtcbiYjNDM7XHRpbnQgaGFyZF9oZWFkZXJfbGVuLCBobGVuLCB0bGVuLCBsaW5lYXI7XG4gXHRpbnQgZXh0cmFfbGVuID0gMDtcbiBcbiBcdC8qXG5AQCAtMjk5Niw4ICYjNDM7MzAwNCw5IEBAIHN0YXRpYyBpbnQgcGFja2V0X3NuZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4gXHRcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuJiM0MztcdGhhcmRfaGVhZGVyX2xlbiA9IFJFQURfT05DRShkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbiBcdGlmIChzb2NrLVx1MDAzZXR5cGUgPT0gU09DS19SQVcpXG4tXHRcdHJlc2VydmUgPSBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuJiM0MztcdFx0cmVzZXJ2ZSA9IGhhcmRfaGVhZGVyX2xlbjtcbiBcdGlmICh2bmV0X2hkcl9zeikge1xuIFx0XHRlcnIgPSBwYWNrZXRfc25kX3ZuZXRfcGFyc2UobXNnLCBcdTAwMjZsZW4sIFx1MDAyNnZuZXRfaGRyLCB2bmV0X2hkcl9zeik7XG4gXHRcdGlmIChlcnIpXG5AQCAtMzAxOCwxMCAmIzQzOzMwMjcsMTAgQEAgc3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuIFx0ZXJyID0gLUVOT0JVRlM7XG4tXHRobGVuID0gTExfUkVTRVJWRURfU1BBQ0UoZGV2KTtcbiYjNDM7XHRobGVuID0gTExfUkVTRVJWRURfU1BBQ0VfRVgoZGV2LCBoYXJkX2hlYWRlcl9sZW4pO1xuIFx0dGxlbiA9IGRldi1cdTAwM2VuZWVkZWRfdGFpbHJvb207XG4gXHRsaW5lYXIgPSBfX3ZpcnRpbzE2X3RvX2NwdSh2aW9fbGUoKSwgdm5ldF9oZHIuaGRyX2xlbik7XG4tXHRsaW5lYXIgPSBtYXgobGluZWFyLCBtaW5fdChpbnQsIGxlbiwgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbikpO1xuJiM0MztcdGxpbmVhciA9IG1heChsaW5lYXIsIG1pbl90KGludCwgbGVuLCBoYXJkX2hlYWRlcl9sZW4pKTtcbiBcdHNrYiA9IHBhY2tldF9hbGxvY19za2Ioc2ssIGhsZW4gJiM0MzsgdGxlbiwgaGxlbiwgbGVuLCBsaW5lYXIsXG4gXHRcdFx0ICAgICAgIG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCwgXHUwMDI2ZXJyKTtcbiBcdGlmIChza2IgPT0gTlVMTClcbkBAIC0zMDM3LDcgJiM0MzszMDQ2LDcgQEAgc3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiBcdH0gZWxzZSBpZiAocmVzZXJ2ZSkge1xuIFx0XHRza2JfcmVzZXJ2ZShza2IsIC1yZXNlcnZlKTtcbiBcdFx0aWYgKGxlbiBcdTAwM2MgcmVzZXJ2ZSAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgZGV2LVx1MDAzZW1pbl9oZWFkZXJfbGVuICE9IGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pXG4mIzQzO1x0XHQgICAgZGV2LVx1MDAzZW1pbl9oZWFkZXJfbGVuICE9IGhhcmRfaGVhZGVyX2xlbilcbiBcdFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbiBcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFDS0VUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFja2V0X3NlbmRtc2dfc3BrdCYjMzQ7LAogICAgJiMzNDt0cGFja2V0X3NuZCYjMzQ7LAogICAgJiMzNDtwYWNrZXRfc25kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEFGX1BBQ0tFVCBzb2NrZXQgaW1wbGVtZW50YXRpb24gdG8gZml4IGEgcmFjZSBjb25kaXRpb24gd2l0aCBgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbmAgYW5kIHJlbW92ZXMgYSBgQ0FQX1NZU19SQVdJT2AgY2hlY2sgaW4gYGRldl92YWxpZGF0ZV9oZWFkZXJgLiBUaGlzIGFmZmVjdHMgcGFja2V0IHRyYW5zbWlzc2lvbiB2aWEgYHBhY2tldF9zZW5kbXNnX3Nwa3RgLCBgcGFja2V0X3NuZGAsIGFuZCBgdHBhY2tldF9zbmRgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgbmV0d29yayBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgYXJlIGludHJvZHVjZWQgYnkgdGhlIGNoYW5nZXMgaW4gaGVhZGVyIGxlbmd0aCBoYW5kbGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE1ZmYxMGYyMTA5Y2QyNWQ1MTliNmZmYzAyNjEwY2JkOTk3MjUwOWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyA1IDE0OjUzOjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggOTk4MWQ2MzdmOGI1NC4uODg0MGIxMjY5NzlmZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC0zMDAsOSAmIzQzOzMwMCwxMSBAQCBzdHJ1Y3QgaGhfY2FjaGUgewogICogV2UgY291bGQgdXNlIG90aGVyIGFsaWdubWVudCB2YWx1ZXMsIGJ1dCB3ZSBtdXN0IG1haW50YWluIHRoZQogICogcmVsYXRpb25zaGlwIEhIIGFsaWdubWVudCAmbHQ7PSBMTCBhbGlnbm1lbnQuCiAgKi8KLSNkZWZpbmUgTExfUkVTRVJWRURfU1BBQ0UoZGV2KSBcCi0JKCgoKGRldiktJmd0O2hhcmRfaGVhZGVyX2xlbiAmIzQzOyBSRUFEX09OQ0UoKGRldiktJmd0O25lZWRlZF9oZWFkcm9vbSkpIFwKJiM0MzsjZGVmaW5lIExMX1JFU0VSVkVEX1NQQUNFX0VYKGRldiwgaGxlbikgXAomIzQzOwkoKCgoaGxlbikgJiM0MzsgUkVBRF9PTkNFKChkZXYpLSZndDtuZWVkZWRfaGVhZHJvb20pKSBcCiAJICAmYW1wOyB+KEhIX0RBVEFfTU9EIC0gMSkpICYjNDM7IEhIX0RBVEFfTU9EKQomIzQzOyNkZWZpbmUgTExfUkVTRVJWRURfU1BBQ0UoZGV2KSBcCiYjNDM7CUxMX1JFU0VSVkVEX1NQQUNFX0VYKGRldiwgKGRldiktJmd0O2hhcmRfaGVhZGVyX2xlbikKICNkZWZpbmUgTExfUkVTRVJWRURfU1BBQ0VfRVhUUkEoZGV2LGV4dHJhKSBcCiAJKCgoKGRldiktJmd0O2hhcmRfaGVhZGVyX2xlbiAmIzQzOyBSRUFEX09OQ0UoKGRldiktJmd0O25lZWRlZF9oZWFkcm9vbSkgJiM0MzsgKGV4dHJhKSkgXAogCSAgJmFtcDsgfihISF9EQVRBX01PRCAtIDEpKSAmIzQzOyBISF9EQVRBX01PRCkKQEAgLTM1MzEsMTEgJiM0MzszNTMzLDYgQEAgc3RhdGljIGlubGluZSBib29sIGRldl92YWxpZGF0ZV9oZWFkZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZiAobGVuICZsdDsgZGV2LSZndDttaW5faGVhZGVyX2xlbikKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKGNhcGFibGUoQ0FQX1NZU19SQVdJTykpIHsKLQkJbWVtc2V0KGxsX2hlYWRlciAmIzQzOyBsZW4sIDAsIGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuIC0gbGVuKTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCiAJaWYgKGRldi0mZ3Q7aGVhZGVyX29wcyAmYW1wOyZhbXA7IGRldi0mZ3Q7aGVhZGVyX29wcy0mZ3Q7dmFsaWRhdGUpCiAJCXJldHVybiBkZXYtJmd0O2hlYWRlcl9vcHMtJmd0O3ZhbGlkYXRlKGxsX2hlYWRlciwgbGVuKTsKIApkaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKaW5kZXggZTc1ZDI5MzI0NzVhYy4uZTliNjgxMGM4ODVlNSAxMDA2NDQKLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCkBAIC0xOTUzLDggJiM0MzsxOTUzLDkgQEAgc3RhdGljIGludCBwYWNrZXRfc2VuZG1zZ19zcGt0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBzb2NrY21fY29va2llIHNvY2tjOwogCV9fYmUxNiBwcm90byA9IDA7Ci0JaW50IGVycjsKJiM0MzsJaW50IGhhcmRfaGVhZGVyX2xlbjsKIAlpbnQgZXh0cmFfbGVuID0gMDsKJiM0MzsJaW50IGVycjsKIAogCS8qCiAJICoJR2V0IGFuZCB2ZXJpZnkgdGhlIGFkZHJlc3MuCkBAIC0xOTk3LDE0ICYjNDM7MTk5OCwxOCBAQCBzdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnX3Nwa3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAogCQlleHRyYV9sZW4gPSA0OyAvKiBXZSYjMzk7cmUgZG9pbmcgb3VyIG93biBDUkMgKi8KIAl9CiAKJiM0MzsJLyogS2VlcCB0aGUgYWxsb2NhdGlvbi10aW1lIGhlYWRlciBsZW5ndGggYWNyb3NzIHJldHJ5LiAqLwomIzQzOwlpZiAoIXNrYikKJiM0MzsJCWhhcmRfaGVhZGVyX2xlbiA9IFJFQURfT05DRShkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiYjNDM7CiAJZXJyID0gLUVNU0dTSVpFOwotCWlmIChsZW4gJmd0OyBkZXYtJmd0O210dSAmIzQzOyBkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiAmIzQzOyBWTEFOX0hMRU4gJiM0MzsgZXh0cmFfbGVuKQomIzQzOwlpZiAobGVuICZndDsgZGV2LSZndDttdHUgJiM0MzsgaGFyZF9oZWFkZXJfbGVuICYjNDM7IFZMQU5fSExFTiAmIzQzOyBleHRyYV9sZW4pCiAJCWdvdG8gb3V0X3VubG9jazsKIAogCWlmICghc2tiKSB7Ci0JCXNpemVfdCByZXNlcnZlZCA9IExMX1JFU0VSVkVEX1NQQUNFKGRldik7CiYjNDM7CQlzaXplX3QgcmVzZXJ2ZWQgPSBMTF9SRVNFUlZFRF9TUEFDRV9FWChkZXYsIGhhcmRfaGVhZGVyX2xlbik7CiAJCWludCB0bGVuID0gZGV2LSZndDtuZWVkZWRfdGFpbHJvb207Ci0JCXVuc2lnbmVkIGludCBoaGxlbiA9IGRldi0mZ3Q7aGVhZGVyX29wcyA/IGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuIDogMDsKJiM0MzsJCXVuc2lnbmVkIGludCBoaGxlbiA9IGRldi0mZ3Q7aGVhZGVyX29wcyA/IGhhcmRfaGVhZGVyX2xlbiA6IDA7CiAKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXNrYiA9IHNvY2tfd21hbGxvYyhzaywgbGVuICYjNDM7IHJlc2VydmVkICYjNDM7IHRsZW4sIDAsIEdGUF9LRVJORUwpOwpAQCAtMjAzNCw3ICYjNDM7MjAzOSw3IEBAIHN0YXRpYyBpbnQgcGFja2V0X3NlbmRtc2dfc3BrdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csCiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9Ci0JaWYgKGxlbiAmZ3Q7IChkZXYtJmd0O210dSAmIzQzOyBkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiAmIzQzOyBleHRyYV9sZW4pICZhbXA7JmFtcDsKJiM0MzsJaWYgKGxlbiAmZ3Q7IChkZXYtJmd0O210dSAmIzQzOyBoYXJkX2hlYWRlcl9sZW4gJiM0MzsgZXh0cmFfbGVuKSAmYW1wOyZhbXA7CiAJICAgICFwYWNrZXRfZXh0cmFfdmxhbl9sZW5fYWxsb3dlZChkZXYsIHNrYikpIHsKIAkJZXJyID0gLUVNU0dTSVpFOwogCQlnb3RvIG91dF91bmxvY2s7CkBAIC0yNTY5LDYgJiM0MzsyNTc0LDcgQEAgc3RhdGljIGludCBwYWNrZXRfc25kX3ZuZXRfcGFyc2Uoc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgKmxlbiwKIHN0YXRpYyBpbnQgdHBhY2tldF9maWxsX3NrYihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQl2b2lkICpmcmFtZSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgaW50IHRwX2xlbiwKIAkJX19iZTE2IHByb3RvLCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgaGxlbiwgaW50IGNvcHlsZW4sCiYjNDM7CQlpbnQgaGFyZF9oZWFkZXJfbGVuLAogCQljb25zdCBzdHJ1Y3Qgc29ja2NtX2Nvb2tpZSAqc29ja2MpCiB7CiAJdW5pb24gdHBhY2tldF91aGRyIHBoOwpAQCAtMjYwMCw4ICYjNDM7MjYwNiw4IEBAIHN0YXRpYyBpbnQgdHBhY2tldF9maWxsX3NrYihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCX0gZWxzZSBpZiAoY29weWxlbikgewogCQlpbnQgaGRybGVuID0gbWluX3QoaW50LCBjb3B5bGVuLCB0cF9sZW4pOwogCi0JCXNrYl9wdXNoKHNrYiwgZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4pOwotCQlza2JfcHV0KHNrYiwgY29weWxlbiAtIGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKTsKJiM0MzsJCXNrYl9wdXNoKHNrYiwgaGFyZF9oZWFkZXJfbGVuKTsKJiM0MzsJCXNrYl9wdXQoc2tiLCBjb3B5bGVuIC0gaGFyZF9oZWFkZXJfbGVuKTsKIAkJZXJyID0gc2tiX3N0b3JlX2JpdHMoc2tiLCAwLCBkYXRhLCBoZHJsZW4pOwogCQlpZiAodW5saWtlbHkoZXJyKSkKIAkJCXJldHVybiBlcnI7CkBAIC0yNzMyLDcgJiM0MzsyNzM4LDcgQEAgc3RhdGljIGludCB0cGFja2V0X3NuZChzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3QgbXNnaGRyICptc2cpCiAJdm9pZCAqZGF0YTsKIAlpbnQgbGVuX3N1bSA9IDA7CiAJaW50IHN0YXR1cyA9IFRQX1NUQVRVU19BVkFJTEFCTEU7Ci0JaW50IGhsZW4sIHRsZW4sIGNvcHlsZW4gPSAwOwomIzQzOwlpbnQgaGFyZF9oZWFkZXJfbGVuLCBobGVuLCB0bGVuLCBjb3B5bGVuID0gMDsKIAlsb25nIHRpbWVvOwogCiAJbXV0ZXhfbG9jaygmYW1wO3BvLSZndDtwZ192ZWNfbG9jayk7CkBAIC0yNzc5LDggJiM0MzsyNzg1LDkgQEAgc3RhdGljIGludCB0cGFja2V0X3NuZChzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3QgbXNnaGRyICptc2cpCiAJCQlnb3RvIG91dF9wdXQ7CiAJfQogCiYjNDM7CWhhcmRfaGVhZGVyX2xlbiA9IFJFQURfT05DRShkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiAJaWYgKHBvLSZndDtzay5za19zb2NrZXQtJmd0O3R5cGUgPT0gU09DS19SQVcpCi0JCXJlc2VydmUgPSBkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbjsKJiM0MzsJCXJlc2VydmUgPSBoYXJkX2hlYWRlcl9sZW47CiAJc2l6ZV9tYXggPSBwby0mZ3Q7dHhfcmluZy5mcmFtZV9zaXplCiAJCS0gKHBvLSZndDt0cF9oZHJsZW4gLSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2xsKSk7CiAKQEAgLTI4MTcsNyAmIzQzOzI4MjQsNyBAQCBzdGF0aWMgaW50IHRwYWNrZXRfc25kKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBtc2doZHIgKm1zZykKIAkJCWdvdG8gdHBhY2tldF9lcnJvcjsKIAogCQlzdGF0dXMgPSBUUF9TVEFUVVNfU0VORF9SRVFVRVNUOwotCQlobGVuID0gTExfUkVTRVJWRURfU1BBQ0UoZGV2KTsKJiM0MzsJCWhsZW4gPSBMTF9SRVNFUlZFRF9TUEFDRV9FWChkZXYsIGhhcmRfaGVhZGVyX2xlbik7CiAJCXRsZW4gPSBkZXYtJmd0O25lZWRlZF90YWlscm9vbTsKIAkJaWYgKHZuZXRfaGRyX3N6KSB7CiAJCQlkYXRhICYjNDM7PSB2bmV0X2hkcl9zejsKQEAgLTI4MzUsMTAgJiM0MzsyODQyLDEwIEBAIHN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKQogCQkJCQkJICAgIHZuZXRfaGRyLmhkcl9sZW4pOwogCQkJaGFzX3ZuZXRfaGRyID0gdHJ1ZTsKIAkJfQotCQljb3B5bGVuID0gbWF4X3QoaW50LCBjb3B5bGVuLCBkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiYjNDM7CQljb3B5bGVuID0gbWF4X3QoaW50LCBjb3B5bGVuLCBoYXJkX2hlYWRlcl9sZW4pOwogCQlza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKCZhbXA7cG8tJmd0O3NrLAogCQkJCWhsZW4gJiM0MzsgdGxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2xsKSAmIzQzOwotCQkJCShjb3B5bGVuIC0gZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4pLAomIzQzOwkJCQkoY29weWxlbiAtIGhhcmRfaGVhZGVyX2xlbiksCiAJCQkJIW5lZWRfd2FpdCwgJmFtcDtlcnIpOwogCiAJCWlmICh1bmxpa2VseShza2IgPT0gTlVMTCkpIHsKQEAgLTI4NDgsNyAmIzQzOzI4NTUsOCBAQCBzdGF0aWMgaW50IHRwYWNrZXRfc25kKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBtc2doZHIgKm1zZykKIAkJCWdvdG8gb3V0X3N0YXR1czsKIAkJfQogCQl0cF9sZW4gPSB0cGFja2V0X2ZpbGxfc2tiKHBvLCBza2IsIHBoLCBkZXYsIGRhdGEsIHRwX2xlbiwgcHJvdG8sCi0JCQkJCSAgYWRkciwgaGxlbiwgY29weWxlbiwgJmFtcDtzb2NrYyk7CiYjNDM7CQkJCQkgIGFkZHIsIGhsZW4sIGNvcHlsZW4sIGhhcmRfaGVhZGVyX2xlbiwKJiM0MzsJCQkJCSAgJmFtcDtzb2NrYyk7CiAJCWlmIChsaWtlbHkodHBfbGVuICZndDs9IDApICZhbXA7JmFtcDsKIAkJICAgIHRwX2xlbiAmZ3Q7IGRldi0mZ3Q7bXR1ICYjNDM7IHJlc2VydmUgJmFtcDsmYW1wOwogCQkgICAgIXZuZXRfaGRyX3N6ICZhbXA7JmFtcDsKQEAgLTI5NTYsNyAmIzQzOzI5NjQsNyBAQCBzdGF0aWMgaW50IHBhY2tldF9zbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKQogCWludCBvZmZzZXQgPSAwOwogCXN0cnVjdCBwYWNrZXRfc29jayAqcG8gPSBwa3Rfc2soc2spOwogCWludCB2bmV0X2hkcl9zeiA9IFJFQURfT05DRShwby0mZ3Q7dm5ldF9oZHJfc3opOwotCWludCBobGVuLCB0bGVuLCBsaW5lYXI7CiYjNDM7CWludCBoYXJkX2hlYWRlcl9sZW4sIGhsZW4sIHRsZW4sIGxpbmVhcjsKIAlpbnQgZXh0cmFfbGVuID0gMDsKIAogCS8qCkBAIC0yOTk2LDggJiM0MzszMDA0LDkgQEAgc3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbikKIAkJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKJiM0MzsJaGFyZF9oZWFkZXJfbGVuID0gUkVBRF9PTkNFKGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKTsKIAlpZiAoc29jay0mZ3Q7dHlwZSA9PSBTT0NLX1JBVykKLQkJcmVzZXJ2ZSA9IGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuOwomIzQzOwkJcmVzZXJ2ZSA9IGhhcmRfaGVhZGVyX2xlbjsKIAlpZiAodm5ldF9oZHJfc3opIHsKIAkJZXJyID0gcGFja2V0X3NuZF92bmV0X3BhcnNlKG1zZywgJmFtcDtsZW4sICZhbXA7dm5ldF9oZHIsIHZuZXRfaGRyX3N6KTsKIAkJaWYgKGVycikKQEAgLTMwMTgsMTAgJiM0MzszMDI3LDEwIEBAIHN0YXRpYyBpbnQgcGFja2V0X3NuZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiAJCWdvdG8gb3V0X3VubG9jazsKIAogCWVyciA9IC1FTk9CVUZTOwotCWhsZW4gPSBMTF9SRVNFUlZFRF9TUEFDRShkZXYpOwomIzQzOwlobGVuID0gTExfUkVTRVJWRURfU1BBQ0VfRVgoZGV2LCBoYXJkX2hlYWRlcl9sZW4pOwogCXRsZW4gPSBkZXYtJmd0O25lZWRlZF90YWlscm9vbTsKIAlsaW5lYXIgPSBfX3ZpcnRpbzE2X3RvX2NwdSh2aW9fbGUoKSwgdm5ldF9oZHIuaGRyX2xlbik7Ci0JbGluZWFyID0gbWF4KGxpbmVhciwgbWluX3QoaW50LCBsZW4sIGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKSk7CiYjNDM7CWxpbmVhciA9IG1heChsaW5lYXIsIG1pbl90KGludCwgbGVuLCBoYXJkX2hlYWRlcl9sZW4pKTsKIAlza2IgPSBwYWNrZXRfYWxsb2Nfc2tiKHNrLCBobGVuICYjNDM7IHRsZW4sIGhsZW4sIGxlbiwgbGluZWFyLAogCQkJICAgICAgIG1zZy0mZ3Q7bXNnX2ZsYWdzICZhbXA7IE1TR19ET05UV0FJVCwgJmFtcDtlcnIpOwogCWlmIChza2IgPT0gTlVMTCkKQEAgLTMwMzcsNyAmIzQzOzMwNDYsNyBAQCBzdGF0aWMgaW50IHBhY2tldF9zbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKQogCX0gZWxzZSBpZiAocmVzZXJ2ZSkgewogCQlza2JfcmVzZXJ2ZShza2IsIC1yZXNlcnZlKTsKIAkJaWYgKGxlbiAmbHQ7IHJlc2VydmUgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSAmYW1wOyZhbXA7Ci0JCSAgICBkZXYtJmd0O21pbl9oZWFkZXJfbGVuICE9IGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKQomIzQzOwkJICAgIGRldi0mZ3Q7bWluX2hlYWRlcl9sZW4gIT0gaGFyZF9oZWFkZXJfbGVuKQogCQkJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NTUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0d29yayBQYWNrZXQgSGVhZGVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBhbmQgaXQmIzM5O3MgdG91Y2hpbmcgYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgIGFuZCBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyBgaGFyZF9oZWFkZXJfbGVuYCBpcyBoYW5kbGVkIGluIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHRwYWNrZXRfc25kYCwgYW5kIGBwYWNrZXRfc25kYC4gU21hcnQgbW92ZSwgdXNpbmcgYFJFQURfT05DRShkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbilgIGFuZCBzdG9yaW5nIGl0IGxvY2FsbHkgYXMgYGhhcmRfaGVhZGVyX2xlbmAuIFRoaXMgYXZvaWRzIHRoZSBjbGFzc2ljIGRhdGEgcmFjZSBhbmQgVE9DVE9VIGlzc3VlcyBpZiBgZGV2LSZndDtoYXJkX2hlYWRlcl9sZW5gIGdldHMgdXBkYXRlZCBjb25jdXJyZW50bHksIHdoaWNoIGlzIGEgY29tbW9uIHZ1bG5lcmFiaWxpdHkuIEdvb2QgcHJldmVudGF0aXZlIG1lYXN1cmUuCgpBaCwgdGhlcmUmIzM5O3MgYWxzbyBhIHJlbW92YWwgb2YgYSBjaHVuayBvZiBjb2RlIGluIGBkZXZfdmFsaWRhdGVfaGVhZGVyYC4gSGFuZyBvbiwgbGV0JiMzOTtzIHNlZS4uLiBpdCYjMzk7cyB0YWtpbmcgb3V0IHRoaXMgY29uZGl0aW9uYWwgYmxvY2s6CgpgYGBjCi0JaWYgKGNhcGFibGUoQ0FQX1NZU19SQVdJTykpIHsKLQkJbWVtc2V0KGxsX2hlYWRlciAmIzQzOyBsZW4sIDAsIGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuIC0gbGVuKTsKLQkJcmV0dXJuIHRydWU7Ci0JfQpgYGAKCldhaXQsIGl0JiMzOTtzIHJlbW92aW5nIHRoZSBgQ0FQX1NZU19SQVdJT2AgY2hlY2sgYW5kIHRoZSBzdWJzZXF1ZW50IGBtZW1zZXRgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJdCBzZWVtcyBsaWtlIHRoZSBwYXRjaCBpc24mIzM5O3QgemVyb2luZyBvdXQgdGhlIHJlbWFpbmluZyBwYXJ0IG9mIHRoZSBoZWFkZXIgYW55bW9yZSBpZiBgbGVuYCBpcyBsZXNzIHRoYW4gYGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuYCwgYnV0IG9ubHkgZm9yIHJhdyBJL08uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGRldl92YWxpZGF0ZV9oZWFkZXJgIGFjdHVhbGx5IGRvZXMgaW4gdGhpcyBjb250ZXh0LCBzbyBJIGNhbiBncmFzcCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMuIEkgc2hvdWxkIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHNlZSB3aGF0IGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZfdmFsaWRhdGVfaGVhZGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MzUxOD1zdGF0aWMgaW5saW5lIF9fYmUxNiBkZXZfcGFyc2VfaGVhZGVyX3Byb3RvY29sKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zNTI3LS8qIGxsX2hlYWRlciBtdXN0IGhhdmUgYXQgbGVhc3QgaGFyZF9oZWFkZXJfbGVuIGFsbG9jYXRlZCAqL1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDozNTI4OnN0YXRpYyBpbmxpbmUgYm9vbCBkZXZfdmFsaWRhdGVfaGVhZGVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTM1MjktXHRcdFx0XHQgICAgICAgY2hhciAqbGxfaGVhZGVyLCBpbnQgbGVuKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTk0Nz1zdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnX3Nwa3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjAzNy1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjAzODpcdGlmICghZGV2X3ZhbGlkYXRlX2hlYWRlcihkZXYsIHNrYi1cdTAwM2VkYXRhLCBsZW4pIHx8ICFza2ItXHUwMDNlbGVuKSB7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIwMzktXHRcdGVyciA9IC1FSU5WQUw7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNTc0PXN0YXRpYyBpbnQgdHBhY2tldF9maWxsX3NrYihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjYxMy1cdFx0XHRyZXR1cm4gZXJyO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNjE0Olx0XHRpZiAoIWRldl92YWxpZGF0ZV9oZWFkZXIoZGV2LCBza2ItXHUwMDNlZGF0YSwgaGRybGVuKSlcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjYxNS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI5NTM9c3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMwNTgtXHRpZiAoKHNvY2stXHUwMDNldHlwZSA9PSBTT0NLX1JBVyBcdTAwMjZcdTAwMjZcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzA1OTpcdCAgICAgIWRldl92YWxpZGF0ZV9oZWFkZXIoZGV2LCBza2ItXHUwMDNlZGF0YSwgbGVuKSkgfHwgIXNrYi1cdTAwM2VsZW4pIHtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzA2MC1cdFx0ZXJyID0gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDAzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogQUZfUEFDS0VUIFNvY2tldCBNb2RpZmljYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYWZfcGFja2V0LmNgLCB0aGUgaGVhcnQgb2YgYEFGX1BBQ0tFVGAgc29ja2V0IGltcGxlbWVudGF0aW9uLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nIOKAkyBjb3JlIGtlcm5lbCBsb2dpYywgcG90ZW50aWFsbHkgcmVhY2hhYmxlLCBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwuIEl0JiMzOTtzIGFkZHJlc3NpbmcgYSByYWNlIGNvbmRpdGlvbiBpbnZvbHZpbmcgYGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuYCwgd2hpY2ggc3VnZ2VzdHMgYSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWUsIGFuZCBpdCYjMzk7cyBhbHNvIHJlbW92aW5nIGEgYENBUF9TWVNfUkFXSU9gIGNhcGFiaWxpdHkgY2hlY2sgd2l0aGluIGBkZXZfdmFsaWRhdGVfaGVhZGVyYC4gSGFuZyBvbiwgdGhhdCBsYXN0IHBhcnQuLi4gbGV0IG1lIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBjb2RlIHNuaXBwZXQ6CgpgYGBjCi0JaWYgKGNhcGFibGUoQ0FQX1NZU19SQVdJTykpIHsKLQkJbWVtc2V0KGxsX2hlYWRlciAmIzQzOyBsZW4sIDAsIGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuIC0gbGVuKTsKLQkJcmV0dXJuIHRydWU7Ci0JfQpgYGAKClJpZ2h0LCBJIHNlZS4gUHJldmlvdXNseSwgaWYgdGhlIHByb2Nlc3MgaGFkIGBDQVBfU1lTX1JBV0lPYCwgaXQgd291bGQgYnlwYXNzIHRoZSBoZWFkZXIgdmFsaWRhdGlvbiBlbnRpcmVseSwgemVyb2luZyBvdXQgdGhlIHJlbWFpbmluZyBoZWFkZXIgYnl0ZXMgYW5kIHJldHVybmluZyBlYXJseS4gTm93LCB0aGF0IGNoZWNrIGlzIGdvbmUuIFRoaXMgaW1wbGllcyBhIGNoYW5nZSBpbiBiZWhhdmlvcjogYGRldi0mZ3Q7aGVhZGVyX29wcy0mZ3Q7dmFsaWRhdGVgIHdpbGwgKmFsd2F5cyogYmUgY2FsbGVkLCByZWdhcmRsZXNzIG9mIHRoZSBgQ0FQX1NZU19SQVdJT2AgY2FwYWJpbGl0eS4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBgYWZfcGFja2V0LmNgIGFuZCBzcGVjaWZpY2FsbHkgYGRldl92YWxpZGF0ZV9oZWFkZXJgLiBHaXZlbiB0aGlzIG1vZGlmaWNhdGlvbiwgYW5kIGNvbnNpZGVyaW5nIHRoZSByYWNlIGNvbmRpdGlvbiBmaXgsIHRoaXMgaXMgKmFic29sdXRlbHkqIHdvcnRoIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIGZvciBmdXp6aW5nIHdpbGwgYmUgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggdGhpcyBjb2RlIGFuZCBub3cgdGFrZSBhIGRpZmZlcmVudCBjb2RlIHBhdGg6IHNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHRwYWNrZXRfc25kYCwgYW5kIGBwYWNrZXRfc25kYC4gV2hpbGUgYGRldl92YWxpZGF0ZV9oZWFkZXJgIGlzIGEgc3RhdGljIGlubGluZSwgc28gbWlnaHQgbm90IGJlIGFzIGRpcmVjdGx5IHVzYWJsZSBmb3IgZnV6emluZywgSSYjMzk7bGwga2VlcCBpdCBpbiBtaW5kIGFzIGEgcG9pbnQgb2YgcmVmZXJlbmNlLiBJIHdpbGwgc3RhcnQgYnkgZGlnZ2luZyBkZWVwZXIgaW50byB0aG9zZSBvdGhlciBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFja2V0X3NlbmRtc2dfc3BrdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcGFja2V0L2FmX3BhY2tldC5jPTE5MjM9c3RhdGljIHZvaWQgcGFja2V0X3BhcnNlX2hlYWRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2tldCAqc29jaylcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE5NDYtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE5NDc6c3RhdGljIGludCBwYWNrZXRfc2VuZG1zZ19zcGt0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTk0OC1cdFx0XHQgICAgICAgc2l6ZV90IGxlbilcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTQ2NTg9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wc19zcGt0ID0ge1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDY3MS1cdC5zaHV0ZG93biA9XHRzb2NrX25vX3NodXRkb3duLFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NjcyOlx0LnNlbmRtc2cgPVx0cGFja2V0X3NlbmRtc2dfc3BrdCxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDY3My1cdC5yZWN2bXNnID1cdHBhY2tldF9yZWN2bXNnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMDgKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBhY2tldCBTb2NrZXQgU2VuZCBIYW5kbGVycyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHBhY2tldHMgYXJlIHNlbnQgb3V0LCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIEFGX1BBQ0tFVCBmYW1pbHksIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSSBzZWUgdGhyZWUgcHJpbWFyeSBoYW5kbGVycyBoZXJlOiBgcGFja2V0X3NlbmRtc2dfc3BrdGAsIGBwYWNrZXRfc25kYCwgYW5kIGB0cGFja2V0X3NuZGAuCgpgcGFja2V0X3NlbmRtc2dfc3BrdGAgc2VlbXMgdG8gYmUgdGhlIG9sZCBndWFyZCwgdGllZCB0byB0aGUgb2Jzb2xldGUgYFNPQ0tfUEFDS0VUYCB0eXBlLiBJJiMzOTtsbCBwcm9iYWJseSBza2ltIG92ZXIgdGhhdCB1bmxlc3MgSSBuZWVkIHRvIHN1cHBvcnQgc29tZSBzZXJpb3VzbHkgbGVnYWN5IHN0dWZmLiBUaGUgcmVhbCB3b3JrIGlzIGxpa2VseSBpbiB0aGUgbW9yZSBtb2Rlcm4gaW1wbGVtZW50YXRpb25zLgoKTm93LCBgcGFja2V0X3NuZGAgaGFuZGxlcyBgU09DS19SQVdgIGFuZCBgU09DS19ER1JBTWAgc29ja2V0cyB3aXRoaW4gYEFGX1BBQ0tFVGAuIFNvLCB5b3VyIGJhc2ljLCByYXcgcGFja2V0IG1hbmlwdWxhdGlvbiBhbmQgZGF0YWdyYW0gc2VuZGluZy4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIGFuZCB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmdW5kYW1lbnRhbCBiZWhhdmlvci4KCkJ1dCBJJiMzOTttIHJlYWxseSBjdXJpb3VzIGFib3V0IGB0cGFja2V0X3NuZGAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1lbW9yeS1tYXBwZWQgcmluZyBidWZmZXIgVFhfUklORyBjb21lcyBpbnRvIHBsYXkuIFRoYXTigJlzIHdoZXJlIHRoZSBoaWdoLXBlcmZvcm1hbmNlIHN0dWZmIGlzIGhhcHBlbmluZyB3aXRoIGBBRl9QQUNLRVRgLiBEZWZpbml0ZWx5IHdvcnRoIGRpdmluZyBpbnRvIHRvIHNlZSBob3cgdGhhdCYjMzk7cyBpbXBsZW1lbnRlZCBhbmQgaG93IGl0IG9wdGltaXplcyBwYWNrZXQgdHJhbnNtaXNzaW9uLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhY2tldF9zbmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNTE1PXN0YXRpYyB2b2lkIHRwYWNrZXRfZGVzdHJ1Y3Rfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTM0LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTM1OnN0YXRpYyBpbnQgX19wYWNrZXRfc25kX3ZuZXRfcGFyc2Uoc3RydWN0IHZpcnRpb19uZXRfaGRyICp2bmV0X2hkciwgc2l6ZV90IGxlbilcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjUzNi17XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTUwLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTUxOnN0YXRpYyBpbnQgcGFja2V0X3NuZF92bmV0X3BhcnNlKHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90ICpsZW4sXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1NTItXHRcdFx0XHQgc3RydWN0IHZpcnRpb19uZXRfaGRyICp2bmV0X2hkciwgaW50IHZuZXRfaGRyX3N6KVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU2Mi1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjU2MzpcdHJldCA9IF9fcGFja2V0X3NuZF92bmV0X3BhcnNlKHZuZXRfaGRyLCAqbGVuKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU2NC1cdGlmIChyZXQpXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNjU1PXN0YXRpYyBpbnQgdHBhY2tldF9wYXJzZV9oZWFkZXIoc3RydWN0IHBhY2tldF9zb2NrICpwbywgdm9pZCAqZnJhbWUsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNzIyLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNzIzOnN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNzI0LXtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4MzYtXHRcdFx0bWVtY3B5KFx1MDAyNnZuZXRfaGRyLCBkYXRhIC0gdm5ldF9oZHJfc3osIHNpemVvZih2bmV0X2hkcikpO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyODM3Olx0XHRcdGlmIChfX3BhY2tldF9zbmRfdm5ldF9wYXJzZShcdTAwMjZ2bmV0X2hkciwgdHBfbGVuKSkge1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODM4LVx0XHRcdFx0dHBfbGVuID0gLUVJTlZBTDtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI5Mjc9c3RhdGljIHN0cnVjdCBza19idWZmICpwYWNrZXRfYWxsb2Nfc2tiKHN0cnVjdCBzb2NrICpzaywgc2l6ZV90IHByZXBhZCxcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI5NTItXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI5NTM6c3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjk1NC17XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMDEwLVx0aWYgKHZuZXRfaGRyX3N6KSB7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMwMTE6XHRcdGVyciA9IHBhY2tldF9zbmRfdm5ldF9wYXJzZShtc2csIFx1MDAyNmxlbiwgXHUwMDI2dm5ldF9oZHIsIHZuZXRfaGRyX3N6KTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzAxMi1cdFx0aWYgKGVycilcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTMxMTI9c3RhdGljIGludCBwYWNrZXRfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTE3LVx0LyogUmVhZGluZyB0eF9yaW5nLnBnX3ZlYyB3aXRob3V0IGhvbGRpbmcgcGdfdmVjX2xvY2sgaXMgcmFjeS5cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzExODpcdCAqIHRwYWNrZXRfc25kKCkgd2lsbCByZWRvIHRoZSBjaGVjayBzYWZlbHkuXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMTktXHQgKi9cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEyMC1cdGlmIChkYXRhX3JhY2UocG8tXHUwMDNldHhfcmluZy5wZ192ZWMpKVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMTIxOlx0XHRyZXR1cm4gdHBhY2tldF9zbmQocG8sIG1zZyk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMjItXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMxMjM6XHRyZXR1cm4gcGFja2V0X3NuZChzb2NrLCBtc2csIGxlbik7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMjQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNjgKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRm9jdXNpbmcgb24gUGFja2V0IFRyYW5zbWlzc2lvbiBTeW1ib2xzIGFuZCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBzeW1ib2xzIHJlbGF0ZWQgdG8gcGFja2V0IHRyYW5zbWlzc2lvbi4gVGhlIGtleSBvbmVzIHRvIGxvb2sgYXQgYXJlIGNsZWFybHkgYHBhY2tldF9zZW5kbXNnX3Nwa3RgLCBgdHBhY2tldF9zbmRgLCBhbmQgYHBhY2tldF9zbmRgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucywgb3IgbGlrZWx5IHRoZSBjb3JlIGVsZW1lbnRzIG9mIHRoZSBmdW5jdGlvbnMsIHRoYXQgYXJlIHRoZSBtb3N0IGltcG9ydGFudCBmb3IgbXkgcmVzZWFyY2guCgpOb3csIHRvIHVuZGVyc3RhbmQgdGhlaXIgY29udGV4dCwgSSBuZWVkIHRvIGtub3cgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGBQQUNLRVRgLCBidXQgbGV0JiMzOTtzIGNvbmZpcm0gdGhhdC4gVGhhdCBsaWtlbHkgbWFwcyB0byBgQ09ORklHX1BBQ0tFVGAgc29tZXdoZXJlLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGtlcm5lbCYjMzk7cyBzb3VyY2UuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSwgcHJvYmFibHkgd2l0aGluIHRoZSBgbmV0L3BhY2tldC9gIGRpcmVjdG9yeSwgb3IgbWF5YmUgc29tZXRoaW5nIHNpbWlsYXIuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgcGFja2V0LXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYXJlIGRlZmluZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUNLRVQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9LY29uZmlnLTUtXG5uZXQvcGFja2V0L0tjb25maWc6Njpjb25maWcgUEFDS0VUXG5uZXQvcGFja2V0L0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1BhY2tldCBzb2NrZXRcJiMzNDtcbi0tXG5uZXQvcGFja2V0L0tjb25maWctMTgtXG5uZXQvcGFja2V0L0tjb25maWc6MTk6Y29uZmlnIFBBQ0tFVF9ESUFHXG5uZXQvcGFja2V0L0tjb25maWctMjAtXHR0cmlzdGF0ZSBcJiMzNDtQYWNrZXQ6IHNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc0MgoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiAxNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGFja2V0IFNvY2tldCBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgY29uZmlnIGluIHF1ZXN0aW9uIGhlcmUgaXMgY2xlYXJseSBgUEFDS0VUYC4gTm8gb3RoZXIgcmVsZXZhbnQgY29uZmlncyBqdW1wIG91dCBhdCBtZSBpbW1lZGlhdGVseSwgYnV0IGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzbmVha3kgZGVwZW5kZW5jaWVzIEkmIzM5O20gbWlzc2luZy4gUmlnaHQsIHRoZSBwYXRjaCBpdHNlbGYgaXMgdG91Y2hpbmcgYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgIOKAkyB0aGUgaGVhcnQgb2YgdGhlIHBhY2tldCBzb2NrZXQgaW1wbGVtZW50YXRpb24g4oCTIGFuZCBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAuIFRoYXQmIzM5O3MgYSBmb2N1c2VkIGFyZWEsIHdoaWNoIGlzIGdvb2QuCgpUaGUga2V5IHRoaW5nIGlzIGBDT05GSUdfUEFDS0VUYCwgaXQmIzM5O3MgdGhlIGFuY2hvciBwb2ludC4KCk5vdywgY29uc2lkZXJpbmcgdGhlIGZpbGUgbW9kaWZpY2F0aW9ucywgaXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSByYWNlIGNvbmRpdGlvbiB0aWVkIHRvIGBkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbmAgd2l0aGluIHRoZSBgQUZfUEFDS0VUYCBzb2NrZXQgaW1wbGVtZW50YXRpb24uIFRoZXJlJiMzOTtzIGFsc28gYSByZW1vdmFsIG9mIGEgYENBUF9TWVNfUkFXSU9gIGNoZWNrIGluIGBkZXZfdmFsaWRhdGVfaGVhZGVyYC4gVGhhdCBsYXN0IG9uZSBpcyBpbnRlcmVzdGluZyBmcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUuIFRoZXNlIGNoYW5nZXMgYXJlIGltcGFjdGluZyBob3cgcGFja2V0cyBhcmUgc2VudCwgc3BlY2lmaWNhbGx5IHRocm91Z2ggYHBhY2tldF9zZW5kbXNnX3Nwa3RgLCBgcGFja2V0X3NuZGAsIGFuZCBgdHBhY2tldF9zbmRgLiBUaG9zZSBhcmUgYWxsIGNyaXRpY2FsIGNvcmUgbmV0d29yayBwYXRocyB0aGF0IGFyZSB1c2VkIHRvIHRyYW5zbWl0IHBhY2tldHMuIEdpdmVuIHRoYXQsIEkgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgaGVyZS4gVGhlIGNoYW5nZXMgdG8gaGVhZGVyIGxlbmd0aCBoYW5kbGluZyBpbW1lZGlhdGVseSByYWlzZSBhIGZsYWcuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGVzZSBtb2RpZmljYXRpb25zIGRvbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIG9yLCBtb3JlIGltcG9ydGFudGx5LCBtZW1vcnkgc2FmZXR5IHZ1bG5lcmFiaWxpdGllcy4gSXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuCgpBbHJpZ2h0LCB0aW1lIHRvIGZvcm11bGF0ZSB0aGUgc2V0LXJlc3VsdHMgY2FsbCwgSSBrbm93IGhvdyB0byBoYW5kbGUgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBQ0tFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhY2tldF9zZW5kbXNnX3Nwa3QmIzM0OywKICAgICYjMzQ7dHBhY2tldF9zbmQmIzM0OywKICAgICYjMzQ7cGFja2V0X3NuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBBRl9QQUNLRVQgc29ja2V0IGltcGxlbWVudGF0aW9uIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uIHdpdGggYGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGFuZCByZW1vdmVzIGEgYENBUF9TWVNfUkFXSU9gIGNoZWNrIGluIGBkZXZfdmFsaWRhdGVfaGVhZGVyYC4gVGhpcyBhZmZlY3RzIHBhY2tldCB0cmFuc21pc3Npb24gdmlhIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHBhY2tldF9zbmRgLCBhbmQgYHRwYWNrZXRfc25kYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgcGF0aHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkIGJ5IHRoZSBjaGFuZ2VzIGluIGhlYWRlciBsZW5ndGggaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBQ0tFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhY2tldF9zZW5kbXNnX3Nwa3QmIzM0OywKICAgICYjMzQ7dHBhY2tldF9zbmQmIzM0OywKICAgICYjMzQ7cGFja2V0X3NuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBBRl9QQUNLRVQgc29ja2V0IGltcGxlbWVudGF0aW9uIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uIHdpdGggYGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGFuZCByZW1vdmVzIGEgYENBUF9TWVNfUkFXSU9gIGNoZWNrIGluIGBkZXZfdmFsaWRhdGVfaGVhZGVyYC4gVGhpcyBhZmZlY3RzIHBhY2tldCB0cmFuc21pc3Npb24gdmlhIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHBhY2tldF9zbmRgLCBhbmQgYHRwYWNrZXRfc25kYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgcGF0aHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkIGJ5IHRoZSBjaGFuZ2VzIGluIGhlYWRlciBsZW5ndGggaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDo1MzowNy44NjYxOTM3OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNjg2NzYwMTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBQ0tFVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhY2tldF9zZW5kbXNnX3Nwa3RcIixcbiAgICBcInRwYWNrZXRfc25kXCIsXG4gICAgXCJwYWNrZXRfc25kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgQUZfUEFDS0VUIHNvY2tldCBpbXBsZW1lbnRhdGlvbiB0byBmaXggYSByYWNlIGNvbmRpdGlvbiB3aXRoIGBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbmAgYW5kIHJlbW92ZXMgYSBgQ0FQX1NZU19SQVdJT2AgY2hlY2sgaW4gYGRldl92YWxpZGF0ZV9oZWFkZXJgLiBUaGlzIGFmZmVjdHMgcGFja2V0IHRyYW5zbWlzc2lvbiB2aWEgYHBhY2tldF9zZW5kbXNnX3Nwa3RgLCBgcGFja2V0X3NuZGAsIGFuZCBgdHBhY2tldF9zbmRgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgbmV0d29yayBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgYXJlIGludHJvZHVjZWQgYnkgdGhlIGNoYW5nZXMgaW4gaGVhZGVyIGxlbmd0aCBoYW5kbGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6NTM6MDcuODY2MjAyOTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzU4MzI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDE1ZmYxMGYyMTA5Y2QyNWQ1MTliNmZmYzAyNjEwY2JkOTk3MjUwOWNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgNSAxNDo1MzowNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbmluZGV4IDk5ODFkNjM3ZjhiNTQuLjg4NDBiMTI2OTc5ZmYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5AQCAtMzAwLDkgKzMwMCwxMSBAQCBzdHJ1Y3QgaGhfY2FjaGUge1xcbiAgKiBXZSBjb3VsZCB1c2Ugb3RoZXIgYWxpZ25tZW50IHZhbHVlcywgYnV0IHdlIG11c3QgbWFpbnRhaW4gdGhlXFxuICAqIHJlbGF0aW9uc2hpcCBISCBhbGlnbm1lbnQgXFx1MDAzYz0gTEwgYWxpZ25tZW50LlxcbiAgKi9cXG4tI2RlZmluZSBMTF9SRVNFUlZFRF9TUEFDRShkZXYpIFxcXFxcXG4tXFx0KCgoKGRldiktXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiArIFJFQURfT05DRSgoZGV2KS1cXHUwMDNlbmVlZGVkX2hlYWRyb29tKSkgXFxcXFxcbisjZGVmaW5lIExMX1JFU0VSVkVEX1NQQUNFX0VYKGRldiwgaGxlbikgXFxcXFxcbitcXHQoKCgoaGxlbikgKyBSRUFEX09OQ0UoKGRldiktXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSkpIFxcXFxcXG4gXFx0ICBcXHUwMDI2IH4oSEhfREFUQV9NT0QgLSAxKSkgKyBISF9EQVRBX01PRClcXG4rI2RlZmluZSBMTF9SRVNFUlZFRF9TUEFDRShkZXYpIFxcXFxcXG4rXFx0TExfUkVTRVJWRURfU1BBQ0VfRVgoZGV2LCAoZGV2KS1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKVxcbiAjZGVmaW5lIExMX1JFU0VSVkVEX1NQQUNFX0VYVFJBKGRldixleHRyYSkgXFxcXFxcbiBcXHQoKCgoZGV2KS1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgUkVBRF9PTkNFKChkZXYpLVxcdTAwM2VuZWVkZWRfaGVhZHJvb20pICsgKGV4dHJhKSkgXFxcXFxcbiBcXHQgIFxcdTAwMjYgfihISF9EQVRBX01PRCAtIDEpKSArIEhIX0RBVEFfTU9EKVxcbkBAIC0zNTMxLDExICszNTMzLDYgQEAgc3RhdGljIGlubGluZSBib29sIGRldl92YWxpZGF0ZV9oZWFkZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0aWYgKGxlbiBcXHUwMDNjIGRldi1cXHUwMDNlbWluX2hlYWRlcl9sZW4pXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdGlmIChjYXBhYmxlKENBUF9TWVNfUkFXSU8pKSB7XFxuLVxcdFxcdG1lbXNldChsbF9oZWFkZXIgKyBsZW4sIDAsIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gbGVuKTtcXG4tXFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdH1cXG4tXFxuIFxcdGlmIChkZXYtXFx1MDAzZWhlYWRlcl9vcHMgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VoZWFkZXJfb3BzLVxcdTAwM2V2YWxpZGF0ZSlcXG4gXFx0XFx0cmV0dXJuIGRldi1cXHUwMDNlaGVhZGVyX29wcy1cXHUwMDNldmFsaWRhdGUobGxfaGVhZGVyLCBsZW4pO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmNcXG5pbmRleCBlNzVkMjkzMjQ3NWFjLi5lOWI2ODEwYzg4NWU1IDEwMDY0NFxcbi0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmNcXG4rKysgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jXFxuQEAgLTE5NTMsOCArMTk1Myw5IEBAIHN0YXRpYyBpbnQgcGFja2V0X3NlbmRtc2dfc3BrdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuIFxcdHN0cnVjdCBzb2NrY21fY29va2llIHNvY2tjO1xcbiBcXHRfX2JlMTYgcHJvdG8gPSAwO1xcbi1cXHRpbnQgZXJyO1xcbitcXHRpbnQgaGFyZF9oZWFkZXJfbGVuO1xcbiBcXHRpbnQgZXh0cmFfbGVuID0gMDtcXG4rXFx0aW50IGVycjtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqXFx0R2V0IGFuZCB2ZXJpZnkgdGhlIGFkZHJlc3MuXFxuQEAgLTE5OTcsMTQgKzE5OTgsMTggQEAgc3RhdGljIGludCBwYWNrZXRfc2VuZG1zZ19zcGt0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4gXFx0XFx0ZXh0cmFfbGVuID0gNDsgLyogV2UncmUgZG9pbmcgb3VyIG93biBDUkMgKi9cXG4gXFx0fVxcbiBcXG4rXFx0LyogS2VlcCB0aGUgYWxsb2NhdGlvbi10aW1lIGhlYWRlciBsZW5ndGggYWNyb3NzIHJldHJ5LiAqL1xcbitcXHRpZiAoIXNrYilcXG4rXFx0XFx0aGFyZF9oZWFkZXJfbGVuID0gUkVBRF9PTkNFKGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcXG4rXFxuIFxcdGVyciA9IC1FTVNHU0laRTtcXG4tXFx0aWYgKGxlbiBcXHUwMDNlIGRldi1cXHUwMDNlbXR1ICsgZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gKyBWTEFOX0hMRU4gKyBleHRyYV9sZW4pXFxuK1xcdGlmIChsZW4gXFx1MDAzZSBkZXYtXFx1MDAzZW10dSArIGhhcmRfaGVhZGVyX2xlbiArIFZMQU5fSExFTiArIGV4dHJhX2xlbilcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXG4gXFx0aWYgKCFza2IpIHtcXG4tXFx0XFx0c2l6ZV90IHJlc2VydmVkID0gTExfUkVTRVJWRURfU1BBQ0UoZGV2KTtcXG4rXFx0XFx0c2l6ZV90IHJlc2VydmVkID0gTExfUkVTRVJWRURfU1BBQ0VfRVgoZGV2LCBoYXJkX2hlYWRlcl9sZW4pO1xcbiBcXHRcXHRpbnQgdGxlbiA9IGRldi1cXHUwMDNlbmVlZGVkX3RhaWxyb29tO1xcbi1cXHRcXHR1bnNpZ25lZCBpbnQgaGhsZW4gPSBkZXYtXFx1MDAzZWhlYWRlcl9vcHMgPyBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiA6IDA7XFxuK1xcdFxcdHVuc2lnbmVkIGludCBoaGxlbiA9IGRldi1cXHUwMDNlaGVhZGVyX29wcyA/IGhhcmRfaGVhZGVyX2xlbiA6IDA7XFxuIFxcbiBcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0XFx0c2tiID0gc29ja193bWFsbG9jKHNrLCBsZW4gKyByZXNlcnZlZCArIHRsZW4sIDAsIEdGUF9LRVJORUwpO1xcbkBAIC0yMDM0LDcgKzIwMzksNyBAQCBzdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnX3Nwa3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbiBcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4tXFx0aWYgKGxlbiBcXHUwMDNlIChkZXYtXFx1MDAzZW10dSArIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgZXh0cmFfbGVuKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRpZiAobGVuIFxcdTAwM2UgKGRldi1cXHUwMDNlbXR1ICsgaGFyZF9oZWFkZXJfbGVuICsgZXh0cmFfbGVuKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIXBhY2tldF9leHRyYV92bGFuX2xlbl9hbGxvd2VkKGRldiwgc2tiKSkge1xcbiBcXHRcXHRlcnIgPSAtRU1TR1NJWkU7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG5AQCAtMjU2OSw2ICsyNTc0LDcgQEAgc3RhdGljIGludCBwYWNrZXRfc25kX3ZuZXRfcGFyc2Uoc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgKmxlbixcXG4gc3RhdGljIGludCB0cGFja2V0X2ZpbGxfc2tiKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdHZvaWQgKmZyYW1lLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBpbnQgdHBfbGVuLFxcbiBcXHRcXHRfX2JlMTYgcHJvdG8sIHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBobGVuLCBpbnQgY29weWxlbixcXG4rXFx0XFx0aW50IGhhcmRfaGVhZGVyX2xlbixcXG4gXFx0XFx0Y29uc3Qgc3RydWN0IHNvY2tjbV9jb29raWUgKnNvY2tjKVxcbiB7XFxuIFxcdHVuaW9uIHRwYWNrZXRfdWhkciBwaDtcXG5AQCAtMjYwMCw4ICsyNjA2LDggQEAgc3RhdGljIGludCB0cGFja2V0X2ZpbGxfc2tiKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdH0gZWxzZSBpZiAoY29weWxlbikge1xcbiBcXHRcXHRpbnQgaGRybGVuID0gbWluX3QoaW50LCBjb3B5bGVuLCB0cF9sZW4pO1xcbiBcXG4tXFx0XFx0c2tiX3B1c2goc2tiLCBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XFxuLVxcdFxcdHNrYl9wdXQoc2tiLCBjb3B5bGVuIC0gZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xcbitcXHRcXHRza2JfcHVzaChza2IsIGhhcmRfaGVhZGVyX2xlbik7XFxuK1xcdFxcdHNrYl9wdXQoc2tiLCBjb3B5bGVuIC0gaGFyZF9oZWFkZXJfbGVuKTtcXG4gXFx0XFx0ZXJyID0gc2tiX3N0b3JlX2JpdHMoc2tiLCAwLCBkYXRhLCBoZHJsZW4pO1xcbiBcXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG5AQCAtMjczMiw3ICsyNzM4LDcgQEAgc3RhdGljIGludCB0cGFja2V0X3NuZChzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3QgbXNnaGRyICptc2cpXFxuIFxcdHZvaWQgKmRhdGE7XFxuIFxcdGludCBsZW5fc3VtID0gMDtcXG4gXFx0aW50IHN0YXR1cyA9IFRQX1NUQVRVU19BVkFJTEFCTEU7XFxuLVxcdGludCBobGVuLCB0bGVuLCBjb3B5bGVuID0gMDtcXG4rXFx0aW50IGhhcmRfaGVhZGVyX2xlbiwgaGxlbiwgdGxlbiwgY29weWxlbiA9IDA7XFxuIFxcdGxvbmcgdGltZW87XFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZwby1cXHUwMDNlcGdfdmVjX2xvY2spO1xcbkBAIC0yNzc5LDggKzI3ODUsOSBAQCBzdGF0aWMgaW50IHRwYWNrZXRfc25kKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBtc2doZHIgKm1zZylcXG4gXFx0XFx0XFx0Z290byBvdXRfcHV0O1xcbiBcXHR9XFxuIFxcbitcXHRoYXJkX2hlYWRlcl9sZW4gPSBSRUFEX09OQ0UoZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xcbiBcXHRpZiAocG8tXFx1MDAzZXNrLnNrX3NvY2tldC1cXHUwMDNldHlwZSA9PSBTT0NLX1JBVylcXG4tXFx0XFx0cmVzZXJ2ZSA9IGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xcbitcXHRcXHRyZXNlcnZlID0gaGFyZF9oZWFkZXJfbGVuO1xcbiBcXHRzaXplX21heCA9IHBvLVxcdTAwM2V0eF9yaW5nLmZyYW1lX3NpemVcXG4gXFx0XFx0LSAocG8tXFx1MDAzZXRwX2hkcmxlbiAtIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpKTtcXG4gXFxuQEAgLTI4MTcsNyArMjgyNCw3IEBAIHN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxcbiBcXHRcXHRcXHRnb3RvIHRwYWNrZXRfZXJyb3I7XFxuIFxcbiBcXHRcXHRzdGF0dXMgPSBUUF9TVEFUVVNfU0VORF9SRVFVRVNUO1xcbi1cXHRcXHRobGVuID0gTExfUkVTRVJWRURfU1BBQ0UoZGV2KTtcXG4rXFx0XFx0aGxlbiA9IExMX1JFU0VSVkVEX1NQQUNFX0VYKGRldiwgaGFyZF9oZWFkZXJfbGVuKTtcXG4gXFx0XFx0dGxlbiA9IGRldi1cXHUwMDNlbmVlZGVkX3RhaWxyb29tO1xcbiBcXHRcXHRpZiAodm5ldF9oZHJfc3opIHtcXG4gXFx0XFx0XFx0ZGF0YSArPSB2bmV0X2hkcl9zejtcXG5AQCAtMjgzNSwxMCArMjg0MiwxMCBAQCBzdGF0aWMgaW50IHRwYWNrZXRfc25kKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBtc2doZHIgKm1zZylcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHZuZXRfaGRyLmhkcl9sZW4pO1xcbiBcXHRcXHRcXHRoYXNfdm5ldF9oZHIgPSB0cnVlO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGNvcHlsZW4gPSBtYXhfdChpbnQsIGNvcHlsZW4sIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcXG4rXFx0XFx0Y29weWxlbiA9IG1heF90KGludCwgY29weWxlbiwgaGFyZF9oZWFkZXJfbGVuKTtcXG4gXFx0XFx0c2tiID0gc29ja19hbGxvY19zZW5kX3NrYihcXHUwMDI2cG8tXFx1MDAzZXNrLFxcbiBcXHRcXHRcXHRcXHRobGVuICsgdGxlbiArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpICtcXG4tXFx0XFx0XFx0XFx0KGNvcHlsZW4gLSBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiksXFxuK1xcdFxcdFxcdFxcdChjb3B5bGVuIC0gaGFyZF9oZWFkZXJfbGVuKSxcXG4gXFx0XFx0XFx0XFx0IW5lZWRfd2FpdCwgXFx1MDAyNmVycik7XFxuIFxcbiBcXHRcXHRpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKSB7XFxuQEAgLTI4NDgsNyArMjg1NSw4IEBAIHN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxcbiBcXHRcXHRcXHRnb3RvIG91dF9zdGF0dXM7XFxuIFxcdFxcdH1cXG4gXFx0XFx0dHBfbGVuID0gdHBhY2tldF9maWxsX3NrYihwbywgc2tiLCBwaCwgZGV2LCBkYXRhLCB0cF9sZW4sIHByb3RvLFxcbi1cXHRcXHRcXHRcXHRcXHQgIGFkZHIsIGhsZW4sIGNvcHlsZW4sIFxcdTAwMjZzb2NrYyk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgYWRkciwgaGxlbiwgY29weWxlbiwgaGFyZF9oZWFkZXJfbGVuLFxcbitcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZzb2NrYyk7XFxuIFxcdFxcdGlmIChsaWtlbHkodHBfbGVuIFxcdTAwM2U9IDApIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICB0cF9sZW4gXFx1MDAzZSBkZXYtXFx1MDAzZW10dSArIHJlc2VydmUgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICF2bmV0X2hkcl9zeiBcXHUwMDI2XFx1MDAyNlxcbkBAIC0yOTU2LDcgKzI5NjQsNyBAQCBzdGF0aWMgaW50IHBhY2tldF9zbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbiBcXHRpbnQgb2Zmc2V0ID0gMDtcXG4gXFx0c3RydWN0IHBhY2tldF9zb2NrICpwbyA9IHBrdF9zayhzayk7XFxuIFxcdGludCB2bmV0X2hkcl9zeiA9IFJFQURfT05DRShwby1cXHUwMDNldm5ldF9oZHJfc3opO1xcbi1cXHRpbnQgaGxlbiwgdGxlbiwgbGluZWFyO1xcbitcXHRpbnQgaGFyZF9oZWFkZXJfbGVuLCBobGVuLCB0bGVuLCBsaW5lYXI7XFxuIFxcdGludCBleHRyYV9sZW4gPSAwO1xcbiBcXG4gXFx0LypcXG5AQCAtMjk5Niw4ICszMDA0LDkgQEAgc3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4gXFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9XFxuIFxcbitcXHRoYXJkX2hlYWRlcl9sZW4gPSBSRUFEX09OQ0UoZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xcbiBcXHRpZiAoc29jay1cXHUwMDNldHlwZSA9PSBTT0NLX1JBVylcXG4tXFx0XFx0cmVzZXJ2ZSA9IGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xcbitcXHRcXHRyZXNlcnZlID0gaGFyZF9oZWFkZXJfbGVuO1xcbiBcXHRpZiAodm5ldF9oZHJfc3opIHtcXG4gXFx0XFx0ZXJyID0gcGFja2V0X3NuZF92bmV0X3BhcnNlKG1zZywgXFx1MDAyNmxlbiwgXFx1MDAyNnZuZXRfaGRyLCB2bmV0X2hkcl9zeik7XFxuIFxcdFxcdGlmIChlcnIpXFxuQEAgLTMwMTgsMTAgKzMwMjcsMTAgQEAgc3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXG4gXFx0ZXJyID0gLUVOT0JVRlM7XFxuLVxcdGhsZW4gPSBMTF9SRVNFUlZFRF9TUEFDRShkZXYpO1xcbitcXHRobGVuID0gTExfUkVTRVJWRURfU1BBQ0VfRVgoZGV2LCBoYXJkX2hlYWRlcl9sZW4pO1xcbiBcXHR0bGVuID0gZGV2LVxcdTAwM2VuZWVkZWRfdGFpbHJvb207XFxuIFxcdGxpbmVhciA9IF9fdmlydGlvMTZfdG9fY3B1KHZpb19sZSgpLCB2bmV0X2hkci5oZHJfbGVuKTtcXG4tXFx0bGluZWFyID0gbWF4KGxpbmVhciwgbWluX3QoaW50LCBsZW4sIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSk7XFxuK1xcdGxpbmVhciA9IG1heChsaW5lYXIsIG1pbl90KGludCwgbGVuLCBoYXJkX2hlYWRlcl9sZW4pKTtcXG4gXFx0c2tiID0gcGFja2V0X2FsbG9jX3NrYihzaywgaGxlbiArIHRsZW4sIGhsZW4sIGxlbiwgbGluZWFyLFxcbiBcXHRcXHRcXHQgICAgICAgbXNnLVxcdTAwM2Vtc2dfZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQsIFxcdTAwMjZlcnIpO1xcbiBcXHRpZiAoc2tiID09IE5VTEwpXFxuQEAgLTMwMzcsNyArMzA0Niw3IEBAIHN0YXRpYyBpbnQgcGFja2V0X3NuZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuIFxcdH0gZWxzZSBpZiAocmVzZXJ2ZSkge1xcbiBcXHRcXHRza2JfcmVzZXJ2ZShza2IsIC1yZXNlcnZlKTtcXG4gXFx0XFx0aWYgKGxlbiBcXHUwMDNjIHJlc2VydmUgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICBkZXYtXFx1MDAzZW1pbl9oZWFkZXJfbGVuICE9IGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKVxcbitcXHRcXHQgICAgZGV2LVxcdTAwM2VtaW5faGVhZGVyX2xlbiAhPSBoYXJkX2hlYWRlcl9sZW4pXFxuIFxcdFxcdFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDo1MzowOC4yOTQ2MjY4NDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1MjI1ODMxOTYzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUNLRVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWNrZXRfc2VuZG1zZ19zcGt0XCIsXG4gICAgXCJ0cGFja2V0X3NuZFwiLFxuICAgIFwicGFja2V0X3NuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEFGX1BBQ0tFVCBzb2NrZXQgaW1wbGVtZW50YXRpb24gdG8gZml4IGEgcmFjZSBjb25kaXRpb24gd2l0aCBgZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGFuZCByZW1vdmVzIGEgYENBUF9TWVNfUkFXSU9gIGNoZWNrIGluIGBkZXZfdmFsaWRhdGVfaGVhZGVyYC4gVGhpcyBhZmZlY3RzIHBhY2tldCB0cmFuc21pc3Npb24gdmlhIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHBhY2tldF9zbmRgLCBhbmQgYHRwYWNrZXRfc25kYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgcGF0aHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkIGJ5IHRoZSBjaGFuZ2VzIGluIGhlYWRlciBsZW5ndGggaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE1ZmYxMGYyMTA5Y2QyNWQ1MTliNmZmYzAyNjEwY2JkOTk3MjUwOWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyA1IDE0OjUzOjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbmluZGV4IDk5ODFkNjM3ZjhiNTQuLjg4NDBiMTI2OTc5ZmYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5AQCAtMzAwLDkgKzMwMCwxMSBAQCBzdHJ1Y3QgaGhfY2FjaGUge1xuICAqIFdlIGNvdWxkIHVzZSBvdGhlciBhbGlnbm1lbnQgdmFsdWVzLCBidXQgd2UgbXVzdCBtYWludGFpbiB0aGVcbiAgKiByZWxhdGlvbnNoaXAgSEggYWxpZ25tZW50IFx1MDAzYz0gTEwgYWxpZ25tZW50LlxuICAqL1xuLSNkZWZpbmUgTExfUkVTRVJWRURfU1BBQ0UoZGV2KSBcXFxuLVx0KCgoKGRldiktXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgUkVBRF9PTkNFKChkZXYpLVx1MDAzZW5lZWRlZF9oZWFkcm9vbSkpIFxcXG4rI2RlZmluZSBMTF9SRVNFUlZFRF9TUEFDRV9FWChkZXYsIGhsZW4pIFxcXG4rXHQoKCgoaGxlbikgKyBSRUFEX09OQ0UoKGRldiktXHUwMDNlbmVlZGVkX2hlYWRyb29tKSkgXFxcbiBcdCAgXHUwMDI2IH4oSEhfREFUQV9NT0QgLSAxKSkgKyBISF9EQVRBX01PRClcbisjZGVmaW5lIExMX1JFU0VSVkVEX1NQQUNFKGRldikgXFxcbitcdExMX1JFU0VSVkVEX1NQQUNFX0VYKGRldiwgKGRldiktXHUwMDNlaGFyZF9oZWFkZXJfbGVuKVxuICNkZWZpbmUgTExfUkVTRVJWRURfU1BBQ0VfRVhUUkEoZGV2LGV4dHJhKSBcXFxuIFx0KCgoKGRldiktXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgUkVBRF9PTkNFKChkZXYpLVx1MDAzZW5lZWRlZF9oZWFkcm9vbSkgKyAoZXh0cmEpKSBcXFxuIFx0ICBcdTAwMjYgfihISF9EQVRBX01PRCAtIDEpKSArIEhIX0RBVEFfTU9EKVxuQEAgLTM1MzEsMTEgKzM1MzMsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZGV2X3ZhbGlkYXRlX2hlYWRlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKGxlbiBcdTAwM2MgZGV2LVx1MDAzZW1pbl9oZWFkZXJfbGVuKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRpZiAoY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkge1xuLVx0XHRtZW1zZXQobGxfaGVhZGVyICsgbGVuLCAwLCBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gbGVuKTtcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHR9XG4tXG4gXHRpZiAoZGV2LVx1MDAzZWhlYWRlcl9vcHMgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VoZWFkZXJfb3BzLVx1MDAzZXZhbGlkYXRlKVxuIFx0XHRyZXR1cm4gZGV2LVx1MDAzZWhlYWRlcl9vcHMtXHUwMDNldmFsaWRhdGUobGxfaGVhZGVyLCBsZW4pO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jXG5pbmRleCBlNzVkMjkzMjQ3NWFjLi5lOWI2ODEwYzg4NWU1IDEwMDY0NFxuLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuQEAgLTE5NTMsOCArMTk1Myw5IEBAIHN0YXRpYyBpbnQgcGFja2V0X3NlbmRtc2dfc3BrdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIFx0c3RydWN0IHNvY2tjbV9jb29raWUgc29ja2M7XG4gXHRfX2JlMTYgcHJvdG8gPSAwO1xuLVx0aW50IGVycjtcbitcdGludCBoYXJkX2hlYWRlcl9sZW47XG4gXHRpbnQgZXh0cmFfbGVuID0gMDtcbitcdGludCBlcnI7XG4gXG4gXHQvKlxuIFx0ICpcdEdldCBhbmQgdmVyaWZ5IHRoZSBhZGRyZXNzLlxuQEAgLTE5OTcsMTQgKzE5OTgsMTggQEAgc3RhdGljIGludCBwYWNrZXRfc2VuZG1zZ19zcGt0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbiBcdFx0ZXh0cmFfbGVuID0gNDsgLyogV2UncmUgZG9pbmcgb3VyIG93biBDUkMgKi9cbiBcdH1cbiBcbitcdC8qIEtlZXAgdGhlIGFsbG9jYXRpb24tdGltZSBoZWFkZXIgbGVuZ3RoIGFjcm9zcyByZXRyeS4gKi9cbitcdGlmICghc2tiKVxuK1x0XHRoYXJkX2hlYWRlcl9sZW4gPSBSRUFEX09OQ0UoZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4rXG4gXHRlcnIgPSAtRU1TR1NJWkU7XG4tXHRpZiAobGVuIFx1MDAzZSBkZXYtXHUwMDNlbXR1ICsgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiArIFZMQU5fSExFTiArIGV4dHJhX2xlbilcbitcdGlmIChsZW4gXHUwMDNlIGRldi1cdTAwM2VtdHUgKyBoYXJkX2hlYWRlcl9sZW4gKyBWTEFOX0hMRU4gKyBleHRyYV9sZW4pXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdGlmICghc2tiKSB7XG4tXHRcdHNpemVfdCByZXNlcnZlZCA9IExMX1JFU0VSVkVEX1NQQUNFKGRldik7XG4rXHRcdHNpemVfdCByZXNlcnZlZCA9IExMX1JFU0VSVkVEX1NQQUNFX0VYKGRldiwgaGFyZF9oZWFkZXJfbGVuKTtcbiBcdFx0aW50IHRsZW4gPSBkZXYtXHUwMDNlbmVlZGVkX3RhaWxyb29tO1xuLVx0XHR1bnNpZ25lZCBpbnQgaGhsZW4gPSBkZXYtXHUwMDNlaGVhZGVyX29wcyA/IGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gOiAwO1xuK1x0XHR1bnNpZ25lZCBpbnQgaGhsZW4gPSBkZXYtXHUwMDNlaGVhZGVyX29wcyA/IGhhcmRfaGVhZGVyX2xlbiA6IDA7XG4gXG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRza2IgPSBzb2NrX3dtYWxsb2Moc2ssIGxlbiArIHJlc2VydmVkICsgdGxlbiwgMCwgR0ZQX0tFUk5FTCk7XG5AQCAtMjAzNCw3ICsyMDM5LDcgQEAgc3RhdGljIGludCBwYWNrZXRfc2VuZG1zZ19zcGt0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbiBcdFx0ZXJyID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuLVx0aWYgKGxlbiBcdTAwM2UgKGRldi1cdTAwM2VtdHUgKyBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgZXh0cmFfbGVuKSBcdTAwMjZcdTAwMjZcbitcdGlmIChsZW4gXHUwMDNlIChkZXYtXHUwMDNlbXR1ICsgaGFyZF9oZWFkZXJfbGVuICsgZXh0cmFfbGVuKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhcGFja2V0X2V4dHJhX3ZsYW5fbGVuX2FsbG93ZWQoZGV2LCBza2IpKSB7XG4gXHRcdGVyciA9IC1FTVNHU0laRTtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuQEAgLTI1NjksNiArMjU3NCw3IEBAIHN0YXRpYyBpbnQgcGFja2V0X3NuZF92bmV0X3BhcnNlKHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90ICpsZW4sXG4gc3RhdGljIGludCB0cGFja2V0X2ZpbGxfc2tiKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHZvaWQgKmZyYW1lLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBpbnQgdHBfbGVuLFxuIFx0XHRfX2JlMTYgcHJvdG8sIHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBobGVuLCBpbnQgY29weWxlbixcbitcdFx0aW50IGhhcmRfaGVhZGVyX2xlbixcbiBcdFx0Y29uc3Qgc3RydWN0IHNvY2tjbV9jb29raWUgKnNvY2tjKVxuIHtcbiBcdHVuaW9uIHRwYWNrZXRfdWhkciBwaDtcbkBAIC0yNjAwLDggKzI2MDYsOCBAQCBzdGF0aWMgaW50IHRwYWNrZXRfZmlsbF9za2Ioc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdH0gZWxzZSBpZiAoY29weWxlbikge1xuIFx0XHRpbnQgaGRybGVuID0gbWluX3QoaW50LCBjb3B5bGVuLCB0cF9sZW4pO1xuIFxuLVx0XHRza2JfcHVzaChza2IsIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuLVx0XHRza2JfcHV0KHNrYiwgY29weWxlbiAtIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuK1x0XHRza2JfcHVzaChza2IsIGhhcmRfaGVhZGVyX2xlbik7XG4rXHRcdHNrYl9wdXQoc2tiLCBjb3B5bGVuIC0gaGFyZF9oZWFkZXJfbGVuKTtcbiBcdFx0ZXJyID0gc2tiX3N0b3JlX2JpdHMoc2tiLCAwLCBkYXRhLCBoZHJsZW4pO1xuIFx0XHRpZiAodW5saWtlbHkoZXJyKSlcbiBcdFx0XHRyZXR1cm4gZXJyO1xuQEAgLTI3MzIsNyArMjczOCw3IEBAIHN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxuIFx0dm9pZCAqZGF0YTtcbiBcdGludCBsZW5fc3VtID0gMDtcbiBcdGludCBzdGF0dXMgPSBUUF9TVEFUVVNfQVZBSUxBQkxFO1xuLVx0aW50IGhsZW4sIHRsZW4sIGNvcHlsZW4gPSAwO1xuK1x0aW50IGhhcmRfaGVhZGVyX2xlbiwgaGxlbiwgdGxlbiwgY29weWxlbiA9IDA7XG4gXHRsb25nIHRpbWVvO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZwby1cdTAwM2VwZ192ZWNfbG9jayk7XG5AQCAtMjc3OSw4ICsyNzg1LDkgQEAgc3RhdGljIGludCB0cGFja2V0X3NuZChzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3QgbXNnaGRyICptc2cpXG4gXHRcdFx0Z290byBvdXRfcHV0O1xuIFx0fVxuIFxuK1x0aGFyZF9oZWFkZXJfbGVuID0gUkVBRF9PTkNFKGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuIFx0aWYgKHBvLVx1MDAzZXNrLnNrX3NvY2tldC1cdTAwM2V0eXBlID09IFNPQ0tfUkFXKVxuLVx0XHRyZXNlcnZlID0gZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbitcdFx0cmVzZXJ2ZSA9IGhhcmRfaGVhZGVyX2xlbjtcbiBcdHNpemVfbWF4ID0gcG8tXHUwMDNldHhfcmluZy5mcmFtZV9zaXplXG4gXHRcdC0gKHBvLVx1MDAzZXRwX2hkcmxlbiAtIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpKTtcbiBcbkBAIC0yODE3LDcgKzI4MjQsNyBAQCBzdGF0aWMgaW50IHRwYWNrZXRfc25kKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBtc2doZHIgKm1zZylcbiBcdFx0XHRnb3RvIHRwYWNrZXRfZXJyb3I7XG4gXG4gXHRcdHN0YXR1cyA9IFRQX1NUQVRVU19TRU5EX1JFUVVFU1Q7XG4tXHRcdGhsZW4gPSBMTF9SRVNFUlZFRF9TUEFDRShkZXYpO1xuK1x0XHRobGVuID0gTExfUkVTRVJWRURfU1BBQ0VfRVgoZGV2LCBoYXJkX2hlYWRlcl9sZW4pO1xuIFx0XHR0bGVuID0gZGV2LVx1MDAzZW5lZWRlZF90YWlscm9vbTtcbiBcdFx0aWYgKHZuZXRfaGRyX3N6KSB7XG4gXHRcdFx0ZGF0YSArPSB2bmV0X2hkcl9zejtcbkBAIC0yODM1LDEwICsyODQyLDEwIEBAIHN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxuIFx0XHRcdFx0XHRcdCAgICB2bmV0X2hkci5oZHJfbGVuKTtcbiBcdFx0XHRoYXNfdm5ldF9oZHIgPSB0cnVlO1xuIFx0XHR9XG4tXHRcdGNvcHlsZW4gPSBtYXhfdChpbnQsIGNvcHlsZW4sIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuK1x0XHRjb3B5bGVuID0gbWF4X3QoaW50LCBjb3B5bGVuLCBoYXJkX2hlYWRlcl9sZW4pO1xuIFx0XHRza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKFx1MDAyNnBvLVx1MDAzZXNrLFxuIFx0XHRcdFx0aGxlbiArIHRsZW4gKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2xsKSArXG4tXHRcdFx0XHQoY29weWxlbiAtIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pLFxuK1x0XHRcdFx0KGNvcHlsZW4gLSBoYXJkX2hlYWRlcl9sZW4pLFxuIFx0XHRcdFx0IW5lZWRfd2FpdCwgXHUwMDI2ZXJyKTtcbiBcbiBcdFx0aWYgKHVubGlrZWx5KHNrYiA9PSBOVUxMKSkge1xuQEAgLTI4NDgsNyArMjg1NSw4IEBAIHN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxuIFx0XHRcdGdvdG8gb3V0X3N0YXR1cztcbiBcdFx0fVxuIFx0XHR0cF9sZW4gPSB0cGFja2V0X2ZpbGxfc2tiKHBvLCBza2IsIHBoLCBkZXYsIGRhdGEsIHRwX2xlbiwgcHJvdG8sXG4tXHRcdFx0XHRcdCAgYWRkciwgaGxlbiwgY29weWxlbiwgXHUwMDI2c29ja2MpO1xuK1x0XHRcdFx0XHQgIGFkZHIsIGhsZW4sIGNvcHlsZW4sIGhhcmRfaGVhZGVyX2xlbixcbitcdFx0XHRcdFx0ICBcdTAwMjZzb2NrYyk7XG4gXHRcdGlmIChsaWtlbHkodHBfbGVuIFx1MDAzZT0gMCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICB0cF9sZW4gXHUwMDNlIGRldi1cdTAwM2VtdHUgKyByZXNlcnZlIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIXZuZXRfaGRyX3N6IFx1MDAyNlx1MDAyNlxuQEAgLTI5NTYsNyArMjk2NCw3IEBAIHN0YXRpYyBpbnQgcGFja2V0X3NuZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4gXHRpbnQgb2Zmc2V0ID0gMDtcbiBcdHN0cnVjdCBwYWNrZXRfc29jayAqcG8gPSBwa3Rfc2soc2spO1xuIFx0aW50IHZuZXRfaGRyX3N6ID0gUkVBRF9PTkNFKHBvLVx1MDAzZXZuZXRfaGRyX3N6KTtcbi1cdGludCBobGVuLCB0bGVuLCBsaW5lYXI7XG4rXHRpbnQgaGFyZF9oZWFkZXJfbGVuLCBobGVuLCB0bGVuLCBsaW5lYXI7XG4gXHRpbnQgZXh0cmFfbGVuID0gMDtcbiBcbiBcdC8qXG5AQCAtMjk5Niw4ICszMDA0LDkgQEAgc3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiBcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4rXHRoYXJkX2hlYWRlcl9sZW4gPSBSRUFEX09OQ0UoZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4gXHRpZiAoc29jay1cdTAwM2V0eXBlID09IFNPQ0tfUkFXKVxuLVx0XHRyZXNlcnZlID0gZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbitcdFx0cmVzZXJ2ZSA9IGhhcmRfaGVhZGVyX2xlbjtcbiBcdGlmICh2bmV0X2hkcl9zeikge1xuIFx0XHRlcnIgPSBwYWNrZXRfc25kX3ZuZXRfcGFyc2UobXNnLCBcdTAwMjZsZW4sIFx1MDAyNnZuZXRfaGRyLCB2bmV0X2hkcl9zeik7XG4gXHRcdGlmIChlcnIpXG5AQCAtMzAxOCwxMCArMzAyNywxMCBAQCBzdGF0aWMgaW50IHBhY2tldF9zbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4gXHRlcnIgPSAtRU5PQlVGUztcbi1cdGhsZW4gPSBMTF9SRVNFUlZFRF9TUEFDRShkZXYpO1xuK1x0aGxlbiA9IExMX1JFU0VSVkVEX1NQQUNFX0VYKGRldiwgaGFyZF9oZWFkZXJfbGVuKTtcbiBcdHRsZW4gPSBkZXYtXHUwMDNlbmVlZGVkX3RhaWxyb29tO1xuIFx0bGluZWFyID0gX192aXJ0aW8xNl90b19jcHUodmlvX2xlKCksIHZuZXRfaGRyLmhkcl9sZW4pO1xuLVx0bGluZWFyID0gbWF4KGxpbmVhciwgbWluX3QoaW50LCBsZW4sIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pKTtcbitcdGxpbmVhciA9IG1heChsaW5lYXIsIG1pbl90KGludCwgbGVuLCBoYXJkX2hlYWRlcl9sZW4pKTtcbiBcdHNrYiA9IHBhY2tldF9hbGxvY19za2Ioc2ssIGhsZW4gKyB0bGVuLCBobGVuLCBsZW4sIGxpbmVhcixcbiBcdFx0XHQgICAgICAgbXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlULCBcdTAwMjZlcnIpO1xuIFx0aWYgKHNrYiA9PSBOVUxMKVxuQEAgLTMwMzcsNyArMzA0Niw3IEBAIHN0YXRpYyBpbnQgcGFja2V0X3NuZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4gXHR9IGVsc2UgaWYgKHJlc2VydmUpIHtcbiBcdFx0c2tiX3Jlc2VydmUoc2tiLCAtcmVzZXJ2ZSk7XG4gXHRcdGlmIChsZW4gXHUwMDNjIHJlc2VydmUgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgZGV2LVx1MDAzZW1pbl9oZWFkZXJfbGVuICE9IGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pXG4rXHRcdCAgICBkZXYtXHUwMDNlbWluX2hlYWRlcl9sZW4gIT0gaGFyZF9oZWFkZXJfbGVuKVxuIFx0XHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6NTM6MDguMjk0NjI4NTk2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODEzMDk2MDA2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JrIFBhY2tldCBIZWFkZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBhbmQgaXQncyB0b3VjaGluZyBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgaG93IGBoYXJkX2hlYWRlcl9sZW5gIGlzIGhhbmRsZWQgaW4gYHBhY2tldF9zZW5kbXNnX3Nwa3RgLCBgdHBhY2tldF9zbmRgLCBhbmQgYHBhY2tldF9zbmRgLiBTbWFydCBtb3ZlLCB1c2luZyBgUkVBRF9PTkNFKGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pYCBhbmQgc3RvcmluZyBpdCBsb2NhbGx5IGFzIGBoYXJkX2hlYWRlcl9sZW5gLiBUaGlzIGF2b2lkcyB0aGUgY2xhc3NpYyBkYXRhIHJhY2UgYW5kIFRPQ1RPVSBpc3N1ZXMgaWYgYGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGdldHMgdXBkYXRlZCBjb25jdXJyZW50bHksIHdoaWNoIGlzIGEgY29tbW9uIHZ1bG5lcmFiaWxpdHkuIEdvb2QgcHJldmVudGF0aXZlIG1lYXN1cmUuXG5cbkFoLCB0aGVyZSdzIGFsc28gYSByZW1vdmFsIG9mIGEgY2h1bmsgb2YgY29kZSBpbiBgZGV2X3ZhbGlkYXRlX2hlYWRlcmAuIEhhbmcgb24sIGxldCdzIHNlZS4uLiBpdCdzIHRha2luZyBvdXQgdGhpcyBjb25kaXRpb25hbCBibG9jazpcblxuYGBgY1xuLVx0aWYgKGNhcGFibGUoQ0FQX1NZU19SQVdJTykpIHtcbi1cdFx0bWVtc2V0KGxsX2hlYWRlciArIGxlbiwgMCwgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAtIGxlbik7XG4tXHRcdHJldHVybiB0cnVlO1xuLVx0fVxuYGBgXG5cbldhaXQsIGl0J3MgcmVtb3ZpbmcgdGhlIGBDQVBfU1lTX1JBV0lPYCBjaGVjayBhbmQgdGhlIHN1YnNlcXVlbnQgYG1lbXNldGAuIFRoYXQncyBpbnRlcmVzdGluZy4gSXQgc2VlbXMgbGlrZSB0aGUgcGF0Y2ggaXNuJ3QgemVyb2luZyBvdXQgdGhlIHJlbWFpbmluZyBwYXJ0IG9mIHRoZSBoZWFkZXIgYW55bW9yZSBpZiBgbGVuYCBpcyBsZXNzIHRoYW4gYGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gLCBidXQgb25seSBmb3IgcmF3IEkvTy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgZGV2X3ZhbGlkYXRlX2hlYWRlcmAgYWN0dWFsbHkgZG9lcyBpbiB0aGlzIGNvbnRleHQsIHNvIEkgY2FuIGdyYXNwIHRoZSBmdWxsIGltcGxpY2F0aW9ucy4gSSBzaG91bGQgZGlnIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQgaXQncyByZXNwb25zaWJsZSBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NTUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDo1MzoxNi40MjU1OTA5NTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5MTgyNDAwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZfdmFsaWRhdGVfaGVhZGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MzUxOD1zdGF0aWMgaW5saW5lIF9fYmUxNiBkZXZfcGFyc2VfaGVhZGVyX3Byb3RvY29sKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTM1MjctLyogbGxfaGVhZGVyIG11c3QgaGF2ZSBhdCBsZWFzdCBoYXJkX2hlYWRlcl9sZW4gYWxsb2NhdGVkICovXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDozNTI4OnN0YXRpYyBpbmxpbmUgYm9vbCBkZXZfdmFsaWRhdGVfaGVhZGVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zNTI5LVxcdFxcdFxcdFxcdCAgICAgICBjaGFyICpsbF9oZWFkZXIsIGludCBsZW4pXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTE5NDc9c3RhdGljIGludCBwYWNrZXRfc2VuZG1zZ19zcGt0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjAzNy1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIwMzg6XFx0aWYgKCFkZXZfdmFsaWRhdGVfaGVhZGVyKGRldiwgc2tiLVxcdTAwM2VkYXRhLCBsZW4pIHx8ICFza2ItXFx1MDAzZWxlbikge1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjAzOS1cXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNTc0PXN0YXRpYyBpbnQgdHBhY2tldF9maWxsX3NrYihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNjEzLVxcdFxcdFxcdHJldHVybiBlcnI7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNjE0OlxcdFxcdGlmICghZGV2X3ZhbGlkYXRlX2hlYWRlcihkZXYsIHNrYi1cXHUwMDNlZGF0YSwgaGRybGVuKSlcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI2MTUtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI5NTM9c3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzA1OC1cXHRpZiAoKHNvY2stXFx1MDAzZXR5cGUgPT0gU09DS19SQVcgXFx1MDAyNlxcdTAwMjZcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMwNTk6XFx0ICAgICAhZGV2X3ZhbGlkYXRlX2hlYWRlcihkZXYsIHNrYi1cXHUwMDNlZGF0YSwgbGVuKSkgfHwgIXNrYi1cXHUwMDNlbGVuKSB7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMDYwLVxcdFxcdGVyciA9IC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjUzOjE4LjQxNzQxOTcyNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3Mzg3NTg2MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogQUZfUEFDS0VUIFNvY2tldCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhZl9wYWNrZXQuY2AsIHRoZSBoZWFydCBvZiBgQUZfUEFDS0VUYCBzb2NrZXQgaW1wbGVtZW50YXRpb24uIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyDigJMgY29yZSBrZXJuZWwgbG9naWMsIHBvdGVudGlhbGx5IHJlYWNoYWJsZSwgZGVmaW5pdGVseSBmdW5jdGlvbmFsLiBJdCdzIGFkZHJlc3NpbmcgYSByYWNlIGNvbmRpdGlvbiBpbnZvbHZpbmcgYGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gLCB3aGljaCBzdWdnZXN0cyBhIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZSwgYW5kIGl0J3MgYWxzbyByZW1vdmluZyBhIGBDQVBfU1lTX1JBV0lPYCBjYXBhYmlsaXR5IGNoZWNrIHdpdGhpbiBgZGV2X3ZhbGlkYXRlX2hlYWRlcmAuIEhhbmcgb24sIHRoYXQgbGFzdCBwYXJ0Li4uIGxldCBtZSB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGUgY29kZSBzbmlwcGV0OlxuXG5gYGBjXG4tXHRpZiAoY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkge1xuLVx0XHRtZW1zZXQobGxfaGVhZGVyICsgbGVuLCAwLCBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gbGVuKTtcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHR9XG5gYGBcblxuUmlnaHQsIEkgc2VlLiBQcmV2aW91c2x5LCBpZiB0aGUgcHJvY2VzcyBoYWQgYENBUF9TWVNfUkFXSU9gLCBpdCB3b3VsZCBieXBhc3MgdGhlIGhlYWRlciB2YWxpZGF0aW9uIGVudGlyZWx5LCB6ZXJvaW5nIG91dCB0aGUgcmVtYWluaW5nIGhlYWRlciBieXRlcyBhbmQgcmV0dXJuaW5nIGVhcmx5LiBOb3csIHRoYXQgY2hlY2sgaXMgZ29uZS4gVGhpcyBpbXBsaWVzIGEgY2hhbmdlIGluIGJlaGF2aW9yOiBgZGV2LVx1MDAzZWhlYWRlcl9vcHMtXHUwMDNldmFsaWRhdGVgIHdpbGwgKmFsd2F5cyogYmUgY2FsbGVkLCByZWdhcmRsZXNzIG9mIHRoZSBgQ0FQX1NZU19SQVdJT2AgY2FwYWJpbGl0eS4gVGhhdCdzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGBhZl9wYWNrZXQuY2AgYW5kIHNwZWNpZmljYWxseSBgZGV2X3ZhbGlkYXRlX2hlYWRlcmAuIEdpdmVuIHRoaXMgbW9kaWZpY2F0aW9uLCBhbmQgY29uc2lkZXJpbmcgdGhlIHJhY2UgY29uZGl0aW9uIGZpeCwgdGhpcyBpcyAqYWJzb2x1dGVseSogd29ydGggZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBmb3IgZnV6emluZyB3aWxsIGJlIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBpbnRlcmFjdCB3aXRoIHRoaXMgY29kZSBhbmQgbm93IHRha2UgYSBkaWZmZXJlbnQgY29kZSBwYXRoOiBzcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHRwYWNrZXRfc25kYCwgYW5kIGBwYWNrZXRfc25kYC4gV2hpbGUgYGRldl92YWxpZGF0ZV9oZWFkZXJgIGlzIGEgc3RhdGljIGlubGluZSwgc28gbWlnaHQgbm90IGJlIGFzIGRpcmVjdGx5IHVzYWJsZSBmb3IgZnV6emluZywgSSdsbCBrZWVwIGl0IGluIG1pbmQgYXMgYSBwb2ludCBvZiByZWZlcmVuY2UuIEkgd2lsbCBzdGFydCBieSBkaWdnaW5nIGRlZXBlciBpbnRvIHRob3NlIG90aGVyIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAwMywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDo1MzozNS44MDUwMDc2ODFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1MjUzOTY5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWNrZXRfc2VuZG1zZ19zcGt0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTkyMz1zdGF0aWMgdm9pZCBwYWNrZXRfcGFyc2VfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xOTQ2LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTk0NzpzdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnX3Nwa3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTk0OC1cXHRcXHRcXHQgICAgICAgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9NDY1OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzX3Nwa3QgPSB7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ2NzEtXFx0LnNodXRkb3duID1cXHRzb2NrX25vX3NodXRkb3duLFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6NDY3MjpcXHQuc2VuZG1zZyA9XFx0cGFja2V0X3NlbmRtc2dfc3BrdCxcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ2NzMtXFx0LnJlY3Ztc2cgPVxcdHBhY2tldF9yZWN2bXNnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDo1MzozNy42NTc1NTc1MThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTczNDM3NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQYWNrZXQgU29ja2V0IFNlbmQgSGFuZGxlcnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgcGFja2V0cyBhcmUgc2VudCBvdXQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgQUZfUEFDS0VUIGZhbWlseSwgc2luY2UgdGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEkgc2VlIHRocmVlIHByaW1hcnkgaGFuZGxlcnMgaGVyZTogYHBhY2tldF9zZW5kbXNnX3Nwa3RgLCBgcGFja2V0X3NuZGAsIGFuZCBgdHBhY2tldF9zbmRgLlxuXG5gcGFja2V0X3NlbmRtc2dfc3BrdGAgc2VlbXMgdG8gYmUgdGhlIG9sZCBndWFyZCwgdGllZCB0byB0aGUgb2Jzb2xldGUgYFNPQ0tfUEFDS0VUYCB0eXBlLiBJJ2xsIHByb2JhYmx5IHNraW0gb3ZlciB0aGF0IHVubGVzcyBJIG5lZWQgdG8gc3VwcG9ydCBzb21lIHNlcmlvdXNseSBsZWdhY3kgc3R1ZmYuIFRoZSByZWFsIHdvcmsgaXMgbGlrZWx5IGluIHRoZSBtb3JlIG1vZGVybiBpbXBsZW1lbnRhdGlvbnMuXG5cbk5vdywgYHBhY2tldF9zbmRgIGhhbmRsZXMgYFNPQ0tfUkFXYCBhbmQgYFNPQ0tfREdSQU1gIHNvY2tldHMgd2l0aGluIGBBRl9QQUNLRVRgLiBTbywgeW91ciBiYXNpYywgcmF3IHBhY2tldCBtYW5pcHVsYXRpb24gYW5kIGRhdGFncmFtIHNlbmRpbmcuIFRoYXQncyBnb29kIHRvIGtub3csIGFuZCB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmdW5kYW1lbnRhbCBiZWhhdmlvci5cblxuQnV0IEknbSByZWFsbHkgY3VyaW91cyBhYm91dCBgdHBhY2tldF9zbmRgLiBUaGF0J3Mgd2hlcmUgdGhlIG1lbW9yeS1tYXBwZWQgcmluZyBidWZmZXIgVFhfUklORyBjb21lcyBpbnRvIHBsYXkuIFRoYXTigJlzIHdoZXJlIHRoZSBoaWdoLXBlcmZvcm1hbmNlIHN0dWZmIGlzIGhhcHBlbmluZyB3aXRoIGBBRl9QQUNLRVRgLiBEZWZpbml0ZWx5IHdvcnRoIGRpdmluZyBpbnRvIHRvIHNlZSBob3cgdGhhdCdzIGltcGxlbWVudGVkIGFuZCBob3cgaXQgb3B0aW1pemVzIHBhY2tldCB0cmFuc21pc3Npb24uIExldCdzIHNlZSBob3cgdGhhdCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAwOCwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDo1Mzo0My42MzA5OTc3OThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4NDg5NjU3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWNrZXRfc25kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjUxNT1zdGF0aWMgdm9pZCB0cGFja2V0X2Rlc3RydWN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTM0LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjUzNTpzdGF0aWMgaW50IF9fcGFja2V0X3NuZF92bmV0X3BhcnNlKHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqdm5ldF9oZHIsIHNpemVfdCBsZW4pXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTM2LXtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU1MC1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI1NTE6c3RhdGljIGludCBwYWNrZXRfc25kX3ZuZXRfcGFyc2Uoc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgKmxlbixcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1NTItXFx0XFx0XFx0XFx0IHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqdm5ldF9oZHIsIGludCB2bmV0X2hkcl9zeilcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU2Mi1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI1NjM6XFx0cmV0ID0gX19wYWNrZXRfc25kX3ZuZXRfcGFyc2Uodm5ldF9oZHIsICpsZW4pO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU2NC1cXHRpZiAocmV0KVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNjU1PXN0YXRpYyBpbnQgdHBhY2tldF9wYXJzZV9oZWFkZXIoc3RydWN0IHBhY2tldF9zb2NrICpwbywgdm9pZCAqZnJhbWUsXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI3MjItXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNzIzOnN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjcyNC17XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4MzYtXFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZ2bmV0X2hkciwgZGF0YSAtIHZuZXRfaGRyX3N6LCBzaXplb2Yodm5ldF9oZHIpKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI4Mzc6XFx0XFx0XFx0aWYgKF9fcGFja2V0X3NuZF92bmV0X3BhcnNlKFxcdTAwMjZ2bmV0X2hkciwgdHBfbGVuKSkge1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjgzOC1cXHRcXHRcXHRcXHR0cF9sZW4gPSAtRUlOVkFMO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yOTI3PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcGFja2V0X2FsbG9jX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHNpemVfdCBwcmVwYWQsXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI5NTItXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyOTUzOnN0YXRpYyBpbnQgcGFja2V0X3NuZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yOTU0LXtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzAxMC1cXHRpZiAodm5ldF9oZHJfc3opIHtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMwMTE6XFx0XFx0ZXJyID0gcGFja2V0X3NuZF92bmV0X3BhcnNlKG1zZywgXFx1MDAyNmxlbiwgXFx1MDAyNnZuZXRfaGRyLCB2bmV0X2hkcl9zeik7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMDEyLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTMxMTI9c3RhdGljIGludCBwYWNrZXRfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMTctXFx0LyogUmVhZGluZyB0eF9yaW5nLnBnX3ZlYyB3aXRob3V0IGhvbGRpbmcgcGdfdmVjX2xvY2sgaXMgcmFjeS5cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMxMTg6XFx0ICogdHBhY2tldF9zbmQoKSB3aWxsIHJlZG8gdGhlIGNoZWNrIHNhZmVseS5cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMTktXFx0ICovXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTIwLVxcdGlmIChkYXRhX3JhY2UocG8tXFx1MDAzZXR4X3JpbmcucGdfdmVjKSlcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMxMjE6XFx0XFx0cmV0dXJuIHRwYWNrZXRfc25kKHBvLCBtc2cpO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEyMi1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMxMjM6XFx0cmV0dXJuIHBhY2tldF9zbmQoc29jaywgbXNnLCBsZW4pO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEyNC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjUzOjQ1LjMxNTkwMjgyM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczNDU4NjY5MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipGb2N1c2luZyBvbiBQYWNrZXQgVHJhbnNtaXNzaW9uIFN5bWJvbHMgYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgc3ltYm9scyByZWxhdGVkIHRvIHBhY2tldCB0cmFuc21pc3Npb24uIFRoZSBrZXkgb25lcyB0byBsb29rIGF0IGFyZSBjbGVhcmx5IGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHRwYWNrZXRfc25kYCwgYW5kIGBwYWNrZXRfc25kYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMsIG9yIGxpa2VseSB0aGUgY29yZSBlbGVtZW50cyBvZiB0aGUgZnVuY3Rpb25zLCB0aGF0IGFyZSB0aGUgbW9zdCBpbXBvcnRhbnQgZm9yIG15IHJlc2VhcmNoLlxuXG5Ob3csIHRvIHVuZGVyc3RhbmQgdGhlaXIgY29udGV4dCwgSSBuZWVkIHRvIGtub3cgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJ20gcHJldHR5IHN1cmUgaXQncyBgUEFDS0VUYCwgYnV0IGxldCdzIGNvbmZpcm0gdGhhdC4gVGhhdCBsaWtlbHkgbWFwcyB0byBgQ09ORklHX1BBQ0tFVGAgc29tZXdoZXJlLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGtlcm5lbCdzIHNvdXJjZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUsIHByb2JhYmx5IHdpdGhpbiB0aGUgYG5ldC9wYWNrZXQvYCBkaXJlY3RvcnksIG9yIG1heWJlIHNvbWV0aGluZyBzaW1pbGFyLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgcGFja2V0LXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYXJlIGRlZmluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNjgsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDo1Mzo1Mi42NjE3NzI3NDFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTYwMjI4NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBBQ0tFVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcGFja2V0L0tjb25maWctNS1cXG5uZXQvcGFja2V0L0tjb25maWc6Njpjb25maWcgUEFDS0VUXFxubmV0L3BhY2tldC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlBhY2tldCBzb2NrZXRcXFwiXFxuLS1cXG5uZXQvcGFja2V0L0tjb25maWctMTgtXFxubmV0L3BhY2tldC9LY29uZmlnOjE5OmNvbmZpZyBQQUNLRVRfRElBR1xcbm5ldC9wYWNrZXQvS2NvbmZpZy0yMC1cXHR0cmlzdGF0ZSBcXFwiUGFja2V0OiBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDo1Mzo1NC4zMTc4MDMyNjlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE1NzYyMTA4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYWNrZXQgU29ja2V0IFBhdGNoKipcblxuT2theSwgc28gdGhlIGNvbmZpZyBpbiBxdWVzdGlvbiBoZXJlIGlzIGNsZWFybHkgYFBBQ0tFVGAuIE5vIG90aGVyIHJlbGV2YW50IGNvbmZpZ3MganVtcCBvdXQgYXQgbWUgaW1tZWRpYXRlbHksIGJ1dCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHNuZWFreSBkZXBlbmRlbmNpZXMgSSdtIG1pc3NpbmcuIFJpZ2h0LCB0aGUgcGF0Y2ggaXRzZWxmIGlzIHRvdWNoaW5nIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCDigJMgdGhlIGhlYXJ0IG9mIHRoZSBwYWNrZXQgc29ja2V0IGltcGxlbWVudGF0aW9uIOKAkyBhbmQgYGluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhgLiBUaGF0J3MgYSBmb2N1c2VkIGFyZWEsIHdoaWNoIGlzIGdvb2QuXG5cblRoZSBrZXkgdGhpbmcgaXMgYENPTkZJR19QQUNLRVRgLCBpdCdzIHRoZSBhbmNob3IgcG9pbnQuXG5cbk5vdywgY29uc2lkZXJpbmcgdGhlIGZpbGUgbW9kaWZpY2F0aW9ucywgaXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSByYWNlIGNvbmRpdGlvbiB0aWVkIHRvIGBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuYCB3aXRoaW4gdGhlIGBBRl9QQUNLRVRgIHNvY2tldCBpbXBsZW1lbnRhdGlvbi4gVGhlcmUncyBhbHNvIGEgcmVtb3ZhbCBvZiBhIGBDQVBfU1lTX1JBV0lPYCBjaGVjayBpbiBgZGV2X3ZhbGlkYXRlX2hlYWRlcmAuIFRoYXQgbGFzdCBvbmUgaXMgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLiBUaGVzZSBjaGFuZ2VzIGFyZSBpbXBhY3RpbmcgaG93IHBhY2tldHMgYXJlIHNlbnQsIHNwZWNpZmljYWxseSB0aHJvdWdoIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHBhY2tldF9zbmRgLCBhbmQgYHRwYWNrZXRfc25kYC4gVGhvc2UgYXJlIGFsbCBjcml0aWNhbCBjb3JlIG5ldHdvcmsgcGF0aHMgdGhhdCBhcmUgdXNlZCB0byB0cmFuc21pdCBwYWNrZXRzLiBHaXZlbiB0aGF0LCBJIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIGhlcmUuIFRoZSBjaGFuZ2VzIHRvIGhlYWRlciBsZW5ndGggaGFuZGxpbmcgaW1tZWRpYXRlbHkgcmFpc2UgYSBmbGFnLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgbW9kaWZpY2F0aW9ucyBkb24ndCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIG9yLCBtb3JlIGltcG9ydGFudGx5LCBtZW1vcnkgc2FmZXR5IHZ1bG5lcmFiaWxpdGllcy4gSXQncyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cblxuQWxyaWdodCwgdGltZSB0byBmb3JtdWxhdGUgdGhlIHNldC1yZXN1bHRzIGNhbGwsIEkga25vdyBob3cgdG8gaGFuZGxlIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NDIsIk91dHB1dFRva2VucyI6MTU5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjU0OjAwLjQ3NTQyNzEzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc1MTY5MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBQ0tFVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhY2tldF9zZW5kbXNnX3Nwa3RcIixcbiAgICBcInRwYWNrZXRfc25kXCIsXG4gICAgXCJwYWNrZXRfc25kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgQUZfUEFDS0VUIHNvY2tldCBpbXBsZW1lbnRhdGlvbiB0byBmaXggYSByYWNlIGNvbmRpdGlvbiB3aXRoIGBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbmAgYW5kIHJlbW92ZXMgYSBgQ0FQX1NZU19SQVdJT2AgY2hlY2sgaW4gYGRldl92YWxpZGF0ZV9oZWFkZXJgLiBUaGlzIGFmZmVjdHMgcGFja2V0IHRyYW5zbWlzc2lvbiB2aWEgYHBhY2tldF9zZW5kbXNnX3Nwa3RgLCBgcGFja2V0X3NuZGAsIGFuZCBgdHBhY2tldF9zbmRgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgbmV0d29yayBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgYXJlIGludHJvZHVjZWQgYnkgdGhlIGNoYW5nZXMgaW4gaGVhZGVyIGxlbmd0aCBoYW5kbGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUNLRVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWNrZXRfc2VuZG1zZ19zcGt0XCIsXG4gICAgXCJ0cGFja2V0X3NuZFwiLFxuICAgIFwicGFja2V0X3NuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEFGX1BBQ0tFVCBzb2NrZXQgaW1wbGVtZW50YXRpb24gdG8gZml4IGEgcmFjZSBjb25kaXRpb24gd2l0aCBgZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGFuZCByZW1vdmVzIGEgYENBUF9TWVNfUkFXSU9gIGNoZWNrIGluIGBkZXZfdmFsaWRhdGVfaGVhZGVyYC4gVGhpcyBhZmZlY3RzIHBhY2tldCB0cmFuc21pc3Npb24gdmlhIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHBhY2tldF9zbmRgLCBhbmQgYHRwYWNrZXRfc25kYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgcGF0aHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkIGJ5IHRoZSBjaGFuZ2VzIGluIGhlYWRlciBsZW5ndGggaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhn9p6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-05 14:36:37 +0000 UTC FinishedAt: 2026-08-05 14:54:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "26ba17d845193dac4921ae1ab280d28d1938052e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PACKET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "26ba17d845193dac4921ae1ab280d28d1938052e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PACKET" ], "series_id": "77706732-e29e-477d-8391-cf2a31c54cf1" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "packet_sendmsg_spkt", "tpacket_snd", "packet_snd" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBQ0tFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhY2tldF9zZW5kbXNnX3Nwa3QmIzM0OywKICAgICYjMzQ7dHBhY2tldF9zbmQmIzM0OywKICAgICYjMzQ7cGFja2V0X3NuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBBRl9QQUNLRVQgc29ja2V0IGltcGxlbWVudGF0aW9uIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uIHdpdGggYGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGFuZCByZW1vdmVzIGEgYENBUF9TWVNfUkFXSU9gIGNoZWNrIGluIGBkZXZfdmFsaWRhdGVfaGVhZGVyYC4gVGhpcyBhZmZlY3RzIHBhY2tldCB0cmFuc21pc3Npb24gdmlhIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHBhY2tldF9zbmRgLCBhbmQgYHRwYWNrZXRfc25kYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgcGF0aHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkIGJ5IHRoZSBjaGFuZ2VzIGluIGhlYWRlciBsZW5ndGggaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxNWZmMTBmMjEwOWNkMjVkNTE5YjZmZmMwMjYxMGNiZDk5NzI1MDljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgNSAxNDo1MzowNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggOTk4MWQ2MzdmOGI1NC4uODg0MGIxMjY5NzlmZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbkBAIC0zMDAsOSAmIzQzOzMwMCwxMSBAQCBzdHJ1Y3QgaGhfY2FjaGUge1xuICAqIFdlIGNvdWxkIHVzZSBvdGhlciBhbGlnbm1lbnQgdmFsdWVzLCBidXQgd2UgbXVzdCBtYWludGFpbiB0aGVcbiAgKiByZWxhdGlvbnNoaXAgSEggYWxpZ25tZW50IFx1MDAzYz0gTEwgYWxpZ25tZW50LlxuICAqL1xuLSNkZWZpbmUgTExfUkVTRVJWRURfU1BBQ0UoZGV2KSBcXFxuLVx0KCgoKGRldiktXHUwMDNlaGFyZF9oZWFkZXJfbGVuICYjNDM7IFJFQURfT05DRSgoZGV2KS1cdTAwM2VuZWVkZWRfaGVhZHJvb20pKSBcXFxuJiM0MzsjZGVmaW5lIExMX1JFU0VSVkVEX1NQQUNFX0VYKGRldiwgaGxlbikgXFxcbiYjNDM7XHQoKCgoaGxlbikgJiM0MzsgUkVBRF9PTkNFKChkZXYpLVx1MDAzZW5lZWRlZF9oZWFkcm9vbSkpIFxcXG4gXHQgIFx1MDAyNiB+KEhIX0RBVEFfTU9EIC0gMSkpICYjNDM7IEhIX0RBVEFfTU9EKVxuJiM0MzsjZGVmaW5lIExMX1JFU0VSVkVEX1NQQUNFKGRldikgXFxcbiYjNDM7XHRMTF9SRVNFUlZFRF9TUEFDRV9FWChkZXYsIChkZXYpLVx1MDAzZWhhcmRfaGVhZGVyX2xlbilcbiAjZGVmaW5lIExMX1JFU0VSVkVEX1NQQUNFX0VYVFJBKGRldixleHRyYSkgXFxcbiBcdCgoKChkZXYpLVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAmIzQzOyBSRUFEX09OQ0UoKGRldiktXHUwMDNlbmVlZGVkX2hlYWRyb29tKSAmIzQzOyAoZXh0cmEpKSBcXFxuIFx0ICBcdTAwMjYgfihISF9EQVRBX01PRCAtIDEpKSAmIzQzOyBISF9EQVRBX01PRClcbkBAIC0zNTMxLDExICYjNDM7MzUzMyw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBkZXZfdmFsaWRhdGVfaGVhZGVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAobGVuIFx1MDAzYyBkZXYtXHUwMDNlbWluX2hlYWRlcl9sZW4pXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGlmIChjYXBhYmxlKENBUF9TWVNfUkFXSU8pKSB7XG4tXHRcdG1lbXNldChsbF9oZWFkZXIgJiM0MzsgbGVuLCAwLCBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gbGVuKTtcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHR9XG4tXG4gXHRpZiAoZGV2LVx1MDAzZWhlYWRlcl9vcHMgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VoZWFkZXJfb3BzLVx1MDAzZXZhbGlkYXRlKVxuIFx0XHRyZXR1cm4gZGV2LVx1MDAzZWhlYWRlcl9vcHMtXHUwMDNldmFsaWRhdGUobGxfaGVhZGVyLCBsZW4pO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jXG5pbmRleCBlNzVkMjkzMjQ3NWFjLi5lOWI2ODEwYzg4NWU1IDEwMDY0NFxuLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuQEAgLTE5NTMsOCAmIzQzOzE5NTMsOSBAQCBzdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnX3Nwa3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiBcdHN0cnVjdCBzb2NrY21fY29va2llIHNvY2tjO1xuIFx0X19iZTE2IHByb3RvID0gMDtcbi1cdGludCBlcnI7XG4mIzQzO1x0aW50IGhhcmRfaGVhZGVyX2xlbjtcbiBcdGludCBleHRyYV9sZW4gPSAwO1xuJiM0MztcdGludCBlcnI7XG4gXG4gXHQvKlxuIFx0ICpcdEdldCBhbmQgdmVyaWZ5IHRoZSBhZGRyZXNzLlxuQEAgLTE5OTcsMTQgJiM0MzsxOTk4LDE4IEBAIHN0YXRpYyBpbnQgcGFja2V0X3NlbmRtc2dfc3BrdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4gXHRcdGV4dHJhX2xlbiA9IDQ7IC8qIFdlJiMzOTtyZSBkb2luZyBvdXIgb3duIENSQyAqL1xuIFx0fVxuIFxuJiM0MztcdC8qIEtlZXAgdGhlIGFsbG9jYXRpb24tdGltZSBoZWFkZXIgbGVuZ3RoIGFjcm9zcyByZXRyeS4gKi9cbiYjNDM7XHRpZiAoIXNrYilcbiYjNDM7XHRcdGhhcmRfaGVhZGVyX2xlbiA9IFJFQURfT05DRShkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbiYjNDM7XG4gXHRlcnIgPSAtRU1TR1NJWkU7XG4tXHRpZiAobGVuIFx1MDAzZSBkZXYtXHUwMDNlbXR1ICYjNDM7IGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gJiM0MzsgVkxBTl9ITEVOICYjNDM7IGV4dHJhX2xlbilcbiYjNDM7XHRpZiAobGVuIFx1MDAzZSBkZXYtXHUwMDNlbXR1ICYjNDM7IGhhcmRfaGVhZGVyX2xlbiAmIzQzOyBWTEFOX0hMRU4gJiM0MzsgZXh0cmFfbGVuKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4gXHRpZiAoIXNrYikge1xuLVx0XHRzaXplX3QgcmVzZXJ2ZWQgPSBMTF9SRVNFUlZFRF9TUEFDRShkZXYpO1xuJiM0MztcdFx0c2l6ZV90IHJlc2VydmVkID0gTExfUkVTRVJWRURfU1BBQ0VfRVgoZGV2LCBoYXJkX2hlYWRlcl9sZW4pO1xuIFx0XHRpbnQgdGxlbiA9IGRldi1cdTAwM2VuZWVkZWRfdGFpbHJvb207XG4tXHRcdHVuc2lnbmVkIGludCBoaGxlbiA9IGRldi1cdTAwM2VoZWFkZXJfb3BzID8gZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA6IDA7XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgaGhsZW4gPSBkZXYtXHUwMDNlaGVhZGVyX29wcyA/IGhhcmRfaGVhZGVyX2xlbiA6IDA7XG4gXG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRza2IgPSBzb2NrX3dtYWxsb2Moc2ssIGxlbiAmIzQzOyByZXNlcnZlZCAmIzQzOyB0bGVuLCAwLCBHRlBfS0VSTkVMKTtcbkBAIC0yMDM0LDcgJiM0MzsyMDM5LDcgQEAgc3RhdGljIGludCBwYWNrZXRfc2VuZG1zZ19zcGt0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbiBcdFx0ZXJyID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuLVx0aWYgKGxlbiBcdTAwM2UgKGRldi1cdTAwM2VtdHUgJiM0MzsgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAmIzQzOyBleHRyYV9sZW4pIFx1MDAyNlx1MDAyNlxuJiM0MztcdGlmIChsZW4gXHUwMDNlIChkZXYtXHUwMDNlbXR1ICYjNDM7IGhhcmRfaGVhZGVyX2xlbiAmIzQzOyBleHRyYV9sZW4pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFwYWNrZXRfZXh0cmFfdmxhbl9sZW5fYWxsb3dlZChkZXYsIHNrYikpIHtcbiBcdFx0ZXJyID0gLUVNU0dTSVpFO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG5AQCAtMjU2OSw2ICYjNDM7MjU3NCw3IEBAIHN0YXRpYyBpbnQgcGFja2V0X3NuZF92bmV0X3BhcnNlKHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90ICpsZW4sXG4gc3RhdGljIGludCB0cGFja2V0X2ZpbGxfc2tiKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHZvaWQgKmZyYW1lLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBpbnQgdHBfbGVuLFxuIFx0XHRfX2JlMTYgcHJvdG8sIHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBobGVuLCBpbnQgY29weWxlbixcbiYjNDM7XHRcdGludCBoYXJkX2hlYWRlcl9sZW4sXG4gXHRcdGNvbnN0IHN0cnVjdCBzb2NrY21fY29va2llICpzb2NrYylcbiB7XG4gXHR1bmlvbiB0cGFja2V0X3VoZHIgcGg7XG5AQCAtMjYwMCw4ICYjNDM7MjYwNiw4IEBAIHN0YXRpYyBpbnQgdHBhY2tldF9maWxsX3NrYihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0fSBlbHNlIGlmIChjb3B5bGVuKSB7XG4gXHRcdGludCBoZHJsZW4gPSBtaW5fdChpbnQsIGNvcHlsZW4sIHRwX2xlbik7XG4gXG4tXHRcdHNrYl9wdXNoKHNrYiwgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4tXHRcdHNrYl9wdXQoc2tiLCBjb3B5bGVuIC0gZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4mIzQzO1x0XHRza2JfcHVzaChza2IsIGhhcmRfaGVhZGVyX2xlbik7XG4mIzQzO1x0XHRza2JfcHV0KHNrYiwgY29weWxlbiAtIGhhcmRfaGVhZGVyX2xlbik7XG4gXHRcdGVyciA9IHNrYl9zdG9yZV9iaXRzKHNrYiwgMCwgZGF0YSwgaGRybGVuKTtcbiBcdFx0aWYgKHVubGlrZWx5KGVycikpXG4gXHRcdFx0cmV0dXJuIGVycjtcbkBAIC0yNzMyLDcgJiM0MzsyNzM4LDcgQEAgc3RhdGljIGludCB0cGFja2V0X3NuZChzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3QgbXNnaGRyICptc2cpXG4gXHR2b2lkICpkYXRhO1xuIFx0aW50IGxlbl9zdW0gPSAwO1xuIFx0aW50IHN0YXR1cyA9IFRQX1NUQVRVU19BVkFJTEFCTEU7XG4tXHRpbnQgaGxlbiwgdGxlbiwgY29weWxlbiA9IDA7XG4mIzQzO1x0aW50IGhhcmRfaGVhZGVyX2xlbiwgaGxlbiwgdGxlbiwgY29weWxlbiA9IDA7XG4gXHRsb25nIHRpbWVvO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZwby1cdTAwM2VwZ192ZWNfbG9jayk7XG5AQCAtMjc3OSw4ICYjNDM7Mjc4NSw5IEBAIHN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxuIFx0XHRcdGdvdG8gb3V0X3B1dDtcbiBcdH1cbiBcbiYjNDM7XHRoYXJkX2hlYWRlcl9sZW4gPSBSRUFEX09OQ0UoZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4gXHRpZiAocG8tXHUwMDNlc2suc2tfc29ja2V0LVx1MDAzZXR5cGUgPT0gU09DS19SQVcpXG4tXHRcdHJlc2VydmUgPSBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuJiM0MztcdFx0cmVzZXJ2ZSA9IGhhcmRfaGVhZGVyX2xlbjtcbiBcdHNpemVfbWF4ID0gcG8tXHUwMDNldHhfcmluZy5mcmFtZV9zaXplXG4gXHRcdC0gKHBvLVx1MDAzZXRwX2hkcmxlbiAtIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpKTtcbiBcbkBAIC0yODE3LDcgJiM0MzsyODI0LDcgQEAgc3RhdGljIGludCB0cGFja2V0X3NuZChzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3QgbXNnaGRyICptc2cpXG4gXHRcdFx0Z290byB0cGFja2V0X2Vycm9yO1xuIFxuIFx0XHRzdGF0dXMgPSBUUF9TVEFUVVNfU0VORF9SRVFVRVNUO1xuLVx0XHRobGVuID0gTExfUkVTRVJWRURfU1BBQ0UoZGV2KTtcbiYjNDM7XHRcdGhsZW4gPSBMTF9SRVNFUlZFRF9TUEFDRV9FWChkZXYsIGhhcmRfaGVhZGVyX2xlbik7XG4gXHRcdHRsZW4gPSBkZXYtXHUwMDNlbmVlZGVkX3RhaWxyb29tO1xuIFx0XHRpZiAodm5ldF9oZHJfc3opIHtcbiBcdFx0XHRkYXRhICYjNDM7PSB2bmV0X2hkcl9zejtcbkBAIC0yODM1LDEwICYjNDM7Mjg0MiwxMCBAQCBzdGF0aWMgaW50IHRwYWNrZXRfc25kKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBtc2doZHIgKm1zZylcbiBcdFx0XHRcdFx0XHQgICAgdm5ldF9oZHIuaGRyX2xlbik7XG4gXHRcdFx0aGFzX3ZuZXRfaGRyID0gdHJ1ZTtcbiBcdFx0fVxuLVx0XHRjb3B5bGVuID0gbWF4X3QoaW50LCBjb3B5bGVuLCBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbiYjNDM7XHRcdGNvcHlsZW4gPSBtYXhfdChpbnQsIGNvcHlsZW4sIGhhcmRfaGVhZGVyX2xlbik7XG4gXHRcdHNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9za2IoXHUwMDI2cG8tXHUwMDNlc2ssXG4gXHRcdFx0XHRobGVuICYjNDM7IHRsZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9sbCkgJiM0Mztcbi1cdFx0XHRcdChjb3B5bGVuIC0gZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiksXG4mIzQzO1x0XHRcdFx0KGNvcHlsZW4gLSBoYXJkX2hlYWRlcl9sZW4pLFxuIFx0XHRcdFx0IW5lZWRfd2FpdCwgXHUwMDI2ZXJyKTtcbiBcbiBcdFx0aWYgKHVubGlrZWx5KHNrYiA9PSBOVUxMKSkge1xuQEAgLTI4NDgsNyAmIzQzOzI4NTUsOCBAQCBzdGF0aWMgaW50IHRwYWNrZXRfc25kKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBtc2doZHIgKm1zZylcbiBcdFx0XHRnb3RvIG91dF9zdGF0dXM7XG4gXHRcdH1cbiBcdFx0dHBfbGVuID0gdHBhY2tldF9maWxsX3NrYihwbywgc2tiLCBwaCwgZGV2LCBkYXRhLCB0cF9sZW4sIHByb3RvLFxuLVx0XHRcdFx0XHQgIGFkZHIsIGhsZW4sIGNvcHlsZW4sIFx1MDAyNnNvY2tjKTtcbiYjNDM7XHRcdFx0XHRcdCAgYWRkciwgaGxlbiwgY29weWxlbiwgaGFyZF9oZWFkZXJfbGVuLFxuJiM0MztcdFx0XHRcdFx0ICBcdTAwMjZzb2NrYyk7XG4gXHRcdGlmIChsaWtlbHkodHBfbGVuIFx1MDAzZT0gMCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICB0cF9sZW4gXHUwMDNlIGRldi1cdTAwM2VtdHUgJiM0MzsgcmVzZXJ2ZSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICF2bmV0X2hkcl9zeiBcdTAwMjZcdTAwMjZcbkBAIC0yOTU2LDcgJiM0MzsyOTY0LDcgQEAgc3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiBcdGludCBvZmZzZXQgPSAwO1xuIFx0c3RydWN0IHBhY2tldF9zb2NrICpwbyA9IHBrdF9zayhzayk7XG4gXHRpbnQgdm5ldF9oZHJfc3ogPSBSRUFEX09OQ0UocG8tXHUwMDNldm5ldF9oZHJfc3opO1xuLVx0aW50IGhsZW4sIHRsZW4sIGxpbmVhcjtcbiYjNDM7XHRpbnQgaGFyZF9oZWFkZXJfbGVuLCBobGVuLCB0bGVuLCBsaW5lYXI7XG4gXHRpbnQgZXh0cmFfbGVuID0gMDtcbiBcbiBcdC8qXG5AQCAtMjk5Niw4ICYjNDM7MzAwNCw5IEBAIHN0YXRpYyBpbnQgcGFja2V0X3NuZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4gXHRcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuJiM0MztcdGhhcmRfaGVhZGVyX2xlbiA9IFJFQURfT05DRShkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbiBcdGlmIChzb2NrLVx1MDAzZXR5cGUgPT0gU09DS19SQVcpXG4tXHRcdHJlc2VydmUgPSBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuJiM0MztcdFx0cmVzZXJ2ZSA9IGhhcmRfaGVhZGVyX2xlbjtcbiBcdGlmICh2bmV0X2hkcl9zeikge1xuIFx0XHRlcnIgPSBwYWNrZXRfc25kX3ZuZXRfcGFyc2UobXNnLCBcdTAwMjZsZW4sIFx1MDAyNnZuZXRfaGRyLCB2bmV0X2hkcl9zeik7XG4gXHRcdGlmIChlcnIpXG5AQCAtMzAxOCwxMCAmIzQzOzMwMjcsMTAgQEAgc3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuIFx0ZXJyID0gLUVOT0JVRlM7XG4tXHRobGVuID0gTExfUkVTRVJWRURfU1BBQ0UoZGV2KTtcbiYjNDM7XHRobGVuID0gTExfUkVTRVJWRURfU1BBQ0VfRVgoZGV2LCBoYXJkX2hlYWRlcl9sZW4pO1xuIFx0dGxlbiA9IGRldi1cdTAwM2VuZWVkZWRfdGFpbHJvb207XG4gXHRsaW5lYXIgPSBfX3ZpcnRpbzE2X3RvX2NwdSh2aW9fbGUoKSwgdm5ldF9oZHIuaGRyX2xlbik7XG4tXHRsaW5lYXIgPSBtYXgobGluZWFyLCBtaW5fdChpbnQsIGxlbiwgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbikpO1xuJiM0MztcdGxpbmVhciA9IG1heChsaW5lYXIsIG1pbl90KGludCwgbGVuLCBoYXJkX2hlYWRlcl9sZW4pKTtcbiBcdHNrYiA9IHBhY2tldF9hbGxvY19za2Ioc2ssIGhsZW4gJiM0MzsgdGxlbiwgaGxlbiwgbGVuLCBsaW5lYXIsXG4gXHRcdFx0ICAgICAgIG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCwgXHUwMDI2ZXJyKTtcbiBcdGlmIChza2IgPT0gTlVMTClcbkBAIC0zMDM3LDcgJiM0MzszMDQ2LDcgQEAgc3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiBcdH0gZWxzZSBpZiAocmVzZXJ2ZSkge1xuIFx0XHRza2JfcmVzZXJ2ZShza2IsIC1yZXNlcnZlKTtcbiBcdFx0aWYgKGxlbiBcdTAwM2MgcmVzZXJ2ZSAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgZGV2LVx1MDAzZW1pbl9oZWFkZXJfbGVuICE9IGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pXG4mIzQzO1x0XHQgICAgZGV2LVx1MDAzZW1pbl9oZWFkZXJfbGVuICE9IGhhcmRfaGVhZGVyX2xlbilcbiBcdFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbiBcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFDS0VUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFja2V0X3NlbmRtc2dfc3BrdCYjMzQ7LAogICAgJiMzNDt0cGFja2V0X3NuZCYjMzQ7LAogICAgJiMzNDtwYWNrZXRfc25kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEFGX1BBQ0tFVCBzb2NrZXQgaW1wbGVtZW50YXRpb24gdG8gZml4IGEgcmFjZSBjb25kaXRpb24gd2l0aCBgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbmAgYW5kIHJlbW92ZXMgYSBgQ0FQX1NZU19SQVdJT2AgY2hlY2sgaW4gYGRldl92YWxpZGF0ZV9oZWFkZXJgLiBUaGlzIGFmZmVjdHMgcGFja2V0IHRyYW5zbWlzc2lvbiB2aWEgYHBhY2tldF9zZW5kbXNnX3Nwa3RgLCBgcGFja2V0X3NuZGAsIGFuZCBgdHBhY2tldF9zbmRgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgbmV0d29yayBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgYXJlIGludHJvZHVjZWQgYnkgdGhlIGNoYW5nZXMgaW4gaGVhZGVyIGxlbmd0aCBoYW5kbGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE1ZmYxMGYyMTA5Y2QyNWQ1MTliNmZmYzAyNjEwY2JkOTk3MjUwOWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyA1IDE0OjUzOjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggOTk4MWQ2MzdmOGI1NC4uODg0MGIxMjY5NzlmZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC0zMDAsOSAmIzQzOzMwMCwxMSBAQCBzdHJ1Y3QgaGhfY2FjaGUgewogICogV2UgY291bGQgdXNlIG90aGVyIGFsaWdubWVudCB2YWx1ZXMsIGJ1dCB3ZSBtdXN0IG1haW50YWluIHRoZQogICogcmVsYXRpb25zaGlwIEhIIGFsaWdubWVudCAmbHQ7PSBMTCBhbGlnbm1lbnQuCiAgKi8KLSNkZWZpbmUgTExfUkVTRVJWRURfU1BBQ0UoZGV2KSBcCi0JKCgoKGRldiktJmd0O2hhcmRfaGVhZGVyX2xlbiAmIzQzOyBSRUFEX09OQ0UoKGRldiktJmd0O25lZWRlZF9oZWFkcm9vbSkpIFwKJiM0MzsjZGVmaW5lIExMX1JFU0VSVkVEX1NQQUNFX0VYKGRldiwgaGxlbikgXAomIzQzOwkoKCgoaGxlbikgJiM0MzsgUkVBRF9PTkNFKChkZXYpLSZndDtuZWVkZWRfaGVhZHJvb20pKSBcCiAJICAmYW1wOyB+KEhIX0RBVEFfTU9EIC0gMSkpICYjNDM7IEhIX0RBVEFfTU9EKQomIzQzOyNkZWZpbmUgTExfUkVTRVJWRURfU1BBQ0UoZGV2KSBcCiYjNDM7CUxMX1JFU0VSVkVEX1NQQUNFX0VYKGRldiwgKGRldiktJmd0O2hhcmRfaGVhZGVyX2xlbikKICNkZWZpbmUgTExfUkVTRVJWRURfU1BBQ0VfRVhUUkEoZGV2LGV4dHJhKSBcCiAJKCgoKGRldiktJmd0O2hhcmRfaGVhZGVyX2xlbiAmIzQzOyBSRUFEX09OQ0UoKGRldiktJmd0O25lZWRlZF9oZWFkcm9vbSkgJiM0MzsgKGV4dHJhKSkgXAogCSAgJmFtcDsgfihISF9EQVRBX01PRCAtIDEpKSAmIzQzOyBISF9EQVRBX01PRCkKQEAgLTM1MzEsMTEgJiM0MzszNTMzLDYgQEAgc3RhdGljIGlubGluZSBib29sIGRldl92YWxpZGF0ZV9oZWFkZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZiAobGVuICZsdDsgZGV2LSZndDttaW5faGVhZGVyX2xlbikKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKGNhcGFibGUoQ0FQX1NZU19SQVdJTykpIHsKLQkJbWVtc2V0KGxsX2hlYWRlciAmIzQzOyBsZW4sIDAsIGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuIC0gbGVuKTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCiAJaWYgKGRldi0mZ3Q7aGVhZGVyX29wcyAmYW1wOyZhbXA7IGRldi0mZ3Q7aGVhZGVyX29wcy0mZ3Q7dmFsaWRhdGUpCiAJCXJldHVybiBkZXYtJmd0O2hlYWRlcl9vcHMtJmd0O3ZhbGlkYXRlKGxsX2hlYWRlciwgbGVuKTsKIApkaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKaW5kZXggZTc1ZDI5MzI0NzVhYy4uZTliNjgxMGM4ODVlNSAxMDA2NDQKLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCkBAIC0xOTUzLDggJiM0MzsxOTUzLDkgQEAgc3RhdGljIGludCBwYWNrZXRfc2VuZG1zZ19zcGt0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBzb2NrY21fY29va2llIHNvY2tjOwogCV9fYmUxNiBwcm90byA9IDA7Ci0JaW50IGVycjsKJiM0MzsJaW50IGhhcmRfaGVhZGVyX2xlbjsKIAlpbnQgZXh0cmFfbGVuID0gMDsKJiM0MzsJaW50IGVycjsKIAogCS8qCiAJICoJR2V0IGFuZCB2ZXJpZnkgdGhlIGFkZHJlc3MuCkBAIC0xOTk3LDE0ICYjNDM7MTk5OCwxOCBAQCBzdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnX3Nwa3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAogCQlleHRyYV9sZW4gPSA0OyAvKiBXZSYjMzk7cmUgZG9pbmcgb3VyIG93biBDUkMgKi8KIAl9CiAKJiM0MzsJLyogS2VlcCB0aGUgYWxsb2NhdGlvbi10aW1lIGhlYWRlciBsZW5ndGggYWNyb3NzIHJldHJ5LiAqLwomIzQzOwlpZiAoIXNrYikKJiM0MzsJCWhhcmRfaGVhZGVyX2xlbiA9IFJFQURfT05DRShkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiYjNDM7CiAJZXJyID0gLUVNU0dTSVpFOwotCWlmIChsZW4gJmd0OyBkZXYtJmd0O210dSAmIzQzOyBkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiAmIzQzOyBWTEFOX0hMRU4gJiM0MzsgZXh0cmFfbGVuKQomIzQzOwlpZiAobGVuICZndDsgZGV2LSZndDttdHUgJiM0MzsgaGFyZF9oZWFkZXJfbGVuICYjNDM7IFZMQU5fSExFTiAmIzQzOyBleHRyYV9sZW4pCiAJCWdvdG8gb3V0X3VubG9jazsKIAogCWlmICghc2tiKSB7Ci0JCXNpemVfdCByZXNlcnZlZCA9IExMX1JFU0VSVkVEX1NQQUNFKGRldik7CiYjNDM7CQlzaXplX3QgcmVzZXJ2ZWQgPSBMTF9SRVNFUlZFRF9TUEFDRV9FWChkZXYsIGhhcmRfaGVhZGVyX2xlbik7CiAJCWludCB0bGVuID0gZGV2LSZndDtuZWVkZWRfdGFpbHJvb207Ci0JCXVuc2lnbmVkIGludCBoaGxlbiA9IGRldi0mZ3Q7aGVhZGVyX29wcyA/IGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuIDogMDsKJiM0MzsJCXVuc2lnbmVkIGludCBoaGxlbiA9IGRldi0mZ3Q7aGVhZGVyX29wcyA/IGhhcmRfaGVhZGVyX2xlbiA6IDA7CiAKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXNrYiA9IHNvY2tfd21hbGxvYyhzaywgbGVuICYjNDM7IHJlc2VydmVkICYjNDM7IHRsZW4sIDAsIEdGUF9LRVJORUwpOwpAQCAtMjAzNCw3ICYjNDM7MjAzOSw3IEBAIHN0YXRpYyBpbnQgcGFja2V0X3NlbmRtc2dfc3BrdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csCiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9Ci0JaWYgKGxlbiAmZ3Q7IChkZXYtJmd0O210dSAmIzQzOyBkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiAmIzQzOyBleHRyYV9sZW4pICZhbXA7JmFtcDsKJiM0MzsJaWYgKGxlbiAmZ3Q7IChkZXYtJmd0O210dSAmIzQzOyBoYXJkX2hlYWRlcl9sZW4gJiM0MzsgZXh0cmFfbGVuKSAmYW1wOyZhbXA7CiAJICAgICFwYWNrZXRfZXh0cmFfdmxhbl9sZW5fYWxsb3dlZChkZXYsIHNrYikpIHsKIAkJZXJyID0gLUVNU0dTSVpFOwogCQlnb3RvIG91dF91bmxvY2s7CkBAIC0yNTY5LDYgJiM0MzsyNTc0LDcgQEAgc3RhdGljIGludCBwYWNrZXRfc25kX3ZuZXRfcGFyc2Uoc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgKmxlbiwKIHN0YXRpYyBpbnQgdHBhY2tldF9maWxsX3NrYihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQl2b2lkICpmcmFtZSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgaW50IHRwX2xlbiwKIAkJX19iZTE2IHByb3RvLCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgaGxlbiwgaW50IGNvcHlsZW4sCiYjNDM7CQlpbnQgaGFyZF9oZWFkZXJfbGVuLAogCQljb25zdCBzdHJ1Y3Qgc29ja2NtX2Nvb2tpZSAqc29ja2MpCiB7CiAJdW5pb24gdHBhY2tldF91aGRyIHBoOwpAQCAtMjYwMCw4ICYjNDM7MjYwNiw4IEBAIHN0YXRpYyBpbnQgdHBhY2tldF9maWxsX3NrYihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCX0gZWxzZSBpZiAoY29weWxlbikgewogCQlpbnQgaGRybGVuID0gbWluX3QoaW50LCBjb3B5bGVuLCB0cF9sZW4pOwogCi0JCXNrYl9wdXNoKHNrYiwgZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4pOwotCQlza2JfcHV0KHNrYiwgY29weWxlbiAtIGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKTsKJiM0MzsJCXNrYl9wdXNoKHNrYiwgaGFyZF9oZWFkZXJfbGVuKTsKJiM0MzsJCXNrYl9wdXQoc2tiLCBjb3B5bGVuIC0gaGFyZF9oZWFkZXJfbGVuKTsKIAkJZXJyID0gc2tiX3N0b3JlX2JpdHMoc2tiLCAwLCBkYXRhLCBoZHJsZW4pOwogCQlpZiAodW5saWtlbHkoZXJyKSkKIAkJCXJldHVybiBlcnI7CkBAIC0yNzMyLDcgJiM0MzsyNzM4LDcgQEAgc3RhdGljIGludCB0cGFja2V0X3NuZChzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3QgbXNnaGRyICptc2cpCiAJdm9pZCAqZGF0YTsKIAlpbnQgbGVuX3N1bSA9IDA7CiAJaW50IHN0YXR1cyA9IFRQX1NUQVRVU19BVkFJTEFCTEU7Ci0JaW50IGhsZW4sIHRsZW4sIGNvcHlsZW4gPSAwOwomIzQzOwlpbnQgaGFyZF9oZWFkZXJfbGVuLCBobGVuLCB0bGVuLCBjb3B5bGVuID0gMDsKIAlsb25nIHRpbWVvOwogCiAJbXV0ZXhfbG9jaygmYW1wO3BvLSZndDtwZ192ZWNfbG9jayk7CkBAIC0yNzc5LDggJiM0MzsyNzg1LDkgQEAgc3RhdGljIGludCB0cGFja2V0X3NuZChzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3QgbXNnaGRyICptc2cpCiAJCQlnb3RvIG91dF9wdXQ7CiAJfQogCiYjNDM7CWhhcmRfaGVhZGVyX2xlbiA9IFJFQURfT05DRShkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiAJaWYgKHBvLSZndDtzay5za19zb2NrZXQtJmd0O3R5cGUgPT0gU09DS19SQVcpCi0JCXJlc2VydmUgPSBkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbjsKJiM0MzsJCXJlc2VydmUgPSBoYXJkX2hlYWRlcl9sZW47CiAJc2l6ZV9tYXggPSBwby0mZ3Q7dHhfcmluZy5mcmFtZV9zaXplCiAJCS0gKHBvLSZndDt0cF9oZHJsZW4gLSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2xsKSk7CiAKQEAgLTI4MTcsNyAmIzQzOzI4MjQsNyBAQCBzdGF0aWMgaW50IHRwYWNrZXRfc25kKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBtc2doZHIgKm1zZykKIAkJCWdvdG8gdHBhY2tldF9lcnJvcjsKIAogCQlzdGF0dXMgPSBUUF9TVEFUVVNfU0VORF9SRVFVRVNUOwotCQlobGVuID0gTExfUkVTRVJWRURfU1BBQ0UoZGV2KTsKJiM0MzsJCWhsZW4gPSBMTF9SRVNFUlZFRF9TUEFDRV9FWChkZXYsIGhhcmRfaGVhZGVyX2xlbik7CiAJCXRsZW4gPSBkZXYtJmd0O25lZWRlZF90YWlscm9vbTsKIAkJaWYgKHZuZXRfaGRyX3N6KSB7CiAJCQlkYXRhICYjNDM7PSB2bmV0X2hkcl9zejsKQEAgLTI4MzUsMTAgJiM0MzsyODQyLDEwIEBAIHN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKQogCQkJCQkJICAgIHZuZXRfaGRyLmhkcl9sZW4pOwogCQkJaGFzX3ZuZXRfaGRyID0gdHJ1ZTsKIAkJfQotCQljb3B5bGVuID0gbWF4X3QoaW50LCBjb3B5bGVuLCBkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiYjNDM7CQljb3B5bGVuID0gbWF4X3QoaW50LCBjb3B5bGVuLCBoYXJkX2hlYWRlcl9sZW4pOwogCQlza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKCZhbXA7cG8tJmd0O3NrLAogCQkJCWhsZW4gJiM0MzsgdGxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2xsKSAmIzQzOwotCQkJCShjb3B5bGVuIC0gZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4pLAomIzQzOwkJCQkoY29weWxlbiAtIGhhcmRfaGVhZGVyX2xlbiksCiAJCQkJIW5lZWRfd2FpdCwgJmFtcDtlcnIpOwogCiAJCWlmICh1bmxpa2VseShza2IgPT0gTlVMTCkpIHsKQEAgLTI4NDgsNyAmIzQzOzI4NTUsOCBAQCBzdGF0aWMgaW50IHRwYWNrZXRfc25kKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBtc2doZHIgKm1zZykKIAkJCWdvdG8gb3V0X3N0YXR1czsKIAkJfQogCQl0cF9sZW4gPSB0cGFja2V0X2ZpbGxfc2tiKHBvLCBza2IsIHBoLCBkZXYsIGRhdGEsIHRwX2xlbiwgcHJvdG8sCi0JCQkJCSAgYWRkciwgaGxlbiwgY29weWxlbiwgJmFtcDtzb2NrYyk7CiYjNDM7CQkJCQkgIGFkZHIsIGhsZW4sIGNvcHlsZW4sIGhhcmRfaGVhZGVyX2xlbiwKJiM0MzsJCQkJCSAgJmFtcDtzb2NrYyk7CiAJCWlmIChsaWtlbHkodHBfbGVuICZndDs9IDApICZhbXA7JmFtcDsKIAkJICAgIHRwX2xlbiAmZ3Q7IGRldi0mZ3Q7bXR1ICYjNDM7IHJlc2VydmUgJmFtcDsmYW1wOwogCQkgICAgIXZuZXRfaGRyX3N6ICZhbXA7JmFtcDsKQEAgLTI5NTYsNyAmIzQzOzI5NjQsNyBAQCBzdGF0aWMgaW50IHBhY2tldF9zbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKQogCWludCBvZmZzZXQgPSAwOwogCXN0cnVjdCBwYWNrZXRfc29jayAqcG8gPSBwa3Rfc2soc2spOwogCWludCB2bmV0X2hkcl9zeiA9IFJFQURfT05DRShwby0mZ3Q7dm5ldF9oZHJfc3opOwotCWludCBobGVuLCB0bGVuLCBsaW5lYXI7CiYjNDM7CWludCBoYXJkX2hlYWRlcl9sZW4sIGhsZW4sIHRsZW4sIGxpbmVhcjsKIAlpbnQgZXh0cmFfbGVuID0gMDsKIAogCS8qCkBAIC0yOTk2LDggJiM0MzszMDA0LDkgQEAgc3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbikKIAkJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKJiM0MzsJaGFyZF9oZWFkZXJfbGVuID0gUkVBRF9PTkNFKGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKTsKIAlpZiAoc29jay0mZ3Q7dHlwZSA9PSBTT0NLX1JBVykKLQkJcmVzZXJ2ZSA9IGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuOwomIzQzOwkJcmVzZXJ2ZSA9IGhhcmRfaGVhZGVyX2xlbjsKIAlpZiAodm5ldF9oZHJfc3opIHsKIAkJZXJyID0gcGFja2V0X3NuZF92bmV0X3BhcnNlKG1zZywgJmFtcDtsZW4sICZhbXA7dm5ldF9oZHIsIHZuZXRfaGRyX3N6KTsKIAkJaWYgKGVycikKQEAgLTMwMTgsMTAgJiM0MzszMDI3LDEwIEBAIHN0YXRpYyBpbnQgcGFja2V0X3NuZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiAJCWdvdG8gb3V0X3VubG9jazsKIAogCWVyciA9IC1FTk9CVUZTOwotCWhsZW4gPSBMTF9SRVNFUlZFRF9TUEFDRShkZXYpOwomIzQzOwlobGVuID0gTExfUkVTRVJWRURfU1BBQ0VfRVgoZGV2LCBoYXJkX2hlYWRlcl9sZW4pOwogCXRsZW4gPSBkZXYtJmd0O25lZWRlZF90YWlscm9vbTsKIAlsaW5lYXIgPSBfX3ZpcnRpbzE2X3RvX2NwdSh2aW9fbGUoKSwgdm5ldF9oZHIuaGRyX2xlbik7Ci0JbGluZWFyID0gbWF4KGxpbmVhciwgbWluX3QoaW50LCBsZW4sIGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKSk7CiYjNDM7CWxpbmVhciA9IG1heChsaW5lYXIsIG1pbl90KGludCwgbGVuLCBoYXJkX2hlYWRlcl9sZW4pKTsKIAlza2IgPSBwYWNrZXRfYWxsb2Nfc2tiKHNrLCBobGVuICYjNDM7IHRsZW4sIGhsZW4sIGxlbiwgbGluZWFyLAogCQkJICAgICAgIG1zZy0mZ3Q7bXNnX2ZsYWdzICZhbXA7IE1TR19ET05UV0FJVCwgJmFtcDtlcnIpOwogCWlmIChza2IgPT0gTlVMTCkKQEAgLTMwMzcsNyAmIzQzOzMwNDYsNyBAQCBzdGF0aWMgaW50IHBhY2tldF9zbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKQogCX0gZWxzZSBpZiAocmVzZXJ2ZSkgewogCQlza2JfcmVzZXJ2ZShza2IsIC1yZXNlcnZlKTsKIAkJaWYgKGxlbiAmbHQ7IHJlc2VydmUgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSAmYW1wOyZhbXA7Ci0JCSAgICBkZXYtJmd0O21pbl9oZWFkZXJfbGVuICE9IGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKQomIzQzOwkJICAgIGRldi0mZ3Q7bWluX2hlYWRlcl9sZW4gIT0gaGFyZF9oZWFkZXJfbGVuKQogCQkJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NTUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0d29yayBQYWNrZXQgSGVhZGVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBhbmQgaXQmIzM5O3MgdG91Y2hpbmcgYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgIGFuZCBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyBgaGFyZF9oZWFkZXJfbGVuYCBpcyBoYW5kbGVkIGluIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHRwYWNrZXRfc25kYCwgYW5kIGBwYWNrZXRfc25kYC4gU21hcnQgbW92ZSwgdXNpbmcgYFJFQURfT05DRShkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbilgIGFuZCBzdG9yaW5nIGl0IGxvY2FsbHkgYXMgYGhhcmRfaGVhZGVyX2xlbmAuIFRoaXMgYXZvaWRzIHRoZSBjbGFzc2ljIGRhdGEgcmFjZSBhbmQgVE9DVE9VIGlzc3VlcyBpZiBgZGV2LSZndDtoYXJkX2hlYWRlcl9sZW5gIGdldHMgdXBkYXRlZCBjb25jdXJyZW50bHksIHdoaWNoIGlzIGEgY29tbW9uIHZ1bG5lcmFiaWxpdHkuIEdvb2QgcHJldmVudGF0aXZlIG1lYXN1cmUuCgpBaCwgdGhlcmUmIzM5O3MgYWxzbyBhIHJlbW92YWwgb2YgYSBjaHVuayBvZiBjb2RlIGluIGBkZXZfdmFsaWRhdGVfaGVhZGVyYC4gSGFuZyBvbiwgbGV0JiMzOTtzIHNlZS4uLiBpdCYjMzk7cyB0YWtpbmcgb3V0IHRoaXMgY29uZGl0aW9uYWwgYmxvY2s6CgpgYGBjCi0JaWYgKGNhcGFibGUoQ0FQX1NZU19SQVdJTykpIHsKLQkJbWVtc2V0KGxsX2hlYWRlciAmIzQzOyBsZW4sIDAsIGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuIC0gbGVuKTsKLQkJcmV0dXJuIHRydWU7Ci0JfQpgYGAKCldhaXQsIGl0JiMzOTtzIHJlbW92aW5nIHRoZSBgQ0FQX1NZU19SQVdJT2AgY2hlY2sgYW5kIHRoZSBzdWJzZXF1ZW50IGBtZW1zZXRgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJdCBzZWVtcyBsaWtlIHRoZSBwYXRjaCBpc24mIzM5O3QgemVyb2luZyBvdXQgdGhlIHJlbWFpbmluZyBwYXJ0IG9mIHRoZSBoZWFkZXIgYW55bW9yZSBpZiBgbGVuYCBpcyBsZXNzIHRoYW4gYGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuYCwgYnV0IG9ubHkgZm9yIHJhdyBJL08uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGRldl92YWxpZGF0ZV9oZWFkZXJgIGFjdHVhbGx5IGRvZXMgaW4gdGhpcyBjb250ZXh0LCBzbyBJIGNhbiBncmFzcCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMuIEkgc2hvdWxkIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHNlZSB3aGF0IGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZfdmFsaWRhdGVfaGVhZGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MzUxOD1zdGF0aWMgaW5saW5lIF9fYmUxNiBkZXZfcGFyc2VfaGVhZGVyX3Byb3RvY29sKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zNTI3LS8qIGxsX2hlYWRlciBtdXN0IGhhdmUgYXQgbGVhc3QgaGFyZF9oZWFkZXJfbGVuIGFsbG9jYXRlZCAqL1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDozNTI4OnN0YXRpYyBpbmxpbmUgYm9vbCBkZXZfdmFsaWRhdGVfaGVhZGVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTM1MjktXHRcdFx0XHQgICAgICAgY2hhciAqbGxfaGVhZGVyLCBpbnQgbGVuKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTk0Nz1zdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnX3Nwa3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjAzNy1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjAzODpcdGlmICghZGV2X3ZhbGlkYXRlX2hlYWRlcihkZXYsIHNrYi1cdTAwM2VkYXRhLCBsZW4pIHx8ICFza2ItXHUwMDNlbGVuKSB7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIwMzktXHRcdGVyciA9IC1FSU5WQUw7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNTc0PXN0YXRpYyBpbnQgdHBhY2tldF9maWxsX3NrYihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjYxMy1cdFx0XHRyZXR1cm4gZXJyO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNjE0Olx0XHRpZiAoIWRldl92YWxpZGF0ZV9oZWFkZXIoZGV2LCBza2ItXHUwMDNlZGF0YSwgaGRybGVuKSlcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjYxNS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI5NTM9c3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMwNTgtXHRpZiAoKHNvY2stXHUwMDNldHlwZSA9PSBTT0NLX1JBVyBcdTAwMjZcdTAwMjZcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzA1OTpcdCAgICAgIWRldl92YWxpZGF0ZV9oZWFkZXIoZGV2LCBza2ItXHUwMDNlZGF0YSwgbGVuKSkgfHwgIXNrYi1cdTAwM2VsZW4pIHtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzA2MC1cdFx0ZXJyID0gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDAzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogQUZfUEFDS0VUIFNvY2tldCBNb2RpZmljYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYWZfcGFja2V0LmNgLCB0aGUgaGVhcnQgb2YgYEFGX1BBQ0tFVGAgc29ja2V0IGltcGxlbWVudGF0aW9uLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nIOKAkyBjb3JlIGtlcm5lbCBsb2dpYywgcG90ZW50aWFsbHkgcmVhY2hhYmxlLCBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwuIEl0JiMzOTtzIGFkZHJlc3NpbmcgYSByYWNlIGNvbmRpdGlvbiBpbnZvbHZpbmcgYGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuYCwgd2hpY2ggc3VnZ2VzdHMgYSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWUsIGFuZCBpdCYjMzk7cyBhbHNvIHJlbW92aW5nIGEgYENBUF9TWVNfUkFXSU9gIGNhcGFiaWxpdHkgY2hlY2sgd2l0aGluIGBkZXZfdmFsaWRhdGVfaGVhZGVyYC4gSGFuZyBvbiwgdGhhdCBsYXN0IHBhcnQuLi4gbGV0IG1lIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBjb2RlIHNuaXBwZXQ6CgpgYGBjCi0JaWYgKGNhcGFibGUoQ0FQX1NZU19SQVdJTykpIHsKLQkJbWVtc2V0KGxsX2hlYWRlciAmIzQzOyBsZW4sIDAsIGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuIC0gbGVuKTsKLQkJcmV0dXJuIHRydWU7Ci0JfQpgYGAKClJpZ2h0LCBJIHNlZS4gUHJldmlvdXNseSwgaWYgdGhlIHByb2Nlc3MgaGFkIGBDQVBfU1lTX1JBV0lPYCwgaXQgd291bGQgYnlwYXNzIHRoZSBoZWFkZXIgdmFsaWRhdGlvbiBlbnRpcmVseSwgemVyb2luZyBvdXQgdGhlIHJlbWFpbmluZyBoZWFkZXIgYnl0ZXMgYW5kIHJldHVybmluZyBlYXJseS4gTm93LCB0aGF0IGNoZWNrIGlzIGdvbmUuIFRoaXMgaW1wbGllcyBhIGNoYW5nZSBpbiBiZWhhdmlvcjogYGRldi0mZ3Q7aGVhZGVyX29wcy0mZ3Q7dmFsaWRhdGVgIHdpbGwgKmFsd2F5cyogYmUgY2FsbGVkLCByZWdhcmRsZXNzIG9mIHRoZSBgQ0FQX1NZU19SQVdJT2AgY2FwYWJpbGl0eS4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBgYWZfcGFja2V0LmNgIGFuZCBzcGVjaWZpY2FsbHkgYGRldl92YWxpZGF0ZV9oZWFkZXJgLiBHaXZlbiB0aGlzIG1vZGlmaWNhdGlvbiwgYW5kIGNvbnNpZGVyaW5nIHRoZSByYWNlIGNvbmRpdGlvbiBmaXgsIHRoaXMgaXMgKmFic29sdXRlbHkqIHdvcnRoIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIGZvciBmdXp6aW5nIHdpbGwgYmUgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggdGhpcyBjb2RlIGFuZCBub3cgdGFrZSBhIGRpZmZlcmVudCBjb2RlIHBhdGg6IHNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHRwYWNrZXRfc25kYCwgYW5kIGBwYWNrZXRfc25kYC4gV2hpbGUgYGRldl92YWxpZGF0ZV9oZWFkZXJgIGlzIGEgc3RhdGljIGlubGluZSwgc28gbWlnaHQgbm90IGJlIGFzIGRpcmVjdGx5IHVzYWJsZSBmb3IgZnV6emluZywgSSYjMzk7bGwga2VlcCBpdCBpbiBtaW5kIGFzIGEgcG9pbnQgb2YgcmVmZXJlbmNlLiBJIHdpbGwgc3RhcnQgYnkgZGlnZ2luZyBkZWVwZXIgaW50byB0aG9zZSBvdGhlciBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFja2V0X3NlbmRtc2dfc3BrdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcGFja2V0L2FmX3BhY2tldC5jPTE5MjM9c3RhdGljIHZvaWQgcGFja2V0X3BhcnNlX2hlYWRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2tldCAqc29jaylcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE5NDYtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE5NDc6c3RhdGljIGludCBwYWNrZXRfc2VuZG1zZ19zcGt0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTk0OC1cdFx0XHQgICAgICAgc2l6ZV90IGxlbilcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTQ2NTg9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wc19zcGt0ID0ge1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDY3MS1cdC5zaHV0ZG93biA9XHRzb2NrX25vX3NodXRkb3duLFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NjcyOlx0LnNlbmRtc2cgPVx0cGFja2V0X3NlbmRtc2dfc3BrdCxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDY3My1cdC5yZWN2bXNnID1cdHBhY2tldF9yZWN2bXNnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMDgKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBhY2tldCBTb2NrZXQgU2VuZCBIYW5kbGVycyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHBhY2tldHMgYXJlIHNlbnQgb3V0LCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIEFGX1BBQ0tFVCBmYW1pbHksIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSSBzZWUgdGhyZWUgcHJpbWFyeSBoYW5kbGVycyBoZXJlOiBgcGFja2V0X3NlbmRtc2dfc3BrdGAsIGBwYWNrZXRfc25kYCwgYW5kIGB0cGFja2V0X3NuZGAuCgpgcGFja2V0X3NlbmRtc2dfc3BrdGAgc2VlbXMgdG8gYmUgdGhlIG9sZCBndWFyZCwgdGllZCB0byB0aGUgb2Jzb2xldGUgYFNPQ0tfUEFDS0VUYCB0eXBlLiBJJiMzOTtsbCBwcm9iYWJseSBza2ltIG92ZXIgdGhhdCB1bmxlc3MgSSBuZWVkIHRvIHN1cHBvcnQgc29tZSBzZXJpb3VzbHkgbGVnYWN5IHN0dWZmLiBUaGUgcmVhbCB3b3JrIGlzIGxpa2VseSBpbiB0aGUgbW9yZSBtb2Rlcm4gaW1wbGVtZW50YXRpb25zLgoKTm93LCBgcGFja2V0X3NuZGAgaGFuZGxlcyBgU09DS19SQVdgIGFuZCBgU09DS19ER1JBTWAgc29ja2V0cyB3aXRoaW4gYEFGX1BBQ0tFVGAuIFNvLCB5b3VyIGJhc2ljLCByYXcgcGFja2V0IG1hbmlwdWxhdGlvbiBhbmQgZGF0YWdyYW0gc2VuZGluZy4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIGFuZCB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmdW5kYW1lbnRhbCBiZWhhdmlvci4KCkJ1dCBJJiMzOTttIHJlYWxseSBjdXJpb3VzIGFib3V0IGB0cGFja2V0X3NuZGAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1lbW9yeS1tYXBwZWQgcmluZyBidWZmZXIgVFhfUklORyBjb21lcyBpbnRvIHBsYXkuIFRoYXTigJlzIHdoZXJlIHRoZSBoaWdoLXBlcmZvcm1hbmNlIHN0dWZmIGlzIGhhcHBlbmluZyB3aXRoIGBBRl9QQUNLRVRgLiBEZWZpbml0ZWx5IHdvcnRoIGRpdmluZyBpbnRvIHRvIHNlZSBob3cgdGhhdCYjMzk7cyBpbXBsZW1lbnRlZCBhbmQgaG93IGl0IG9wdGltaXplcyBwYWNrZXQgdHJhbnNtaXNzaW9uLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhY2tldF9zbmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNTE1PXN0YXRpYyB2b2lkIHRwYWNrZXRfZGVzdHJ1Y3Rfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTM0LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTM1OnN0YXRpYyBpbnQgX19wYWNrZXRfc25kX3ZuZXRfcGFyc2Uoc3RydWN0IHZpcnRpb19uZXRfaGRyICp2bmV0X2hkciwgc2l6ZV90IGxlbilcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjUzNi17XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTUwLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTUxOnN0YXRpYyBpbnQgcGFja2V0X3NuZF92bmV0X3BhcnNlKHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90ICpsZW4sXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1NTItXHRcdFx0XHQgc3RydWN0IHZpcnRpb19uZXRfaGRyICp2bmV0X2hkciwgaW50IHZuZXRfaGRyX3N6KVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU2Mi1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjU2MzpcdHJldCA9IF9fcGFja2V0X3NuZF92bmV0X3BhcnNlKHZuZXRfaGRyLCAqbGVuKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU2NC1cdGlmIChyZXQpXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNjU1PXN0YXRpYyBpbnQgdHBhY2tldF9wYXJzZV9oZWFkZXIoc3RydWN0IHBhY2tldF9zb2NrICpwbywgdm9pZCAqZnJhbWUsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNzIyLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNzIzOnN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNzI0LXtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4MzYtXHRcdFx0bWVtY3B5KFx1MDAyNnZuZXRfaGRyLCBkYXRhIC0gdm5ldF9oZHJfc3osIHNpemVvZih2bmV0X2hkcikpO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyODM3Olx0XHRcdGlmIChfX3BhY2tldF9zbmRfdm5ldF9wYXJzZShcdTAwMjZ2bmV0X2hkciwgdHBfbGVuKSkge1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODM4LVx0XHRcdFx0dHBfbGVuID0gLUVJTlZBTDtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI5Mjc9c3RhdGljIHN0cnVjdCBza19idWZmICpwYWNrZXRfYWxsb2Nfc2tiKHN0cnVjdCBzb2NrICpzaywgc2l6ZV90IHByZXBhZCxcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI5NTItXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI5NTM6c3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjk1NC17XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMDEwLVx0aWYgKHZuZXRfaGRyX3N6KSB7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMwMTE6XHRcdGVyciA9IHBhY2tldF9zbmRfdm5ldF9wYXJzZShtc2csIFx1MDAyNmxlbiwgXHUwMDI2dm5ldF9oZHIsIHZuZXRfaGRyX3N6KTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzAxMi1cdFx0aWYgKGVycilcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTMxMTI9c3RhdGljIGludCBwYWNrZXRfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTE3LVx0LyogUmVhZGluZyB0eF9yaW5nLnBnX3ZlYyB3aXRob3V0IGhvbGRpbmcgcGdfdmVjX2xvY2sgaXMgcmFjeS5cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzExODpcdCAqIHRwYWNrZXRfc25kKCkgd2lsbCByZWRvIHRoZSBjaGVjayBzYWZlbHkuXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMTktXHQgKi9cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEyMC1cdGlmIChkYXRhX3JhY2UocG8tXHUwMDNldHhfcmluZy5wZ192ZWMpKVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMTIxOlx0XHRyZXR1cm4gdHBhY2tldF9zbmQocG8sIG1zZyk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMjItXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMxMjM6XHRyZXR1cm4gcGFja2V0X3NuZChzb2NrLCBtc2csIGxlbik7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMjQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNjgKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRm9jdXNpbmcgb24gUGFja2V0IFRyYW5zbWlzc2lvbiBTeW1ib2xzIGFuZCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBzeW1ib2xzIHJlbGF0ZWQgdG8gcGFja2V0IHRyYW5zbWlzc2lvbi4gVGhlIGtleSBvbmVzIHRvIGxvb2sgYXQgYXJlIGNsZWFybHkgYHBhY2tldF9zZW5kbXNnX3Nwa3RgLCBgdHBhY2tldF9zbmRgLCBhbmQgYHBhY2tldF9zbmRgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucywgb3IgbGlrZWx5IHRoZSBjb3JlIGVsZW1lbnRzIG9mIHRoZSBmdW5jdGlvbnMsIHRoYXQgYXJlIHRoZSBtb3N0IGltcG9ydGFudCBmb3IgbXkgcmVzZWFyY2guCgpOb3csIHRvIHVuZGVyc3RhbmQgdGhlaXIgY29udGV4dCwgSSBuZWVkIHRvIGtub3cgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGBQQUNLRVRgLCBidXQgbGV0JiMzOTtzIGNvbmZpcm0gdGhhdC4gVGhhdCBsaWtlbHkgbWFwcyB0byBgQ09ORklHX1BBQ0tFVGAgc29tZXdoZXJlLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGtlcm5lbCYjMzk7cyBzb3VyY2UuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSwgcHJvYmFibHkgd2l0aGluIHRoZSBgbmV0L3BhY2tldC9gIGRpcmVjdG9yeSwgb3IgbWF5YmUgc29tZXRoaW5nIHNpbWlsYXIuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgcGFja2V0LXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYXJlIGRlZmluZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUNLRVQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9LY29uZmlnLTUtXG5uZXQvcGFja2V0L0tjb25maWc6Njpjb25maWcgUEFDS0VUXG5uZXQvcGFja2V0L0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1BhY2tldCBzb2NrZXRcJiMzNDtcbi0tXG5uZXQvcGFja2V0L0tjb25maWctMTgtXG5uZXQvcGFja2V0L0tjb25maWc6MTk6Y29uZmlnIFBBQ0tFVF9ESUFHXG5uZXQvcGFja2V0L0tjb25maWctMjAtXHR0cmlzdGF0ZSBcJiMzNDtQYWNrZXQ6IHNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc0MgoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiAxNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGFja2V0IFNvY2tldCBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgY29uZmlnIGluIHF1ZXN0aW9uIGhlcmUgaXMgY2xlYXJseSBgUEFDS0VUYC4gTm8gb3RoZXIgcmVsZXZhbnQgY29uZmlncyBqdW1wIG91dCBhdCBtZSBpbW1lZGlhdGVseSwgYnV0IGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzbmVha3kgZGVwZW5kZW5jaWVzIEkmIzM5O20gbWlzc2luZy4gUmlnaHQsIHRoZSBwYXRjaCBpdHNlbGYgaXMgdG91Y2hpbmcgYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgIOKAkyB0aGUgaGVhcnQgb2YgdGhlIHBhY2tldCBzb2NrZXQgaW1wbGVtZW50YXRpb24g4oCTIGFuZCBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAuIFRoYXQmIzM5O3MgYSBmb2N1c2VkIGFyZWEsIHdoaWNoIGlzIGdvb2QuCgpUaGUga2V5IHRoaW5nIGlzIGBDT05GSUdfUEFDS0VUYCwgaXQmIzM5O3MgdGhlIGFuY2hvciBwb2ludC4KCk5vdywgY29uc2lkZXJpbmcgdGhlIGZpbGUgbW9kaWZpY2F0aW9ucywgaXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSByYWNlIGNvbmRpdGlvbiB0aWVkIHRvIGBkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbmAgd2l0aGluIHRoZSBgQUZfUEFDS0VUYCBzb2NrZXQgaW1wbGVtZW50YXRpb24uIFRoZXJlJiMzOTtzIGFsc28gYSByZW1vdmFsIG9mIGEgYENBUF9TWVNfUkFXSU9gIGNoZWNrIGluIGBkZXZfdmFsaWRhdGVfaGVhZGVyYC4gVGhhdCBsYXN0IG9uZSBpcyBpbnRlcmVzdGluZyBmcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUuIFRoZXNlIGNoYW5nZXMgYXJlIGltcGFjdGluZyBob3cgcGFja2V0cyBhcmUgc2VudCwgc3BlY2lmaWNhbGx5IHRocm91Z2ggYHBhY2tldF9zZW5kbXNnX3Nwa3RgLCBgcGFja2V0X3NuZGAsIGFuZCBgdHBhY2tldF9zbmRgLiBUaG9zZSBhcmUgYWxsIGNyaXRpY2FsIGNvcmUgbmV0d29yayBwYXRocyB0aGF0IGFyZSB1c2VkIHRvIHRyYW5zbWl0IHBhY2tldHMuIEdpdmVuIHRoYXQsIEkgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgaGVyZS4gVGhlIGNoYW5nZXMgdG8gaGVhZGVyIGxlbmd0aCBoYW5kbGluZyBpbW1lZGlhdGVseSByYWlzZSBhIGZsYWcuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGVzZSBtb2RpZmljYXRpb25zIGRvbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIG9yLCBtb3JlIGltcG9ydGFudGx5LCBtZW1vcnkgc2FmZXR5IHZ1bG5lcmFiaWxpdGllcy4gSXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuCgpBbHJpZ2h0LCB0aW1lIHRvIGZvcm11bGF0ZSB0aGUgc2V0LXJlc3VsdHMgY2FsbCwgSSBrbm93IGhvdyB0byBoYW5kbGUgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBQ0tFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhY2tldF9zZW5kbXNnX3Nwa3QmIzM0OywKICAgICYjMzQ7dHBhY2tldF9zbmQmIzM0OywKICAgICYjMzQ7cGFja2V0X3NuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBBRl9QQUNLRVQgc29ja2V0IGltcGxlbWVudGF0aW9uIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uIHdpdGggYGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGFuZCByZW1vdmVzIGEgYENBUF9TWVNfUkFXSU9gIGNoZWNrIGluIGBkZXZfdmFsaWRhdGVfaGVhZGVyYC4gVGhpcyBhZmZlY3RzIHBhY2tldCB0cmFuc21pc3Npb24gdmlhIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHBhY2tldF9zbmRgLCBhbmQgYHRwYWNrZXRfc25kYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgcGF0aHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkIGJ5IHRoZSBjaGFuZ2VzIGluIGhlYWRlciBsZW5ndGggaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBQ0tFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhY2tldF9zZW5kbXNnX3Nwa3QmIzM0OywKICAgICYjMzQ7dHBhY2tldF9zbmQmIzM0OywKICAgICYjMzQ7cGFja2V0X3NuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBBRl9QQUNLRVQgc29ja2V0IGltcGxlbWVudGF0aW9uIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uIHdpdGggYGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGFuZCByZW1vdmVzIGEgYENBUF9TWVNfUkFXSU9gIGNoZWNrIGluIGBkZXZfdmFsaWRhdGVfaGVhZGVyYC4gVGhpcyBhZmZlY3RzIHBhY2tldCB0cmFuc21pc3Npb24gdmlhIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHBhY2tldF9zbmRgLCBhbmQgYHRwYWNrZXRfc25kYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgcGF0aHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkIGJ5IHRoZSBjaGFuZ2VzIGluIGhlYWRlciBsZW5ndGggaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDo1MzowNy44NjYxOTM3OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNjg2NzYwMTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBQ0tFVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhY2tldF9zZW5kbXNnX3Nwa3RcIixcbiAgICBcInRwYWNrZXRfc25kXCIsXG4gICAgXCJwYWNrZXRfc25kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgQUZfUEFDS0VUIHNvY2tldCBpbXBsZW1lbnRhdGlvbiB0byBmaXggYSByYWNlIGNvbmRpdGlvbiB3aXRoIGBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbmAgYW5kIHJlbW92ZXMgYSBgQ0FQX1NZU19SQVdJT2AgY2hlY2sgaW4gYGRldl92YWxpZGF0ZV9oZWFkZXJgLiBUaGlzIGFmZmVjdHMgcGFja2V0IHRyYW5zbWlzc2lvbiB2aWEgYHBhY2tldF9zZW5kbXNnX3Nwa3RgLCBgcGFja2V0X3NuZGAsIGFuZCBgdHBhY2tldF9zbmRgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgbmV0d29yayBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgYXJlIGludHJvZHVjZWQgYnkgdGhlIGNoYW5nZXMgaW4gaGVhZGVyIGxlbmd0aCBoYW5kbGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6NTM6MDcuODY2MjAyOTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzU4MzI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDE1ZmYxMGYyMTA5Y2QyNWQ1MTliNmZmYzAyNjEwY2JkOTk3MjUwOWNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgNSAxNDo1MzowNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbmluZGV4IDk5ODFkNjM3ZjhiNTQuLjg4NDBiMTI2OTc5ZmYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5AQCAtMzAwLDkgKzMwMCwxMSBAQCBzdHJ1Y3QgaGhfY2FjaGUge1xcbiAgKiBXZSBjb3VsZCB1c2Ugb3RoZXIgYWxpZ25tZW50IHZhbHVlcywgYnV0IHdlIG11c3QgbWFpbnRhaW4gdGhlXFxuICAqIHJlbGF0aW9uc2hpcCBISCBhbGlnbm1lbnQgXFx1MDAzYz0gTEwgYWxpZ25tZW50LlxcbiAgKi9cXG4tI2RlZmluZSBMTF9SRVNFUlZFRF9TUEFDRShkZXYpIFxcXFxcXG4tXFx0KCgoKGRldiktXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiArIFJFQURfT05DRSgoZGV2KS1cXHUwMDNlbmVlZGVkX2hlYWRyb29tKSkgXFxcXFxcbisjZGVmaW5lIExMX1JFU0VSVkVEX1NQQUNFX0VYKGRldiwgaGxlbikgXFxcXFxcbitcXHQoKCgoaGxlbikgKyBSRUFEX09OQ0UoKGRldiktXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSkpIFxcXFxcXG4gXFx0ICBcXHUwMDI2IH4oSEhfREFUQV9NT0QgLSAxKSkgKyBISF9EQVRBX01PRClcXG4rI2RlZmluZSBMTF9SRVNFUlZFRF9TUEFDRShkZXYpIFxcXFxcXG4rXFx0TExfUkVTRVJWRURfU1BBQ0VfRVgoZGV2LCAoZGV2KS1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKVxcbiAjZGVmaW5lIExMX1JFU0VSVkVEX1NQQUNFX0VYVFJBKGRldixleHRyYSkgXFxcXFxcbiBcXHQoKCgoZGV2KS1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgUkVBRF9PTkNFKChkZXYpLVxcdTAwM2VuZWVkZWRfaGVhZHJvb20pICsgKGV4dHJhKSkgXFxcXFxcbiBcXHQgIFxcdTAwMjYgfihISF9EQVRBX01PRCAtIDEpKSArIEhIX0RBVEFfTU9EKVxcbkBAIC0zNTMxLDExICszNTMzLDYgQEAgc3RhdGljIGlubGluZSBib29sIGRldl92YWxpZGF0ZV9oZWFkZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0aWYgKGxlbiBcXHUwMDNjIGRldi1cXHUwMDNlbWluX2hlYWRlcl9sZW4pXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdGlmIChjYXBhYmxlKENBUF9TWVNfUkFXSU8pKSB7XFxuLVxcdFxcdG1lbXNldChsbF9oZWFkZXIgKyBsZW4sIDAsIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gbGVuKTtcXG4tXFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdH1cXG4tXFxuIFxcdGlmIChkZXYtXFx1MDAzZWhlYWRlcl9vcHMgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VoZWFkZXJfb3BzLVxcdTAwM2V2YWxpZGF0ZSlcXG4gXFx0XFx0cmV0dXJuIGRldi1cXHUwMDNlaGVhZGVyX29wcy1cXHUwMDNldmFsaWRhdGUobGxfaGVhZGVyLCBsZW4pO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmNcXG5pbmRleCBlNzVkMjkzMjQ3NWFjLi5lOWI2ODEwYzg4NWU1IDEwMDY0NFxcbi0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmNcXG4rKysgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jXFxuQEAgLTE5NTMsOCArMTk1Myw5IEBAIHN0YXRpYyBpbnQgcGFja2V0X3NlbmRtc2dfc3BrdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuIFxcdHN0cnVjdCBzb2NrY21fY29va2llIHNvY2tjO1xcbiBcXHRfX2JlMTYgcHJvdG8gPSAwO1xcbi1cXHRpbnQgZXJyO1xcbitcXHRpbnQgaGFyZF9oZWFkZXJfbGVuO1xcbiBcXHRpbnQgZXh0cmFfbGVuID0gMDtcXG4rXFx0aW50IGVycjtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqXFx0R2V0IGFuZCB2ZXJpZnkgdGhlIGFkZHJlc3MuXFxuQEAgLTE5OTcsMTQgKzE5OTgsMTggQEAgc3RhdGljIGludCBwYWNrZXRfc2VuZG1zZ19zcGt0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4gXFx0XFx0ZXh0cmFfbGVuID0gNDsgLyogV2UncmUgZG9pbmcgb3VyIG93biBDUkMgKi9cXG4gXFx0fVxcbiBcXG4rXFx0LyogS2VlcCB0aGUgYWxsb2NhdGlvbi10aW1lIGhlYWRlciBsZW5ndGggYWNyb3NzIHJldHJ5LiAqL1xcbitcXHRpZiAoIXNrYilcXG4rXFx0XFx0aGFyZF9oZWFkZXJfbGVuID0gUkVBRF9PTkNFKGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcXG4rXFxuIFxcdGVyciA9IC1FTVNHU0laRTtcXG4tXFx0aWYgKGxlbiBcXHUwMDNlIGRldi1cXHUwMDNlbXR1ICsgZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gKyBWTEFOX0hMRU4gKyBleHRyYV9sZW4pXFxuK1xcdGlmIChsZW4gXFx1MDAzZSBkZXYtXFx1MDAzZW10dSArIGhhcmRfaGVhZGVyX2xlbiArIFZMQU5fSExFTiArIGV4dHJhX2xlbilcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXG4gXFx0aWYgKCFza2IpIHtcXG4tXFx0XFx0c2l6ZV90IHJlc2VydmVkID0gTExfUkVTRVJWRURfU1BBQ0UoZGV2KTtcXG4rXFx0XFx0c2l6ZV90IHJlc2VydmVkID0gTExfUkVTRVJWRURfU1BBQ0VfRVgoZGV2LCBoYXJkX2hlYWRlcl9sZW4pO1xcbiBcXHRcXHRpbnQgdGxlbiA9IGRldi1cXHUwMDNlbmVlZGVkX3RhaWxyb29tO1xcbi1cXHRcXHR1bnNpZ25lZCBpbnQgaGhsZW4gPSBkZXYtXFx1MDAzZWhlYWRlcl9vcHMgPyBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiA6IDA7XFxuK1xcdFxcdHVuc2lnbmVkIGludCBoaGxlbiA9IGRldi1cXHUwMDNlaGVhZGVyX29wcyA/IGhhcmRfaGVhZGVyX2xlbiA6IDA7XFxuIFxcbiBcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0XFx0c2tiID0gc29ja193bWFsbG9jKHNrLCBsZW4gKyByZXNlcnZlZCArIHRsZW4sIDAsIEdGUF9LRVJORUwpO1xcbkBAIC0yMDM0LDcgKzIwMzksNyBAQCBzdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnX3Nwa3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbiBcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4tXFx0aWYgKGxlbiBcXHUwMDNlIChkZXYtXFx1MDAzZW10dSArIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgZXh0cmFfbGVuKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRpZiAobGVuIFxcdTAwM2UgKGRldi1cXHUwMDNlbXR1ICsgaGFyZF9oZWFkZXJfbGVuICsgZXh0cmFfbGVuKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIXBhY2tldF9leHRyYV92bGFuX2xlbl9hbGxvd2VkKGRldiwgc2tiKSkge1xcbiBcXHRcXHRlcnIgPSAtRU1TR1NJWkU7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG5AQCAtMjU2OSw2ICsyNTc0LDcgQEAgc3RhdGljIGludCBwYWNrZXRfc25kX3ZuZXRfcGFyc2Uoc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgKmxlbixcXG4gc3RhdGljIGludCB0cGFja2V0X2ZpbGxfc2tiKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdHZvaWQgKmZyYW1lLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBpbnQgdHBfbGVuLFxcbiBcXHRcXHRfX2JlMTYgcHJvdG8sIHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBobGVuLCBpbnQgY29weWxlbixcXG4rXFx0XFx0aW50IGhhcmRfaGVhZGVyX2xlbixcXG4gXFx0XFx0Y29uc3Qgc3RydWN0IHNvY2tjbV9jb29raWUgKnNvY2tjKVxcbiB7XFxuIFxcdHVuaW9uIHRwYWNrZXRfdWhkciBwaDtcXG5AQCAtMjYwMCw4ICsyNjA2LDggQEAgc3RhdGljIGludCB0cGFja2V0X2ZpbGxfc2tiKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdH0gZWxzZSBpZiAoY29weWxlbikge1xcbiBcXHRcXHRpbnQgaGRybGVuID0gbWluX3QoaW50LCBjb3B5bGVuLCB0cF9sZW4pO1xcbiBcXG4tXFx0XFx0c2tiX3B1c2goc2tiLCBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XFxuLVxcdFxcdHNrYl9wdXQoc2tiLCBjb3B5bGVuIC0gZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xcbitcXHRcXHRza2JfcHVzaChza2IsIGhhcmRfaGVhZGVyX2xlbik7XFxuK1xcdFxcdHNrYl9wdXQoc2tiLCBjb3B5bGVuIC0gaGFyZF9oZWFkZXJfbGVuKTtcXG4gXFx0XFx0ZXJyID0gc2tiX3N0b3JlX2JpdHMoc2tiLCAwLCBkYXRhLCBoZHJsZW4pO1xcbiBcXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG5AQCAtMjczMiw3ICsyNzM4LDcgQEAgc3RhdGljIGludCB0cGFja2V0X3NuZChzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3QgbXNnaGRyICptc2cpXFxuIFxcdHZvaWQgKmRhdGE7XFxuIFxcdGludCBsZW5fc3VtID0gMDtcXG4gXFx0aW50IHN0YXR1cyA9IFRQX1NUQVRVU19BVkFJTEFCTEU7XFxuLVxcdGludCBobGVuLCB0bGVuLCBjb3B5bGVuID0gMDtcXG4rXFx0aW50IGhhcmRfaGVhZGVyX2xlbiwgaGxlbiwgdGxlbiwgY29weWxlbiA9IDA7XFxuIFxcdGxvbmcgdGltZW87XFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZwby1cXHUwMDNlcGdfdmVjX2xvY2spO1xcbkBAIC0yNzc5LDggKzI3ODUsOSBAQCBzdGF0aWMgaW50IHRwYWNrZXRfc25kKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBtc2doZHIgKm1zZylcXG4gXFx0XFx0XFx0Z290byBvdXRfcHV0O1xcbiBcXHR9XFxuIFxcbitcXHRoYXJkX2hlYWRlcl9sZW4gPSBSRUFEX09OQ0UoZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xcbiBcXHRpZiAocG8tXFx1MDAzZXNrLnNrX3NvY2tldC1cXHUwMDNldHlwZSA9PSBTT0NLX1JBVylcXG4tXFx0XFx0cmVzZXJ2ZSA9IGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xcbitcXHRcXHRyZXNlcnZlID0gaGFyZF9oZWFkZXJfbGVuO1xcbiBcXHRzaXplX21heCA9IHBvLVxcdTAwM2V0eF9yaW5nLmZyYW1lX3NpemVcXG4gXFx0XFx0LSAocG8tXFx1MDAzZXRwX2hkcmxlbiAtIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpKTtcXG4gXFxuQEAgLTI4MTcsNyArMjgyNCw3IEBAIHN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxcbiBcXHRcXHRcXHRnb3RvIHRwYWNrZXRfZXJyb3I7XFxuIFxcbiBcXHRcXHRzdGF0dXMgPSBUUF9TVEFUVVNfU0VORF9SRVFVRVNUO1xcbi1cXHRcXHRobGVuID0gTExfUkVTRVJWRURfU1BBQ0UoZGV2KTtcXG4rXFx0XFx0aGxlbiA9IExMX1JFU0VSVkVEX1NQQUNFX0VYKGRldiwgaGFyZF9oZWFkZXJfbGVuKTtcXG4gXFx0XFx0dGxlbiA9IGRldi1cXHUwMDNlbmVlZGVkX3RhaWxyb29tO1xcbiBcXHRcXHRpZiAodm5ldF9oZHJfc3opIHtcXG4gXFx0XFx0XFx0ZGF0YSArPSB2bmV0X2hkcl9zejtcXG5AQCAtMjgzNSwxMCArMjg0MiwxMCBAQCBzdGF0aWMgaW50IHRwYWNrZXRfc25kKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBtc2doZHIgKm1zZylcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHZuZXRfaGRyLmhkcl9sZW4pO1xcbiBcXHRcXHRcXHRoYXNfdm5ldF9oZHIgPSB0cnVlO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGNvcHlsZW4gPSBtYXhfdChpbnQsIGNvcHlsZW4sIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcXG4rXFx0XFx0Y29weWxlbiA9IG1heF90KGludCwgY29weWxlbiwgaGFyZF9oZWFkZXJfbGVuKTtcXG4gXFx0XFx0c2tiID0gc29ja19hbGxvY19zZW5kX3NrYihcXHUwMDI2cG8tXFx1MDAzZXNrLFxcbiBcXHRcXHRcXHRcXHRobGVuICsgdGxlbiArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpICtcXG4tXFx0XFx0XFx0XFx0KGNvcHlsZW4gLSBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiksXFxuK1xcdFxcdFxcdFxcdChjb3B5bGVuIC0gaGFyZF9oZWFkZXJfbGVuKSxcXG4gXFx0XFx0XFx0XFx0IW5lZWRfd2FpdCwgXFx1MDAyNmVycik7XFxuIFxcbiBcXHRcXHRpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKSB7XFxuQEAgLTI4NDgsNyArMjg1NSw4IEBAIHN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxcbiBcXHRcXHRcXHRnb3RvIG91dF9zdGF0dXM7XFxuIFxcdFxcdH1cXG4gXFx0XFx0dHBfbGVuID0gdHBhY2tldF9maWxsX3NrYihwbywgc2tiLCBwaCwgZGV2LCBkYXRhLCB0cF9sZW4sIHByb3RvLFxcbi1cXHRcXHRcXHRcXHRcXHQgIGFkZHIsIGhsZW4sIGNvcHlsZW4sIFxcdTAwMjZzb2NrYyk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgYWRkciwgaGxlbiwgY29weWxlbiwgaGFyZF9oZWFkZXJfbGVuLFxcbitcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZzb2NrYyk7XFxuIFxcdFxcdGlmIChsaWtlbHkodHBfbGVuIFxcdTAwM2U9IDApIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICB0cF9sZW4gXFx1MDAzZSBkZXYtXFx1MDAzZW10dSArIHJlc2VydmUgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICF2bmV0X2hkcl9zeiBcXHUwMDI2XFx1MDAyNlxcbkBAIC0yOTU2LDcgKzI5NjQsNyBAQCBzdGF0aWMgaW50IHBhY2tldF9zbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbiBcXHRpbnQgb2Zmc2V0ID0gMDtcXG4gXFx0c3RydWN0IHBhY2tldF9zb2NrICpwbyA9IHBrdF9zayhzayk7XFxuIFxcdGludCB2bmV0X2hkcl9zeiA9IFJFQURfT05DRShwby1cXHUwMDNldm5ldF9oZHJfc3opO1xcbi1cXHRpbnQgaGxlbiwgdGxlbiwgbGluZWFyO1xcbitcXHRpbnQgaGFyZF9oZWFkZXJfbGVuLCBobGVuLCB0bGVuLCBsaW5lYXI7XFxuIFxcdGludCBleHRyYV9sZW4gPSAwO1xcbiBcXG4gXFx0LypcXG5AQCAtMjk5Niw4ICszMDA0LDkgQEAgc3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4gXFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9XFxuIFxcbitcXHRoYXJkX2hlYWRlcl9sZW4gPSBSRUFEX09OQ0UoZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xcbiBcXHRpZiAoc29jay1cXHUwMDNldHlwZSA9PSBTT0NLX1JBVylcXG4tXFx0XFx0cmVzZXJ2ZSA9IGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xcbitcXHRcXHRyZXNlcnZlID0gaGFyZF9oZWFkZXJfbGVuO1xcbiBcXHRpZiAodm5ldF9oZHJfc3opIHtcXG4gXFx0XFx0ZXJyID0gcGFja2V0X3NuZF92bmV0X3BhcnNlKG1zZywgXFx1MDAyNmxlbiwgXFx1MDAyNnZuZXRfaGRyLCB2bmV0X2hkcl9zeik7XFxuIFxcdFxcdGlmIChlcnIpXFxuQEAgLTMwMTgsMTAgKzMwMjcsMTAgQEAgc3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXG4gXFx0ZXJyID0gLUVOT0JVRlM7XFxuLVxcdGhsZW4gPSBMTF9SRVNFUlZFRF9TUEFDRShkZXYpO1xcbitcXHRobGVuID0gTExfUkVTRVJWRURfU1BBQ0VfRVgoZGV2LCBoYXJkX2hlYWRlcl9sZW4pO1xcbiBcXHR0bGVuID0gZGV2LVxcdTAwM2VuZWVkZWRfdGFpbHJvb207XFxuIFxcdGxpbmVhciA9IF9fdmlydGlvMTZfdG9fY3B1KHZpb19sZSgpLCB2bmV0X2hkci5oZHJfbGVuKTtcXG4tXFx0bGluZWFyID0gbWF4KGxpbmVhciwgbWluX3QoaW50LCBsZW4sIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSk7XFxuK1xcdGxpbmVhciA9IG1heChsaW5lYXIsIG1pbl90KGludCwgbGVuLCBoYXJkX2hlYWRlcl9sZW4pKTtcXG4gXFx0c2tiID0gcGFja2V0X2FsbG9jX3NrYihzaywgaGxlbiArIHRsZW4sIGhsZW4sIGxlbiwgbGluZWFyLFxcbiBcXHRcXHRcXHQgICAgICAgbXNnLVxcdTAwM2Vtc2dfZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQsIFxcdTAwMjZlcnIpO1xcbiBcXHRpZiAoc2tiID09IE5VTEwpXFxuQEAgLTMwMzcsNyArMzA0Niw3IEBAIHN0YXRpYyBpbnQgcGFja2V0X3NuZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuIFxcdH0gZWxzZSBpZiAocmVzZXJ2ZSkge1xcbiBcXHRcXHRza2JfcmVzZXJ2ZShza2IsIC1yZXNlcnZlKTtcXG4gXFx0XFx0aWYgKGxlbiBcXHUwMDNjIHJlc2VydmUgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICBkZXYtXFx1MDAzZW1pbl9oZWFkZXJfbGVuICE9IGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKVxcbitcXHRcXHQgICAgZGV2LVxcdTAwM2VtaW5faGVhZGVyX2xlbiAhPSBoYXJkX2hlYWRlcl9sZW4pXFxuIFxcdFxcdFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDo1MzowOC4yOTQ2MjY4NDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1MjI1ODMxOTYzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUNLRVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWNrZXRfc2VuZG1zZ19zcGt0XCIsXG4gICAgXCJ0cGFja2V0X3NuZFwiLFxuICAgIFwicGFja2V0X3NuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEFGX1BBQ0tFVCBzb2NrZXQgaW1wbGVtZW50YXRpb24gdG8gZml4IGEgcmFjZSBjb25kaXRpb24gd2l0aCBgZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGFuZCByZW1vdmVzIGEgYENBUF9TWVNfUkFXSU9gIGNoZWNrIGluIGBkZXZfdmFsaWRhdGVfaGVhZGVyYC4gVGhpcyBhZmZlY3RzIHBhY2tldCB0cmFuc21pc3Npb24gdmlhIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHBhY2tldF9zbmRgLCBhbmQgYHRwYWNrZXRfc25kYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgcGF0aHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkIGJ5IHRoZSBjaGFuZ2VzIGluIGhlYWRlciBsZW5ndGggaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE1ZmYxMGYyMTA5Y2QyNWQ1MTliNmZmYzAyNjEwY2JkOTk3MjUwOWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyA1IDE0OjUzOjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbmluZGV4IDk5ODFkNjM3ZjhiNTQuLjg4NDBiMTI2OTc5ZmYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5AQCAtMzAwLDkgKzMwMCwxMSBAQCBzdHJ1Y3QgaGhfY2FjaGUge1xuICAqIFdlIGNvdWxkIHVzZSBvdGhlciBhbGlnbm1lbnQgdmFsdWVzLCBidXQgd2UgbXVzdCBtYWludGFpbiB0aGVcbiAgKiByZWxhdGlvbnNoaXAgSEggYWxpZ25tZW50IFx1MDAzYz0gTEwgYWxpZ25tZW50LlxuICAqL1xuLSNkZWZpbmUgTExfUkVTRVJWRURfU1BBQ0UoZGV2KSBcXFxuLVx0KCgoKGRldiktXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgUkVBRF9PTkNFKChkZXYpLVx1MDAzZW5lZWRlZF9oZWFkcm9vbSkpIFxcXG4rI2RlZmluZSBMTF9SRVNFUlZFRF9TUEFDRV9FWChkZXYsIGhsZW4pIFxcXG4rXHQoKCgoaGxlbikgKyBSRUFEX09OQ0UoKGRldiktXHUwMDNlbmVlZGVkX2hlYWRyb29tKSkgXFxcbiBcdCAgXHUwMDI2IH4oSEhfREFUQV9NT0QgLSAxKSkgKyBISF9EQVRBX01PRClcbisjZGVmaW5lIExMX1JFU0VSVkVEX1NQQUNFKGRldikgXFxcbitcdExMX1JFU0VSVkVEX1NQQUNFX0VYKGRldiwgKGRldiktXHUwMDNlaGFyZF9oZWFkZXJfbGVuKVxuICNkZWZpbmUgTExfUkVTRVJWRURfU1BBQ0VfRVhUUkEoZGV2LGV4dHJhKSBcXFxuIFx0KCgoKGRldiktXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgUkVBRF9PTkNFKChkZXYpLVx1MDAzZW5lZWRlZF9oZWFkcm9vbSkgKyAoZXh0cmEpKSBcXFxuIFx0ICBcdTAwMjYgfihISF9EQVRBX01PRCAtIDEpKSArIEhIX0RBVEFfTU9EKVxuQEAgLTM1MzEsMTEgKzM1MzMsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZGV2X3ZhbGlkYXRlX2hlYWRlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKGxlbiBcdTAwM2MgZGV2LVx1MDAzZW1pbl9oZWFkZXJfbGVuKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRpZiAoY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkge1xuLVx0XHRtZW1zZXQobGxfaGVhZGVyICsgbGVuLCAwLCBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gbGVuKTtcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHR9XG4tXG4gXHRpZiAoZGV2LVx1MDAzZWhlYWRlcl9vcHMgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VoZWFkZXJfb3BzLVx1MDAzZXZhbGlkYXRlKVxuIFx0XHRyZXR1cm4gZGV2LVx1MDAzZWhlYWRlcl9vcHMtXHUwMDNldmFsaWRhdGUobGxfaGVhZGVyLCBsZW4pO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jXG5pbmRleCBlNzVkMjkzMjQ3NWFjLi5lOWI2ODEwYzg4NWU1IDEwMDY0NFxuLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuQEAgLTE5NTMsOCArMTk1Myw5IEBAIHN0YXRpYyBpbnQgcGFja2V0X3NlbmRtc2dfc3BrdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIFx0c3RydWN0IHNvY2tjbV9jb29raWUgc29ja2M7XG4gXHRfX2JlMTYgcHJvdG8gPSAwO1xuLVx0aW50IGVycjtcbitcdGludCBoYXJkX2hlYWRlcl9sZW47XG4gXHRpbnQgZXh0cmFfbGVuID0gMDtcbitcdGludCBlcnI7XG4gXG4gXHQvKlxuIFx0ICpcdEdldCBhbmQgdmVyaWZ5IHRoZSBhZGRyZXNzLlxuQEAgLTE5OTcsMTQgKzE5OTgsMTggQEAgc3RhdGljIGludCBwYWNrZXRfc2VuZG1zZ19zcGt0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbiBcdFx0ZXh0cmFfbGVuID0gNDsgLyogV2UncmUgZG9pbmcgb3VyIG93biBDUkMgKi9cbiBcdH1cbiBcbitcdC8qIEtlZXAgdGhlIGFsbG9jYXRpb24tdGltZSBoZWFkZXIgbGVuZ3RoIGFjcm9zcyByZXRyeS4gKi9cbitcdGlmICghc2tiKVxuK1x0XHRoYXJkX2hlYWRlcl9sZW4gPSBSRUFEX09OQ0UoZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4rXG4gXHRlcnIgPSAtRU1TR1NJWkU7XG4tXHRpZiAobGVuIFx1MDAzZSBkZXYtXHUwMDNlbXR1ICsgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiArIFZMQU5fSExFTiArIGV4dHJhX2xlbilcbitcdGlmIChsZW4gXHUwMDNlIGRldi1cdTAwM2VtdHUgKyBoYXJkX2hlYWRlcl9sZW4gKyBWTEFOX0hMRU4gKyBleHRyYV9sZW4pXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdGlmICghc2tiKSB7XG4tXHRcdHNpemVfdCByZXNlcnZlZCA9IExMX1JFU0VSVkVEX1NQQUNFKGRldik7XG4rXHRcdHNpemVfdCByZXNlcnZlZCA9IExMX1JFU0VSVkVEX1NQQUNFX0VYKGRldiwgaGFyZF9oZWFkZXJfbGVuKTtcbiBcdFx0aW50IHRsZW4gPSBkZXYtXHUwMDNlbmVlZGVkX3RhaWxyb29tO1xuLVx0XHR1bnNpZ25lZCBpbnQgaGhsZW4gPSBkZXYtXHUwMDNlaGVhZGVyX29wcyA/IGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gOiAwO1xuK1x0XHR1bnNpZ25lZCBpbnQgaGhsZW4gPSBkZXYtXHUwMDNlaGVhZGVyX29wcyA/IGhhcmRfaGVhZGVyX2xlbiA6IDA7XG4gXG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRza2IgPSBzb2NrX3dtYWxsb2Moc2ssIGxlbiArIHJlc2VydmVkICsgdGxlbiwgMCwgR0ZQX0tFUk5FTCk7XG5AQCAtMjAzNCw3ICsyMDM5LDcgQEAgc3RhdGljIGludCBwYWNrZXRfc2VuZG1zZ19zcGt0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbiBcdFx0ZXJyID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuLVx0aWYgKGxlbiBcdTAwM2UgKGRldi1cdTAwM2VtdHUgKyBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgZXh0cmFfbGVuKSBcdTAwMjZcdTAwMjZcbitcdGlmIChsZW4gXHUwMDNlIChkZXYtXHUwMDNlbXR1ICsgaGFyZF9oZWFkZXJfbGVuICsgZXh0cmFfbGVuKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhcGFja2V0X2V4dHJhX3ZsYW5fbGVuX2FsbG93ZWQoZGV2LCBza2IpKSB7XG4gXHRcdGVyciA9IC1FTVNHU0laRTtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuQEAgLTI1NjksNiArMjU3NCw3IEBAIHN0YXRpYyBpbnQgcGFja2V0X3NuZF92bmV0X3BhcnNlKHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90ICpsZW4sXG4gc3RhdGljIGludCB0cGFja2V0X2ZpbGxfc2tiKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHZvaWQgKmZyYW1lLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBpbnQgdHBfbGVuLFxuIFx0XHRfX2JlMTYgcHJvdG8sIHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBobGVuLCBpbnQgY29weWxlbixcbitcdFx0aW50IGhhcmRfaGVhZGVyX2xlbixcbiBcdFx0Y29uc3Qgc3RydWN0IHNvY2tjbV9jb29raWUgKnNvY2tjKVxuIHtcbiBcdHVuaW9uIHRwYWNrZXRfdWhkciBwaDtcbkBAIC0yNjAwLDggKzI2MDYsOCBAQCBzdGF0aWMgaW50IHRwYWNrZXRfZmlsbF9za2Ioc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdH0gZWxzZSBpZiAoY29weWxlbikge1xuIFx0XHRpbnQgaGRybGVuID0gbWluX3QoaW50LCBjb3B5bGVuLCB0cF9sZW4pO1xuIFxuLVx0XHRza2JfcHVzaChza2IsIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuLVx0XHRza2JfcHV0KHNrYiwgY29weWxlbiAtIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuK1x0XHRza2JfcHVzaChza2IsIGhhcmRfaGVhZGVyX2xlbik7XG4rXHRcdHNrYl9wdXQoc2tiLCBjb3B5bGVuIC0gaGFyZF9oZWFkZXJfbGVuKTtcbiBcdFx0ZXJyID0gc2tiX3N0b3JlX2JpdHMoc2tiLCAwLCBkYXRhLCBoZHJsZW4pO1xuIFx0XHRpZiAodW5saWtlbHkoZXJyKSlcbiBcdFx0XHRyZXR1cm4gZXJyO1xuQEAgLTI3MzIsNyArMjczOCw3IEBAIHN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxuIFx0dm9pZCAqZGF0YTtcbiBcdGludCBsZW5fc3VtID0gMDtcbiBcdGludCBzdGF0dXMgPSBUUF9TVEFUVVNfQVZBSUxBQkxFO1xuLVx0aW50IGhsZW4sIHRsZW4sIGNvcHlsZW4gPSAwO1xuK1x0aW50IGhhcmRfaGVhZGVyX2xlbiwgaGxlbiwgdGxlbiwgY29weWxlbiA9IDA7XG4gXHRsb25nIHRpbWVvO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZwby1cdTAwM2VwZ192ZWNfbG9jayk7XG5AQCAtMjc3OSw4ICsyNzg1LDkgQEAgc3RhdGljIGludCB0cGFja2V0X3NuZChzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3QgbXNnaGRyICptc2cpXG4gXHRcdFx0Z290byBvdXRfcHV0O1xuIFx0fVxuIFxuK1x0aGFyZF9oZWFkZXJfbGVuID0gUkVBRF9PTkNFKGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuIFx0aWYgKHBvLVx1MDAzZXNrLnNrX3NvY2tldC1cdTAwM2V0eXBlID09IFNPQ0tfUkFXKVxuLVx0XHRyZXNlcnZlID0gZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbitcdFx0cmVzZXJ2ZSA9IGhhcmRfaGVhZGVyX2xlbjtcbiBcdHNpemVfbWF4ID0gcG8tXHUwMDNldHhfcmluZy5mcmFtZV9zaXplXG4gXHRcdC0gKHBvLVx1MDAzZXRwX2hkcmxlbiAtIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpKTtcbiBcbkBAIC0yODE3LDcgKzI4MjQsNyBAQCBzdGF0aWMgaW50IHRwYWNrZXRfc25kKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBtc2doZHIgKm1zZylcbiBcdFx0XHRnb3RvIHRwYWNrZXRfZXJyb3I7XG4gXG4gXHRcdHN0YXR1cyA9IFRQX1NUQVRVU19TRU5EX1JFUVVFU1Q7XG4tXHRcdGhsZW4gPSBMTF9SRVNFUlZFRF9TUEFDRShkZXYpO1xuK1x0XHRobGVuID0gTExfUkVTRVJWRURfU1BBQ0VfRVgoZGV2LCBoYXJkX2hlYWRlcl9sZW4pO1xuIFx0XHR0bGVuID0gZGV2LVx1MDAzZW5lZWRlZF90YWlscm9vbTtcbiBcdFx0aWYgKHZuZXRfaGRyX3N6KSB7XG4gXHRcdFx0ZGF0YSArPSB2bmV0X2hkcl9zejtcbkBAIC0yODM1LDEwICsyODQyLDEwIEBAIHN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxuIFx0XHRcdFx0XHRcdCAgICB2bmV0X2hkci5oZHJfbGVuKTtcbiBcdFx0XHRoYXNfdm5ldF9oZHIgPSB0cnVlO1xuIFx0XHR9XG4tXHRcdGNvcHlsZW4gPSBtYXhfdChpbnQsIGNvcHlsZW4sIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuK1x0XHRjb3B5bGVuID0gbWF4X3QoaW50LCBjb3B5bGVuLCBoYXJkX2hlYWRlcl9sZW4pO1xuIFx0XHRza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKFx1MDAyNnBvLVx1MDAzZXNrLFxuIFx0XHRcdFx0aGxlbiArIHRsZW4gKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2xsKSArXG4tXHRcdFx0XHQoY29weWxlbiAtIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pLFxuK1x0XHRcdFx0KGNvcHlsZW4gLSBoYXJkX2hlYWRlcl9sZW4pLFxuIFx0XHRcdFx0IW5lZWRfd2FpdCwgXHUwMDI2ZXJyKTtcbiBcbiBcdFx0aWYgKHVubGlrZWx5KHNrYiA9PSBOVUxMKSkge1xuQEAgLTI4NDgsNyArMjg1NSw4IEBAIHN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxuIFx0XHRcdGdvdG8gb3V0X3N0YXR1cztcbiBcdFx0fVxuIFx0XHR0cF9sZW4gPSB0cGFja2V0X2ZpbGxfc2tiKHBvLCBza2IsIHBoLCBkZXYsIGRhdGEsIHRwX2xlbiwgcHJvdG8sXG4tXHRcdFx0XHRcdCAgYWRkciwgaGxlbiwgY29weWxlbiwgXHUwMDI2c29ja2MpO1xuK1x0XHRcdFx0XHQgIGFkZHIsIGhsZW4sIGNvcHlsZW4sIGhhcmRfaGVhZGVyX2xlbixcbitcdFx0XHRcdFx0ICBcdTAwMjZzb2NrYyk7XG4gXHRcdGlmIChsaWtlbHkodHBfbGVuIFx1MDAzZT0gMCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICB0cF9sZW4gXHUwMDNlIGRldi1cdTAwM2VtdHUgKyByZXNlcnZlIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIXZuZXRfaGRyX3N6IFx1MDAyNlx1MDAyNlxuQEAgLTI5NTYsNyArMjk2NCw3IEBAIHN0YXRpYyBpbnQgcGFja2V0X3NuZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4gXHRpbnQgb2Zmc2V0ID0gMDtcbiBcdHN0cnVjdCBwYWNrZXRfc29jayAqcG8gPSBwa3Rfc2soc2spO1xuIFx0aW50IHZuZXRfaGRyX3N6ID0gUkVBRF9PTkNFKHBvLVx1MDAzZXZuZXRfaGRyX3N6KTtcbi1cdGludCBobGVuLCB0bGVuLCBsaW5lYXI7XG4rXHRpbnQgaGFyZF9oZWFkZXJfbGVuLCBobGVuLCB0bGVuLCBsaW5lYXI7XG4gXHRpbnQgZXh0cmFfbGVuID0gMDtcbiBcbiBcdC8qXG5AQCAtMjk5Niw4ICszMDA0LDkgQEAgc3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiBcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4rXHRoYXJkX2hlYWRlcl9sZW4gPSBSRUFEX09OQ0UoZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4gXHRpZiAoc29jay1cdTAwM2V0eXBlID09IFNPQ0tfUkFXKVxuLVx0XHRyZXNlcnZlID0gZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbitcdFx0cmVzZXJ2ZSA9IGhhcmRfaGVhZGVyX2xlbjtcbiBcdGlmICh2bmV0X2hkcl9zeikge1xuIFx0XHRlcnIgPSBwYWNrZXRfc25kX3ZuZXRfcGFyc2UobXNnLCBcdTAwMjZsZW4sIFx1MDAyNnZuZXRfaGRyLCB2bmV0X2hkcl9zeik7XG4gXHRcdGlmIChlcnIpXG5AQCAtMzAxOCwxMCArMzAyNywxMCBAQCBzdGF0aWMgaW50IHBhY2tldF9zbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4gXHRlcnIgPSAtRU5PQlVGUztcbi1cdGhsZW4gPSBMTF9SRVNFUlZFRF9TUEFDRShkZXYpO1xuK1x0aGxlbiA9IExMX1JFU0VSVkVEX1NQQUNFX0VYKGRldiwgaGFyZF9oZWFkZXJfbGVuKTtcbiBcdHRsZW4gPSBkZXYtXHUwMDNlbmVlZGVkX3RhaWxyb29tO1xuIFx0bGluZWFyID0gX192aXJ0aW8xNl90b19jcHUodmlvX2xlKCksIHZuZXRfaGRyLmhkcl9sZW4pO1xuLVx0bGluZWFyID0gbWF4KGxpbmVhciwgbWluX3QoaW50LCBsZW4sIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pKTtcbitcdGxpbmVhciA9IG1heChsaW5lYXIsIG1pbl90KGludCwgbGVuLCBoYXJkX2hlYWRlcl9sZW4pKTtcbiBcdHNrYiA9IHBhY2tldF9hbGxvY19za2Ioc2ssIGhsZW4gKyB0bGVuLCBobGVuLCBsZW4sIGxpbmVhcixcbiBcdFx0XHQgICAgICAgbXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlULCBcdTAwMjZlcnIpO1xuIFx0aWYgKHNrYiA9PSBOVUxMKVxuQEAgLTMwMzcsNyArMzA0Niw3IEBAIHN0YXRpYyBpbnQgcGFja2V0X3NuZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4gXHR9IGVsc2UgaWYgKHJlc2VydmUpIHtcbiBcdFx0c2tiX3Jlc2VydmUoc2tiLCAtcmVzZXJ2ZSk7XG4gXHRcdGlmIChsZW4gXHUwMDNjIHJlc2VydmUgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgZGV2LVx1MDAzZW1pbl9oZWFkZXJfbGVuICE9IGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pXG4rXHRcdCAgICBkZXYtXHUwMDNlbWluX2hlYWRlcl9sZW4gIT0gaGFyZF9oZWFkZXJfbGVuKVxuIFx0XHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6NTM6MDguMjk0NjI4NTk2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODEzMDk2MDA2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JrIFBhY2tldCBIZWFkZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBhbmQgaXQncyB0b3VjaGluZyBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgaG93IGBoYXJkX2hlYWRlcl9sZW5gIGlzIGhhbmRsZWQgaW4gYHBhY2tldF9zZW5kbXNnX3Nwa3RgLCBgdHBhY2tldF9zbmRgLCBhbmQgYHBhY2tldF9zbmRgLiBTbWFydCBtb3ZlLCB1c2luZyBgUkVBRF9PTkNFKGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pYCBhbmQgc3RvcmluZyBpdCBsb2NhbGx5IGFzIGBoYXJkX2hlYWRlcl9sZW5gLiBUaGlzIGF2b2lkcyB0aGUgY2xhc3NpYyBkYXRhIHJhY2UgYW5kIFRPQ1RPVSBpc3N1ZXMgaWYgYGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGdldHMgdXBkYXRlZCBjb25jdXJyZW50bHksIHdoaWNoIGlzIGEgY29tbW9uIHZ1bG5lcmFiaWxpdHkuIEdvb2QgcHJldmVudGF0aXZlIG1lYXN1cmUuXG5cbkFoLCB0aGVyZSdzIGFsc28gYSByZW1vdmFsIG9mIGEgY2h1bmsgb2YgY29kZSBpbiBgZGV2X3ZhbGlkYXRlX2hlYWRlcmAuIEhhbmcgb24sIGxldCdzIHNlZS4uLiBpdCdzIHRha2luZyBvdXQgdGhpcyBjb25kaXRpb25hbCBibG9jazpcblxuYGBgY1xuLVx0aWYgKGNhcGFibGUoQ0FQX1NZU19SQVdJTykpIHtcbi1cdFx0bWVtc2V0KGxsX2hlYWRlciArIGxlbiwgMCwgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAtIGxlbik7XG4tXHRcdHJldHVybiB0cnVlO1xuLVx0fVxuYGBgXG5cbldhaXQsIGl0J3MgcmVtb3ZpbmcgdGhlIGBDQVBfU1lTX1JBV0lPYCBjaGVjayBhbmQgdGhlIHN1YnNlcXVlbnQgYG1lbXNldGAuIFRoYXQncyBpbnRlcmVzdGluZy4gSXQgc2VlbXMgbGlrZSB0aGUgcGF0Y2ggaXNuJ3QgemVyb2luZyBvdXQgdGhlIHJlbWFpbmluZyBwYXJ0IG9mIHRoZSBoZWFkZXIgYW55bW9yZSBpZiBgbGVuYCBpcyBsZXNzIHRoYW4gYGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gLCBidXQgb25seSBmb3IgcmF3IEkvTy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgZGV2X3ZhbGlkYXRlX2hlYWRlcmAgYWN0dWFsbHkgZG9lcyBpbiB0aGlzIGNvbnRleHQsIHNvIEkgY2FuIGdyYXNwIHRoZSBmdWxsIGltcGxpY2F0aW9ucy4gSSBzaG91bGQgZGlnIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQgaXQncyByZXNwb25zaWJsZSBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NTUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDo1MzoxNi40MjU1OTA5NTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5MTgyNDAwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZfdmFsaWRhdGVfaGVhZGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MzUxOD1zdGF0aWMgaW5saW5lIF9fYmUxNiBkZXZfcGFyc2VfaGVhZGVyX3Byb3RvY29sKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTM1MjctLyogbGxfaGVhZGVyIG11c3QgaGF2ZSBhdCBsZWFzdCBoYXJkX2hlYWRlcl9sZW4gYWxsb2NhdGVkICovXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDozNTI4OnN0YXRpYyBpbmxpbmUgYm9vbCBkZXZfdmFsaWRhdGVfaGVhZGVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zNTI5LVxcdFxcdFxcdFxcdCAgICAgICBjaGFyICpsbF9oZWFkZXIsIGludCBsZW4pXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTE5NDc9c3RhdGljIGludCBwYWNrZXRfc2VuZG1zZ19zcGt0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjAzNy1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIwMzg6XFx0aWYgKCFkZXZfdmFsaWRhdGVfaGVhZGVyKGRldiwgc2tiLVxcdTAwM2VkYXRhLCBsZW4pIHx8ICFza2ItXFx1MDAzZWxlbikge1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjAzOS1cXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNTc0PXN0YXRpYyBpbnQgdHBhY2tldF9maWxsX3NrYihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNjEzLVxcdFxcdFxcdHJldHVybiBlcnI7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNjE0OlxcdFxcdGlmICghZGV2X3ZhbGlkYXRlX2hlYWRlcihkZXYsIHNrYi1cXHUwMDNlZGF0YSwgaGRybGVuKSlcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI2MTUtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI5NTM9c3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzA1OC1cXHRpZiAoKHNvY2stXFx1MDAzZXR5cGUgPT0gU09DS19SQVcgXFx1MDAyNlxcdTAwMjZcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMwNTk6XFx0ICAgICAhZGV2X3ZhbGlkYXRlX2hlYWRlcihkZXYsIHNrYi1cXHUwMDNlZGF0YSwgbGVuKSkgfHwgIXNrYi1cXHUwMDNlbGVuKSB7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMDYwLVxcdFxcdGVyciA9IC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjUzOjE4LjQxNzQxOTcyNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3Mzg3NTg2MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogQUZfUEFDS0VUIFNvY2tldCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhZl9wYWNrZXQuY2AsIHRoZSBoZWFydCBvZiBgQUZfUEFDS0VUYCBzb2NrZXQgaW1wbGVtZW50YXRpb24uIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyDigJMgY29yZSBrZXJuZWwgbG9naWMsIHBvdGVudGlhbGx5IHJlYWNoYWJsZSwgZGVmaW5pdGVseSBmdW5jdGlvbmFsLiBJdCdzIGFkZHJlc3NpbmcgYSByYWNlIGNvbmRpdGlvbiBpbnZvbHZpbmcgYGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gLCB3aGljaCBzdWdnZXN0cyBhIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZSwgYW5kIGl0J3MgYWxzbyByZW1vdmluZyBhIGBDQVBfU1lTX1JBV0lPYCBjYXBhYmlsaXR5IGNoZWNrIHdpdGhpbiBgZGV2X3ZhbGlkYXRlX2hlYWRlcmAuIEhhbmcgb24sIHRoYXQgbGFzdCBwYXJ0Li4uIGxldCBtZSB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGUgY29kZSBzbmlwcGV0OlxuXG5gYGBjXG4tXHRpZiAoY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkge1xuLVx0XHRtZW1zZXQobGxfaGVhZGVyICsgbGVuLCAwLCBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gbGVuKTtcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHR9XG5gYGBcblxuUmlnaHQsIEkgc2VlLiBQcmV2aW91c2x5LCBpZiB0aGUgcHJvY2VzcyBoYWQgYENBUF9TWVNfUkFXSU9gLCBpdCB3b3VsZCBieXBhc3MgdGhlIGhlYWRlciB2YWxpZGF0aW9uIGVudGlyZWx5LCB6ZXJvaW5nIG91dCB0aGUgcmVtYWluaW5nIGhlYWRlciBieXRlcyBhbmQgcmV0dXJuaW5nIGVhcmx5LiBOb3csIHRoYXQgY2hlY2sgaXMgZ29uZS4gVGhpcyBpbXBsaWVzIGEgY2hhbmdlIGluIGJlaGF2aW9yOiBgZGV2LVx1MDAzZWhlYWRlcl9vcHMtXHUwMDNldmFsaWRhdGVgIHdpbGwgKmFsd2F5cyogYmUgY2FsbGVkLCByZWdhcmRsZXNzIG9mIHRoZSBgQ0FQX1NZU19SQVdJT2AgY2FwYWJpbGl0eS4gVGhhdCdzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGBhZl9wYWNrZXQuY2AgYW5kIHNwZWNpZmljYWxseSBgZGV2X3ZhbGlkYXRlX2hlYWRlcmAuIEdpdmVuIHRoaXMgbW9kaWZpY2F0aW9uLCBhbmQgY29uc2lkZXJpbmcgdGhlIHJhY2UgY29uZGl0aW9uIGZpeCwgdGhpcyBpcyAqYWJzb2x1dGVseSogd29ydGggZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBmb3IgZnV6emluZyB3aWxsIGJlIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBpbnRlcmFjdCB3aXRoIHRoaXMgY29kZSBhbmQgbm93IHRha2UgYSBkaWZmZXJlbnQgY29kZSBwYXRoOiBzcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHRwYWNrZXRfc25kYCwgYW5kIGBwYWNrZXRfc25kYC4gV2hpbGUgYGRldl92YWxpZGF0ZV9oZWFkZXJgIGlzIGEgc3RhdGljIGlubGluZSwgc28gbWlnaHQgbm90IGJlIGFzIGRpcmVjdGx5IHVzYWJsZSBmb3IgZnV6emluZywgSSdsbCBrZWVwIGl0IGluIG1pbmQgYXMgYSBwb2ludCBvZiByZWZlcmVuY2UuIEkgd2lsbCBzdGFydCBieSBkaWdnaW5nIGRlZXBlciBpbnRvIHRob3NlIG90aGVyIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAwMywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDo1MzozNS44MDUwMDc2ODFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1MjUzOTY5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWNrZXRfc2VuZG1zZ19zcGt0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTkyMz1zdGF0aWMgdm9pZCBwYWNrZXRfcGFyc2VfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xOTQ2LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTk0NzpzdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnX3Nwa3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTk0OC1cXHRcXHRcXHQgICAgICAgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9NDY1OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzX3Nwa3QgPSB7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ2NzEtXFx0LnNodXRkb3duID1cXHRzb2NrX25vX3NodXRkb3duLFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6NDY3MjpcXHQuc2VuZG1zZyA9XFx0cGFja2V0X3NlbmRtc2dfc3BrdCxcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ2NzMtXFx0LnJlY3Ztc2cgPVxcdHBhY2tldF9yZWN2bXNnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDo1MzozNy42NTc1NTc1MThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTczNDM3NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQYWNrZXQgU29ja2V0IFNlbmQgSGFuZGxlcnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgcGFja2V0cyBhcmUgc2VudCBvdXQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgQUZfUEFDS0VUIGZhbWlseSwgc2luY2UgdGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEkgc2VlIHRocmVlIHByaW1hcnkgaGFuZGxlcnMgaGVyZTogYHBhY2tldF9zZW5kbXNnX3Nwa3RgLCBgcGFja2V0X3NuZGAsIGFuZCBgdHBhY2tldF9zbmRgLlxuXG5gcGFja2V0X3NlbmRtc2dfc3BrdGAgc2VlbXMgdG8gYmUgdGhlIG9sZCBndWFyZCwgdGllZCB0byB0aGUgb2Jzb2xldGUgYFNPQ0tfUEFDS0VUYCB0eXBlLiBJJ2xsIHByb2JhYmx5IHNraW0gb3ZlciB0aGF0IHVubGVzcyBJIG5lZWQgdG8gc3VwcG9ydCBzb21lIHNlcmlvdXNseSBsZWdhY3kgc3R1ZmYuIFRoZSByZWFsIHdvcmsgaXMgbGlrZWx5IGluIHRoZSBtb3JlIG1vZGVybiBpbXBsZW1lbnRhdGlvbnMuXG5cbk5vdywgYHBhY2tldF9zbmRgIGhhbmRsZXMgYFNPQ0tfUkFXYCBhbmQgYFNPQ0tfREdSQU1gIHNvY2tldHMgd2l0aGluIGBBRl9QQUNLRVRgLiBTbywgeW91ciBiYXNpYywgcmF3IHBhY2tldCBtYW5pcHVsYXRpb24gYW5kIGRhdGFncmFtIHNlbmRpbmcuIFRoYXQncyBnb29kIHRvIGtub3csIGFuZCB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmdW5kYW1lbnRhbCBiZWhhdmlvci5cblxuQnV0IEknbSByZWFsbHkgY3VyaW91cyBhYm91dCBgdHBhY2tldF9zbmRgLiBUaGF0J3Mgd2hlcmUgdGhlIG1lbW9yeS1tYXBwZWQgcmluZyBidWZmZXIgVFhfUklORyBjb21lcyBpbnRvIHBsYXkuIFRoYXTigJlzIHdoZXJlIHRoZSBoaWdoLXBlcmZvcm1hbmNlIHN0dWZmIGlzIGhhcHBlbmluZyB3aXRoIGBBRl9QQUNLRVRgLiBEZWZpbml0ZWx5IHdvcnRoIGRpdmluZyBpbnRvIHRvIHNlZSBob3cgdGhhdCdzIGltcGxlbWVudGVkIGFuZCBob3cgaXQgb3B0aW1pemVzIHBhY2tldCB0cmFuc21pc3Npb24uIExldCdzIHNlZSBob3cgdGhhdCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAwOCwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDo1Mzo0My42MzA5OTc3OThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4NDg5NjU3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWNrZXRfc25kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjUxNT1zdGF0aWMgdm9pZCB0cGFja2V0X2Rlc3RydWN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTM0LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjUzNTpzdGF0aWMgaW50IF9fcGFja2V0X3NuZF92bmV0X3BhcnNlKHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqdm5ldF9oZHIsIHNpemVfdCBsZW4pXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTM2LXtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU1MC1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI1NTE6c3RhdGljIGludCBwYWNrZXRfc25kX3ZuZXRfcGFyc2Uoc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgKmxlbixcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1NTItXFx0XFx0XFx0XFx0IHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqdm5ldF9oZHIsIGludCB2bmV0X2hkcl9zeilcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU2Mi1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI1NjM6XFx0cmV0ID0gX19wYWNrZXRfc25kX3ZuZXRfcGFyc2Uodm5ldF9oZHIsICpsZW4pO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU2NC1cXHRpZiAocmV0KVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNjU1PXN0YXRpYyBpbnQgdHBhY2tldF9wYXJzZV9oZWFkZXIoc3RydWN0IHBhY2tldF9zb2NrICpwbywgdm9pZCAqZnJhbWUsXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI3MjItXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNzIzOnN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjcyNC17XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4MzYtXFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZ2bmV0X2hkciwgZGF0YSAtIHZuZXRfaGRyX3N6LCBzaXplb2Yodm5ldF9oZHIpKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI4Mzc6XFx0XFx0XFx0aWYgKF9fcGFja2V0X3NuZF92bmV0X3BhcnNlKFxcdTAwMjZ2bmV0X2hkciwgdHBfbGVuKSkge1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjgzOC1cXHRcXHRcXHRcXHR0cF9sZW4gPSAtRUlOVkFMO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yOTI3PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcGFja2V0X2FsbG9jX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHNpemVfdCBwcmVwYWQsXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI5NTItXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyOTUzOnN0YXRpYyBpbnQgcGFja2V0X3NuZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yOTU0LXtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzAxMC1cXHRpZiAodm5ldF9oZHJfc3opIHtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMwMTE6XFx0XFx0ZXJyID0gcGFja2V0X3NuZF92bmV0X3BhcnNlKG1zZywgXFx1MDAyNmxlbiwgXFx1MDAyNnZuZXRfaGRyLCB2bmV0X2hkcl9zeik7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMDEyLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTMxMTI9c3RhdGljIGludCBwYWNrZXRfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMTctXFx0LyogUmVhZGluZyB0eF9yaW5nLnBnX3ZlYyB3aXRob3V0IGhvbGRpbmcgcGdfdmVjX2xvY2sgaXMgcmFjeS5cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMxMTg6XFx0ICogdHBhY2tldF9zbmQoKSB3aWxsIHJlZG8gdGhlIGNoZWNrIHNhZmVseS5cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMTktXFx0ICovXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTIwLVxcdGlmIChkYXRhX3JhY2UocG8tXFx1MDAzZXR4X3JpbmcucGdfdmVjKSlcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMxMjE6XFx0XFx0cmV0dXJuIHRwYWNrZXRfc25kKHBvLCBtc2cpO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEyMi1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMxMjM6XFx0cmV0dXJuIHBhY2tldF9zbmQoc29jaywgbXNnLCBsZW4pO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEyNC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjUzOjQ1LjMxNTkwMjgyM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczNDU4NjY5MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipGb2N1c2luZyBvbiBQYWNrZXQgVHJhbnNtaXNzaW9uIFN5bWJvbHMgYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgc3ltYm9scyByZWxhdGVkIHRvIHBhY2tldCB0cmFuc21pc3Npb24uIFRoZSBrZXkgb25lcyB0byBsb29rIGF0IGFyZSBjbGVhcmx5IGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHRwYWNrZXRfc25kYCwgYW5kIGBwYWNrZXRfc25kYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMsIG9yIGxpa2VseSB0aGUgY29yZSBlbGVtZW50cyBvZiB0aGUgZnVuY3Rpb25zLCB0aGF0IGFyZSB0aGUgbW9zdCBpbXBvcnRhbnQgZm9yIG15IHJlc2VhcmNoLlxuXG5Ob3csIHRvIHVuZGVyc3RhbmQgdGhlaXIgY29udGV4dCwgSSBuZWVkIHRvIGtub3cgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJ20gcHJldHR5IHN1cmUgaXQncyBgUEFDS0VUYCwgYnV0IGxldCdzIGNvbmZpcm0gdGhhdC4gVGhhdCBsaWtlbHkgbWFwcyB0byBgQ09ORklHX1BBQ0tFVGAgc29tZXdoZXJlLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGtlcm5lbCdzIHNvdXJjZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUsIHByb2JhYmx5IHdpdGhpbiB0aGUgYG5ldC9wYWNrZXQvYCBkaXJlY3RvcnksIG9yIG1heWJlIHNvbWV0aGluZyBzaW1pbGFyLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgcGFja2V0LXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYXJlIGRlZmluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNjgsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDo1Mzo1Mi42NjE3NzI3NDFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTYwMjI4NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBBQ0tFVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcGFja2V0L0tjb25maWctNS1cXG5uZXQvcGFja2V0L0tjb25maWc6Njpjb25maWcgUEFDS0VUXFxubmV0L3BhY2tldC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlBhY2tldCBzb2NrZXRcXFwiXFxuLS1cXG5uZXQvcGFja2V0L0tjb25maWctMTgtXFxubmV0L3BhY2tldC9LY29uZmlnOjE5OmNvbmZpZyBQQUNLRVRfRElBR1xcbm5ldC9wYWNrZXQvS2NvbmZpZy0yMC1cXHR0cmlzdGF0ZSBcXFwiUGFja2V0OiBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDo1Mzo1NC4zMTc4MDMyNjlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE1NzYyMTA4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYWNrZXQgU29ja2V0IFBhdGNoKipcblxuT2theSwgc28gdGhlIGNvbmZpZyBpbiBxdWVzdGlvbiBoZXJlIGlzIGNsZWFybHkgYFBBQ0tFVGAuIE5vIG90aGVyIHJlbGV2YW50IGNvbmZpZ3MganVtcCBvdXQgYXQgbWUgaW1tZWRpYXRlbHksIGJ1dCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHNuZWFreSBkZXBlbmRlbmNpZXMgSSdtIG1pc3NpbmcuIFJpZ2h0LCB0aGUgcGF0Y2ggaXRzZWxmIGlzIHRvdWNoaW5nIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCDigJMgdGhlIGhlYXJ0IG9mIHRoZSBwYWNrZXQgc29ja2V0IGltcGxlbWVudGF0aW9uIOKAkyBhbmQgYGluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhgLiBUaGF0J3MgYSBmb2N1c2VkIGFyZWEsIHdoaWNoIGlzIGdvb2QuXG5cblRoZSBrZXkgdGhpbmcgaXMgYENPTkZJR19QQUNLRVRgLCBpdCdzIHRoZSBhbmNob3IgcG9pbnQuXG5cbk5vdywgY29uc2lkZXJpbmcgdGhlIGZpbGUgbW9kaWZpY2F0aW9ucywgaXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSByYWNlIGNvbmRpdGlvbiB0aWVkIHRvIGBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuYCB3aXRoaW4gdGhlIGBBRl9QQUNLRVRgIHNvY2tldCBpbXBsZW1lbnRhdGlvbi4gVGhlcmUncyBhbHNvIGEgcmVtb3ZhbCBvZiBhIGBDQVBfU1lTX1JBV0lPYCBjaGVjayBpbiBgZGV2X3ZhbGlkYXRlX2hlYWRlcmAuIFRoYXQgbGFzdCBvbmUgaXMgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLiBUaGVzZSBjaGFuZ2VzIGFyZSBpbXBhY3RpbmcgaG93IHBhY2tldHMgYXJlIHNlbnQsIHNwZWNpZmljYWxseSB0aHJvdWdoIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHBhY2tldF9zbmRgLCBhbmQgYHRwYWNrZXRfc25kYC4gVGhvc2UgYXJlIGFsbCBjcml0aWNhbCBjb3JlIG5ldHdvcmsgcGF0aHMgdGhhdCBhcmUgdXNlZCB0byB0cmFuc21pdCBwYWNrZXRzLiBHaXZlbiB0aGF0LCBJIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIGhlcmUuIFRoZSBjaGFuZ2VzIHRvIGhlYWRlciBsZW5ndGggaGFuZGxpbmcgaW1tZWRpYXRlbHkgcmFpc2UgYSBmbGFnLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgbW9kaWZpY2F0aW9ucyBkb24ndCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIG9yLCBtb3JlIGltcG9ydGFudGx5LCBtZW1vcnkgc2FmZXR5IHZ1bG5lcmFiaWxpdGllcy4gSXQncyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cblxuQWxyaWdodCwgdGltZSB0byBmb3JtdWxhdGUgdGhlIHNldC1yZXN1bHRzIGNhbGwsIEkga25vdyBob3cgdG8gaGFuZGxlIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NDIsIk91dHB1dFRva2VucyI6MTU5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjU0OjAwLjQ3NTQyNzEzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc1MTY5MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBQ0tFVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhY2tldF9zZW5kbXNnX3Nwa3RcIixcbiAgICBcInRwYWNrZXRfc25kXCIsXG4gICAgXCJwYWNrZXRfc25kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgQUZfUEFDS0VUIHNvY2tldCBpbXBsZW1lbnRhdGlvbiB0byBmaXggYSByYWNlIGNvbmRpdGlvbiB3aXRoIGBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbmAgYW5kIHJlbW92ZXMgYSBgQ0FQX1NZU19SQVdJT2AgY2hlY2sgaW4gYGRldl92YWxpZGF0ZV9oZWFkZXJgLiBUaGlzIGFmZmVjdHMgcGFja2V0IHRyYW5zbWlzc2lvbiB2aWEgYHBhY2tldF9zZW5kbXNnX3Nwa3RgLCBgcGFja2V0X3NuZGAsIGFuZCBgdHBhY2tldF9zbmRgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgbmV0d29yayBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgYXJlIGludHJvZHVjZWQgYnkgdGhlIGNoYW5nZXMgaW4gaGVhZGVyIGxlbmd0aCBoYW5kbGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUNLRVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWNrZXRfc2VuZG1zZ19zcGt0XCIsXG4gICAgXCJ0cGFja2V0X3NuZFwiLFxuICAgIFwicGFja2V0X3NuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEFGX1BBQ0tFVCBzb2NrZXQgaW1wbGVtZW50YXRpb24gdG8gZml4IGEgcmFjZSBjb25kaXRpb24gd2l0aCBgZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGFuZCByZW1vdmVzIGEgYENBUF9TWVNfUkFXSU9gIGNoZWNrIGluIGBkZXZfdmFsaWRhdGVfaGVhZGVyYC4gVGhpcyBhZmZlY3RzIHBhY2tldCB0cmFuc21pc3Npb24gdmlhIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHBhY2tldF9zbmRgLCBhbmQgYHRwYWNrZXRfc25kYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgcGF0aHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkIGJ5IHRoZSBjaGFuZ2VzIGluIGhlYWRlciBsZW5ndGggaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhn9p6[1] Phase: Succeeded StartedAt: 2026-08-05 14:54:11 +0000 UTC FinishedAt: 2026-08-05 14:54:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhn9p6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-05 14:54:11 +0000 UTC FinishedAt: 2026-08-05 14:54:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhn9p6[2] Phase: Succeeded StartedAt: 2026-08-05 14:54:11 +0000 UTC FinishedAt: 2026-08-05 18:39:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-05 14:54:11 +0000 UTC FinishedAt: 2026-08-05 18:39:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-05 14:54:11 +0000 UTC FinishedAt: 2026-08-05 14:54:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-05 14:54:11 +0000 UTC FinishedAt: 2026-08-05 14:54:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowhn9p6/series-workflowhn9p6-convert-artifact-3460578784/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-05 14:54:21 +0000 UTC FinishedAt: 2026-08-05 15:10:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-05 14:54:21 +0000 UTC FinishedAt: 2026-08-05 15:10:59 +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:*dc616d8e-8fb4-4198-8827-86c4d52096f0,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-workflowhn9p6/series-workflowhn9p6-convert-artifact-3460578784/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": "e7556774-cd41-454a-be6e-42f64a5e77dd", "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-workflowhn9p6/series-workflowhn9p6-build-action-3526143142/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-05 14:54:21 +0000 UTC FinishedAt: 2026-08-05 15:10:49 +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:*dc616d8e-8fb4-4198-8827-86c4d52096f0,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-workflowhn9p6/series-workflowhn9p6-convert-artifact-3460578784/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": "e7556774-cd41-454a-be6e-42f64a5e77dd", "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-workflowhn9p6/series-workflowhn9p6-build-action-3526143142/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-05 15:10:59 +0000 UTC FinishedAt: 2026-08-05 15:10:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-05 15:10:59 +0000 UTC FinishedAt: 2026-08-05 15:10:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-05 15:10:59 +0000 UTC FinishedAt: 2026-08-05 15:11:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-05 15:10:59 +0000 UTC FinishedAt: 2026-08-05 15:11:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowhn9p6/series-workflowhn9p6-convert-artifact-4047701255/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-05 15:11:09 +0000 UTC FinishedAt: 2026-08-05 15:13:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-05 15:11:09 +0000 UTC FinishedAt: 2026-08-05 15:13:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e7556774-cd41-454a-be6e-42f64a5e77dd,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-workflowhn9p6/series-workflowhn9p6-build-action-3526143142/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-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-05 15:13:25 +0000 UTC FinishedAt: 2026-08-05 15:13:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-05 15:13:25 +0000 UTC FinishedAt: 2026-08-05 15:13:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-05 15:13:25 +0000 UTC FinishedAt: 2026-08-05 15:35:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-05 15:13:25 +0000 UTC FinishedAt: 2026-08-05 15:35:25 +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:*dc616d8e-8fb4-4198-8827-86c4d52096f0,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-workflowhn9p6/series-workflowhn9p6-convert-artifact-4047701255/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": "361fd1bb-1f6f-47f9-a529-d46f4794bd57", "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-workflowhn9p6/series-workflowhn9p6-build-action-2145187467/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-05 15:13:25 +0000 UTC FinishedAt: 2026-08-05 15:34:56 +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:*dc616d8e-8fb4-4198-8827-86c4d52096f0,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-workflowhn9p6/series-workflowhn9p6-convert-artifact-4047701255/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": "361fd1bb-1f6f-47f9-a529-d46f4794bd57", "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-workflowhn9p6/series-workflowhn9p6-build-action-2145187467/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-05 15:35:25 +0000 UTC FinishedAt: 2026-08-05 15:35:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-05 15:35:25 +0000 UTC FinishedAt: 2026-08-05 15:35:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-05 15:35:25 +0000 UTC FinishedAt: 2026-08-05 15:37:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-05 15:35:25 +0000 UTC FinishedAt: 2026-08-05 15:37:18 +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:*361fd1bb-1f6f-47f9-a529-d46f4794bd57,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-workflowhn9p6/series-workflowhn9p6-build-action-2145187467/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-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-05 15:37:28 +0000 UTC FinishedAt: 2026-08-05 18:39:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-05 15:37:28 +0000 UTC FinishedAt: 2026-08-05 18:39:17 +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":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"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:*e7556774-cd41-454a-be6e-42f64a5e77dd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*361fd1bb-1f6f-47f9-a529-d46f4794bd57,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-workflowhn9p6/series-workflowhn9p6-build-action-3526143142/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-workflowhn9p6/series-workflowhn9p6-build-action-2145187467/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-05 15:37:28 +0000 UTC FinishedAt: 2026-08-05 15:37:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-05 15:37:28 +0000 UTC FinishedAt: 2026-08-05 15:37:32 +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":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"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-workflowhn9p6/series-workflowhn9p6-convert-artifact-3852784864/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-05 15:37:28 +0000 UTC FinishedAt: 2026-08-05 15:37:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-05 15:37:28 +0000 UTC FinishedAt: 2026-08-05 15:37:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-05 15:37:28 +0000 UTC FinishedAt: 2026-08-05 15:37:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-05 15:37:41 +0000 UTC FinishedAt: 2026-08-05 18:39:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhn9p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg_spkt","tpacket_snd","packet_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26ba17d845193dac4921ae1ab280d28d1938052e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"77706732-e29e-477d-8391-cf2a31c54cf1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-05 15:37:41 +0000 UTC FinishedAt: 2026-08-05 18:39:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e7556774-cd41-454a-be6e-42f64a5e77dd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*361fd1bb-1f6f-47f9-a529-d46f4794bd57,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-workflowhn9p6/series-workflowhn9p6-build-action-3526143142/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-workflowhn9p6/series-workflowhn9p6-build-action-2145187467/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-workflowhn9p6/series-workflowhn9p6-convert-artifact-3852784864/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,}