Name: series-workflow8hrln Phase: Succeeded StartedAt: 2026-08-04 12:40:41 +0000 UTC FinishedAt: 2026-08-04 16:45:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hrln[0] Phase: Succeeded StartedAt: 2026-08-04 12:40:41 +0000 UTC FinishedAt: 2026-08-04 13:02:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hrln[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 12:40:41 +0000 UTC FinishedAt: 2026-08-04 13:02:45 +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": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "INFINIBAND", "DIBS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "INFINIBAND", "DIBS" ], "series_id": "f909508b-2868-40c8-84cd-c5e1d135d42d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "smc_connect", "smc_listen", "smc_pnet_find_roce_resource", "smc_pnet_find_alt_roce", "smc_llc_cli_add_link", "smc_llc_srv_add_link" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0RJQlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbWNfY29ubmVjdCYjMzQ7LAogICAgJiMzNDtzbWNfbGlzdGVuJiMzNDssCiAgICAmIzM0O3NtY19wbmV0X2ZpbmRfcm9jZV9yZXNvdXJjZSYjMzQ7LAogICAgJiMzNDtzbWNfcG5ldF9maW5kX2FsdF9yb2NlJiMzNDssCiAgICAmIzM0O3NtY19sbGNfY2xpX2FkZF9saW5rJiMzNDssCiAgICAmIzM0O3NtY19sbGNfc3J2X2FkZF9saW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGRldmljZSByZW1vdmFsIHJhY2UgY29uZGl0aW9uIGluIHRoZSBTTUMgKFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMpIHN1YnN5c3RlbSBieSBpbnRyb2R1Y2luZyByZWZlcmVuY2UgY291bnRpbmcgZm9yIGBzbWNfaWJfZGV2aWNlYCBkdXJpbmcgY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbi4gVGhlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgY29ubmVjdGlvbiBzZXR1cCBwYXRocyAoYHNtY19jb25uZWN0YCwgYHNtY19saXN0ZW5gKSBhbmQgbGluayBhZGRpdGlvbiBwYXRocyAoYHNtY19sbGNfY2xpX2FkZF9saW5rYCwgYHNtY19sbGNfc3J2X2FkZF9saW5rYCkuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFGX1NNQyBzb2NrZXRzIGFuZCBjYW4gYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2FlNWVmZDkxYzVjM2JhZjdhZTBlOGE4NzZhMjRiY2ZhZjAxMmE3Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDQgMTI6NTk6NTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9hZl9zbWMuYyBiL25ldC9zbWMvYWZfc21jLmNcbmluZGV4IGI1ZGI2OTA3M2UyMGYuLjE2MDI3MTQ2NDMwNWMgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL2FmX3NtYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL2FmX3NtYy5jXG5AQCAtMTIyNSw3ICYjNDM7MTIyNSw3IEBAIHZvaWQgc21jX2ZpbGxfZ2lkX2xpc3Qoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXG4gXHQgICAgICAgU01DX0dJRF9TSVpFKTtcbiBcbiBvdXQ6XG4tXHRrZnJlZShhbHRfaW5pKTtcbiYjNDM7XHRzbWNfaW5pdF9pbmZvX2ZyZWUoYWx0X2luaSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgc21jX2Nvbm5lY3RfcmRtYV92Ml9wcmVwYXJlKHN0cnVjdCBzbWNfc29jayAqc21jLFxuQEAgLTE1OTYsMTQgJiM0MzsxNTk2LDE0IEBAIHN0YXRpYyBpbnQgX19zbWNfY29ubmVjdChzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbiBcdFNNQ19TVEFUX0NMTlRfU1VDQ19JTkMoc29ja19uZXQoc21jLVx1MDAzZWNsY3NvY2stXHUwMDNlc2spLCBhY2xjKTtcbiBcdHNtY19jb25uZWN0X2lzbV92bGFuX2NsZWFudXAoaW5pKTtcbiBcdGtmcmVlKGJ1Zik7XG4tXHRrZnJlZShpbmkpO1xuJiM0MztcdHNtY19pbml0X2luZm9fZnJlZShpbmkpO1xuIFx0cmV0dXJuIDA7XG4gXG4gdmxhbl9jbGVhbnVwOlxuIFx0c21jX2Nvbm5lY3RfaXNtX3ZsYW5fY2xlYW51cChpbmkpO1xuIFx0a2ZyZWUoYnVmKTtcbiBmYWxsYmFjazpcbi1cdGtmcmVlKGluaSk7XG4mIzQzO1x0c21jX2luaXRfaW5mb19mcmVlKGluaSk7XG4gXHRyZXR1cm4gc21jX2Nvbm5lY3RfZGVjbGluZV9mYWxsYmFjayhzbWMsIHJjLCB2ZXJzaW9uKTtcbiB9XG4gXG5AQCAtMjM0Myw3ICYjNDM7MjM0MywxMCBAQCBzdGF0aWMgdm9pZCBzbWNfZmluZF9yZG1hX3YyX2RldmljZV9zZXJ2KHN0cnVjdCBzbWNfc29jayAqbmV3X3NtYyxcbiBcbiBub3RfZm91bmQ6XG4gXHRpbmktXHUwMDNlc21jcl92ZXJzaW9uIFx1MDAyNj0gflNNQ19WMjtcbiYjNDM7XHRpZiAoaW5pLVx1MDAzZXNtY3J2Mi5pYl9kZXZfdjJfcmVmKVxuJiM0MztcdFx0c21jX2liZGV2X2luaXRfcHV0KGluaS1cdTAwM2VzbWNydjIuaWJfZGV2X3YyKTtcbiBcdGluaS1cdTAwM2VzbWNydjIuaWJfZGV2X3YyID0gTlVMTDtcbiYjNDM7XHRpbmktXHUwMDNlc21jcnYyLmliX2Rldl92Ml9yZWYgPSBmYWxzZTtcbiBcdGluaS1cdTAwM2VjaGVja19zbWNydjIgPSBmYWxzZTtcbiB9XG4gXG5AQCAtMjU4Nyw3ICYjNDM7MjU5MCw3IEBAIHN0YXRpYyB2b2lkIHNtY19saXN0ZW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRzbWNfbGlzdGVuX2RlY2xpbmUobmV3X3NtYywgcmMsIGluaSA/IGluaS1cdTAwM2VmaXJzdF9jb250YWN0X2xvY2FsIDogMCxcbiBcdFx0XHQgICBwcm9wb3NhbF92ZXJzaW9uKTtcbiBvdXRfZnJlZTpcbi1cdGtmcmVlKGluaSk7XG4mIzQzO1x0c21jX2luaXRfaW5mb19mcmVlKGluaSk7XG4gXHRrZnJlZShidWYpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmMgYi9uZXQvc21jL3NtY19jb3JlLmNcbmluZGV4IGNmNmI2MjBmZWYwNWYuLmU1OWYzMjdmMjk0YzIgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX2NvcmUuY1xuQEAgLTU1LDYgJiM0Mzs1NSwxNyBAQCBzdGF0aWMgdm9pZCBfX3NtY19sZ3JfdGVybWluYXRlKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLCBib29sIHNvZnQpO1xuIFxuIHN0YXRpYyB2b2lkIHNtY19saW5rX2Rvd25fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuIFxuJiM0Mzt2b2lkIHNtY19pbml0X2luZm9fZnJlZShzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFpbmkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKGluaS1cdTAwM2VpYl9kZXZfcmVmKVxuJiM0MztcdFx0c21jX2liZGV2X2luaXRfcHV0KGluaS1cdTAwM2VpYl9kZXYpO1xuJiM0MztcdGlmIChpbmktXHUwMDNlc21jcnYyLmliX2Rldl92Ml9yZWYpXG4mIzQzO1x0XHRzbWNfaWJkZXZfaW5pdF9wdXQoaW5pLVx1MDAzZXNtY3J2Mi5pYl9kZXZfdjIpO1xuJiM0MztcdGtmcmVlKGluaSk7XG4mIzQzO31cbiYjNDM7XG4gLyogcmV0dXJuIGhlYWQgb2YgbGluayBncm91cCBsaXN0IGFuZCBpdHMgbG9jayBmb3IgYSBnaXZlbiBsaW5rIGdyb3VwICovXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9oZWFkICpzbWNfbGdyX2xpc3RfaGVhZChzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbiBcdFx0XHRcdFx0XHQgIHNwaW5sb2NrX3QgKipsZ3JfbG9jaylcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmggYi9uZXQvc21jL3NtY19jb3JlLmhcbmluZGV4IDVjMThmMDhhNGM4YTUuLjM4NWYxNmNjNTM2OGUgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19jb3JlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX2NvcmUuaFxuQEAgLTQwMyw2ICYjNDM7NDAzLDcgQEAgc3RydWN0IHNtY19pbml0X2luZm9fc21jcnYyIHtcbiBcbiBcdC8qIE91dHB1dCBmaWVsZHMgd2hlbiBzYWRkciBpcyBzZXQgKi9cbiBcdHN0cnVjdCBzbWNfaWJfZGV2aWNlXHQqaWJfZGV2X3YyO1xuJiM0MztcdGJvb2xcdFx0XHRpYl9kZXZfdjJfcmVmO1xuIFx0dThcdFx0XHRpYl9wb3J0X3YyO1xuIFx0dThcdFx0XHRpYl9naWRfdjJbU01DX0dJRF9TSVpFXTtcbiBcbkBAIC00MzgsNiAmIzQzOzQzOSw3IEBAIHN0cnVjdCBzbWNfaW5pdF9pbmZvIHtcbiBcdHU4XHRcdFx0cGVlcl9tYWNbRVRIX0FMRU5dO1xuIFx0dThcdFx0XHRwZWVyX3N5c3RlbWlkW1NNQ19TWVNURU1JRF9MRU5dO1xuIFx0c3RydWN0IHNtY19pYl9kZXZpY2VcdCppYl9kZXY7XG4mIzQzO1x0Ym9vbFx0XHRcdGliX2Rldl9yZWY7XG4gXHR1OFx0XHRcdGliX2dpZFtTTUNfR0lEX1NJWkVdO1xuIFx0dThcdFx0XHRpYl9wb3J0O1xuIFx0dTMyXHRcdFx0aWJfY2xjcXBuO1xuQEAgLTU5NCw2ICYjNDM7NTk2LDcgQEAgdm9pZCBzbWNfcnRva2VuX3NldDIoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsIGludCBydG9rX2lkeCwgaW50IGxpbmtfaWQsXG4gdm9pZCBzbWNfc25kYnVmX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xuIHZvaWQgc21jX3JtYl9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcbiBpbnQgc21jX3ZsYW5fYnlfdGNwc2soc3RydWN0IHNvY2tldCAqY2xjc29jaywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSk7XG4mIzQzO3ZvaWQgc21jX2luaXRfaW5mb19mcmVlKHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpO1xuIFxuIHZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xuIGludCBzbWNfY29ubl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpO1xuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2liLmMgYi9uZXQvc21jL3NtY19pYi5jXG5pbmRleCA5YmI0OTU3MDc0NDVlLi4wMWM5YjVjNjJkZjc2IDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfaWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfaWIuY1xuQEAgLTk1MCw2ICYjNDM7OTUwLDggQEAgc3RhdGljIGludCBzbWNfaWJfYWRkX2RldihzdHJ1Y3QgaWJfZGV2aWNlICppYmRldilcbiBcbiBcdHNtY2liZGV2LVx1MDAzZWliZGV2ID0gaWJkZXY7XG4gXHRJTklUX1dPUksoXHUwMDI2c21jaWJkZXYtXHUwMDNlcG9ydF9ldmVudF93b3JrLCBzbWNfaWJfcG9ydF9ldmVudF93b3JrKTtcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnNtY2liZGV2LVx1MDAzZWluaXRfY250LCAwKTtcbiYjNDM7XHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNnNtY2liZGV2LVx1MDAzZWluaXRfd2FpdCk7XG4gXHRhdG9taWNfc2V0KFx1MDAyNnNtY2liZGV2LVx1MDAzZWxua19jbnQsIDApO1xuIFx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZzbWNpYmRldi1cdTAwM2VsbmtzX2RlbGV0ZWQpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZzbWNpYmRldi1cdTAwM2VtdXRleCk7XG5AQCAtMTAwMCw2ICYjNDM7MTAwMiw5IEBAIHN0YXRpYyB2b2lkIHNtY19pYl9yZW1vdmVfZGV2KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB2b2lkICpjbGllbnRfZGF0YSlcbiBcdG11dGV4X3VubG9jayhcdTAwMjZzbWNfaWJfZGV2aWNlcy5tdXRleCk7XG4gXHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O3NtYzogcmVtb3ZpbmcgaWIgZGV2aWNlICVzXFxuXCYjMzQ7LFxuIFx0XHRcdCAgICBzbWNpYmRldi1cdTAwM2VpYmRldi1cdTAwM2VuYW1lKTtcbiYjNDM7XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2c21jaWJkZXYtXHUwMDNlaW5pdF9jbnQpKVxuJiM0MztcdFx0d2FpdF9ldmVudChzbWNpYmRldi1cdTAwM2Vpbml0X3dhaXQsXG4mIzQzO1x0XHRcdCAgICFhdG9taWNfcmVhZChcdTAwMjZzbWNpYmRldi1cdTAwM2Vpbml0X2NudCkpO1xuIFx0c21jX3NtY3JfdGVybWluYXRlX2FsbChzbWNpYmRldik7XG4gXHRzbWNfaWJfY2xlYW51cF9wZXJfaWJkZXYoc21jaWJkZXYpO1xuIFx0aWJfdW5yZWdpc3Rlcl9ldmVudF9oYW5kbGVyKFx1MDAyNnNtY2liZGV2LVx1MDAzZWV2ZW50X2hhbmRsZXIpO1xuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2liLmggYi9uZXQvc21jL3NtY19pYi5oXG5pbmRleCBlZjhhYzJiNzU0NmRmLi44ZTlmZDVhMjAwYTJiIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfaWIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfaWIuaFxuQEAgLTUxLDYgJiM0Mzs1MSw4IEBAIHN0cnVjdCBzbWNfaWJfZGV2aWNlIHtcdFx0XHRcdC8qIGliLWRldmljZSBpbmZvcyBmb3Igc21jICovXG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHBvcnRfZXZlbnRfd29yaztcbiBcdHVuc2lnbmVkIGxvbmdcdFx0cG9ydF9ldmVudF9tYXNrO1xuIFx0REVDTEFSRV9CSVRNQVAocG9ydHNfZ29pbmdfYXdheSwgU01DX01BWF9QT1JUUyk7XG4mIzQzO1x0YXRvbWljX3RcdFx0aW5pdF9jbnQ7XHQvKiBudW1iZXIgb2YgZGV2aWNlIHNlbGVjdGlvbnMgKi9cbiYjNDM7XHR3YWl0X3F1ZXVlX2hlYWRfdFx0aW5pdF93YWl0O1x0Lyogd2FpdCBmb3Igc2VsZWN0aW9ucyB0byBlbmQgKi9cbiBcdGF0b21pY190XHRcdGxua19jbnQ7XHQvKiBudW1iZXIgb2YgbGlua3Mgb24gaWJkZXYgKi9cbiBcdHdhaXRfcXVldWVfaGVhZF90XHRsbmtzX2RlbGV0ZWQ7XHQvKiB3YWl0IDQgcmVtb3ZhbCBvZiBhbGwgbGlua3MqL1xuIFx0c3RydWN0IG11dGV4XHRcdG11dGV4O1x0XHQvKiBwcm90ZWN0IGRldiBzZXR1cCYjNDM7Y2xlYW51cCAqL1xuQEAgLTU5LDYgJiM0Mzs2MSwxNyBAQCBzdHJ1Y3Qgc21jX2liX2RldmljZSB7XHRcdFx0XHQvKiBpYi1kZXZpY2UgaW5mb3MgZm9yIHNtYyAqL1xuIFx0aW50XHRcdFx0bmRldl9pZmlkeFtTTUNfTUFYX1BPUlRTXTsgLyogbmRldiBpZiBpbmRleGVzICovXG4gfTtcbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNtY19pYmRldl9pbml0X2dldChzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYpXG4mIzQzO3tcbiYjNDM7XHRhdG9taWNfaW5jKFx1MDAyNnNtY2liZGV2LVx1MDAzZWluaXRfY250KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNtY19pYmRldl9pbml0X3B1dChzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZzbWNpYmRldi1cdTAwM2Vpbml0X2NudCkpXG4mIzQzO1x0XHR3YWtlX3VwKFx1MDAyNnNtY2liZGV2LVx1MDAzZWluaXRfd2FpdCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBfX2JlMzIgc21jX2liX2dpZF90b19pcHY0KHU4IGdpZFtTTUNfR0lEX1NJWkVdKVxuIHtcbiBcdHN0cnVjdCBpbjZfYWRkciAqYWRkcjYgPSAoc3RydWN0IGluNl9hZGRyICopZ2lkO1xuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2xsYy5jIGIvbmV0L3NtYy9zbWNfbGxjLmNcbmluZGV4IDk1NGIyZmYxODE1YzIuLjE1YWUxOWE5ZGIwN2UgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19sbGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfbGxjLmNcbkBAIC0xMTE4LDcgJiM0MzsxMTE4LDcgQEAgaW50IHNtY19sbGNfY2xpX2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaywgc3RydWN0IHNtY19sbGNfcWVudHJ5ICpxZW50cnkpXG4gb3V0X3JlamVjdDpcbiBcdHNtY19sbGNfY2xpX2FkZF9saW5rX3JlamVjdChxZW50cnkpO1xuIG91dDpcbi1cdGtmcmVlKGluaSk7XG4mIzQzO1x0c21jX2luaXRfaW5mb19mcmVlKGluaSk7XG4gXHRrZnJlZShxZW50cnkpO1xuIFx0cmV0dXJuIHJjO1xuIH1cbkBAIC0xMTkyLDcgJiM0MzsxMTkyLDcgQEAgc3RhdGljIHZvaWQgc21jX2xsY19jbGlfYWRkX2xpbmtfaW52aXRlKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcdHNtY19sbGNfc2VuZF9hZGRfbGluayhsaW5rLCBpbmktXHUwMDNlaWJfZGV2LVx1MDAzZW1hY1tpbmktXHUwMDNlaWJfcG9ydCAtIDFdLFxuIFx0XHRcdCAgICAgIGluaS1cdTAwM2VpYl9naWQsIE5VTEwsIFNNQ19MTENfUkVRKTtcbiBvdXQ6XG4tXHRrZnJlZShpbmkpO1xuJiM0MztcdHNtY19pbml0X2luZm9fZnJlZShpbmkpO1xuIFx0a2ZyZWUocWVudHJ5KTtcbiB9XG4gXG5AQCAtMTUxMiw3ICYjNDM7MTUxMiw3IEBAIGludCBzbWNfbGxjX3Nydl9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gXHRyYyA9IHNtY19sbGNfc3J2X2NvbmZfbGluayhsaW5rLCBsaW5rX25ldywgbGdyX25ld190KTtcbiBcdGlmIChyYylcbiBcdFx0Z290byBvdXRfZXJyO1xuLVx0a2ZyZWUoaW5pKTtcbiYjNDM7XHRzbWNfaW5pdF9pbmZvX2ZyZWUoaW5pKTtcbiBcdHJldHVybiAwO1xuIG91dF9lcnI6XG4gXHRpZiAobGlua19uZXcpIHtcbkBAIC0xNTIwLDcgJiM0MzsxNTIwLDcgQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcdFx0c21jcl9saW5rX2NsZWFyKGxpbmtfbmV3LCBmYWxzZSk7XG4gXHR9XG4gb3V0OlxuLVx0a2ZyZWUoaW5pKTtcbiYjNDM7XHRzbWNfaW5pdF9pbmZvX2ZyZWUoaW5pKTtcbiBcdGlmIChzZW5kX3JlcV9hZGRfbGlua19yZXNwKVxuIFx0XHRzbWNfbGxjX3NlbmRfcmVxX2FkZF9saW5rX3Jlc3BvbnNlKHJlcV9xZW50cnkpO1xuIFx0cmV0dXJuIHJjO1xuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX3BuZXQuYyBiL25ldC9zbWMvc21jX3BuZXQuY1xuaW5kZXggNjNlMjg2ZTJkZmFhOC4uN2UwMWUwMWE1MjJiNyAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jX3BuZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfcG5ldC5jXG5AQCAtOTgwLDE0ICYjNDM7OTgwLDIyIEBAIHN0YXRpYyBpbnQgc21jX3BuZXRfZGV0ZXJtaW5lX2dpZChzdHJ1Y3Qgc21jX2liX2RldmljZSAqaWJkZXYsIGludCBpLFxuIFx0aWYgKCFpbmktXHUwMDNlY2hlY2tfc21jcnYyIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFzbWNfaWJfZGV0ZXJtaW5lX2dpZChpYmRldiwgaSwgaW5pLVx1MDAzZXZsYW5faWQsIGluaS1cdTAwM2VpYl9naWQsIE5VTEwsXG4gXHRcdFx0XHQgIE5VTEwpKSB7XG4mIzQzO1x0XHRpZiAoaW5pLVx1MDAzZWliX2Rldl9yZWYpXG4mIzQzO1x0XHRcdHNtY19pYmRldl9pbml0X3B1dChpbmktXHUwMDNlaWJfZGV2KTtcbiYjNDM7XHRcdHNtY19pYmRldl9pbml0X2dldChpYmRldik7XG4gXHRcdGluaS1cdTAwM2VpYl9kZXYgPSBpYmRldjtcbiYjNDM7XHRcdGluaS1cdTAwM2VpYl9kZXZfcmVmID0gdHJ1ZTtcbiBcdFx0aW5pLVx1MDAzZWliX3BvcnQgPSBpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdGlmIChpbmktXHUwMDNlY2hlY2tfc21jcnYyIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFzbWNfaWJfZGV0ZXJtaW5lX2dpZChpYmRldiwgaSwgaW5pLVx1MDAzZXZsYW5faWQsIGluaS1cdTAwM2VzbWNydjIuaWJfZ2lkX3YyLFxuIFx0XHRcdFx0ICBOVUxMLCBcdTAwMjZpbmktXHUwMDNlc21jcnYyKSkge1xuJiM0MztcdFx0aWYgKGluaS1cdTAwM2VzbWNydjIuaWJfZGV2X3YyX3JlZilcbiYjNDM7XHRcdFx0c21jX2liZGV2X2luaXRfcHV0KGluaS1cdTAwM2VzbWNydjIuaWJfZGV2X3YyKTtcbiYjNDM7XHRcdHNtY19pYmRldl9pbml0X2dldChpYmRldik7XG4gXHRcdGluaS1cdTAwM2VzbWNydjIuaWJfZGV2X3YyID0gaWJkZXY7XG4mIzQzO1x0XHRpbmktXHUwMDNlc21jcnYyLmliX2Rldl92Ml9yZWYgPSB0cnVlO1xuIFx0XHRpbmktXHUwMDNlc21jcnYyLmliX3BvcnRfdjIgPSBpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7RElCUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY19jb25uZWN0JiMzNDssCiAgICAmIzM0O3NtY19saXN0ZW4mIzM0OywKICAgICYjMzQ7c21jX3BuZXRfZmluZF9yb2NlX3Jlc291cmNlJiMzNDssCiAgICAmIzM0O3NtY19wbmV0X2ZpbmRfYWx0X3JvY2UmIzM0OywKICAgICYjMzQ7c21jX2xsY19jbGlfYWRkX2xpbmsmIzM0OywKICAgICYjMzQ7c21jX2xsY19zcnZfYWRkX2xpbmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgZGV2aWNlIHJlbW92YWwgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgc3Vic3lzdGVtIGJ5IGludHJvZHVjaW5nIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgYHNtY19pYl9kZXZpY2VgIGR1cmluZyBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uLiBUaGUgY2hhbmdlcyBtb2RpZnkgY29yZSBjb25uZWN0aW9uIHNldHVwIHBhdGhzIChgc21jX2Nvbm5lY3RgLCBgc21jX2xpc3RlbmApIGFuZCBsaW5rIGFkZGl0aW9uIHBhdGhzIChgc21jX2xsY19jbGlfYWRkX2xpbmtgLCBgc21jX2xsY19zcnZfYWRkX2xpbmtgKS4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQUZfU01DIHNvY2tldHMgYW5kIGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYWU1ZWZkOTFjNWMzYmFmN2FlMGU4YTg3NmEyNGJjZmFmMDEyYTdjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgNCAxMjo1OTo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zbWMvYWZfc21jLmMgYi9uZXQvc21jL2FmX3NtYy5jCmluZGV4IGI1ZGI2OTA3M2UyMGYuLjE2MDI3MTQ2NDMwNWMgMTAwNjQ0Ci0tLSBhL25ldC9zbWMvYWZfc21jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9hZl9zbWMuYwpAQCAtMTIyNSw3ICYjNDM7MTIyNSw3IEBAIHZvaWQgc21jX2ZpbGxfZ2lkX2xpc3Qoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsCiAJICAgICAgIFNNQ19HSURfU0laRSk7CiAKIG91dDoKLQlrZnJlZShhbHRfaW5pKTsKJiM0MzsJc21jX2luaXRfaW5mb19mcmVlKGFsdF9pbmkpOwogfQogCiBzdGF0aWMgaW50IHNtY19jb25uZWN0X3JkbWFfdjJfcHJlcGFyZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywKQEAgLTE1OTYsMTQgJiM0MzsxNTk2LDE0IEBAIHN0YXRpYyBpbnQgX19zbWNfY29ubmVjdChzdHJ1Y3Qgc21jX3NvY2sgKnNtYykKIAlTTUNfU1RBVF9DTE5UX1NVQ0NfSU5DKHNvY2tfbmV0KHNtYy0mZ3Q7Y2xjc29jay0mZ3Q7c2spLCBhY2xjKTsKIAlzbWNfY29ubmVjdF9pc21fdmxhbl9jbGVhbnVwKGluaSk7CiAJa2ZyZWUoYnVmKTsKLQlrZnJlZShpbmkpOwomIzQzOwlzbWNfaW5pdF9pbmZvX2ZyZWUoaW5pKTsKIAlyZXR1cm4gMDsKIAogdmxhbl9jbGVhbnVwOgogCXNtY19jb25uZWN0X2lzbV92bGFuX2NsZWFudXAoaW5pKTsKIAlrZnJlZShidWYpOwogZmFsbGJhY2s6Ci0Ja2ZyZWUoaW5pKTsKJiM0MzsJc21jX2luaXRfaW5mb19mcmVlKGluaSk7CiAJcmV0dXJuIHNtY19jb25uZWN0X2RlY2xpbmVfZmFsbGJhY2soc21jLCByYywgdmVyc2lvbik7CiB9CiAKQEAgLTIzNDMsNyAmIzQzOzIzNDMsMTAgQEAgc3RhdGljIHZvaWQgc21jX2ZpbmRfcmRtYV92Ml9kZXZpY2Vfc2VydihzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMsCiAKIG5vdF9mb3VuZDoKIAlpbmktJmd0O3NtY3JfdmVyc2lvbiAmYW1wOz0gflNNQ19WMjsKJiM0MzsJaWYgKGluaS0mZ3Q7c21jcnYyLmliX2Rldl92Ml9yZWYpCiYjNDM7CQlzbWNfaWJkZXZfaW5pdF9wdXQoaW5pLSZndDtzbWNydjIuaWJfZGV2X3YyKTsKIAlpbmktJmd0O3NtY3J2Mi5pYl9kZXZfdjIgPSBOVUxMOwomIzQzOwlpbmktJmd0O3NtY3J2Mi5pYl9kZXZfdjJfcmVmID0gZmFsc2U7CiAJaW5pLSZndDtjaGVja19zbWNydjIgPSBmYWxzZTsKIH0KIApAQCAtMjU4Nyw3ICYjNDM7MjU5MCw3IEBAIHN0YXRpYyB2b2lkIHNtY19saXN0ZW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJc21jX2xpc3Rlbl9kZWNsaW5lKG5ld19zbWMsIHJjLCBpbmkgPyBpbmktJmd0O2ZpcnN0X2NvbnRhY3RfbG9jYWwgOiAwLAogCQkJICAgcHJvcG9zYWxfdmVyc2lvbik7CiBvdXRfZnJlZToKLQlrZnJlZShpbmkpOwomIzQzOwlzbWNfaW5pdF9pbmZvX2ZyZWUoaW5pKTsKIAlrZnJlZShidWYpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmMgYi9uZXQvc21jL3NtY19jb3JlLmMKaW5kZXggY2Y2YjYyMGZlZjA1Zi4uZTU5ZjMyN2YyOTRjMiAxMDA2NDQKLS0tIGEvbmV0L3NtYy9zbWNfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX2NvcmUuYwpAQCAtNTUsNiAmIzQzOzU1LDE3IEBAIHN0YXRpYyB2b2lkIF9fc21jX2xncl90ZXJtaW5hdGUoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsIGJvb2wgc29mdCk7CiAKIHN0YXRpYyB2b2lkIHNtY19saW5rX2Rvd25fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCiYjNDM7dm9pZCBzbWNfaW5pdF9pbmZvX2ZyZWUoc3RydWN0IHNtY19pbml0X2luZm8gKmluaSkKJiM0Mzt7CiYjNDM7CWlmICghaW5pKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpZiAoaW5pLSZndDtpYl9kZXZfcmVmKQomIzQzOwkJc21jX2liZGV2X2luaXRfcHV0KGluaS0mZ3Q7aWJfZGV2KTsKJiM0MzsJaWYgKGluaS0mZ3Q7c21jcnYyLmliX2Rldl92Ml9yZWYpCiYjNDM7CQlzbWNfaWJkZXZfaW5pdF9wdXQoaW5pLSZndDtzbWNydjIuaWJfZGV2X3YyKTsKJiM0MzsJa2ZyZWUoaW5pKTsKJiM0Mzt9CiYjNDM7CiAvKiByZXR1cm4gaGVhZCBvZiBsaW5rIGdyb3VwIGxpc3QgYW5kIGl0cyBsb2NrIGZvciBhIGdpdmVuIGxpbmsgZ3JvdXAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfaGVhZCAqc21jX2xncl9saXN0X2hlYWQoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsCiAJCQkJCQkgIHNwaW5sb2NrX3QgKipsZ3JfbG9jaykKZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2NvcmUuaCBiL25ldC9zbWMvc21jX2NvcmUuaAppbmRleCA1YzE4ZjA4YTRjOGE1Li4zODVmMTZjYzUzNjhlIDEwMDY0NAotLS0gYS9uZXQvc21jL3NtY19jb3JlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfY29yZS5oCkBAIC00MDMsNiAmIzQzOzQwMyw3IEBAIHN0cnVjdCBzbWNfaW5pdF9pbmZvX3NtY3J2MiB7CiAKIAkvKiBPdXRwdXQgZmllbGRzIHdoZW4gc2FkZHIgaXMgc2V0ICovCiAJc3RydWN0IHNtY19pYl9kZXZpY2UJKmliX2Rldl92MjsKJiM0MzsJYm9vbAkJCWliX2Rldl92Ml9yZWY7CiAJdTgJCQlpYl9wb3J0X3YyOwogCXU4CQkJaWJfZ2lkX3YyW1NNQ19HSURfU0laRV07CiAKQEAgLTQzOCw2ICYjNDM7NDM5LDcgQEAgc3RydWN0IHNtY19pbml0X2luZm8gewogCXU4CQkJcGVlcl9tYWNbRVRIX0FMRU5dOwogCXU4CQkJcGVlcl9zeXN0ZW1pZFtTTUNfU1lTVEVNSURfTEVOXTsKIAlzdHJ1Y3Qgc21jX2liX2RldmljZQkqaWJfZGV2OwomIzQzOwlib29sCQkJaWJfZGV2X3JlZjsKIAl1OAkJCWliX2dpZFtTTUNfR0lEX1NJWkVdOwogCXU4CQkJaWJfcG9ydDsKIAl1MzIJCQlpYl9jbGNxcG47CkBAIC01OTQsNiAmIzQzOzU5Niw3IEBAIHZvaWQgc21jX3J0b2tlbl9zZXQyKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLCBpbnQgcnRva19pZHgsIGludCBsaW5rX2lkLAogdm9pZCBzbWNfc25kYnVmX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pOwogdm9pZCBzbWNfcm1iX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pOwogaW50IHNtY192bGFuX2J5X3RjcHNrKHN0cnVjdCBzb2NrZXQgKmNsY3NvY2ssIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpOwomIzQzO3ZvaWQgc21jX2luaXRfaW5mb19mcmVlKHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpOwogCiB2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTsKIGludCBzbWNfY29ubl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpOwpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfaWIuYyBiL25ldC9zbWMvc21jX2liLmMKaW5kZXggOWJiNDk1NzA3NDQ1ZS4uMDFjOWI1YzYyZGY3NiAxMDA2NDQKLS0tIGEvbmV0L3NtYy9zbWNfaWIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19pYi5jCkBAIC05NTAsNiAmIzQzOzk1MCw4IEBAIHN0YXRpYyBpbnQgc21jX2liX2FkZF9kZXYoc3RydWN0IGliX2RldmljZSAqaWJkZXYpCiAKIAlzbWNpYmRldi0mZ3Q7aWJkZXYgPSBpYmRldjsKIAlJTklUX1dPUksoJmFtcDtzbWNpYmRldi0mZ3Q7cG9ydF9ldmVudF93b3JrLCBzbWNfaWJfcG9ydF9ldmVudF93b3JrKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3NtY2liZGV2LSZndDtpbml0X2NudCwgMCk7CiYjNDM7CWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFtcDtzbWNpYmRldi0mZ3Q7aW5pdF93YWl0KTsKIAlhdG9taWNfc2V0KCZhbXA7c21jaWJkZXYtJmd0O2xua19jbnQsIDApOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFtcDtzbWNpYmRldi0mZ3Q7bG5rc19kZWxldGVkKTsKIAltdXRleF9pbml0KCZhbXA7c21jaWJkZXYtJmd0O211dGV4KTsKQEAgLTEwMDAsNiAmIzQzOzEwMDIsOSBAQCBzdGF0aWMgdm9pZCBzbWNfaWJfcmVtb3ZlX2RldihzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdm9pZCAqY2xpZW50X2RhdGEpCiAJbXV0ZXhfdW5sb2NrKCZhbXA7c21jX2liX2RldmljZXMubXV0ZXgpOwogCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtzbWM6IHJlbW92aW5nIGliIGRldmljZSAlc1xuJiMzNDssCiAJCQkgICAgc21jaWJkZXYtJmd0O2liZGV2LSZndDtuYW1lKTsKJiM0MzsJaWYgKGF0b21pY19yZWFkKCZhbXA7c21jaWJkZXYtJmd0O2luaXRfY250KSkKJiM0MzsJCXdhaXRfZXZlbnQoc21jaWJkZXYtJmd0O2luaXRfd2FpdCwKJiM0MzsJCQkgICAhYXRvbWljX3JlYWQoJmFtcDtzbWNpYmRldi0mZ3Q7aW5pdF9jbnQpKTsKIAlzbWNfc21jcl90ZXJtaW5hdGVfYWxsKHNtY2liZGV2KTsKIAlzbWNfaWJfY2xlYW51cF9wZXJfaWJkZXYoc21jaWJkZXYpOwogCWliX3VucmVnaXN0ZXJfZXZlbnRfaGFuZGxlcigmYW1wO3NtY2liZGV2LSZndDtldmVudF9oYW5kbGVyKTsKZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2liLmggYi9uZXQvc21jL3NtY19pYi5oCmluZGV4IGVmOGFjMmI3NTQ2ZGYuLjhlOWZkNWEyMDBhMmIgMTAwNjQ0Ci0tLSBhL25ldC9zbWMvc21jX2liLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfaWIuaApAQCAtNTEsNiAmIzQzOzUxLDggQEAgc3RydWN0IHNtY19pYl9kZXZpY2UgewkJCQkvKiBpYi1kZXZpY2UgaW5mb3MgZm9yIHNtYyAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdAlwb3J0X2V2ZW50X3dvcms7CiAJdW5zaWduZWQgbG9uZwkJcG9ydF9ldmVudF9tYXNrOwogCURFQ0xBUkVfQklUTUFQKHBvcnRzX2dvaW5nX2F3YXksIFNNQ19NQVhfUE9SVFMpOwomIzQzOwlhdG9taWNfdAkJaW5pdF9jbnQ7CS8qIG51bWJlciBvZiBkZXZpY2Ugc2VsZWN0aW9ucyAqLwomIzQzOwl3YWl0X3F1ZXVlX2hlYWRfdAlpbml0X3dhaXQ7CS8qIHdhaXQgZm9yIHNlbGVjdGlvbnMgdG8gZW5kICovCiAJYXRvbWljX3QJCWxua19jbnQ7CS8qIG51bWJlciBvZiBsaW5rcyBvbiBpYmRldiAqLwogCXdhaXRfcXVldWVfaGVhZF90CWxua3NfZGVsZXRlZDsJLyogd2FpdCA0IHJlbW92YWwgb2YgYWxsIGxpbmtzKi8KIAlzdHJ1Y3QgbXV0ZXgJCW11dGV4OwkJLyogcHJvdGVjdCBkZXYgc2V0dXAmIzQzO2NsZWFudXAgKi8KQEAgLTU5LDYgJiM0Mzs2MSwxNyBAQCBzdHJ1Y3Qgc21jX2liX2RldmljZSB7CQkJCS8qIGliLWRldmljZSBpbmZvcyBmb3Igc21jICovCiAJaW50CQkJbmRldl9pZmlkeFtTTUNfTUFYX1BPUlRTXTsgLyogbmRldiBpZiBpbmRleGVzICovCiB9OwogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNtY19pYmRldl9pbml0X2dldChzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYpCiYjNDM7ewomIzQzOwlhdG9taWNfaW5jKCZhbXA7c21jaWJkZXYtJmd0O2luaXRfY250KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNtY19pYmRldl9pbml0X3B1dChzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYpCiYjNDM7ewomIzQzOwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYW1wO3NtY2liZGV2LSZndDtpbml0X2NudCkpCiYjNDM7CQl3YWtlX3VwKCZhbXA7c21jaWJkZXYtJmd0O2luaXRfd2FpdCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBfX2JlMzIgc21jX2liX2dpZF90b19pcHY0KHU4IGdpZFtTTUNfR0lEX1NJWkVdKQogewogCXN0cnVjdCBpbjZfYWRkciAqYWRkcjYgPSAoc3RydWN0IGluNl9hZGRyICopZ2lkOwpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfbGxjLmMgYi9uZXQvc21jL3NtY19sbGMuYwppbmRleCA5NTRiMmZmMTgxNWMyLi4xNWFlMTlhOWRiMDdlIDEwMDY0NAotLS0gYS9uZXQvc21jL3NtY19sbGMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19sbGMuYwpAQCAtMTExOCw3ICYjNDM7MTExOCw3IEBAIGludCBzbWNfbGxjX2NsaV9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqcWVudHJ5KQogb3V0X3JlamVjdDoKIAlzbWNfbGxjX2NsaV9hZGRfbGlua19yZWplY3QocWVudHJ5KTsKIG91dDoKLQlrZnJlZShpbmkpOwomIzQzOwlzbWNfaW5pdF9pbmZvX2ZyZWUoaW5pKTsKIAlrZnJlZShxZW50cnkpOwogCXJldHVybiByYzsKIH0KQEAgLTExOTIsNyAmIzQzOzExOTIsNyBAQCBzdGF0aWMgdm9pZCBzbWNfbGxjX2NsaV9hZGRfbGlua19pbnZpdGUoc3RydWN0IHNtY19saW5rICpsaW5rLAogCXNtY19sbGNfc2VuZF9hZGRfbGluayhsaW5rLCBpbmktJmd0O2liX2Rldi0mZ3Q7bWFjW2luaS0mZ3Q7aWJfcG9ydCAtIDFdLAogCQkJICAgICAgaW5pLSZndDtpYl9naWQsIE5VTEwsIFNNQ19MTENfUkVRKTsKIG91dDoKLQlrZnJlZShpbmkpOwomIzQzOwlzbWNfaW5pdF9pbmZvX2ZyZWUoaW5pKTsKIAlrZnJlZShxZW50cnkpOwogfQogCkBAIC0xNTEyLDcgJiM0MzsxNTEyLDcgQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaywKIAlyYyA9IHNtY19sbGNfc3J2X2NvbmZfbGluayhsaW5rLCBsaW5rX25ldywgbGdyX25ld190KTsKIAlpZiAocmMpCiAJCWdvdG8gb3V0X2VycjsKLQlrZnJlZShpbmkpOwomIzQzOwlzbWNfaW5pdF9pbmZvX2ZyZWUoaW5pKTsKIAlyZXR1cm4gMDsKIG91dF9lcnI6CiAJaWYgKGxpbmtfbmV3KSB7CkBAIC0xNTIwLDcgJiM0MzsxNTIwLDcgQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaywKIAkJc21jcl9saW5rX2NsZWFyKGxpbmtfbmV3LCBmYWxzZSk7CiAJfQogb3V0OgotCWtmcmVlKGluaSk7CiYjNDM7CXNtY19pbml0X2luZm9fZnJlZShpbmkpOwogCWlmIChzZW5kX3JlcV9hZGRfbGlua19yZXNwKQogCQlzbWNfbGxjX3NlbmRfcmVxX2FkZF9saW5rX3Jlc3BvbnNlKHJlcV9xZW50cnkpOwogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX3BuZXQuYyBiL25ldC9zbWMvc21jX3BuZXQuYwppbmRleCA2M2UyODZlMmRmYWE4Li43ZTAxZTAxYTUyMmI3IDEwMDY0NAotLS0gYS9uZXQvc21jL3NtY19wbmV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfcG5ldC5jCkBAIC05ODAsMTQgJiM0Mzs5ODAsMjIgQEAgc3RhdGljIGludCBzbWNfcG5ldF9kZXRlcm1pbmVfZ2lkKHN0cnVjdCBzbWNfaWJfZGV2aWNlICppYmRldiwgaW50IGksCiAJaWYgKCFpbmktJmd0O2NoZWNrX3NtY3J2MiAmYW1wOyZhbXA7CiAJICAgICFzbWNfaWJfZGV0ZXJtaW5lX2dpZChpYmRldiwgaSwgaW5pLSZndDt2bGFuX2lkLCBpbmktJmd0O2liX2dpZCwgTlVMTCwKIAkJCQkgIE5VTEwpKSB7CiYjNDM7CQlpZiAoaW5pLSZndDtpYl9kZXZfcmVmKQomIzQzOwkJCXNtY19pYmRldl9pbml0X3B1dChpbmktJmd0O2liX2Rldik7CiYjNDM7CQlzbWNfaWJkZXZfaW5pdF9nZXQoaWJkZXYpOwogCQlpbmktJmd0O2liX2RldiA9IGliZGV2OwomIzQzOwkJaW5pLSZndDtpYl9kZXZfcmVmID0gdHJ1ZTsKIAkJaW5pLSZndDtpYl9wb3J0ID0gaTsKIAkJcmV0dXJuIDA7CiAJfQogCWlmIChpbmktJmd0O2NoZWNrX3NtY3J2MiAmYW1wOyZhbXA7CiAJICAgICFzbWNfaWJfZGV0ZXJtaW5lX2dpZChpYmRldiwgaSwgaW5pLSZndDt2bGFuX2lkLCBpbmktJmd0O3NtY3J2Mi5pYl9naWRfdjIsCiAJCQkJICBOVUxMLCAmYW1wO2luaS0mZ3Q7c21jcnYyKSkgewomIzQzOwkJaWYgKGluaS0mZ3Q7c21jcnYyLmliX2Rldl92Ml9yZWYpCiYjNDM7CQkJc21jX2liZGV2X2luaXRfcHV0KGluaS0mZ3Q7c21jcnYyLmliX2Rldl92Mik7CiYjNDM7CQlzbWNfaWJkZXZfaW5pdF9nZXQoaWJkZXYpOwogCQlpbmktJmd0O3NtY3J2Mi5pYl9kZXZfdjIgPSBpYmRldjsKJiM0MzsJCWluaS0mZ3Q7c21jcnYyLmliX2Rldl92Ml9yZWYgPSB0cnVlOwogCQlpbmktJmd0O3NtY3J2Mi5pYl9wb3J0X3YyID0gaTsKIAkJcmV0dXJuIDA7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDc5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTTUMgU3Vic3lzdGVtIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgcXVpdGUgYSBmZXcgZmlsZXMgd2l0aGluIHRoZSBgbmV0L3NtY2AgZGlyZWN0b3J5OiBgYWZfc21jLmNgLCBgc21jX2NvcmUuY2AsIGBzbWNfY29yZS5oYCwgYHNtY19pYi5jYCwgYHNtY19pYi5oYCwgYHNtY19sbGMuY2AsIGFuZCBgc21jX3BuZXQuY2AuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCYjMzk7cyBmb2N1c2VkIG9uIHRoZSBTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IEFGX1NNQyBzb2NrZXRzLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbG93LWxldmVsIG5ldHdvcmsgY29tbXVuaWNhdGlvbiB3aXRoIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBgc21jX2luaXRfaW5mb19mcmVlYCByZXBsYWNpbmcgYSBkaXJlY3QgYGtmcmVlKGluaSlgLiBUaGF0JiMzOTtzIGFsd2F5cyBhIHJlZCBmbGFnIHRoYXQgbWFrZXMgbWUgcGF5IGF0dGVudGlvbjsgdGhpcyBzdWdnZXN0cyBhIHJlc291cmNlIG1hbmFnZW1lbnQgaXNzdWUsIGxpa2VseSBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCBvciBzb21ldGhpbmcgc2ltaWxhci4gIFRoZSBhZGRpdGlvbiBvZiBgaWJfZGV2X3JlZmAgYW5kIGBpYl9kZXZfdjJfcmVmYCB0byB0aGUgYHNtY19pbml0X2luZm9gIHN0cnVjdHVyZXMsIGFuZCB0aGUgaW50cm9kdWN0aW9uIG9mIGBhdG9taWNfdCBpbml0X2NudGAgYW5kIGB3YWl0X3F1ZXVlX2hlYWRfdCBpbml0X3dhaXRgIHRvIHRoZSBgc21jX2liX2RldmljZWAgYXJlIGNsZWFybHkgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgYW5kIHJlZmVyZW5jZSBjb3VudGluZy4gVGhlIGluY3JlbWVudGluZyBvZiBgaW5pdF9jbnRgIHdoZW4gYSBkZXZpY2UgaXMgc2VsZWN0ZWQgYW5kIHRoZSB3YWl0IGluIGBzbWNfaWJfcmVtb3ZlX2RldmAgcmVhbGx5IHNvbGlkaWZ5IHRoaXM7IGl0JiMzOTtzIGRlc2lnbmVkIHRvIHByZXZlbnQgdGhlIGRldmljZSBmcm9tIGJlaW5nIHJlbW92ZWQgd2hpbGUgdGhlcmUgYXJlIHN0aWxsIGFjdGl2ZSByZWZlcmVuY2VzIHRvIGl0IGZyb20gdGhlIGBzbWNfaW5pdF9pbmZvYCBzdHJ1Y3R1cmVzLiBTbywgdGhlIHBhdGNoIGlzIHRyeWluZyB0byBmaXggdGhlIHJhY2UgY29uZGl0aW9uIHdoZXJlIGBzbWNfaWJfZGV2aWNlYCBjb3VsZCBiZSByZW1vdmVkIHByZW1hdHVyZWx5LCBsZWF2aW5nIGRhbmdsaW5nIHBvaW50ZXJzLiAgTWFrZXMgc2Vuc2UsIHRoYXQmIzM5O3MgZXhhY3RseSB0aGUga2luZCBvZiB2dWxuZXJhYmlsaXR5IEkgd291bGQgZXhwZWN0IHRvIHNlZSBpbiBhIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGxpa2UgdGhpcywgd2hlcmUgeW91IGhhdmUgbXVsdGlwbGUgdGhyZWFkcyBhbmQgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgaW50ZXJhY3Rpbmcgd2l0aCBzaGFyZWQgaGFyZHdhcmUgcmVzb3VyY2VzLgoKVGhlIGZhY3QgdGhhdCB0aGlzIGlzIGluIFNNQywgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSB2aWEgQUZfU01DLCBpbnN0YW50bHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgZnV6emluZy4gIEkga25vdyBzeXprYWxsZXIgdGFyZ2V0cyBBRl9TTUMsIHNvIHRoYXQmIzM5O3MgZ29vZC4gV2UgaGF2ZSBhIHRlc3QgaGFybmVzcyBhbHJlYWR5IGZvciB0aGlzLgoKSSYjMzk7bGwgcXVpY2tseSBjaGVjayBmb3IgYW55IHNwZWNpZmljIGBDT05GSUdgIHJlcXVpcmVtZW50cy4gSSYjMzk7ZCBleHBlY3QgYENPTkZJR19TTUNgIHRvIGJlIHRoZSBwcmltYXJ5IG9uZSwgYnV0IEkmIzM5O2xsIHNlYXJjaCB0aGUgS2NvbmZpZyBmaWxlcyBqdXN0IHRvIGJlIGNlcnRhaW4gdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyB0aGF0IHdvdWxkIG1ha2UgdGhpcyBmaXggbGVzcyBicm9hZGx5IGFwcGxpY2FibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNNQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9zbWMvS2NvbmZpZzoyOmNvbmZpZyBTTUNcbm5ldC9zbWMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbi0tXG5uZXQvc21jL0tjb25maWctMTMtXG5uZXQvc21jL0tjb25maWc6MTQ6Y29uZmlnIFNNQ19ESUFHXG5uZXQvc21jL0tjb25maWctMTUtXHR0cmlzdGF0ZSBcJiMzNDtTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9zbWMvS2NvbmZpZy0yMi1cbm5ldC9zbWMvS2NvbmZpZzoyMzpjb25maWcgU01DX0hTX0NUUkxfQlBGXG5uZXQvc21jL0tjb25maWctMjQtXHRib29sIFwmIzM0O0dlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjE1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU01DIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgQ09ORklHX1NNQ2Ag4oCTIHRoYXQmIzM5O3MgdGhlIGNvbmZpZ3VyYXRpb24gd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gem9vbSBpbiBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIGVpdGhlciBtb2RpZmllZCBvciBuZXdseSBhZGRlZCB3aXRoaW4gdGhpcyBjb250ZXh0LiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBzdGFuZCBvdXQ6IGBzbWNfaW5pdF9pbmZvX2ZyZWVgLCBgc21jX2liX3JlbW92ZV9kZXZgLCBgc21jX3BuZXRfZGV0ZXJtaW5lX2dpZGAsIGBzbWNfZmluZF9yZG1hX3YyX2RldmljZV9zZXJ2YCwgYHNtY19saXN0ZW5fd29ya2AsIGBfX3NtY19jb25uZWN0YCwgYHNtY19maWxsX2dpZF9saXN0YCwgYHNtY19sbGNfY2xpX2FkZF9saW5rYCwgYHNtY19sbGNfY2xpX2FkZF9saW5rX2ludml0ZWAsIGFuZCBgc21jX2xsY19zcnZfYWRkX2xpbmtgLgoKTG9va2luZyBhdCB0aGF0IGxpc3QsIEkmIzM5O20gdGhpbmtpbmcgdGhlIHJlYWwga2V5IG9uZXMgdG8gZGlzc2VjdCBmdXJ0aGVyIGFyZTogYF9fc21jX2Nvbm5lY3RgLCBgc21jX2xpc3Rlbl93b3JrYCwgYHNtY19wbmV0X2RldGVybWluZV9naWRgLCBhbmQgYHNtY19pYl9yZW1vdmVfZGV2YC4gVGhvc2UgZmVlbCBsaWtlIHRoZSBjb3JlIG9mIHRoZSBzaWduaWZpY2FudCBjaGFuZ2VzIGhlcmUuCgpTcGVjaWZpY2FsbHksIGBzbWNfaWJfcmVtb3ZlX2RldmAgc2VlbXMgaW1wb3J0YW50LiBJdCYjMzk7cyB0cmlnZ2VyZWQgd2hlbiBhbiBJbmZpbmlCYW5kIGRldmljZSBpcyByZW1vdmVkLCBzbyB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgY2xlYW51cCBpcyBoYW5kbGVkLiBUaGVuIHRoZXJlJiMzOTtzIGBzbWNfcG5ldF9kZXRlcm1pbmVfZ2lkYCwgd2hpY2gsIGZyb20gdGhlIG5hbWUsIHNvdW5kcyBsaWtlIGl0JiMzOTtzIGNydWNpYWwgZm9yIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgR0lEIHJlc29sdXRpb24uIFRoZSBmdW5jdGlvbiBgX19zbWNfY29ubmVjdGAsIHRoYXQmIzM5O3Mgb3VyIEFGX1NNQyBgY29ubmVjdCgpYCBjYWxsLCBzbyB0aGF0JiMzOTtzIGEgY29ybmVyc3RvbmUuIEZpbmFsbHksIGBzbWNfbGlzdGVuX3dvcmtgIGlzIGdvaW5nIHRvIGhhbmRsZSBpbmNvbWluZyBjb25uZWN0aW9uIHJlcXVlc3RzLCBzbyB0aGF0JiMzOTtzIG9idmlvdXNseSBjcml0aWNhbC4KCkkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gYHNtY19wbmV0X2RldGVybWluZV9naWRgIGFuZCBgc21jX2liX3JlbW92ZV9kZXZgIG1vcmUgY2xvc2VseSBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX3BuZXRfZGV0ZXJtaW5lX2dpZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX3BuZXQuYz05NTE9c3RhdGljIGludCBzbWNfcG5ldF9maW5kX25kZXZfcG5ldGlkX2J5X3RhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLS1cbm5ldC9zbWMvc21jX3BuZXQuYy05NzYtXG5uZXQvc21jL3NtY19wbmV0LmM6OTc3OnN0YXRpYyBpbnQgc21jX3BuZXRfZGV0ZXJtaW5lX2dpZChzdHJ1Y3Qgc21jX2liX2RldmljZSAqaWJkZXYsIGludCBpLFxubmV0L3NtYy9zbWNfcG5ldC5jLTk3OC1cdFx0XHRcdCAgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcbi0tXG5uZXQvc21jL3NtY19wbmV0LmM9MTAwNj1zdGF0aWMgdm9pZCBfc21jX3BuZXRfZmluZF9yb2NlX2J5X3BuZXRpZCh1OCAqcG5ldF9pZCxcbi0tXG5uZXQvc21jL3NtY19wbmV0LmMtMTAyNC1cdFx0XHQgICAgIXRlc3RfYml0KGkgLSAxLCBpYmRldi1cdTAwM2Vwb3J0c19nb2luZ19hd2F5KSkge1xubmV0L3NtYy9zbWNfcG5ldC5jOjEwMjU6XHRcdFx0XHRpZiAoIXNtY19wbmV0X2RldGVybWluZV9naWQoaWJkZXYsIGksIGluaSkpXG5uZXQvc21jL3NtY19wbmV0LmMtMTAyNi1cdFx0XHRcdFx0Z290byBvdXQ7XG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jPTEwNDc9c3RhdGljIHZvaWQgc21jX3BuZXRfZmluZF9yZG1hX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbm5ldC9zbWMvc21jX3BuZXQuYy0xMDcxLVx0XHRcdCAgICAhdGVzdF9iaXQoaSAtIDEsIGliZGV2LVx1MDAzZXBvcnRzX2dvaW5nX2F3YXkpKSB7XG5uZXQvc21jL3NtY19wbmV0LmM6MTA3MjpcdFx0XHRcdGlmICghc21jX3BuZXRfZGV0ZXJtaW5lX2dpZChpYmRldiwgaSwgaW5pKSlcbm5ldC9zbWMvc21jX3BuZXQuYy0xMDczLVx0XHRcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODE1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgc21jX2liX3JlbW92ZV9kZXZgIEZ1bmN0aW9uIENhbGwqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgbWVudGFsIGNoZWNrbGlzdCBzdGFydHMgd2l0aCBgc21jX2liX3JlbW92ZV9kZXZgLiBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gVGhpcyBsaWtlbHkgcG9pbnRzIHRvIHRoZSByZW1vdmFsIG9mIGFuIEluZmluaUJhbmQgZGV2aWNlIHdpdGhpbiB0aGUgU01DIChTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zKSBmcmFtZXdvcmsuIFNvLCBJIG5lZWQgdG8gY29uc2lkZXI6IFdoYXQgYXJlIHRoZSBwcmVjb25kaXRpb25zIGZvciBjYWxsaW5nIHRoaXM/IFdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyBmcmVlZD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgbmVlZCB0byB0aGluayBhYm91dCwgZXNwZWNpYWxseSBpZiB0aGlzIGlzIGluIGEgbXVsdGktdGhyZWFkZWQgb3IgaW50ZXJydXB0IGNvbnRleHQ/IFdoYXQgYWJvdXQgZXJyb3IgaGFuZGxpbmc7IGlzIHRoZXJlIHN1ZmZpY2llbnQgZXJyb3IgY2hlY2tpbmcgYW5kIHJlY292ZXJ5PyBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHF1ZXN0aW9ucyBhYm91dCBsb2NraW5nLiBJcyB0aGVyZSBhIG11dGV4IG9yIHNwaW5sb2NrIHByb3RlY3RpbmcgdGhlIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcz8gQW5kIHdoYXQgYWJvdXQgdGhlIGltcGFjdCBvbiBjb25uZWN0aW9ucyB1c2luZyB0aGF0IHNwZWNpZmljIGRldmljZT8gRG9lcyB0aGlzIGZ1bmN0aW9uIGdyYWNlZnVsbHkgaGFuZGxlIHRob3NlPyBJJiMzOTtkIGV4cGVjdCBwcm9wZXIgY2xlYW51cCBvZiBhbnkgYXNzb2NpYXRlZCBRUHMgKFF1ZXVlIFBhaXJzKSwgUERzIChQcm90ZWN0aW9uIERvbWFpbnMpLCBhbmQgQ1FzIChDb21wbGV0aW9uIFF1ZXVlcykuIEZpbmFsbHksIGEgZ29vZCByZXZpZXcgbWVhbnMgdW5kZXJzdGFuZGluZyB0aGUgcG9zc2libGUgcmV0dXJuIGNvZGVzIGFuZCB0aGVpciBpbXBsaWNhdGlvbnMgZm9yIHRoZSBjYWxsZXIuIEJhc2ljYWxseSwgSSB3YW50IHRvIHNlZSBhIHJvYnVzdCwgd2VsbC1kZWZpbmVkIGZ1bmN0aW9uIHRoYXQgbGVhdmVzIHRoZSBzeXN0ZW0gaW4gYSBjb25zaXN0ZW50IHN0YXRlIGFmdGVyIHRoZSBkZXZpY2UgcmVtb3ZhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfaWJfcmVtb3ZlX2RldiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2liLmM9OTM4PXN0YXRpYyBpbnQgc21jX2liX2FkZF9kZXYoc3RydWN0IGliX2RldmljZSAqaWJkZXYpXG4tLVxubmV0L3NtYy9zbWNfaWIuYy05OTUtLyogY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGliX3VucmVnaXN0ZXJfY2xpZW50KCkgKi9cbm5ldC9zbWMvc21jX2liLmM6OTk2OnN0YXRpYyB2b2lkIHNtY19pYl9yZW1vdmVfZGV2KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB2b2lkICpjbGllbnRfZGF0YSlcbm5ldC9zbWMvc21jX2liLmMtOTk3LXtcbi0tXG5uZXQvc21jL3NtY19pYi5jPTEwMTU9c3RhdGljIHN0cnVjdCBpYl9jbGllbnQgc21jX2liX2NsaWVudCA9IHtcbi0tXG5uZXQvc21jL3NtY19pYi5jLTEwMTctXHQuYWRkXHQ9IHNtY19pYl9hZGRfZGV2LFxubmV0L3NtYy9zbWNfaWIuYzoxMDE4Olx0LnJlbW92ZSA9IHNtY19pYl9yZW1vdmVfZGV2LFxubmV0L3NtYy9zbWNfaWIuYy0xMDE5LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM3OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIElCIERldmljZSBSZW1vdmFsIGFuZCBpdHMgSW1wbGljYXRpb25zKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBzbWNfaWJfcmVtb3ZlX2RldmAsIHdoaWNoIGlzIHRoZSBjYWxsYmFjayB0aGF0IGdldHMgY2FsbGVkIHdoZW4gYW4gSW5maW5pQmFuZCAoSUIpIGRldmljZSBpcyByZW1vdmVkIGZyb20gdGhlIHN5c3RlbS4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHdlIGNhbiB0cmlnZ2VyIHRoaXMgcmVtb3ZhbCBldmVudCBmcm9tIHdpdGhpbiBzeXprYWxsZXIuIFRoZSBhbnN3ZXIgYXBwZWFycyB0byBiZSB5ZXM7IHdlIGhhdmUgYSBjb3VwbGUgb2YgdmlhYmxlIGF2ZW51ZXM6IHV0aWxpemluZyBSRE1BIG5ldGxpbmsgaW50ZXJmYWNlcyBvciBwb3RlbnRpYWxseSBieSByZW1vdmluZyB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGRldmljZSwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBSb0NFIChSRE1BIG92ZXIgQ29udmVyZ2VkIEV0aGVybmV0KSBzZXR1cHMuIFRoaXMgZ2l2ZXMgdXMgYSBzb2xpZCBsZWFkIG9uIHBvdGVudGlhbCBmdXp6aW5nIHN0cmF0ZWdpZXMuIE5vdywgbGV0JiMzOTtzIGRpdmUgZGVlcGVyIGFuZCBzZWUgaWYgd2UgY2FuIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCByYW1pZmljYXRpb25zIG9mIHRoaXMgcmVtb3ZhbCBieSBjaGVja2luZyBvdXQgdGhlIGBfX3NtY19jb25uZWN0YCBmdW5jdGlvbiBhbmQgaXRzIGNvbm5lY3Rpb24gd2l0aCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3NtY19jb25uZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9hZl9zbWMuYz0xNDk5PXN0YXRpYyBpbnQgc21jX2Nvbm5lY3RfY2hlY2tfYWNsYyhzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTUxOS0vKiBwZXJmb3JtIHN0ZXBzIGJlZm9yZSBhY3R1YWxseSBjb25uZWN0aW5nICovXG5uZXQvc21jL2FmX3NtYy5jOjE1MjA6c3RhdGljIGludCBfX3NtY19jb25uZWN0KHN0cnVjdCBzbWNfc29jayAqc21jKVxubmV0L3NtYy9hZl9zbWMuYy0xNTIxLXtcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTE2MTA9c3RhdGljIHZvaWQgc21jX2Nvbm5lY3Rfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xNjM5LVxubmV0L3NtYy9hZl9zbWMuYzoxNjQwOlx0cmMgPSBfX3NtY19jb25uZWN0KHNtYyk7XG5uZXQvc21jL2FmX3NtYy5jLTE2NDEtXHRpZiAocmMgXHUwMDNjIDApXG4tLVxubmV0L3NtYy9hZl9zbWMuYz0xNjU2PWludCBzbWNfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE3MjItXHR9IGVsc2Uge1xubmV0L3NtYy9hZl9zbWMuYzoxNzIzOlx0XHRyYyA9IF9fc21jX2Nvbm5lY3Qoc21jKTtcbm5ldC9zbWMvYWZfc21jLmMtMTcyNC1cdFx0aWYgKHJjIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDMxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNNQyBDb25uZWN0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggbG9va3Mgc29saWQsIGZpeGluZyB0aGF0IG5hc3R5IGJ1ZyB3aGVyZSBkZXZpY2UgcmVtb3ZhbCBtZXNzZWQgd2l0aCBvbmdvaW5nIGNvbm5lY3Rpb25zLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgX19zbWNfY29ubmVjdGAgaXMgY2FsbGVkIGZyb20gYm90aCBgc21jX2Nvbm5lY3RgIGFuZCBgc21jX2Nvbm5lY3Rfd29ya2AsIHdoaWNoIGlzIGFzIGV4cGVjdGVkLiBEZWZpbml0ZWx5IHdvcnRoIHJ1bm5pbmcgdGhpcyB0aHJvdWdoIHRoZSBmdXp6aW5nIHJpZzsgSSYjMzk7bSBtYXJraW5nIGl0IGFzICYjMzQ7VHJ1ZSYjMzQ7LiBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvbiBgX19zbWNfY29ubmVjdGAsIGBzbWNfbGlzdGVuX3dvcmtgLCBgc21jX3BuZXRfZGV0ZXJtaW5lX2dpZGAsIGFuZCBgc21jX2liX3JlbW92ZV9kZXZgIGluIHBhcnRpY3VsYXIg4oCTIHRob3NlIHNlZW0gbGlrZSBrZXkgYXJlYXMgdG8gdGFyZ2V0LgoKSnVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyDigJMgU01DIHJlbGllcyBvbiBSRE1BL0lCIHN1cHBvcnQsIHNvIEkgd2FudCB0byBiZSBjZXJ0YWluIG5vdGhpbmcgaGFzIGNoYW5nZWQgdGhhdCBhZmZlY3RzIHRoYXQuIFRpbWUgdG8gdGFrZSBhbm90aGVyIGxvb2sgYXQgYG5ldC9zbWMvS2NvbmZpZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnPTI9Y29uZmlnIFNNQ1xubmV0L3NtYy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVwmIzM0O1xubmV0L3NtYy9LY29uZmlnOjQ6XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IElORklOSUJBTkQgXHUwMDI2XHUwMDI2IERJQlNcbm5ldC9zbWMvS2NvbmZpZy01LVx0aGVscFxuLS1cbm5ldC9zbWMvS2NvbmZpZz0xND1jb25maWcgU01DX0RJQUdcbm5ldC9zbWMvS2NvbmZpZy0xNS1cdHRyaXN0YXRlIFwmIzM0O1NNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG5uZXQvc21jL0tjb25maWc6MTY6XHRkZXBlbmRzIG9uIFNNQ1xubmV0L3NtYy9LY29uZmlnLTE3LVx0aGVscFxuLS1cbm5ldC9zbWMvS2NvbmZpZz0yMz1jb25maWcgU01DX0hTX0NUUkxfQlBGXG5uZXQvc21jL0tjb25maWctMjQtXHRib29sIFwmIzM0O0dlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcJiMzNDtcbm5ldC9zbWMvS2NvbmZpZzoyNTpcdGRlcGVuZHMgb24gU01DIFx1MDAyNlx1MDAyNiBCUEZfSklUIFx1MDAyNlx1MDAyNiBCUEZfU1lTQ0FMTFxubmV0L3NtYy9LY29uZmlnLTI2LVx0ZGVmYXVsdCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MzUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIC0gVGhlIFNNQyBQdXp6bGUqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gdGhlIGluaXRpYWwgYXNzZXNzbWVudCBwb2ludHMgdG8gYSBkZXBlbmRlbmN5IGNoYWluOiBpdCYjMzk7cyBsb29raW5nIGxpa2UgdGhpcyBmdW5jdGlvbmFsaXR5IGhpbmdlcyBvbiBgSU5FVGAsIGBJTkZJTklCQU5EYCwgYW5kLi4uIGhvbGQgb24sIHdoYXQgd2FzIHRoYXQgbGFzdCBvbmU/IGBESUJTYD8gVGhhdCBmZWVscyBhIGxpdHRsZSBvdXQgb2YgcGxhY2UuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhhdC4gVGltZSB0byBkaXZlIGludG8gdGhlIHNvdXJjZSB0cmVlLiBTcGVjaWZpY2FsbHksIGxldCBtZSB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBkZWZpbmVkIGluIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBmaWxlcy4gVGhlIHBsYWNlIHRvIHN0YXJ0IGZvciB0aGlzIHNlZW1zIHRvIGJlIGBuZXQvc21jL0tjb25maWdgLiBJJiMzOTtsbCBjcm9zcy1yZWZlcmVuY2Ugd2hhdCBpcyBzYWlkIHRoZXJlIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMuIEl0IGlzIGltcG9ydGFudCB0byBrbm93IHdoaWNoIGRlcGVuZGVuY2llcyBhcmUgcmVxdWlyZWQgYW5kIHdoaWNoIGFyZSBub3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFNNQ1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU1xuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBTTUMtUiBwcm92aWRlcyBhIFwmIzM0O3NvY2tldHMgb3ZlciBSRE1BXCYjMzQ7IHNvbHV0aW9uIG1ha2luZyB1c2Ugb2ZcbiAgIDc6XHRcdCAgUkRNQSBvdmVyIENvbnZlcmdlZCBFdGhlcm5ldCAoUm9DRSkgdGVjaG5vbG9neSB0byB1cGdyYWRlXG4gICA4Olx0XHQgIEFGX0lORVQgVENQIGNvbm5lY3Rpb25zIHRyYW5zcGFyZW50bHkuXG4gICA5Olx0XHQgIFRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU01DLVIgc29sdXRpb24gaXMgZGVzaWduZWQgYXNcbiAgMTA6XHRcdCAgYSBzZXBhcmF0ZSBzb2NrZXQgZmFtaWx5IFNNQy5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHJ1biBTTUMgc29ja2V0IGFwcGxpY2F0aW9uc1xuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBTTUNfRElBR1xuICAxNTpcdFx0dHJpc3RhdGUgXCYjMzQ7U01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gU01DXG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIFN1cHBvcnQgZm9yIFNNQyBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieSB0b29scyBzdWNoIGFzXG4gIDE5Olx0XHQgIHNtY3NzLlxuICAyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE1MQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOYXZpZ2F0aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIFF1aXJrcyoqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyB0aGlzIHRlcm0gYERJQlNgIHBvcCB1cCwgYW5kIGZyYW5rbHksIEkmIzM5O20gZHJhd2luZyBhIGJsYW5rLiBJdCYjMzk7cyB1bmZhbWlsaWFyLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBhbmNob3IgbXlzZWxmIGluIHdoYXQgSSAqZG8qIGtub3cuIExldCBtZSBjb25maXJtIG15IGVuYWJsaW5nIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsIEkmIzM5O20gcHJldHR5IHN1cmUgYFNNQ2AsIGBJTkZJTklCQU5EYCwgYW5kIGBJTkVUYCBhcmUgaW52b2x2ZWQuIE5vdywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgYERJQlNgIGRvd24gdGhlIHJhYmJpdCBob2xlLgoKSSYjMzk7bGwgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgdHJlZS4gSSBtaWdodCBoYXZlIG1pc3JlYWQgaXQsIG9yLCBpdCYjMzk7cyBhIHR5cG8sIG5vLi4uIGl0JiMzOTtzIHRoZXJlLiBIbW0sIGNvdWxkIGl0IGJlIHJlbGF0ZWQgdG8gYElQVjZgPyBPa2F5LCBJJiMzOTtsbCBjaGVjayBgbmV0L3NtYy9LY29uZmlnYCBpbiB0aGUgbWFpbmxpbmUga2VybmVsLiBNYWlubGluZSBjb25maXJtcyBgZGVwZW5kcyBvbiBJTkVUICZhbXA7JmFtcDsgSU5GSU5JQkFORCAmYW1wOyZhbXA7IElQVjZgLiBTdGlsbCwgdGhlIHF1ZXN0aW9uIG9mIGBESUJTYCBsaW5nZXJzLgoKV2FpdCwgaXMgdGhpcyBhIHRyZWUtc3BlY2lmaWMgdGhpbmcgdGhlbj8gSXQgKmlzKiBpbiB0aGUgZmlsZS4gQWxyaWdodCwgbGV0JiMzOTtzIGN1dCB0aGUgR29yZGlhbiBLbm90IGFuZCBmaWd1cmUgb3V0IHdoYXQgYERJQlNgICppcyouIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBuZXcgZGVwZW5kZW5jeSBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERJQlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL2RpYnMvS2NvbmZpZzoyOmNvbmZpZyBESUJTXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7RGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xMy1cbmRyaXZlcnMvZGlicy9LY29uZmlnOjE0OmNvbmZpZyBESUJTX0xPXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xNS1cdGJvb2wgXCYjMzQ7SW50cmEtT1Mgc2hvcnRjdXQgd2l0aCBkaWJzIGxvb3BiYWNrXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzU3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTTUMgRGVwZW5kZW5jeSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGFuZCBpdCYjMzk7cyBjbGVhciB0aGF0IGBESUJTYCBzdGFuZHMgZm9yIERpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZy4gR290IGl0LiBOb3csIGZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYFNNQ2AsIGBJTkZJTklCQU5EYCwgYW5kIGBESUJTYC4gSG9sZCBvbi4uLiBpdCBsb29rcyBsaWtlIGBESUJTYCBpcyBhY3R1YWxseSAqcmVxdWlyZWQqIGZvciBgU01DYCB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIHRyZWUuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBMZXQmIzM5O3MgY29uZmlybSBpZiBgU01DYCBuZWNlc3NpdGF0ZXMgYElORklOSUJBTkRgIHRvby4gWWVwLCBjb25maXJtZWQuCgpUaGVyZWZvcmUsIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBzaG91bGQgZGVmaW5pdGVseSBiZSBgWyYjMzQ7U01DJiMzNDssICYjMzQ7SU5GSU5JQkFORCYjMzQ7LCAmIzM0O0RJQlMmIzM0O11gLiBUaGF0IHNlZW1zIGxvZ2ljYWwgYW5kIGlzIHRoZSBzYWZlc3Qgb3B0aW9uLgoKTm93LCBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBfX3NtY19jb25uZWN0YCwgYHNtY19saXN0ZW5fd29ya2AsIGBzbWNfcG5ldF9kZXRlcm1pbmVfZ2lkYCwgYW5kIGBzbWNfaWJfcmVtb3ZlX2RldmAuIEFyZSB0aGVyZSBhbnkgb3RoZXJzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBBaCwgaGVyZSYjMzk7cyBvbmU6IGBzbWNfaW5pdF9pbmZvX2ZyZWVgLiBJdCYjMzk7cyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIHVzZWZ1bCB0byBrbm93LiBBbmQgdGhlbiB0aGVyZSYjMzk7cyBgc21jX2xsY19jbGlfYWRkX2xpbmtgIGFuZCBgc21jX2xsY19zcnZfYWRkX2xpbmtgLgoKUmlnaHQsIGxldCYjMzk7cyBjcmVhdGUgYSBzb2xpZCBsaXN0IG9mIHRoZSBmb2N1cyBzeW1ib2xzLCB0byBrZWVwIG1lIG9uIHRyYWNrOgpgX19zbWNfY29ubmVjdGAsIGBzbWNfbGlzdGVuX3dvcmtgLCBgc21jX3BuZXRfZGV0ZXJtaW5lX2dpZGAsIGBzbWNfaWJfcmVtb3ZlX2RldmAsIGBzbWNfbGxjX2NsaV9hZGRfbGlua2AsIGBzbWNfbGxjX3Nydl9hZGRfbGlua2AuCgpGaW5hbGx5LCB0byBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoLCBJJiMzOTttIGdvaW5nIHRvIHZlcmlmeSBpZiBgc21jX3BuZXRfZGV0ZXJtaW5lX2dpZGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIEp1c3QgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX3BuZXRfZGV0ZXJtaW5lX2dpZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX3BuZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19wbmV0LmM9OTUxPXN0YXRpYyBpbnQgc21jX3BuZXRfZmluZF9uZGV2X3BuZXRpZF9ieV90YWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbi0tXG5uZXQvc21jL3NtY19wbmV0LmMtOTc2LVxubmV0L3NtYy9zbWNfcG5ldC5jOjk3NzpzdGF0aWMgaW50IHNtY19wbmV0X2RldGVybWluZV9naWQoc3RydWN0IHNtY19pYl9kZXZpY2UgKmliZGV2LCBpbnQgaSxcbm5ldC9zbWMvc21jX3BuZXQuYy05NzgtXHRcdFx0XHQgIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jPTEwMDY9c3RhdGljIHZvaWQgX3NtY19wbmV0X2ZpbmRfcm9jZV9ieV9wbmV0aWQodTggKnBuZXRfaWQsXG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jLTEwMjQtXHRcdFx0ICAgICF0ZXN0X2JpdChpIC0gMSwgaWJkZXYtXHUwMDNlcG9ydHNfZ29pbmdfYXdheSkpIHtcbm5ldC9zbWMvc21jX3BuZXQuYzoxMDI1Olx0XHRcdFx0aWYgKCFzbWNfcG5ldF9kZXRlcm1pbmVfZ2lkKGliZGV2LCBpLCBpbmkpKVxubmV0L3NtYy9zbWNfcG5ldC5jLTEwMjYtXHRcdFx0XHRcdGdvdG8gb3V0O1xuLS1cbm5ldC9zbWMvc21jX3BuZXQuYz0xMDQ3PXN0YXRpYyB2b2lkIHNtY19wbmV0X2ZpbmRfcmRtYV9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5uZXQvc21jL3NtY19wbmV0LmMtMTA3MS1cdFx0XHQgICAgIXRlc3RfYml0KGkgLSAxLCBpYmRldi1cdTAwM2Vwb3J0c19nb2luZ19hd2F5KSkge1xubmV0L3NtYy9zbWNfcG5ldC5jOjEwNzI6XHRcdFx0XHRpZiAoIXNtY19wbmV0X2RldGVybWluZV9naWQoaWJkZXYsIGksIGluaSkpXG5uZXQvc21jL3NtY19wbmV0LmMtMTA3My1cdFx0XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTQ5CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnVuY3Rpb24mIzM5O3MgU3RhdGljIE5hdHVyZSoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IGVtcGhhc2l6ZXMgcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoYXQgYHNtY19wbmV0X2RldGVybWluZV9naWRgIGlzICpzdGF0aWMqLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCByZWQgZmxhZy4gVGhlIGNvbXBpbGVyIHR5cGljYWxseSBpbmxpbmVzIHRoZXNlLCB3aGljaCBtZWFucyB0aGV5IHdvbiYjMzk7dCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIG1ha2luZyBkZWJ1Z2dpbmcgb3IgZXh0ZXJuYWwgYWNjZXNzIHByb2JsZW1hdGljLiBUaW1lIHRvIGludmVzdGlnYXRlLiBMZXQmIzM5O3MgdHJhY2UgaXRzIGNhbGxlcnMuIEFoYSwgYm90aCBgX3NtY19wbmV0X2ZpbmRfcm9jZV9ieV9wbmV0aWRgIGFuZCBgc21jX3BuZXRfZmluZF9yZG1hX2RldmAgYXJlIGFsc28gc3RhdGljLiBUaGlzIGNvbmZpcm1zIG15IGluaXRpYWwgY29uY2Vybi4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gaWRlbnRpZnkgYW55IG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmVzIG9yIGRldGVybWluZSB0aGUganVzdGlmaWNhdGlvbiBmb3Igd2h5IHRoZXNlIGFyZSBzdGF0aWMsIGdpdmVuIHRoZSBndWlkZWxpbmVzLiBUaGUgc2VhcmNoIGZvciBhIG5vbi1zdGF0aWMgb3B0aW9uIGJlZ2lucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX3BuZXRfZmluZF9yZG1hX2RldiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX3BuZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19wbmV0LmM9MTAzNT12b2lkIHNtY19wbmV0X2ZpbmRfYWx0X3JvY2Uoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jLTEwNDYtICovXG5uZXQvc21jL3NtY19wbmV0LmM6MTA0NzpzdGF0aWMgdm9pZCBzbWNfcG5ldF9maW5kX3JkbWFfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5uZXQvc21jL3NtY19wbmV0LmMtMTA0OC1cdFx0XHRcdCAgIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jPTEwODY9c3RhdGljIHZvaWQgc21jX3BuZXRfZmluZF9yb2NlX2J5X3BuZXRpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbi0tXG5uZXQvc21jL3NtY19wbmV0LmMtMTA5OC1cdCAgICBzbWNfcG5ldF9maW5kX25kZXZfcG5ldGlkX2J5X3RhYmxlKG5kZXYsIG5kZXZfcG5ldGlkKSkge1xubmV0L3NtYy9zbWNfcG5ldC5jOjEwOTk6XHRcdHNtY19wbmV0X2ZpbmRfcmRtYV9kZXYoYmFzZV9uZGV2LCBpbmkpO1xubmV0L3NtYy9zbWNfcG5ldC5jLTExMDAtXHRcdHJldHVybjsgLyogcG5ldGlkIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjMwCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBzbWNfcG5ldF9maW5kX3JvY2VfYnlfcG5ldGlkYCBDYWxsZXJzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYHNtY19wbmV0X2ZpbmRfcm9jZV9ieV9wbmV0aWRgLiBUaW1lIHRvIHRyYWNlIGRvd24gaXRzIGNhbGxlcnMuIEkmIzM5O20gdGhpbmtpbmcsIHRoaXMgaXMgcHJvYmFibHkgYSBmdW5jdGlvbiB0aGF0IGxvb2tzIHVwIFJvQ0UgaW5mb3JtYXRpb24gYmFzZWQgb24gYSBQTkVUIElELCBzbyBJIG5lZWQgdG8gc2VlICp3aG8qIGlzIG1ha2luZyB0aGVzZSBjYWxscy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMsIHBlcmhhcHMgd2l0aGluIHRoZSBSRE1BIHN0YWNrLCBvciBzb21ldGhpbmcgaGlnaGVyLWxldmVsIGxpa2UgYW4gYXBwbGljYXRpb24gdHJ5aW5nIHRvIHV0aWxpemUgUm9DRT8gVGhlIGNhbGxlciBjb250ZXh0IHdpbGwgcmVhbGx5IGdpdmUgbWUgdGhlIGNsdWVzIEkgbmVlZC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBjaGVjayDigJMgbWF5YmUgYSBzdGF0aWMgYW5hbHlzaXMgb3IgZ3JlcCB0aHJvdWdoIHRoZSBjb2RlYmFzZSwgdG8gaWRlbnRpZnkgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIGFuZCBhbnkgcmVsZXZhbnQgcGFyYW1ldGVycyBwYXNzZWQuIElzIHRoZXJlIGFueSBleGlzdGluZyBkb2N1bWVudGF0aW9uIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiB0aGlzPyBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgaGVscCBtZSBkZXRlcm1pbmU6IGFyZSB3ZSBsb29raW5nIGF0IGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgYSBwb3RlbnRpYWwgZXJyb3Igc291cmNlLCBvciBhIGNyaXRpY2FsIGRhdGEgcGF0aD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIHBhcmFtb3VudCBiZWZvcmUgSSBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfcG5ldF9maW5kX3JvY2VfYnlfcG5ldGlkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfcG5ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX3BuZXQuYz05Nzc9c3RhdGljIGludCBzbWNfcG5ldF9kZXRlcm1pbmVfZ2lkKHN0cnVjdCBzbWNfaWJfZGV2aWNlICppYmRldiwgaW50IGksXG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jLTEwMDUtLyogZmluZCBhIHJvY2UgZGV2aWNlIGZvciB0aGUgZ2l2ZW4gcG5ldGlkICovXG5uZXQvc21jL3NtY19wbmV0LmM6MTAwNjpzdGF0aWMgdm9pZCBfc21jX3BuZXRfZmluZF9yb2NlX2J5X3BuZXRpZCh1OCAqcG5ldF9pZCxcbm5ldC9zbWMvc21jX3BuZXQuYy0xMDA3LVx0XHRcdFx0XHQgIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmksXG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jPTEwMzU9dm9pZCBzbWNfcG5ldF9maW5kX2FsdF9yb2NlKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxuLS1cbm5ldC9zbWMvc21jX3BuZXQuYy0xMDQwLVxubmV0L3NtYy9zbWNfcG5ldC5jOjEwNDE6XHRfc21jX3BuZXRfZmluZF9yb2NlX2J5X3BuZXRpZChsZ3ItXHUwMDNlcG5ldF9pZCwgaW5pLCBrbm93bl9kZXYsIG5ldCk7XG5uZXQvc21jL3NtY19wbmV0LmMtMTA0Mi19XG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jPTEwNDc9c3RhdGljIHZvaWQgc21jX3BuZXRfZmluZF9yZG1hX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbm5ldC9zbWMvc21jX3BuZXQuYy0xMDg1LSAqL1xubmV0L3NtYy9zbWNfcG5ldC5jOjEwODY6c3RhdGljIHZvaWQgc21jX3BuZXRfZmluZF9yb2NlX2J5X3BuZXRpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbm5ldC9zbWMvc21jX3BuZXQuYy0xMDg3LVx0XHRcdFx0XHQgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcbi0tXG5uZXQvc21jL3NtY19wbmV0LmMtMTEwMS1cdH1cbm5ldC9zbWMvc21jX3BuZXQuYzoxMTAyOlx0X3NtY19wbmV0X2ZpbmRfcm9jZV9ieV9wbmV0aWQobmRldl9wbmV0aWQsIGluaSwgTlVMTCwgbmV0KTtcbm5ldC9zbWMvc21jX3BuZXQuYy0xMTAzLX1cbi0tXG5uZXQvc21jL3NtY19wbmV0LmM9MTEzNT12b2lkIHNtY19wbmV0X2ZpbmRfcm9jZV9yZXNvdXJjZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jLTExNDYtXHRpZiAoZGV2KSB7XG5uZXQvc21jL3NtY19wbmV0LmM6MTE0NzpcdFx0c21jX3BuZXRfZmluZF9yb2NlX2J5X3BuZXRpZChkZXYsIGluaSk7XG5uZXQvc21jL3NtY19wbmV0LmMtMTE0OC1cdFx0ZGV2X3B1dChkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzYyOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEFQSSBFbnRyeXBvaW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHByZWZlcnJlZCBBUEkgZW50cnlwb2ludHMgYmFzZWQgb24gdGhlIGd1aWRlbGluZSBvZiBwcmlvcml0aXppbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlcnMuCgpGaXJzdCwgSSBzZWUgdGhhdCBgc21jX3BuZXRfZmluZF9yb2NlX3Jlc291cmNlYCBhbmQgYHNtY19wbmV0X2ZpbmRfYWx0X3JvY2VgIGFyZSBhbHJlYWR5IG5vbi1zdGF0aWMsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCBsZXQmIzM5O3MgdHJhY2UgdGhyb3VnaCB0aGUgb3RoZXIgZnVuY3Rpb25zLgoKYF9fc21jX2Nvbm5lY3RgIGlzIHN0YXRpYywgc28gSSBpbW1lZGlhdGVseSBuZWVkIHRvIGludmVzdGlnYXRlIGl0cyBjYWxsZXJzLiAgSSBzZWUgYHNtY19jb25uZWN0YCBhbmQgYHNtY19jb25uZWN0X3dvcmtgIGNhbGxpbmcgaXQuIEJ1dCwgY3JpdGljYWxseSwgYHNtY19jb25uZWN0YCBpdHNlbGYgaXMgbm9uLXN0YXRpYy4gQmluZ28hIFRoaXMgaXMgbGlrZWx5IGEgZ29vZCBjYW5kaWRhdGUuCgpOZXh0LCBgc21jX2xpc3Rlbl93b3JrYCBpcyBzdGF0aWMsIGFuZCBpdCYjMzk7cyBhIHdvcmtxdWV1ZSBmdW5jdGlvbi4gSXQmIzM5O3MgaW5pdGlhbGl6ZWQgaW4gYHNtY190Y3BfbGlzdGVuX3dvcmtgLCB3aGlsZSBgc21jX2xpc3RlbmAgaXMgbm9uLXN0YXRpYy4gU28sIGBzbWNfbGlzdGVuYCBsb29rcyBsaWtlIHRoZSBiZXR0ZXIgY2hvaWNlIGhlcmUuCgpOb3csIGxldCYjMzk7cyBtb3ZlIG9uIHRvIGBzbWNfaWJfcmVtb3ZlX2RldmAuIEl0JiMzOTtzIHN0YXRpYywgYW5kIGl0JiMzOTtzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQmIzM5O3MgYW4gSUIgY2xpZW50IGNhbGxiYWNrIHJlZ2lzdGVyZWQgdmlhIGBpYl9yZWdpc3Rlcl9jbGllbnRgLiBTaW5jZSBpdCYjMzk7cyBhIGZ1bmN0aW9uIHBvaW50ZXIsIGl0IHdvbiYjMzk7dCBiZSBpbmxpbmVkLiBUaGF0IG1lYW5zIGl0IHdpbGwgaGF2ZSBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLCBtYWtpbmcgaXQgYSB2aWFibGUgb3B0aW9uIGRlc3BpdGUgYmVpbmcgc3RhdGljLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzICpub3QqIGlubGluZWQgaXMga2V5IGhlcmUsIGFjY29yZGluZyB0byB0aGUgcHJvbXB0LiBJIGNvdWxkIGFsc28gdXNlIGBzbWNfaWJfYWRkX2RldmAgYnV0IEkmIzM5O2xsIHN0aWNrIHdpdGggYHNtY19pYl9yZW1vdmVfZGV2YCBmb3Igbm93LgoKRmluYWxseSwgYHNtY19sbGNfY2xpX2FkZF9saW5rYCBhbmQgYHNtY19sbGNfc3J2X2FkZF9saW5rYCBhcmUgdGhhbmtmdWxseSBub24tc3RhdGljLCBzbyB3ZSYjMzk7cmUgZ29vZCB0aGVyZS4KClNvLCBzdW1taW5nIGl0IHVwLCBteSBmb2N1cyBzeW1ib2xzLCBiYXNlZCBvbiB0aGUgbm9uLXN0YXRpYy9ub24taW5saW5lZCBwcmVmZXJlbmNlLCBhcmUgbm93OgoKKiAgIGBzbWNfY29ubmVjdGAKKiAgIGBzbWNfbGlzdGVuYAoqICAgYHNtY19wbmV0X2ZpbmRfcm9jZV9yZXNvdXJjZWAKKiAgIGBzbWNfcG5ldF9maW5kX2FsdF9yb2NlYAoqICAgYHNtY19pYl9yZW1vdmVfZGV2YAoqICAgYHNtY19sbGNfY2xpX2FkZF9saW5rYAoqICAgYHNtY19sbGNfc3J2X2FkZF9saW5rYAoKSSYjMzk7bGwgd2FudCB0byB2ZXJpZnkgdGhlIGRldGFpbHMgYXJvdW5kIGBzbWNfY29ubmVjdGAgYW5kIGBzbWNfbGlzdGVuYCB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGVpciBiZWhhdmlvciBhbmQgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvYWZfc21jLmM9NzM9c3RhdGljIHZvaWQgc21jX3RjcF9saXN0ZW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7XG5uZXQvc21jL2FmX3NtYy5jOjc0OnN0YXRpYyB2b2lkIHNtY19jb25uZWN0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICopO1xubmV0L3NtYy9hZl9zbWMuYy03NS1cbi0tXG5uZXQvc21jL2FmX3NtYy5jPTMyOD1pbnQgc21jX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTM0Ni1cdGlmIChjYW5jZWxfd29ya19zeW5jKFx1MDAyNnNtYy1cdTAwM2Vjb25uZWN0X3dvcmspKVxubmV0L3NtYy9hZl9zbWMuYzozNDc6XHRcdHNvY2tfcHV0KFx1MDAyNnNtYy1cdTAwM2Vzayk7IC8qIHNvY2tfaG9sZCBpbiBzbWNfY29ubmVjdCBmb3IgcGFzc2l2ZSBjbG9zaW5nICovXG5uZXQvc21jL2FmX3NtYy5jLTM0OC1cbi0tXG5uZXQvc21jL2FmX3NtYy5jPTM5NT12b2lkIHNtY19za19pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBpbnQgcHJvdG9jb2wpXG4tLVxubmV0L3NtYy9hZl9zbWMuYy00MDQtXHRJTklUX1dPUksoXHUwMDI2c21jLVx1MDAzZXRjcF9saXN0ZW5fd29yaywgc21jX3RjcF9saXN0ZW5fd29yayk7XG5uZXQvc21jL2FmX3NtYy5jOjQwNTpcdElOSVRfV09SSyhcdTAwMjZzbWMtXHUwMDNlY29ubmVjdF93b3JrLCBzbWNfY29ubmVjdF93b3JrKTtcbm5ldC9zbWMvYWZfc21jLmMtNDA2LVx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2c21jLVx1MDAzZWNvbm4udHhfd29yaywgc21jX3R4X3dvcmspO1xuLS1cbm5ldC9zbWMvYWZfc21jLmM9OTMxPXN0YXRpYyBpbnQgc21jX3N3aXRjaF90b19mYWxsYmFjayhzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgaW50IHJlYXNvbl9jb2RlKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtOTYzLS8qIGZhbGwgYmFjayBkdXJpbmcgY29ubmVjdCAqL1xubmV0L3NtYy9hZl9zbWMuYzo5NjQ6c3RhdGljIGludCBzbWNfY29ubmVjdF9mYWxsYmFjayhzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgaW50IHJlYXNvbl9jb2RlKVxubmV0L3NtYy9hZl9zbWMuYy05NjUte1xuLS1cbm5ldC9zbWMvYWZfc21jLmMtOTgzLS8qIGRlY2xpbmUgYW5kIGZhbGwgYmFjayBkdXJpbmcgY29ubmVjdCAqL1xubmV0L3NtYy9hZl9zbWMuYzo5ODQ6c3RhdGljIGludCBzbWNfY29ubmVjdF9kZWNsaW5lX2ZhbGxiYWNrKHN0cnVjdCBzbWNfc29jayAqc21jLCBpbnQgcmVhc29uX2NvZGUsXG5uZXQvc21jL2FmX3NtYy5jLTk4NS1cdFx0XHRcdFx0dTggdmVyc2lvbilcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTEwMDQtXHR9XG5uZXQvc21jL2FmX3NtYy5jOjEwMDU6XHRyZXR1cm4gc21jX2Nvbm5lY3RfZmFsbGJhY2soc21jLCByZWFzb25fY29kZSk7XG5uZXQvc21jL2FmX3NtYy5jLTEwMDYtfVxuLS1cbm5ldC9zbWMvYWZfc21jLmM9MTAwOD1zdGF0aWMgdm9pZCBzbWNfY29ubl9hYm9ydChzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgaW50IGxvY2FsX2ZpcnN0KVxubmV0L3NtYy9hZl9zbWMuYy0xMDA5LXtcbm5ldC9zbWMvYWZfc21jLmM6MTAxMDpcdHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiA9IFx1MDAyNnNtYy1cdTAwM2Vjb25uO1xubmV0L3NtYy9hZl9zbWMuYy0xMDExLVx0c3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IgPSBjb25uLVx1MDAzZWxncjtcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTEwNjY9c3RhdGljIGludCBzbWNfZmluZF9pc21fdjJfZGV2aWNlX2NsbnQoc3RydWN0IHNtY19zb2NrICpzbWMsXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xMTEyLS8qIENoZWNrIGZvciBWTEFOIElEIGFuZCByZWdpc3RlciBpdCBvbiBJU00gZGV2aWNlIGp1c3QgZm9yIENMQyBoYW5kc2hha2UgKi9cbm5ldC9zbWMvYWZfc21jLmM6MTExMzpzdGF0aWMgaW50IHNtY19jb25uZWN0X2lzbV92bGFuX3NldHVwKHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXG5uZXQvc21jL2FmX3NtYy5jLTExMTQte1xuLS1cbm5ldC9zbWMvYWZfc21jLmM9MTEyMD1zdGF0aWMgaW50IHNtY19maW5kX3Byb3Bvc2FsX2RldmljZXMoc3RydWN0IHNtY19zb2NrICpzbWMsXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xMTI3LVx0ICAgIHNtY19maW5kX2lzbV9kZXZpY2Uoc21jLCBpbmkpIHx8XG5uZXQvc21jL2FmX3NtYy5jOjExMjg6XHQgICAgc21jX2Nvbm5lY3RfaXNtX3ZsYW5fc2V0dXAoaW5pKSlcbm5ldC9zbWMvYWZfc21jLmMtMTEyOS1cdFx0aW5pLVx1MDAzZXNtY2RfdmVyc2lvbiBcdTAwMjY9IH5TTUNfVjE7XG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xMTcyLSAqL1xubmV0L3NtYy9hZl9zbWMuYzoxMTczOnN0YXRpYyBpbnQgc21jX2Nvbm5lY3RfaXNtX3ZsYW5fY2xlYW51cChzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxubmV0L3NtYy9hZl9zbWMuYy0xMTc0LXtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTExODctLyogQ0xDIGhhbmRzaGFrZSBkdXJpbmcgY29ubmVjdCAqL1xubmV0L3NtYy9hZl9zbWMuYzoxMTg4OnN0YXRpYyBpbnQgc21jX2Nvbm5lY3RfY2xjKHN0cnVjdCBzbWNfc29jayAqc21jLFxubmV0L3NtYy9hZl9zbWMuYy0xMTg5LVx0XHRcdCAgIHN0cnVjdCBzbWNfY2xjX21zZ19hY2NlcHRfY29uZmlybSAqYWNsYyxcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTEyMDM9dm9pZCBzbWNfZmlsbF9naWRfbGlzdChzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTEyMzAtXG5uZXQvc21jL2FmX3NtYy5jOjEyMzE6c3RhdGljIGludCBzbWNfY29ubmVjdF9yZG1hX3YyX3ByZXBhcmUoc3RydWN0IHNtY19zb2NrICpzbWMsXG5uZXQvc21jL2FmX3NtYy5jLTEyMzItXHRcdFx0XHQgICAgICAgc3RydWN0IHNtY19jbGNfbXNnX2FjY2VwdF9jb25maXJtICphY2xjLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTI2Ni0vKiBzZXR1cCBmb3IgUkRNQSBjb25uZWN0aW9uIG9mIGNsaWVudCAqL1xubmV0L3NtYy9hZl9zbWMuYzoxMjY3OnN0YXRpYyBpbnQgc21jX2Nvbm5lY3RfcmRtYShzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcbm5ldC9zbWMvYWZfc21jLmMtMTI2OC1cdFx0XHQgICAgc3RydWN0IHNtY19jbGNfbXNnX2FjY2VwdF9jb25maXJtICphY2xjLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTI4My1cbm5ldC9zbWMvYWZfc21jLmM6MTI4NDpcdHJlYXNvbl9jb2RlID0gc21jX2Nvbm5lY3RfcmRtYV92Ml9wcmVwYXJlKHNtYywgYWNsYywgaW5pKTtcbm5ldC9zbWMvYWZfc21jLmMtMTI4NS1cdGlmIChyZWFzb25fY29kZSlcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTEzOTk9c21jX3YyX2RldGVybWluZV9hY2NlcHRlZF9jaGlkKHN0cnVjdCBzbWNfY2xjX21zZ19hY2NlcHRfY29uZmlybSAqYWNsYyxcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE0MTUtLyogc2V0dXAgZm9yIElTTSBjb25uZWN0aW9uIG9mIGNsaWVudCAqL1xubmV0L3NtYy9hZl9zbWMuYzoxNDE2OnN0YXRpYyBpbnQgc21jX2Nvbm5lY3RfaXNtKHN0cnVjdCBzbWNfc29jayAqc21jLFxubmV0L3NtYy9hZl9zbWMuYy0xNDE3LVx0XHRcdCAgIHN0cnVjdCBzbWNfY2xjX21zZ19hY2NlcHRfY29uZmlybSAqYWNsYyxcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE0OTgtLyogY2hlY2sgaWYgcmVjZWl2ZWQgYWNjZXB0IHR5cGUgYW5kIHZlcnNpb24gbWF0Y2hlcyBhIHByb3Bvc2VkIG9uZSAqL1xubmV0L3NtYy9hZl9zbWMuYzoxNDk5OnN0YXRpYyBpbnQgc21jX2Nvbm5lY3RfY2hlY2tfYWNsYyhzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pLFxubmV0L3NtYy9hZl9zbWMuYy0xNTAwLVx0XHRcdFx0ICBzdHJ1Y3Qgc21jX2NsY19tc2dfYWNjZXB0X2NvbmZpcm0gKmFjbGMpXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xNTE5LS8qIHBlcmZvcm0gc3RlcHMgYmVmb3JlIGFjdHVhbGx5IGNvbm5lY3RpbmcgKi9cbm5ldC9zbWMvYWZfc21jLmM6MTUyMDpzdGF0aWMgaW50IF9fc21jX2Nvbm5lY3Qoc3RydWN0IHNtY19zb2NrICpzbWMpXG5uZXQvc21jL2FmX3NtYy5jLTE1MjEte1xuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTUyOC1cdGlmIChzbWMtXHUwMDNldXNlX2ZhbGxiYWNrKVxubmV0L3NtYy9hZl9zbWMuYzoxNTI5Olx0XHRyZXR1cm4gc21jX2Nvbm5lY3RfZmFsbGJhY2soc21jLCBzbWMtXHUwMDNlZmFsbGJhY2tfcnNuKTtcbm5ldC9zbWMvYWZfc21jLmMtMTUzMC1cbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE1MzItXHRpZiAoIXRjcF9zayhzbWMtXHUwMDNlY2xjc29jay1cdTAwM2VzayktXHUwMDNlc3luX3NtYylcbm5ldC9zbWMvYWZfc21jLmM6MTUzMzpcdFx0cmV0dXJuIHNtY19jb25uZWN0X2ZhbGxiYWNrKHNtYywgU01DX0NMQ19ERUNMX1BFRVJOT1NNQyk7XG5uZXQvc21jL2FmX3NtYy5jLTE1MzQtXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xNTM2LVx0aWYgKHVzaW5nX2lwc2VjKHNtYykpXG5uZXQvc21jL2FmX3NtYy5jOjE1Mzc6XHRcdHJldHVybiBzbWNfY29ubmVjdF9kZWNsaW5lX2ZhbGxiYWNrKHNtYywgU01DX0NMQ19ERUNMX0lQU0VDLFxubmV0L3NtYy9hZl9zbWMuYy0xNTM4LVx0XHRcdFx0XHRcdCAgICB2ZXJzaW9uKTtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE1NDEtXHRpZiAoIWluaSlcbm5ldC9zbWMvYWZfc21jLmM6MTU0MjpcdFx0cmV0dXJuIHNtY19jb25uZWN0X2RlY2xpbmVfZmFsbGJhY2soc21jLCBTTUNfQ0xDX0RFQ0xfTUVNLFxubmV0L3NtYy9hZl9zbWMuYy0xNTQzLVx0XHRcdFx0XHRcdCAgICB2ZXJzaW9uKTtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE1NjgtXHQvKiBwZXJmb3JtIENMQyBoYW5kc2hha2UgKi9cbm5ldC9zbWMvYWZfc21jLmM6MTU2OTpcdHJjID0gc21jX2Nvbm5lY3RfY2xjKHNtYywgYWNsYywgaW5pKTtcbm5ldC9zbWMvYWZfc21jLmMtMTU3MC1cdGlmIChyYykge1xuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTU3OS1cdC8qIGNoZWNrIGlmIHNtYyBtb2RlcyBhbmQgdmVyc2lvbnMgb2YgQ0xDIHByb3Bvc2FsIGFuZCBhY2NlcHQgbWF0Y2ggKi9cbm5ldC9zbWMvYWZfc21jLmM6MTU4MDpcdHJjID0gc21jX2Nvbm5lY3RfY2hlY2tfYWNsYyhpbmksIGFjbGMpO1xubmV0L3NtYy9hZl9zbWMuYy0xNTgxLVx0dmVyc2lvbiA9IGFjbGMtXHUwMDNlaGRyLnZlcnNpb24gPT0gU01DX1YxID8gU01DX1YxIDogU01DX1YyO1xuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTU4Ny1cdFx0aW5pLVx1MDAzZXNtY3JfdmVyc2lvbiA9IHZlcnNpb247XG5uZXQvc21jL2FmX3NtYy5jOjE1ODg6XHRcdHJjID0gc21jX2Nvbm5lY3RfcmRtYShzbWMsIGFjbGMsIGluaSk7XG5uZXQvc21jL2FmX3NtYy5jLTE1ODktXHR9IGVsc2UgaWYgKGFjbGMtXHUwMDNlaGRyLnR5cGV2MSA9PSBTTUNfVFlQRV9EKSB7XG5uZXQvc21jL2FmX3NtYy5jLTE1OTAtXHRcdGluaS1cdTAwM2VzbWNkX3ZlcnNpb24gPSB2ZXJzaW9uO1xubmV0L3NtYy9hZl9zbWMuYzoxNTkxOlx0XHRyYyA9IHNtY19jb25uZWN0X2lzbShzbWMsIGFjbGMsIGluaSk7XG5uZXQvc21jL2FmX3NtYy5jLTE1OTItXHR9XG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xNTk2LVx0U01DX1NUQVRfQ0xOVF9TVUNDX0lOQyhzb2NrX25ldChzbWMtXHUwMDNlY2xjc29jay1cdTAwM2VzayksIGFjbGMpO1xubmV0L3NtYy9hZl9zbWMuYzoxNTk3Olx0c21jX2Nvbm5lY3RfaXNtX3ZsYW5fY2xlYW51cChpbmkpO1xubmV0L3NtYy9hZl9zbWMuYy0xNTk4LVx0a2ZyZWUoYnVmKTtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE2MDItdmxhbl9jbGVhbnVwOlxubmV0L3NtYy9hZl9zbWMuYzoxNjAzOlx0c21jX2Nvbm5lY3RfaXNtX3ZsYW5fY2xlYW51cChpbmkpO1xubmV0L3NtYy9hZl9zbWMuYy0xNjA0LVx0a2ZyZWUoYnVmKTtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE2MDYtXHRzbWNfaW5pdF9pbmZvX2ZyZWUoaW5pKTtcbm5ldC9zbWMvYWZfc21jLmM6MTYwNzpcdHJldHVybiBzbWNfY29ubmVjdF9kZWNsaW5lX2ZhbGxiYWNrKHNtYywgcmMsIHZlcnNpb24pO1xubmV0L3NtYy9hZl9zbWMuYy0xNjA4LX1cbm5ldC9zbWMvYWZfc21jLmMtMTYwOS1cbm5ldC9zbWMvYWZfc21jLmM6MTYxMDpzdGF0aWMgdm9pZCBzbWNfY29ubmVjdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9zbWMvYWZfc21jLmMtMTYxMS17XG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xNjM5LVxubmV0L3NtYy9hZl9zbWMuYzoxNjQwOlx0cmMgPSBfX3NtY19jb25uZWN0KHNtYyk7XG5uZXQvc21jL2FmX3NtYy5jLTE2NDEtXHRpZiAocmMgXHUwMDNjIDApXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xNjU1LVxubmV0L3NtYy9hZl9zbWMuYzoxNjU2OmludCBzbWNfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbm5ldC9zbWMvYWZfc21jLmMtMTY1Ny1cdFx0aW50IGFsZW4sIGludCBmbGFncylcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE3MjItXHR9IGVsc2Uge1xubmV0L3NtYy9hZl9zbWMuYzoxNzIzOlx0XHRyYyA9IF9fc21jX2Nvbm5lY3Qoc21jKTtcbm5ldC9zbWMvYWZfc21jLmMtMTcyNC1cdFx0aWYgKHJjIFx1MDAzYyAwKVxuLS1cbm5ldC9zbWMvYWZfc21jLmM9MjI4MT1zdGF0aWMgaW50IHNtY19saXN0ZW5fcmRtYV9yZWcoc3RydWN0IHNtY19zb2NrICpuZXdfc21jLCBib29sIGxvY2FsX2ZpcnN0KVxubmV0L3NtYy9hZl9zbWMuYy0yMjgyLXtcbm5ldC9zbWMvYWZfc21jLmM6MjI4MzpcdHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiA9IFx1MDAyNm5ld19zbWMtXHUwMDNlY29ubjtcbm5ldC9zbWMvYWZfc21jLmMtMjI4NC1cbi0tXG5uZXQvc21jL2FmX3NtYy5jPTMxOTk9aW50IHNtY19pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMzIwMi1cdHVuaW9uIHNtY19ob3N0X2N1cnNvciBjb25zLCB1cmc7XG5uZXQvc21jL2FmX3NtYy5jOjMyMDM6XHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm47XG5uZXQvc21jL2FmX3NtYy5jLTMyMDQtXHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYztcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTMzMzM9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgc21jX3NvY2tfb3BzID0ge1xuLS1cbm5ldC9zbWMvYWZfc21jLmMtMzMzNy1cdC5iaW5kXHRcdD0gc21jX2JpbmQsXG5uZXQvc21jL2FmX3NtYy5jOjMzMzg6XHQuY29ubmVjdFx0PSBzbWNfY29ubmVjdCxcbm5ldC9zbWMvYWZfc21jLmMtMzMzOS1cdC5zb2NrZXRwYWlyXHQ9IHNvY2tfbm9fc29ja2V0cGFpcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQ29ubmVjdGluZyB0aGUgRG90cyBpbiBTb2NrZXQgTWFuYWdlbWVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBgc21jX2Nvbm5lY3RgLiBUaGF0JiMzOTtzIHByZXR0eSBjbGVhciAtIGl0JiMzOTtzIHRoZSBzb2NrZXQmIzM5O3MgYC5jb25uZWN0YCBvcGVyYXRpb24sIG5vIHF1ZXN0aW9uLiBEZWZpbml0ZWx5IGEgdXNlZnVsIG1uZW1vbmljLCBhIGdvb2QgZm9jdXMgc3ltYm9sIHRvIHdvcmsgd2l0aC4gSXQmIzM5O3MgY29uY2lzZSBhbmQgcG9pbnRzIGRpcmVjdGx5IHRvIHRoZSBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlLgoKTm93LCBsZXQmIzM5O3MgbW92ZSBvbiB0byBgc21jX2xpc3RlbmAuIEl0IHNlZW1zIHJlYXNvbmFibGUgdG8gYXNzdW1lIHRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIHNvY2tldCYjMzk7cyBgLmxpc3RlbmAgb3BlcmF0aW9uLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gYW5kIHRoZSBlc3RhYmxpc2hlZCBwYXR0ZXJuLCB0aGlzIGZlZWxzIGhpZ2hseSBwcm9iYWJsZS4gQnV0LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBhdm9pZCBhc3N1bXB0aW9ucywgbGV0JiMzOTtzIHZlcmlmeSB0aGF0IHF1aWNrbHkuIE5vIGhhcm0gaW4gY29uZmlybWluZyB0aGUgaHlwb3RoZXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX2xpc3RlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvYWZfc21jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9hZl9zbWMuYz0xODcyPXN0YXRpYyBpbnQgc21jcl9zZXJ2X2NvbmZfZmlyc3RfbGluayhzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE5MjQtLyogbGlzdGVuIHdvcmtlcjogZmluaXNoICovXG5uZXQvc21jL2FmX3NtYy5jOjE5MjU6c3RhdGljIHZvaWQgc21jX2xpc3Rlbl9vdXQoc3RydWN0IHNtY19zb2NrICpuZXdfc21jKVxubmV0L3NtYy9hZl9zbWMuYy0xOTI2LXtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE5MzItXG5uZXQvc21jL2FmX3NtYy5jOjE5MzM6XHRyZWxlYXNlX3NvY2sobmV3c21jc2spOyAvKiBsb2NrIGluIHNtY19saXN0ZW5fd29yaygpICovXG5uZXQvc21jL2FmX3NtYy5jLTE5MzQtXHRpZiAobHNtYy1cdTAwM2Vzay5za19zdGF0ZSA9PSBTTUNfTElTVEVOKSB7XG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xOTQ3LS8qIGxpc3RlbiB3b3JrZXI6IGZpbmlzaCBpbiBzdGF0ZSBjb25uZWN0ZWQgKi9cbm5ldC9zbWMvYWZfc21jLmM6MTk0ODpzdGF0aWMgdm9pZCBzbWNfbGlzdGVuX291dF9jb25uZWN0ZWQoc3RydWN0IHNtY19zb2NrICpuZXdfc21jKVxubmV0L3NtYy9hZl9zbWMuYy0xOTQ5LXtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE5NTQtXG5uZXQvc21jL2FmX3NtYy5jOjE5NTU6XHRzbWNfbGlzdGVuX291dChuZXdfc21jKTtcbm5ldC9zbWMvYWZfc21jLmMtMTk1Ni19XG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xOTU4LS8qIGxpc3RlbiB3b3JrZXI6IGZpbmlzaCBpbiBlcnJvciBzdGF0ZSAqL1xubmV0L3NtYy9hZl9zbWMuYzoxOTU5OnN0YXRpYyB2b2lkIHNtY19saXN0ZW5fb3V0X2VycihzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMpXG5uZXQvc21jL2FmX3NtYy5jLTE5NjAte1xuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTk2OC1cbm5ldC9zbWMvYWZfc21jLmM6MTk2OTpcdHNtY19saXN0ZW5fb3V0KG5ld19zbWMpO1xubmV0L3NtYy9hZl9zbWMuYy0xOTcwLX1cbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE5NzItLyogbGlzdGVuIHdvcmtlcjogZGVjbGluZSBhbmQgZmFsbCBiYWNrIGlmIHBvc3NpYmxlICovXG5uZXQvc21jL2FmX3NtYy5jOjE5NzM6c3RhdGljIHZvaWQgc21jX2xpc3Rlbl9kZWNsaW5lKHN0cnVjdCBzbWNfc29jayAqbmV3X3NtYywgaW50IHJlYXNvbl9jb2RlLFxubmV0L3NtYy9hZl9zbWMuYy0xOTc0LVx0XHRcdCAgICAgICBpbnQgbG9jYWxfZmlyc3QsIHU4IHZlcnNpb24pXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xOTgwLVx0XHQvKiBlcnJvciwgbm8gZmFsbGJhY2sgcG9zc2libGUgKi9cbm5ldC9zbWMvYWZfc21jLmM6MTk4MTpcdFx0c21jX2xpc3Rlbl9vdXRfZXJyKG5ld19zbWMpO1xubmV0L3NtYy9hZl9zbWMuYy0xOTgyLVx0XHRyZXR1cm47XG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xOTg1LVx0XHRpZiAoc21jX2NsY19zZW5kX2RlY2xpbmUobmV3X3NtYywgcmVhc29uX2NvZGUsIHZlcnNpb24pIFx1MDAzYyAwKSB7XG5uZXQvc21jL2FmX3NtYy5jOjE5ODY6XHRcdFx0c21jX2xpc3Rlbl9vdXRfZXJyKG5ld19zbWMpO1xubmV0L3NtYy9hZl9zbWMuYy0xOTg3LVx0XHRcdHJldHVybjtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE5ODktXHR9XG5uZXQvc21jL2FmX3NtYy5jOjE5OTA6XHRzbWNfbGlzdGVuX291dF9jb25uZWN0ZWQobmV3X3NtYyk7XG5uZXQvc21jL2FmX3NtYy5jLTE5OTEtfVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTk5My0vKiBsaXN0ZW4gd29ya2VyOiB2ZXJzaW9uIGNoZWNraW5nICovXG5uZXQvc21jL2FmX3NtYy5jOjE5OTQ6c3RhdGljIGludCBzbWNfbGlzdGVuX3YyX2NoZWNrKHN0cnVjdCBzbWNfc29jayAqbmV3X3NtYyxcbm5ldC9zbWMvYWZfc21jLmMtMTk5NS1cdFx0XHQgICAgICAgc3RydWN0IHNtY19jbGNfbXNnX3Byb3Bvc2FsICpwY2xjLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjA1NS0vKiBsaXN0ZW4gd29ya2VyOiBjaGVjayBwcmVmaXhlcyAqL1xubmV0L3NtYy9hZl9zbWMuYzoyMDU2OnN0YXRpYyBpbnQgc21jX2xpc3Rlbl9wcmZ4X2NoZWNrKHN0cnVjdCBzbWNfc29jayAqbmV3X3NtYyxcbm5ldC9zbWMvYWZfc21jLmMtMjA1Ny1cdFx0XHRcdCBzdHJ1Y3Qgc21jX2NsY19tc2dfcHJvcG9zYWwgKnBjbGMpXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0yMDczLS8qIGxpc3RlbiB3b3JrZXI6IGluaXRpYWxpemUgY29ubmVjdGlvbiBhbmQgYnVmZmVycyAqL1xubmV0L3NtYy9hZl9zbWMuYzoyMDc0OnN0YXRpYyBpbnQgc21jX2xpc3Rlbl9yZG1hX2luaXQoc3RydWN0IHNtY19zb2NrICpuZXdfc21jLFxubmV0L3NtYy9hZl9zbWMuYy0yMDc1LVx0XHRcdFx0c3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTIwOTMtLyogbGlzdGVuIHdvcmtlcjogaW5pdGlhbGl6ZSBjb25uZWN0aW9uIGFuZCBidWZmZXJzIGZvciBTTUMtRCAqL1xubmV0L3NtYy9hZl9zbWMuYzoyMDk0OnN0YXRpYyBpbnQgc21jX2xpc3Rlbl9pc21faW5pdChzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMsXG5uZXQvc21jL2FmX3NtYy5jLTIwOTUtXHRcdFx0ICAgICAgIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXG4tLVxubmV0L3NtYy9hZl9zbWMuYz0yMTYwPXN0YXRpYyB2b2lkIHNtY19maW5kX2lzbV92Ml9kZXZpY2Vfc2VydihzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMsXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0yMjMxLVx0XHRpbmktXHUwMDNlaXNtX3NlbGVjdGVkID0gaTtcbm5ldC9zbWMvYWZfc21jLmM6MjIzMjpcdFx0cmMgPSBzbWNfbGlzdGVuX2lzbV9pbml0KG5ld19zbWMsIGluaSk7XG5uZXQvc21jL2FmX3NtYy5jLTIyMzMtXHRcdGlmIChyYykge1xuLS1cbm5ldC9zbWMvYWZfc21jLmM9MjI1MD1zdGF0aWMgdm9pZCBzbWNfZmluZF9pc21fdjFfZGV2aWNlX3NlcnYoc3RydWN0IHNtY19zb2NrICpuZXdfc21jLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjI2OC1cdGluaS1cdTAwM2Vpc21fc2VsZWN0ZWQgPSAwO1xubmV0L3NtYy9hZl9zbWMuYzoyMjY5Olx0cmMgPSBzbWNfbGlzdGVuX2lzbV9pbml0KG5ld19zbWMsIGluaSk7XG5uZXQvc21jL2FmX3NtYy5jLTIyNzAtXHRpZiAoIXJjKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjI4MC0vKiBsaXN0ZW4gd29ya2VyOiByZWdpc3RlciBidWZmZXJzICovXG5uZXQvc21jL2FmX3NtYy5jOjIyODE6c3RhdGljIGludCBzbWNfbGlzdGVuX3JkbWFfcmVnKHN0cnVjdCBzbWNfc29jayAqbmV3X3NtYywgYm9vbCBsb2NhbF9maXJzdClcbm5ldC9zbWMvYWZfc21jLmMtMjI4Mi17XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0yMjk5PXN0YXRpYyB2b2lkIHNtY19maW5kX3JkbWFfdjJfZGV2aWNlX3NlcnYoc3RydWN0IHNtY19zb2NrICpuZXdfc21jLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjMzMi1cdGluaS1cdTAwM2VzbWNyX3ZlcnNpb24gPSBTTUNfVjI7XG5uZXQvc21jL2FmX3NtYy5jOjIzMzM6XHRyYyA9IHNtY19saXN0ZW5fcmRtYV9pbml0KG5ld19zbWMsIGluaSk7XG5uZXQvc21jL2FmX3NtYy5jLTIzMzQtXHRpZiAoIXJjKSB7XG5uZXQvc21jL2FmX3NtYy5jOjIzMzU6XHRcdHJjID0gc21jX2xpc3Rlbl9yZG1hX3JlZyhuZXdfc21jLCBpbmktXHUwMDNlZmlyc3RfY29udGFjdF9sb2NhbCk7XG5uZXQvc21jL2FmX3NtYy5jLTIzMzYtXHRcdGlmIChyYylcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTIzNTM9c3RhdGljIGludCBzbWNfZmluZF9yZG1hX3YxX2RldmljZV9zZXJ2KHN0cnVjdCBzbWNfc29jayAqbmV3X3NtYyxcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTIzNzAtXHR9XG5uZXQvc21jL2FmX3NtYy5jOjIzNzE6XHRyYyA9IHNtY19saXN0ZW5fcmRtYV9pbml0KG5ld19zbWMsIGluaSk7XG5uZXQvc21jL2FmX3NtYy5jLTIzNzItXHRpZiAocmMpXG5uZXQvc21jL2FmX3NtYy5jLTIzNzMtXHRcdHJldHVybiByYztcbm5ldC9zbWMvYWZfc21jLmM6MjM3NDpcdHJldHVybiBzbWNfbGlzdGVuX3JkbWFfcmVnKG5ld19zbWMsIGluaS1cdTAwM2VmaXJzdF9jb250YWN0X2xvY2FsKTtcbm5ldC9zbWMvYWZfc21jLmMtMjM3NS19XG4tLVxubmV0L3NtYy9hZl9zbWMuYy0yMzc3LS8qIGRldGVybWluZSB0aGUgbG9jYWwgZGV2aWNlIG1hdGNoaW5nIHRvIHByb3Bvc2FsICovXG5uZXQvc21jL2FmX3NtYy5jOjIzNzg6c3RhdGljIGludCBzbWNfbGlzdGVuX2ZpbmRfZGV2aWNlKHN0cnVjdCBzbWNfc29jayAqbmV3X3NtYyxcbm5ldC9zbWMvYWZfc21jLmMtMjM3OS1cdFx0XHRcdCAgc3RydWN0IHNtY19jbGNfbXNnX3Byb3Bvc2FsICpwY2xjLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjM4OS1cdC8qIGNoZWNrIGZvciBtYXRjaGluZyBJUCBwcmVmaXggYW5kIHN1Ym5ldCBsZW5ndGggKFYxKSAqL1xubmV0L3NtYy9hZl9zbWMuYzoyMzkwOlx0cHJmeF9yYyA9IHNtY19saXN0ZW5fcHJmeF9jaGVjayhuZXdfc21jLCBwY2xjKTtcbm5ldC9zbWMvYWZfc21jLmMtMjM5MS1cdGlmIChwcmZ4X3JjKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjQyNS0vKiBsaXN0ZW4gd29ya2VyOiBmaW5pc2ggUkRNQSBzZXR1cCAqL1xubmV0L3NtYy9hZl9zbWMuYzoyNDI2OnN0YXRpYyBpbnQgc21jX2xpc3Rlbl9yZG1hX2ZpbmlzaChzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMsXG5uZXQvc21jL2FmX3NtYy5jLTI0MjctXHRcdFx0XHQgIHN0cnVjdCBzbWNfY2xjX21zZ19hY2NlcHRfY29uZmlybSAqY2NsYyxcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTI0NTEtLyogc2V0dXAgZm9yIGNvbm5lY3Rpb24gb2Ygc2VydmVyICovXG5uZXQvc21jL2FmX3NtYy5jOjI0NTI6c3RhdGljIHZvaWQgc21jX2xpc3Rlbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9zbWMvYWZfc21jLmMtMjQ1My17XG5uZXQvc21jL2FmX3NtYy5jLTI0NTQtXHRzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHNtY19zb2NrLFxubmV0L3NtYy9hZl9zbWMuYzoyNDU1Olx0XHRcdFx0XHRcdHNtY19saXN0ZW5fd29yayk7XG5uZXQvc21jL2FmX3NtYy5jLTI0NTYtXHRzdHJ1Y3Qgc29ja2V0ICpuZXdjbGNzb2NrID0gbmV3X3NtYy1cdTAwM2VjbGNzb2NrO1xuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjQ2NC1cbm5ldC9zbWMvYWZfc21jLmM6MjQ2NTpcdGxvY2tfc29jayhcdTAwMjZuZXdfc21jLVx1MDAzZXNrKTsgLyogcmVsZWFzZSBpbiBzbWNfbGlzdGVuX291dCgpICovXG5uZXQvc21jL2FmX3NtYy5jLTI0NjYtXHRpZiAobmV3X3NtYy1cdTAwM2VsaXN0ZW5fc21jLVx1MDAzZXNrLnNrX3N0YXRlICE9IFNNQ19MSVNURU4pXG5uZXQvc21jL2FmX3NtYy5jOjI0Njc6XHRcdHJldHVybiBzbWNfbGlzdGVuX291dF9lcnIobmV3X3NtYyk7XG5uZXQvc21jL2FmX3NtYy5jLTI0NjgtXG5uZXQvc21jL2FmX3NtYy5jLTI0NjktXHRpZiAobmV3X3NtYy1cdTAwM2V1c2VfZmFsbGJhY2spIHtcbm5ldC9zbWMvYWZfc21jLmM6MjQ3MDpcdFx0c21jX2xpc3Rlbl9vdXRfY29ubmVjdGVkKG5ld19zbWMpO1xubmV0L3NtYy9hZl9zbWMuYy0yNDcxLVx0XHRyZXR1cm47XG4tLVxubmV0L3NtYy9hZl9zbWMuYy0yNDc3LVx0XHRpZiAocmMpXG5uZXQvc21jL2FmX3NtYy5jOjI0Nzg6XHRcdFx0c21jX2xpc3Rlbl9vdXRfZXJyKG5ld19zbWMpO1xubmV0L3NtYy9hZl9zbWMuYy0yNDc5LVx0XHRlbHNlXG5uZXQvc21jL2FmX3NtYy5jOjI0ODA6XHRcdFx0c21jX2xpc3Rlbl9vdXRfY29ubmVjdGVkKG5ld19zbWMpO1xubmV0L3NtYy9hZl9zbWMuYy0yNDgxLVx0XHRyZXR1cm47XG4tLVxubmV0L3NtYy9hZl9zbWMuYy0yNTEzLVx0LyogaW5pdGlhbCB2ZXJzaW9uIGNoZWNraW5nICovXG5uZXQvc21jL2FmX3NtYy5jOjI1MTQ6XHRyYyA9IHNtY19saXN0ZW5fdjJfY2hlY2sobmV3X3NtYywgcGNsYywgaW5pKTtcbm5ldC9zbWMvYWZfc21jLmMtMjUxNS1cdGlmIChyYylcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTI1MjYtXHQvKiBkZXRlcm1pbmUgSVNNIG9yIFJvQ0UgZGV2aWNlIHVzZWQgZm9yIGNvbm5lY3Rpb24gKi9cbm5ldC9zbWMvYWZfc21jLmM6MjUyNzpcdHJjID0gc21jX2xpc3Rlbl9maW5kX2RldmljZShuZXdfc21jLCBwY2xjLCBpbmkpO1xubmV0L3NtYy9hZl9zbWMuYy0yNTI4LVx0aWYgKHJjKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjU1OS1cbm5ldC9zbWMvYWZfc21jLmM6MjU2MDpcdC8qIGZjZSBzbWMgcmVsZWFzZSB2ZXJzaW9uIGlzIG5lZWRlZCBpbiBzbWNfbGlzdGVuX3JkbWFfZmluaXNoLFxubmV0L3NtYy9hZl9zbWMuYy0yNTYxLVx0ICogc28gc2F2ZSBmY2UgaW5mbyBoZXJlLlxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjU2Ni1cdGlmICghaW5pLVx1MDAzZWlzX3NtY2QpIHtcbm5ldC9zbWMvYWZfc21jLmM6MjU2NzpcdFx0cmMgPSBzbWNfbGlzdGVuX3JkbWFfZmluaXNoKG5ld19zbWMsIGNjbGMsXG5uZXQvc21jL2FmX3NtYy5jLTI1NjgtXHRcdFx0XHRcdCAgICBpbmktXHUwMDNlZmlyc3RfY29udGFjdF9sb2NhbCwgaW5pKTtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTI1ODItXHRTTUNfU1RBVF9TRVJWX1NVQ0NfSU5DKHNvY2tfbmV0KG5ld2NsY3NvY2stXHUwMDNlc2spLCBpbmkpO1xubmV0L3NtYy9hZl9zbWMuYzoyNTgzOlx0Lyogc21jX2xpc3Rlbl9vdXQoKSB3aWxsIHJlbGVhc2Ugc21jc2sgKi9cbm5ldC9zbWMvYWZfc21jLmM6MjU4NDpcdHNtY19saXN0ZW5fb3V0X2Nvbm5lY3RlZChuZXdfc21jKTtcbm5ldC9zbWMvYWZfc21jLmMtMjU4NS1cdGdvdG8gb3V0X2ZyZWU7XG4tLVxubmV0L3NtYy9hZl9zbWMuYy0yNTg5LW91dF9kZWNsOlxubmV0L3NtYy9hZl9zbWMuYzoyNTkwOlx0c21jX2xpc3Rlbl9kZWNsaW5lKG5ld19zbWMsIHJjLCBpbmkgPyBpbmktXHUwMDNlZmlyc3RfY29udGFjdF9sb2NhbCA6IDAsXG5uZXQvc21jL2FmX3NtYy5jLTI1OTEtXHRcdFx0ICAgcHJvcG9zYWxfdmVyc2lvbik7XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0yNTk3PXN0YXRpYyB2b2lkIHNtY190Y3BfbGlzdGVuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjYxOC1cdFx0bmV3X3NtYy1cdTAwM2VmYWxsYmFja19yc24gPSBsc21jLVx1MDAzZWZhbGxiYWNrX3Jzbjtcbm5ldC9zbWMvYWZfc21jLmM6MjYxOTpcdFx0c29ja19ob2xkKGxzayk7IC8qIHNvY2tfcHV0IGluIHNtY19saXN0ZW5fd29yayAqL1xubmV0L3NtYy9hZl9zbWMuYzoyNjIwOlx0XHRJTklUX1dPUksoXHUwMDI2bmV3X3NtYy1cdTAwM2VzbWNfbGlzdGVuX3dvcmssIHNtY19saXN0ZW5fd29yayk7XG5uZXQvc21jL2FmX3NtYy5jLTI2MjEtXHRcdHNtY19jb3B5X3NvY2tfc2V0dGluZ3NfdG9fc21jKG5ld19zbWMpO1xubmV0L3NtYy9hZl9zbWMuYy0yNjIyLVx0XHRzb2NrX2hvbGQoXHUwMDI2bmV3X3NtYy1cdTAwM2Vzayk7IC8qIHNvY2tfcHV0IGluIHBhc3NpdmUgY2xvc2luZyAqL1xubmV0L3NtYy9hZl9zbWMuYzoyNjIzOlx0XHRpZiAoIXF1ZXVlX3dvcmsoc21jX2hzX3dxLCBcdTAwMjZuZXdfc21jLVx1MDAzZXNtY19saXN0ZW5fd29yaykpXG5uZXQvc21jL2FmX3NtYy5jLTI2MjQtXHRcdFx0c29ja19wdXQoXHUwMDI2bmV3X3NtYy1cdTAwM2Vzayk7XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0yNjMyPXN0YXRpYyB2b2lkIHNtY19jbGNzb2NrX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKmxpc3Rlbl9jbGNzb2NrKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjY0OS1cbm5ldC9zbWMvYWZfc21jLmM6MjY1MDppbnQgc21jX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgYmFja2xvZylcbm5ldC9zbWMvYWZfc21jLmMtMjY1MS17XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0yNzE2PWludCBzbWNfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld19zb2NrLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjc0NS1cdFx0dGltZW8gPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvKTtcbm5ldC9zbWMvYWZfc21jLmM6Mjc0NjpcdFx0Lyogd2FrZXVwIGJ5IHNrX2RhdGFfcmVhZHkgaW4gc21jX2xpc3Rlbl93b3JrKCkgKi9cbm5ldC9zbWMvYWZfc21jLmMtMjc0Ny1cdFx0c2NoZWRfYW5ub3RhdGVfc2xlZXAoKTtcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTI4ODc9X19wb2xsX3Qgc21jX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0yOTEwLVx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gU01DX0xJU1RFTikge1xubmV0L3NtYy9hZl9zbWMuYzoyOTExOlx0XHRcdC8qIHdva2VuIHVwIGJ5IHNrX2RhdGFfcmVhZHkgaW4gc21jX2xpc3Rlbl93b3JrKCkgKi9cbm5ldC9zbWMvYWZfc21jLmMtMjkxMi1cdFx0XHRtYXNrIHw9IHNtY19hY2NlcHRfcG9sbChzayk7XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0zMzMzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHNtY19zb2NrX29wcyA9IHtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTMzNDMtXHQuaW9jdGxcdFx0PSBzbWNfaW9jdGwsXG5uZXQvc21jL2FmX3NtYy5jOjMzNDQ6XHQubGlzdGVuXHRcdD0gc21jX2xpc3Rlbixcbm5ldC9zbWMvYWZfc21jLmMtMzM0NS1cdC5zaHV0ZG93blx0PSBzbWNfc2h1dGRvd24sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTY4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgdGhlIFNNQyBMaXN0ZW5pbmcgUHJvY2VzcyBhbmQgQVBJIERlc2lnbioqCgpSaWdodCwgc28gYHNtY19saXN0ZW5gIGlzIHRoZSBzb2NrZXQmIzM5O3MgYC5saXN0ZW5gIGNhbGwsIHRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkLiBJdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgdG8gZ2V0IHRoZSBzb2NrZXQgcmVhZHkgdG8gYWNjZXB0IGNvbm5lY3Rpb25zLiBCdXQgdGhlIGFjdHVhbCBoZWF2eSBsaWZ0aW5nLCB0aGUgY29ubmVjdGlvbiBzZXR1cCBhbmQgaGFuZGxpbmcsIHRoYXQmIzM5O3MgYWxsIGRvbmUgaW4gYHNtY19saXN0ZW5fd29ya2AuIEFuZCwgaWYgSSYjMzk7bSByZW1lbWJlcmluZyByaWdodCwgYHNtY19saXN0ZW5fd29ya2AgaXMgc3RhdGljLiBOb3csIHRoZSBwcm9tcHQgZG9lcyBzYXkgdG8gcHJlZmVyIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnRzLiBUaGUgcmVhc29uaW5nIHRoZXJlIGlzIGZvciB0aGUgY2xhcml0eSBvZiB0aGUgYWRkcmVzcyBvZiBkaXN0aW5jdCBzeW1ib2xzIGFuZCByZWR1Y2luZyBwb3NzaWJsZSBpbmxpbmluZyBjb21wbGV4aXR5LgoKQnV0IHdhaXQgYSBtaW51dGUsIGBzbWNfbGlzdGVuX3dvcmtgIGlzIGEgd29ya3F1ZXVlIGZ1bmN0aW9uLCBhbmQgdGhhdCBtZWFucyBpdCAqY2FuJiMzOTt0KiBiZSBpbmxpbmVkLiBJdCYjMzk7cyBwYXNzZWQgdG8gYElOSVRfV09SS2AuIFNvLCB0aGUgd2hvbGUgc3RhdGljL25vbi1zdGF0aWMgdGhpbmcgbWlnaHQgbm90IG1hdHRlciBpbiB0aGlzIHNwZWNpZmljIGNhc2UsIHNpbmNlIGl0ICpoYXMqIGEgc3ltYm9sIGFkZHJlc3MuCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoYXQgdGhvdWdodCBwcm9jZXNzLCB3ZSBtYXkgcHJlZmVyIHVzaW5nIGBzbWNfbGlzdGVuYCBhbmQgYHNtY19jb25uZWN0YCBhcyB0aGUgQVBJIGZvciB0aGlzIGtpbmQgb2Ygd29yay4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgaG93IGBzbWNfbGxjX2NsaV9hZGRfbGlua2AgYW5kIGBzbWNfbGxjX3Nydl9hZGRfbGlua2AgaGFuZGxlIHRoaXMgaW4gdGhlIHNhbWUgY29kZSBiYXNlLiBUaGF0IHdvdWxkIGdpdmUgbWUgc29tZSBpbnNpZ2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfbGxjX2NsaV9hZGRfbGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2xsYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2xsYy5jPTg4Nz1zdGF0aWMgaW50IHNtY19sbGNfY2xpX3JrZXlfZXhjaGFuZ2Uoc3RydWN0IHNtY19saW5rICpsaW5rLFxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTkzMC0vKiBwcmVwYXJlIGFuZCBzZW5kIGFuIGFkZCBsaW5rIHJlamVjdCByZXNwb25zZSAqL1xubmV0L3NtYy9zbWNfbGxjLmM6OTMxOnN0YXRpYyBpbnQgc21jX2xsY19jbGlfYWRkX2xpbmtfcmVqZWN0KHN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqcWVudHJ5KVxubmV0L3NtYy9zbWNfbGxjLmMtOTMyLXtcbi0tXG5uZXQvc21jL3NtY19sbGMuYz0xMDIwPXN0YXRpYyB2b2lkIHNtY19sbGNfc2F2ZV9hZGRfbGlua19pbmZvKHN0cnVjdCBzbWNfbGluayAqbGluayxcbi0tXG5uZXQvc21jL3NtY19sbGMuYy0xMDMwLS8qIGFzIGFuIFNNQyBjbGllbnQsIHByb2Nlc3MgYW4gYWRkIGxpbmsgcmVxdWVzdCAqL1xubmV0L3NtYy9zbWNfbGxjLmM6MTAzMTppbnQgc21jX2xsY19jbGlfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSlcbm5ldC9zbWMvc21jX2xsYy5jLTEwMzIte1xuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTExMTgtb3V0X3JlamVjdDpcbm5ldC9zbWMvc21jX2xsYy5jOjExMTk6XHRzbWNfbGxjX2NsaV9hZGRfbGlua19yZWplY3QocWVudHJ5KTtcbm5ldC9zbWMvc21jX2xsYy5jLTExMjAtb3V0OlxuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTExMjY9c3RhdGljIHZvaWQgc21jX2xsY19zZW5kX3JlcXVlc3RfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rKVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTExNjQtLyogYXMgYW4gU01DIGNsaWVudCwgaW52aXRlIHNlcnZlciB0byBzdGFydCB0aGUgYWRkX2xpbmsgcHJvY2Vzc2luZyAqL1xubmV0L3NtYy9zbWNfbGxjLmM6MTE2NTpzdGF0aWMgdm9pZCBzbWNfbGxjX2NsaV9hZGRfbGlua19pbnZpdGUoc3RydWN0IHNtY19saW5rICpsaW5rLFxubmV0L3NtYy9zbWNfbGxjLmMtMTE2Ni1cdFx0XHRcdFx0c3RydWN0IHNtY19sbGNfcWVudHJ5ICpxZW50cnkpXG4tLVxubmV0L3NtYy9zbWNfbGxjLmM9MTIxNz1zdGF0aWMgdm9pZCBzbWNfbGxjX3Byb2Nlc3NfY2xpX2FkZF9saW5rKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTEyMjQtXHRpZiAoc21jX2xsY19pc19sb2NhbF9hZGRfbGluayhcdTAwMjZxZW50cnktXHUwMDNlbXNnKSlcbm5ldC9zbWMvc21jX2xsYy5jOjEyMjU6XHRcdHNtY19sbGNfY2xpX2FkZF9saW5rX2ludml0ZShxZW50cnktXHUwMDNlbGluaywgcWVudHJ5KTtcbm5ldC9zbWMvc21jX2xsYy5jLTEyMjYtXHRlbHNlXG5uZXQvc21jL3NtY19sbGMuYzoxMjI3Olx0XHRzbWNfbGxjX2NsaV9hZGRfbGluayhxZW50cnktXHUwMDNlbGluaywgcWVudHJ5KTtcbm5ldC9zbWMvc21jX2xsYy5jLTEyMjgtXHR1cF93cml0ZShcdTAwMjZsZ3ItXHUwMDNlbGxjX2NvbmZfbXV0ZXgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDI1NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBGdW5jdGlvbiBTeW1ib2wgVmlzaWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb24gc3ltYm9scyBhbmQgaG93IHRoZXkmIzM5O3JlIHVzZWQuIEl0JiMzOTtzIGNsZWFyIHRoYXQgYm90aCBgc21jX2xsY19jbGlfYWRkX2xpbmtgIGFuZCBgc21jX2xsY19zcnZfYWRkX2xpbmtgIGFyZSBub24tc3RhdGljIOKAkyB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gVGhpcyBtZWFucyB0aGV5IGFyZSBsaWtlbHkgZW50cnkgcG9pbnRzIG9yIGV4cG9zZWQgaW50ZXJmYWNlcy4KClRoaXMgbmFycm93cyBkb3duIG15IGZvY3VzLiAgQmFzZWQgb24gdGhpcywgdGhlIHByaW1hcnkgY2FuZGlkYXRlcyBmb3Igc3ltYm9scyBvZiBpbnRlcmVzdCBhcmUgZ29pbmcgdG8gYmUgdGhvc2UgdGhhdCBhcmUgbm90IHN0YXRpYywgaW4gcGFydGljdWxhciwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6IGBzbWNfY29ubmVjdGAsIGBzbWNfbGlzdGVuYCwgYHNtY19wbmV0X2ZpbmRfcm9jZV9yZXNvdXJjZWAsIGBzbWNfcG5ldF9maW5kX2FsdF9yb2NlYCwgYHNtY19sbGNfY2xpX2FkZF9saW5rYCwgYW5kIGBzbWNfbGxjX3Nydl9hZGRfbGlua2AuIFRoZXNlIGFyZSB0aGUgb25lcyB3aGVyZSBnbG9iYWwgdmlzaWJpbGl0eSBpcyBleHBlY3RlZC4KCkJ1dCBob2xkIG9u4oCmIGBzbWNfaWJfcmVtb3ZlX2RldmAgaXMgKnN0YXRpYyosIGFuZCBpdCYjMzk7cyBhIGtleSBmdW5jdGlvbiB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkLCB3aGljaCBpcyBhIGJpdCBvZiBhIGN1cnZlYmFsbC4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBhIHJlZCBmbGFnLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhpcyBzdGF0aWMgZnVuY3Rpb24gaXMgaW1wb3J0YW50LiBDbGVhcmx5LCBpdCYjMzk7cyBub3QgYSBkaXJlY3QsIGV4dGVybmFsbHkgdmlzaWJsZSBlbnRyeSBwb2ludC4gU28sIEkgaGF2ZSB0byBzZWUgaWYgc29tZXRoaW5nIGNhbGxzIGl0IG9yIGlzIHJlbGF0ZWQgdG8gaXQuCgpBaGEhIGBzbWNfaWJfcmVtb3ZlX2RldmAgaXMgcmVnaXN0ZXJlZCBpbiBgc21jX2liX2NsaWVudGAuIFRoYXQmIzM5O3MgYSB2aXRhbCBjbHVlLiBOb3cgSSBuZWVkIHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGUgY2xpZW50IGxldmVsLiBJIHdhcyBjb25zaWRlcmluZyBgc21jX2liX2FkZF9kZXZgIGFuZCBgc21jX2liX3JlbW92ZV9kZXZgIGRpcmVjdGx5LCBidXQgdGhleSBhcmUgYm90aCBzdGF0aWMuIFdoYXQgYWJvdXQgYHNtY19pYl9yZWdpc3Rlcl9jbGllbnRgPyBUaGF0IG9uZSBpcyBsaWtlbHkgbW9yZSByZWxldmFudC4gSSBzaG91bGQgZGVsdmUgaW50byB0aGF0IG9uZSBhbmQgc2VlIGlmIHRoZXJlIGlzIHNvbWV0aGluZyBpbnRlcmVzdGluZyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX2liX3JlZ2lzdGVyX2NsaWVudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2liLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfaWIuYz0xMDE1PXN0YXRpYyBzdHJ1Y3QgaWJfY2xpZW50IHNtY19pYl9jbGllbnQgPSB7XG4tLVxubmV0L3NtYy9zbWNfaWIuYy0xMDIwLVxubmV0L3NtYy9zbWNfaWIuYzoxMDIxOmludCBfX2luaXQgc21jX2liX3JlZ2lzdGVyX2NsaWVudCh2b2lkKVxubmV0L3NtYy9zbWNfaWIuYy0xMDIyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwNDkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBBc3Nlc3NtZW50IG9mIHRoZSBTTUMgSW5pdGlhbGl6YXRpb24gUHJvY2VzcyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGBzbWNfaWJfcmVnaXN0ZXJfY2xpZW50YCBpcyBlc3NlbnRpYWxseSB0aGUgaW5pdGlhbGl6YXRpb24gc3RhZ2UsIGZ1bmN0aW9uaW5nIGxpa2UgYW4gYF9faW5pdF9fYCBtZXRob2QuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHJlbWVtYmVyLgoKTXkgZm9jdXMgc2hvdWxkIGJlIG9uIGBzbWNfY29ubmVjdGAsIGBzbWNfbGlzdGVuYCwgYHNtY19sbGNfY2xpX2FkZF9saW5rYCwgYW5kIGBzbWNfbGxjX3Nydl9hZGRfbGlua2AuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGZvciBoYW5kbGluZyB0aGUgb3ZlcmFsbCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGxpbmsgYWRkaXRpb24gcHJvY2VkdXJlcy4gVGhleSYjMzk7cmUgZGVmaW5pdGVseSB0aGUgcGxhY2VzIHdoZXJlIGBzbWNfaW5pdF9pbmZvYCBpcyBiZWluZyBhbGxvY2F0ZWQgYW5kIHN1YnNlcXVlbnRseSB1dGlsaXplZCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGVudGlyZSBzeXN0ZW0gb3BlcmF0ZXMuCgpMZXQmIzM5O3MgZGlnIGEgYml0IGRlZXBlciBpbnRvIGBzbWNfbGxjX3Nydl9hZGRfbGlua2Agc3BlY2lmaWNhbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhcnQgYmV0dGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfbGxjX3Nydl9hZGRfbGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2xsYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2xsYy5jPTEzOTc9c3RhdGljIHZvaWQgc21jX2xsY19zZW5kX3JlcV9hZGRfbGlua19yZXNwb25zZShzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSlcbi0tXG5uZXQvc21jL3NtY19sbGMuYy0xNDA1LVxubmV0L3NtYy9zbWNfbGxjLmM6MTQwNjppbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLFxubmV0L3NtYy9zbWNfbGxjLmMtMTQwNy1cdFx0XHQgc3RydWN0IHNtY19sbGNfcWVudHJ5ICpyZXFfcWVudHJ5KVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTE1Mjk9c3RhdGljIHZvaWQgc21jX2xsY19wcm9jZXNzX3Nydl9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncilcbi0tXG5uZXQvc21jL3NtY19sbGMuYy0xNTM3LVx0ZG93bl93cml0ZShcdTAwMjZsZ3ItXHUwMDNlbGxjX2NvbmZfbXV0ZXgpO1xubmV0L3NtYy9zbWNfbGxjLmM6MTUzODpcdHJjID0gc21jX2xsY19zcnZfYWRkX2xpbmsobGluaywgcWVudHJ5KTtcbm5ldC9zbWMvc21jX2xsYy5jLTE1MzktXHRpZiAoIXJjIFx1MDAyNlx1MDAyNiBsZ3ItXHUwMDNldHlwZSA9PSBTTUNfTEdSX1NZTU1FVFJJQykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTcwNwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqTm9uLVN0YXRpYyBGdW5jdGlvbiBDb25maXJtYXRpb24gJmFtcDsgTmV4dCBTdGVwcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgc21jX2xsY19zcnZfYWRkX2xpbmtgIGlzICpkZWZpbml0ZWx5KiBub24tc3RhdGljLiBOb3csIEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBlbHNld2hlcmUgaW4gdGhlIGNvZGUuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgYHNtY19wbmV0X2ZpbmRfcm9jZV9yZXNvdXJjZWAgYW5kIGBzbWNfcG5ldF9maW5kX2FsdF9yb2NlYCBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGludGVyYWN0LCBhbmQgd2hldGhlciB0aGV5IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSB1c2Ugb2YgYSBub24tc3RhdGljIGZ1bmN0aW9uIGhlcmUuIEtub3dpbmcgdGhlIGNvbm5lY3Rpb25zIGJldHdlZW4gdGhlc2UgaXMga2V5IGZvciBkZWJ1Z2dpbmcgb3IgdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEzOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtY19wbmV0X2ZpbmRfcm9jZV9yZXNvdXJjZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX3BuZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19wbmV0LmM9MTEwNT1zdGF0aWMgdm9pZCBzbWNfcG5ldF9maW5kX2lzbV9ieV9wbmV0aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jLTExMzQtICovXG5uZXQvc21jL3NtY19wbmV0LmM6MTEzNTp2b2lkIHNtY19wbmV0X2ZpbmRfcm9jZV9yZXNvdXJjZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXG5uZXQvc21jL3NtY19wbmV0LmMtMTEzNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTAwCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYHNtY19wbmV0X2ZpbmRfcm9jZV9yZXNvdXJjZWAgYW5kIEl0cyBJbXBsaWNhdGlvbnMqKgoKQWxyaWdodCwgc28gdGhlIGNsdWUgaXMgdGhhdCBgc21jX3BuZXRfZmluZF9yb2NlX3Jlc291cmNlYCBpc24mIzM5O3QgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlZCBteSBpbnRlcmVzdC4gTm9uLXN0YXRpYyBpbXBsaWVzIGl0JiMzOTtzIGVpdGhlciBwYXJ0IG9mIHNvbWUgYnJvYWRlciBBUEkgZXhwb3NlZCBmb3Igb3RoZXIgY29tcG9uZW50cyBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIHBvdGVudGlhbGx5IGNhbGxhYmxlIGZyb20gb3V0c2lkZSBpdHMgaW1tZWRpYXRlIHNjb3BlLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyB0byBub3RlLgoKTm93LCB3aGVyZSBkb2VzIHRoYXQgbGVhZD8gV2VsbCwgYmFzZWQgb24gdGhlIGNvbnRleHQgSSB3b3VsZCB0aGVuIHdhbnQgdG8gcGl2b3QgYW5kIGV4cGxvcmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBzbWNfcG5ldF9maW5kX2FsdF9yb2NlYC4gQSBmdW5jdGlvbiB3aXRoIGEgbmFtZSBsaWtlIHRoYXQgc3VnZ2VzdHMgYSBjb21wbGVtZW50YXJ5IG9yIHJlbGF0ZWQgZnVuY3Rpb24uIFBlcmhhcHMgaXQmIzM5O3MgY2FsbGVkIGludGVybmFsbHkgYnkgdGhlIGZpcnN0IG9uZSwgb3IgbWF5YmUgaXQgcGVyZm9ybXMgYW4gYWx0ZXJuYXRpdmUgc2VhcmNoIHN0cmF0ZWd5IHdoZW4gdGhlIGluaXRpYWwgZnVuY3Rpb24gZmFpbHMuIEtub3dpbmcgaXRzIHJlbGF0aW9uc2hpcCB3b3VsZCBiZSB1c2VmdWwuIEkmIzM5O2Qgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgb2YgdGhpcyBmdW5jdGlvbiBhcyB3ZWxsLCB3aGljaCB3aWxsIHRlbGwgbWUgaXRzIHB1cnBvc2UuIElzIHRoZSBmaXJzdCBmdW5jdGlvbiBqdXN0IGEgd3JhcHBlciBmb3IgaXQsIG9yIGlzIHRoZSByZWxhdGlvbnNoaXAgbW9yZSBjb21wbGV4PyBLbm93aW5nIHRoZSBpbnRlcmZhY2Ugd291bGQgYmUgdmVyeSBoZWxwZnVsLiBXaGF0JiMzOTtzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlIGZvciB0aGUgdHdvIGZ1bmN0aW9ucz8gSXMgdGhlcmUgYSBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmUsIGEgY29tbW9uIHNldCBvZiByZXNvdXJjZXM/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRyb2wgZmxvdyBiZXR3ZWVuIHRoZXNlIHR3byBpcyBjcml0aWNhbCBmb3IgYW55IGRlYnVnZ2luZyBvciBvcHRpbWl6YXRpb24gdGhhdCBtYXkgY29tZSBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX3BuZXRfZmluZF9hbHRfcm9jZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX3BuZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19wbmV0LmM9MTAwNj1zdGF0aWMgdm9pZCBfc21jX3BuZXRfZmluZF9yb2NlX2J5X3BuZXRpZCh1OCAqcG5ldF9pZCxcbi0tXG5uZXQvc21jL3NtY19wbmV0LmMtMTAzNC0vKiBmaW5kIGFsdGVybmF0ZSByb2NlIGRldmljZSB3aXRoIHNhbWUgcG5ldF9pZCwgdmxhbl9pZCBhbmQgbmV0IG5hbWVzcGFjZSAqL1xubmV0L3NtYy9zbWNfcG5ldC5jOjEwMzU6dm9pZCBzbWNfcG5ldF9maW5kX2FsdF9yb2NlKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxubmV0L3NtYy9zbWNfcG5ldC5jLTEwMzYtXHRcdFx0ICAgIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjYyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgVGhpbmtpbmcqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYHNtY19wbmV0X2ZpbmRfYWx0X3JvY2VgIGlzLCBhcyBJIHN1c3BlY3RlZCwgKm5vdCogZGVjbGFyZWQgc3RhdGljLiBUaGF0JiMzOTtzIGdvb2QgdG8gaGF2ZSBuYWlsZWQgZG93bi4KCk5vdywgbXkgbWluZCBpcyBjaXJjbGluZyB0aGUgcmVsZXZhbnQgc3ltYm9scy4gSSYjMzk7bSBmb2N1c2luZyBvbjogYHNtY19jb25uZWN0YCwgYHNtY19saXN0ZW5gLCBgc21jX3BuZXRfZmluZF9yb2NlX3Jlc291cmNlYCwgYHNtY19wbmV0X2ZpbmRfYWx0X3JvY2VgLCBgc21jX2xsY19jbGlfYWRkX2xpbmtgLCBhbmQgYHNtY19sbGNfc3J2X2FkZF9saW5rYC4gVGhlc2UgYXJlIHRoZSBrZXkgcGllY2VzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIuCgpIb2xkIG9uIGEgc2Vjb25kLi4uIEkgbmVlZCB0byBxdWlja2x5IHJlLWV4YW1pbmUgdGhlIGNvbmZpZ3VyYXRpb24uIEkgd2FzIHRoaW5raW5nIG9mIGBTTUNgLCBgSU5GSU5JQkFORGAsIGFuZCBgRElCU2AuLi4gYnV0IEkgc2hvdWxkIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgYERJQlNgIGlzIHJlYWxseSBpbiB0aGUgbWFpbmxpbmUga2VybmVsIGFuZCB0aGF0IEkgaGF2ZW4mIzM5O3QgbWl4ZWQgaXQgdXAgd2l0aCBzb21ldGhpbmcgZWxzZS4gSXQmIzM5O3MgZWFzeSB0byBtaXNpbnRlcnByZXQgdGhpbmdzIHdoZW4geW91JiMzOTtyZSBkZWVwIGluIHRoZSB3ZWVkcy4gVGltZSB0byBkb3VibGUtY2hlY2sgYG5ldC9zbWMvS2NvbmZpZ2AgYWdhaW4gdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTM6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWc9Mj1jb25maWcgU01DXG5uZXQvc21jL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XCYjMzQ7XG5uZXQvc21jL0tjb25maWc6NDpcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU1xubmV0L3NtYy9LY29uZmlnLTUtXHRoZWxwXG4tLVxubmV0L3NtYy9LY29uZmlnPTE0PWNvbmZpZyBTTUNfRElBR1xubmV0L3NtYy9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7U01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbm5ldC9zbWMvS2NvbmZpZzoxNjpcdGRlcGVuZHMgb24gU01DXG5uZXQvc21jL0tjb25maWctMTctXHRoZWxwXG4tLVxubmV0L3NtYy9LY29uZmlnPTIzPWNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcbm5ldC9zbWMvS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1wmIzM0O1xubmV0L3NtYy9LY29uZmlnOjI1Olx0ZGVwZW5kcyBvbiBTTUMgXHUwMDI2XHUwMDI2IEJQRl9KSVQgXHUwMDI2XHUwMDI2IEJQRl9TWVNDQUxMXG5uZXQvc21jL0tjb25maWctMjYtXHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTM6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjczNTEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCYjMzk7cyBSZXF1aXJlbWVudHMqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCB0aGlzIHBhdGNoJiMzOTtzIHN1Y2Nlc3MgaGluZ2VzIG9uIGEgZmV3IGtleSBjb21wb25lbnRzLiBJIHNlZSBpdCYjMzk7cyBkZXBlbmRlbnQgb24gYElORVRgLCBgSU5GSU5JQkFORGAsIGFuZCwgY3J1Y2lhbGx5LCBgRElCU2AuIFNvLCB0aGUgcHJlc2VuY2Ugb2YgYERJQlNgIGlzIG5vbi1uZWdvdGlhYmxlLiBOb3csIGEgcXVpY2sgY2hlY2vigKYgaXMgYERJQlNgIGEgY29uZmlndXJhdGlvbiBvcHRpb24/IFllcCwgY29uZmlybWVkLiBJIGNhbiBzZWUgaXQgZGVmaW5lZCBpbiBgZHJpdmVycy9kaWJzL0tjb25maWdgIGFzIGBjb25maWcgRElCU2AuIEdvb2QuIFRoYXQgY29uZmlybXMgdGhhdCBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGFic29sdXRlbHkgaW5jbHVkZSBgU01DYCwgYElORklOSUJBTkRgLCBhbmQgYERJQlNgLgoKTGV0JiMzOTtzIHJlY2FwIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZXNlIHJlcXVpcmVtZW50cy4gVGhpcyBwYXRjaCBhaW1zIHRvIHBhdGNoIGEgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSAob3Igc2ltaWxhciBpc3N1ZSkgbHVya2luZyB3aXRoaW4gdGhlIFNNQyBzdWJzeXN0ZW0uIEl0JiMzOTtzIHRyaWdnZXJlZCB3aGVuIGFuIElCIGRldmljZSBpcyByZW1vdmVkIG1pZC1jb25uZWN0aW9uIHNldHVwLiBUaGUgZml4PyBSZWZlcmVuY2UgY291bnRpbmcgZm9yIGBzbWNfaWJfZGV2aWNlYCBkdXJpbmcgdGhlIGNyaXRpY2FsIGBzbWNfaW5pdF9pbmZvYCBwaGFzZS4gVGhlIGNvZGUgdG91Y2hlcyBrZXkgY29ubmVjdGlvbiBzZXR1cCBmdW5jdGlvbnM6IGBzbWNfY29ubmVjdGAsIGBzbWNfbGlzdGVuYCwgYW5kIGFsc28gbGluayBhZGRpdGlvbiBwYXRocyBsaWtlIGBzbWNfbGxjX2NsaV9hZGRfbGlua2AgYW5kIGBzbWNfbGxjX3Nydl9hZGRfbGlua2AuIFRoZXNlIHBhdGhzIGFyZSBhbGwgYWNjZXNzaWJsZSBhbmQgcG90ZW50aWFsbHkgZnV6emFibGUgdGhyb3VnaCBBRl9TTUMgc29ja2V0cy4KClRoaXMgaXMgd29ydGggZnV6emluZy4gSSBoYXZlIGEgbGlzdCBvZiB0YXJnZXRzIGZvciBmdXp6aW5nOiBgc21jX2Nvbm5lY3RgLCBgc21jX2xpc3RlbmAsIGBzbWNfcG5ldF9maW5kX3JvY2VfcmVzb3VyY2VgLCBgc21jX3BuZXRfZmluZF9hbHRfcm9jZWAsIGBzbWNfbGxjX2NsaV9hZGRfbGlua2AsIGFuZCBgc21jX2xsY19zcnZfYWRkX2xpbmtgLiBUaGVzZSBhcmUgYWxsIHByaW1lIGNhbmRpZGF0ZXMuCgpOb3csIEkgc2hvdWxkIGNoZWNrIGlmIGBESUJTYCBoYXMgYW55IGRlcGVuZGVuY2llcyBvZiBpdHMgb3duLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzL0tjb25maWc9MTQ9Y29uZmlnIERJQlNfTE9cbmRyaXZlcnMvZGlicy9LY29uZmlnLTE1LVx0Ym9vbCBcJiMzNDtJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcJiMzNDtcbmRyaXZlcnMvZGlicy9LY29uZmlnOjE2Olx0ZGVwZW5kcyBvbiBESUJTXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xNy1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODE2OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRlcGVuZGVuY3kgQW5hbHlzaXMgZm9yIGEgU3BlY2lmaWMgTW9kdWxlKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGlzIGBESUJTYCBtb2R1bGUsIGFuZCBmcm9tIHdoYXQgSSBjYW4gcmVjYWxsLCBpdCYjMzk7cyBwcmV0dHkgc3RhbmRhbG9uZS4gSSBkb24mIzM5O3Qgc2VlIGFueSBpbW1lZGlhdGVseSBvYnZpb3VzIGV4dGVybmFsIGRlcGVuZGVuY2llcyBiYWtlZCBpbnRvIGl0cyBkZXNpZ24uIFRoYXQmIzM5O3MgZ29vZCwgc2ltcGxpZmllcyB0aGluZ3MuIE5vdywgbGV0JiMzOTtzIHBpdm90IHRvIHRoZSBgSU5GSU5JQkFORGAgY29tcG9uZW50LiBJJiMzOTt2ZSB3b3JrZWQgd2l0aCBpdCBpbiB0aGUgcGFzdCwgYW5kIGl0JiMzOTtzIG5vdG9yaW91c2x54oCmIGludGVyY29ubmVjdGVkLiBJIHJlYWxseSBzaG91bGQgdmVyaWZ5IHRoYXQgaXQgZG9lc24mIzM5O3QgcmVseSBvbiBhbnl0aGluZyBlbHNlLCBlc3BlY2lhbGx5IGFueXRoaW5nIHBvdGVudGlhbGx5IG9ic2N1cmUgdGhhdCBjb3VsZCBjYXVzZSBpc3N1ZXMuIE5lZWQgdG8gY2hlY2sgaXRzIGRlcGVuZGVuY2llcyB0aG9yb3VnaGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc9Mj1tZW51Y29uZmlnIElORklOSUJBTkRcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtJbmZpbmlCYW5kIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjQ6XHRkZXBlbmRzIG9uIEhBU19JT01FTSBcdTAwMjZcdTAwMjYgSEFTX0RNQVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NTpcdGRlcGVuZHMgb24gTkVUXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo2Olx0ZGVwZW5kcyBvbiBJTkVUXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo3Olx0ZGVwZW5kcyBvbiAhQUxQSEFcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTgtXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZz0xOD1jb25maWcgSU5GSU5JQkFORF9VU0VSX01BRFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMTktXHR0cmlzdGF0ZSBcJiMzNDtJbmZpbmlCYW5kIHVzZXJzcGFjZSBNQUQgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6MjA6XHRkZXBlbmRzIG9uIElORklOSUJBTkRcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTIxLVx0aGVscFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTI4PWNvbmZpZyBJTkZJTklCQU5EX1VTRVJfQUNDRVNTXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgdXNlcnNwYWNlIGFjY2VzcyAodmVyYnMgYW5kIENNKVwmIzM0O1xuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6MzA6XHRkZXBlbmRzIG9uIE1NVVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMzEtXHRoZWxwXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc9NDQ9Y29uZmlnIElORklOSUJBTkRfVVNFUl9NRU1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTQ1LVx0Ym9vbFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NDY6XHRkZXBlbmRzIG9uIElORklOSUJBTkRfVVNFUl9BQ0NFU1MgIT0gblxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NDc6XHRkZXBlbmRzIG9uIE1NVVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDgtXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZz01MT1jb25maWcgSU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy01Mi1cdGJvb2wgXCYjMzQ7SW5maW5pQmFuZCBvbi1kZW1hbmQgcGFnaW5nIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjUzOlx0ZGVwZW5kcyBvbiBJTkZJTklCQU5EX1VTRVJfTUVNXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy01NC1cdHNlbGVjdCBNTVVfTk9USUZJRVJcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZz02ND1jb25maWcgSU5GSU5JQkFORF9BRERSX1RSQU5TXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy02NS1cdGJvb2wgXCYjMzQ7UkRNQS9DTVwmIzM0O1xuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NjY6XHRkZXBlbmRzIG9uIElORklOSUJBTkRcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTY3LVx0ZGVmYXVsdCB5XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc9NzI9Y29uZmlnIElORklOSUJBTkRfQUREUl9UUkFOU19DT05GSUdGU1xuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNzMtXHRib29sXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo3NDpcdGRlcGVuZHMgb24gSU5GSU5JQkFORF9BRERSX1RSQU5TIFx1MDAyNlx1MDAyNiBDT05GSUdGU19GUyBcdTAwMjZcdTAwMjYgIShJTkZJTklCQU5EPXkgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTPW0pXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03NS1cdGRlZmF1bHQgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTA5MQoJCQkJCQkJb3V0cHV0OiAyMjcKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgYW5kIFNldHRpbmcgUmVzdWx0cyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYElORklOSUJBTkRgLiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyBpdCBoaW5nZXMgb24gYEhBU19JT01FTWAsIGBIQVNfRE1BYCwgYE5FVGAsIGFuZCBgSU5FVGAgYmVpbmcgZW5hYmxlZCwgYnV0IGRlZmluaXRlbHkgKm5vdCogb24gYEFMUEhBYC4gVGhvc2UgYXJlIGFsbCBmYWlybHkgc3RhbmRhcmQgcHJlcmVxdWlzaXRlcywgbm90aGluZyB0b28gb3V0IG9mIHRoZSBvcmRpbmFyeSB0aGVyZS4gTWFrZXMgc2Vuc2UuCgpOb3csIG15IGZvY3VzIGlzIG9uIGBTTUNgLCBgSU5GSU5JQkFORGAsIGFuZCBgRElCU2DigJR0aG9zZSBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIEkmIzM5O20gd29ya2luZyB3aXRoIGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gYmVzdCAmIzM0O3NldC1yZXN1bHRzJiMzNDsgd2hpY2ggSSBhc3N1bWUgaXMgd2hhdCBJIGFtIGRvaW5nIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEzOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTTUMmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORCYjMzQ7LAogICAgJiMzNDtESUJTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c21jX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7c21jX2xpc3RlbiYjMzQ7LAogICAgJiMzNDtzbWNfcG5ldF9maW5kX3JvY2VfcmVzb3VyY2UmIzM0OywKICAgICYjMzQ7c21jX3BuZXRfZmluZF9hbHRfcm9jZSYjMzQ7LAogICAgJiMzNDtzbWNfbGxjX2NsaV9hZGRfbGluayYjMzQ7LAogICAgJiMzNDtzbWNfbGxjX3Nydl9hZGRfbGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBkZXZpY2UgcmVtb3ZhbCByYWNlIGNvbmRpdGlvbiBpbiB0aGUgU01DIChTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zKSBzdWJzeXN0ZW0gYnkgaW50cm9kdWNpbmcgcmVmZXJlbmNlIGNvdW50aW5nIGZvciBgc21jX2liX2RldmljZWAgZHVyaW5nIGNvbm5lY3Rpb24gaW5pdGlhbGl6YXRpb24uIFRoZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIGNvbm5lY3Rpb24gc2V0dXAgcGF0aHMgKGBzbWNfY29ubmVjdGAsIGBzbWNfbGlzdGVuYCkgYW5kIGxpbmsgYWRkaXRpb24gcGF0aHMgKGBzbWNfbGxjX2NsaV9hZGRfbGlua2AsIGBzbWNfbGxjX3Nydl9hZGRfbGlua2ApLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBBRl9TTUMgc29ja2V0cyBhbmQgY2FuIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7RElCUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY19jb25uZWN0JiMzNDssCiAgICAmIzM0O3NtY19saXN0ZW4mIzM0OywKICAgICYjMzQ7c21jX3BuZXRfZmluZF9yb2NlX3Jlc291cmNlJiMzNDssCiAgICAmIzM0O3NtY19wbmV0X2ZpbmRfYWx0X3JvY2UmIzM0OywKICAgICYjMzQ7c21jX2xsY19jbGlfYWRkX2xpbmsmIzM0OywKICAgICYjMzQ7c21jX2xsY19zcnZfYWRkX2xpbmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgZGV2aWNlIHJlbW92YWwgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgc3Vic3lzdGVtIGJ5IGludHJvZHVjaW5nIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgYHNtY19pYl9kZXZpY2VgIGR1cmluZyBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uLiBUaGUgY2hhbmdlcyBtb2RpZnkgY29yZSBjb25uZWN0aW9uIHNldHVwIHBhdGhzIChgc21jX2Nvbm5lY3RgLCBgc21jX2xpc3RlbmApIGFuZCBsaW5rIGFkZGl0aW9uIHBhdGhzIChgc21jX2xsY19jbGlfYWRkX2xpbmtgLCBgc21jX2xsY19zcnZfYWRkX2xpbmtgKS4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQUZfU01DIHNvY2tldHMgYW5kIGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMjo1OTo1OS44MzM3MDQxMTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQxNDI1MDQ5NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJESUJTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic21jX2Nvbm5lY3RcIixcbiAgICBcInNtY19saXN0ZW5cIixcbiAgICBcInNtY19wbmV0X2ZpbmRfcm9jZV9yZXNvdXJjZVwiLFxuICAgIFwic21jX3BuZXRfZmluZF9hbHRfcm9jZVwiLFxuICAgIFwic21jX2xsY19jbGlfYWRkX2xpbmtcIixcbiAgICBcInNtY19sbGNfc3J2X2FkZF9saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgZGV2aWNlIHJlbW92YWwgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgc3Vic3lzdGVtIGJ5IGludHJvZHVjaW5nIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgYHNtY19pYl9kZXZpY2VgIGR1cmluZyBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uLiBUaGUgY2hhbmdlcyBtb2RpZnkgY29yZSBjb25uZWN0aW9uIHNldHVwIHBhdGhzIChgc21jX2Nvbm5lY3RgLCBgc21jX2xpc3RlbmApIGFuZCBsaW5rIGFkZGl0aW9uIHBhdGhzIChgc21jX2xsY19jbGlfYWRkX2xpbmtgLCBgc21jX2xsY19zcnZfYWRkX2xpbmtgKS4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQUZfU01DIHNvY2tldHMgYW5kIGNhbiBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjU5OjU5LjgzMzcxMDMyNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEyMjgxMTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2FlNWVmZDkxYzVjM2JhZjdhZTBlOGE4NzZhMjRiY2ZhZjAxMmE3Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyA0IDEyOjU5OjU5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9zbWMvYWZfc21jLmMgYi9uZXQvc21jL2FmX3NtYy5jXFxuaW5kZXggYjVkYjY5MDczZTIwZi4uMTYwMjcxNDY0MzA1YyAxMDA2NDRcXG4tLS0gYS9uZXQvc21jL2FmX3NtYy5jXFxuKysrIGIvbmV0L3NtYy9hZl9zbWMuY1xcbkBAIC0xMjI1LDcgKzEyMjUsNyBAQCB2b2lkIHNtY19maWxsX2dpZF9saXN0KHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxcbiBcXHQgICAgICAgU01DX0dJRF9TSVpFKTtcXG4gXFxuIG91dDpcXG4tXFx0a2ZyZWUoYWx0X2luaSk7XFxuK1xcdHNtY19pbml0X2luZm9fZnJlZShhbHRfaW5pKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBzbWNfY29ubmVjdF9yZG1hX3YyX3ByZXBhcmUoc3RydWN0IHNtY19zb2NrICpzbWMsXFxuQEAgLTE1OTYsMTQgKzE1OTYsMTQgQEAgc3RhdGljIGludCBfX3NtY19jb25uZWN0KHN0cnVjdCBzbWNfc29jayAqc21jKVxcbiBcXHRTTUNfU1RBVF9DTE5UX1NVQ0NfSU5DKHNvY2tfbmV0KHNtYy1cXHUwMDNlY2xjc29jay1cXHUwMDNlc2spLCBhY2xjKTtcXG4gXFx0c21jX2Nvbm5lY3RfaXNtX3ZsYW5fY2xlYW51cChpbmkpO1xcbiBcXHRrZnJlZShidWYpO1xcbi1cXHRrZnJlZShpbmkpO1xcbitcXHRzbWNfaW5pdF9pbmZvX2ZyZWUoaW5pKTtcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiB2bGFuX2NsZWFudXA6XFxuIFxcdHNtY19jb25uZWN0X2lzbV92bGFuX2NsZWFudXAoaW5pKTtcXG4gXFx0a2ZyZWUoYnVmKTtcXG4gZmFsbGJhY2s6XFxuLVxcdGtmcmVlKGluaSk7XFxuK1xcdHNtY19pbml0X2luZm9fZnJlZShpbmkpO1xcbiBcXHRyZXR1cm4gc21jX2Nvbm5lY3RfZGVjbGluZV9mYWxsYmFjayhzbWMsIHJjLCB2ZXJzaW9uKTtcXG4gfVxcbiBcXG5AQCAtMjM0Myw3ICsyMzQzLDEwIEBAIHN0YXRpYyB2b2lkIHNtY19maW5kX3JkbWFfdjJfZGV2aWNlX3NlcnYoc3RydWN0IHNtY19zb2NrICpuZXdfc21jLFxcbiBcXG4gbm90X2ZvdW5kOlxcbiBcXHRpbmktXFx1MDAzZXNtY3JfdmVyc2lvbiBcXHUwMDI2PSB+U01DX1YyO1xcbitcXHRpZiAoaW5pLVxcdTAwM2VzbWNydjIuaWJfZGV2X3YyX3JlZilcXG4rXFx0XFx0c21jX2liZGV2X2luaXRfcHV0KGluaS1cXHUwMDNlc21jcnYyLmliX2Rldl92Mik7XFxuIFxcdGluaS1cXHUwMDNlc21jcnYyLmliX2Rldl92MiA9IE5VTEw7XFxuK1xcdGluaS1cXHUwMDNlc21jcnYyLmliX2Rldl92Ml9yZWYgPSBmYWxzZTtcXG4gXFx0aW5pLVxcdTAwM2VjaGVja19zbWNydjIgPSBmYWxzZTtcXG4gfVxcbiBcXG5AQCAtMjU4Nyw3ICsyNTkwLDcgQEAgc3RhdGljIHZvaWQgc21jX2xpc3Rlbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0c21jX2xpc3Rlbl9kZWNsaW5lKG5ld19zbWMsIHJjLCBpbmkgPyBpbmktXFx1MDAzZWZpcnN0X2NvbnRhY3RfbG9jYWwgOiAwLFxcbiBcXHRcXHRcXHQgICBwcm9wb3NhbF92ZXJzaW9uKTtcXG4gb3V0X2ZyZWU6XFxuLVxcdGtmcmVlKGluaSk7XFxuK1xcdHNtY19pbml0X2luZm9fZnJlZShpbmkpO1xcbiBcXHRrZnJlZShidWYpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmMgYi9uZXQvc21jL3NtY19jb3JlLmNcXG5pbmRleCBjZjZiNjIwZmVmMDVmLi5lNTlmMzI3ZjI5NGMyIDEwMDY0NFxcbi0tLSBhL25ldC9zbWMvc21jX2NvcmUuY1xcbisrKyBiL25ldC9zbWMvc21jX2NvcmUuY1xcbkBAIC01NSw2ICs1NSwxNyBAQCBzdGF0aWMgdm9pZCBfX3NtY19sZ3JfdGVybWluYXRlKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLCBib29sIHNvZnQpO1xcbiBcXG4gc3RhdGljIHZvaWQgc21jX2xpbmtfZG93bl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuIFxcbit2b2lkIHNtY19pbml0X2luZm9fZnJlZShzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxcbit7XFxuK1xcdGlmICghaW5pKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGlmIChpbmktXFx1MDAzZWliX2Rldl9yZWYpXFxuK1xcdFxcdHNtY19pYmRldl9pbml0X3B1dChpbmktXFx1MDAzZWliX2Rldik7XFxuK1xcdGlmIChpbmktXFx1MDAzZXNtY3J2Mi5pYl9kZXZfdjJfcmVmKVxcbitcXHRcXHRzbWNfaWJkZXZfaW5pdF9wdXQoaW5pLVxcdTAwM2VzbWNydjIuaWJfZGV2X3YyKTtcXG4rXFx0a2ZyZWUoaW5pKTtcXG4rfVxcbitcXG4gLyogcmV0dXJuIGhlYWQgb2YgbGluayBncm91cCBsaXN0IGFuZCBpdHMgbG9jayBmb3IgYSBnaXZlbiBsaW5rIGdyb3VwICovXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfaGVhZCAqc21jX2xncl9saXN0X2hlYWQoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgc3BpbmxvY2tfdCAqKmxncl9sb2NrKVxcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmggYi9uZXQvc21jL3NtY19jb3JlLmhcXG5pbmRleCA1YzE4ZjA4YTRjOGE1Li4zODVmMTZjYzUzNjhlIDEwMDY0NFxcbi0tLSBhL25ldC9zbWMvc21jX2NvcmUuaFxcbisrKyBiL25ldC9zbWMvc21jX2NvcmUuaFxcbkBAIC00MDMsNiArNDAzLDcgQEAgc3RydWN0IHNtY19pbml0X2luZm9fc21jcnYyIHtcXG4gXFxuIFxcdC8qIE91dHB1dCBmaWVsZHMgd2hlbiBzYWRkciBpcyBzZXQgKi9cXG4gXFx0c3RydWN0IHNtY19pYl9kZXZpY2VcXHQqaWJfZGV2X3YyO1xcbitcXHRib29sXFx0XFx0XFx0aWJfZGV2X3YyX3JlZjtcXG4gXFx0dThcXHRcXHRcXHRpYl9wb3J0X3YyO1xcbiBcXHR1OFxcdFxcdFxcdGliX2dpZF92MltTTUNfR0lEX1NJWkVdO1xcbiBcXG5AQCAtNDM4LDYgKzQzOSw3IEBAIHN0cnVjdCBzbWNfaW5pdF9pbmZvIHtcXG4gXFx0dThcXHRcXHRcXHRwZWVyX21hY1tFVEhfQUxFTl07XFxuIFxcdHU4XFx0XFx0XFx0cGVlcl9zeXN0ZW1pZFtTTUNfU1lTVEVNSURfTEVOXTtcXG4gXFx0c3RydWN0IHNtY19pYl9kZXZpY2VcXHQqaWJfZGV2O1xcbitcXHRib29sXFx0XFx0XFx0aWJfZGV2X3JlZjtcXG4gXFx0dThcXHRcXHRcXHRpYl9naWRbU01DX0dJRF9TSVpFXTtcXG4gXFx0dThcXHRcXHRcXHRpYl9wb3J0O1xcbiBcXHR1MzJcXHRcXHRcXHRpYl9jbGNxcG47XFxuQEAgLTU5NCw2ICs1OTYsNyBAQCB2b2lkIHNtY19ydG9rZW5fc2V0MihzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciwgaW50IHJ0b2tfaWR4LCBpbnQgbGlua19pZCxcXG4gdm9pZCBzbWNfc25kYnVmX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xcbiB2b2lkIHNtY19ybWJfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubik7XFxuIGludCBzbWNfdmxhbl9ieV90Y3BzayhzdHJ1Y3Qgc29ja2V0ICpjbGNzb2NrLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcXG4rdm9pZCBzbWNfaW5pdF9pbmZvX2ZyZWUoc3RydWN0IHNtY19pbml0X2luZm8gKmluaSk7XFxuIFxcbiB2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcXG4gaW50IHNtY19jb25uX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSk7XFxuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2liLmMgYi9uZXQvc21jL3NtY19pYi5jXFxuaW5kZXggOWJiNDk1NzA3NDQ1ZS4uMDFjOWI1YzYyZGY3NiAxMDA2NDRcXG4tLS0gYS9uZXQvc21jL3NtY19pYi5jXFxuKysrIGIvbmV0L3NtYy9zbWNfaWIuY1xcbkBAIC05NTAsNiArOTUwLDggQEAgc3RhdGljIGludCBzbWNfaWJfYWRkX2RldihzdHJ1Y3QgaWJfZGV2aWNlICppYmRldilcXG4gXFxuIFxcdHNtY2liZGV2LVxcdTAwM2VpYmRldiA9IGliZGV2O1xcbiBcXHRJTklUX1dPUksoXFx1MDAyNnNtY2liZGV2LVxcdTAwM2Vwb3J0X2V2ZW50X3dvcmssIHNtY19pYl9wb3J0X2V2ZW50X3dvcmspO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZzbWNpYmRldi1cXHUwMDNlaW5pdF9jbnQsIDApO1xcbitcXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZzbWNpYmRldi1cXHUwMDNlaW5pdF93YWl0KTtcXG4gXFx0YXRvbWljX3NldChcXHUwMDI2c21jaWJkZXYtXFx1MDAzZWxua19jbnQsIDApO1xcbiBcXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZzbWNpYmRldi1cXHUwMDNlbG5rc19kZWxldGVkKTtcXG4gXFx0bXV0ZXhfaW5pdChcXHUwMDI2c21jaWJkZXYtXFx1MDAzZW11dGV4KTtcXG5AQCAtMTAwMCw2ICsxMDAyLDkgQEAgc3RhdGljIHZvaWQgc21jX2liX3JlbW92ZV9kZXYoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHZvaWQgKmNsaWVudF9kYXRhKVxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnNtY19pYl9kZXZpY2VzLm11dGV4KTtcXG4gXFx0cHJfd2Fybl9yYXRlbGltaXRlZChcXFwic21jOiByZW1vdmluZyBpYiBkZXZpY2UgJXNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgICBzbWNpYmRldi1cXHUwMDNlaWJkZXYtXFx1MDAzZW5hbWUpO1xcbitcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNnNtY2liZGV2LVxcdTAwM2Vpbml0X2NudCkpXFxuK1xcdFxcdHdhaXRfZXZlbnQoc21jaWJkZXYtXFx1MDAzZWluaXRfd2FpdCxcXG4rXFx0XFx0XFx0ICAgIWF0b21pY19yZWFkKFxcdTAwMjZzbWNpYmRldi1cXHUwMDNlaW5pdF9jbnQpKTtcXG4gXFx0c21jX3NtY3JfdGVybWluYXRlX2FsbChzbWNpYmRldik7XFxuIFxcdHNtY19pYl9jbGVhbnVwX3Blcl9pYmRldihzbWNpYmRldik7XFxuIFxcdGliX3VucmVnaXN0ZXJfZXZlbnRfaGFuZGxlcihcXHUwMDI2c21jaWJkZXYtXFx1MDAzZWV2ZW50X2hhbmRsZXIpO1xcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19pYi5oIGIvbmV0L3NtYy9zbWNfaWIuaFxcbmluZGV4IGVmOGFjMmI3NTQ2ZGYuLjhlOWZkNWEyMDBhMmIgMTAwNjQ0XFxuLS0tIGEvbmV0L3NtYy9zbWNfaWIuaFxcbisrKyBiL25ldC9zbWMvc21jX2liLmhcXG5AQCAtNTEsNiArNTEsOCBAQCBzdHJ1Y3Qgc21jX2liX2RldmljZSB7XFx0XFx0XFx0XFx0LyogaWItZGV2aWNlIGluZm9zIGZvciBzbWMgKi9cXG4gXFx0c3RydWN0IHdvcmtfc3RydWN0XFx0cG9ydF9ldmVudF93b3JrO1xcbiBcXHR1bnNpZ25lZCBsb25nXFx0XFx0cG9ydF9ldmVudF9tYXNrO1xcbiBcXHRERUNMQVJFX0JJVE1BUChwb3J0c19nb2luZ19hd2F5LCBTTUNfTUFYX1BPUlRTKTtcXG4rXFx0YXRvbWljX3RcXHRcXHRpbml0X2NudDtcXHQvKiBudW1iZXIgb2YgZGV2aWNlIHNlbGVjdGlvbnMgKi9cXG4rXFx0d2FpdF9xdWV1ZV9oZWFkX3RcXHRpbml0X3dhaXQ7XFx0Lyogd2FpdCBmb3Igc2VsZWN0aW9ucyB0byBlbmQgKi9cXG4gXFx0YXRvbWljX3RcXHRcXHRsbmtfY250O1xcdC8qIG51bWJlciBvZiBsaW5rcyBvbiBpYmRldiAqL1xcbiBcXHR3YWl0X3F1ZXVlX2hlYWRfdFxcdGxua3NfZGVsZXRlZDtcXHQvKiB3YWl0IDQgcmVtb3ZhbCBvZiBhbGwgbGlua3MqL1xcbiBcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRtdXRleDtcXHRcXHQvKiBwcm90ZWN0IGRldiBzZXR1cCtjbGVhbnVwICovXFxuQEAgLTU5LDYgKzYxLDE3IEBAIHN0cnVjdCBzbWNfaWJfZGV2aWNlIHtcXHRcXHRcXHRcXHQvKiBpYi1kZXZpY2UgaW5mb3MgZm9yIHNtYyAqL1xcbiBcXHRpbnRcXHRcXHRcXHRuZGV2X2lmaWR4W1NNQ19NQVhfUE9SVFNdOyAvKiBuZGV2IGlmIGluZGV4ZXMgKi9cXG4gfTtcXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbWNfaWJkZXZfaW5pdF9nZXQoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2KVxcbit7XFxuK1xcdGF0b21pY19pbmMoXFx1MDAyNnNtY2liZGV2LVxcdTAwM2Vpbml0X2NudCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbWNfaWJkZXZfaW5pdF9wdXQoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2KVxcbit7XFxuK1xcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFxcdTAwMjZzbWNpYmRldi1cXHUwMDNlaW5pdF9jbnQpKVxcbitcXHRcXHR3YWtlX3VwKFxcdTAwMjZzbWNpYmRldi1cXHUwMDNlaW5pdF93YWl0KTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBfX2JlMzIgc21jX2liX2dpZF90b19pcHY0KHU4IGdpZFtTTUNfR0lEX1NJWkVdKVxcbiB7XFxuIFxcdHN0cnVjdCBpbjZfYWRkciAqYWRkcjYgPSAoc3RydWN0IGluNl9hZGRyICopZ2lkO1xcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19sbGMuYyBiL25ldC9zbWMvc21jX2xsYy5jXFxuaW5kZXggOTU0YjJmZjE4MTVjMi4uMTVhZTE5YTlkYjA3ZSAxMDA2NDRcXG4tLS0gYS9uZXQvc21jL3NtY19sbGMuY1xcbisrKyBiL25ldC9zbWMvc21jX2xsYy5jXFxuQEAgLTExMTgsNyArMTExOCw3IEBAIGludCBzbWNfbGxjX2NsaV9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqcWVudHJ5KVxcbiBvdXRfcmVqZWN0OlxcbiBcXHRzbWNfbGxjX2NsaV9hZGRfbGlua19yZWplY3QocWVudHJ5KTtcXG4gb3V0Olxcbi1cXHRrZnJlZShpbmkpO1xcbitcXHRzbWNfaW5pdF9pbmZvX2ZyZWUoaW5pKTtcXG4gXFx0a2ZyZWUocWVudHJ5KTtcXG4gXFx0cmV0dXJuIHJjO1xcbiB9XFxuQEAgLTExOTIsNyArMTE5Miw3IEBAIHN0YXRpYyB2b2lkIHNtY19sbGNfY2xpX2FkZF9saW5rX2ludml0ZShzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXFxuIFxcdHNtY19sbGNfc2VuZF9hZGRfbGluayhsaW5rLCBpbmktXFx1MDAzZWliX2Rldi1cXHUwMDNlbWFjW2luaS1cXHUwMDNlaWJfcG9ydCAtIDFdLFxcbiBcXHRcXHRcXHQgICAgICBpbmktXFx1MDAzZWliX2dpZCwgTlVMTCwgU01DX0xMQ19SRVEpO1xcbiBvdXQ6XFxuLVxcdGtmcmVlKGluaSk7XFxuK1xcdHNtY19pbml0X2luZm9fZnJlZShpbmkpO1xcbiBcXHRrZnJlZShxZW50cnkpO1xcbiB9XFxuIFxcbkBAIC0xNTEyLDcgKzE1MTIsNyBAQCBpbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbiBcXHRyYyA9IHNtY19sbGNfc3J2X2NvbmZfbGluayhsaW5rLCBsaW5rX25ldywgbGdyX25ld190KTtcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRnb3RvIG91dF9lcnI7XFxuLVxcdGtmcmVlKGluaSk7XFxuK1xcdHNtY19pbml0X2luZm9fZnJlZShpbmkpO1xcbiBcXHRyZXR1cm4gMDtcXG4gb3V0X2VycjpcXG4gXFx0aWYgKGxpbmtfbmV3KSB7XFxuQEAgLTE1MjAsNyArMTUyMCw3IEBAIGludCBzbWNfbGxjX3Nydl9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXFxuIFxcdFxcdHNtY3JfbGlua19jbGVhcihsaW5rX25ldywgZmFsc2UpO1xcbiBcXHR9XFxuIG91dDpcXG4tXFx0a2ZyZWUoaW5pKTtcXG4rXFx0c21jX2luaXRfaW5mb19mcmVlKGluaSk7XFxuIFxcdGlmIChzZW5kX3JlcV9hZGRfbGlua19yZXNwKVxcbiBcXHRcXHRzbWNfbGxjX3NlbmRfcmVxX2FkZF9saW5rX3Jlc3BvbnNlKHJlcV9xZW50cnkpO1xcbiBcXHRyZXR1cm4gcmM7XFxuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX3BuZXQuYyBiL25ldC9zbWMvc21jX3BuZXQuY1xcbmluZGV4IDYzZTI4NmUyZGZhYTguLjdlMDFlMDFhNTIyYjcgMTAwNjQ0XFxuLS0tIGEvbmV0L3NtYy9zbWNfcG5ldC5jXFxuKysrIGIvbmV0L3NtYy9zbWNfcG5ldC5jXFxuQEAgLTk4MCwxNCArOTgwLDIyIEBAIHN0YXRpYyBpbnQgc21jX3BuZXRfZGV0ZXJtaW5lX2dpZChzdHJ1Y3Qgc21jX2liX2RldmljZSAqaWJkZXYsIGludCBpLFxcbiBcXHRpZiAoIWluaS1cXHUwMDNlY2hlY2tfc21jcnYyIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhc21jX2liX2RldGVybWluZV9naWQoaWJkZXYsIGksIGluaS1cXHUwMDNldmxhbl9pZCwgaW5pLVxcdTAwM2VpYl9naWQsIE5VTEwsXFxuIFxcdFxcdFxcdFxcdCAgTlVMTCkpIHtcXG4rXFx0XFx0aWYgKGluaS1cXHUwMDNlaWJfZGV2X3JlZilcXG4rXFx0XFx0XFx0c21jX2liZGV2X2luaXRfcHV0KGluaS1cXHUwMDNlaWJfZGV2KTtcXG4rXFx0XFx0c21jX2liZGV2X2luaXRfZ2V0KGliZGV2KTtcXG4gXFx0XFx0aW5pLVxcdTAwM2VpYl9kZXYgPSBpYmRldjtcXG4rXFx0XFx0aW5pLVxcdTAwM2VpYl9kZXZfcmVmID0gdHJ1ZTtcXG4gXFx0XFx0aW5pLVxcdTAwM2VpYl9wb3J0ID0gaTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFx0aWYgKGluaS1cXHUwMDNlY2hlY2tfc21jcnYyIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhc21jX2liX2RldGVybWluZV9naWQoaWJkZXYsIGksIGluaS1cXHUwMDNldmxhbl9pZCwgaW5pLVxcdTAwM2VzbWNydjIuaWJfZ2lkX3YyLFxcbiBcXHRcXHRcXHRcXHQgIE5VTEwsIFxcdTAwMjZpbmktXFx1MDAzZXNtY3J2MikpIHtcXG4rXFx0XFx0aWYgKGluaS1cXHUwMDNlc21jcnYyLmliX2Rldl92Ml9yZWYpXFxuK1xcdFxcdFxcdHNtY19pYmRldl9pbml0X3B1dChpbmktXFx1MDAzZXNtY3J2Mi5pYl9kZXZfdjIpO1xcbitcXHRcXHRzbWNfaWJkZXZfaW5pdF9nZXQoaWJkZXYpO1xcbiBcXHRcXHRpbmktXFx1MDAzZXNtY3J2Mi5pYl9kZXZfdjIgPSBpYmRldjtcXG4rXFx0XFx0aW5pLVxcdTAwM2VzbWNydjIuaWJfZGV2X3YyX3JlZiA9IHRydWU7XFxuIFxcdFxcdGluaS1cXHUwMDNlc21jcnYyLmliX3BvcnRfdjIgPSBpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMzowMDowMC4yNDY4NTUyODJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNTM3MjkzNDUxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJESUJTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic21jX2Nvbm5lY3RcIixcbiAgICBcInNtY19saXN0ZW5cIixcbiAgICBcInNtY19wbmV0X2ZpbmRfcm9jZV9yZXNvdXJjZVwiLFxuICAgIFwic21jX3BuZXRfZmluZF9hbHRfcm9jZVwiLFxuICAgIFwic21jX2xsY19jbGlfYWRkX2xpbmtcIixcbiAgICBcInNtY19sbGNfc3J2X2FkZF9saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgZGV2aWNlIHJlbW92YWwgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgc3Vic3lzdGVtIGJ5IGludHJvZHVjaW5nIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgYHNtY19pYl9kZXZpY2VgIGR1cmluZyBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uLiBUaGUgY2hhbmdlcyBtb2RpZnkgY29yZSBjb25uZWN0aW9uIHNldHVwIHBhdGhzIChgc21jX2Nvbm5lY3RgLCBgc21jX2xpc3RlbmApIGFuZCBsaW5rIGFkZGl0aW9uIHBhdGhzIChgc21jX2xsY19jbGlfYWRkX2xpbmtgLCBgc21jX2xsY19zcnZfYWRkX2xpbmtgKS4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQUZfU01DIHNvY2tldHMgYW5kIGNhbiBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNhZTVlZmQ5MWM1YzNiYWY3YWUwZThhODc2YTI0YmNmYWYwMTJhN2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDEyOjU5OjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9hZl9zbWMuYyBiL25ldC9zbWMvYWZfc21jLmNcbmluZGV4IGI1ZGI2OTA3M2UyMGYuLjE2MDI3MTQ2NDMwNWMgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL2FmX3NtYy5jXG4rKysgYi9uZXQvc21jL2FmX3NtYy5jXG5AQCAtMTIyNSw3ICsxMjI1LDcgQEAgdm9pZCBzbWNfZmlsbF9naWRfbGlzdChzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbiBcdCAgICAgICBTTUNfR0lEX1NJWkUpO1xuIFxuIG91dDpcbi1cdGtmcmVlKGFsdF9pbmkpO1xuK1x0c21jX2luaXRfaW5mb19mcmVlKGFsdF9pbmkpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHNtY19jb25uZWN0X3JkbWFfdjJfcHJlcGFyZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcbkBAIC0xNTk2LDE0ICsxNTk2LDE0IEBAIHN0YXRpYyBpbnQgX19zbWNfY29ubmVjdChzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbiBcdFNNQ19TVEFUX0NMTlRfU1VDQ19JTkMoc29ja19uZXQoc21jLVx1MDAzZWNsY3NvY2stXHUwMDNlc2spLCBhY2xjKTtcbiBcdHNtY19jb25uZWN0X2lzbV92bGFuX2NsZWFudXAoaW5pKTtcbiBcdGtmcmVlKGJ1Zik7XG4tXHRrZnJlZShpbmkpO1xuK1x0c21jX2luaXRfaW5mb19mcmVlKGluaSk7XG4gXHRyZXR1cm4gMDtcbiBcbiB2bGFuX2NsZWFudXA6XG4gXHRzbWNfY29ubmVjdF9pc21fdmxhbl9jbGVhbnVwKGluaSk7XG4gXHRrZnJlZShidWYpO1xuIGZhbGxiYWNrOlxuLVx0a2ZyZWUoaW5pKTtcbitcdHNtY19pbml0X2luZm9fZnJlZShpbmkpO1xuIFx0cmV0dXJuIHNtY19jb25uZWN0X2RlY2xpbmVfZmFsbGJhY2soc21jLCByYywgdmVyc2lvbik7XG4gfVxuIFxuQEAgLTIzNDMsNyArMjM0MywxMCBAQCBzdGF0aWMgdm9pZCBzbWNfZmluZF9yZG1hX3YyX2RldmljZV9zZXJ2KHN0cnVjdCBzbWNfc29jayAqbmV3X3NtYyxcbiBcbiBub3RfZm91bmQ6XG4gXHRpbmktXHUwMDNlc21jcl92ZXJzaW9uIFx1MDAyNj0gflNNQ19WMjtcbitcdGlmIChpbmktXHUwMDNlc21jcnYyLmliX2Rldl92Ml9yZWYpXG4rXHRcdHNtY19pYmRldl9pbml0X3B1dChpbmktXHUwMDNlc21jcnYyLmliX2Rldl92Mik7XG4gXHRpbmktXHUwMDNlc21jcnYyLmliX2Rldl92MiA9IE5VTEw7XG4rXHRpbmktXHUwMDNlc21jcnYyLmliX2Rldl92Ml9yZWYgPSBmYWxzZTtcbiBcdGluaS1cdTAwM2VjaGVja19zbWNydjIgPSBmYWxzZTtcbiB9XG4gXG5AQCAtMjU4Nyw3ICsyNTkwLDcgQEAgc3RhdGljIHZvaWQgc21jX2xpc3Rlbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHNtY19saXN0ZW5fZGVjbGluZShuZXdfc21jLCByYywgaW5pID8gaW5pLVx1MDAzZWZpcnN0X2NvbnRhY3RfbG9jYWwgOiAwLFxuIFx0XHRcdCAgIHByb3Bvc2FsX3ZlcnNpb24pO1xuIG91dF9mcmVlOlxuLVx0a2ZyZWUoaW5pKTtcbitcdHNtY19pbml0X2luZm9fZnJlZShpbmkpO1xuIFx0a2ZyZWUoYnVmKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5jIGIvbmV0L3NtYy9zbWNfY29yZS5jXG5pbmRleCBjZjZiNjIwZmVmMDVmLi5lNTlmMzI3ZjI5NGMyIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfY29yZS5jXG4rKysgYi9uZXQvc21jL3NtY19jb3JlLmNcbkBAIC01NSw2ICs1NSwxNyBAQCBzdGF0aWMgdm9pZCBfX3NtY19sZ3JfdGVybWluYXRlKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLCBib29sIHNvZnQpO1xuIFxuIHN0YXRpYyB2b2lkIHNtY19saW5rX2Rvd25fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuIFxuK3ZvaWQgc21jX2luaXRfaW5mb19mcmVlKHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXG4re1xuK1x0aWYgKCFpbmkpXG4rXHRcdHJldHVybjtcbitcdGlmIChpbmktXHUwMDNlaWJfZGV2X3JlZilcbitcdFx0c21jX2liZGV2X2luaXRfcHV0KGluaS1cdTAwM2VpYl9kZXYpO1xuK1x0aWYgKGluaS1cdTAwM2VzbWNydjIuaWJfZGV2X3YyX3JlZilcbitcdFx0c21jX2liZGV2X2luaXRfcHV0KGluaS1cdTAwM2VzbWNydjIuaWJfZGV2X3YyKTtcbitcdGtmcmVlKGluaSk7XG4rfVxuK1xuIC8qIHJldHVybiBoZWFkIG9mIGxpbmsgZ3JvdXAgbGlzdCBhbmQgaXRzIGxvY2sgZm9yIGEgZ2l2ZW4gbGluayBncm91cCAqL1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfaGVhZCAqc21jX2xncl9saXN0X2hlYWQoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXG4gXHRcdFx0XHRcdFx0ICBzcGlubG9ja190ICoqbGdyX2xvY2spXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5oIGIvbmV0L3NtYy9zbWNfY29yZS5oXG5pbmRleCA1YzE4ZjA4YTRjOGE1Li4zODVmMTZjYzUzNjhlIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfY29yZS5oXG4rKysgYi9uZXQvc21jL3NtY19jb3JlLmhcbkBAIC00MDMsNiArNDAzLDcgQEAgc3RydWN0IHNtY19pbml0X2luZm9fc21jcnYyIHtcbiBcbiBcdC8qIE91dHB1dCBmaWVsZHMgd2hlbiBzYWRkciBpcyBzZXQgKi9cbiBcdHN0cnVjdCBzbWNfaWJfZGV2aWNlXHQqaWJfZGV2X3YyO1xuK1x0Ym9vbFx0XHRcdGliX2Rldl92Ml9yZWY7XG4gXHR1OFx0XHRcdGliX3BvcnRfdjI7XG4gXHR1OFx0XHRcdGliX2dpZF92MltTTUNfR0lEX1NJWkVdO1xuIFxuQEAgLTQzOCw2ICs0MzksNyBAQCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyB7XG4gXHR1OFx0XHRcdHBlZXJfbWFjW0VUSF9BTEVOXTtcbiBcdHU4XHRcdFx0cGVlcl9zeXN0ZW1pZFtTTUNfU1lTVEVNSURfTEVOXTtcbiBcdHN0cnVjdCBzbWNfaWJfZGV2aWNlXHQqaWJfZGV2O1xuK1x0Ym9vbFx0XHRcdGliX2Rldl9yZWY7XG4gXHR1OFx0XHRcdGliX2dpZFtTTUNfR0lEX1NJWkVdO1xuIFx0dThcdFx0XHRpYl9wb3J0O1xuIFx0dTMyXHRcdFx0aWJfY2xjcXBuO1xuQEAgLTU5NCw2ICs1OTYsNyBAQCB2b2lkIHNtY19ydG9rZW5fc2V0MihzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciwgaW50IHJ0b2tfaWR4LCBpbnQgbGlua19pZCxcbiB2b2lkIHNtY19zbmRidWZfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubik7XG4gdm9pZCBzbWNfcm1iX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xuIGludCBzbWNfdmxhbl9ieV90Y3BzayhzdHJ1Y3Qgc29ja2V0ICpjbGNzb2NrLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcbit2b2lkIHNtY19pbml0X2luZm9fZnJlZShzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcbiBcbiB2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcbiBpbnQgc21jX2Nvbm5fY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19pYi5jIGIvbmV0L3NtYy9zbWNfaWIuY1xuaW5kZXggOWJiNDk1NzA3NDQ1ZS4uMDFjOWI1YzYyZGY3NiAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jX2liLmNcbisrKyBiL25ldC9zbWMvc21jX2liLmNcbkBAIC05NTAsNiArOTUwLDggQEAgc3RhdGljIGludCBzbWNfaWJfYWRkX2RldihzdHJ1Y3QgaWJfZGV2aWNlICppYmRldilcbiBcbiBcdHNtY2liZGV2LVx1MDAzZWliZGV2ID0gaWJkZXY7XG4gXHRJTklUX1dPUksoXHUwMDI2c21jaWJkZXYtXHUwMDNlcG9ydF9ldmVudF93b3JrLCBzbWNfaWJfcG9ydF9ldmVudF93b3JrKTtcbitcdGF0b21pY19zZXQoXHUwMDI2c21jaWJkZXYtXHUwMDNlaW5pdF9jbnQsIDApO1xuK1x0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZzbWNpYmRldi1cdTAwM2Vpbml0X3dhaXQpO1xuIFx0YXRvbWljX3NldChcdTAwMjZzbWNpYmRldi1cdTAwM2VsbmtfY250LCAwKTtcbiBcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2c21jaWJkZXYtXHUwMDNlbG5rc19kZWxldGVkKTtcbiBcdG11dGV4X2luaXQoXHUwMDI2c21jaWJkZXYtXHUwMDNlbXV0ZXgpO1xuQEAgLTEwMDAsNiArMTAwMiw5IEBAIHN0YXRpYyB2b2lkIHNtY19pYl9yZW1vdmVfZGV2KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB2b2lkICpjbGllbnRfZGF0YSlcbiBcdG11dGV4X3VubG9jayhcdTAwMjZzbWNfaWJfZGV2aWNlcy5tdXRleCk7XG4gXHRwcl93YXJuX3JhdGVsaW1pdGVkKFwic21jOiByZW1vdmluZyBpYiBkZXZpY2UgJXNcXG5cIixcbiBcdFx0XHQgICAgc21jaWJkZXYtXHUwMDNlaWJkZXYtXHUwMDNlbmFtZSk7XG4rXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2c21jaWJkZXYtXHUwMDNlaW5pdF9jbnQpKVxuK1x0XHR3YWl0X2V2ZW50KHNtY2liZGV2LVx1MDAzZWluaXRfd2FpdCxcbitcdFx0XHQgICAhYXRvbWljX3JlYWQoXHUwMDI2c21jaWJkZXYtXHUwMDNlaW5pdF9jbnQpKTtcbiBcdHNtY19zbWNyX3Rlcm1pbmF0ZV9hbGwoc21jaWJkZXYpO1xuIFx0c21jX2liX2NsZWFudXBfcGVyX2liZGV2KHNtY2liZGV2KTtcbiBcdGliX3VucmVnaXN0ZXJfZXZlbnRfaGFuZGxlcihcdTAwMjZzbWNpYmRldi1cdTAwM2VldmVudF9oYW5kbGVyKTtcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19pYi5oIGIvbmV0L3NtYy9zbWNfaWIuaFxuaW5kZXggZWY4YWMyYjc1NDZkZi4uOGU5ZmQ1YTIwMGEyYiAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jX2liLmhcbisrKyBiL25ldC9zbWMvc21jX2liLmhcbkBAIC01MSw2ICs1MSw4IEBAIHN0cnVjdCBzbWNfaWJfZGV2aWNlIHtcdFx0XHRcdC8qIGliLWRldmljZSBpbmZvcyBmb3Igc21jICovXG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHBvcnRfZXZlbnRfd29yaztcbiBcdHVuc2lnbmVkIGxvbmdcdFx0cG9ydF9ldmVudF9tYXNrO1xuIFx0REVDTEFSRV9CSVRNQVAocG9ydHNfZ29pbmdfYXdheSwgU01DX01BWF9QT1JUUyk7XG4rXHRhdG9taWNfdFx0XHRpbml0X2NudDtcdC8qIG51bWJlciBvZiBkZXZpY2Ugc2VsZWN0aW9ucyAqL1xuK1x0d2FpdF9xdWV1ZV9oZWFkX3RcdGluaXRfd2FpdDtcdC8qIHdhaXQgZm9yIHNlbGVjdGlvbnMgdG8gZW5kICovXG4gXHRhdG9taWNfdFx0XHRsbmtfY250O1x0LyogbnVtYmVyIG9mIGxpbmtzIG9uIGliZGV2ICovXG4gXHR3YWl0X3F1ZXVlX2hlYWRfdFx0bG5rc19kZWxldGVkO1x0Lyogd2FpdCA0IHJlbW92YWwgb2YgYWxsIGxpbmtzKi9cbiBcdHN0cnVjdCBtdXRleFx0XHRtdXRleDtcdFx0LyogcHJvdGVjdCBkZXYgc2V0dXArY2xlYW51cCAqL1xuQEAgLTU5LDYgKzYxLDE3IEBAIHN0cnVjdCBzbWNfaWJfZGV2aWNlIHtcdFx0XHRcdC8qIGliLWRldmljZSBpbmZvcyBmb3Igc21jICovXG4gXHRpbnRcdFx0XHRuZGV2X2lmaWR4W1NNQ19NQVhfUE9SVFNdOyAvKiBuZGV2IGlmIGluZGV4ZXMgKi9cbiB9O1xuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbWNfaWJkZXZfaW5pdF9nZXQoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2KVxuK3tcbitcdGF0b21pY19pbmMoXHUwMDI2c21jaWJkZXYtXHUwMDNlaW5pdF9jbnQpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgc21jX2liZGV2X2luaXRfcHV0KHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNpYmRldilcbit7XG4rXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZzbWNpYmRldi1cdTAwM2Vpbml0X2NudCkpXG4rXHRcdHdha2VfdXAoXHUwMDI2c21jaWJkZXYtXHUwMDNlaW5pdF93YWl0KTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBfX2JlMzIgc21jX2liX2dpZF90b19pcHY0KHU4IGdpZFtTTUNfR0lEX1NJWkVdKVxuIHtcbiBcdHN0cnVjdCBpbjZfYWRkciAqYWRkcjYgPSAoc3RydWN0IGluNl9hZGRyICopZ2lkO1xuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2xsYy5jIGIvbmV0L3NtYy9zbWNfbGxjLmNcbmluZGV4IDk1NGIyZmYxODE1YzIuLjE1YWUxOWE5ZGIwN2UgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19sbGMuY1xuKysrIGIvbmV0L3NtYy9zbWNfbGxjLmNcbkBAIC0xMTE4LDcgKzExMTgsNyBAQCBpbnQgc21jX2xsY19jbGlfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSlcbiBvdXRfcmVqZWN0OlxuIFx0c21jX2xsY19jbGlfYWRkX2xpbmtfcmVqZWN0KHFlbnRyeSk7XG4gb3V0OlxuLVx0a2ZyZWUoaW5pKTtcbitcdHNtY19pbml0X2luZm9fZnJlZShpbmkpO1xuIFx0a2ZyZWUocWVudHJ5KTtcbiBcdHJldHVybiByYztcbiB9XG5AQCAtMTE5Miw3ICsxMTkyLDcgQEAgc3RhdGljIHZvaWQgc21jX2xsY19jbGlfYWRkX2xpbmtfaW52aXRlKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcdHNtY19sbGNfc2VuZF9hZGRfbGluayhsaW5rLCBpbmktXHUwMDNlaWJfZGV2LVx1MDAzZW1hY1tpbmktXHUwMDNlaWJfcG9ydCAtIDFdLFxuIFx0XHRcdCAgICAgIGluaS1cdTAwM2VpYl9naWQsIE5VTEwsIFNNQ19MTENfUkVRKTtcbiBvdXQ6XG4tXHRrZnJlZShpbmkpO1xuK1x0c21jX2luaXRfaW5mb19mcmVlKGluaSk7XG4gXHRrZnJlZShxZW50cnkpO1xuIH1cbiBcbkBAIC0xNTEyLDcgKzE1MTIsNyBAQCBpbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLFxuIFx0cmMgPSBzbWNfbGxjX3Nydl9jb25mX2xpbmsobGluaywgbGlua19uZXcsIGxncl9uZXdfdCk7XG4gXHRpZiAocmMpXG4gXHRcdGdvdG8gb3V0X2Vycjtcbi1cdGtmcmVlKGluaSk7XG4rXHRzbWNfaW5pdF9pbmZvX2ZyZWUoaW5pKTtcbiBcdHJldHVybiAwO1xuIG91dF9lcnI6XG4gXHRpZiAobGlua19uZXcpIHtcbkBAIC0xNTIwLDcgKzE1MjAsNyBAQCBpbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLFxuIFx0XHRzbWNyX2xpbmtfY2xlYXIobGlua19uZXcsIGZhbHNlKTtcbiBcdH1cbiBvdXQ6XG4tXHRrZnJlZShpbmkpO1xuK1x0c21jX2luaXRfaW5mb19mcmVlKGluaSk7XG4gXHRpZiAoc2VuZF9yZXFfYWRkX2xpbmtfcmVzcClcbiBcdFx0c21jX2xsY19zZW5kX3JlcV9hZGRfbGlua19yZXNwb25zZShyZXFfcWVudHJ5KTtcbiBcdHJldHVybiByYztcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19wbmV0LmMgYi9uZXQvc21jL3NtY19wbmV0LmNcbmluZGV4IDYzZTI4NmUyZGZhYTguLjdlMDFlMDFhNTIyYjcgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19wbmV0LmNcbisrKyBiL25ldC9zbWMvc21jX3BuZXQuY1xuQEAgLTk4MCwxNCArOTgwLDIyIEBAIHN0YXRpYyBpbnQgc21jX3BuZXRfZGV0ZXJtaW5lX2dpZChzdHJ1Y3Qgc21jX2liX2RldmljZSAqaWJkZXYsIGludCBpLFxuIFx0aWYgKCFpbmktXHUwMDNlY2hlY2tfc21jcnYyIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFzbWNfaWJfZGV0ZXJtaW5lX2dpZChpYmRldiwgaSwgaW5pLVx1MDAzZXZsYW5faWQsIGluaS1cdTAwM2VpYl9naWQsIE5VTEwsXG4gXHRcdFx0XHQgIE5VTEwpKSB7XG4rXHRcdGlmIChpbmktXHUwMDNlaWJfZGV2X3JlZilcbitcdFx0XHRzbWNfaWJkZXZfaW5pdF9wdXQoaW5pLVx1MDAzZWliX2Rldik7XG4rXHRcdHNtY19pYmRldl9pbml0X2dldChpYmRldik7XG4gXHRcdGluaS1cdTAwM2VpYl9kZXYgPSBpYmRldjtcbitcdFx0aW5pLVx1MDAzZWliX2Rldl9yZWYgPSB0cnVlO1xuIFx0XHRpbmktXHUwMDNlaWJfcG9ydCA9IGk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFx0aWYgKGluaS1cdTAwM2VjaGVja19zbWNydjIgXHUwMDI2XHUwMDI2XG4gXHQgICAgIXNtY19pYl9kZXRlcm1pbmVfZ2lkKGliZGV2LCBpLCBpbmktXHUwMDNldmxhbl9pZCwgaW5pLVx1MDAzZXNtY3J2Mi5pYl9naWRfdjIsXG4gXHRcdFx0XHQgIE5VTEwsIFx1MDAyNmluaS1cdTAwM2VzbWNydjIpKSB7XG4rXHRcdGlmIChpbmktXHUwMDNlc21jcnYyLmliX2Rldl92Ml9yZWYpXG4rXHRcdFx0c21jX2liZGV2X2luaXRfcHV0KGluaS1cdTAwM2VzbWNydjIuaWJfZGV2X3YyKTtcbitcdFx0c21jX2liZGV2X2luaXRfZ2V0KGliZGV2KTtcbiBcdFx0aW5pLVx1MDAzZXNtY3J2Mi5pYl9kZXZfdjIgPSBpYmRldjtcbitcdFx0aW5pLVx1MDAzZXNtY3J2Mi5pYl9kZXZfdjJfcmVmID0gdHJ1ZTtcbiBcdFx0aW5pLVx1MDAzZXNtY3J2Mi5pYl9wb3J0X3YyID0gaTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMzowMDowMC4yNDY4NTY2MzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzY3MzI5NDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBTTUMgU3Vic3lzdGVtIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgdG91Y2hpbmcgcXVpdGUgYSBmZXcgZmlsZXMgd2l0aGluIHRoZSBgbmV0L3NtY2AgZGlyZWN0b3J5OiBgYWZfc21jLmNgLCBgc21jX2NvcmUuY2AsIGBzbWNfY29yZS5oYCwgYHNtY19pYi5jYCwgYHNtY19pYi5oYCwgYHNtY19sbGMuY2AsIGFuZCBgc21jX3BuZXQuY2AuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCdzIGZvY3VzZWQgb24gdGhlIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgQUZfU01DIHNvY2tldHMuIFRoaXMgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIGxvdy1sZXZlbCBuZXR3b3JrIGNvbW11bmljYXRpb24gd2l0aCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBgc21jX2luaXRfaW5mb19mcmVlYCByZXBsYWNpbmcgYSBkaXJlY3QgYGtmcmVlKGluaSlgLiBUaGF0J3MgYWx3YXlzIGEgcmVkIGZsYWcgdGhhdCBtYWtlcyBtZSBwYXkgYXR0ZW50aW9uOyB0aGlzIHN1Z2dlc3RzIGEgcmVzb3VyY2UgbWFuYWdlbWVudCBpc3N1ZSwgbGlrZWx5IGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8sIG9yIHNvbWV0aGluZyBzaW1pbGFyLiAgVGhlIGFkZGl0aW9uIG9mIGBpYl9kZXZfcmVmYCBhbmQgYGliX2Rldl92Ml9yZWZgIHRvIHRoZSBgc21jX2luaXRfaW5mb2Agc3RydWN0dXJlcywgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGF0b21pY190IGluaXRfY250YCBhbmQgYHdhaXRfcXVldWVfaGVhZF90IGluaXRfd2FpdGAgdG8gdGhlIGBzbWNfaWJfZGV2aWNlYCBhcmUgY2xlYXJseSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGUgaW5jcmVtZW50aW5nIG9mIGBpbml0X2NudGAgd2hlbiBhIGRldmljZSBpcyBzZWxlY3RlZCBhbmQgdGhlIHdhaXQgaW4gYHNtY19pYl9yZW1vdmVfZGV2YCByZWFsbHkgc29saWRpZnkgdGhpczsgaXQncyBkZXNpZ25lZCB0byBwcmV2ZW50IHRoZSBkZXZpY2UgZnJvbSBiZWluZyByZW1vdmVkIHdoaWxlIHRoZXJlIGFyZSBzdGlsbCBhY3RpdmUgcmVmZXJlbmNlcyB0byBpdCBmcm9tIHRoZSBgc21jX2luaXRfaW5mb2Agc3RydWN0dXJlcy4gU28sIHRoZSBwYXRjaCBpcyB0cnlpbmcgdG8gZml4IHRoZSByYWNlIGNvbmRpdGlvbiB3aGVyZSBgc21jX2liX2RldmljZWAgY291bGQgYmUgcmVtb3ZlZCBwcmVtYXR1cmVseSwgbGVhdmluZyBkYW5nbGluZyBwb2ludGVycy4gIE1ha2VzIHNlbnNlLCB0aGF0J3MgZXhhY3RseSB0aGUga2luZCBvZiB2dWxuZXJhYmlsaXR5IEkgd291bGQgZXhwZWN0IHRvIHNlZSBpbiBhIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGxpa2UgdGhpcywgd2hlcmUgeW91IGhhdmUgbXVsdGlwbGUgdGhyZWFkcyBhbmQgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgaW50ZXJhY3Rpbmcgd2l0aCBzaGFyZWQgaGFyZHdhcmUgcmVzb3VyY2VzLlxuXG5UaGUgZmFjdCB0aGF0IHRoaXMgaXMgaW4gU01DLCBhbmQgaXQncyByZWFjaGFibGUgdmlhIEFGX1NNQywgaW5zdGFudGx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGZ1enppbmcuICBJIGtub3cgc3l6a2FsbGVyIHRhcmdldHMgQUZfU01DLCBzbyB0aGF0J3MgZ29vZC4gV2UgaGF2ZSBhIHRlc3QgaGFybmVzcyBhbHJlYWR5IGZvciB0aGlzLlxuXG5JJ2xsIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBzcGVjaWZpYyBgQ09ORklHYCByZXF1aXJlbWVudHMuIEknZCBleHBlY3QgYENPTkZJR19TTUNgIHRvIGJlIHRoZSBwcmltYXJ5IG9uZSwgYnV0IEknbGwgc2VhcmNoIHRoZSBLY29uZmlnIGZpbGVzIGp1c3QgdG8gYmUgY2VydGFpbiB0aGVyZSBhcmVuJ3QgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMgdGhhdCB3b3VsZCBtYWtlIHRoaXMgZml4IGxlc3MgYnJvYWRseSBhcHBsaWNhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDc5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTM6MDA6MDguMDE0MTkwNTc5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTk0NjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9zbWMvS2NvbmZpZzoyOmNvbmZpZyBTTUNcXG5uZXQvc21jL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcXFwiXFxuLS1cXG5uZXQvc21jL0tjb25maWctMTMtXFxubmV0L3NtYy9LY29uZmlnOjE0OmNvbmZpZyBTTUNfRElBR1xcbm5ldC9zbWMvS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvc21jL0tjb25maWctMjItXFxubmV0L3NtYy9LY29uZmlnOjIzOmNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcXG5uZXQvc21jL0tjb25maWctMjQtXFx0Ym9vbCBcXFwiR2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTM6MDA6MDguMDYwMTkwNTY0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU4NzgwNjA0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNNQyBDb25maWd1cmF0aW9uIGFuZCBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gd2UncmUgZGVhbGluZyB3aXRoIGBDT05GSUdfU01DYCDigJMgdGhhdCdzIHRoZSBjb25maWd1cmF0aW9uIHdlJ3JlIHdvcmtpbmcgd2l0aCBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gem9vbSBpbiBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIGVpdGhlciBtb2RpZmllZCBvciBuZXdseSBhZGRlZCB3aXRoaW4gdGhpcyBjb250ZXh0LiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBzdGFuZCBvdXQ6IGBzbWNfaW5pdF9pbmZvX2ZyZWVgLCBgc21jX2liX3JlbW92ZV9kZXZgLCBgc21jX3BuZXRfZGV0ZXJtaW5lX2dpZGAsIGBzbWNfZmluZF9yZG1hX3YyX2RldmljZV9zZXJ2YCwgYHNtY19saXN0ZW5fd29ya2AsIGBfX3NtY19jb25uZWN0YCwgYHNtY19maWxsX2dpZF9saXN0YCwgYHNtY19sbGNfY2xpX2FkZF9saW5rYCwgYHNtY19sbGNfY2xpX2FkZF9saW5rX2ludml0ZWAsIGFuZCBgc21jX2xsY19zcnZfYWRkX2xpbmtgLlxuXG5Mb29raW5nIGF0IHRoYXQgbGlzdCwgSSdtIHRoaW5raW5nIHRoZSByZWFsIGtleSBvbmVzIHRvIGRpc3NlY3QgZnVydGhlciBhcmU6IGBfX3NtY19jb25uZWN0YCwgYHNtY19saXN0ZW5fd29ya2AsIGBzbWNfcG5ldF9kZXRlcm1pbmVfZ2lkYCwgYW5kIGBzbWNfaWJfcmVtb3ZlX2RldmAuIFRob3NlIGZlZWwgbGlrZSB0aGUgY29yZSBvZiB0aGUgc2lnbmlmaWNhbnQgY2hhbmdlcyBoZXJlLlxuXG5TcGVjaWZpY2FsbHksIGBzbWNfaWJfcmVtb3ZlX2RldmAgc2VlbXMgaW1wb3J0YW50LiBJdCdzIHRyaWdnZXJlZCB3aGVuIGFuIEluZmluaUJhbmQgZGV2aWNlIGlzIHJlbW92ZWQsIHNvIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCBjbGVhbnVwIGlzIGhhbmRsZWQuIFRoZW4gdGhlcmUncyBgc21jX3BuZXRfZGV0ZXJtaW5lX2dpZGAsIHdoaWNoLCBmcm9tIHRoZSBuYW1lLCBzb3VuZHMgbGlrZSBpdCdzIGNydWNpYWwgZm9yIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgR0lEIHJlc29sdXRpb24uIFRoZSBmdW5jdGlvbiBgX19zbWNfY29ubmVjdGAsIHRoYXQncyBvdXIgQUZfU01DIGBjb25uZWN0KClgIGNhbGwsIHNvIHRoYXQncyBhIGNvcm5lcnN0b25lLiBGaW5hbGx5LCBgc21jX2xpc3Rlbl93b3JrYCBpcyBnb2luZyB0byBoYW5kbGUgaW5jb21pbmcgY29ubmVjdGlvbiByZXF1ZXN0cywgc28gdGhhdCdzIG9idmlvdXNseSBjcml0aWNhbC5cblxuSSdtIGdvaW5nIHRvIGRpZyBpbnRvIGBzbWNfcG5ldF9kZXRlcm1pbmVfZ2lkYCBhbmQgYHNtY19pYl9yZW1vdmVfZGV2YCBtb3JlIGNsb3NlbHkgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjE1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAwOjE0LjY0Nzk5OTI0M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA0NTA1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfcG5ldF9kZXRlcm1pbmVfZ2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX3BuZXQuYz05NTE9c3RhdGljIGludCBzbWNfcG5ldF9maW5kX25kZXZfcG5ldGlkX2J5X3RhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxubmV0L3NtYy9zbWNfcG5ldC5jLTk3Ni1cXG5uZXQvc21jL3NtY19wbmV0LmM6OTc3OnN0YXRpYyBpbnQgc21jX3BuZXRfZGV0ZXJtaW5lX2dpZChzdHJ1Y3Qgc21jX2liX2RldmljZSAqaWJkZXYsIGludCBpLFxcbm5ldC9zbWMvc21jX3BuZXQuYy05NzgtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxcbi0tXFxubmV0L3NtYy9zbWNfcG5ldC5jPTEwMDY9c3RhdGljIHZvaWQgX3NtY19wbmV0X2ZpbmRfcm9jZV9ieV9wbmV0aWQodTggKnBuZXRfaWQsXFxuLS1cXG5uZXQvc21jL3NtY19wbmV0LmMtMTAyNC1cXHRcXHRcXHQgICAgIXRlc3RfYml0KGkgLSAxLCBpYmRldi1cXHUwMDNlcG9ydHNfZ29pbmdfYXdheSkpIHtcXG5uZXQvc21jL3NtY19wbmV0LmM6MTAyNTpcXHRcXHRcXHRcXHRpZiAoIXNtY19wbmV0X2RldGVybWluZV9naWQoaWJkZXYsIGksIGluaSkpXFxubmV0L3NtYy9zbWNfcG5ldC5jLTEwMjYtXFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLS1cXG5uZXQvc21jL3NtY19wbmV0LmM9MTA0Nz1zdGF0aWMgdm9pZCBzbWNfcG5ldF9maW5kX3JkbWFfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5uZXQvc21jL3NtY19wbmV0LmMtMTA3MS1cXHRcXHRcXHQgICAgIXRlc3RfYml0KGkgLSAxLCBpYmRldi1cXHUwMDNlcG9ydHNfZ29pbmdfYXdheSkpIHtcXG5uZXQvc21jL3NtY19wbmV0LmM6MTA3MjpcXHRcXHRcXHRcXHRpZiAoIXNtY19wbmV0X2RldGVybWluZV9naWQoaWJkZXYsIGksIGluaSkpXFxubmV0L3NtYy9zbWNfcG5ldC5jLTEwNzMtXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAwOjE0LjY5NTA0OTk3OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTA0NjY2ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYHNtY19pYl9yZW1vdmVfZGV2YCBGdW5jdGlvbiBDYWxsKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBtZW50YWwgY2hlY2tsaXN0IHN0YXJ0cyB3aXRoIGBzbWNfaWJfcmVtb3ZlX2RldmAuIEkgaW1tZWRpYXRlbHkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBUaGlzIGxpa2VseSBwb2ludHMgdG8gdGhlIHJlbW92YWwgb2YgYW4gSW5maW5pQmFuZCBkZXZpY2Ugd2l0aGluIHRoZSBTTUMgKFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMpIGZyYW1ld29yay4gU28sIEkgbmVlZCB0byBjb25zaWRlcjogV2hhdCBhcmUgdGhlIHByZWNvbmRpdGlvbnMgZm9yIGNhbGxpbmcgdGhpcz8gV2hhdCByZXNvdXJjZXMgYXJlIGJlaW5nIGZyZWVkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgSSBuZWVkIHRvIHRoaW5rIGFib3V0LCBlc3BlY2lhbGx5IGlmIHRoaXMgaXMgaW4gYSBtdWx0aS10aHJlYWRlZCBvciBpbnRlcnJ1cHQgY29udGV4dD8gV2hhdCBhYm91dCBlcnJvciBoYW5kbGluZzsgaXMgdGhlcmUgc3VmZmljaWVudCBlcnJvciBjaGVja2luZyBhbmQgcmVjb3Zlcnk/IEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBxdWVzdGlvbnMgYWJvdXQgbG9ja2luZy4gSXMgdGhlcmUgYSBtdXRleCBvciBzcGlubG9jayBwcm90ZWN0aW5nIHRoZSByZWxldmFudCBkYXRhIHN0cnVjdHVyZXM/IEFuZCB3aGF0IGFib3V0IHRoZSBpbXBhY3Qgb24gY29ubmVjdGlvbnMgdXNpbmcgdGhhdCBzcGVjaWZpYyBkZXZpY2U/IERvZXMgdGhpcyBmdW5jdGlvbiBncmFjZWZ1bGx5IGhhbmRsZSB0aG9zZT8gSSdkIGV4cGVjdCBwcm9wZXIgY2xlYW51cCBvZiBhbnkgYXNzb2NpYXRlZCBRUHMgKFF1ZXVlIFBhaXJzKSwgUERzIChQcm90ZWN0aW9uIERvbWFpbnMpLCBhbmQgQ1FzIChDb21wbGV0aW9uIFF1ZXVlcykuIEZpbmFsbHksIGEgZ29vZCByZXZpZXcgbWVhbnMgdW5kZXJzdGFuZGluZyB0aGUgcG9zc2libGUgcmV0dXJuIGNvZGVzIGFuZCB0aGVpciBpbXBsaWNhdGlvbnMgZm9yIHRoZSBjYWxsZXIuIEJhc2ljYWxseSwgSSB3YW50IHRvIHNlZSBhIHJvYnVzdCwgd2VsbC1kZWZpbmVkIGZ1bmN0aW9uIHRoYXQgbGVhdmVzIHRoZSBzeXN0ZW0gaW4gYSBjb25zaXN0ZW50IHN0YXRlIGFmdGVyIHRoZSBkZXZpY2UgcmVtb3ZhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgxNSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAwOjE4LjY4NTUxOTQyNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA0NDM3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfaWJfcmVtb3ZlX2RldlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19pYi5jPTkzOD1zdGF0aWMgaW50IHNtY19pYl9hZGRfZGV2KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2KVxcbi0tXFxubmV0L3NtYy9zbWNfaWIuYy05OTUtLyogY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGliX3VucmVnaXN0ZXJfY2xpZW50KCkgKi9cXG5uZXQvc21jL3NtY19pYi5jOjk5NjpzdGF0aWMgdm9pZCBzbWNfaWJfcmVtb3ZlX2RldihzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdm9pZCAqY2xpZW50X2RhdGEpXFxubmV0L3NtYy9zbWNfaWIuYy05OTcte1xcbi0tXFxubmV0L3NtYy9zbWNfaWIuYz0xMDE1PXN0YXRpYyBzdHJ1Y3QgaWJfY2xpZW50IHNtY19pYl9jbGllbnQgPSB7XFxuLS1cXG5uZXQvc21jL3NtY19pYi5jLTEwMTctXFx0LmFkZFxcdD0gc21jX2liX2FkZF9kZXYsXFxubmV0L3NtYy9zbWNfaWIuYzoxMDE4OlxcdC5yZW1vdmUgPSBzbWNfaWJfcmVtb3ZlX2RldixcXG5uZXQvc21jL3NtY19pYi5jLTEwMTktfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTM6MDA6MTguNzMxNTcwODZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzIxMDUyOTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCBwcmVzZW50ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBJQiBEZXZpY2UgUmVtb3ZhbCBhbmQgaXRzIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYHNtY19pYl9yZW1vdmVfZGV2YCwgd2hpY2ggaXMgdGhlIGNhbGxiYWNrIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiBhbiBJbmZpbmlCYW5kIChJQikgZGV2aWNlIGlzIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgd2UgY2FuIHRyaWdnZXIgdGhpcyByZW1vdmFsIGV2ZW50IGZyb20gd2l0aGluIHN5emthbGxlci4gVGhlIGFuc3dlciBhcHBlYXJzIHRvIGJlIHllczsgd2UgaGF2ZSBhIGNvdXBsZSBvZiB2aWFibGUgYXZlbnVlczogdXRpbGl6aW5nIFJETUEgbmV0bGluayBpbnRlcmZhY2VzIG9yIHBvdGVudGlhbGx5IGJ5IHJlbW92aW5nIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgZGV2aWNlLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIFJvQ0UgKFJETUEgb3ZlciBDb252ZXJnZWQgRXRoZXJuZXQpIHNldHVwcy4gVGhpcyBnaXZlcyB1cyBhIHNvbGlkIGxlYWQgb24gcG90ZW50aWFsIGZ1enppbmcgc3RyYXRlZ2llcy4gTm93LCBsZXQncyBkaXZlIGRlZXBlciBhbmQgc2VlIGlmIHdlIGNhbiB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgcmFtaWZpY2F0aW9ucyBvZiB0aGlzIHJlbW92YWwgYnkgY2hlY2tpbmcgb3V0IHRoZSBgX19zbWNfY29ubmVjdGAgZnVuY3Rpb24gYW5kIGl0cyBjb25uZWN0aW9uIHdpdGggdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM3OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAwOjIzLjA1MjYyNjY2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3MTc4ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19zbWNfY29ubmVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL2FmX3NtYy5jPTE0OTk9c3RhdGljIGludCBzbWNfY29ubmVjdF9jaGVja19hY2xjKHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmksXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE1MTktLyogcGVyZm9ybSBzdGVwcyBiZWZvcmUgYWN0dWFsbHkgY29ubmVjdGluZyAqL1xcbm5ldC9zbWMvYWZfc21jLmM6MTUyMDpzdGF0aWMgaW50IF9fc21jX2Nvbm5lY3Qoc3RydWN0IHNtY19zb2NrICpzbWMpXFxubmV0L3NtYy9hZl9zbWMuYy0xNTIxLXtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MTYxMD1zdGF0aWMgdm9pZCBzbWNfY29ubmVjdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMTYzOS1cXG5uZXQvc21jL2FmX3NtYy5jOjE2NDA6XFx0cmMgPSBfX3NtY19jb25uZWN0KHNtYyk7XFxubmV0L3NtYy9hZl9zbWMuYy0xNjQxLVxcdGlmIChyYyBcXHUwMDNjIDApXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jPTE2NTY9aW50IHNtY19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xNzIyLVxcdH0gZWxzZSB7XFxubmV0L3NtYy9hZl9zbWMuYzoxNzIzOlxcdFxcdHJjID0gX19zbWNfY29ubmVjdChzbWMpO1xcbm5ldC9zbWMvYWZfc21jLmMtMTcyNC1cXHRcXHRpZiAocmMgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMzowMDoyMy4xMDIzNTA3MThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODgxNDI4OTE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTTUMgQ29ubmVjdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggbG9va3Mgc29saWQsIGZpeGluZyB0aGF0IG5hc3R5IGJ1ZyB3aGVyZSBkZXZpY2UgcmVtb3ZhbCBtZXNzZWQgd2l0aCBvbmdvaW5nIGNvbm5lY3Rpb25zLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBfX3NtY19jb25uZWN0YCBpcyBjYWxsZWQgZnJvbSBib3RoIGBzbWNfY29ubmVjdGAgYW5kIGBzbWNfY29ubmVjdF93b3JrYCwgd2hpY2ggaXMgYXMgZXhwZWN0ZWQuIERlZmluaXRlbHkgd29ydGggcnVubmluZyB0aGlzIHRocm91Z2ggdGhlIGZ1enppbmcgcmlnOyBJJ20gbWFya2luZyBpdCBhcyBcIlRydWVcIi4gSSdsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvbiBgX19zbWNfY29ubmVjdGAsIGBzbWNfbGlzdGVuX3dvcmtgLCBgc21jX3BuZXRfZGV0ZXJtaW5lX2dpZGAsIGFuZCBgc21jX2liX3JlbW92ZV9kZXZgIGluIHBhcnRpY3VsYXIg4oCTIHRob3NlIHNlZW0gbGlrZSBrZXkgYXJlYXMgdG8gdGFyZ2V0LlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMg4oCTIFNNQyByZWxpZXMgb24gUkRNQS9JQiBzdXBwb3J0LCBzbyBJIHdhbnQgdG8gYmUgY2VydGFpbiBub3RoaW5nIGhhcyBjaGFuZ2VkIHRoYXQgYWZmZWN0cyB0aGF0LiBUaW1lIHRvIHRha2UgYW5vdGhlciBsb29rIGF0IGBuZXQvc21jL0tjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDMxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAwOjMxLjkxNjY0MTk0N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI0NzQ1NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnPTI9Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG5uZXQvc21jL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBESUJTXFxubmV0L3NtYy9LY29uZmlnLTUtXFx0aGVscFxcbi0tXFxubmV0L3NtYy9LY29uZmlnPTE0PWNvbmZpZyBTTUNfRElBR1xcbm5ldC9zbWMvS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxubmV0L3NtYy9LY29uZmlnOjE2OlxcdGRlcGVuZHMgb24gU01DXFxubmV0L3NtYy9LY29uZmlnLTE3LVxcdGhlbHBcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZz0yMz1jb25maWcgU01DX0hTX0NUUkxfQlBGXFxubmV0L3NtYy9LY29uZmlnLTI0LVxcdGJvb2wgXFxcIkdlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcXFwiXFxubmV0L3NtYy9LY29uZmlnOjI1OlxcdGRlcGVuZHMgb24gU01DIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgQlBGX1NZU0NBTExcXG5uZXQvc21jL0tjb25maWctMjYtXFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAwOjMxLjk1OTEyMzk0MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjAzNTY1NTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIC0gVGhlIFNNQyBQdXp6bGUqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLi4uIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQgcG9pbnRzIHRvIGEgZGVwZW5kZW5jeSBjaGFpbjogaXQncyBsb29raW5nIGxpa2UgdGhpcyBmdW5jdGlvbmFsaXR5IGhpbmdlcyBvbiBgSU5FVGAsIGBJTkZJTklCQU5EYCwgYW5kLi4uIGhvbGQgb24sIHdoYXQgd2FzIHRoYXQgbGFzdCBvbmU/IGBESUJTYD8gVGhhdCBmZWVscyBhIGxpdHRsZSBvdXQgb2YgcGxhY2UuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhhdC4gVGltZSB0byBkaXZlIGludG8gdGhlIHNvdXJjZSB0cmVlLiBTcGVjaWZpY2FsbHksIGxldCBtZSB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBkZWZpbmVkIGluIHRoZSBrZXJuZWwncyBLY29uZmlnIGZpbGVzLiBUaGUgcGxhY2UgdG8gc3RhcnQgZm9yIHRoaXMgc2VlbXMgdG8gYmUgYG5ldC9zbWMvS2NvbmZpZ2AuIEknbGwgY3Jvc3MtcmVmZXJlbmNlIHdoYXQgaXMgc2FpZCB0aGVyZSBhYm91dCB0aGUgZGVwZW5kZW5jaWVzLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB3aGljaCBkZXBlbmRlbmNpZXMgYXJlIHJlcXVpcmVkIGFuZCB3aGljaCBhcmUgbm90LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjM1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTM6MDA6MzYuMTYyNjkyNjI3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFNNQ1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IElORklOSUJBTkQgXFx1MDAyNlxcdTAwMjYgRElCU1xcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBTTUMtUiBwcm92aWRlcyBhIFxcXCJzb2NrZXRzIG92ZXIgUkRNQVxcXCIgc29sdXRpb24gbWFraW5nIHVzZSBvZlxcbiAgIDc6XFx0XFx0ICBSRE1BIG92ZXIgQ29udmVyZ2VkIEV0aGVybmV0IChSb0NFKSB0ZWNobm9sb2d5IHRvIHVwZ3JhZGVcXG4gICA4OlxcdFxcdCAgQUZfSU5FVCBUQ1AgY29ubmVjdGlvbnMgdHJhbnNwYXJlbnRseS5cXG4gICA5OlxcdFxcdCAgVGhlIExpbnV4IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTTUMtUiBzb2x1dGlvbiBpcyBkZXNpZ25lZCBhc1xcbiAgMTA6XFx0XFx0ICBhIHNlcGFyYXRlIHNvY2tldCBmYW1pbHkgU01DLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBydW4gU01DIHNvY2tldCBhcHBsaWNhdGlvbnNcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIFNNQ19ESUFHXFxuICAxNTpcXHRcXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIFNNQ1xcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBTdXBwb3J0IGZvciBTTUMgc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdG9vbHMgc3VjaCBhc1xcbiAgMTk6XFx0XFx0ICBzbWNzcy5cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMzowMDozNi4xNjI3NTM1NThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcyNTU3MTE0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipOYXZpZ2F0aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIFF1aXJrcyoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgdGhpcyB0ZXJtIGBESUJTYCBwb3AgdXAsIGFuZCBmcmFua2x5LCBJJ20gZHJhd2luZyBhIGJsYW5rLiBJdCdzIHVuZmFtaWxpYXIuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGFuY2hvciBteXNlbGYgaW4gd2hhdCBJICpkbyoga25vdy4gTGV0IG1lIGNvbmZpcm0gbXkgZW5hYmxpbmcgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgSSdtIHByZXR0eSBzdXJlIGBTTUNgLCBgSU5GSU5JQkFORGAsIGFuZCBgSU5FVGAgYXJlIGludm9sdmVkLiBOb3csIGxldCdzIHRyYWNlIHRoaXMgYERJQlNgIGRvd24gdGhlIHJhYmJpdCBob2xlLlxuXG5JJ2xsIGRpdmUgaW50byB0aGUga2VybmVsIHRyZWUuIEkgbWlnaHQgaGF2ZSBtaXNyZWFkIGl0LCBvciwgaXQncyBhIHR5cG8sIG5vLi4uIGl0J3MgdGhlcmUuIEhtbSwgY291bGQgaXQgYmUgcmVsYXRlZCB0byBgSVBWNmA/IE9rYXksIEknbGwgY2hlY2sgYG5ldC9zbWMvS2NvbmZpZ2AgaW4gdGhlIG1haW5saW5lIGtlcm5lbC4gTWFpbmxpbmUgY29uZmlybXMgYGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgSVBWNmAuIFN0aWxsLCB0aGUgcXVlc3Rpb24gb2YgYERJQlNgIGxpbmdlcnMuXG5cbldhaXQsIGlzIHRoaXMgYSB0cmVlLXNwZWNpZmljIHRoaW5nIHRoZW4/IEl0ICppcyogaW4gdGhlIGZpbGUuIEFscmlnaHQsIGxldCdzIGN1dCB0aGUgR29yZGlhbiBLbm90IGFuZCBmaWd1cmUgb3V0IHdoYXQgYERJQlNgICppcyouIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBuZXcgZGVwZW5kZW5jeSBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNTEsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMzowMDo0MS44ODgzMjY5NTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTk2ODcwNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERJQlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZGlicy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvZGlicy9LY29uZmlnOjI6Y29uZmlnIERJQlNcXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvZGlicy9LY29uZmlnLTEzLVxcbmRyaXZlcnMvZGlicy9LY29uZmlnOjE0OmNvbmZpZyBESUJTX0xPXFxuZHJpdmVycy9kaWJzL0tjb25maWctMTUtXFx0Ym9vbCBcXFwiSW50cmEtT1Mgc2hvcnRjdXQgd2l0aCBkaWJzIGxvb3BiYWNrXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMzowMDo0My42ODgwMTg0ODlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI0MTkzMTYyNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNNQyBEZXBlbmRlbmN5IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGFuZCBpdCdzIGNsZWFyIHRoYXQgYERJQlNgIHN0YW5kcyBmb3IgRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nLiBHb3QgaXQuIE5vdywgZnJvbSB3aGF0IEknbSBzZWVpbmcsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGBTTUNgLCBgSU5GSU5JQkFORGAsIGFuZCBgRElCU2AuIEhvbGQgb24uLi4gaXQgbG9va3MgbGlrZSBgRElCU2AgaXMgYWN0dWFsbHkgKnJlcXVpcmVkKiBmb3IgYFNNQ2Agd2l0aGluIHRoaXMgcGFydGljdWxhciB0cmVlLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gTGV0J3MgY29uZmlybSBpZiBgU01DYCBuZWNlc3NpdGF0ZXMgYElORklOSUJBTkRgIHRvby4gWWVwLCBjb25maXJtZWQuXG5cblRoZXJlZm9yZSwgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IHNob3VsZCBkZWZpbml0ZWx5IGJlIGBbXCJTTUNcIiwgXCJJTkZJTklCQU5EXCIsIFwiRElCU1wiXWAuIFRoYXQgc2VlbXMgbG9naWNhbCBhbmQgaXMgdGhlIHNhZmVzdCBvcHRpb24uXG5cbk5vdywgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBmdW5jdGlvbnMuIExldCdzIHRha2UgYSBsb29rIGF0IGBfX3NtY19jb25uZWN0YCwgYHNtY19saXN0ZW5fd29ya2AsIGBzbWNfcG5ldF9kZXRlcm1pbmVfZ2lkYCwgYW5kIGBzbWNfaWJfcmVtb3ZlX2RldmAuIEFyZSB0aGVyZSBhbnkgb3RoZXJzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBBaCwgaGVyZSdzIG9uZTogYHNtY19pbml0X2luZm9fZnJlZWAuIEl0J3MgYSBub24tc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyB1c2VmdWwgdG8ga25vdy4gQW5kIHRoZW4gdGhlcmUncyBgc21jX2xsY19jbGlfYWRkX2xpbmtgIGFuZCBgc21jX2xsY19zcnZfYWRkX2xpbmtgLlxuXG5SaWdodCwgbGV0J3MgY3JlYXRlIGEgc29saWQgbGlzdCBvZiB0aGUgZm9jdXMgc3ltYm9scywgdG8ga2VlcCBtZSBvbiB0cmFjazpcbmBfX3NtY19jb25uZWN0YCwgYHNtY19saXN0ZW5fd29ya2AsIGBzbWNfcG5ldF9kZXRlcm1pbmVfZ2lkYCwgYHNtY19pYl9yZW1vdmVfZGV2YCwgYHNtY19sbGNfY2xpX2FkZF9saW5rYCwgYHNtY19sbGNfc3J2X2FkZF9saW5rYC5cblxuRmluYWxseSwgdG8gYmUgYWJzb2x1dGVseSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIHZlcmlmeSBpZiBgc21jX3BuZXRfZGV0ZXJtaW5lX2dpZGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIEp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3NTcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTM6MDA6NTYuMTA3MzM3Nzc1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzcwMjM0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfcG5ldF9kZXRlcm1pbmVfZ2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvc21jX3BuZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19wbmV0LmM9OTUxPXN0YXRpYyBpbnQgc21jX3BuZXRfZmluZF9uZGV2X3BuZXRpZF9ieV90YWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4tLVxcbm5ldC9zbWMvc21jX3BuZXQuYy05NzYtXFxubmV0L3NtYy9zbWNfcG5ldC5jOjk3NzpzdGF0aWMgaW50IHNtY19wbmV0X2RldGVybWluZV9naWQoc3RydWN0IHNtY19pYl9kZXZpY2UgKmliZGV2LCBpbnQgaSxcXG5uZXQvc21jL3NtY19wbmV0LmMtOTc4LVxcdFxcdFxcdFxcdCAgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcXG4tLVxcbm5ldC9zbWMvc21jX3BuZXQuYz0xMDA2PXN0YXRpYyB2b2lkIF9zbWNfcG5ldF9maW5kX3JvY2VfYnlfcG5ldGlkKHU4ICpwbmV0X2lkLFxcbi0tXFxubmV0L3NtYy9zbWNfcG5ldC5jLTEwMjQtXFx0XFx0XFx0ICAgICF0ZXN0X2JpdChpIC0gMSwgaWJkZXYtXFx1MDAzZXBvcnRzX2dvaW5nX2F3YXkpKSB7XFxubmV0L3NtYy9zbWNfcG5ldC5jOjEwMjU6XFx0XFx0XFx0XFx0aWYgKCFzbWNfcG5ldF9kZXRlcm1pbmVfZ2lkKGliZGV2LCBpLCBpbmkpKVxcbm5ldC9zbWMvc21jX3BuZXQuYy0xMDI2LVxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L3NtYy9zbWNfcG5ldC5jPTEwNDc9c3RhdGljIHZvaWQgc21jX3BuZXRfZmluZF9yZG1hX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxubmV0L3NtYy9zbWNfcG5ldC5jLTEwNzEtXFx0XFx0XFx0ICAgICF0ZXN0X2JpdChpIC0gMSwgaWJkZXYtXFx1MDAzZXBvcnRzX2dvaW5nX2F3YXkpKSB7XFxubmV0L3NtYy9zbWNfcG5ldC5jOjEwNzI6XFx0XFx0XFx0XFx0aWYgKCFzbWNfcG5ldF9kZXRlcm1pbmVfZ2lkKGliZGV2LCBpLCBpbmkpKVxcbm5ldC9zbWMvc21jX3BuZXQuYy0xMDczLVxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMzowMDo1Ni4xNTEwNDY4NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDA5NzQzNTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnVuY3Rpb24ncyBTdGF0aWMgTmF0dXJlKipcblxuT2theSwgc28gdGhlIHByb21wdCBlbXBoYXNpemVzIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGF0IGBzbWNfcG5ldF9kZXRlcm1pbmVfZ2lkYCBpcyAqc3RhdGljKi4gVGhhdCdzIHRoZSBmaXJzdCByZWQgZmxhZy4gVGhlIGNvbXBpbGVyIHR5cGljYWxseSBpbmxpbmVzIHRoZXNlLCB3aGljaCBtZWFucyB0aGV5IHdvbid0IGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgbWFraW5nIGRlYnVnZ2luZyBvciBleHRlcm5hbCBhY2Nlc3MgcHJvYmxlbWF0aWMuIFRpbWUgdG8gaW52ZXN0aWdhdGUuIExldCdzIHRyYWNlIGl0cyBjYWxsZXJzLiBBaGEsIGJvdGggYF9zbWNfcG5ldF9maW5kX3JvY2VfYnlfcG5ldGlkYCBhbmQgYHNtY19wbmV0X2ZpbmRfcmRtYV9kZXZgIGFyZSBhbHNvIHN0YXRpYy4gVGhpcyBjb25maXJtcyBteSBpbml0aWFsIGNvbmNlcm4uIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGlkZW50aWZ5IGFueSBub24tc3RhdGljIGFsdGVybmF0aXZlcyBvciBkZXRlcm1pbmUgdGhlIGp1c3RpZmljYXRpb24gZm9yIHdoeSB0aGVzZSBhcmUgc3RhdGljLCBnaXZlbiB0aGUgZ3VpZGVsaW5lcy4gVGhlIHNlYXJjaCBmb3IgYSBub24tc3RhdGljIG9wdGlvbiBiZWdpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTQ5LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAxOjA0LjE2MDc5Mzk4MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwODEzNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX3BuZXRfZmluZF9yZG1hX2RldlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL3NtY19wbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfcG5ldC5jPTEwMzU9dm9pZCBzbWNfcG5ldF9maW5kX2FsdF9yb2NlKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxcbi0tXFxubmV0L3NtYy9zbWNfcG5ldC5jLTEwNDYtICovXFxubmV0L3NtYy9zbWNfcG5ldC5jOjEwNDc6c3RhdGljIHZvaWQgc21jX3BuZXRfZmluZF9yZG1hX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbm5ldC9zbWMvc21jX3BuZXQuYy0xMDQ4LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXFxuLS1cXG5uZXQvc21jL3NtY19wbmV0LmM9MTA4Nj1zdGF0aWMgdm9pZCBzbWNfcG5ldF9maW5kX3JvY2VfYnlfcG5ldGlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxubmV0L3NtYy9zbWNfcG5ldC5jLTEwOTgtXFx0ICAgIHNtY19wbmV0X2ZpbmRfbmRldl9wbmV0aWRfYnlfdGFibGUobmRldiwgbmRldl9wbmV0aWQpKSB7XFxubmV0L3NtYy9zbWNfcG5ldC5jOjEwOTk6XFx0XFx0c21jX3BuZXRfZmluZF9yZG1hX2RldihiYXNlX25kZXYsIGluaSk7XFxubmV0L3NtYy9zbWNfcG5ldC5jLTExMDAtXFx0XFx0cmV0dXJuOyAvKiBwbmV0aWQgY291bGQgbm90IGJlIGRldGVybWluZWQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTM6MDE6MDQuMjA0ODg0MzE3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5ODU5ODgxMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgc21jX3BuZXRfZmluZF9yb2NlX2J5X3BuZXRpZGAgQ2FsbGVycyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgc21jX3BuZXRfZmluZF9yb2NlX2J5X3BuZXRpZGAuIFRpbWUgdG8gdHJhY2UgZG93biBpdHMgY2FsbGVycy4gSSdtIHRoaW5raW5nLCB0aGlzIGlzIHByb2JhYmx5IGEgZnVuY3Rpb24gdGhhdCBsb29rcyB1cCBSb0NFIGluZm9ybWF0aW9uIGJhc2VkIG9uIGEgUE5FVCBJRCwgc28gSSBuZWVkIHRvIHNlZSAqd2hvKiBpcyBtYWtpbmcgdGhlc2UgY2FsbHMuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzLCBwZXJoYXBzIHdpdGhpbiB0aGUgUkRNQSBzdGFjaywgb3Igc29tZXRoaW5nIGhpZ2hlci1sZXZlbCBsaWtlIGFuIGFwcGxpY2F0aW9uIHRyeWluZyB0byB1dGlsaXplIFJvQ0U/IFRoZSBjYWxsZXIgY29udGV4dCB3aWxsIHJlYWxseSBnaXZlIG1lIHRoZSBjbHVlcyBJIG5lZWQuIExldCdzIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBjaGVjayDigJMgbWF5YmUgYSBzdGF0aWMgYW5hbHlzaXMgb3IgZ3JlcCB0aHJvdWdoIHRoZSBjb2RlYmFzZSwgdG8gaWRlbnRpZnkgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIGFuZCBhbnkgcmVsZXZhbnQgcGFyYW1ldGVycyBwYXNzZWQuIElzIHRoZXJlIGFueSBleGlzdGluZyBkb2N1bWVudGF0aW9uIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiB0aGlzPyBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgaGVscCBtZSBkZXRlcm1pbmU6IGFyZSB3ZSBsb29raW5nIGF0IGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgYSBwb3RlbnRpYWwgZXJyb3Igc291cmNlLCBvciBhIGNyaXRpY2FsIGRhdGEgcGF0aD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIHBhcmFtb3VudCBiZWZvcmUgSSBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjYzMCwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAxOjA5LjE5MDg3NDc3MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM3NTY4MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX3BuZXRfZmluZF9yb2NlX2J5X3BuZXRpZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL3NtY19wbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfcG5ldC5jPTk3Nz1zdGF0aWMgaW50IHNtY19wbmV0X2RldGVybWluZV9naWQoc3RydWN0IHNtY19pYl9kZXZpY2UgKmliZGV2LCBpbnQgaSxcXG4tLVxcbm5ldC9zbWMvc21jX3BuZXQuYy0xMDA1LS8qIGZpbmQgYSByb2NlIGRldmljZSBmb3IgdGhlIGdpdmVuIHBuZXRpZCAqL1xcbm5ldC9zbWMvc21jX3BuZXQuYzoxMDA2OnN0YXRpYyB2b2lkIF9zbWNfcG5ldF9maW5kX3JvY2VfYnlfcG5ldGlkKHU4ICpwbmV0X2lkLFxcbm5ldC9zbWMvc21jX3BuZXQuYy0xMDA3LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSxcXG4tLVxcbm5ldC9zbWMvc21jX3BuZXQuYz0xMDM1PXZvaWQgc21jX3BuZXRfZmluZF9hbHRfcm9jZShzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcXG4tLVxcbm5ldC9zbWMvc21jX3BuZXQuYy0xMDQwLVxcbm5ldC9zbWMvc21jX3BuZXQuYzoxMDQxOlxcdF9zbWNfcG5ldF9maW5kX3JvY2VfYnlfcG5ldGlkKGxnci1cXHUwMDNlcG5ldF9pZCwgaW5pLCBrbm93bl9kZXYsIG5ldCk7XFxubmV0L3NtYy9zbWNfcG5ldC5jLTEwNDItfVxcbi0tXFxubmV0L3NtYy9zbWNfcG5ldC5jPTEwNDc9c3RhdGljIHZvaWQgc21jX3BuZXRfZmluZF9yZG1hX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxubmV0L3NtYy9zbWNfcG5ldC5jLTEwODUtICovXFxubmV0L3NtYy9zbWNfcG5ldC5jOjEwODY6c3RhdGljIHZvaWQgc21jX3BuZXRfZmluZF9yb2NlX2J5X3BuZXRpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG5uZXQvc21jL3NtY19wbmV0LmMtMTA4Ny1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcXG4tLVxcbm5ldC9zbWMvc21jX3BuZXQuYy0xMTAxLVxcdH1cXG5uZXQvc21jL3NtY19wbmV0LmM6MTEwMjpcXHRfc21jX3BuZXRfZmluZF9yb2NlX2J5X3BuZXRpZChuZGV2X3BuZXRpZCwgaW5pLCBOVUxMLCBuZXQpO1xcbm5ldC9zbWMvc21jX3BuZXQuYy0xMTAzLX1cXG4tLVxcbm5ldC9zbWMvc21jX3BuZXQuYz0xMTM1PXZvaWQgc21jX3BuZXRfZmluZF9yb2NlX3Jlc291cmNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcXG4tLVxcbm5ldC9zbWMvc21jX3BuZXQuYy0xMTQ2LVxcdGlmIChkZXYpIHtcXG5uZXQvc21jL3NtY19wbmV0LmM6MTE0NzpcXHRcXHRzbWNfcG5ldF9maW5kX3JvY2VfYnlfcG5ldGlkKGRldiwgaW5pKTtcXG5uZXQvc21jL3NtY19wbmV0LmMtMTE0OC1cXHRcXHRkZXZfcHV0KGRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAxOjA5LjIzNDYzODQ0N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDc5OTIzNTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgQVBJIEVudHJ5cG9pbnRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHByZWZlcnJlZCBBUEkgZW50cnlwb2ludHMgYmFzZWQgb24gdGhlIGd1aWRlbGluZSBvZiBwcmlvcml0aXppbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlcnMuXG5cbkZpcnN0LCBJIHNlZSB0aGF0IGBzbWNfcG5ldF9maW5kX3JvY2VfcmVzb3VyY2VgIGFuZCBgc21jX3BuZXRfZmluZF9hbHRfcm9jZWAgYXJlIGFscmVhZHkgbm9uLXN0YXRpYywgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIGxldCdzIHRyYWNlIHRocm91Z2ggdGhlIG90aGVyIGZ1bmN0aW9ucy5cblxuYF9fc21jX2Nvbm5lY3RgIGlzIHN0YXRpYywgc28gSSBpbW1lZGlhdGVseSBuZWVkIHRvIGludmVzdGlnYXRlIGl0cyBjYWxsZXJzLiAgSSBzZWUgYHNtY19jb25uZWN0YCBhbmQgYHNtY19jb25uZWN0X3dvcmtgIGNhbGxpbmcgaXQuIEJ1dCwgY3JpdGljYWxseSwgYHNtY19jb25uZWN0YCBpdHNlbGYgaXMgbm9uLXN0YXRpYy4gQmluZ28hIFRoaXMgaXMgbGlrZWx5IGEgZ29vZCBjYW5kaWRhdGUuXG5cbk5leHQsIGBzbWNfbGlzdGVuX3dvcmtgIGlzIHN0YXRpYywgYW5kIGl0J3MgYSB3b3JrcXVldWUgZnVuY3Rpb24uIEl0J3MgaW5pdGlhbGl6ZWQgaW4gYHNtY190Y3BfbGlzdGVuX3dvcmtgLCB3aGlsZSBgc21jX2xpc3RlbmAgaXMgbm9uLXN0YXRpYy4gU28sIGBzbWNfbGlzdGVuYCBsb29rcyBsaWtlIHRoZSBiZXR0ZXIgY2hvaWNlIGhlcmUuXG5cbk5vdywgbGV0J3MgbW92ZSBvbiB0byBgc21jX2liX3JlbW92ZV9kZXZgLiBJdCdzIHN0YXRpYywgYW5kIGl0J3MgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCdzIGFuIElCIGNsaWVudCBjYWxsYmFjayByZWdpc3RlcmVkIHZpYSBgaWJfcmVnaXN0ZXJfY2xpZW50YC4gU2luY2UgaXQncyBhIGZ1bmN0aW9uIHBvaW50ZXIsIGl0IHdvbid0IGJlIGlubGluZWQuIFRoYXQgbWVhbnMgaXQgd2lsbCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIG1ha2luZyBpdCBhIHZpYWJsZSBvcHRpb24gZGVzcGl0ZSBiZWluZyBzdGF0aWMuIFRoZSBmYWN0IHRoYXQgaXQncyAqbm90KiBpbmxpbmVkIGlzIGtleSBoZXJlLCBhY2NvcmRpbmcgdG8gdGhlIHByb21wdC4gSSBjb3VsZCBhbHNvIHVzZSBgc21jX2liX2FkZF9kZXZgIGJ1dCBJJ2xsIHN0aWNrIHdpdGggYHNtY19pYl9yZW1vdmVfZGV2YCBmb3Igbm93LlxuXG5GaW5hbGx5LCBgc21jX2xsY19jbGlfYWRkX2xpbmtgIGFuZCBgc21jX2xsY19zcnZfYWRkX2xpbmtgIGFyZSB0aGFua2Z1bGx5IG5vbi1zdGF0aWMsIHNvIHdlJ3JlIGdvb2QgdGhlcmUuXG5cblNvLCBzdW1taW5nIGl0IHVwLCBteSBmb2N1cyBzeW1ib2xzLCBiYXNlZCBvbiB0aGUgbm9uLXN0YXRpYy9ub24taW5saW5lZCBwcmVmZXJlbmNlLCBhcmUgbm93OlxuXG4qICAgYHNtY19jb25uZWN0YFxuKiAgIGBzbWNfbGlzdGVuYFxuKiAgIGBzbWNfcG5ldF9maW5kX3JvY2VfcmVzb3VyY2VgXG4qICAgYHNtY19wbmV0X2ZpbmRfYWx0X3JvY2VgXG4qICAgYHNtY19pYl9yZW1vdmVfZGV2YFxuKiAgIGBzbWNfbGxjX2NsaV9hZGRfbGlua2BcbiogICBgc21jX2xsY19zcnZfYWRkX2xpbmtgXG5cbkknbGwgd2FudCB0byB2ZXJpZnkgdGhlIGRldGFpbHMgYXJvdW5kIGBzbWNfY29ubmVjdGAgYW5kIGBzbWNfbGlzdGVuYCB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGVpciBiZWhhdmlvciBhbmQgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MjksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTM6MDE6MTguMzE0NTY1MTM4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDgxMzMwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfY29ubmVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL2FmX3NtYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvYWZfc21jLmM9NzM9c3RhdGljIHZvaWQgc21jX3RjcF9saXN0ZW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7XFxubmV0L3NtYy9hZl9zbWMuYzo3NDpzdGF0aWMgdm9pZCBzbWNfY29ubmVjdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTtcXG5uZXQvc21jL2FmX3NtYy5jLTc1LVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0zMjg9aW50IHNtY19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTM0Ni1cXHRpZiAoY2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2c21jLVxcdTAwM2Vjb25uZWN0X3dvcmspKVxcbm5ldC9zbWMvYWZfc21jLmM6MzQ3OlxcdFxcdHNvY2tfcHV0KFxcdTAwMjZzbWMtXFx1MDAzZXNrKTsgLyogc29ja19ob2xkIGluIHNtY19jb25uZWN0IGZvciBwYXNzaXZlIGNsb3NpbmcgKi9cXG5uZXQvc21jL2FmX3NtYy5jLTM0OC1cXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9Mzk1PXZvaWQgc21jX3NrX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIGludCBwcm90b2NvbClcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtNDA0LVxcdElOSVRfV09SSyhcXHUwMDI2c21jLVxcdTAwM2V0Y3BfbGlzdGVuX3dvcmssIHNtY190Y3BfbGlzdGVuX3dvcmspO1xcbm5ldC9zbWMvYWZfc21jLmM6NDA1OlxcdElOSVRfV09SSyhcXHUwMDI2c21jLVxcdTAwM2Vjb25uZWN0X3dvcmssIHNtY19jb25uZWN0X3dvcmspO1xcbm5ldC9zbWMvYWZfc21jLmMtNDA2LVxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZzbWMtXFx1MDAzZWNvbm4udHhfd29yaywgc21jX3R4X3dvcmspO1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz05MzE9c3RhdGljIGludCBzbWNfc3dpdGNoX3RvX2ZhbGxiYWNrKHN0cnVjdCBzbWNfc29jayAqc21jLCBpbnQgcmVhc29uX2NvZGUpXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTk2My0vKiBmYWxsIGJhY2sgZHVyaW5nIGNvbm5lY3QgKi9cXG5uZXQvc21jL2FmX3NtYy5jOjk2NDpzdGF0aWMgaW50IHNtY19jb25uZWN0X2ZhbGxiYWNrKHN0cnVjdCBzbWNfc29jayAqc21jLCBpbnQgcmVhc29uX2NvZGUpXFxubmV0L3NtYy9hZl9zbWMuYy05NjUte1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy05ODMtLyogZGVjbGluZSBhbmQgZmFsbCBiYWNrIGR1cmluZyBjb25uZWN0ICovXFxubmV0L3NtYy9hZl9zbWMuYzo5ODQ6c3RhdGljIGludCBzbWNfY29ubmVjdF9kZWNsaW5lX2ZhbGxiYWNrKHN0cnVjdCBzbWNfc29jayAqc21jLCBpbnQgcmVhc29uX2NvZGUsXFxubmV0L3NtYy9hZl9zbWMuYy05ODUtXFx0XFx0XFx0XFx0XFx0dTggdmVyc2lvbilcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMTAwNC1cXHR9XFxubmV0L3NtYy9hZl9zbWMuYzoxMDA1OlxcdHJldHVybiBzbWNfY29ubmVjdF9mYWxsYmFjayhzbWMsIHJlYXNvbl9jb2RlKTtcXG5uZXQvc21jL2FmX3NtYy5jLTEwMDYtfVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0xMDA4PXN0YXRpYyB2b2lkIHNtY19jb25uX2Fib3J0KHN0cnVjdCBzbWNfc29jayAqc21jLCBpbnQgbG9jYWxfZmlyc3QpXFxubmV0L3NtYy9hZl9zbWMuYy0xMDA5LXtcXG5uZXQvc21jL2FmX3NtYy5jOjEwMTA6XFx0c3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uID0gXFx1MDAyNnNtYy1cXHUwMDNlY29ubjtcXG5uZXQvc21jL2FmX3NtYy5jLTEwMTEtXFx0c3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IgPSBjb25uLVxcdTAwM2VsZ3I7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jPTEwNjY9c3RhdGljIGludCBzbWNfZmluZF9pc21fdjJfZGV2aWNlX2NsbnQoc3RydWN0IHNtY19zb2NrICpzbWMsXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTExMTItLyogQ2hlY2sgZm9yIFZMQU4gSUQgYW5kIHJlZ2lzdGVyIGl0IG9uIElTTSBkZXZpY2UganVzdCBmb3IgQ0xDIGhhbmRzaGFrZSAqL1xcbm5ldC9zbWMvYWZfc21jLmM6MTExMzpzdGF0aWMgaW50IHNtY19jb25uZWN0X2lzbV92bGFuX3NldHVwKHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXFxubmV0L3NtYy9hZl9zbWMuYy0xMTE0LXtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MTEyMD1zdGF0aWMgaW50IHNtY19maW5kX3Byb3Bvc2FsX2RldmljZXMoc3RydWN0IHNtY19zb2NrICpzbWMsXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTExMjctXFx0ICAgIHNtY19maW5kX2lzbV9kZXZpY2Uoc21jLCBpbmkpIHx8XFxubmV0L3NtYy9hZl9zbWMuYzoxMTI4OlxcdCAgICBzbWNfY29ubmVjdF9pc21fdmxhbl9zZXR1cChpbmkpKVxcbm5ldC9zbWMvYWZfc21jLmMtMTEyOS1cXHRcXHRpbmktXFx1MDAzZXNtY2RfdmVyc2lvbiBcXHUwMDI2PSB+U01DX1YxO1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xMTcyLSAqL1xcbm5ldC9zbWMvYWZfc21jLmM6MTE3MzpzdGF0aWMgaW50IHNtY19jb25uZWN0X2lzbV92bGFuX2NsZWFudXAoc3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcXG5uZXQvc21jL2FmX3NtYy5jLTExNzQte1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xMTg3LS8qIENMQyBoYW5kc2hha2UgZHVyaW5nIGNvbm5lY3QgKi9cXG5uZXQvc21jL2FmX3NtYy5jOjExODg6c3RhdGljIGludCBzbWNfY29ubmVjdF9jbGMoc3RydWN0IHNtY19zb2NrICpzbWMsXFxubmV0L3NtYy9hZl9zbWMuYy0xMTg5LVxcdFxcdFxcdCAgIHN0cnVjdCBzbWNfY2xjX21zZ19hY2NlcHRfY29uZmlybSAqYWNsYyxcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MTIwMz12b2lkIHNtY19maWxsX2dpZF9saXN0KHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xMjMwLVxcbm5ldC9zbWMvYWZfc21jLmM6MTIzMTpzdGF0aWMgaW50IHNtY19jb25uZWN0X3JkbWFfdjJfcHJlcGFyZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcXG5uZXQvc21jL2FmX3NtYy5jLTEyMzItXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzbWNfY2xjX21zZ19hY2NlcHRfY29uZmlybSAqYWNsYyxcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMTI2Ni0vKiBzZXR1cCBmb3IgUkRNQSBjb25uZWN0aW9uIG9mIGNsaWVudCAqL1xcbm5ldC9zbWMvYWZfc21jLmM6MTI2NzpzdGF0aWMgaW50IHNtY19jb25uZWN0X3JkbWEoc3RydWN0IHNtY19zb2NrICpzbWMsXFxubmV0L3NtYy9hZl9zbWMuYy0xMjY4LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc21jX2NsY19tc2dfYWNjZXB0X2NvbmZpcm0gKmFjbGMsXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTEyODMtXFxubmV0L3NtYy9hZl9zbWMuYzoxMjg0OlxcdHJlYXNvbl9jb2RlID0gc21jX2Nvbm5lY3RfcmRtYV92Ml9wcmVwYXJlKHNtYywgYWNsYywgaW5pKTtcXG5uZXQvc21jL2FmX3NtYy5jLTEyODUtXFx0aWYgKHJlYXNvbl9jb2RlKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0xMzk5PXNtY192Ml9kZXRlcm1pbmVfYWNjZXB0ZWRfY2hpZChzdHJ1Y3Qgc21jX2NsY19tc2dfYWNjZXB0X2NvbmZpcm0gKmFjbGMsXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE0MTUtLyogc2V0dXAgZm9yIElTTSBjb25uZWN0aW9uIG9mIGNsaWVudCAqL1xcbm5ldC9zbWMvYWZfc21jLmM6MTQxNjpzdGF0aWMgaW50IHNtY19jb25uZWN0X2lzbShzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcXG5uZXQvc21jL2FmX3NtYy5jLTE0MTctXFx0XFx0XFx0ICAgc3RydWN0IHNtY19jbGNfbXNnX2FjY2VwdF9jb25maXJtICphY2xjLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xNDk4LS8qIGNoZWNrIGlmIHJlY2VpdmVkIGFjY2VwdCB0eXBlIGFuZCB2ZXJzaW9uIG1hdGNoZXMgYSBwcm9wb3NlZCBvbmUgKi9cXG5uZXQvc21jL2FmX3NtYy5jOjE0OTk6c3RhdGljIGludCBzbWNfY29ubmVjdF9jaGVja19hY2xjKHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmksXFxubmV0L3NtYy9hZl9zbWMuYy0xNTAwLVxcdFxcdFxcdFxcdCAgc3RydWN0IHNtY19jbGNfbXNnX2FjY2VwdF9jb25maXJtICphY2xjKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xNTE5LS8qIHBlcmZvcm0gc3RlcHMgYmVmb3JlIGFjdHVhbGx5IGNvbm5lY3RpbmcgKi9cXG5uZXQvc21jL2FmX3NtYy5jOjE1MjA6c3RhdGljIGludCBfX3NtY19jb25uZWN0KHN0cnVjdCBzbWNfc29jayAqc21jKVxcbm5ldC9zbWMvYWZfc21jLmMtMTUyMS17XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE1MjgtXFx0aWYgKHNtYy1cXHUwMDNldXNlX2ZhbGxiYWNrKVxcbm5ldC9zbWMvYWZfc21jLmM6MTUyOTpcXHRcXHRyZXR1cm4gc21jX2Nvbm5lY3RfZmFsbGJhY2soc21jLCBzbWMtXFx1MDAzZWZhbGxiYWNrX3Jzbik7XFxubmV0L3NtYy9hZl9zbWMuYy0xNTMwLVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xNTMyLVxcdGlmICghdGNwX3NrKHNtYy1cXHUwMDNlY2xjc29jay1cXHUwMDNlc2spLVxcdTAwM2VzeW5fc21jKVxcbm5ldC9zbWMvYWZfc21jLmM6MTUzMzpcXHRcXHRyZXR1cm4gc21jX2Nvbm5lY3RfZmFsbGJhY2soc21jLCBTTUNfQ0xDX0RFQ0xfUEVFUk5PU01DKTtcXG5uZXQvc21jL2FmX3NtYy5jLTE1MzQtXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE1MzYtXFx0aWYgKHVzaW5nX2lwc2VjKHNtYykpXFxubmV0L3NtYy9hZl9zbWMuYzoxNTM3OlxcdFxcdHJldHVybiBzbWNfY29ubmVjdF9kZWNsaW5lX2ZhbGxiYWNrKHNtYywgU01DX0NMQ19ERUNMX0lQU0VDLFxcbm5ldC9zbWMvYWZfc21jLmMtMTUzOC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgdmVyc2lvbik7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE1NDEtXFx0aWYgKCFpbmkpXFxubmV0L3NtYy9hZl9zbWMuYzoxNTQyOlxcdFxcdHJldHVybiBzbWNfY29ubmVjdF9kZWNsaW5lX2ZhbGxiYWNrKHNtYywgU01DX0NMQ19ERUNMX01FTSxcXG5uZXQvc21jL2FmX3NtYy5jLTE1NDMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHZlcnNpb24pO1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xNTY4LVxcdC8qIHBlcmZvcm0gQ0xDIGhhbmRzaGFrZSAqL1xcbm5ldC9zbWMvYWZfc21jLmM6MTU2OTpcXHRyYyA9IHNtY19jb25uZWN0X2NsYyhzbWMsIGFjbGMsIGluaSk7XFxubmV0L3NtYy9hZl9zbWMuYy0xNTcwLVxcdGlmIChyYykge1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xNTc5LVxcdC8qIGNoZWNrIGlmIHNtYyBtb2RlcyBhbmQgdmVyc2lvbnMgb2YgQ0xDIHByb3Bvc2FsIGFuZCBhY2NlcHQgbWF0Y2ggKi9cXG5uZXQvc21jL2FmX3NtYy5jOjE1ODA6XFx0cmMgPSBzbWNfY29ubmVjdF9jaGVja19hY2xjKGluaSwgYWNsYyk7XFxubmV0L3NtYy9hZl9zbWMuYy0xNTgxLVxcdHZlcnNpb24gPSBhY2xjLVxcdTAwM2VoZHIudmVyc2lvbiA9PSBTTUNfVjEgPyBTTUNfVjEgOiBTTUNfVjI7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE1ODctXFx0XFx0aW5pLVxcdTAwM2VzbWNyX3ZlcnNpb24gPSB2ZXJzaW9uO1xcbm5ldC9zbWMvYWZfc21jLmM6MTU4ODpcXHRcXHRyYyA9IHNtY19jb25uZWN0X3JkbWEoc21jLCBhY2xjLCBpbmkpO1xcbm5ldC9zbWMvYWZfc21jLmMtMTU4OS1cXHR9IGVsc2UgaWYgKGFjbGMtXFx1MDAzZWhkci50eXBldjEgPT0gU01DX1RZUEVfRCkge1xcbm5ldC9zbWMvYWZfc21jLmMtMTU5MC1cXHRcXHRpbmktXFx1MDAzZXNtY2RfdmVyc2lvbiA9IHZlcnNpb247XFxubmV0L3NtYy9hZl9zbWMuYzoxNTkxOlxcdFxcdHJjID0gc21jX2Nvbm5lY3RfaXNtKHNtYywgYWNsYywgaW5pKTtcXG5uZXQvc21jL2FmX3NtYy5jLTE1OTItXFx0fVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xNTk2LVxcdFNNQ19TVEFUX0NMTlRfU1VDQ19JTkMoc29ja19uZXQoc21jLVxcdTAwM2VjbGNzb2NrLVxcdTAwM2VzayksIGFjbGMpO1xcbm5ldC9zbWMvYWZfc21jLmM6MTU5NzpcXHRzbWNfY29ubmVjdF9pc21fdmxhbl9jbGVhbnVwKGluaSk7XFxubmV0L3NtYy9hZl9zbWMuYy0xNTk4LVxcdGtmcmVlKGJ1Zik7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE2MDItdmxhbl9jbGVhbnVwOlxcbm5ldC9zbWMvYWZfc21jLmM6MTYwMzpcXHRzbWNfY29ubmVjdF9pc21fdmxhbl9jbGVhbnVwKGluaSk7XFxubmV0L3NtYy9hZl9zbWMuYy0xNjA0LVxcdGtmcmVlKGJ1Zik7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE2MDYtXFx0c21jX2luaXRfaW5mb19mcmVlKGluaSk7XFxubmV0L3NtYy9hZl9zbWMuYzoxNjA3OlxcdHJldHVybiBzbWNfY29ubmVjdF9kZWNsaW5lX2ZhbGxiYWNrKHNtYywgcmMsIHZlcnNpb24pO1xcbm5ldC9zbWMvYWZfc21jLmMtMTYwOC19XFxubmV0L3NtYy9hZl9zbWMuYy0xNjA5LVxcbm5ldC9zbWMvYWZfc21jLmM6MTYxMDpzdGF0aWMgdm9pZCBzbWNfY29ubmVjdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvc21jL2FmX3NtYy5jLTE2MTEte1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xNjM5LVxcbm5ldC9zbWMvYWZfc21jLmM6MTY0MDpcXHRyYyA9IF9fc21jX2Nvbm5lY3Qoc21jKTtcXG5uZXQvc21jL2FmX3NtYy5jLTE2NDEtXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMTY1NS1cXG5uZXQvc21jL2FmX3NtYy5jOjE2NTY6aW50IHNtY19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbm5ldC9zbWMvYWZfc21jLmMtMTY1Ny1cXHRcXHRpbnQgYWxlbiwgaW50IGZsYWdzKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xNzIyLVxcdH0gZWxzZSB7XFxubmV0L3NtYy9hZl9zbWMuYzoxNzIzOlxcdFxcdHJjID0gX19zbWNfY29ubmVjdChzbWMpO1xcbm5ldC9zbWMvYWZfc21jLmMtMTcyNC1cXHRcXHRpZiAocmMgXFx1MDAzYyAwKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0yMjgxPXN0YXRpYyBpbnQgc21jX2xpc3Rlbl9yZG1hX3JlZyhzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMsIGJvb2wgbG9jYWxfZmlyc3QpXFxubmV0L3NtYy9hZl9zbWMuYy0yMjgyLXtcXG5uZXQvc21jL2FmX3NtYy5jOjIyODM6XFx0c3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uID0gXFx1MDAyNm5ld19zbWMtXFx1MDAzZWNvbm47XFxubmV0L3NtYy9hZl9zbWMuYy0yMjg0LVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0zMTk5PWludCBzbWNfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMzIwMi1cXHR1bmlvbiBzbWNfaG9zdF9jdXJzb3IgY29ucywgdXJnO1xcbm5ldC9zbWMvYWZfc21jLmM6MzIwMzpcXHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm47XFxubmV0L3NtYy9hZl9zbWMuYy0zMjA0LVxcdHN0cnVjdCBzbWNfc29jayAqc21jO1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0zMzMzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHNtY19zb2NrX29wcyA9IHtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMzMzNy1cXHQuYmluZFxcdFxcdD0gc21jX2JpbmQsXFxubmV0L3NtYy9hZl9zbWMuYzozMzM4OlxcdC5jb25uZWN0XFx0PSBzbWNfY29ubmVjdCxcXG5uZXQvc21jL2FmX3NtYy5jLTMzMzktXFx0LnNvY2tldHBhaXJcXHQ9IHNvY2tfbm9fc29ja2V0cGFpcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTM6MDE6MTguMzU5MzgzNjIzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMjYxMDY3NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipDb25uZWN0aW5nIHRoZSBEb3RzIGluIFNvY2tldCBNYW5hZ2VtZW50KipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBgc21jX2Nvbm5lY3RgLiBUaGF0J3MgcHJldHR5IGNsZWFyIC0gaXQncyB0aGUgc29ja2V0J3MgYC5jb25uZWN0YCBvcGVyYXRpb24sIG5vIHF1ZXN0aW9uLiBEZWZpbml0ZWx5IGEgdXNlZnVsIG1uZW1vbmljLCBhIGdvb2QgZm9jdXMgc3ltYm9sIHRvIHdvcmsgd2l0aC4gSXQncyBjb25jaXNlIGFuZCBwb2ludHMgZGlyZWN0bHkgdG8gdGhlIGZ1bmN0aW9uJ3MgcHVycG9zZS5cblxuTm93LCBsZXQncyBtb3ZlIG9uIHRvIGBzbWNfbGlzdGVuYC4gSXQgc2VlbXMgcmVhc29uYWJsZSB0byBhc3N1bWUgdGhpcyBjb3JyZXNwb25kcyB0byB0aGUgc29ja2V0J3MgYC5saXN0ZW5gIG9wZXJhdGlvbi4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uIGFuZCB0aGUgZXN0YWJsaXNoZWQgcGF0dGVybiwgdGhpcyBmZWVscyBoaWdobHkgcHJvYmFibGUuIEJ1dCwganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgYXZvaWQgYXNzdW1wdGlvbnMsIGxldCdzIHZlcmlmeSB0aGF0IHF1aWNrbHkuIE5vIGhhcm0gaW4gY29uZmlybWluZyB0aGUgaHlwb3RoZXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzNTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMzowMToyMi40ODU0OTM1MzZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODA2Njc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19saXN0ZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9hZl9zbWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL2FmX3NtYy5jPTE4NzI9c3RhdGljIGludCBzbWNyX3NlcnZfY29uZl9maXJzdF9saW5rKHN0cnVjdCBzbWNfc29jayAqc21jKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xOTI0LS8qIGxpc3RlbiB3b3JrZXI6IGZpbmlzaCAqL1xcbm5ldC9zbWMvYWZfc21jLmM6MTkyNTpzdGF0aWMgdm9pZCBzbWNfbGlzdGVuX291dChzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMpXFxubmV0L3NtYy9hZl9zbWMuYy0xOTI2LXtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMTkzMi1cXG5uZXQvc21jL2FmX3NtYy5jOjE5MzM6XFx0cmVsZWFzZV9zb2NrKG5ld3NtY3NrKTsgLyogbG9jayBpbiBzbWNfbGlzdGVuX3dvcmsoKSAqL1xcbm5ldC9zbWMvYWZfc21jLmMtMTkzNC1cXHRpZiAobHNtYy1cXHUwMDNlc2suc2tfc3RhdGUgPT0gU01DX0xJU1RFTikge1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xOTQ3LS8qIGxpc3RlbiB3b3JrZXI6IGZpbmlzaCBpbiBzdGF0ZSBjb25uZWN0ZWQgKi9cXG5uZXQvc21jL2FmX3NtYy5jOjE5NDg6c3RhdGljIHZvaWQgc21jX2xpc3Rlbl9vdXRfY29ubmVjdGVkKHN0cnVjdCBzbWNfc29jayAqbmV3X3NtYylcXG5uZXQvc21jL2FmX3NtYy5jLTE5NDkte1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xOTU0LVxcbm5ldC9zbWMvYWZfc21jLmM6MTk1NTpcXHRzbWNfbGlzdGVuX291dChuZXdfc21jKTtcXG5uZXQvc21jL2FmX3NtYy5jLTE5NTYtfVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xOTU4LS8qIGxpc3RlbiB3b3JrZXI6IGZpbmlzaCBpbiBlcnJvciBzdGF0ZSAqL1xcbm5ldC9zbWMvYWZfc21jLmM6MTk1OTpzdGF0aWMgdm9pZCBzbWNfbGlzdGVuX291dF9lcnIoc3RydWN0IHNtY19zb2NrICpuZXdfc21jKVxcbm5ldC9zbWMvYWZfc21jLmMtMTk2MC17XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE5NjgtXFxubmV0L3NtYy9hZl9zbWMuYzoxOTY5OlxcdHNtY19saXN0ZW5fb3V0KG5ld19zbWMpO1xcbm5ldC9zbWMvYWZfc21jLmMtMTk3MC19XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE5NzItLyogbGlzdGVuIHdvcmtlcjogZGVjbGluZSBhbmQgZmFsbCBiYWNrIGlmIHBvc3NpYmxlICovXFxubmV0L3NtYy9hZl9zbWMuYzoxOTczOnN0YXRpYyB2b2lkIHNtY19saXN0ZW5fZGVjbGluZShzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMsIGludCByZWFzb25fY29kZSxcXG5uZXQvc21jL2FmX3NtYy5jLTE5NzQtXFx0XFx0XFx0ICAgICAgIGludCBsb2NhbF9maXJzdCwgdTggdmVyc2lvbilcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMTk4MC1cXHRcXHQvKiBlcnJvciwgbm8gZmFsbGJhY2sgcG9zc2libGUgKi9cXG5uZXQvc21jL2FmX3NtYy5jOjE5ODE6XFx0XFx0c21jX2xpc3Rlbl9vdXRfZXJyKG5ld19zbWMpO1xcbm5ldC9zbWMvYWZfc21jLmMtMTk4Mi1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE5ODUtXFx0XFx0aWYgKHNtY19jbGNfc2VuZF9kZWNsaW5lKG5ld19zbWMsIHJlYXNvbl9jb2RlLCB2ZXJzaW9uKSBcXHUwMDNjIDApIHtcXG5uZXQvc21jL2FmX3NtYy5jOjE5ODY6XFx0XFx0XFx0c21jX2xpc3Rlbl9vdXRfZXJyKG5ld19zbWMpO1xcbm5ldC9zbWMvYWZfc21jLmMtMTk4Ny1cXHRcXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE5ODktXFx0fVxcbm5ldC9zbWMvYWZfc21jLmM6MTk5MDpcXHRzbWNfbGlzdGVuX291dF9jb25uZWN0ZWQobmV3X3NtYyk7XFxubmV0L3NtYy9hZl9zbWMuYy0xOTkxLX1cXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMTk5My0vKiBsaXN0ZW4gd29ya2VyOiB2ZXJzaW9uIGNoZWNraW5nICovXFxubmV0L3NtYy9hZl9zbWMuYzoxOTk0OnN0YXRpYyBpbnQgc21jX2xpc3Rlbl92Ml9jaGVjayhzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMsXFxubmV0L3NtYy9hZl9zbWMuYy0xOTk1LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc21jX2NsY19tc2dfcHJvcG9zYWwgKnBjbGMsXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTIwNTUtLyogbGlzdGVuIHdvcmtlcjogY2hlY2sgcHJlZml4ZXMgKi9cXG5uZXQvc21jL2FmX3NtYy5jOjIwNTY6c3RhdGljIGludCBzbWNfbGlzdGVuX3ByZnhfY2hlY2soc3RydWN0IHNtY19zb2NrICpuZXdfc21jLFxcbm5ldC9zbWMvYWZfc21jLmMtMjA1Ny1cXHRcXHRcXHRcXHQgc3RydWN0IHNtY19jbGNfbXNnX3Byb3Bvc2FsICpwY2xjKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0yMDczLS8qIGxpc3RlbiB3b3JrZXI6IGluaXRpYWxpemUgY29ubmVjdGlvbiBhbmQgYnVmZmVycyAqL1xcbm5ldC9zbWMvYWZfc21jLmM6MjA3NDpzdGF0aWMgaW50IHNtY19saXN0ZW5fcmRtYV9pbml0KHN0cnVjdCBzbWNfc29jayAqbmV3X3NtYyxcXG5uZXQvc21jL2FmX3NtYy5jLTIwNzUtXFx0XFx0XFx0XFx0c3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjA5My0vKiBsaXN0ZW4gd29ya2VyOiBpbml0aWFsaXplIGNvbm5lY3Rpb24gYW5kIGJ1ZmZlcnMgZm9yIFNNQy1EICovXFxubmV0L3NtYy9hZl9zbWMuYzoyMDk0OnN0YXRpYyBpbnQgc21jX2xpc3Rlbl9pc21faW5pdChzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMsXFxubmV0L3NtYy9hZl9zbWMuYy0yMDk1LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0yMTYwPXN0YXRpYyB2b2lkIHNtY19maW5kX2lzbV92Ml9kZXZpY2Vfc2VydihzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMsXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTIyMzEtXFx0XFx0aW5pLVxcdTAwM2Vpc21fc2VsZWN0ZWQgPSBpO1xcbm5ldC9zbWMvYWZfc21jLmM6MjIzMjpcXHRcXHRyYyA9IHNtY19saXN0ZW5faXNtX2luaXQobmV3X3NtYywgaW5pKTtcXG5uZXQvc21jL2FmX3NtYy5jLTIyMzMtXFx0XFx0aWYgKHJjKSB7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jPTIyNTA9c3RhdGljIHZvaWQgc21jX2ZpbmRfaXNtX3YxX2RldmljZV9zZXJ2KHN0cnVjdCBzbWNfc29jayAqbmV3X3NtYyxcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjI2OC1cXHRpbmktXFx1MDAzZWlzbV9zZWxlY3RlZCA9IDA7XFxubmV0L3NtYy9hZl9zbWMuYzoyMjY5OlxcdHJjID0gc21jX2xpc3Rlbl9pc21faW5pdChuZXdfc21jLCBpbmkpO1xcbm5ldC9zbWMvYWZfc21jLmMtMjI3MC1cXHRpZiAoIXJjKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0yMjgwLS8qIGxpc3RlbiB3b3JrZXI6IHJlZ2lzdGVyIGJ1ZmZlcnMgKi9cXG5uZXQvc21jL2FmX3NtYy5jOjIyODE6c3RhdGljIGludCBzbWNfbGlzdGVuX3JkbWFfcmVnKHN0cnVjdCBzbWNfc29jayAqbmV3X3NtYywgYm9vbCBsb2NhbF9maXJzdClcXG5uZXQvc21jL2FmX3NtYy5jLTIyODIte1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0yMjk5PXN0YXRpYyB2b2lkIHNtY19maW5kX3JkbWFfdjJfZGV2aWNlX3NlcnYoc3RydWN0IHNtY19zb2NrICpuZXdfc21jLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0yMzMyLVxcdGluaS1cXHUwMDNlc21jcl92ZXJzaW9uID0gU01DX1YyO1xcbm5ldC9zbWMvYWZfc21jLmM6MjMzMzpcXHRyYyA9IHNtY19saXN0ZW5fcmRtYV9pbml0KG5ld19zbWMsIGluaSk7XFxubmV0L3NtYy9hZl9zbWMuYy0yMzM0LVxcdGlmICghcmMpIHtcXG5uZXQvc21jL2FmX3NtYy5jOjIzMzU6XFx0XFx0cmMgPSBzbWNfbGlzdGVuX3JkbWFfcmVnKG5ld19zbWMsIGluaS1cXHUwMDNlZmlyc3RfY29udGFjdF9sb2NhbCk7XFxubmV0L3NtYy9hZl9zbWMuYy0yMzM2LVxcdFxcdGlmIChyYylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MjM1Mz1zdGF0aWMgaW50IHNtY19maW5kX3JkbWFfdjFfZGV2aWNlX3NlcnYoc3RydWN0IHNtY19zb2NrICpuZXdfc21jLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0yMzcwLVxcdH1cXG5uZXQvc21jL2FmX3NtYy5jOjIzNzE6XFx0cmMgPSBzbWNfbGlzdGVuX3JkbWFfaW5pdChuZXdfc21jLCBpbmkpO1xcbm5ldC9zbWMvYWZfc21jLmMtMjM3Mi1cXHRpZiAocmMpXFxubmV0L3NtYy9hZl9zbWMuYy0yMzczLVxcdFxcdHJldHVybiByYztcXG5uZXQvc21jL2FmX3NtYy5jOjIzNzQ6XFx0cmV0dXJuIHNtY19saXN0ZW5fcmRtYV9yZWcobmV3X3NtYywgaW5pLVxcdTAwM2VmaXJzdF9jb250YWN0X2xvY2FsKTtcXG5uZXQvc21jL2FmX3NtYy5jLTIzNzUtfVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0yMzc3LS8qIGRldGVybWluZSB0aGUgbG9jYWwgZGV2aWNlIG1hdGNoaW5nIHRvIHByb3Bvc2FsICovXFxubmV0L3NtYy9hZl9zbWMuYzoyMzc4OnN0YXRpYyBpbnQgc21jX2xpc3Rlbl9maW5kX2RldmljZShzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMsXFxubmV0L3NtYy9hZl9zbWMuYy0yMzc5LVxcdFxcdFxcdFxcdCAgc3RydWN0IHNtY19jbGNfbXNnX3Byb3Bvc2FsICpwY2xjLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0yMzg5LVxcdC8qIGNoZWNrIGZvciBtYXRjaGluZyBJUCBwcmVmaXggYW5kIHN1Ym5ldCBsZW5ndGggKFYxKSAqL1xcbm5ldC9zbWMvYWZfc21jLmM6MjM5MDpcXHRwcmZ4X3JjID0gc21jX2xpc3Rlbl9wcmZ4X2NoZWNrKG5ld19zbWMsIHBjbGMpO1xcbm5ldC9zbWMvYWZfc21jLmMtMjM5MS1cXHRpZiAocHJmeF9yYylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjQyNS0vKiBsaXN0ZW4gd29ya2VyOiBmaW5pc2ggUkRNQSBzZXR1cCAqL1xcbm5ldC9zbWMvYWZfc21jLmM6MjQyNjpzdGF0aWMgaW50IHNtY19saXN0ZW5fcmRtYV9maW5pc2goc3RydWN0IHNtY19zb2NrICpuZXdfc21jLFxcbm5ldC9zbWMvYWZfc21jLmMtMjQyNy1cXHRcXHRcXHRcXHQgIHN0cnVjdCBzbWNfY2xjX21zZ19hY2NlcHRfY29uZmlybSAqY2NsYyxcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjQ1MS0vKiBzZXR1cCBmb3IgY29ubmVjdGlvbiBvZiBzZXJ2ZXIgKi9cXG5uZXQvc21jL2FmX3NtYy5jOjI0NTI6c3RhdGljIHZvaWQgc21jX2xpc3Rlbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvc21jL2FmX3NtYy5jLTI0NTMte1xcbm5ldC9zbWMvYWZfc21jLmMtMjQ1NC1cXHRzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHNtY19zb2NrLFxcbm5ldC9zbWMvYWZfc21jLmM6MjQ1NTpcXHRcXHRcXHRcXHRcXHRcXHRzbWNfbGlzdGVuX3dvcmspO1xcbm5ldC9zbWMvYWZfc21jLmMtMjQ1Ni1cXHRzdHJ1Y3Qgc29ja2V0ICpuZXdjbGNzb2NrID0gbmV3X3NtYy1cXHUwMDNlY2xjc29jaztcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjQ2NC1cXG5uZXQvc21jL2FmX3NtYy5jOjI0NjU6XFx0bG9ja19zb2NrKFxcdTAwMjZuZXdfc21jLVxcdTAwM2Vzayk7IC8qIHJlbGVhc2UgaW4gc21jX2xpc3Rlbl9vdXQoKSAqL1xcbm5ldC9zbWMvYWZfc21jLmMtMjQ2Ni1cXHRpZiAobmV3X3NtYy1cXHUwMDNlbGlzdGVuX3NtYy1cXHUwMDNlc2suc2tfc3RhdGUgIT0gU01DX0xJU1RFTilcXG5uZXQvc21jL2FmX3NtYy5jOjI0Njc6XFx0XFx0cmV0dXJuIHNtY19saXN0ZW5fb3V0X2VycihuZXdfc21jKTtcXG5uZXQvc21jL2FmX3NtYy5jLTI0NjgtXFxubmV0L3NtYy9hZl9zbWMuYy0yNDY5LVxcdGlmIChuZXdfc21jLVxcdTAwM2V1c2VfZmFsbGJhY2spIHtcXG5uZXQvc21jL2FmX3NtYy5jOjI0NzA6XFx0XFx0c21jX2xpc3Rlbl9vdXRfY29ubmVjdGVkKG5ld19zbWMpO1xcbm5ldC9zbWMvYWZfc21jLmMtMjQ3MS1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTI0NzctXFx0XFx0aWYgKHJjKVxcbm5ldC9zbWMvYWZfc21jLmM6MjQ3ODpcXHRcXHRcXHRzbWNfbGlzdGVuX291dF9lcnIobmV3X3NtYyk7XFxubmV0L3NtYy9hZl9zbWMuYy0yNDc5LVxcdFxcdGVsc2VcXG5uZXQvc21jL2FmX3NtYy5jOjI0ODA6XFx0XFx0XFx0c21jX2xpc3Rlbl9vdXRfY29ubmVjdGVkKG5ld19zbWMpO1xcbm5ldC9zbWMvYWZfc21jLmMtMjQ4MS1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTI1MTMtXFx0LyogaW5pdGlhbCB2ZXJzaW9uIGNoZWNraW5nICovXFxubmV0L3NtYy9hZl9zbWMuYzoyNTE0OlxcdHJjID0gc21jX2xpc3Rlbl92Ml9jaGVjayhuZXdfc21jLCBwY2xjLCBpbmkpO1xcbm5ldC9zbWMvYWZfc21jLmMtMjUxNS1cXHRpZiAocmMpXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTI1MjYtXFx0LyogZGV0ZXJtaW5lIElTTSBvciBSb0NFIGRldmljZSB1c2VkIGZvciBjb25uZWN0aW9uICovXFxubmV0L3NtYy9hZl9zbWMuYzoyNTI3OlxcdHJjID0gc21jX2xpc3Rlbl9maW5kX2RldmljZShuZXdfc21jLCBwY2xjLCBpbmkpO1xcbm5ldC9zbWMvYWZfc21jLmMtMjUyOC1cXHRpZiAocmMpXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTI1NTktXFxubmV0L3NtYy9hZl9zbWMuYzoyNTYwOlxcdC8qIGZjZSBzbWMgcmVsZWFzZSB2ZXJzaW9uIGlzIG5lZWRlZCBpbiBzbWNfbGlzdGVuX3JkbWFfZmluaXNoLFxcbm5ldC9zbWMvYWZfc21jLmMtMjU2MS1cXHQgKiBzbyBzYXZlIGZjZSBpbmZvIGhlcmUuXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTI1NjYtXFx0aWYgKCFpbmktXFx1MDAzZWlzX3NtY2QpIHtcXG5uZXQvc21jL2FmX3NtYy5jOjI1Njc6XFx0XFx0cmMgPSBzbWNfbGlzdGVuX3JkbWFfZmluaXNoKG5ld19zbWMsIGNjbGMsXFxubmV0L3NtYy9hZl9zbWMuYy0yNTY4LVxcdFxcdFxcdFxcdFxcdCAgICBpbmktXFx1MDAzZWZpcnN0X2NvbnRhY3RfbG9jYWwsIGluaSk7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTI1ODItXFx0U01DX1NUQVRfU0VSVl9TVUNDX0lOQyhzb2NrX25ldChuZXdjbGNzb2NrLVxcdTAwM2VzayksIGluaSk7XFxubmV0L3NtYy9hZl9zbWMuYzoyNTgzOlxcdC8qIHNtY19saXN0ZW5fb3V0KCkgd2lsbCByZWxlYXNlIHNtY3NrICovXFxubmV0L3NtYy9hZl9zbWMuYzoyNTg0OlxcdHNtY19saXN0ZW5fb3V0X2Nvbm5lY3RlZChuZXdfc21jKTtcXG5uZXQvc21jL2FmX3NtYy5jLTI1ODUtXFx0Z290byBvdXRfZnJlZTtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjU4OS1vdXRfZGVjbDpcXG5uZXQvc21jL2FmX3NtYy5jOjI1OTA6XFx0c21jX2xpc3Rlbl9kZWNsaW5lKG5ld19zbWMsIHJjLCBpbmkgPyBpbmktXFx1MDAzZWZpcnN0X2NvbnRhY3RfbG9jYWwgOiAwLFxcbm5ldC9zbWMvYWZfc21jLmMtMjU5MS1cXHRcXHRcXHQgICBwcm9wb3NhbF92ZXJzaW9uKTtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MjU5Nz1zdGF0aWMgdm9pZCBzbWNfdGNwX2xpc3Rlbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjYxOC1cXHRcXHRuZXdfc21jLVxcdTAwM2VmYWxsYmFja19yc24gPSBsc21jLVxcdTAwM2VmYWxsYmFja19yc247XFxubmV0L3NtYy9hZl9zbWMuYzoyNjE5OlxcdFxcdHNvY2tfaG9sZChsc2spOyAvKiBzb2NrX3B1dCBpbiBzbWNfbGlzdGVuX3dvcmsgKi9cXG5uZXQvc21jL2FmX3NtYy5jOjI2MjA6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZuZXdfc21jLVxcdTAwM2VzbWNfbGlzdGVuX3dvcmssIHNtY19saXN0ZW5fd29yayk7XFxubmV0L3NtYy9hZl9zbWMuYy0yNjIxLVxcdFxcdHNtY19jb3B5X3NvY2tfc2V0dGluZ3NfdG9fc21jKG5ld19zbWMpO1xcbm5ldC9zbWMvYWZfc21jLmMtMjYyMi1cXHRcXHRzb2NrX2hvbGQoXFx1MDAyNm5ld19zbWMtXFx1MDAzZXNrKTsgLyogc29ja19wdXQgaW4gcGFzc2l2ZSBjbG9zaW5nICovXFxubmV0L3NtYy9hZl9zbWMuYzoyNjIzOlxcdFxcdGlmICghcXVldWVfd29yayhzbWNfaHNfd3EsIFxcdTAwMjZuZXdfc21jLVxcdTAwM2VzbWNfbGlzdGVuX3dvcmspKVxcbm5ldC9zbWMvYWZfc21jLmMtMjYyNC1cXHRcXHRcXHRzb2NrX3B1dChcXHUwMDI2bmV3X3NtYy1cXHUwMDNlc2spO1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0yNjMyPXN0YXRpYyB2b2lkIHNtY19jbGNzb2NrX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKmxpc3Rlbl9jbGNzb2NrKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0yNjQ5LVxcbm5ldC9zbWMvYWZfc21jLmM6MjY1MDppbnQgc21jX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgYmFja2xvZylcXG5uZXQvc21jL2FmX3NtYy5jLTI2NTEte1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0yNzE2PWludCBzbWNfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld19zb2NrLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0yNzQ1LVxcdFxcdHRpbWVvID0gc2NoZWR1bGVfdGltZW91dCh0aW1lbyk7XFxubmV0L3NtYy9hZl9zbWMuYzoyNzQ2OlxcdFxcdC8qIHdha2V1cCBieSBza19kYXRhX3JlYWR5IGluIHNtY19saXN0ZW5fd29yaygpICovXFxubmV0L3NtYy9hZl9zbWMuYy0yNzQ3LVxcdFxcdHNjaGVkX2Fubm90YXRlX3NsZWVwKCk7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jPTI4ODc9X19wb2xsX3Qgc21jX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTI5MTAtXFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBTTUNfTElTVEVOKSB7XFxubmV0L3NtYy9hZl9zbWMuYzoyOTExOlxcdFxcdFxcdC8qIHdva2VuIHVwIGJ5IHNrX2RhdGFfcmVhZHkgaW4gc21jX2xpc3Rlbl93b3JrKCkgKi9cXG5uZXQvc21jL2FmX3NtYy5jLTI5MTItXFx0XFx0XFx0bWFzayB8PSBzbWNfYWNjZXB0X3BvbGwoc2spO1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0zMzMzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHNtY19zb2NrX29wcyA9IHtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMzM0My1cXHQuaW9jdGxcXHRcXHQ9IHNtY19pb2N0bCxcXG5uZXQvc21jL2FmX3NtYy5jOjMzNDQ6XFx0Lmxpc3RlblxcdFxcdD0gc21jX2xpc3RlbixcXG5uZXQvc21jL2FmX3NtYy5jLTMzNDUtXFx0LnNodXRkb3duXFx0PSBzbWNfc2h1dGRvd24sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAxOjIyLjUzMDMwNDg2MloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzE0NjY5OTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgU01DIExpc3RlbmluZyBQcm9jZXNzIGFuZCBBUEkgRGVzaWduKipcblxuUmlnaHQsIHNvIGBzbWNfbGlzdGVuYCBpcyB0aGUgc29ja2V0J3MgYC5saXN0ZW5gIGNhbGwsIHRoYXQncyBzdHJhaWdodGZvcndhcmQuIEl0J3MgdGhlIGVudHJ5IHBvaW50IHRvIGdldCB0aGUgc29ja2V0IHJlYWR5IHRvIGFjY2VwdCBjb25uZWN0aW9ucy4gQnV0IHRoZSBhY3R1YWwgaGVhdnkgbGlmdGluZywgdGhlIGNvbm5lY3Rpb24gc2V0dXAgYW5kIGhhbmRsaW5nLCB0aGF0J3MgYWxsIGRvbmUgaW4gYHNtY19saXN0ZW5fd29ya2AuIEFuZCwgaWYgSSdtIHJlbWVtYmVyaW5nIHJpZ2h0LCBgc21jX2xpc3Rlbl93b3JrYCBpcyBzdGF0aWMuIE5vdywgdGhlIHByb21wdCBkb2VzIHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYyBBUEkgZW50cnlwb2ludHMuIFRoZSByZWFzb25pbmcgdGhlcmUgaXMgZm9yIHRoZSBjbGFyaXR5IG9mIHRoZSBhZGRyZXNzIG9mIGRpc3RpbmN0IHN5bWJvbHMgYW5kIHJlZHVjaW5nIHBvc3NpYmxlIGlubGluaW5nIGNvbXBsZXhpdHkuXG5cbkJ1dCB3YWl0IGEgbWludXRlLCBgc21jX2xpc3Rlbl93b3JrYCBpcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiwgYW5kIHRoYXQgbWVhbnMgaXQgKmNhbid0KiBiZSBpbmxpbmVkLiBJdCdzIHBhc3NlZCB0byBgSU5JVF9XT1JLYC4gU28sIHRoZSB3aG9sZSBzdGF0aWMvbm9uLXN0YXRpYyB0aGluZyBtaWdodCBub3QgbWF0dGVyIGluIHRoaXMgc3BlY2lmaWMgY2FzZSwgc2luY2UgaXQgKmhhcyogYSBzeW1ib2wgYWRkcmVzcy5cblxuT2theSwgc28gbG9va2luZyBhdCB0aGF0IHRob3VnaHQgcHJvY2Vzcywgd2UgbWF5IHByZWZlciB1c2luZyBgc21jX2xpc3RlbmAgYW5kIGBzbWNfY29ubmVjdGAgYXMgdGhlIEFQSSBmb3IgdGhpcyBraW5kIG9mIHdvcmsuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGhvdyBgc21jX2xsY19jbGlfYWRkX2xpbmtgIGFuZCBgc21jX2xsY19zcnZfYWRkX2xpbmtgIGhhbmRsZSB0aGlzIGluIHRoZSBzYW1lIGNvZGUgYmFzZS4gVGhhdCB3b3VsZCBnaXZlIG1lIHNvbWUgaW5zaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5NjgsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTM6MDE6MjguMjQ0OTc3OTcxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzk4ODU1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfbGxjX2NsaV9hZGRfbGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL3NtY19sbGMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19sbGMuYz04ODc9c3RhdGljIGludCBzbWNfbGxjX2NsaV9ya2V5X2V4Y2hhbmdlKHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTkzMC0vKiBwcmVwYXJlIGFuZCBzZW5kIGFuIGFkZCBsaW5rIHJlamVjdCByZXNwb25zZSAqL1xcbm5ldC9zbWMvc21jX2xsYy5jOjkzMTpzdGF0aWMgaW50IHNtY19sbGNfY2xpX2FkZF9saW5rX3JlamVjdChzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSlcXG5uZXQvc21jL3NtY19sbGMuYy05MzIte1xcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmM9MTAyMD1zdGF0aWMgdm9pZCBzbWNfbGxjX3NhdmVfYWRkX2xpbmtfaW5mbyhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0xMDMwLS8qIGFzIGFuIFNNQyBjbGllbnQsIHByb2Nlc3MgYW4gYWRkIGxpbmsgcmVxdWVzdCAqL1xcbm5ldC9zbWMvc21jX2xsYy5jOjEwMzE6aW50IHNtY19sbGNfY2xpX2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaywgc3RydWN0IHNtY19sbGNfcWVudHJ5ICpxZW50cnkpXFxubmV0L3NtYy9zbWNfbGxjLmMtMTAzMi17XFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0xMTE4LW91dF9yZWplY3Q6XFxubmV0L3NtYy9zbWNfbGxjLmM6MTExOTpcXHRzbWNfbGxjX2NsaV9hZGRfbGlua19yZWplY3QocWVudHJ5KTtcXG5uZXQvc21jL3NtY19sbGMuYy0xMTIwLW91dDpcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTExMjY9c3RhdGljIHZvaWQgc21jX2xsY19zZW5kX3JlcXVlc3RfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rKVxcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmMtMTE2NC0vKiBhcyBhbiBTTUMgY2xpZW50LCBpbnZpdGUgc2VydmVyIHRvIHN0YXJ0IHRoZSBhZGRfbGluayBwcm9jZXNzaW5nICovXFxubmV0L3NtYy9zbWNfbGxjLmM6MTE2NTpzdGF0aWMgdm9pZCBzbWNfbGxjX2NsaV9hZGRfbGlua19pbnZpdGUoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbm5ldC9zbWMvc21jX2xsYy5jLTExNjYtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHNtY19sbGNfcWVudHJ5ICpxZW50cnkpXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYz0xMjE3PXN0YXRpYyB2b2lkIHNtY19sbGNfcHJvY2Vzc19jbGlfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0xMjI0LVxcdGlmIChzbWNfbGxjX2lzX2xvY2FsX2FkZF9saW5rKFxcdTAwMjZxZW50cnktXFx1MDAzZW1zZykpXFxubmV0L3NtYy9zbWNfbGxjLmM6MTIyNTpcXHRcXHRzbWNfbGxjX2NsaV9hZGRfbGlua19pbnZpdGUocWVudHJ5LVxcdTAwM2VsaW5rLCBxZW50cnkpO1xcbm5ldC9zbWMvc21jX2xsYy5jLTEyMjYtXFx0ZWxzZVxcbm5ldC9zbWMvc21jX2xsYy5jOjEyMjc6XFx0XFx0c21jX2xsY19jbGlfYWRkX2xpbmsocWVudHJ5LVxcdTAwM2VsaW5rLCBxZW50cnkpO1xcbm5ldC9zbWMvc21jX2xsYy5jLTEyMjgtXFx0dXBfd3JpdGUoXFx1MDAyNmxnci1cXHUwMDNlbGxjX2NvbmZfbXV0ZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMzowMToyOC4yODg5NzA5MjZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ1NDk1MjE2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBGdW5jdGlvbiBTeW1ib2wgVmlzaWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uIHN5bWJvbHMgYW5kIGhvdyB0aGV5J3JlIHVzZWQuIEl0J3MgY2xlYXIgdGhhdCBib3RoIGBzbWNfbGxjX2NsaV9hZGRfbGlua2AgYW5kIGBzbWNfbGxjX3Nydl9hZGRfbGlua2AgYXJlIG5vbi1zdGF0aWMg4oCTIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIFRoaXMgbWVhbnMgdGhleSBhcmUgbGlrZWx5IGVudHJ5IHBvaW50cyBvciBleHBvc2VkIGludGVyZmFjZXMuXG5cblRoaXMgbmFycm93cyBkb3duIG15IGZvY3VzLiAgQmFzZWQgb24gdGhpcywgdGhlIHByaW1hcnkgY2FuZGlkYXRlcyBmb3Igc3ltYm9scyBvZiBpbnRlcmVzdCBhcmUgZ29pbmcgdG8gYmUgdGhvc2UgdGhhdCBhcmUgbm90IHN0YXRpYywgaW4gcGFydGljdWxhciwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6IGBzbWNfY29ubmVjdGAsIGBzbWNfbGlzdGVuYCwgYHNtY19wbmV0X2ZpbmRfcm9jZV9yZXNvdXJjZWAsIGBzbWNfcG5ldF9maW5kX2FsdF9yb2NlYCwgYHNtY19sbGNfY2xpX2FkZF9saW5rYCwgYW5kIGBzbWNfbGxjX3Nydl9hZGRfbGlua2AuIFRoZXNlIGFyZSB0aGUgb25lcyB3aGVyZSBnbG9iYWwgdmlzaWJpbGl0eSBpcyBleHBlY3RlZC5cblxuQnV0IGhvbGQgb27igKYgYHNtY19pYl9yZW1vdmVfZGV2YCBpcyAqc3RhdGljKiwgYW5kIGl0J3MgYSBrZXkgZnVuY3Rpb24gdGhhdCBoYXMgYmVlbiBtb2RpZmllZCwgd2hpY2ggaXMgYSBiaXQgb2YgYSBjdXJ2ZWJhbGwuIFRoYXQncyBpbW1lZGlhdGVseSBhIHJlZCBmbGFnLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhpcyBzdGF0aWMgZnVuY3Rpb24gaXMgaW1wb3J0YW50LiBDbGVhcmx5LCBpdCdzIG5vdCBhIGRpcmVjdCwgZXh0ZXJuYWxseSB2aXNpYmxlIGVudHJ5IHBvaW50LiBTbywgSSBoYXZlIHRvIHNlZSBpZiBzb21ldGhpbmcgY2FsbHMgaXQgb3IgaXMgcmVsYXRlZCB0byBpdC5cblxuQWhhISBgc21jX2liX3JlbW92ZV9kZXZgIGlzIHJlZ2lzdGVyZWQgaW4gYHNtY19pYl9jbGllbnRgLiBUaGF0J3MgYSB2aXRhbCBjbHVlLiBOb3cgSSBuZWVkIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoZSBjbGllbnQgbGV2ZWwuIEkgd2FzIGNvbnNpZGVyaW5nIGBzbWNfaWJfYWRkX2RldmAgYW5kIGBzbWNfaWJfcmVtb3ZlX2RldmAgZGlyZWN0bHksIGJ1dCB0aGV5IGFyZSBib3RoIHN0YXRpYy4gV2hhdCBhYm91dCBgc21jX2liX3JlZ2lzdGVyX2NsaWVudGA/IFRoYXQgb25lIGlzIGxpa2VseSBtb3JlIHJlbGV2YW50LiBJIHNob3VsZCBkZWx2ZSBpbnRvIHRoYXQgb25lIGFuZCBzZWUgaWYgdGhlcmUgaXMgc29tZXRoaW5nIGludGVyZXN0aW5nIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDI1NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMzowMTozNy43NDM5MjUyNjlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNDc1MjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19pYl9yZWdpc3Rlcl9jbGllbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9zbWNfaWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19pYi5jPTEwMTU9c3RhdGljIHN0cnVjdCBpYl9jbGllbnQgc21jX2liX2NsaWVudCA9IHtcXG4tLVxcbm5ldC9zbWMvc21jX2liLmMtMTAyMC1cXG5uZXQvc21jL3NtY19pYi5jOjEwMjE6aW50IF9faW5pdCBzbWNfaWJfcmVnaXN0ZXJfY2xpZW50KHZvaWQpXFxubmV0L3NtYy9zbWNfaWIuYy0xMDIyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTM6MDE6MzcuNzg2NDA4OTM0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxNDk5NzM3OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBBc3Nlc3NtZW50IG9mIHRoZSBTTUMgSW5pdGlhbGl6YXRpb24gUHJvY2VzcyoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgYHNtY19pYl9yZWdpc3Rlcl9jbGllbnRgIGlzIGVzc2VudGlhbGx5IHRoZSBpbml0aWFsaXphdGlvbiBzdGFnZSwgZnVuY3Rpb25pbmcgbGlrZSBhbiBgX19pbml0X19gIG1ldGhvZC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byByZW1lbWJlci5cblxuTXkgZm9jdXMgc2hvdWxkIGJlIG9uIGBzbWNfY29ubmVjdGAsIGBzbWNfbGlzdGVuYCwgYHNtY19sbGNfY2xpX2FkZF9saW5rYCwgYW5kIGBzbWNfbGxjX3Nydl9hZGRfbGlua2AuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGZvciBoYW5kbGluZyB0aGUgb3ZlcmFsbCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGxpbmsgYWRkaXRpb24gcHJvY2VkdXJlcy4gVGhleSdyZSBkZWZpbml0ZWx5IHRoZSBwbGFjZXMgd2hlcmUgYHNtY19pbml0X2luZm9gIGlzIGJlaW5nIGFsbG9jYXRlZCBhbmQgc3Vic2VxdWVudGx5IHV0aWxpemVkLCB3aGljaCBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZW50aXJlIHN5c3RlbSBvcGVyYXRlcy5cblxuTGV0J3MgZGlnIGEgYml0IGRlZXBlciBpbnRvIGBzbWNfbGxjX3Nydl9hZGRfbGlua2Agc3BlY2lmaWNhbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhcnQgYmV0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTA0OSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMzowMTo0NS45MzYzODUzMDFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNzIwMjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19sbGNfc3J2X2FkZF9saW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvc21jX2xsYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2xsYy5jPTEzOTc9c3RhdGljIHZvaWQgc21jX2xsY19zZW5kX3JlcV9hZGRfbGlua19yZXNwb25zZShzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSlcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTE0MDUtXFxubmV0L3NtYy9zbWNfbGxjLmM6MTQwNjppbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbm5ldC9zbWMvc21jX2xsYy5jLTE0MDctXFx0XFx0XFx0IHN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqcmVxX3FlbnRyeSlcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTE1Mjk9c3RhdGljIHZvaWQgc21jX2xsY19wcm9jZXNzX3Nydl9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncilcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTE1MzctXFx0ZG93bl93cml0ZShcXHUwMDI2bGdyLVxcdTAwM2VsbGNfY29uZl9tdXRleCk7XFxubmV0L3NtYy9zbWNfbGxjLmM6MTUzODpcXHRyYyA9IHNtY19sbGNfc3J2X2FkZF9saW5rKGxpbmssIHFlbnRyeSk7XFxubmV0L3NtYy9zbWNfbGxjLmMtMTUzOS1cXHRpZiAoIXJjIFxcdTAwMjZcXHUwMDI2IGxnci1cXHUwMDNldHlwZSA9PSBTTUNfTEdSX1NZTU1FVFJJQykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMzowMTo0NS45OTcxMTE1MzVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzg3NTk0OTcxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipOb24tU3RhdGljIEZ1bmN0aW9uIENvbmZpcm1hdGlvbiBcdTAwMjYgTmV4dCBTdGVwcyoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYHNtY19sbGNfc3J2X2FkZF9saW5rYCBpcyAqZGVmaW5pdGVseSogbm9uLXN0YXRpYy4gTm93LCBJIG5lZWQgdG8gc2VlIHdoYXQncyBnb2luZyBvbiBlbHNld2hlcmUgaW4gdGhlIGNvZGUuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgYHNtY19wbmV0X2ZpbmRfcm9jZV9yZXNvdXJjZWAgYW5kIGBzbWNfcG5ldF9maW5kX2FsdF9yb2NlYCBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGludGVyYWN0LCBhbmQgd2hldGhlciB0aGV5IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSB1c2Ugb2YgYSBub24tc3RhdGljIGZ1bmN0aW9uIGhlcmUuIEtub3dpbmcgdGhlIGNvbm5lY3Rpb25zIGJldHdlZW4gdGhlc2UgaXMga2V5IGZvciBkZWJ1Z2dpbmcgb3IgdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NzA3LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTM6MDE6NTMuODczMDYzODJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTAyODUxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfcG5ldF9maW5kX3JvY2VfcmVzb3VyY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9zbWNfcG5ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX3BuZXQuYz0xMTA1PXN0YXRpYyB2b2lkIHNtY19wbmV0X2ZpbmRfaXNtX2J5X3BuZXRpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4tLVxcbm5ldC9zbWMvc21jX3BuZXQuYy0xMTM0LSAqL1xcbm5ldC9zbWMvc21jX3BuZXQuYzoxMTM1OnZvaWQgc21jX3BuZXRfZmluZF9yb2NlX3Jlc291cmNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcXG5uZXQvc21jL3NtY19wbmV0LmMtMTEzNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAxOjUzLjk4MjEwMzY4OVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTA5ODE3NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBzbWNfcG5ldF9maW5kX3JvY2VfcmVzb3VyY2VgIGFuZCBJdHMgSW1wbGljYXRpb25zKipcblxuQWxyaWdodCwgc28gdGhlIGNsdWUgaXMgdGhhdCBgc21jX3BuZXRfZmluZF9yb2NlX3Jlc291cmNlYCBpc24ndCBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVkIG15IGludGVyZXN0LiBOb24tc3RhdGljIGltcGxpZXMgaXQncyBlaXRoZXIgcGFydCBvZiBzb21lIGJyb2FkZXIgQVBJIGV4cG9zZWQgZm9yIG90aGVyIGNvbXBvbmVudHMgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBwb3RlbnRpYWxseSBjYWxsYWJsZSBmcm9tIG91dHNpZGUgaXRzIGltbWVkaWF0ZSBzY29wZS4gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyB0byBub3RlLlxuXG5Ob3csIHdoZXJlIGRvZXMgdGhhdCBsZWFkPyBXZWxsLCBiYXNlZCBvbiB0aGUgY29udGV4dCBJIHdvdWxkIHRoZW4gd2FudCB0byBwaXZvdCBhbmQgZXhwbG9yZSB0aGUgc3Vycm91bmRpbmcgY29kZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgYHNtY19wbmV0X2ZpbmRfYWx0X3JvY2VgLiBBIGZ1bmN0aW9uIHdpdGggYSBuYW1lIGxpa2UgdGhhdCBzdWdnZXN0cyBhIGNvbXBsZW1lbnRhcnkgb3IgcmVsYXRlZCBmdW5jdGlvbi4gUGVyaGFwcyBpdCdzIGNhbGxlZCBpbnRlcm5hbGx5IGJ5IHRoZSBmaXJzdCBvbmUsIG9yIG1heWJlIGl0IHBlcmZvcm1zIGFuIGFsdGVybmF0aXZlIHNlYXJjaCBzdHJhdGVneSB3aGVuIHRoZSBpbml0aWFsIGZ1bmN0aW9uIGZhaWxzLiBLbm93aW5nIGl0cyByZWxhdGlvbnNoaXAgd291bGQgYmUgdXNlZnVsLiBJJ2Qgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgb2YgdGhpcyBmdW5jdGlvbiBhcyB3ZWxsLCB3aGljaCB3aWxsIHRlbGwgbWUgaXRzIHB1cnBvc2UuIElzIHRoZSBmaXJzdCBmdW5jdGlvbiBqdXN0IGEgd3JhcHBlciBmb3IgaXQsIG9yIGlzIHRoZSByZWxhdGlvbnNoaXAgbW9yZSBjb21wbGV4PyBLbm93aW5nIHRoZSBpbnRlcmZhY2Ugd291bGQgYmUgdmVyeSBoZWxwZnVsLiBXaGF0J3MgdGhlIGVycm9yIGhhbmRsaW5nIGxpa2UgZm9yIHRoZSB0d28gZnVuY3Rpb25zPyBJcyB0aGVyZSBhIHNoYXJlZCBkYXRhIHN0cnVjdHVyZSwgYSBjb21tb24gc2V0IG9mIHJlc291cmNlcz8gVW5kZXJzdGFuZGluZyB0aGUgY29udHJvbCBmbG93IGJldHdlZW4gdGhlc2UgdHdvIGlzIGNyaXRpY2FsIGZvciBhbnkgZGVidWdnaW5nIG9yIG9wdGltaXphdGlvbiB0aGF0IG1heSBjb21lIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjEwMCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAxOjU5Ljg5MTkyMzc2OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMTc1MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19wbmV0X2ZpbmRfYWx0X3JvY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9zbWNfcG5ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX3BuZXQuYz0xMDA2PXN0YXRpYyB2b2lkIF9zbWNfcG5ldF9maW5kX3JvY2VfYnlfcG5ldGlkKHU4ICpwbmV0X2lkLFxcbi0tXFxubmV0L3NtYy9zbWNfcG5ldC5jLTEwMzQtLyogZmluZCBhbHRlcm5hdGUgcm9jZSBkZXZpY2Ugd2l0aCBzYW1lIHBuZXRfaWQsIHZsYW5faWQgYW5kIG5ldCBuYW1lc3BhY2UgKi9cXG5uZXQvc21jL3NtY19wbmV0LmM6MTAzNTp2b2lkIHNtY19wbmV0X2ZpbmRfYWx0X3JvY2Uoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXFxubmV0L3NtYy9zbWNfcG5ldC5jLTEwMzYtXFx0XFx0XFx0ICAgIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAxOjU5Ljk5MjEwNDk5OFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDA0ODUyMDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgVGhpbmtpbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBzbWNfcG5ldF9maW5kX2FsdF9yb2NlYCBpcywgYXMgSSBzdXNwZWN0ZWQsICpub3QqIGRlY2xhcmVkIHN0YXRpYy4gVGhhdCdzIGdvb2QgdG8gaGF2ZSBuYWlsZWQgZG93bi5cblxuTm93LCBteSBtaW5kIGlzIGNpcmNsaW5nIHRoZSByZWxldmFudCBzeW1ib2xzLiBJJ20gZm9jdXNpbmcgb246IGBzbWNfY29ubmVjdGAsIGBzbWNfbGlzdGVuYCwgYHNtY19wbmV0X2ZpbmRfcm9jZV9yZXNvdXJjZWAsIGBzbWNfcG5ldF9maW5kX2FsdF9yb2NlYCwgYHNtY19sbGNfY2xpX2FkZF9saW5rYCwgYW5kIGBzbWNfbGxjX3Nydl9hZGRfbGlua2AuIFRoZXNlIGFyZSB0aGUga2V5IHBpZWNlcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGFsbCBmaXRzIHRvZ2V0aGVyLlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIEkgbmVlZCB0byBxdWlja2x5IHJlLWV4YW1pbmUgdGhlIGNvbmZpZ3VyYXRpb24uIEkgd2FzIHRoaW5raW5nIG9mIGBTTUNgLCBgSU5GSU5JQkFORGAsIGFuZCBgRElCU2AuLi4gYnV0IEkgc2hvdWxkIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgYERJQlNgIGlzIHJlYWxseSBpbiB0aGUgbWFpbmxpbmUga2VybmVsIGFuZCB0aGF0IEkgaGF2ZW4ndCBtaXhlZCBpdCB1cCB3aXRoIHNvbWV0aGluZyBlbHNlLiBJdCdzIGVhc3kgdG8gbWlzaW50ZXJwcmV0IHRoaW5ncyB3aGVuIHlvdSdyZSBkZWVwIGluIHRoZSB3ZWVkcy4gVGltZSB0byBkb3VibGUtY2hlY2sgYG5ldC9zbWMvS2NvbmZpZ2AgYWdhaW4gdG8gYmUgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY2NjIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTM6MDI6MDUuMzk2OTU5Mjc5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjkzNDY4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL0tjb25maWc9Mj1jb25maWcgU01DXFxubmV0L3NtYy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XFxcIlxcbm5ldC9zbWMvS2NvbmZpZzo0OlxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EIFxcdTAwMjZcXHUwMDI2IERJQlNcXG5uZXQvc21jL0tjb25maWctNS1cXHRoZWxwXFxuLS1cXG5uZXQvc21jL0tjb25maWc9MTQ9Y29uZmlnIFNNQ19ESUFHXFxubmV0L3NtYy9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG5uZXQvc21jL0tjb25maWc6MTY6XFx0ZGVwZW5kcyBvbiBTTUNcXG5uZXQvc21jL0tjb25maWctMTctXFx0aGVscFxcbi0tXFxubmV0L3NtYy9LY29uZmlnPTIzPWNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcXG5uZXQvc21jL0tjb25maWctMjQtXFx0Ym9vbCBcXFwiR2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1xcXCJcXG5uZXQvc21jL0tjb25maWc6MjU6XFx0ZGVwZW5kcyBvbiBTTUMgXFx1MDAyNlxcdTAwMjYgQlBGX0pJVCBcXHUwMDI2XFx1MDAyNiBCUEZfU1lTQ0FMTFxcbm5ldC9zbWMvS2NvbmZpZy0yNi1cXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTM6MDI6MDUuNDczODk4ODUxWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5NzE0MzYzNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIFJlcXVpcmVtZW50cyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgdGhpcyBwYXRjaCdzIHN1Y2Nlc3MgaGluZ2VzIG9uIGEgZmV3IGtleSBjb21wb25lbnRzLiBJIHNlZSBpdCdzIGRlcGVuZGVudCBvbiBgSU5FVGAsIGBJTkZJTklCQU5EYCwgYW5kLCBjcnVjaWFsbHksIGBESUJTYC4gU28sIHRoZSBwcmVzZW5jZSBvZiBgRElCU2AgaXMgbm9uLW5lZ290aWFibGUuIE5vdywgYSBxdWljayBjaGVja+KApiBpcyBgRElCU2AgYSBjb25maWd1cmF0aW9uIG9wdGlvbj8gWWVwLCBjb25maXJtZWQuIEkgY2FuIHNlZSBpdCBkZWZpbmVkIGluIGBkcml2ZXJzL2RpYnMvS2NvbmZpZ2AgYXMgYGNvbmZpZyBESUJTYC4gR29vZC4gVGhhdCBjb25maXJtcyB0aGF0IGBFbmFibGVDb25maWdzYCBzaG91bGQgYWJzb2x1dGVseSBpbmNsdWRlIGBTTUNgLCBgSU5GSU5JQkFORGAsIGFuZCBgRElCU2AuXG5cbkxldCdzIHJlY2FwIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZXNlIHJlcXVpcmVtZW50cy4gVGhpcyBwYXRjaCBhaW1zIHRvIHBhdGNoIGEgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSAob3Igc2ltaWxhciBpc3N1ZSkgbHVya2luZyB3aXRoaW4gdGhlIFNNQyBzdWJzeXN0ZW0uIEl0J3MgdHJpZ2dlcmVkIHdoZW4gYW4gSUIgZGV2aWNlIGlzIHJlbW92ZWQgbWlkLWNvbm5lY3Rpb24gc2V0dXAuIFRoZSBmaXg/IFJlZmVyZW5jZSBjb3VudGluZyBmb3IgYHNtY19pYl9kZXZpY2VgIGR1cmluZyB0aGUgY3JpdGljYWwgYHNtY19pbml0X2luZm9gIHBoYXNlLiBUaGUgY29kZSB0b3VjaGVzIGtleSBjb25uZWN0aW9uIHNldHVwIGZ1bmN0aW9uczogYHNtY19jb25uZWN0YCwgYHNtY19saXN0ZW5gLCBhbmQgYWxzbyBsaW5rIGFkZGl0aW9uIHBhdGhzIGxpa2UgYHNtY19sbGNfY2xpX2FkZF9saW5rYCBhbmQgYHNtY19sbGNfc3J2X2FkZF9saW5rYC4gVGhlc2UgcGF0aHMgYXJlIGFsbCBhY2Nlc3NpYmxlIGFuZCBwb3RlbnRpYWxseSBmdXp6YWJsZSB0aHJvdWdoIEFGX1NNQyBzb2NrZXRzLlxuXG5UaGlzIGlzIHdvcnRoIGZ1enppbmcuIEkgaGF2ZSBhIGxpc3Qgb2YgdGFyZ2V0cyBmb3IgZnV6emluZzogYHNtY19jb25uZWN0YCwgYHNtY19saXN0ZW5gLCBgc21jX3BuZXRfZmluZF9yb2NlX3Jlc291cmNlYCwgYHNtY19wbmV0X2ZpbmRfYWx0X3JvY2VgLCBgc21jX2xsY19jbGlfYWRkX2xpbmtgLCBhbmQgYHNtY19sbGNfc3J2X2FkZF9saW5rYC4gVGhlc2UgYXJlIGFsbCBwcmltZSBjYW5kaWRhdGVzLlxuXG5Ob3csIEkgc2hvdWxkIGNoZWNrIGlmIGBESUJTYCBoYXMgYW55IGRlcGVuZGVuY2llcyBvZiBpdHMgb3duLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzM1MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMzowMjoxMy40NDUzMzk0NzVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2Mjg4OTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kaWJzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kaWJzL0tjb25maWc9MTQ9Y29uZmlnIERJQlNfTE9cXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xNS1cXHRib29sIFxcXCJJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcXFwiXFxuZHJpdmVycy9kaWJzL0tjb25maWc6MTY6XFx0ZGVwZW5kcyBvbiBESUJTXFxuZHJpdmVycy9kaWJzL0tjb25maWctMTctXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAyOjEzLjUxMTYzNzQyOVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDA4OTQ5MzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEZXBlbmRlbmN5IEFuYWx5c2lzIGZvciBhIFNwZWNpZmljIE1vZHVsZSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZm9jdXNpbmcgb24gdGhpcyBgRElCU2AgbW9kdWxlLCBhbmQgZnJvbSB3aGF0IEkgY2FuIHJlY2FsbCwgaXQncyBwcmV0dHkgc3RhbmRhbG9uZS4gSSBkb24ndCBzZWUgYW55IGltbWVkaWF0ZWx5IG9idmlvdXMgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIGJha2VkIGludG8gaXRzIGRlc2lnbi4gVGhhdCdzIGdvb2QsIHNpbXBsaWZpZXMgdGhpbmdzLiBOb3csIGxldCdzIHBpdm90IHRvIHRoZSBgSU5GSU5JQkFORGAgY29tcG9uZW50LiBJJ3ZlIHdvcmtlZCB3aXRoIGl0IGluIHRoZSBwYXN0LCBhbmQgaXQncyBub3RvcmlvdXNseeKApiBpbnRlcmNvbm5lY3RlZC4gSSByZWFsbHkgc2hvdWxkIHZlcmlmeSB0aGF0IGl0IGRvZXNuJ3QgcmVseSBvbiBhbnl0aGluZyBlbHNlLCBlc3BlY2lhbGx5IGFueXRoaW5nIHBvdGVudGlhbGx5IG9ic2N1cmUgdGhhdCBjb3VsZCBjYXVzZSBpc3N1ZXMuIE5lZWQgdG8gY2hlY2sgaXRzIGRlcGVuZGVuY2llcyB0aG9yb3VnaGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODE2OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAyOjIwLjkyMDU4OTkwMVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU4NDg1NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZz0yPW1lbnVjb25maWcgSU5GSU5JQkFORFxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkluZmluaUJhbmQgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo0OlxcdGRlcGVuZHMgb24gSEFTX0lPTUVNIFxcdTAwMjZcXHUwMDI2IEhBU19ETUFcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo1OlxcdGRlcGVuZHMgb24gTkVUXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NjpcXHRkZXBlbmRzIG9uIElORVRcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo3OlxcdGRlcGVuZHMgb24gIUFMUEhBXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctOC1cXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTE4PWNvbmZpZyBJTkZJTklCQU5EX1VTRVJfTUFEXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMTktXFx0dHJpc3RhdGUgXFxcIkluZmluaUJhbmQgdXNlcnNwYWNlIE1BRCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjIwOlxcdGRlcGVuZHMgb24gSU5GSU5JQkFORFxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTIxLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTI4PWNvbmZpZyBJTkZJTklCQU5EX1VTRVJfQUNDRVNTXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMjktXFx0dHJpc3RhdGUgXFxcIkluZmluaUJhbmQgdXNlcnNwYWNlIGFjY2VzcyAodmVyYnMgYW5kIENNKVxcXCJcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzozMDpcXHRkZXBlbmRzIG9uIE1NVVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTMxLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTQ0PWNvbmZpZyBJTkZJTklCQU5EX1VTRVJfTUVNXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDUtXFx0Ym9vbFxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjQ2OlxcdGRlcGVuZHMgb24gSU5GSU5JQkFORF9VU0VSX0FDQ0VTUyAhPSBuXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NDc6XFx0ZGVwZW5kcyBvbiBNTVVcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy00OC1cXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTUxPWNvbmZpZyBJTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkdcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy01Mi1cXHRib29sIFxcXCJJbmZpbmlCYW5kIG9uLWRlbWFuZCBwYWdpbmcgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo1MzpcXHRkZXBlbmRzIG9uIElORklOSUJBTkRfVVNFUl9NRU1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy01NC1cXHRzZWxlY3QgTU1VX05PVElGSUVSXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZz02ND1jb25maWcgSU5GSU5JQkFORF9BRERSX1RSQU5TXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNjUtXFx0Ym9vbCBcXFwiUkRNQS9DTVxcXCJcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo2NjpcXHRkZXBlbmRzIG9uIElORklOSUJBTkRcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy02Ny1cXHRkZWZhdWx0IHlcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTcyPWNvbmZpZyBJTkZJTklCQU5EX0FERFJfVFJBTlNfQ09ORklHRlNcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03My1cXHRib29sXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NzQ6XFx0ZGVwZW5kcyBvbiBJTkZJTklCQU5EX0FERFJfVFJBTlMgXFx1MDAyNlxcdTAwMjYgQ09ORklHRlNfRlMgXFx1MDAyNlxcdTAwMjYgIShJTkZJTklCQU5EPXkgXFx1MDAyNlxcdTAwMjYgQ09ORklHRlNfRlM9bSlcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03NS1cXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTM6MDI6MjAuOTk2NDQzNTEzWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyODU0OTc1NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgYW5kIFNldHRpbmcgUmVzdWx0cyoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBJTkZJTklCQU5EYC4gU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDsgaXQgaGluZ2VzIG9uIGBIQVNfSU9NRU1gLCBgSEFTX0RNQWAsIGBORVRgLCBhbmQgYElORVRgIGJlaW5nIGVuYWJsZWQsIGJ1dCBkZWZpbml0ZWx5ICpub3QqIG9uIGBBTFBIQWAuIFRob3NlIGFyZSBhbGwgZmFpcmx5IHN0YW5kYXJkIHByZXJlcXVpc2l0ZXMsIG5vdGhpbmcgdG9vIG91dCBvZiB0aGUgb3JkaW5hcnkgdGhlcmUuIE1ha2VzIHNlbnNlLlxuXG5Ob3csIG15IGZvY3VzIGlzIG9uIGBTTUNgLCBgSU5GSU5JQkFORGAsIGFuZCBgRElCU2DigJR0aG9zZSBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIEknbSB3b3JraW5nIHdpdGggaGVyZS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGJlc3QgXCJzZXQtcmVzdWx0c1wiIHdoaWNoIEkgYXNzdW1lIGlzIHdoYXQgSSBhbSBkb2luZyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTA5MSwiT3V0cHV0VG9rZW5zIjoyMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMzowMjozMy44NTE0MjI0MDNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ3NzQ5NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNNQ1wiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiRElCU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19jb25uZWN0XCIsXG4gICAgXCJzbWNfbGlzdGVuXCIsXG4gICAgXCJzbWNfcG5ldF9maW5kX3JvY2VfcmVzb3VyY2VcIixcbiAgICBcInNtY19wbmV0X2ZpbmRfYWx0X3JvY2VcIixcbiAgICBcInNtY19sbGNfY2xpX2FkZF9saW5rXCIsXG4gICAgXCJzbWNfbGxjX3Nydl9hZGRfbGlua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGRldmljZSByZW1vdmFsIHJhY2UgY29uZGl0aW9uIGluIHRoZSBTTUMgKFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMpIHN1YnN5c3RlbSBieSBpbnRyb2R1Y2luZyByZWZlcmVuY2UgY291bnRpbmcgZm9yIGBzbWNfaWJfZGV2aWNlYCBkdXJpbmcgY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbi4gVGhlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgY29ubmVjdGlvbiBzZXR1cCBwYXRocyAoYHNtY19jb25uZWN0YCwgYHNtY19saXN0ZW5gKSBhbmQgbGluayBhZGRpdGlvbiBwYXRocyAoYHNtY19sbGNfY2xpX2FkZF9saW5rYCwgYHNtY19sbGNfc3J2X2FkZF9saW5rYCkuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFGX1NNQyBzb2NrZXRzIGFuZCBjYW4gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNNQ1wiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiRElCU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19jb25uZWN0XCIsXG4gICAgXCJzbWNfbGlzdGVuXCIsXG4gICAgXCJzbWNfcG5ldF9maW5kX3JvY2VfcmVzb3VyY2VcIixcbiAgICBcInNtY19wbmV0X2ZpbmRfYWx0X3JvY2VcIixcbiAgICBcInNtY19sbGNfY2xpX2FkZF9saW5rXCIsXG4gICAgXCJzbWNfbGxjX3Nydl9hZGRfbGlua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGRldmljZSByZW1vdmFsIHJhY2UgY29uZGl0aW9uIGluIHRoZSBTTUMgKFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMpIHN1YnN5c3RlbSBieSBpbnRyb2R1Y2luZyByZWZlcmVuY2UgY291bnRpbmcgZm9yIGBzbWNfaWJfZGV2aWNlYCBkdXJpbmcgY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbi4gVGhlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgY29ubmVjdGlvbiBzZXR1cCBwYXRocyAoYHNtY19jb25uZWN0YCwgYHNtY19saXN0ZW5gKSBhbmQgbGluayBhZGRpdGlvbiBwYXRocyAoYHNtY19sbGNfY2xpX2FkZF9saW5rYCwgYHNtY19sbGNfc3J2X2FkZF9saW5rYCkuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFGX1NNQyBzb2NrZXRzIGFuZCBjYW4gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8hrln[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 12:40:41 +0000 UTC FinishedAt: 2026-08-04 13:02:35 +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": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "INFINIBAND", "DIBS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "INFINIBAND", "DIBS" ], "series_id": "f909508b-2868-40c8-84cd-c5e1d135d42d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "smc_connect", "smc_listen", "smc_pnet_find_roce_resource", "smc_pnet_find_alt_roce", "smc_llc_cli_add_link", "smc_llc_srv_add_link" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0RJQlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbWNfY29ubmVjdCYjMzQ7LAogICAgJiMzNDtzbWNfbGlzdGVuJiMzNDssCiAgICAmIzM0O3NtY19wbmV0X2ZpbmRfcm9jZV9yZXNvdXJjZSYjMzQ7LAogICAgJiMzNDtzbWNfcG5ldF9maW5kX2FsdF9yb2NlJiMzNDssCiAgICAmIzM0O3NtY19sbGNfY2xpX2FkZF9saW5rJiMzNDssCiAgICAmIzM0O3NtY19sbGNfc3J2X2FkZF9saW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGRldmljZSByZW1vdmFsIHJhY2UgY29uZGl0aW9uIGluIHRoZSBTTUMgKFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMpIHN1YnN5c3RlbSBieSBpbnRyb2R1Y2luZyByZWZlcmVuY2UgY291bnRpbmcgZm9yIGBzbWNfaWJfZGV2aWNlYCBkdXJpbmcgY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbi4gVGhlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgY29ubmVjdGlvbiBzZXR1cCBwYXRocyAoYHNtY19jb25uZWN0YCwgYHNtY19saXN0ZW5gKSBhbmQgbGluayBhZGRpdGlvbiBwYXRocyAoYHNtY19sbGNfY2xpX2FkZF9saW5rYCwgYHNtY19sbGNfc3J2X2FkZF9saW5rYCkuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFGX1NNQyBzb2NrZXRzIGFuZCBjYW4gYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2FlNWVmZDkxYzVjM2JhZjdhZTBlOGE4NzZhMjRiY2ZhZjAxMmE3Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDQgMTI6NTk6NTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9hZl9zbWMuYyBiL25ldC9zbWMvYWZfc21jLmNcbmluZGV4IGI1ZGI2OTA3M2UyMGYuLjE2MDI3MTQ2NDMwNWMgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL2FmX3NtYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL2FmX3NtYy5jXG5AQCAtMTIyNSw3ICYjNDM7MTIyNSw3IEBAIHZvaWQgc21jX2ZpbGxfZ2lkX2xpc3Qoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXG4gXHQgICAgICAgU01DX0dJRF9TSVpFKTtcbiBcbiBvdXQ6XG4tXHRrZnJlZShhbHRfaW5pKTtcbiYjNDM7XHRzbWNfaW5pdF9pbmZvX2ZyZWUoYWx0X2luaSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgc21jX2Nvbm5lY3RfcmRtYV92Ml9wcmVwYXJlKHN0cnVjdCBzbWNfc29jayAqc21jLFxuQEAgLTE1OTYsMTQgJiM0MzsxNTk2LDE0IEBAIHN0YXRpYyBpbnQgX19zbWNfY29ubmVjdChzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbiBcdFNNQ19TVEFUX0NMTlRfU1VDQ19JTkMoc29ja19uZXQoc21jLVx1MDAzZWNsY3NvY2stXHUwMDNlc2spLCBhY2xjKTtcbiBcdHNtY19jb25uZWN0X2lzbV92bGFuX2NsZWFudXAoaW5pKTtcbiBcdGtmcmVlKGJ1Zik7XG4tXHRrZnJlZShpbmkpO1xuJiM0MztcdHNtY19pbml0X2luZm9fZnJlZShpbmkpO1xuIFx0cmV0dXJuIDA7XG4gXG4gdmxhbl9jbGVhbnVwOlxuIFx0c21jX2Nvbm5lY3RfaXNtX3ZsYW5fY2xlYW51cChpbmkpO1xuIFx0a2ZyZWUoYnVmKTtcbiBmYWxsYmFjazpcbi1cdGtmcmVlKGluaSk7XG4mIzQzO1x0c21jX2luaXRfaW5mb19mcmVlKGluaSk7XG4gXHRyZXR1cm4gc21jX2Nvbm5lY3RfZGVjbGluZV9mYWxsYmFjayhzbWMsIHJjLCB2ZXJzaW9uKTtcbiB9XG4gXG5AQCAtMjM0Myw3ICYjNDM7MjM0MywxMCBAQCBzdGF0aWMgdm9pZCBzbWNfZmluZF9yZG1hX3YyX2RldmljZV9zZXJ2KHN0cnVjdCBzbWNfc29jayAqbmV3X3NtYyxcbiBcbiBub3RfZm91bmQ6XG4gXHRpbmktXHUwMDNlc21jcl92ZXJzaW9uIFx1MDAyNj0gflNNQ19WMjtcbiYjNDM7XHRpZiAoaW5pLVx1MDAzZXNtY3J2Mi5pYl9kZXZfdjJfcmVmKVxuJiM0MztcdFx0c21jX2liZGV2X2luaXRfcHV0KGluaS1cdTAwM2VzbWNydjIuaWJfZGV2X3YyKTtcbiBcdGluaS1cdTAwM2VzbWNydjIuaWJfZGV2X3YyID0gTlVMTDtcbiYjNDM7XHRpbmktXHUwMDNlc21jcnYyLmliX2Rldl92Ml9yZWYgPSBmYWxzZTtcbiBcdGluaS1cdTAwM2VjaGVja19zbWNydjIgPSBmYWxzZTtcbiB9XG4gXG5AQCAtMjU4Nyw3ICYjNDM7MjU5MCw3IEBAIHN0YXRpYyB2b2lkIHNtY19saXN0ZW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRzbWNfbGlzdGVuX2RlY2xpbmUobmV3X3NtYywgcmMsIGluaSA/IGluaS1cdTAwM2VmaXJzdF9jb250YWN0X2xvY2FsIDogMCxcbiBcdFx0XHQgICBwcm9wb3NhbF92ZXJzaW9uKTtcbiBvdXRfZnJlZTpcbi1cdGtmcmVlKGluaSk7XG4mIzQzO1x0c21jX2luaXRfaW5mb19mcmVlKGluaSk7XG4gXHRrZnJlZShidWYpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmMgYi9uZXQvc21jL3NtY19jb3JlLmNcbmluZGV4IGNmNmI2MjBmZWYwNWYuLmU1OWYzMjdmMjk0YzIgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX2NvcmUuY1xuQEAgLTU1LDYgJiM0Mzs1NSwxNyBAQCBzdGF0aWMgdm9pZCBfX3NtY19sZ3JfdGVybWluYXRlKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLCBib29sIHNvZnQpO1xuIFxuIHN0YXRpYyB2b2lkIHNtY19saW5rX2Rvd25fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuIFxuJiM0Mzt2b2lkIHNtY19pbml0X2luZm9fZnJlZShzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFpbmkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKGluaS1cdTAwM2VpYl9kZXZfcmVmKVxuJiM0MztcdFx0c21jX2liZGV2X2luaXRfcHV0KGluaS1cdTAwM2VpYl9kZXYpO1xuJiM0MztcdGlmIChpbmktXHUwMDNlc21jcnYyLmliX2Rldl92Ml9yZWYpXG4mIzQzO1x0XHRzbWNfaWJkZXZfaW5pdF9wdXQoaW5pLVx1MDAzZXNtY3J2Mi5pYl9kZXZfdjIpO1xuJiM0MztcdGtmcmVlKGluaSk7XG4mIzQzO31cbiYjNDM7XG4gLyogcmV0dXJuIGhlYWQgb2YgbGluayBncm91cCBsaXN0IGFuZCBpdHMgbG9jayBmb3IgYSBnaXZlbiBsaW5rIGdyb3VwICovXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9oZWFkICpzbWNfbGdyX2xpc3RfaGVhZChzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbiBcdFx0XHRcdFx0XHQgIHNwaW5sb2NrX3QgKipsZ3JfbG9jaylcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmggYi9uZXQvc21jL3NtY19jb3JlLmhcbmluZGV4IDVjMThmMDhhNGM4YTUuLjM4NWYxNmNjNTM2OGUgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19jb3JlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX2NvcmUuaFxuQEAgLTQwMyw2ICYjNDM7NDAzLDcgQEAgc3RydWN0IHNtY19pbml0X2luZm9fc21jcnYyIHtcbiBcbiBcdC8qIE91dHB1dCBmaWVsZHMgd2hlbiBzYWRkciBpcyBzZXQgKi9cbiBcdHN0cnVjdCBzbWNfaWJfZGV2aWNlXHQqaWJfZGV2X3YyO1xuJiM0MztcdGJvb2xcdFx0XHRpYl9kZXZfdjJfcmVmO1xuIFx0dThcdFx0XHRpYl9wb3J0X3YyO1xuIFx0dThcdFx0XHRpYl9naWRfdjJbU01DX0dJRF9TSVpFXTtcbiBcbkBAIC00MzgsNiAmIzQzOzQzOSw3IEBAIHN0cnVjdCBzbWNfaW5pdF9pbmZvIHtcbiBcdHU4XHRcdFx0cGVlcl9tYWNbRVRIX0FMRU5dO1xuIFx0dThcdFx0XHRwZWVyX3N5c3RlbWlkW1NNQ19TWVNURU1JRF9MRU5dO1xuIFx0c3RydWN0IHNtY19pYl9kZXZpY2VcdCppYl9kZXY7XG4mIzQzO1x0Ym9vbFx0XHRcdGliX2Rldl9yZWY7XG4gXHR1OFx0XHRcdGliX2dpZFtTTUNfR0lEX1NJWkVdO1xuIFx0dThcdFx0XHRpYl9wb3J0O1xuIFx0dTMyXHRcdFx0aWJfY2xjcXBuO1xuQEAgLTU5NCw2ICYjNDM7NTk2LDcgQEAgdm9pZCBzbWNfcnRva2VuX3NldDIoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsIGludCBydG9rX2lkeCwgaW50IGxpbmtfaWQsXG4gdm9pZCBzbWNfc25kYnVmX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xuIHZvaWQgc21jX3JtYl9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcbiBpbnQgc21jX3ZsYW5fYnlfdGNwc2soc3RydWN0IHNvY2tldCAqY2xjc29jaywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSk7XG4mIzQzO3ZvaWQgc21jX2luaXRfaW5mb19mcmVlKHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpO1xuIFxuIHZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xuIGludCBzbWNfY29ubl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpO1xuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2liLmMgYi9uZXQvc21jL3NtY19pYi5jXG5pbmRleCA5YmI0OTU3MDc0NDVlLi4wMWM5YjVjNjJkZjc2IDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfaWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfaWIuY1xuQEAgLTk1MCw2ICYjNDM7OTUwLDggQEAgc3RhdGljIGludCBzbWNfaWJfYWRkX2RldihzdHJ1Y3QgaWJfZGV2aWNlICppYmRldilcbiBcbiBcdHNtY2liZGV2LVx1MDAzZWliZGV2ID0gaWJkZXY7XG4gXHRJTklUX1dPUksoXHUwMDI2c21jaWJkZXYtXHUwMDNlcG9ydF9ldmVudF93b3JrLCBzbWNfaWJfcG9ydF9ldmVudF93b3JrKTtcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnNtY2liZGV2LVx1MDAzZWluaXRfY250LCAwKTtcbiYjNDM7XHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNnNtY2liZGV2LVx1MDAzZWluaXRfd2FpdCk7XG4gXHRhdG9taWNfc2V0KFx1MDAyNnNtY2liZGV2LVx1MDAzZWxua19jbnQsIDApO1xuIFx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZzbWNpYmRldi1cdTAwM2VsbmtzX2RlbGV0ZWQpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZzbWNpYmRldi1cdTAwM2VtdXRleCk7XG5AQCAtMTAwMCw2ICYjNDM7MTAwMiw5IEBAIHN0YXRpYyB2b2lkIHNtY19pYl9yZW1vdmVfZGV2KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB2b2lkICpjbGllbnRfZGF0YSlcbiBcdG11dGV4X3VubG9jayhcdTAwMjZzbWNfaWJfZGV2aWNlcy5tdXRleCk7XG4gXHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O3NtYzogcmVtb3ZpbmcgaWIgZGV2aWNlICVzXFxuXCYjMzQ7LFxuIFx0XHRcdCAgICBzbWNpYmRldi1cdTAwM2VpYmRldi1cdTAwM2VuYW1lKTtcbiYjNDM7XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2c21jaWJkZXYtXHUwMDNlaW5pdF9jbnQpKVxuJiM0MztcdFx0d2FpdF9ldmVudChzbWNpYmRldi1cdTAwM2Vpbml0X3dhaXQsXG4mIzQzO1x0XHRcdCAgICFhdG9taWNfcmVhZChcdTAwMjZzbWNpYmRldi1cdTAwM2Vpbml0X2NudCkpO1xuIFx0c21jX3NtY3JfdGVybWluYXRlX2FsbChzbWNpYmRldik7XG4gXHRzbWNfaWJfY2xlYW51cF9wZXJfaWJkZXYoc21jaWJkZXYpO1xuIFx0aWJfdW5yZWdpc3Rlcl9ldmVudF9oYW5kbGVyKFx1MDAyNnNtY2liZGV2LVx1MDAzZWV2ZW50X2hhbmRsZXIpO1xuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2liLmggYi9uZXQvc21jL3NtY19pYi5oXG5pbmRleCBlZjhhYzJiNzU0NmRmLi44ZTlmZDVhMjAwYTJiIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfaWIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfaWIuaFxuQEAgLTUxLDYgJiM0Mzs1MSw4IEBAIHN0cnVjdCBzbWNfaWJfZGV2aWNlIHtcdFx0XHRcdC8qIGliLWRldmljZSBpbmZvcyBmb3Igc21jICovXG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHBvcnRfZXZlbnRfd29yaztcbiBcdHVuc2lnbmVkIGxvbmdcdFx0cG9ydF9ldmVudF9tYXNrO1xuIFx0REVDTEFSRV9CSVRNQVAocG9ydHNfZ29pbmdfYXdheSwgU01DX01BWF9QT1JUUyk7XG4mIzQzO1x0YXRvbWljX3RcdFx0aW5pdF9jbnQ7XHQvKiBudW1iZXIgb2YgZGV2aWNlIHNlbGVjdGlvbnMgKi9cbiYjNDM7XHR3YWl0X3F1ZXVlX2hlYWRfdFx0aW5pdF93YWl0O1x0Lyogd2FpdCBmb3Igc2VsZWN0aW9ucyB0byBlbmQgKi9cbiBcdGF0b21pY190XHRcdGxua19jbnQ7XHQvKiBudW1iZXIgb2YgbGlua3Mgb24gaWJkZXYgKi9cbiBcdHdhaXRfcXVldWVfaGVhZF90XHRsbmtzX2RlbGV0ZWQ7XHQvKiB3YWl0IDQgcmVtb3ZhbCBvZiBhbGwgbGlua3MqL1xuIFx0c3RydWN0IG11dGV4XHRcdG11dGV4O1x0XHQvKiBwcm90ZWN0IGRldiBzZXR1cCYjNDM7Y2xlYW51cCAqL1xuQEAgLTU5LDYgJiM0Mzs2MSwxNyBAQCBzdHJ1Y3Qgc21jX2liX2RldmljZSB7XHRcdFx0XHQvKiBpYi1kZXZpY2UgaW5mb3MgZm9yIHNtYyAqL1xuIFx0aW50XHRcdFx0bmRldl9pZmlkeFtTTUNfTUFYX1BPUlRTXTsgLyogbmRldiBpZiBpbmRleGVzICovXG4gfTtcbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNtY19pYmRldl9pbml0X2dldChzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYpXG4mIzQzO3tcbiYjNDM7XHRhdG9taWNfaW5jKFx1MDAyNnNtY2liZGV2LVx1MDAzZWluaXRfY250KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNtY19pYmRldl9pbml0X3B1dChzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZzbWNpYmRldi1cdTAwM2Vpbml0X2NudCkpXG4mIzQzO1x0XHR3YWtlX3VwKFx1MDAyNnNtY2liZGV2LVx1MDAzZWluaXRfd2FpdCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBfX2JlMzIgc21jX2liX2dpZF90b19pcHY0KHU4IGdpZFtTTUNfR0lEX1NJWkVdKVxuIHtcbiBcdHN0cnVjdCBpbjZfYWRkciAqYWRkcjYgPSAoc3RydWN0IGluNl9hZGRyICopZ2lkO1xuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2xsYy5jIGIvbmV0L3NtYy9zbWNfbGxjLmNcbmluZGV4IDk1NGIyZmYxODE1YzIuLjE1YWUxOWE5ZGIwN2UgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19sbGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfbGxjLmNcbkBAIC0xMTE4LDcgJiM0MzsxMTE4LDcgQEAgaW50IHNtY19sbGNfY2xpX2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaywgc3RydWN0IHNtY19sbGNfcWVudHJ5ICpxZW50cnkpXG4gb3V0X3JlamVjdDpcbiBcdHNtY19sbGNfY2xpX2FkZF9saW5rX3JlamVjdChxZW50cnkpO1xuIG91dDpcbi1cdGtmcmVlKGluaSk7XG4mIzQzO1x0c21jX2luaXRfaW5mb19mcmVlKGluaSk7XG4gXHRrZnJlZShxZW50cnkpO1xuIFx0cmV0dXJuIHJjO1xuIH1cbkBAIC0xMTkyLDcgJiM0MzsxMTkyLDcgQEAgc3RhdGljIHZvaWQgc21jX2xsY19jbGlfYWRkX2xpbmtfaW52aXRlKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcdHNtY19sbGNfc2VuZF9hZGRfbGluayhsaW5rLCBpbmktXHUwMDNlaWJfZGV2LVx1MDAzZW1hY1tpbmktXHUwMDNlaWJfcG9ydCAtIDFdLFxuIFx0XHRcdCAgICAgIGluaS1cdTAwM2VpYl9naWQsIE5VTEwsIFNNQ19MTENfUkVRKTtcbiBvdXQ6XG4tXHRrZnJlZShpbmkpO1xuJiM0MztcdHNtY19pbml0X2luZm9fZnJlZShpbmkpO1xuIFx0a2ZyZWUocWVudHJ5KTtcbiB9XG4gXG5AQCAtMTUxMiw3ICYjNDM7MTUxMiw3IEBAIGludCBzbWNfbGxjX3Nydl9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gXHRyYyA9IHNtY19sbGNfc3J2X2NvbmZfbGluayhsaW5rLCBsaW5rX25ldywgbGdyX25ld190KTtcbiBcdGlmIChyYylcbiBcdFx0Z290byBvdXRfZXJyO1xuLVx0a2ZyZWUoaW5pKTtcbiYjNDM7XHRzbWNfaW5pdF9pbmZvX2ZyZWUoaW5pKTtcbiBcdHJldHVybiAwO1xuIG91dF9lcnI6XG4gXHRpZiAobGlua19uZXcpIHtcbkBAIC0xNTIwLDcgJiM0MzsxNTIwLDcgQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcdFx0c21jcl9saW5rX2NsZWFyKGxpbmtfbmV3LCBmYWxzZSk7XG4gXHR9XG4gb3V0OlxuLVx0a2ZyZWUoaW5pKTtcbiYjNDM7XHRzbWNfaW5pdF9pbmZvX2ZyZWUoaW5pKTtcbiBcdGlmIChzZW5kX3JlcV9hZGRfbGlua19yZXNwKVxuIFx0XHRzbWNfbGxjX3NlbmRfcmVxX2FkZF9saW5rX3Jlc3BvbnNlKHJlcV9xZW50cnkpO1xuIFx0cmV0dXJuIHJjO1xuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX3BuZXQuYyBiL25ldC9zbWMvc21jX3BuZXQuY1xuaW5kZXggNjNlMjg2ZTJkZmFhOC4uN2UwMWUwMWE1MjJiNyAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jX3BuZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfcG5ldC5jXG5AQCAtOTgwLDE0ICYjNDM7OTgwLDIyIEBAIHN0YXRpYyBpbnQgc21jX3BuZXRfZGV0ZXJtaW5lX2dpZChzdHJ1Y3Qgc21jX2liX2RldmljZSAqaWJkZXYsIGludCBpLFxuIFx0aWYgKCFpbmktXHUwMDNlY2hlY2tfc21jcnYyIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFzbWNfaWJfZGV0ZXJtaW5lX2dpZChpYmRldiwgaSwgaW5pLVx1MDAzZXZsYW5faWQsIGluaS1cdTAwM2VpYl9naWQsIE5VTEwsXG4gXHRcdFx0XHQgIE5VTEwpKSB7XG4mIzQzO1x0XHRpZiAoaW5pLVx1MDAzZWliX2Rldl9yZWYpXG4mIzQzO1x0XHRcdHNtY19pYmRldl9pbml0X3B1dChpbmktXHUwMDNlaWJfZGV2KTtcbiYjNDM7XHRcdHNtY19pYmRldl9pbml0X2dldChpYmRldik7XG4gXHRcdGluaS1cdTAwM2VpYl9kZXYgPSBpYmRldjtcbiYjNDM7XHRcdGluaS1cdTAwM2VpYl9kZXZfcmVmID0gdHJ1ZTtcbiBcdFx0aW5pLVx1MDAzZWliX3BvcnQgPSBpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdGlmIChpbmktXHUwMDNlY2hlY2tfc21jcnYyIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFzbWNfaWJfZGV0ZXJtaW5lX2dpZChpYmRldiwgaSwgaW5pLVx1MDAzZXZsYW5faWQsIGluaS1cdTAwM2VzbWNydjIuaWJfZ2lkX3YyLFxuIFx0XHRcdFx0ICBOVUxMLCBcdTAwMjZpbmktXHUwMDNlc21jcnYyKSkge1xuJiM0MztcdFx0aWYgKGluaS1cdTAwM2VzbWNydjIuaWJfZGV2X3YyX3JlZilcbiYjNDM7XHRcdFx0c21jX2liZGV2X2luaXRfcHV0KGluaS1cdTAwM2VzbWNydjIuaWJfZGV2X3YyKTtcbiYjNDM7XHRcdHNtY19pYmRldl9pbml0X2dldChpYmRldik7XG4gXHRcdGluaS1cdTAwM2VzbWNydjIuaWJfZGV2X3YyID0gaWJkZXY7XG4mIzQzO1x0XHRpbmktXHUwMDNlc21jcnYyLmliX2Rldl92Ml9yZWYgPSB0cnVlO1xuIFx0XHRpbmktXHUwMDNlc21jcnYyLmliX3BvcnRfdjIgPSBpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7RElCUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY19jb25uZWN0JiMzNDssCiAgICAmIzM0O3NtY19saXN0ZW4mIzM0OywKICAgICYjMzQ7c21jX3BuZXRfZmluZF9yb2NlX3Jlc291cmNlJiMzNDssCiAgICAmIzM0O3NtY19wbmV0X2ZpbmRfYWx0X3JvY2UmIzM0OywKICAgICYjMzQ7c21jX2xsY19jbGlfYWRkX2xpbmsmIzM0OywKICAgICYjMzQ7c21jX2xsY19zcnZfYWRkX2xpbmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgZGV2aWNlIHJlbW92YWwgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgc3Vic3lzdGVtIGJ5IGludHJvZHVjaW5nIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgYHNtY19pYl9kZXZpY2VgIGR1cmluZyBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uLiBUaGUgY2hhbmdlcyBtb2RpZnkgY29yZSBjb25uZWN0aW9uIHNldHVwIHBhdGhzIChgc21jX2Nvbm5lY3RgLCBgc21jX2xpc3RlbmApIGFuZCBsaW5rIGFkZGl0aW9uIHBhdGhzIChgc21jX2xsY19jbGlfYWRkX2xpbmtgLCBgc21jX2xsY19zcnZfYWRkX2xpbmtgKS4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQUZfU01DIHNvY2tldHMgYW5kIGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYWU1ZWZkOTFjNWMzYmFmN2FlMGU4YTg3NmEyNGJjZmFmMDEyYTdjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgNCAxMjo1OTo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zbWMvYWZfc21jLmMgYi9uZXQvc21jL2FmX3NtYy5jCmluZGV4IGI1ZGI2OTA3M2UyMGYuLjE2MDI3MTQ2NDMwNWMgMTAwNjQ0Ci0tLSBhL25ldC9zbWMvYWZfc21jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9hZl9zbWMuYwpAQCAtMTIyNSw3ICYjNDM7MTIyNSw3IEBAIHZvaWQgc21jX2ZpbGxfZ2lkX2xpc3Qoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsCiAJICAgICAgIFNNQ19HSURfU0laRSk7CiAKIG91dDoKLQlrZnJlZShhbHRfaW5pKTsKJiM0MzsJc21jX2luaXRfaW5mb19mcmVlKGFsdF9pbmkpOwogfQogCiBzdGF0aWMgaW50IHNtY19jb25uZWN0X3JkbWFfdjJfcHJlcGFyZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywKQEAgLTE1OTYsMTQgJiM0MzsxNTk2LDE0IEBAIHN0YXRpYyBpbnQgX19zbWNfY29ubmVjdChzdHJ1Y3Qgc21jX3NvY2sgKnNtYykKIAlTTUNfU1RBVF9DTE5UX1NVQ0NfSU5DKHNvY2tfbmV0KHNtYy0mZ3Q7Y2xjc29jay0mZ3Q7c2spLCBhY2xjKTsKIAlzbWNfY29ubmVjdF9pc21fdmxhbl9jbGVhbnVwKGluaSk7CiAJa2ZyZWUoYnVmKTsKLQlrZnJlZShpbmkpOwomIzQzOwlzbWNfaW5pdF9pbmZvX2ZyZWUoaW5pKTsKIAlyZXR1cm4gMDsKIAogdmxhbl9jbGVhbnVwOgogCXNtY19jb25uZWN0X2lzbV92bGFuX2NsZWFudXAoaW5pKTsKIAlrZnJlZShidWYpOwogZmFsbGJhY2s6Ci0Ja2ZyZWUoaW5pKTsKJiM0MzsJc21jX2luaXRfaW5mb19mcmVlKGluaSk7CiAJcmV0dXJuIHNtY19jb25uZWN0X2RlY2xpbmVfZmFsbGJhY2soc21jLCByYywgdmVyc2lvbik7CiB9CiAKQEAgLTIzNDMsNyAmIzQzOzIzNDMsMTAgQEAgc3RhdGljIHZvaWQgc21jX2ZpbmRfcmRtYV92Ml9kZXZpY2Vfc2VydihzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMsCiAKIG5vdF9mb3VuZDoKIAlpbmktJmd0O3NtY3JfdmVyc2lvbiAmYW1wOz0gflNNQ19WMjsKJiM0MzsJaWYgKGluaS0mZ3Q7c21jcnYyLmliX2Rldl92Ml9yZWYpCiYjNDM7CQlzbWNfaWJkZXZfaW5pdF9wdXQoaW5pLSZndDtzbWNydjIuaWJfZGV2X3YyKTsKIAlpbmktJmd0O3NtY3J2Mi5pYl9kZXZfdjIgPSBOVUxMOwomIzQzOwlpbmktJmd0O3NtY3J2Mi5pYl9kZXZfdjJfcmVmID0gZmFsc2U7CiAJaW5pLSZndDtjaGVja19zbWNydjIgPSBmYWxzZTsKIH0KIApAQCAtMjU4Nyw3ICYjNDM7MjU5MCw3IEBAIHN0YXRpYyB2b2lkIHNtY19saXN0ZW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJc21jX2xpc3Rlbl9kZWNsaW5lKG5ld19zbWMsIHJjLCBpbmkgPyBpbmktJmd0O2ZpcnN0X2NvbnRhY3RfbG9jYWwgOiAwLAogCQkJICAgcHJvcG9zYWxfdmVyc2lvbik7CiBvdXRfZnJlZToKLQlrZnJlZShpbmkpOwomIzQzOwlzbWNfaW5pdF9pbmZvX2ZyZWUoaW5pKTsKIAlrZnJlZShidWYpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmMgYi9uZXQvc21jL3NtY19jb3JlLmMKaW5kZXggY2Y2YjYyMGZlZjA1Zi4uZTU5ZjMyN2YyOTRjMiAxMDA2NDQKLS0tIGEvbmV0L3NtYy9zbWNfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX2NvcmUuYwpAQCAtNTUsNiAmIzQzOzU1LDE3IEBAIHN0YXRpYyB2b2lkIF9fc21jX2xncl90ZXJtaW5hdGUoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsIGJvb2wgc29mdCk7CiAKIHN0YXRpYyB2b2lkIHNtY19saW5rX2Rvd25fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCiYjNDM7dm9pZCBzbWNfaW5pdF9pbmZvX2ZyZWUoc3RydWN0IHNtY19pbml0X2luZm8gKmluaSkKJiM0Mzt7CiYjNDM7CWlmICghaW5pKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpZiAoaW5pLSZndDtpYl9kZXZfcmVmKQomIzQzOwkJc21jX2liZGV2X2luaXRfcHV0KGluaS0mZ3Q7aWJfZGV2KTsKJiM0MzsJaWYgKGluaS0mZ3Q7c21jcnYyLmliX2Rldl92Ml9yZWYpCiYjNDM7CQlzbWNfaWJkZXZfaW5pdF9wdXQoaW5pLSZndDtzbWNydjIuaWJfZGV2X3YyKTsKJiM0MzsJa2ZyZWUoaW5pKTsKJiM0Mzt9CiYjNDM7CiAvKiByZXR1cm4gaGVhZCBvZiBsaW5rIGdyb3VwIGxpc3QgYW5kIGl0cyBsb2NrIGZvciBhIGdpdmVuIGxpbmsgZ3JvdXAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfaGVhZCAqc21jX2xncl9saXN0X2hlYWQoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsCiAJCQkJCQkgIHNwaW5sb2NrX3QgKipsZ3JfbG9jaykKZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2NvcmUuaCBiL25ldC9zbWMvc21jX2NvcmUuaAppbmRleCA1YzE4ZjA4YTRjOGE1Li4zODVmMTZjYzUzNjhlIDEwMDY0NAotLS0gYS9uZXQvc21jL3NtY19jb3JlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfY29yZS5oCkBAIC00MDMsNiAmIzQzOzQwMyw3IEBAIHN0cnVjdCBzbWNfaW5pdF9pbmZvX3NtY3J2MiB7CiAKIAkvKiBPdXRwdXQgZmllbGRzIHdoZW4gc2FkZHIgaXMgc2V0ICovCiAJc3RydWN0IHNtY19pYl9kZXZpY2UJKmliX2Rldl92MjsKJiM0MzsJYm9vbAkJCWliX2Rldl92Ml9yZWY7CiAJdTgJCQlpYl9wb3J0X3YyOwogCXU4CQkJaWJfZ2lkX3YyW1NNQ19HSURfU0laRV07CiAKQEAgLTQzOCw2ICYjNDM7NDM5LDcgQEAgc3RydWN0IHNtY19pbml0X2luZm8gewogCXU4CQkJcGVlcl9tYWNbRVRIX0FMRU5dOwogCXU4CQkJcGVlcl9zeXN0ZW1pZFtTTUNfU1lTVEVNSURfTEVOXTsKIAlzdHJ1Y3Qgc21jX2liX2RldmljZQkqaWJfZGV2OwomIzQzOwlib29sCQkJaWJfZGV2X3JlZjsKIAl1OAkJCWliX2dpZFtTTUNfR0lEX1NJWkVdOwogCXU4CQkJaWJfcG9ydDsKIAl1MzIJCQlpYl9jbGNxcG47CkBAIC01OTQsNiAmIzQzOzU5Niw3IEBAIHZvaWQgc21jX3J0b2tlbl9zZXQyKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLCBpbnQgcnRva19pZHgsIGludCBsaW5rX2lkLAogdm9pZCBzbWNfc25kYnVmX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pOwogdm9pZCBzbWNfcm1iX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pOwogaW50IHNtY192bGFuX2J5X3RjcHNrKHN0cnVjdCBzb2NrZXQgKmNsY3NvY2ssIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpOwomIzQzO3ZvaWQgc21jX2luaXRfaW5mb19mcmVlKHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpOwogCiB2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTsKIGludCBzbWNfY29ubl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpOwpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfaWIuYyBiL25ldC9zbWMvc21jX2liLmMKaW5kZXggOWJiNDk1NzA3NDQ1ZS4uMDFjOWI1YzYyZGY3NiAxMDA2NDQKLS0tIGEvbmV0L3NtYy9zbWNfaWIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19pYi5jCkBAIC05NTAsNiAmIzQzOzk1MCw4IEBAIHN0YXRpYyBpbnQgc21jX2liX2FkZF9kZXYoc3RydWN0IGliX2RldmljZSAqaWJkZXYpCiAKIAlzbWNpYmRldi0mZ3Q7aWJkZXYgPSBpYmRldjsKIAlJTklUX1dPUksoJmFtcDtzbWNpYmRldi0mZ3Q7cG9ydF9ldmVudF93b3JrLCBzbWNfaWJfcG9ydF9ldmVudF93b3JrKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3NtY2liZGV2LSZndDtpbml0X2NudCwgMCk7CiYjNDM7CWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFtcDtzbWNpYmRldi0mZ3Q7aW5pdF93YWl0KTsKIAlhdG9taWNfc2V0KCZhbXA7c21jaWJkZXYtJmd0O2xua19jbnQsIDApOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFtcDtzbWNpYmRldi0mZ3Q7bG5rc19kZWxldGVkKTsKIAltdXRleF9pbml0KCZhbXA7c21jaWJkZXYtJmd0O211dGV4KTsKQEAgLTEwMDAsNiAmIzQzOzEwMDIsOSBAQCBzdGF0aWMgdm9pZCBzbWNfaWJfcmVtb3ZlX2RldihzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdm9pZCAqY2xpZW50X2RhdGEpCiAJbXV0ZXhfdW5sb2NrKCZhbXA7c21jX2liX2RldmljZXMubXV0ZXgpOwogCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtzbWM6IHJlbW92aW5nIGliIGRldmljZSAlc1xuJiMzNDssCiAJCQkgICAgc21jaWJkZXYtJmd0O2liZGV2LSZndDtuYW1lKTsKJiM0MzsJaWYgKGF0b21pY19yZWFkKCZhbXA7c21jaWJkZXYtJmd0O2luaXRfY250KSkKJiM0MzsJCXdhaXRfZXZlbnQoc21jaWJkZXYtJmd0O2luaXRfd2FpdCwKJiM0MzsJCQkgICAhYXRvbWljX3JlYWQoJmFtcDtzbWNpYmRldi0mZ3Q7aW5pdF9jbnQpKTsKIAlzbWNfc21jcl90ZXJtaW5hdGVfYWxsKHNtY2liZGV2KTsKIAlzbWNfaWJfY2xlYW51cF9wZXJfaWJkZXYoc21jaWJkZXYpOwogCWliX3VucmVnaXN0ZXJfZXZlbnRfaGFuZGxlcigmYW1wO3NtY2liZGV2LSZndDtldmVudF9oYW5kbGVyKTsKZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2liLmggYi9uZXQvc21jL3NtY19pYi5oCmluZGV4IGVmOGFjMmI3NTQ2ZGYuLjhlOWZkNWEyMDBhMmIgMTAwNjQ0Ci0tLSBhL25ldC9zbWMvc21jX2liLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfaWIuaApAQCAtNTEsNiAmIzQzOzUxLDggQEAgc3RydWN0IHNtY19pYl9kZXZpY2UgewkJCQkvKiBpYi1kZXZpY2UgaW5mb3MgZm9yIHNtYyAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdAlwb3J0X2V2ZW50X3dvcms7CiAJdW5zaWduZWQgbG9uZwkJcG9ydF9ldmVudF9tYXNrOwogCURFQ0xBUkVfQklUTUFQKHBvcnRzX2dvaW5nX2F3YXksIFNNQ19NQVhfUE9SVFMpOwomIzQzOwlhdG9taWNfdAkJaW5pdF9jbnQ7CS8qIG51bWJlciBvZiBkZXZpY2Ugc2VsZWN0aW9ucyAqLwomIzQzOwl3YWl0X3F1ZXVlX2hlYWRfdAlpbml0X3dhaXQ7CS8qIHdhaXQgZm9yIHNlbGVjdGlvbnMgdG8gZW5kICovCiAJYXRvbWljX3QJCWxua19jbnQ7CS8qIG51bWJlciBvZiBsaW5rcyBvbiBpYmRldiAqLwogCXdhaXRfcXVldWVfaGVhZF90CWxua3NfZGVsZXRlZDsJLyogd2FpdCA0IHJlbW92YWwgb2YgYWxsIGxpbmtzKi8KIAlzdHJ1Y3QgbXV0ZXgJCW11dGV4OwkJLyogcHJvdGVjdCBkZXYgc2V0dXAmIzQzO2NsZWFudXAgKi8KQEAgLTU5LDYgJiM0Mzs2MSwxNyBAQCBzdHJ1Y3Qgc21jX2liX2RldmljZSB7CQkJCS8qIGliLWRldmljZSBpbmZvcyBmb3Igc21jICovCiAJaW50CQkJbmRldl9pZmlkeFtTTUNfTUFYX1BPUlRTXTsgLyogbmRldiBpZiBpbmRleGVzICovCiB9OwogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNtY19pYmRldl9pbml0X2dldChzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYpCiYjNDM7ewomIzQzOwlhdG9taWNfaW5jKCZhbXA7c21jaWJkZXYtJmd0O2luaXRfY250KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNtY19pYmRldl9pbml0X3B1dChzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYpCiYjNDM7ewomIzQzOwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYW1wO3NtY2liZGV2LSZndDtpbml0X2NudCkpCiYjNDM7CQl3YWtlX3VwKCZhbXA7c21jaWJkZXYtJmd0O2luaXRfd2FpdCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBfX2JlMzIgc21jX2liX2dpZF90b19pcHY0KHU4IGdpZFtTTUNfR0lEX1NJWkVdKQogewogCXN0cnVjdCBpbjZfYWRkciAqYWRkcjYgPSAoc3RydWN0IGluNl9hZGRyICopZ2lkOwpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfbGxjLmMgYi9uZXQvc21jL3NtY19sbGMuYwppbmRleCA5NTRiMmZmMTgxNWMyLi4xNWFlMTlhOWRiMDdlIDEwMDY0NAotLS0gYS9uZXQvc21jL3NtY19sbGMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19sbGMuYwpAQCAtMTExOCw3ICYjNDM7MTExOCw3IEBAIGludCBzbWNfbGxjX2NsaV9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqcWVudHJ5KQogb3V0X3JlamVjdDoKIAlzbWNfbGxjX2NsaV9hZGRfbGlua19yZWplY3QocWVudHJ5KTsKIG91dDoKLQlrZnJlZShpbmkpOwomIzQzOwlzbWNfaW5pdF9pbmZvX2ZyZWUoaW5pKTsKIAlrZnJlZShxZW50cnkpOwogCXJldHVybiByYzsKIH0KQEAgLTExOTIsNyAmIzQzOzExOTIsNyBAQCBzdGF0aWMgdm9pZCBzbWNfbGxjX2NsaV9hZGRfbGlua19pbnZpdGUoc3RydWN0IHNtY19saW5rICpsaW5rLAogCXNtY19sbGNfc2VuZF9hZGRfbGluayhsaW5rLCBpbmktJmd0O2liX2Rldi0mZ3Q7bWFjW2luaS0mZ3Q7aWJfcG9ydCAtIDFdLAogCQkJICAgICAgaW5pLSZndDtpYl9naWQsIE5VTEwsIFNNQ19MTENfUkVRKTsKIG91dDoKLQlrZnJlZShpbmkpOwomIzQzOwlzbWNfaW5pdF9pbmZvX2ZyZWUoaW5pKTsKIAlrZnJlZShxZW50cnkpOwogfQogCkBAIC0xNTEyLDcgJiM0MzsxNTEyLDcgQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaywKIAlyYyA9IHNtY19sbGNfc3J2X2NvbmZfbGluayhsaW5rLCBsaW5rX25ldywgbGdyX25ld190KTsKIAlpZiAocmMpCiAJCWdvdG8gb3V0X2VycjsKLQlrZnJlZShpbmkpOwomIzQzOwlzbWNfaW5pdF9pbmZvX2ZyZWUoaW5pKTsKIAlyZXR1cm4gMDsKIG91dF9lcnI6CiAJaWYgKGxpbmtfbmV3KSB7CkBAIC0xNTIwLDcgJiM0MzsxNTIwLDcgQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaywKIAkJc21jcl9saW5rX2NsZWFyKGxpbmtfbmV3LCBmYWxzZSk7CiAJfQogb3V0OgotCWtmcmVlKGluaSk7CiYjNDM7CXNtY19pbml0X2luZm9fZnJlZShpbmkpOwogCWlmIChzZW5kX3JlcV9hZGRfbGlua19yZXNwKQogCQlzbWNfbGxjX3NlbmRfcmVxX2FkZF9saW5rX3Jlc3BvbnNlKHJlcV9xZW50cnkpOwogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX3BuZXQuYyBiL25ldC9zbWMvc21jX3BuZXQuYwppbmRleCA2M2UyODZlMmRmYWE4Li43ZTAxZTAxYTUyMmI3IDEwMDY0NAotLS0gYS9uZXQvc21jL3NtY19wbmV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfcG5ldC5jCkBAIC05ODAsMTQgJiM0Mzs5ODAsMjIgQEAgc3RhdGljIGludCBzbWNfcG5ldF9kZXRlcm1pbmVfZ2lkKHN0cnVjdCBzbWNfaWJfZGV2aWNlICppYmRldiwgaW50IGksCiAJaWYgKCFpbmktJmd0O2NoZWNrX3NtY3J2MiAmYW1wOyZhbXA7CiAJICAgICFzbWNfaWJfZGV0ZXJtaW5lX2dpZChpYmRldiwgaSwgaW5pLSZndDt2bGFuX2lkLCBpbmktJmd0O2liX2dpZCwgTlVMTCwKIAkJCQkgIE5VTEwpKSB7CiYjNDM7CQlpZiAoaW5pLSZndDtpYl9kZXZfcmVmKQomIzQzOwkJCXNtY19pYmRldl9pbml0X3B1dChpbmktJmd0O2liX2Rldik7CiYjNDM7CQlzbWNfaWJkZXZfaW5pdF9nZXQoaWJkZXYpOwogCQlpbmktJmd0O2liX2RldiA9IGliZGV2OwomIzQzOwkJaW5pLSZndDtpYl9kZXZfcmVmID0gdHJ1ZTsKIAkJaW5pLSZndDtpYl9wb3J0ID0gaTsKIAkJcmV0dXJuIDA7CiAJfQogCWlmIChpbmktJmd0O2NoZWNrX3NtY3J2MiAmYW1wOyZhbXA7CiAJICAgICFzbWNfaWJfZGV0ZXJtaW5lX2dpZChpYmRldiwgaSwgaW5pLSZndDt2bGFuX2lkLCBpbmktJmd0O3NtY3J2Mi5pYl9naWRfdjIsCiAJCQkJICBOVUxMLCAmYW1wO2luaS0mZ3Q7c21jcnYyKSkgewomIzQzOwkJaWYgKGluaS0mZ3Q7c21jcnYyLmliX2Rldl92Ml9yZWYpCiYjNDM7CQkJc21jX2liZGV2X2luaXRfcHV0KGluaS0mZ3Q7c21jcnYyLmliX2Rldl92Mik7CiYjNDM7CQlzbWNfaWJkZXZfaW5pdF9nZXQoaWJkZXYpOwogCQlpbmktJmd0O3NtY3J2Mi5pYl9kZXZfdjIgPSBpYmRldjsKJiM0MzsJCWluaS0mZ3Q7c21jcnYyLmliX2Rldl92Ml9yZWYgPSB0cnVlOwogCQlpbmktJmd0O3NtY3J2Mi5pYl9wb3J0X3YyID0gaTsKIAkJcmV0dXJuIDA7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDc5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTTUMgU3Vic3lzdGVtIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgcXVpdGUgYSBmZXcgZmlsZXMgd2l0aGluIHRoZSBgbmV0L3NtY2AgZGlyZWN0b3J5OiBgYWZfc21jLmNgLCBgc21jX2NvcmUuY2AsIGBzbWNfY29yZS5oYCwgYHNtY19pYi5jYCwgYHNtY19pYi5oYCwgYHNtY19sbGMuY2AsIGFuZCBgc21jX3BuZXQuY2AuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCYjMzk7cyBmb2N1c2VkIG9uIHRoZSBTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IEFGX1NNQyBzb2NrZXRzLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbG93LWxldmVsIG5ldHdvcmsgY29tbXVuaWNhdGlvbiB3aXRoIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBgc21jX2luaXRfaW5mb19mcmVlYCByZXBsYWNpbmcgYSBkaXJlY3QgYGtmcmVlKGluaSlgLiBUaGF0JiMzOTtzIGFsd2F5cyBhIHJlZCBmbGFnIHRoYXQgbWFrZXMgbWUgcGF5IGF0dGVudGlvbjsgdGhpcyBzdWdnZXN0cyBhIHJlc291cmNlIG1hbmFnZW1lbnQgaXNzdWUsIGxpa2VseSBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCBvciBzb21ldGhpbmcgc2ltaWxhci4gIFRoZSBhZGRpdGlvbiBvZiBgaWJfZGV2X3JlZmAgYW5kIGBpYl9kZXZfdjJfcmVmYCB0byB0aGUgYHNtY19pbml0X2luZm9gIHN0cnVjdHVyZXMsIGFuZCB0aGUgaW50cm9kdWN0aW9uIG9mIGBhdG9taWNfdCBpbml0X2NudGAgYW5kIGB3YWl0X3F1ZXVlX2hlYWRfdCBpbml0X3dhaXRgIHRvIHRoZSBgc21jX2liX2RldmljZWAgYXJlIGNsZWFybHkgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgYW5kIHJlZmVyZW5jZSBjb3VudGluZy4gVGhlIGluY3JlbWVudGluZyBvZiBgaW5pdF9jbnRgIHdoZW4gYSBkZXZpY2UgaXMgc2VsZWN0ZWQgYW5kIHRoZSB3YWl0IGluIGBzbWNfaWJfcmVtb3ZlX2RldmAgcmVhbGx5IHNvbGlkaWZ5IHRoaXM7IGl0JiMzOTtzIGRlc2lnbmVkIHRvIHByZXZlbnQgdGhlIGRldmljZSBmcm9tIGJlaW5nIHJlbW92ZWQgd2hpbGUgdGhlcmUgYXJlIHN0aWxsIGFjdGl2ZSByZWZlcmVuY2VzIHRvIGl0IGZyb20gdGhlIGBzbWNfaW5pdF9pbmZvYCBzdHJ1Y3R1cmVzLiBTbywgdGhlIHBhdGNoIGlzIHRyeWluZyB0byBmaXggdGhlIHJhY2UgY29uZGl0aW9uIHdoZXJlIGBzbWNfaWJfZGV2aWNlYCBjb3VsZCBiZSByZW1vdmVkIHByZW1hdHVyZWx5LCBsZWF2aW5nIGRhbmdsaW5nIHBvaW50ZXJzLiAgTWFrZXMgc2Vuc2UsIHRoYXQmIzM5O3MgZXhhY3RseSB0aGUga2luZCBvZiB2dWxuZXJhYmlsaXR5IEkgd291bGQgZXhwZWN0IHRvIHNlZSBpbiBhIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGxpa2UgdGhpcywgd2hlcmUgeW91IGhhdmUgbXVsdGlwbGUgdGhyZWFkcyBhbmQgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgaW50ZXJhY3Rpbmcgd2l0aCBzaGFyZWQgaGFyZHdhcmUgcmVzb3VyY2VzLgoKVGhlIGZhY3QgdGhhdCB0aGlzIGlzIGluIFNNQywgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSB2aWEgQUZfU01DLCBpbnN0YW50bHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgZnV6emluZy4gIEkga25vdyBzeXprYWxsZXIgdGFyZ2V0cyBBRl9TTUMsIHNvIHRoYXQmIzM5O3MgZ29vZC4gV2UgaGF2ZSBhIHRlc3QgaGFybmVzcyBhbHJlYWR5IGZvciB0aGlzLgoKSSYjMzk7bGwgcXVpY2tseSBjaGVjayBmb3IgYW55IHNwZWNpZmljIGBDT05GSUdgIHJlcXVpcmVtZW50cy4gSSYjMzk7ZCBleHBlY3QgYENPTkZJR19TTUNgIHRvIGJlIHRoZSBwcmltYXJ5IG9uZSwgYnV0IEkmIzM5O2xsIHNlYXJjaCB0aGUgS2NvbmZpZyBmaWxlcyBqdXN0IHRvIGJlIGNlcnRhaW4gdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyB0aGF0IHdvdWxkIG1ha2UgdGhpcyBmaXggbGVzcyBicm9hZGx5IGFwcGxpY2FibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNNQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9zbWMvS2NvbmZpZzoyOmNvbmZpZyBTTUNcbm5ldC9zbWMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbi0tXG5uZXQvc21jL0tjb25maWctMTMtXG5uZXQvc21jL0tjb25maWc6MTQ6Y29uZmlnIFNNQ19ESUFHXG5uZXQvc21jL0tjb25maWctMTUtXHR0cmlzdGF0ZSBcJiMzNDtTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9zbWMvS2NvbmZpZy0yMi1cbm5ldC9zbWMvS2NvbmZpZzoyMzpjb25maWcgU01DX0hTX0NUUkxfQlBGXG5uZXQvc21jL0tjb25maWctMjQtXHRib29sIFwmIzM0O0dlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjE1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU01DIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgQ09ORklHX1NNQ2Ag4oCTIHRoYXQmIzM5O3MgdGhlIGNvbmZpZ3VyYXRpb24gd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gem9vbSBpbiBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIGVpdGhlciBtb2RpZmllZCBvciBuZXdseSBhZGRlZCB3aXRoaW4gdGhpcyBjb250ZXh0LiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBzdGFuZCBvdXQ6IGBzbWNfaW5pdF9pbmZvX2ZyZWVgLCBgc21jX2liX3JlbW92ZV9kZXZgLCBgc21jX3BuZXRfZGV0ZXJtaW5lX2dpZGAsIGBzbWNfZmluZF9yZG1hX3YyX2RldmljZV9zZXJ2YCwgYHNtY19saXN0ZW5fd29ya2AsIGBfX3NtY19jb25uZWN0YCwgYHNtY19maWxsX2dpZF9saXN0YCwgYHNtY19sbGNfY2xpX2FkZF9saW5rYCwgYHNtY19sbGNfY2xpX2FkZF9saW5rX2ludml0ZWAsIGFuZCBgc21jX2xsY19zcnZfYWRkX2xpbmtgLgoKTG9va2luZyBhdCB0aGF0IGxpc3QsIEkmIzM5O20gdGhpbmtpbmcgdGhlIHJlYWwga2V5IG9uZXMgdG8gZGlzc2VjdCBmdXJ0aGVyIGFyZTogYF9fc21jX2Nvbm5lY3RgLCBgc21jX2xpc3Rlbl93b3JrYCwgYHNtY19wbmV0X2RldGVybWluZV9naWRgLCBhbmQgYHNtY19pYl9yZW1vdmVfZGV2YC4gVGhvc2UgZmVlbCBsaWtlIHRoZSBjb3JlIG9mIHRoZSBzaWduaWZpY2FudCBjaGFuZ2VzIGhlcmUuCgpTcGVjaWZpY2FsbHksIGBzbWNfaWJfcmVtb3ZlX2RldmAgc2VlbXMgaW1wb3J0YW50LiBJdCYjMzk7cyB0cmlnZ2VyZWQgd2hlbiBhbiBJbmZpbmlCYW5kIGRldmljZSBpcyByZW1vdmVkLCBzbyB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgY2xlYW51cCBpcyBoYW5kbGVkLiBUaGVuIHRoZXJlJiMzOTtzIGBzbWNfcG5ldF9kZXRlcm1pbmVfZ2lkYCwgd2hpY2gsIGZyb20gdGhlIG5hbWUsIHNvdW5kcyBsaWtlIGl0JiMzOTtzIGNydWNpYWwgZm9yIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgR0lEIHJlc29sdXRpb24uIFRoZSBmdW5jdGlvbiBgX19zbWNfY29ubmVjdGAsIHRoYXQmIzM5O3Mgb3VyIEFGX1NNQyBgY29ubmVjdCgpYCBjYWxsLCBzbyB0aGF0JiMzOTtzIGEgY29ybmVyc3RvbmUuIEZpbmFsbHksIGBzbWNfbGlzdGVuX3dvcmtgIGlzIGdvaW5nIHRvIGhhbmRsZSBpbmNvbWluZyBjb25uZWN0aW9uIHJlcXVlc3RzLCBzbyB0aGF0JiMzOTtzIG9idmlvdXNseSBjcml0aWNhbC4KCkkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gYHNtY19wbmV0X2RldGVybWluZV9naWRgIGFuZCBgc21jX2liX3JlbW92ZV9kZXZgIG1vcmUgY2xvc2VseSBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX3BuZXRfZGV0ZXJtaW5lX2dpZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX3BuZXQuYz05NTE9c3RhdGljIGludCBzbWNfcG5ldF9maW5kX25kZXZfcG5ldGlkX2J5X3RhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLS1cbm5ldC9zbWMvc21jX3BuZXQuYy05NzYtXG5uZXQvc21jL3NtY19wbmV0LmM6OTc3OnN0YXRpYyBpbnQgc21jX3BuZXRfZGV0ZXJtaW5lX2dpZChzdHJ1Y3Qgc21jX2liX2RldmljZSAqaWJkZXYsIGludCBpLFxubmV0L3NtYy9zbWNfcG5ldC5jLTk3OC1cdFx0XHRcdCAgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcbi0tXG5uZXQvc21jL3NtY19wbmV0LmM9MTAwNj1zdGF0aWMgdm9pZCBfc21jX3BuZXRfZmluZF9yb2NlX2J5X3BuZXRpZCh1OCAqcG5ldF9pZCxcbi0tXG5uZXQvc21jL3NtY19wbmV0LmMtMTAyNC1cdFx0XHQgICAgIXRlc3RfYml0KGkgLSAxLCBpYmRldi1cdTAwM2Vwb3J0c19nb2luZ19hd2F5KSkge1xubmV0L3NtYy9zbWNfcG5ldC5jOjEwMjU6XHRcdFx0XHRpZiAoIXNtY19wbmV0X2RldGVybWluZV9naWQoaWJkZXYsIGksIGluaSkpXG5uZXQvc21jL3NtY19wbmV0LmMtMTAyNi1cdFx0XHRcdFx0Z290byBvdXQ7XG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jPTEwNDc9c3RhdGljIHZvaWQgc21jX3BuZXRfZmluZF9yZG1hX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbm5ldC9zbWMvc21jX3BuZXQuYy0xMDcxLVx0XHRcdCAgICAhdGVzdF9iaXQoaSAtIDEsIGliZGV2LVx1MDAzZXBvcnRzX2dvaW5nX2F3YXkpKSB7XG5uZXQvc21jL3NtY19wbmV0LmM6MTA3MjpcdFx0XHRcdGlmICghc21jX3BuZXRfZGV0ZXJtaW5lX2dpZChpYmRldiwgaSwgaW5pKSlcbm5ldC9zbWMvc21jX3BuZXQuYy0xMDczLVx0XHRcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODE1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgc21jX2liX3JlbW92ZV9kZXZgIEZ1bmN0aW9uIENhbGwqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgbWVudGFsIGNoZWNrbGlzdCBzdGFydHMgd2l0aCBgc21jX2liX3JlbW92ZV9kZXZgLiBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gVGhpcyBsaWtlbHkgcG9pbnRzIHRvIHRoZSByZW1vdmFsIG9mIGFuIEluZmluaUJhbmQgZGV2aWNlIHdpdGhpbiB0aGUgU01DIChTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zKSBmcmFtZXdvcmsuIFNvLCBJIG5lZWQgdG8gY29uc2lkZXI6IFdoYXQgYXJlIHRoZSBwcmVjb25kaXRpb25zIGZvciBjYWxsaW5nIHRoaXM/IFdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyBmcmVlZD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgbmVlZCB0byB0aGluayBhYm91dCwgZXNwZWNpYWxseSBpZiB0aGlzIGlzIGluIGEgbXVsdGktdGhyZWFkZWQgb3IgaW50ZXJydXB0IGNvbnRleHQ/IFdoYXQgYWJvdXQgZXJyb3IgaGFuZGxpbmc7IGlzIHRoZXJlIHN1ZmZpY2llbnQgZXJyb3IgY2hlY2tpbmcgYW5kIHJlY292ZXJ5PyBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHF1ZXN0aW9ucyBhYm91dCBsb2NraW5nLiBJcyB0aGVyZSBhIG11dGV4IG9yIHNwaW5sb2NrIHByb3RlY3RpbmcgdGhlIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcz8gQW5kIHdoYXQgYWJvdXQgdGhlIGltcGFjdCBvbiBjb25uZWN0aW9ucyB1c2luZyB0aGF0IHNwZWNpZmljIGRldmljZT8gRG9lcyB0aGlzIGZ1bmN0aW9uIGdyYWNlZnVsbHkgaGFuZGxlIHRob3NlPyBJJiMzOTtkIGV4cGVjdCBwcm9wZXIgY2xlYW51cCBvZiBhbnkgYXNzb2NpYXRlZCBRUHMgKFF1ZXVlIFBhaXJzKSwgUERzIChQcm90ZWN0aW9uIERvbWFpbnMpLCBhbmQgQ1FzIChDb21wbGV0aW9uIFF1ZXVlcykuIEZpbmFsbHksIGEgZ29vZCByZXZpZXcgbWVhbnMgdW5kZXJzdGFuZGluZyB0aGUgcG9zc2libGUgcmV0dXJuIGNvZGVzIGFuZCB0aGVpciBpbXBsaWNhdGlvbnMgZm9yIHRoZSBjYWxsZXIuIEJhc2ljYWxseSwgSSB3YW50IHRvIHNlZSBhIHJvYnVzdCwgd2VsbC1kZWZpbmVkIGZ1bmN0aW9uIHRoYXQgbGVhdmVzIHRoZSBzeXN0ZW0gaW4gYSBjb25zaXN0ZW50IHN0YXRlIGFmdGVyIHRoZSBkZXZpY2UgcmVtb3ZhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfaWJfcmVtb3ZlX2RldiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2liLmM9OTM4PXN0YXRpYyBpbnQgc21jX2liX2FkZF9kZXYoc3RydWN0IGliX2RldmljZSAqaWJkZXYpXG4tLVxubmV0L3NtYy9zbWNfaWIuYy05OTUtLyogY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGliX3VucmVnaXN0ZXJfY2xpZW50KCkgKi9cbm5ldC9zbWMvc21jX2liLmM6OTk2OnN0YXRpYyB2b2lkIHNtY19pYl9yZW1vdmVfZGV2KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB2b2lkICpjbGllbnRfZGF0YSlcbm5ldC9zbWMvc21jX2liLmMtOTk3LXtcbi0tXG5uZXQvc21jL3NtY19pYi5jPTEwMTU9c3RhdGljIHN0cnVjdCBpYl9jbGllbnQgc21jX2liX2NsaWVudCA9IHtcbi0tXG5uZXQvc21jL3NtY19pYi5jLTEwMTctXHQuYWRkXHQ9IHNtY19pYl9hZGRfZGV2LFxubmV0L3NtYy9zbWNfaWIuYzoxMDE4Olx0LnJlbW92ZSA9IHNtY19pYl9yZW1vdmVfZGV2LFxubmV0L3NtYy9zbWNfaWIuYy0xMDE5LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM3OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIElCIERldmljZSBSZW1vdmFsIGFuZCBpdHMgSW1wbGljYXRpb25zKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBzbWNfaWJfcmVtb3ZlX2RldmAsIHdoaWNoIGlzIHRoZSBjYWxsYmFjayB0aGF0IGdldHMgY2FsbGVkIHdoZW4gYW4gSW5maW5pQmFuZCAoSUIpIGRldmljZSBpcyByZW1vdmVkIGZyb20gdGhlIHN5c3RlbS4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHdlIGNhbiB0cmlnZ2VyIHRoaXMgcmVtb3ZhbCBldmVudCBmcm9tIHdpdGhpbiBzeXprYWxsZXIuIFRoZSBhbnN3ZXIgYXBwZWFycyB0byBiZSB5ZXM7IHdlIGhhdmUgYSBjb3VwbGUgb2YgdmlhYmxlIGF2ZW51ZXM6IHV0aWxpemluZyBSRE1BIG5ldGxpbmsgaW50ZXJmYWNlcyBvciBwb3RlbnRpYWxseSBieSByZW1vdmluZyB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGRldmljZSwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBSb0NFIChSRE1BIG92ZXIgQ29udmVyZ2VkIEV0aGVybmV0KSBzZXR1cHMuIFRoaXMgZ2l2ZXMgdXMgYSBzb2xpZCBsZWFkIG9uIHBvdGVudGlhbCBmdXp6aW5nIHN0cmF0ZWdpZXMuIE5vdywgbGV0JiMzOTtzIGRpdmUgZGVlcGVyIGFuZCBzZWUgaWYgd2UgY2FuIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCByYW1pZmljYXRpb25zIG9mIHRoaXMgcmVtb3ZhbCBieSBjaGVja2luZyBvdXQgdGhlIGBfX3NtY19jb25uZWN0YCBmdW5jdGlvbiBhbmQgaXRzIGNvbm5lY3Rpb24gd2l0aCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3NtY19jb25uZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9hZl9zbWMuYz0xNDk5PXN0YXRpYyBpbnQgc21jX2Nvbm5lY3RfY2hlY2tfYWNsYyhzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTUxOS0vKiBwZXJmb3JtIHN0ZXBzIGJlZm9yZSBhY3R1YWxseSBjb25uZWN0aW5nICovXG5uZXQvc21jL2FmX3NtYy5jOjE1MjA6c3RhdGljIGludCBfX3NtY19jb25uZWN0KHN0cnVjdCBzbWNfc29jayAqc21jKVxubmV0L3NtYy9hZl9zbWMuYy0xNTIxLXtcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTE2MTA9c3RhdGljIHZvaWQgc21jX2Nvbm5lY3Rfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xNjM5LVxubmV0L3NtYy9hZl9zbWMuYzoxNjQwOlx0cmMgPSBfX3NtY19jb25uZWN0KHNtYyk7XG5uZXQvc21jL2FmX3NtYy5jLTE2NDEtXHRpZiAocmMgXHUwMDNjIDApXG4tLVxubmV0L3NtYy9hZl9zbWMuYz0xNjU2PWludCBzbWNfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE3MjItXHR9IGVsc2Uge1xubmV0L3NtYy9hZl9zbWMuYzoxNzIzOlx0XHRyYyA9IF9fc21jX2Nvbm5lY3Qoc21jKTtcbm5ldC9zbWMvYWZfc21jLmMtMTcyNC1cdFx0aWYgKHJjIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDMxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNNQyBDb25uZWN0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggbG9va3Mgc29saWQsIGZpeGluZyB0aGF0IG5hc3R5IGJ1ZyB3aGVyZSBkZXZpY2UgcmVtb3ZhbCBtZXNzZWQgd2l0aCBvbmdvaW5nIGNvbm5lY3Rpb25zLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgX19zbWNfY29ubmVjdGAgaXMgY2FsbGVkIGZyb20gYm90aCBgc21jX2Nvbm5lY3RgIGFuZCBgc21jX2Nvbm5lY3Rfd29ya2AsIHdoaWNoIGlzIGFzIGV4cGVjdGVkLiBEZWZpbml0ZWx5IHdvcnRoIHJ1bm5pbmcgdGhpcyB0aHJvdWdoIHRoZSBmdXp6aW5nIHJpZzsgSSYjMzk7bSBtYXJraW5nIGl0IGFzICYjMzQ7VHJ1ZSYjMzQ7LiBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvbiBgX19zbWNfY29ubmVjdGAsIGBzbWNfbGlzdGVuX3dvcmtgLCBgc21jX3BuZXRfZGV0ZXJtaW5lX2dpZGAsIGFuZCBgc21jX2liX3JlbW92ZV9kZXZgIGluIHBhcnRpY3VsYXIg4oCTIHRob3NlIHNlZW0gbGlrZSBrZXkgYXJlYXMgdG8gdGFyZ2V0LgoKSnVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyDigJMgU01DIHJlbGllcyBvbiBSRE1BL0lCIHN1cHBvcnQsIHNvIEkgd2FudCB0byBiZSBjZXJ0YWluIG5vdGhpbmcgaGFzIGNoYW5nZWQgdGhhdCBhZmZlY3RzIHRoYXQuIFRpbWUgdG8gdGFrZSBhbm90aGVyIGxvb2sgYXQgYG5ldC9zbWMvS2NvbmZpZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnPTI9Y29uZmlnIFNNQ1xubmV0L3NtYy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVwmIzM0O1xubmV0L3NtYy9LY29uZmlnOjQ6XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IElORklOSUJBTkQgXHUwMDI2XHUwMDI2IERJQlNcbm5ldC9zbWMvS2NvbmZpZy01LVx0aGVscFxuLS1cbm5ldC9zbWMvS2NvbmZpZz0xND1jb25maWcgU01DX0RJQUdcbm5ldC9zbWMvS2NvbmZpZy0xNS1cdHRyaXN0YXRlIFwmIzM0O1NNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG5uZXQvc21jL0tjb25maWc6MTY6XHRkZXBlbmRzIG9uIFNNQ1xubmV0L3NtYy9LY29uZmlnLTE3LVx0aGVscFxuLS1cbm5ldC9zbWMvS2NvbmZpZz0yMz1jb25maWcgU01DX0hTX0NUUkxfQlBGXG5uZXQvc21jL0tjb25maWctMjQtXHRib29sIFwmIzM0O0dlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcJiMzNDtcbm5ldC9zbWMvS2NvbmZpZzoyNTpcdGRlcGVuZHMgb24gU01DIFx1MDAyNlx1MDAyNiBCUEZfSklUIFx1MDAyNlx1MDAyNiBCUEZfU1lTQ0FMTFxubmV0L3NtYy9LY29uZmlnLTI2LVx0ZGVmYXVsdCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MzUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIC0gVGhlIFNNQyBQdXp6bGUqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gdGhlIGluaXRpYWwgYXNzZXNzbWVudCBwb2ludHMgdG8gYSBkZXBlbmRlbmN5IGNoYWluOiBpdCYjMzk7cyBsb29raW5nIGxpa2UgdGhpcyBmdW5jdGlvbmFsaXR5IGhpbmdlcyBvbiBgSU5FVGAsIGBJTkZJTklCQU5EYCwgYW5kLi4uIGhvbGQgb24sIHdoYXQgd2FzIHRoYXQgbGFzdCBvbmU/IGBESUJTYD8gVGhhdCBmZWVscyBhIGxpdHRsZSBvdXQgb2YgcGxhY2UuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhhdC4gVGltZSB0byBkaXZlIGludG8gdGhlIHNvdXJjZSB0cmVlLiBTcGVjaWZpY2FsbHksIGxldCBtZSB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBkZWZpbmVkIGluIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBmaWxlcy4gVGhlIHBsYWNlIHRvIHN0YXJ0IGZvciB0aGlzIHNlZW1zIHRvIGJlIGBuZXQvc21jL0tjb25maWdgLiBJJiMzOTtsbCBjcm9zcy1yZWZlcmVuY2Ugd2hhdCBpcyBzYWlkIHRoZXJlIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMuIEl0IGlzIGltcG9ydGFudCB0byBrbm93IHdoaWNoIGRlcGVuZGVuY2llcyBhcmUgcmVxdWlyZWQgYW5kIHdoaWNoIGFyZSBub3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFNNQ1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU1xuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBTTUMtUiBwcm92aWRlcyBhIFwmIzM0O3NvY2tldHMgb3ZlciBSRE1BXCYjMzQ7IHNvbHV0aW9uIG1ha2luZyB1c2Ugb2ZcbiAgIDc6XHRcdCAgUkRNQSBvdmVyIENvbnZlcmdlZCBFdGhlcm5ldCAoUm9DRSkgdGVjaG5vbG9neSB0byB1cGdyYWRlXG4gICA4Olx0XHQgIEFGX0lORVQgVENQIGNvbm5lY3Rpb25zIHRyYW5zcGFyZW50bHkuXG4gICA5Olx0XHQgIFRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU01DLVIgc29sdXRpb24gaXMgZGVzaWduZWQgYXNcbiAgMTA6XHRcdCAgYSBzZXBhcmF0ZSBzb2NrZXQgZmFtaWx5IFNNQy5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHJ1biBTTUMgc29ja2V0IGFwcGxpY2F0aW9uc1xuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBTTUNfRElBR1xuICAxNTpcdFx0dHJpc3RhdGUgXCYjMzQ7U01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gU01DXG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIFN1cHBvcnQgZm9yIFNNQyBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieSB0b29scyBzdWNoIGFzXG4gIDE5Olx0XHQgIHNtY3NzLlxuICAyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE1MQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOYXZpZ2F0aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIFF1aXJrcyoqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyB0aGlzIHRlcm0gYERJQlNgIHBvcCB1cCwgYW5kIGZyYW5rbHksIEkmIzM5O20gZHJhd2luZyBhIGJsYW5rLiBJdCYjMzk7cyB1bmZhbWlsaWFyLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBhbmNob3IgbXlzZWxmIGluIHdoYXQgSSAqZG8qIGtub3cuIExldCBtZSBjb25maXJtIG15IGVuYWJsaW5nIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsIEkmIzM5O20gcHJldHR5IHN1cmUgYFNNQ2AsIGBJTkZJTklCQU5EYCwgYW5kIGBJTkVUYCBhcmUgaW52b2x2ZWQuIE5vdywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgYERJQlNgIGRvd24gdGhlIHJhYmJpdCBob2xlLgoKSSYjMzk7bGwgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgdHJlZS4gSSBtaWdodCBoYXZlIG1pc3JlYWQgaXQsIG9yLCBpdCYjMzk7cyBhIHR5cG8sIG5vLi4uIGl0JiMzOTtzIHRoZXJlLiBIbW0sIGNvdWxkIGl0IGJlIHJlbGF0ZWQgdG8gYElQVjZgPyBPa2F5LCBJJiMzOTtsbCBjaGVjayBgbmV0L3NtYy9LY29uZmlnYCBpbiB0aGUgbWFpbmxpbmUga2VybmVsLiBNYWlubGluZSBjb25maXJtcyBgZGVwZW5kcyBvbiBJTkVUICZhbXA7JmFtcDsgSU5GSU5JQkFORCAmYW1wOyZhbXA7IElQVjZgLiBTdGlsbCwgdGhlIHF1ZXN0aW9uIG9mIGBESUJTYCBsaW5nZXJzLgoKV2FpdCwgaXMgdGhpcyBhIHRyZWUtc3BlY2lmaWMgdGhpbmcgdGhlbj8gSXQgKmlzKiBpbiB0aGUgZmlsZS4gQWxyaWdodCwgbGV0JiMzOTtzIGN1dCB0aGUgR29yZGlhbiBLbm90IGFuZCBmaWd1cmUgb3V0IHdoYXQgYERJQlNgICppcyouIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBuZXcgZGVwZW5kZW5jeSBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERJQlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL2RpYnMvS2NvbmZpZzoyOmNvbmZpZyBESUJTXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7RGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xMy1cbmRyaXZlcnMvZGlicy9LY29uZmlnOjE0OmNvbmZpZyBESUJTX0xPXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xNS1cdGJvb2wgXCYjMzQ7SW50cmEtT1Mgc2hvcnRjdXQgd2l0aCBkaWJzIGxvb3BiYWNrXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzU3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTTUMgRGVwZW5kZW5jeSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGFuZCBpdCYjMzk7cyBjbGVhciB0aGF0IGBESUJTYCBzdGFuZHMgZm9yIERpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZy4gR290IGl0LiBOb3csIGZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYFNNQ2AsIGBJTkZJTklCQU5EYCwgYW5kIGBESUJTYC4gSG9sZCBvbi4uLiBpdCBsb29rcyBsaWtlIGBESUJTYCBpcyBhY3R1YWxseSAqcmVxdWlyZWQqIGZvciBgU01DYCB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIHRyZWUuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBMZXQmIzM5O3MgY29uZmlybSBpZiBgU01DYCBuZWNlc3NpdGF0ZXMgYElORklOSUJBTkRgIHRvby4gWWVwLCBjb25maXJtZWQuCgpUaGVyZWZvcmUsIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBzaG91bGQgZGVmaW5pdGVseSBiZSBgWyYjMzQ7U01DJiMzNDssICYjMzQ7SU5GSU5JQkFORCYjMzQ7LCAmIzM0O0RJQlMmIzM0O11gLiBUaGF0IHNlZW1zIGxvZ2ljYWwgYW5kIGlzIHRoZSBzYWZlc3Qgb3B0aW9uLgoKTm93LCBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBfX3NtY19jb25uZWN0YCwgYHNtY19saXN0ZW5fd29ya2AsIGBzbWNfcG5ldF9kZXRlcm1pbmVfZ2lkYCwgYW5kIGBzbWNfaWJfcmVtb3ZlX2RldmAuIEFyZSB0aGVyZSBhbnkgb3RoZXJzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBBaCwgaGVyZSYjMzk7cyBvbmU6IGBzbWNfaW5pdF9pbmZvX2ZyZWVgLiBJdCYjMzk7cyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIHVzZWZ1bCB0byBrbm93LiBBbmQgdGhlbiB0aGVyZSYjMzk7cyBgc21jX2xsY19jbGlfYWRkX2xpbmtgIGFuZCBgc21jX2xsY19zcnZfYWRkX2xpbmtgLgoKUmlnaHQsIGxldCYjMzk7cyBjcmVhdGUgYSBzb2xpZCBsaXN0IG9mIHRoZSBmb2N1cyBzeW1ib2xzLCB0byBrZWVwIG1lIG9uIHRyYWNrOgpgX19zbWNfY29ubmVjdGAsIGBzbWNfbGlzdGVuX3dvcmtgLCBgc21jX3BuZXRfZGV0ZXJtaW5lX2dpZGAsIGBzbWNfaWJfcmVtb3ZlX2RldmAsIGBzbWNfbGxjX2NsaV9hZGRfbGlua2AsIGBzbWNfbGxjX3Nydl9hZGRfbGlua2AuCgpGaW5hbGx5LCB0byBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoLCBJJiMzOTttIGdvaW5nIHRvIHZlcmlmeSBpZiBgc21jX3BuZXRfZGV0ZXJtaW5lX2dpZGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIEp1c3QgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX3BuZXRfZGV0ZXJtaW5lX2dpZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX3BuZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19wbmV0LmM9OTUxPXN0YXRpYyBpbnQgc21jX3BuZXRfZmluZF9uZGV2X3BuZXRpZF9ieV90YWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbi0tXG5uZXQvc21jL3NtY19wbmV0LmMtOTc2LVxubmV0L3NtYy9zbWNfcG5ldC5jOjk3NzpzdGF0aWMgaW50IHNtY19wbmV0X2RldGVybWluZV9naWQoc3RydWN0IHNtY19pYl9kZXZpY2UgKmliZGV2LCBpbnQgaSxcbm5ldC9zbWMvc21jX3BuZXQuYy05NzgtXHRcdFx0XHQgIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jPTEwMDY9c3RhdGljIHZvaWQgX3NtY19wbmV0X2ZpbmRfcm9jZV9ieV9wbmV0aWQodTggKnBuZXRfaWQsXG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jLTEwMjQtXHRcdFx0ICAgICF0ZXN0X2JpdChpIC0gMSwgaWJkZXYtXHUwMDNlcG9ydHNfZ29pbmdfYXdheSkpIHtcbm5ldC9zbWMvc21jX3BuZXQuYzoxMDI1Olx0XHRcdFx0aWYgKCFzbWNfcG5ldF9kZXRlcm1pbmVfZ2lkKGliZGV2LCBpLCBpbmkpKVxubmV0L3NtYy9zbWNfcG5ldC5jLTEwMjYtXHRcdFx0XHRcdGdvdG8gb3V0O1xuLS1cbm5ldC9zbWMvc21jX3BuZXQuYz0xMDQ3PXN0YXRpYyB2b2lkIHNtY19wbmV0X2ZpbmRfcmRtYV9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5uZXQvc21jL3NtY19wbmV0LmMtMTA3MS1cdFx0XHQgICAgIXRlc3RfYml0KGkgLSAxLCBpYmRldi1cdTAwM2Vwb3J0c19nb2luZ19hd2F5KSkge1xubmV0L3NtYy9zbWNfcG5ldC5jOjEwNzI6XHRcdFx0XHRpZiAoIXNtY19wbmV0X2RldGVybWluZV9naWQoaWJkZXYsIGksIGluaSkpXG5uZXQvc21jL3NtY19wbmV0LmMtMTA3My1cdFx0XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTQ5CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnVuY3Rpb24mIzM5O3MgU3RhdGljIE5hdHVyZSoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IGVtcGhhc2l6ZXMgcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoYXQgYHNtY19wbmV0X2RldGVybWluZV9naWRgIGlzICpzdGF0aWMqLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCByZWQgZmxhZy4gVGhlIGNvbXBpbGVyIHR5cGljYWxseSBpbmxpbmVzIHRoZXNlLCB3aGljaCBtZWFucyB0aGV5IHdvbiYjMzk7dCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIG1ha2luZyBkZWJ1Z2dpbmcgb3IgZXh0ZXJuYWwgYWNjZXNzIHByb2JsZW1hdGljLiBUaW1lIHRvIGludmVzdGlnYXRlLiBMZXQmIzM5O3MgdHJhY2UgaXRzIGNhbGxlcnMuIEFoYSwgYm90aCBgX3NtY19wbmV0X2ZpbmRfcm9jZV9ieV9wbmV0aWRgIGFuZCBgc21jX3BuZXRfZmluZF9yZG1hX2RldmAgYXJlIGFsc28gc3RhdGljLiBUaGlzIGNvbmZpcm1zIG15IGluaXRpYWwgY29uY2Vybi4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gaWRlbnRpZnkgYW55IG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmVzIG9yIGRldGVybWluZSB0aGUganVzdGlmaWNhdGlvbiBmb3Igd2h5IHRoZXNlIGFyZSBzdGF0aWMsIGdpdmVuIHRoZSBndWlkZWxpbmVzLiBUaGUgc2VhcmNoIGZvciBhIG5vbi1zdGF0aWMgb3B0aW9uIGJlZ2lucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX3BuZXRfZmluZF9yZG1hX2RldiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX3BuZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19wbmV0LmM9MTAzNT12b2lkIHNtY19wbmV0X2ZpbmRfYWx0X3JvY2Uoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jLTEwNDYtICovXG5uZXQvc21jL3NtY19wbmV0LmM6MTA0NzpzdGF0aWMgdm9pZCBzbWNfcG5ldF9maW5kX3JkbWFfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5uZXQvc21jL3NtY19wbmV0LmMtMTA0OC1cdFx0XHRcdCAgIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jPTEwODY9c3RhdGljIHZvaWQgc21jX3BuZXRfZmluZF9yb2NlX2J5X3BuZXRpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbi0tXG5uZXQvc21jL3NtY19wbmV0LmMtMTA5OC1cdCAgICBzbWNfcG5ldF9maW5kX25kZXZfcG5ldGlkX2J5X3RhYmxlKG5kZXYsIG5kZXZfcG5ldGlkKSkge1xubmV0L3NtYy9zbWNfcG5ldC5jOjEwOTk6XHRcdHNtY19wbmV0X2ZpbmRfcmRtYV9kZXYoYmFzZV9uZGV2LCBpbmkpO1xubmV0L3NtYy9zbWNfcG5ldC5jLTExMDAtXHRcdHJldHVybjsgLyogcG5ldGlkIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjMwCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBzbWNfcG5ldF9maW5kX3JvY2VfYnlfcG5ldGlkYCBDYWxsZXJzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYHNtY19wbmV0X2ZpbmRfcm9jZV9ieV9wbmV0aWRgLiBUaW1lIHRvIHRyYWNlIGRvd24gaXRzIGNhbGxlcnMuIEkmIzM5O20gdGhpbmtpbmcsIHRoaXMgaXMgcHJvYmFibHkgYSBmdW5jdGlvbiB0aGF0IGxvb2tzIHVwIFJvQ0UgaW5mb3JtYXRpb24gYmFzZWQgb24gYSBQTkVUIElELCBzbyBJIG5lZWQgdG8gc2VlICp3aG8qIGlzIG1ha2luZyB0aGVzZSBjYWxscy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMsIHBlcmhhcHMgd2l0aGluIHRoZSBSRE1BIHN0YWNrLCBvciBzb21ldGhpbmcgaGlnaGVyLWxldmVsIGxpa2UgYW4gYXBwbGljYXRpb24gdHJ5aW5nIHRvIHV0aWxpemUgUm9DRT8gVGhlIGNhbGxlciBjb250ZXh0IHdpbGwgcmVhbGx5IGdpdmUgbWUgdGhlIGNsdWVzIEkgbmVlZC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBjaGVjayDigJMgbWF5YmUgYSBzdGF0aWMgYW5hbHlzaXMgb3IgZ3JlcCB0aHJvdWdoIHRoZSBjb2RlYmFzZSwgdG8gaWRlbnRpZnkgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIGFuZCBhbnkgcmVsZXZhbnQgcGFyYW1ldGVycyBwYXNzZWQuIElzIHRoZXJlIGFueSBleGlzdGluZyBkb2N1bWVudGF0aW9uIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiB0aGlzPyBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgaGVscCBtZSBkZXRlcm1pbmU6IGFyZSB3ZSBsb29raW5nIGF0IGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgYSBwb3RlbnRpYWwgZXJyb3Igc291cmNlLCBvciBhIGNyaXRpY2FsIGRhdGEgcGF0aD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIHBhcmFtb3VudCBiZWZvcmUgSSBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfcG5ldF9maW5kX3JvY2VfYnlfcG5ldGlkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfcG5ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX3BuZXQuYz05Nzc9c3RhdGljIGludCBzbWNfcG5ldF9kZXRlcm1pbmVfZ2lkKHN0cnVjdCBzbWNfaWJfZGV2aWNlICppYmRldiwgaW50IGksXG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jLTEwMDUtLyogZmluZCBhIHJvY2UgZGV2aWNlIGZvciB0aGUgZ2l2ZW4gcG5ldGlkICovXG5uZXQvc21jL3NtY19wbmV0LmM6MTAwNjpzdGF0aWMgdm9pZCBfc21jX3BuZXRfZmluZF9yb2NlX2J5X3BuZXRpZCh1OCAqcG5ldF9pZCxcbm5ldC9zbWMvc21jX3BuZXQuYy0xMDA3LVx0XHRcdFx0XHQgIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmksXG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jPTEwMzU9dm9pZCBzbWNfcG5ldF9maW5kX2FsdF9yb2NlKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxuLS1cbm5ldC9zbWMvc21jX3BuZXQuYy0xMDQwLVxubmV0L3NtYy9zbWNfcG5ldC5jOjEwNDE6XHRfc21jX3BuZXRfZmluZF9yb2NlX2J5X3BuZXRpZChsZ3ItXHUwMDNlcG5ldF9pZCwgaW5pLCBrbm93bl9kZXYsIG5ldCk7XG5uZXQvc21jL3NtY19wbmV0LmMtMTA0Mi19XG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jPTEwNDc9c3RhdGljIHZvaWQgc21jX3BuZXRfZmluZF9yZG1hX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbm5ldC9zbWMvc21jX3BuZXQuYy0xMDg1LSAqL1xubmV0L3NtYy9zbWNfcG5ldC5jOjEwODY6c3RhdGljIHZvaWQgc21jX3BuZXRfZmluZF9yb2NlX2J5X3BuZXRpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbm5ldC9zbWMvc21jX3BuZXQuYy0xMDg3LVx0XHRcdFx0XHQgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcbi0tXG5uZXQvc21jL3NtY19wbmV0LmMtMTEwMS1cdH1cbm5ldC9zbWMvc21jX3BuZXQuYzoxMTAyOlx0X3NtY19wbmV0X2ZpbmRfcm9jZV9ieV9wbmV0aWQobmRldl9wbmV0aWQsIGluaSwgTlVMTCwgbmV0KTtcbm5ldC9zbWMvc21jX3BuZXQuYy0xMTAzLX1cbi0tXG5uZXQvc21jL3NtY19wbmV0LmM9MTEzNT12b2lkIHNtY19wbmV0X2ZpbmRfcm9jZV9yZXNvdXJjZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jLTExNDYtXHRpZiAoZGV2KSB7XG5uZXQvc21jL3NtY19wbmV0LmM6MTE0NzpcdFx0c21jX3BuZXRfZmluZF9yb2NlX2J5X3BuZXRpZChkZXYsIGluaSk7XG5uZXQvc21jL3NtY19wbmV0LmMtMTE0OC1cdFx0ZGV2X3B1dChkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzYyOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEFQSSBFbnRyeXBvaW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHByZWZlcnJlZCBBUEkgZW50cnlwb2ludHMgYmFzZWQgb24gdGhlIGd1aWRlbGluZSBvZiBwcmlvcml0aXppbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlcnMuCgpGaXJzdCwgSSBzZWUgdGhhdCBgc21jX3BuZXRfZmluZF9yb2NlX3Jlc291cmNlYCBhbmQgYHNtY19wbmV0X2ZpbmRfYWx0X3JvY2VgIGFyZSBhbHJlYWR5IG5vbi1zdGF0aWMsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCBsZXQmIzM5O3MgdHJhY2UgdGhyb3VnaCB0aGUgb3RoZXIgZnVuY3Rpb25zLgoKYF9fc21jX2Nvbm5lY3RgIGlzIHN0YXRpYywgc28gSSBpbW1lZGlhdGVseSBuZWVkIHRvIGludmVzdGlnYXRlIGl0cyBjYWxsZXJzLiAgSSBzZWUgYHNtY19jb25uZWN0YCBhbmQgYHNtY19jb25uZWN0X3dvcmtgIGNhbGxpbmcgaXQuIEJ1dCwgY3JpdGljYWxseSwgYHNtY19jb25uZWN0YCBpdHNlbGYgaXMgbm9uLXN0YXRpYy4gQmluZ28hIFRoaXMgaXMgbGlrZWx5IGEgZ29vZCBjYW5kaWRhdGUuCgpOZXh0LCBgc21jX2xpc3Rlbl93b3JrYCBpcyBzdGF0aWMsIGFuZCBpdCYjMzk7cyBhIHdvcmtxdWV1ZSBmdW5jdGlvbi4gSXQmIzM5O3MgaW5pdGlhbGl6ZWQgaW4gYHNtY190Y3BfbGlzdGVuX3dvcmtgLCB3aGlsZSBgc21jX2xpc3RlbmAgaXMgbm9uLXN0YXRpYy4gU28sIGBzbWNfbGlzdGVuYCBsb29rcyBsaWtlIHRoZSBiZXR0ZXIgY2hvaWNlIGhlcmUuCgpOb3csIGxldCYjMzk7cyBtb3ZlIG9uIHRvIGBzbWNfaWJfcmVtb3ZlX2RldmAuIEl0JiMzOTtzIHN0YXRpYywgYW5kIGl0JiMzOTtzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQmIzM5O3MgYW4gSUIgY2xpZW50IGNhbGxiYWNrIHJlZ2lzdGVyZWQgdmlhIGBpYl9yZWdpc3Rlcl9jbGllbnRgLiBTaW5jZSBpdCYjMzk7cyBhIGZ1bmN0aW9uIHBvaW50ZXIsIGl0IHdvbiYjMzk7dCBiZSBpbmxpbmVkLiBUaGF0IG1lYW5zIGl0IHdpbGwgaGF2ZSBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLCBtYWtpbmcgaXQgYSB2aWFibGUgb3B0aW9uIGRlc3BpdGUgYmVpbmcgc3RhdGljLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzICpub3QqIGlubGluZWQgaXMga2V5IGhlcmUsIGFjY29yZGluZyB0byB0aGUgcHJvbXB0LiBJIGNvdWxkIGFsc28gdXNlIGBzbWNfaWJfYWRkX2RldmAgYnV0IEkmIzM5O2xsIHN0aWNrIHdpdGggYHNtY19pYl9yZW1vdmVfZGV2YCBmb3Igbm93LgoKRmluYWxseSwgYHNtY19sbGNfY2xpX2FkZF9saW5rYCBhbmQgYHNtY19sbGNfc3J2X2FkZF9saW5rYCBhcmUgdGhhbmtmdWxseSBub24tc3RhdGljLCBzbyB3ZSYjMzk7cmUgZ29vZCB0aGVyZS4KClNvLCBzdW1taW5nIGl0IHVwLCBteSBmb2N1cyBzeW1ib2xzLCBiYXNlZCBvbiB0aGUgbm9uLXN0YXRpYy9ub24taW5saW5lZCBwcmVmZXJlbmNlLCBhcmUgbm93OgoKKiAgIGBzbWNfY29ubmVjdGAKKiAgIGBzbWNfbGlzdGVuYAoqICAgYHNtY19wbmV0X2ZpbmRfcm9jZV9yZXNvdXJjZWAKKiAgIGBzbWNfcG5ldF9maW5kX2FsdF9yb2NlYAoqICAgYHNtY19pYl9yZW1vdmVfZGV2YAoqICAgYHNtY19sbGNfY2xpX2FkZF9saW5rYAoqICAgYHNtY19sbGNfc3J2X2FkZF9saW5rYAoKSSYjMzk7bGwgd2FudCB0byB2ZXJpZnkgdGhlIGRldGFpbHMgYXJvdW5kIGBzbWNfY29ubmVjdGAgYW5kIGBzbWNfbGlzdGVuYCB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGVpciBiZWhhdmlvciBhbmQgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvYWZfc21jLmM9NzM9c3RhdGljIHZvaWQgc21jX3RjcF9saXN0ZW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7XG5uZXQvc21jL2FmX3NtYy5jOjc0OnN0YXRpYyB2b2lkIHNtY19jb25uZWN0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICopO1xubmV0L3NtYy9hZl9zbWMuYy03NS1cbi0tXG5uZXQvc21jL2FmX3NtYy5jPTMyOD1pbnQgc21jX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTM0Ni1cdGlmIChjYW5jZWxfd29ya19zeW5jKFx1MDAyNnNtYy1cdTAwM2Vjb25uZWN0X3dvcmspKVxubmV0L3NtYy9hZl9zbWMuYzozNDc6XHRcdHNvY2tfcHV0KFx1MDAyNnNtYy1cdTAwM2Vzayk7IC8qIHNvY2tfaG9sZCBpbiBzbWNfY29ubmVjdCBmb3IgcGFzc2l2ZSBjbG9zaW5nICovXG5uZXQvc21jL2FmX3NtYy5jLTM0OC1cbi0tXG5uZXQvc21jL2FmX3NtYy5jPTM5NT12b2lkIHNtY19za19pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBpbnQgcHJvdG9jb2wpXG4tLVxubmV0L3NtYy9hZl9zbWMuYy00MDQtXHRJTklUX1dPUksoXHUwMDI2c21jLVx1MDAzZXRjcF9saXN0ZW5fd29yaywgc21jX3RjcF9saXN0ZW5fd29yayk7XG5uZXQvc21jL2FmX3NtYy5jOjQwNTpcdElOSVRfV09SSyhcdTAwMjZzbWMtXHUwMDNlY29ubmVjdF93b3JrLCBzbWNfY29ubmVjdF93b3JrKTtcbm5ldC9zbWMvYWZfc21jLmMtNDA2LVx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2c21jLVx1MDAzZWNvbm4udHhfd29yaywgc21jX3R4X3dvcmspO1xuLS1cbm5ldC9zbWMvYWZfc21jLmM9OTMxPXN0YXRpYyBpbnQgc21jX3N3aXRjaF90b19mYWxsYmFjayhzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgaW50IHJlYXNvbl9jb2RlKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtOTYzLS8qIGZhbGwgYmFjayBkdXJpbmcgY29ubmVjdCAqL1xubmV0L3NtYy9hZl9zbWMuYzo5NjQ6c3RhdGljIGludCBzbWNfY29ubmVjdF9mYWxsYmFjayhzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgaW50IHJlYXNvbl9jb2RlKVxubmV0L3NtYy9hZl9zbWMuYy05NjUte1xuLS1cbm5ldC9zbWMvYWZfc21jLmMtOTgzLS8qIGRlY2xpbmUgYW5kIGZhbGwgYmFjayBkdXJpbmcgY29ubmVjdCAqL1xubmV0L3NtYy9hZl9zbWMuYzo5ODQ6c3RhdGljIGludCBzbWNfY29ubmVjdF9kZWNsaW5lX2ZhbGxiYWNrKHN0cnVjdCBzbWNfc29jayAqc21jLCBpbnQgcmVhc29uX2NvZGUsXG5uZXQvc21jL2FmX3NtYy5jLTk4NS1cdFx0XHRcdFx0dTggdmVyc2lvbilcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTEwMDQtXHR9XG5uZXQvc21jL2FmX3NtYy5jOjEwMDU6XHRyZXR1cm4gc21jX2Nvbm5lY3RfZmFsbGJhY2soc21jLCByZWFzb25fY29kZSk7XG5uZXQvc21jL2FmX3NtYy5jLTEwMDYtfVxuLS1cbm5ldC9zbWMvYWZfc21jLmM9MTAwOD1zdGF0aWMgdm9pZCBzbWNfY29ubl9hYm9ydChzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgaW50IGxvY2FsX2ZpcnN0KVxubmV0L3NtYy9hZl9zbWMuYy0xMDA5LXtcbm5ldC9zbWMvYWZfc21jLmM6MTAxMDpcdHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiA9IFx1MDAyNnNtYy1cdTAwM2Vjb25uO1xubmV0L3NtYy9hZl9zbWMuYy0xMDExLVx0c3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IgPSBjb25uLVx1MDAzZWxncjtcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTEwNjY9c3RhdGljIGludCBzbWNfZmluZF9pc21fdjJfZGV2aWNlX2NsbnQoc3RydWN0IHNtY19zb2NrICpzbWMsXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xMTEyLS8qIENoZWNrIGZvciBWTEFOIElEIGFuZCByZWdpc3RlciBpdCBvbiBJU00gZGV2aWNlIGp1c3QgZm9yIENMQyBoYW5kc2hha2UgKi9cbm5ldC9zbWMvYWZfc21jLmM6MTExMzpzdGF0aWMgaW50IHNtY19jb25uZWN0X2lzbV92bGFuX3NldHVwKHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXG5uZXQvc21jL2FmX3NtYy5jLTExMTQte1xuLS1cbm5ldC9zbWMvYWZfc21jLmM9MTEyMD1zdGF0aWMgaW50IHNtY19maW5kX3Byb3Bvc2FsX2RldmljZXMoc3RydWN0IHNtY19zb2NrICpzbWMsXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xMTI3LVx0ICAgIHNtY19maW5kX2lzbV9kZXZpY2Uoc21jLCBpbmkpIHx8XG5uZXQvc21jL2FmX3NtYy5jOjExMjg6XHQgICAgc21jX2Nvbm5lY3RfaXNtX3ZsYW5fc2V0dXAoaW5pKSlcbm5ldC9zbWMvYWZfc21jLmMtMTEyOS1cdFx0aW5pLVx1MDAzZXNtY2RfdmVyc2lvbiBcdTAwMjY9IH5TTUNfVjE7XG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xMTcyLSAqL1xubmV0L3NtYy9hZl9zbWMuYzoxMTczOnN0YXRpYyBpbnQgc21jX2Nvbm5lY3RfaXNtX3ZsYW5fY2xlYW51cChzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxubmV0L3NtYy9hZl9zbWMuYy0xMTc0LXtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTExODctLyogQ0xDIGhhbmRzaGFrZSBkdXJpbmcgY29ubmVjdCAqL1xubmV0L3NtYy9hZl9zbWMuYzoxMTg4OnN0YXRpYyBpbnQgc21jX2Nvbm5lY3RfY2xjKHN0cnVjdCBzbWNfc29jayAqc21jLFxubmV0L3NtYy9hZl9zbWMuYy0xMTg5LVx0XHRcdCAgIHN0cnVjdCBzbWNfY2xjX21zZ19hY2NlcHRfY29uZmlybSAqYWNsYyxcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTEyMDM9dm9pZCBzbWNfZmlsbF9naWRfbGlzdChzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTEyMzAtXG5uZXQvc21jL2FmX3NtYy5jOjEyMzE6c3RhdGljIGludCBzbWNfY29ubmVjdF9yZG1hX3YyX3ByZXBhcmUoc3RydWN0IHNtY19zb2NrICpzbWMsXG5uZXQvc21jL2FmX3NtYy5jLTEyMzItXHRcdFx0XHQgICAgICAgc3RydWN0IHNtY19jbGNfbXNnX2FjY2VwdF9jb25maXJtICphY2xjLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTI2Ni0vKiBzZXR1cCBmb3IgUkRNQSBjb25uZWN0aW9uIG9mIGNsaWVudCAqL1xubmV0L3NtYy9hZl9zbWMuYzoxMjY3OnN0YXRpYyBpbnQgc21jX2Nvbm5lY3RfcmRtYShzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcbm5ldC9zbWMvYWZfc21jLmMtMTI2OC1cdFx0XHQgICAgc3RydWN0IHNtY19jbGNfbXNnX2FjY2VwdF9jb25maXJtICphY2xjLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTI4My1cbm5ldC9zbWMvYWZfc21jLmM6MTI4NDpcdHJlYXNvbl9jb2RlID0gc21jX2Nvbm5lY3RfcmRtYV92Ml9wcmVwYXJlKHNtYywgYWNsYywgaW5pKTtcbm5ldC9zbWMvYWZfc21jLmMtMTI4NS1cdGlmIChyZWFzb25fY29kZSlcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTEzOTk9c21jX3YyX2RldGVybWluZV9hY2NlcHRlZF9jaGlkKHN0cnVjdCBzbWNfY2xjX21zZ19hY2NlcHRfY29uZmlybSAqYWNsYyxcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE0MTUtLyogc2V0dXAgZm9yIElTTSBjb25uZWN0aW9uIG9mIGNsaWVudCAqL1xubmV0L3NtYy9hZl9zbWMuYzoxNDE2OnN0YXRpYyBpbnQgc21jX2Nvbm5lY3RfaXNtKHN0cnVjdCBzbWNfc29jayAqc21jLFxubmV0L3NtYy9hZl9zbWMuYy0xNDE3LVx0XHRcdCAgIHN0cnVjdCBzbWNfY2xjX21zZ19hY2NlcHRfY29uZmlybSAqYWNsYyxcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE0OTgtLyogY2hlY2sgaWYgcmVjZWl2ZWQgYWNjZXB0IHR5cGUgYW5kIHZlcnNpb24gbWF0Y2hlcyBhIHByb3Bvc2VkIG9uZSAqL1xubmV0L3NtYy9hZl9zbWMuYzoxNDk5OnN0YXRpYyBpbnQgc21jX2Nvbm5lY3RfY2hlY2tfYWNsYyhzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pLFxubmV0L3NtYy9hZl9zbWMuYy0xNTAwLVx0XHRcdFx0ICBzdHJ1Y3Qgc21jX2NsY19tc2dfYWNjZXB0X2NvbmZpcm0gKmFjbGMpXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xNTE5LS8qIHBlcmZvcm0gc3RlcHMgYmVmb3JlIGFjdHVhbGx5IGNvbm5lY3RpbmcgKi9cbm5ldC9zbWMvYWZfc21jLmM6MTUyMDpzdGF0aWMgaW50IF9fc21jX2Nvbm5lY3Qoc3RydWN0IHNtY19zb2NrICpzbWMpXG5uZXQvc21jL2FmX3NtYy5jLTE1MjEte1xuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTUyOC1cdGlmIChzbWMtXHUwMDNldXNlX2ZhbGxiYWNrKVxubmV0L3NtYy9hZl9zbWMuYzoxNTI5Olx0XHRyZXR1cm4gc21jX2Nvbm5lY3RfZmFsbGJhY2soc21jLCBzbWMtXHUwMDNlZmFsbGJhY2tfcnNuKTtcbm5ldC9zbWMvYWZfc21jLmMtMTUzMC1cbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE1MzItXHRpZiAoIXRjcF9zayhzbWMtXHUwMDNlY2xjc29jay1cdTAwM2VzayktXHUwMDNlc3luX3NtYylcbm5ldC9zbWMvYWZfc21jLmM6MTUzMzpcdFx0cmV0dXJuIHNtY19jb25uZWN0X2ZhbGxiYWNrKHNtYywgU01DX0NMQ19ERUNMX1BFRVJOT1NNQyk7XG5uZXQvc21jL2FmX3NtYy5jLTE1MzQtXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xNTM2LVx0aWYgKHVzaW5nX2lwc2VjKHNtYykpXG5uZXQvc21jL2FmX3NtYy5jOjE1Mzc6XHRcdHJldHVybiBzbWNfY29ubmVjdF9kZWNsaW5lX2ZhbGxiYWNrKHNtYywgU01DX0NMQ19ERUNMX0lQU0VDLFxubmV0L3NtYy9hZl9zbWMuYy0xNTM4LVx0XHRcdFx0XHRcdCAgICB2ZXJzaW9uKTtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE1NDEtXHRpZiAoIWluaSlcbm5ldC9zbWMvYWZfc21jLmM6MTU0MjpcdFx0cmV0dXJuIHNtY19jb25uZWN0X2RlY2xpbmVfZmFsbGJhY2soc21jLCBTTUNfQ0xDX0RFQ0xfTUVNLFxubmV0L3NtYy9hZl9zbWMuYy0xNTQzLVx0XHRcdFx0XHRcdCAgICB2ZXJzaW9uKTtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE1NjgtXHQvKiBwZXJmb3JtIENMQyBoYW5kc2hha2UgKi9cbm5ldC9zbWMvYWZfc21jLmM6MTU2OTpcdHJjID0gc21jX2Nvbm5lY3RfY2xjKHNtYywgYWNsYywgaW5pKTtcbm5ldC9zbWMvYWZfc21jLmMtMTU3MC1cdGlmIChyYykge1xuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTU3OS1cdC8qIGNoZWNrIGlmIHNtYyBtb2RlcyBhbmQgdmVyc2lvbnMgb2YgQ0xDIHByb3Bvc2FsIGFuZCBhY2NlcHQgbWF0Y2ggKi9cbm5ldC9zbWMvYWZfc21jLmM6MTU4MDpcdHJjID0gc21jX2Nvbm5lY3RfY2hlY2tfYWNsYyhpbmksIGFjbGMpO1xubmV0L3NtYy9hZl9zbWMuYy0xNTgxLVx0dmVyc2lvbiA9IGFjbGMtXHUwMDNlaGRyLnZlcnNpb24gPT0gU01DX1YxID8gU01DX1YxIDogU01DX1YyO1xuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTU4Ny1cdFx0aW5pLVx1MDAzZXNtY3JfdmVyc2lvbiA9IHZlcnNpb247XG5uZXQvc21jL2FmX3NtYy5jOjE1ODg6XHRcdHJjID0gc21jX2Nvbm5lY3RfcmRtYShzbWMsIGFjbGMsIGluaSk7XG5uZXQvc21jL2FmX3NtYy5jLTE1ODktXHR9IGVsc2UgaWYgKGFjbGMtXHUwMDNlaGRyLnR5cGV2MSA9PSBTTUNfVFlQRV9EKSB7XG5uZXQvc21jL2FmX3NtYy5jLTE1OTAtXHRcdGluaS1cdTAwM2VzbWNkX3ZlcnNpb24gPSB2ZXJzaW9uO1xubmV0L3NtYy9hZl9zbWMuYzoxNTkxOlx0XHRyYyA9IHNtY19jb25uZWN0X2lzbShzbWMsIGFjbGMsIGluaSk7XG5uZXQvc21jL2FmX3NtYy5jLTE1OTItXHR9XG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xNTk2LVx0U01DX1NUQVRfQ0xOVF9TVUNDX0lOQyhzb2NrX25ldChzbWMtXHUwMDNlY2xjc29jay1cdTAwM2VzayksIGFjbGMpO1xubmV0L3NtYy9hZl9zbWMuYzoxNTk3Olx0c21jX2Nvbm5lY3RfaXNtX3ZsYW5fY2xlYW51cChpbmkpO1xubmV0L3NtYy9hZl9zbWMuYy0xNTk4LVx0a2ZyZWUoYnVmKTtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE2MDItdmxhbl9jbGVhbnVwOlxubmV0L3NtYy9hZl9zbWMuYzoxNjAzOlx0c21jX2Nvbm5lY3RfaXNtX3ZsYW5fY2xlYW51cChpbmkpO1xubmV0L3NtYy9hZl9zbWMuYy0xNjA0LVx0a2ZyZWUoYnVmKTtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE2MDYtXHRzbWNfaW5pdF9pbmZvX2ZyZWUoaW5pKTtcbm5ldC9zbWMvYWZfc21jLmM6MTYwNzpcdHJldHVybiBzbWNfY29ubmVjdF9kZWNsaW5lX2ZhbGxiYWNrKHNtYywgcmMsIHZlcnNpb24pO1xubmV0L3NtYy9hZl9zbWMuYy0xNjA4LX1cbm5ldC9zbWMvYWZfc21jLmMtMTYwOS1cbm5ldC9zbWMvYWZfc21jLmM6MTYxMDpzdGF0aWMgdm9pZCBzbWNfY29ubmVjdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9zbWMvYWZfc21jLmMtMTYxMS17XG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xNjM5LVxubmV0L3NtYy9hZl9zbWMuYzoxNjQwOlx0cmMgPSBfX3NtY19jb25uZWN0KHNtYyk7XG5uZXQvc21jL2FmX3NtYy5jLTE2NDEtXHRpZiAocmMgXHUwMDNjIDApXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xNjU1LVxubmV0L3NtYy9hZl9zbWMuYzoxNjU2OmludCBzbWNfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbm5ldC9zbWMvYWZfc21jLmMtMTY1Ny1cdFx0aW50IGFsZW4sIGludCBmbGFncylcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE3MjItXHR9IGVsc2Uge1xubmV0L3NtYy9hZl9zbWMuYzoxNzIzOlx0XHRyYyA9IF9fc21jX2Nvbm5lY3Qoc21jKTtcbm5ldC9zbWMvYWZfc21jLmMtMTcyNC1cdFx0aWYgKHJjIFx1MDAzYyAwKVxuLS1cbm5ldC9zbWMvYWZfc21jLmM9MjI4MT1zdGF0aWMgaW50IHNtY19saXN0ZW5fcmRtYV9yZWcoc3RydWN0IHNtY19zb2NrICpuZXdfc21jLCBib29sIGxvY2FsX2ZpcnN0KVxubmV0L3NtYy9hZl9zbWMuYy0yMjgyLXtcbm5ldC9zbWMvYWZfc21jLmM6MjI4MzpcdHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiA9IFx1MDAyNm5ld19zbWMtXHUwMDNlY29ubjtcbm5ldC9zbWMvYWZfc21jLmMtMjI4NC1cbi0tXG5uZXQvc21jL2FmX3NtYy5jPTMxOTk9aW50IHNtY19pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMzIwMi1cdHVuaW9uIHNtY19ob3N0X2N1cnNvciBjb25zLCB1cmc7XG5uZXQvc21jL2FmX3NtYy5jOjMyMDM6XHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm47XG5uZXQvc21jL2FmX3NtYy5jLTMyMDQtXHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYztcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTMzMzM9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgc21jX3NvY2tfb3BzID0ge1xuLS1cbm5ldC9zbWMvYWZfc21jLmMtMzMzNy1cdC5iaW5kXHRcdD0gc21jX2JpbmQsXG5uZXQvc21jL2FmX3NtYy5jOjMzMzg6XHQuY29ubmVjdFx0PSBzbWNfY29ubmVjdCxcbm5ldC9zbWMvYWZfc21jLmMtMzMzOS1cdC5zb2NrZXRwYWlyXHQ9IHNvY2tfbm9fc29ja2V0cGFpcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQ29ubmVjdGluZyB0aGUgRG90cyBpbiBTb2NrZXQgTWFuYWdlbWVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBgc21jX2Nvbm5lY3RgLiBUaGF0JiMzOTtzIHByZXR0eSBjbGVhciAtIGl0JiMzOTtzIHRoZSBzb2NrZXQmIzM5O3MgYC5jb25uZWN0YCBvcGVyYXRpb24sIG5vIHF1ZXN0aW9uLiBEZWZpbml0ZWx5IGEgdXNlZnVsIG1uZW1vbmljLCBhIGdvb2QgZm9jdXMgc3ltYm9sIHRvIHdvcmsgd2l0aC4gSXQmIzM5O3MgY29uY2lzZSBhbmQgcG9pbnRzIGRpcmVjdGx5IHRvIHRoZSBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlLgoKTm93LCBsZXQmIzM5O3MgbW92ZSBvbiB0byBgc21jX2xpc3RlbmAuIEl0IHNlZW1zIHJlYXNvbmFibGUgdG8gYXNzdW1lIHRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIHNvY2tldCYjMzk7cyBgLmxpc3RlbmAgb3BlcmF0aW9uLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gYW5kIHRoZSBlc3RhYmxpc2hlZCBwYXR0ZXJuLCB0aGlzIGZlZWxzIGhpZ2hseSBwcm9iYWJsZS4gQnV0LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBhdm9pZCBhc3N1bXB0aW9ucywgbGV0JiMzOTtzIHZlcmlmeSB0aGF0IHF1aWNrbHkuIE5vIGhhcm0gaW4gY29uZmlybWluZyB0aGUgaHlwb3RoZXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX2xpc3RlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvYWZfc21jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9hZl9zbWMuYz0xODcyPXN0YXRpYyBpbnQgc21jcl9zZXJ2X2NvbmZfZmlyc3RfbGluayhzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE5MjQtLyogbGlzdGVuIHdvcmtlcjogZmluaXNoICovXG5uZXQvc21jL2FmX3NtYy5jOjE5MjU6c3RhdGljIHZvaWQgc21jX2xpc3Rlbl9vdXQoc3RydWN0IHNtY19zb2NrICpuZXdfc21jKVxubmV0L3NtYy9hZl9zbWMuYy0xOTI2LXtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE5MzItXG5uZXQvc21jL2FmX3NtYy5jOjE5MzM6XHRyZWxlYXNlX3NvY2sobmV3c21jc2spOyAvKiBsb2NrIGluIHNtY19saXN0ZW5fd29yaygpICovXG5uZXQvc21jL2FmX3NtYy5jLTE5MzQtXHRpZiAobHNtYy1cdTAwM2Vzay5za19zdGF0ZSA9PSBTTUNfTElTVEVOKSB7XG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xOTQ3LS8qIGxpc3RlbiB3b3JrZXI6IGZpbmlzaCBpbiBzdGF0ZSBjb25uZWN0ZWQgKi9cbm5ldC9zbWMvYWZfc21jLmM6MTk0ODpzdGF0aWMgdm9pZCBzbWNfbGlzdGVuX291dF9jb25uZWN0ZWQoc3RydWN0IHNtY19zb2NrICpuZXdfc21jKVxubmV0L3NtYy9hZl9zbWMuYy0xOTQ5LXtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE5NTQtXG5uZXQvc21jL2FmX3NtYy5jOjE5NTU6XHRzbWNfbGlzdGVuX291dChuZXdfc21jKTtcbm5ldC9zbWMvYWZfc21jLmMtMTk1Ni19XG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xOTU4LS8qIGxpc3RlbiB3b3JrZXI6IGZpbmlzaCBpbiBlcnJvciBzdGF0ZSAqL1xubmV0L3NtYy9hZl9zbWMuYzoxOTU5OnN0YXRpYyB2b2lkIHNtY19saXN0ZW5fb3V0X2VycihzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMpXG5uZXQvc21jL2FmX3NtYy5jLTE5NjAte1xuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTk2OC1cbm5ldC9zbWMvYWZfc21jLmM6MTk2OTpcdHNtY19saXN0ZW5fb3V0KG5ld19zbWMpO1xubmV0L3NtYy9hZl9zbWMuYy0xOTcwLX1cbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE5NzItLyogbGlzdGVuIHdvcmtlcjogZGVjbGluZSBhbmQgZmFsbCBiYWNrIGlmIHBvc3NpYmxlICovXG5uZXQvc21jL2FmX3NtYy5jOjE5NzM6c3RhdGljIHZvaWQgc21jX2xpc3Rlbl9kZWNsaW5lKHN0cnVjdCBzbWNfc29jayAqbmV3X3NtYywgaW50IHJlYXNvbl9jb2RlLFxubmV0L3NtYy9hZl9zbWMuYy0xOTc0LVx0XHRcdCAgICAgICBpbnQgbG9jYWxfZmlyc3QsIHU4IHZlcnNpb24pXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xOTgwLVx0XHQvKiBlcnJvciwgbm8gZmFsbGJhY2sgcG9zc2libGUgKi9cbm5ldC9zbWMvYWZfc21jLmM6MTk4MTpcdFx0c21jX2xpc3Rlbl9vdXRfZXJyKG5ld19zbWMpO1xubmV0L3NtYy9hZl9zbWMuYy0xOTgyLVx0XHRyZXR1cm47XG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xOTg1LVx0XHRpZiAoc21jX2NsY19zZW5kX2RlY2xpbmUobmV3X3NtYywgcmVhc29uX2NvZGUsIHZlcnNpb24pIFx1MDAzYyAwKSB7XG5uZXQvc21jL2FmX3NtYy5jOjE5ODY6XHRcdFx0c21jX2xpc3Rlbl9vdXRfZXJyKG5ld19zbWMpO1xubmV0L3NtYy9hZl9zbWMuYy0xOTg3LVx0XHRcdHJldHVybjtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE5ODktXHR9XG5uZXQvc21jL2FmX3NtYy5jOjE5OTA6XHRzbWNfbGlzdGVuX291dF9jb25uZWN0ZWQobmV3X3NtYyk7XG5uZXQvc21jL2FmX3NtYy5jLTE5OTEtfVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTk5My0vKiBsaXN0ZW4gd29ya2VyOiB2ZXJzaW9uIGNoZWNraW5nICovXG5uZXQvc21jL2FmX3NtYy5jOjE5OTQ6c3RhdGljIGludCBzbWNfbGlzdGVuX3YyX2NoZWNrKHN0cnVjdCBzbWNfc29jayAqbmV3X3NtYyxcbm5ldC9zbWMvYWZfc21jLmMtMTk5NS1cdFx0XHQgICAgICAgc3RydWN0IHNtY19jbGNfbXNnX3Byb3Bvc2FsICpwY2xjLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjA1NS0vKiBsaXN0ZW4gd29ya2VyOiBjaGVjayBwcmVmaXhlcyAqL1xubmV0L3NtYy9hZl9zbWMuYzoyMDU2OnN0YXRpYyBpbnQgc21jX2xpc3Rlbl9wcmZ4X2NoZWNrKHN0cnVjdCBzbWNfc29jayAqbmV3X3NtYyxcbm5ldC9zbWMvYWZfc21jLmMtMjA1Ny1cdFx0XHRcdCBzdHJ1Y3Qgc21jX2NsY19tc2dfcHJvcG9zYWwgKnBjbGMpXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0yMDczLS8qIGxpc3RlbiB3b3JrZXI6IGluaXRpYWxpemUgY29ubmVjdGlvbiBhbmQgYnVmZmVycyAqL1xubmV0L3NtYy9hZl9zbWMuYzoyMDc0OnN0YXRpYyBpbnQgc21jX2xpc3Rlbl9yZG1hX2luaXQoc3RydWN0IHNtY19zb2NrICpuZXdfc21jLFxubmV0L3NtYy9hZl9zbWMuYy0yMDc1LVx0XHRcdFx0c3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTIwOTMtLyogbGlzdGVuIHdvcmtlcjogaW5pdGlhbGl6ZSBjb25uZWN0aW9uIGFuZCBidWZmZXJzIGZvciBTTUMtRCAqL1xubmV0L3NtYy9hZl9zbWMuYzoyMDk0OnN0YXRpYyBpbnQgc21jX2xpc3Rlbl9pc21faW5pdChzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMsXG5uZXQvc21jL2FmX3NtYy5jLTIwOTUtXHRcdFx0ICAgICAgIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXG4tLVxubmV0L3NtYy9hZl9zbWMuYz0yMTYwPXN0YXRpYyB2b2lkIHNtY19maW5kX2lzbV92Ml9kZXZpY2Vfc2VydihzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMsXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0yMjMxLVx0XHRpbmktXHUwMDNlaXNtX3NlbGVjdGVkID0gaTtcbm5ldC9zbWMvYWZfc21jLmM6MjIzMjpcdFx0cmMgPSBzbWNfbGlzdGVuX2lzbV9pbml0KG5ld19zbWMsIGluaSk7XG5uZXQvc21jL2FmX3NtYy5jLTIyMzMtXHRcdGlmIChyYykge1xuLS1cbm5ldC9zbWMvYWZfc21jLmM9MjI1MD1zdGF0aWMgdm9pZCBzbWNfZmluZF9pc21fdjFfZGV2aWNlX3NlcnYoc3RydWN0IHNtY19zb2NrICpuZXdfc21jLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjI2OC1cdGluaS1cdTAwM2Vpc21fc2VsZWN0ZWQgPSAwO1xubmV0L3NtYy9hZl9zbWMuYzoyMjY5Olx0cmMgPSBzbWNfbGlzdGVuX2lzbV9pbml0KG5ld19zbWMsIGluaSk7XG5uZXQvc21jL2FmX3NtYy5jLTIyNzAtXHRpZiAoIXJjKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjI4MC0vKiBsaXN0ZW4gd29ya2VyOiByZWdpc3RlciBidWZmZXJzICovXG5uZXQvc21jL2FmX3NtYy5jOjIyODE6c3RhdGljIGludCBzbWNfbGlzdGVuX3JkbWFfcmVnKHN0cnVjdCBzbWNfc29jayAqbmV3X3NtYywgYm9vbCBsb2NhbF9maXJzdClcbm5ldC9zbWMvYWZfc21jLmMtMjI4Mi17XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0yMjk5PXN0YXRpYyB2b2lkIHNtY19maW5kX3JkbWFfdjJfZGV2aWNlX3NlcnYoc3RydWN0IHNtY19zb2NrICpuZXdfc21jLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjMzMi1cdGluaS1cdTAwM2VzbWNyX3ZlcnNpb24gPSBTTUNfVjI7XG5uZXQvc21jL2FmX3NtYy5jOjIzMzM6XHRyYyA9IHNtY19saXN0ZW5fcmRtYV9pbml0KG5ld19zbWMsIGluaSk7XG5uZXQvc21jL2FmX3NtYy5jLTIzMzQtXHRpZiAoIXJjKSB7XG5uZXQvc21jL2FmX3NtYy5jOjIzMzU6XHRcdHJjID0gc21jX2xpc3Rlbl9yZG1hX3JlZyhuZXdfc21jLCBpbmktXHUwMDNlZmlyc3RfY29udGFjdF9sb2NhbCk7XG5uZXQvc21jL2FmX3NtYy5jLTIzMzYtXHRcdGlmIChyYylcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTIzNTM9c3RhdGljIGludCBzbWNfZmluZF9yZG1hX3YxX2RldmljZV9zZXJ2KHN0cnVjdCBzbWNfc29jayAqbmV3X3NtYyxcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTIzNzAtXHR9XG5uZXQvc21jL2FmX3NtYy5jOjIzNzE6XHRyYyA9IHNtY19saXN0ZW5fcmRtYV9pbml0KG5ld19zbWMsIGluaSk7XG5uZXQvc21jL2FmX3NtYy5jLTIzNzItXHRpZiAocmMpXG5uZXQvc21jL2FmX3NtYy5jLTIzNzMtXHRcdHJldHVybiByYztcbm5ldC9zbWMvYWZfc21jLmM6MjM3NDpcdHJldHVybiBzbWNfbGlzdGVuX3JkbWFfcmVnKG5ld19zbWMsIGluaS1cdTAwM2VmaXJzdF9jb250YWN0X2xvY2FsKTtcbm5ldC9zbWMvYWZfc21jLmMtMjM3NS19XG4tLVxubmV0L3NtYy9hZl9zbWMuYy0yMzc3LS8qIGRldGVybWluZSB0aGUgbG9jYWwgZGV2aWNlIG1hdGNoaW5nIHRvIHByb3Bvc2FsICovXG5uZXQvc21jL2FmX3NtYy5jOjIzNzg6c3RhdGljIGludCBzbWNfbGlzdGVuX2ZpbmRfZGV2aWNlKHN0cnVjdCBzbWNfc29jayAqbmV3X3NtYyxcbm5ldC9zbWMvYWZfc21jLmMtMjM3OS1cdFx0XHRcdCAgc3RydWN0IHNtY19jbGNfbXNnX3Byb3Bvc2FsICpwY2xjLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjM4OS1cdC8qIGNoZWNrIGZvciBtYXRjaGluZyBJUCBwcmVmaXggYW5kIHN1Ym5ldCBsZW5ndGggKFYxKSAqL1xubmV0L3NtYy9hZl9zbWMuYzoyMzkwOlx0cHJmeF9yYyA9IHNtY19saXN0ZW5fcHJmeF9jaGVjayhuZXdfc21jLCBwY2xjKTtcbm5ldC9zbWMvYWZfc21jLmMtMjM5MS1cdGlmIChwcmZ4X3JjKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjQyNS0vKiBsaXN0ZW4gd29ya2VyOiBmaW5pc2ggUkRNQSBzZXR1cCAqL1xubmV0L3NtYy9hZl9zbWMuYzoyNDI2OnN0YXRpYyBpbnQgc21jX2xpc3Rlbl9yZG1hX2ZpbmlzaChzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMsXG5uZXQvc21jL2FmX3NtYy5jLTI0MjctXHRcdFx0XHQgIHN0cnVjdCBzbWNfY2xjX21zZ19hY2NlcHRfY29uZmlybSAqY2NsYyxcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTI0NTEtLyogc2V0dXAgZm9yIGNvbm5lY3Rpb24gb2Ygc2VydmVyICovXG5uZXQvc21jL2FmX3NtYy5jOjI0NTI6c3RhdGljIHZvaWQgc21jX2xpc3Rlbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9zbWMvYWZfc21jLmMtMjQ1My17XG5uZXQvc21jL2FmX3NtYy5jLTI0NTQtXHRzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHNtY19zb2NrLFxubmV0L3NtYy9hZl9zbWMuYzoyNDU1Olx0XHRcdFx0XHRcdHNtY19saXN0ZW5fd29yayk7XG5uZXQvc21jL2FmX3NtYy5jLTI0NTYtXHRzdHJ1Y3Qgc29ja2V0ICpuZXdjbGNzb2NrID0gbmV3X3NtYy1cdTAwM2VjbGNzb2NrO1xuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjQ2NC1cbm5ldC9zbWMvYWZfc21jLmM6MjQ2NTpcdGxvY2tfc29jayhcdTAwMjZuZXdfc21jLVx1MDAzZXNrKTsgLyogcmVsZWFzZSBpbiBzbWNfbGlzdGVuX291dCgpICovXG5uZXQvc21jL2FmX3NtYy5jLTI0NjYtXHRpZiAobmV3X3NtYy1cdTAwM2VsaXN0ZW5fc21jLVx1MDAzZXNrLnNrX3N0YXRlICE9IFNNQ19MSVNURU4pXG5uZXQvc21jL2FmX3NtYy5jOjI0Njc6XHRcdHJldHVybiBzbWNfbGlzdGVuX291dF9lcnIobmV3X3NtYyk7XG5uZXQvc21jL2FmX3NtYy5jLTI0NjgtXG5uZXQvc21jL2FmX3NtYy5jLTI0NjktXHRpZiAobmV3X3NtYy1cdTAwM2V1c2VfZmFsbGJhY2spIHtcbm5ldC9zbWMvYWZfc21jLmM6MjQ3MDpcdFx0c21jX2xpc3Rlbl9vdXRfY29ubmVjdGVkKG5ld19zbWMpO1xubmV0L3NtYy9hZl9zbWMuYy0yNDcxLVx0XHRyZXR1cm47XG4tLVxubmV0L3NtYy9hZl9zbWMuYy0yNDc3LVx0XHRpZiAocmMpXG5uZXQvc21jL2FmX3NtYy5jOjI0Nzg6XHRcdFx0c21jX2xpc3Rlbl9vdXRfZXJyKG5ld19zbWMpO1xubmV0L3NtYy9hZl9zbWMuYy0yNDc5LVx0XHRlbHNlXG5uZXQvc21jL2FmX3NtYy5jOjI0ODA6XHRcdFx0c21jX2xpc3Rlbl9vdXRfY29ubmVjdGVkKG5ld19zbWMpO1xubmV0L3NtYy9hZl9zbWMuYy0yNDgxLVx0XHRyZXR1cm47XG4tLVxubmV0L3NtYy9hZl9zbWMuYy0yNTEzLVx0LyogaW5pdGlhbCB2ZXJzaW9uIGNoZWNraW5nICovXG5uZXQvc21jL2FmX3NtYy5jOjI1MTQ6XHRyYyA9IHNtY19saXN0ZW5fdjJfY2hlY2sobmV3X3NtYywgcGNsYywgaW5pKTtcbm5ldC9zbWMvYWZfc21jLmMtMjUxNS1cdGlmIChyYylcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTI1MjYtXHQvKiBkZXRlcm1pbmUgSVNNIG9yIFJvQ0UgZGV2aWNlIHVzZWQgZm9yIGNvbm5lY3Rpb24gKi9cbm5ldC9zbWMvYWZfc21jLmM6MjUyNzpcdHJjID0gc21jX2xpc3Rlbl9maW5kX2RldmljZShuZXdfc21jLCBwY2xjLCBpbmkpO1xubmV0L3NtYy9hZl9zbWMuYy0yNTI4LVx0aWYgKHJjKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjU1OS1cbm5ldC9zbWMvYWZfc21jLmM6MjU2MDpcdC8qIGZjZSBzbWMgcmVsZWFzZSB2ZXJzaW9uIGlzIG5lZWRlZCBpbiBzbWNfbGlzdGVuX3JkbWFfZmluaXNoLFxubmV0L3NtYy9hZl9zbWMuYy0yNTYxLVx0ICogc28gc2F2ZSBmY2UgaW5mbyBoZXJlLlxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjU2Ni1cdGlmICghaW5pLVx1MDAzZWlzX3NtY2QpIHtcbm5ldC9zbWMvYWZfc21jLmM6MjU2NzpcdFx0cmMgPSBzbWNfbGlzdGVuX3JkbWFfZmluaXNoKG5ld19zbWMsIGNjbGMsXG5uZXQvc21jL2FmX3NtYy5jLTI1NjgtXHRcdFx0XHRcdCAgICBpbmktXHUwMDNlZmlyc3RfY29udGFjdF9sb2NhbCwgaW5pKTtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTI1ODItXHRTTUNfU1RBVF9TRVJWX1NVQ0NfSU5DKHNvY2tfbmV0KG5ld2NsY3NvY2stXHUwMDNlc2spLCBpbmkpO1xubmV0L3NtYy9hZl9zbWMuYzoyNTgzOlx0Lyogc21jX2xpc3Rlbl9vdXQoKSB3aWxsIHJlbGVhc2Ugc21jc2sgKi9cbm5ldC9zbWMvYWZfc21jLmM6MjU4NDpcdHNtY19saXN0ZW5fb3V0X2Nvbm5lY3RlZChuZXdfc21jKTtcbm5ldC9zbWMvYWZfc21jLmMtMjU4NS1cdGdvdG8gb3V0X2ZyZWU7XG4tLVxubmV0L3NtYy9hZl9zbWMuYy0yNTg5LW91dF9kZWNsOlxubmV0L3NtYy9hZl9zbWMuYzoyNTkwOlx0c21jX2xpc3Rlbl9kZWNsaW5lKG5ld19zbWMsIHJjLCBpbmkgPyBpbmktXHUwMDNlZmlyc3RfY29udGFjdF9sb2NhbCA6IDAsXG5uZXQvc21jL2FmX3NtYy5jLTI1OTEtXHRcdFx0ICAgcHJvcG9zYWxfdmVyc2lvbik7XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0yNTk3PXN0YXRpYyB2b2lkIHNtY190Y3BfbGlzdGVuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjYxOC1cdFx0bmV3X3NtYy1cdTAwM2VmYWxsYmFja19yc24gPSBsc21jLVx1MDAzZWZhbGxiYWNrX3Jzbjtcbm5ldC9zbWMvYWZfc21jLmM6MjYxOTpcdFx0c29ja19ob2xkKGxzayk7IC8qIHNvY2tfcHV0IGluIHNtY19saXN0ZW5fd29yayAqL1xubmV0L3NtYy9hZl9zbWMuYzoyNjIwOlx0XHRJTklUX1dPUksoXHUwMDI2bmV3X3NtYy1cdTAwM2VzbWNfbGlzdGVuX3dvcmssIHNtY19saXN0ZW5fd29yayk7XG5uZXQvc21jL2FmX3NtYy5jLTI2MjEtXHRcdHNtY19jb3B5X3NvY2tfc2V0dGluZ3NfdG9fc21jKG5ld19zbWMpO1xubmV0L3NtYy9hZl9zbWMuYy0yNjIyLVx0XHRzb2NrX2hvbGQoXHUwMDI2bmV3X3NtYy1cdTAwM2Vzayk7IC8qIHNvY2tfcHV0IGluIHBhc3NpdmUgY2xvc2luZyAqL1xubmV0L3NtYy9hZl9zbWMuYzoyNjIzOlx0XHRpZiAoIXF1ZXVlX3dvcmsoc21jX2hzX3dxLCBcdTAwMjZuZXdfc21jLVx1MDAzZXNtY19saXN0ZW5fd29yaykpXG5uZXQvc21jL2FmX3NtYy5jLTI2MjQtXHRcdFx0c29ja19wdXQoXHUwMDI2bmV3X3NtYy1cdTAwM2Vzayk7XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0yNjMyPXN0YXRpYyB2b2lkIHNtY19jbGNzb2NrX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKmxpc3Rlbl9jbGNzb2NrKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjY0OS1cbm5ldC9zbWMvYWZfc21jLmM6MjY1MDppbnQgc21jX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgYmFja2xvZylcbm5ldC9zbWMvYWZfc21jLmMtMjY1MS17XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0yNzE2PWludCBzbWNfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld19zb2NrLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjc0NS1cdFx0dGltZW8gPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvKTtcbm5ldC9zbWMvYWZfc21jLmM6Mjc0NjpcdFx0Lyogd2FrZXVwIGJ5IHNrX2RhdGFfcmVhZHkgaW4gc21jX2xpc3Rlbl93b3JrKCkgKi9cbm5ldC9zbWMvYWZfc21jLmMtMjc0Ny1cdFx0c2NoZWRfYW5ub3RhdGVfc2xlZXAoKTtcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTI4ODc9X19wb2xsX3Qgc21jX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0yOTEwLVx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gU01DX0xJU1RFTikge1xubmV0L3NtYy9hZl9zbWMuYzoyOTExOlx0XHRcdC8qIHdva2VuIHVwIGJ5IHNrX2RhdGFfcmVhZHkgaW4gc21jX2xpc3Rlbl93b3JrKCkgKi9cbm5ldC9zbWMvYWZfc21jLmMtMjkxMi1cdFx0XHRtYXNrIHw9IHNtY19hY2NlcHRfcG9sbChzayk7XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0zMzMzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHNtY19zb2NrX29wcyA9IHtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTMzNDMtXHQuaW9jdGxcdFx0PSBzbWNfaW9jdGwsXG5uZXQvc21jL2FmX3NtYy5jOjMzNDQ6XHQubGlzdGVuXHRcdD0gc21jX2xpc3Rlbixcbm5ldC9zbWMvYWZfc21jLmMtMzM0NS1cdC5zaHV0ZG93blx0PSBzbWNfc2h1dGRvd24sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTY4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgdGhlIFNNQyBMaXN0ZW5pbmcgUHJvY2VzcyBhbmQgQVBJIERlc2lnbioqCgpSaWdodCwgc28gYHNtY19saXN0ZW5gIGlzIHRoZSBzb2NrZXQmIzM5O3MgYC5saXN0ZW5gIGNhbGwsIHRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkLiBJdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgdG8gZ2V0IHRoZSBzb2NrZXQgcmVhZHkgdG8gYWNjZXB0IGNvbm5lY3Rpb25zLiBCdXQgdGhlIGFjdHVhbCBoZWF2eSBsaWZ0aW5nLCB0aGUgY29ubmVjdGlvbiBzZXR1cCBhbmQgaGFuZGxpbmcsIHRoYXQmIzM5O3MgYWxsIGRvbmUgaW4gYHNtY19saXN0ZW5fd29ya2AuIEFuZCwgaWYgSSYjMzk7bSByZW1lbWJlcmluZyByaWdodCwgYHNtY19saXN0ZW5fd29ya2AgaXMgc3RhdGljLiBOb3csIHRoZSBwcm9tcHQgZG9lcyBzYXkgdG8gcHJlZmVyIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnRzLiBUaGUgcmVhc29uaW5nIHRoZXJlIGlzIGZvciB0aGUgY2xhcml0eSBvZiB0aGUgYWRkcmVzcyBvZiBkaXN0aW5jdCBzeW1ib2xzIGFuZCByZWR1Y2luZyBwb3NzaWJsZSBpbmxpbmluZyBjb21wbGV4aXR5LgoKQnV0IHdhaXQgYSBtaW51dGUsIGBzbWNfbGlzdGVuX3dvcmtgIGlzIGEgd29ya3F1ZXVlIGZ1bmN0aW9uLCBhbmQgdGhhdCBtZWFucyBpdCAqY2FuJiMzOTt0KiBiZSBpbmxpbmVkLiBJdCYjMzk7cyBwYXNzZWQgdG8gYElOSVRfV09SS2AuIFNvLCB0aGUgd2hvbGUgc3RhdGljL25vbi1zdGF0aWMgdGhpbmcgbWlnaHQgbm90IG1hdHRlciBpbiB0aGlzIHNwZWNpZmljIGNhc2UsIHNpbmNlIGl0ICpoYXMqIGEgc3ltYm9sIGFkZHJlc3MuCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoYXQgdGhvdWdodCBwcm9jZXNzLCB3ZSBtYXkgcHJlZmVyIHVzaW5nIGBzbWNfbGlzdGVuYCBhbmQgYHNtY19jb25uZWN0YCBhcyB0aGUgQVBJIGZvciB0aGlzIGtpbmQgb2Ygd29yay4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgaG93IGBzbWNfbGxjX2NsaV9hZGRfbGlua2AgYW5kIGBzbWNfbGxjX3Nydl9hZGRfbGlua2AgaGFuZGxlIHRoaXMgaW4gdGhlIHNhbWUgY29kZSBiYXNlLiBUaGF0IHdvdWxkIGdpdmUgbWUgc29tZSBpbnNpZ2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfbGxjX2NsaV9hZGRfbGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2xsYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2xsYy5jPTg4Nz1zdGF0aWMgaW50IHNtY19sbGNfY2xpX3JrZXlfZXhjaGFuZ2Uoc3RydWN0IHNtY19saW5rICpsaW5rLFxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTkzMC0vKiBwcmVwYXJlIGFuZCBzZW5kIGFuIGFkZCBsaW5rIHJlamVjdCByZXNwb25zZSAqL1xubmV0L3NtYy9zbWNfbGxjLmM6OTMxOnN0YXRpYyBpbnQgc21jX2xsY19jbGlfYWRkX2xpbmtfcmVqZWN0KHN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqcWVudHJ5KVxubmV0L3NtYy9zbWNfbGxjLmMtOTMyLXtcbi0tXG5uZXQvc21jL3NtY19sbGMuYz0xMDIwPXN0YXRpYyB2b2lkIHNtY19sbGNfc2F2ZV9hZGRfbGlua19pbmZvKHN0cnVjdCBzbWNfbGluayAqbGluayxcbi0tXG5uZXQvc21jL3NtY19sbGMuYy0xMDMwLS8qIGFzIGFuIFNNQyBjbGllbnQsIHByb2Nlc3MgYW4gYWRkIGxpbmsgcmVxdWVzdCAqL1xubmV0L3NtYy9zbWNfbGxjLmM6MTAzMTppbnQgc21jX2xsY19jbGlfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSlcbm5ldC9zbWMvc21jX2xsYy5jLTEwMzIte1xuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTExMTgtb3V0X3JlamVjdDpcbm5ldC9zbWMvc21jX2xsYy5jOjExMTk6XHRzbWNfbGxjX2NsaV9hZGRfbGlua19yZWplY3QocWVudHJ5KTtcbm5ldC9zbWMvc21jX2xsYy5jLTExMjAtb3V0OlxuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTExMjY9c3RhdGljIHZvaWQgc21jX2xsY19zZW5kX3JlcXVlc3RfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rKVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTExNjQtLyogYXMgYW4gU01DIGNsaWVudCwgaW52aXRlIHNlcnZlciB0byBzdGFydCB0aGUgYWRkX2xpbmsgcHJvY2Vzc2luZyAqL1xubmV0L3NtYy9zbWNfbGxjLmM6MTE2NTpzdGF0aWMgdm9pZCBzbWNfbGxjX2NsaV9hZGRfbGlua19pbnZpdGUoc3RydWN0IHNtY19saW5rICpsaW5rLFxubmV0L3NtYy9zbWNfbGxjLmMtMTE2Ni1cdFx0XHRcdFx0c3RydWN0IHNtY19sbGNfcWVudHJ5ICpxZW50cnkpXG4tLVxubmV0L3NtYy9zbWNfbGxjLmM9MTIxNz1zdGF0aWMgdm9pZCBzbWNfbGxjX3Byb2Nlc3NfY2xpX2FkZF9saW5rKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTEyMjQtXHRpZiAoc21jX2xsY19pc19sb2NhbF9hZGRfbGluayhcdTAwMjZxZW50cnktXHUwMDNlbXNnKSlcbm5ldC9zbWMvc21jX2xsYy5jOjEyMjU6XHRcdHNtY19sbGNfY2xpX2FkZF9saW5rX2ludml0ZShxZW50cnktXHUwMDNlbGluaywgcWVudHJ5KTtcbm5ldC9zbWMvc21jX2xsYy5jLTEyMjYtXHRlbHNlXG5uZXQvc21jL3NtY19sbGMuYzoxMjI3Olx0XHRzbWNfbGxjX2NsaV9hZGRfbGluayhxZW50cnktXHUwMDNlbGluaywgcWVudHJ5KTtcbm5ldC9zbWMvc21jX2xsYy5jLTEyMjgtXHR1cF93cml0ZShcdTAwMjZsZ3ItXHUwMDNlbGxjX2NvbmZfbXV0ZXgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDI1NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBGdW5jdGlvbiBTeW1ib2wgVmlzaWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb24gc3ltYm9scyBhbmQgaG93IHRoZXkmIzM5O3JlIHVzZWQuIEl0JiMzOTtzIGNsZWFyIHRoYXQgYm90aCBgc21jX2xsY19jbGlfYWRkX2xpbmtgIGFuZCBgc21jX2xsY19zcnZfYWRkX2xpbmtgIGFyZSBub24tc3RhdGljIOKAkyB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gVGhpcyBtZWFucyB0aGV5IGFyZSBsaWtlbHkgZW50cnkgcG9pbnRzIG9yIGV4cG9zZWQgaW50ZXJmYWNlcy4KClRoaXMgbmFycm93cyBkb3duIG15IGZvY3VzLiAgQmFzZWQgb24gdGhpcywgdGhlIHByaW1hcnkgY2FuZGlkYXRlcyBmb3Igc3ltYm9scyBvZiBpbnRlcmVzdCBhcmUgZ29pbmcgdG8gYmUgdGhvc2UgdGhhdCBhcmUgbm90IHN0YXRpYywgaW4gcGFydGljdWxhciwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6IGBzbWNfY29ubmVjdGAsIGBzbWNfbGlzdGVuYCwgYHNtY19wbmV0X2ZpbmRfcm9jZV9yZXNvdXJjZWAsIGBzbWNfcG5ldF9maW5kX2FsdF9yb2NlYCwgYHNtY19sbGNfY2xpX2FkZF9saW5rYCwgYW5kIGBzbWNfbGxjX3Nydl9hZGRfbGlua2AuIFRoZXNlIGFyZSB0aGUgb25lcyB3aGVyZSBnbG9iYWwgdmlzaWJpbGl0eSBpcyBleHBlY3RlZC4KCkJ1dCBob2xkIG9u4oCmIGBzbWNfaWJfcmVtb3ZlX2RldmAgaXMgKnN0YXRpYyosIGFuZCBpdCYjMzk7cyBhIGtleSBmdW5jdGlvbiB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkLCB3aGljaCBpcyBhIGJpdCBvZiBhIGN1cnZlYmFsbC4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBhIHJlZCBmbGFnLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhpcyBzdGF0aWMgZnVuY3Rpb24gaXMgaW1wb3J0YW50LiBDbGVhcmx5LCBpdCYjMzk7cyBub3QgYSBkaXJlY3QsIGV4dGVybmFsbHkgdmlzaWJsZSBlbnRyeSBwb2ludC4gU28sIEkgaGF2ZSB0byBzZWUgaWYgc29tZXRoaW5nIGNhbGxzIGl0IG9yIGlzIHJlbGF0ZWQgdG8gaXQuCgpBaGEhIGBzbWNfaWJfcmVtb3ZlX2RldmAgaXMgcmVnaXN0ZXJlZCBpbiBgc21jX2liX2NsaWVudGAuIFRoYXQmIzM5O3MgYSB2aXRhbCBjbHVlLiBOb3cgSSBuZWVkIHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGUgY2xpZW50IGxldmVsLiBJIHdhcyBjb25zaWRlcmluZyBgc21jX2liX2FkZF9kZXZgIGFuZCBgc21jX2liX3JlbW92ZV9kZXZgIGRpcmVjdGx5LCBidXQgdGhleSBhcmUgYm90aCBzdGF0aWMuIFdoYXQgYWJvdXQgYHNtY19pYl9yZWdpc3Rlcl9jbGllbnRgPyBUaGF0IG9uZSBpcyBsaWtlbHkgbW9yZSByZWxldmFudC4gSSBzaG91bGQgZGVsdmUgaW50byB0aGF0IG9uZSBhbmQgc2VlIGlmIHRoZXJlIGlzIHNvbWV0aGluZyBpbnRlcmVzdGluZyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX2liX3JlZ2lzdGVyX2NsaWVudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2liLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfaWIuYz0xMDE1PXN0YXRpYyBzdHJ1Y3QgaWJfY2xpZW50IHNtY19pYl9jbGllbnQgPSB7XG4tLVxubmV0L3NtYy9zbWNfaWIuYy0xMDIwLVxubmV0L3NtYy9zbWNfaWIuYzoxMDIxOmludCBfX2luaXQgc21jX2liX3JlZ2lzdGVyX2NsaWVudCh2b2lkKVxubmV0L3NtYy9zbWNfaWIuYy0xMDIyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwNDkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBBc3Nlc3NtZW50IG9mIHRoZSBTTUMgSW5pdGlhbGl6YXRpb24gUHJvY2VzcyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGBzbWNfaWJfcmVnaXN0ZXJfY2xpZW50YCBpcyBlc3NlbnRpYWxseSB0aGUgaW5pdGlhbGl6YXRpb24gc3RhZ2UsIGZ1bmN0aW9uaW5nIGxpa2UgYW4gYF9faW5pdF9fYCBtZXRob2QuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHJlbWVtYmVyLgoKTXkgZm9jdXMgc2hvdWxkIGJlIG9uIGBzbWNfY29ubmVjdGAsIGBzbWNfbGlzdGVuYCwgYHNtY19sbGNfY2xpX2FkZF9saW5rYCwgYW5kIGBzbWNfbGxjX3Nydl9hZGRfbGlua2AuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGZvciBoYW5kbGluZyB0aGUgb3ZlcmFsbCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGxpbmsgYWRkaXRpb24gcHJvY2VkdXJlcy4gVGhleSYjMzk7cmUgZGVmaW5pdGVseSB0aGUgcGxhY2VzIHdoZXJlIGBzbWNfaW5pdF9pbmZvYCBpcyBiZWluZyBhbGxvY2F0ZWQgYW5kIHN1YnNlcXVlbnRseSB1dGlsaXplZCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGVudGlyZSBzeXN0ZW0gb3BlcmF0ZXMuCgpMZXQmIzM5O3MgZGlnIGEgYml0IGRlZXBlciBpbnRvIGBzbWNfbGxjX3Nydl9hZGRfbGlua2Agc3BlY2lmaWNhbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhcnQgYmV0dGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfbGxjX3Nydl9hZGRfbGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2xsYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2xsYy5jPTEzOTc9c3RhdGljIHZvaWQgc21jX2xsY19zZW5kX3JlcV9hZGRfbGlua19yZXNwb25zZShzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSlcbi0tXG5uZXQvc21jL3NtY19sbGMuYy0xNDA1LVxubmV0L3NtYy9zbWNfbGxjLmM6MTQwNjppbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLFxubmV0L3NtYy9zbWNfbGxjLmMtMTQwNy1cdFx0XHQgc3RydWN0IHNtY19sbGNfcWVudHJ5ICpyZXFfcWVudHJ5KVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTE1Mjk9c3RhdGljIHZvaWQgc21jX2xsY19wcm9jZXNzX3Nydl9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncilcbi0tXG5uZXQvc21jL3NtY19sbGMuYy0xNTM3LVx0ZG93bl93cml0ZShcdTAwMjZsZ3ItXHUwMDNlbGxjX2NvbmZfbXV0ZXgpO1xubmV0L3NtYy9zbWNfbGxjLmM6MTUzODpcdHJjID0gc21jX2xsY19zcnZfYWRkX2xpbmsobGluaywgcWVudHJ5KTtcbm5ldC9zbWMvc21jX2xsYy5jLTE1MzktXHRpZiAoIXJjIFx1MDAyNlx1MDAyNiBsZ3ItXHUwMDNldHlwZSA9PSBTTUNfTEdSX1NZTU1FVFJJQykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTcwNwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqTm9uLVN0YXRpYyBGdW5jdGlvbiBDb25maXJtYXRpb24gJmFtcDsgTmV4dCBTdGVwcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgc21jX2xsY19zcnZfYWRkX2xpbmtgIGlzICpkZWZpbml0ZWx5KiBub24tc3RhdGljLiBOb3csIEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBlbHNld2hlcmUgaW4gdGhlIGNvZGUuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgYHNtY19wbmV0X2ZpbmRfcm9jZV9yZXNvdXJjZWAgYW5kIGBzbWNfcG5ldF9maW5kX2FsdF9yb2NlYCBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGludGVyYWN0LCBhbmQgd2hldGhlciB0aGV5IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSB1c2Ugb2YgYSBub24tc3RhdGljIGZ1bmN0aW9uIGhlcmUuIEtub3dpbmcgdGhlIGNvbm5lY3Rpb25zIGJldHdlZW4gdGhlc2UgaXMga2V5IGZvciBkZWJ1Z2dpbmcgb3IgdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEzOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtY19wbmV0X2ZpbmRfcm9jZV9yZXNvdXJjZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX3BuZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19wbmV0LmM9MTEwNT1zdGF0aWMgdm9pZCBzbWNfcG5ldF9maW5kX2lzbV9ieV9wbmV0aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jLTExMzQtICovXG5uZXQvc21jL3NtY19wbmV0LmM6MTEzNTp2b2lkIHNtY19wbmV0X2ZpbmRfcm9jZV9yZXNvdXJjZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXG5uZXQvc21jL3NtY19wbmV0LmMtMTEzNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTAwCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYHNtY19wbmV0X2ZpbmRfcm9jZV9yZXNvdXJjZWAgYW5kIEl0cyBJbXBsaWNhdGlvbnMqKgoKQWxyaWdodCwgc28gdGhlIGNsdWUgaXMgdGhhdCBgc21jX3BuZXRfZmluZF9yb2NlX3Jlc291cmNlYCBpc24mIzM5O3QgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlZCBteSBpbnRlcmVzdC4gTm9uLXN0YXRpYyBpbXBsaWVzIGl0JiMzOTtzIGVpdGhlciBwYXJ0IG9mIHNvbWUgYnJvYWRlciBBUEkgZXhwb3NlZCBmb3Igb3RoZXIgY29tcG9uZW50cyBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIHBvdGVudGlhbGx5IGNhbGxhYmxlIGZyb20gb3V0c2lkZSBpdHMgaW1tZWRpYXRlIHNjb3BlLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyB0byBub3RlLgoKTm93LCB3aGVyZSBkb2VzIHRoYXQgbGVhZD8gV2VsbCwgYmFzZWQgb24gdGhlIGNvbnRleHQgSSB3b3VsZCB0aGVuIHdhbnQgdG8gcGl2b3QgYW5kIGV4cGxvcmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBzbWNfcG5ldF9maW5kX2FsdF9yb2NlYC4gQSBmdW5jdGlvbiB3aXRoIGEgbmFtZSBsaWtlIHRoYXQgc3VnZ2VzdHMgYSBjb21wbGVtZW50YXJ5IG9yIHJlbGF0ZWQgZnVuY3Rpb24uIFBlcmhhcHMgaXQmIzM5O3MgY2FsbGVkIGludGVybmFsbHkgYnkgdGhlIGZpcnN0IG9uZSwgb3IgbWF5YmUgaXQgcGVyZm9ybXMgYW4gYWx0ZXJuYXRpdmUgc2VhcmNoIHN0cmF0ZWd5IHdoZW4gdGhlIGluaXRpYWwgZnVuY3Rpb24gZmFpbHMuIEtub3dpbmcgaXRzIHJlbGF0aW9uc2hpcCB3b3VsZCBiZSB1c2VmdWwuIEkmIzM5O2Qgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgb2YgdGhpcyBmdW5jdGlvbiBhcyB3ZWxsLCB3aGljaCB3aWxsIHRlbGwgbWUgaXRzIHB1cnBvc2UuIElzIHRoZSBmaXJzdCBmdW5jdGlvbiBqdXN0IGEgd3JhcHBlciBmb3IgaXQsIG9yIGlzIHRoZSByZWxhdGlvbnNoaXAgbW9yZSBjb21wbGV4PyBLbm93aW5nIHRoZSBpbnRlcmZhY2Ugd291bGQgYmUgdmVyeSBoZWxwZnVsLiBXaGF0JiMzOTtzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlIGZvciB0aGUgdHdvIGZ1bmN0aW9ucz8gSXMgdGhlcmUgYSBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmUsIGEgY29tbW9uIHNldCBvZiByZXNvdXJjZXM/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRyb2wgZmxvdyBiZXR3ZWVuIHRoZXNlIHR3byBpcyBjcml0aWNhbCBmb3IgYW55IGRlYnVnZ2luZyBvciBvcHRpbWl6YXRpb24gdGhhdCBtYXkgY29tZSBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX3BuZXRfZmluZF9hbHRfcm9jZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX3BuZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19wbmV0LmM9MTAwNj1zdGF0aWMgdm9pZCBfc21jX3BuZXRfZmluZF9yb2NlX2J5X3BuZXRpZCh1OCAqcG5ldF9pZCxcbi0tXG5uZXQvc21jL3NtY19wbmV0LmMtMTAzNC0vKiBmaW5kIGFsdGVybmF0ZSByb2NlIGRldmljZSB3aXRoIHNhbWUgcG5ldF9pZCwgdmxhbl9pZCBhbmQgbmV0IG5hbWVzcGFjZSAqL1xubmV0L3NtYy9zbWNfcG5ldC5jOjEwMzU6dm9pZCBzbWNfcG5ldF9maW5kX2FsdF9yb2NlKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxubmV0L3NtYy9zbWNfcG5ldC5jLTEwMzYtXHRcdFx0ICAgIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjYyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgVGhpbmtpbmcqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYHNtY19wbmV0X2ZpbmRfYWx0X3JvY2VgIGlzLCBhcyBJIHN1c3BlY3RlZCwgKm5vdCogZGVjbGFyZWQgc3RhdGljLiBUaGF0JiMzOTtzIGdvb2QgdG8gaGF2ZSBuYWlsZWQgZG93bi4KCk5vdywgbXkgbWluZCBpcyBjaXJjbGluZyB0aGUgcmVsZXZhbnQgc3ltYm9scy4gSSYjMzk7bSBmb2N1c2luZyBvbjogYHNtY19jb25uZWN0YCwgYHNtY19saXN0ZW5gLCBgc21jX3BuZXRfZmluZF9yb2NlX3Jlc291cmNlYCwgYHNtY19wbmV0X2ZpbmRfYWx0X3JvY2VgLCBgc21jX2xsY19jbGlfYWRkX2xpbmtgLCBhbmQgYHNtY19sbGNfc3J2X2FkZF9saW5rYC4gVGhlc2UgYXJlIHRoZSBrZXkgcGllY2VzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIuCgpIb2xkIG9uIGEgc2Vjb25kLi4uIEkgbmVlZCB0byBxdWlja2x5IHJlLWV4YW1pbmUgdGhlIGNvbmZpZ3VyYXRpb24uIEkgd2FzIHRoaW5raW5nIG9mIGBTTUNgLCBgSU5GSU5JQkFORGAsIGFuZCBgRElCU2AuLi4gYnV0IEkgc2hvdWxkIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgYERJQlNgIGlzIHJlYWxseSBpbiB0aGUgbWFpbmxpbmUga2VybmVsIGFuZCB0aGF0IEkgaGF2ZW4mIzM5O3QgbWl4ZWQgaXQgdXAgd2l0aCBzb21ldGhpbmcgZWxzZS4gSXQmIzM5O3MgZWFzeSB0byBtaXNpbnRlcnByZXQgdGhpbmdzIHdoZW4geW91JiMzOTtyZSBkZWVwIGluIHRoZSB3ZWVkcy4gVGltZSB0byBkb3VibGUtY2hlY2sgYG5ldC9zbWMvS2NvbmZpZ2AgYWdhaW4gdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTM6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWc9Mj1jb25maWcgU01DXG5uZXQvc21jL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XCYjMzQ7XG5uZXQvc21jL0tjb25maWc6NDpcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU1xubmV0L3NtYy9LY29uZmlnLTUtXHRoZWxwXG4tLVxubmV0L3NtYy9LY29uZmlnPTE0PWNvbmZpZyBTTUNfRElBR1xubmV0L3NtYy9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7U01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbm5ldC9zbWMvS2NvbmZpZzoxNjpcdGRlcGVuZHMgb24gU01DXG5uZXQvc21jL0tjb25maWctMTctXHRoZWxwXG4tLVxubmV0L3NtYy9LY29uZmlnPTIzPWNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcbm5ldC9zbWMvS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1wmIzM0O1xubmV0L3NtYy9LY29uZmlnOjI1Olx0ZGVwZW5kcyBvbiBTTUMgXHUwMDI2XHUwMDI2IEJQRl9KSVQgXHUwMDI2XHUwMDI2IEJQRl9TWVNDQUxMXG5uZXQvc21jL0tjb25maWctMjYtXHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTM6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjczNTEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCYjMzk7cyBSZXF1aXJlbWVudHMqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCB0aGlzIHBhdGNoJiMzOTtzIHN1Y2Nlc3MgaGluZ2VzIG9uIGEgZmV3IGtleSBjb21wb25lbnRzLiBJIHNlZSBpdCYjMzk7cyBkZXBlbmRlbnQgb24gYElORVRgLCBgSU5GSU5JQkFORGAsIGFuZCwgY3J1Y2lhbGx5LCBgRElCU2AuIFNvLCB0aGUgcHJlc2VuY2Ugb2YgYERJQlNgIGlzIG5vbi1uZWdvdGlhYmxlLiBOb3csIGEgcXVpY2sgY2hlY2vigKYgaXMgYERJQlNgIGEgY29uZmlndXJhdGlvbiBvcHRpb24/IFllcCwgY29uZmlybWVkLiBJIGNhbiBzZWUgaXQgZGVmaW5lZCBpbiBgZHJpdmVycy9kaWJzL0tjb25maWdgIGFzIGBjb25maWcgRElCU2AuIEdvb2QuIFRoYXQgY29uZmlybXMgdGhhdCBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGFic29sdXRlbHkgaW5jbHVkZSBgU01DYCwgYElORklOSUJBTkRgLCBhbmQgYERJQlNgLgoKTGV0JiMzOTtzIHJlY2FwIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZXNlIHJlcXVpcmVtZW50cy4gVGhpcyBwYXRjaCBhaW1zIHRvIHBhdGNoIGEgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSAob3Igc2ltaWxhciBpc3N1ZSkgbHVya2luZyB3aXRoaW4gdGhlIFNNQyBzdWJzeXN0ZW0uIEl0JiMzOTtzIHRyaWdnZXJlZCB3aGVuIGFuIElCIGRldmljZSBpcyByZW1vdmVkIG1pZC1jb25uZWN0aW9uIHNldHVwLiBUaGUgZml4PyBSZWZlcmVuY2UgY291bnRpbmcgZm9yIGBzbWNfaWJfZGV2aWNlYCBkdXJpbmcgdGhlIGNyaXRpY2FsIGBzbWNfaW5pdF9pbmZvYCBwaGFzZS4gVGhlIGNvZGUgdG91Y2hlcyBrZXkgY29ubmVjdGlvbiBzZXR1cCBmdW5jdGlvbnM6IGBzbWNfY29ubmVjdGAsIGBzbWNfbGlzdGVuYCwgYW5kIGFsc28gbGluayBhZGRpdGlvbiBwYXRocyBsaWtlIGBzbWNfbGxjX2NsaV9hZGRfbGlua2AgYW5kIGBzbWNfbGxjX3Nydl9hZGRfbGlua2AuIFRoZXNlIHBhdGhzIGFyZSBhbGwgYWNjZXNzaWJsZSBhbmQgcG90ZW50aWFsbHkgZnV6emFibGUgdGhyb3VnaCBBRl9TTUMgc29ja2V0cy4KClRoaXMgaXMgd29ydGggZnV6emluZy4gSSBoYXZlIGEgbGlzdCBvZiB0YXJnZXRzIGZvciBmdXp6aW5nOiBgc21jX2Nvbm5lY3RgLCBgc21jX2xpc3RlbmAsIGBzbWNfcG5ldF9maW5kX3JvY2VfcmVzb3VyY2VgLCBgc21jX3BuZXRfZmluZF9hbHRfcm9jZWAsIGBzbWNfbGxjX2NsaV9hZGRfbGlua2AsIGFuZCBgc21jX2xsY19zcnZfYWRkX2xpbmtgLiBUaGVzZSBhcmUgYWxsIHByaW1lIGNhbmRpZGF0ZXMuCgpOb3csIEkgc2hvdWxkIGNoZWNrIGlmIGBESUJTYCBoYXMgYW55IGRlcGVuZGVuY2llcyBvZiBpdHMgb3duLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzL0tjb25maWc9MTQ9Y29uZmlnIERJQlNfTE9cbmRyaXZlcnMvZGlicy9LY29uZmlnLTE1LVx0Ym9vbCBcJiMzNDtJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcJiMzNDtcbmRyaXZlcnMvZGlicy9LY29uZmlnOjE2Olx0ZGVwZW5kcyBvbiBESUJTXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xNy1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODE2OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRlcGVuZGVuY3kgQW5hbHlzaXMgZm9yIGEgU3BlY2lmaWMgTW9kdWxlKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGlzIGBESUJTYCBtb2R1bGUsIGFuZCBmcm9tIHdoYXQgSSBjYW4gcmVjYWxsLCBpdCYjMzk7cyBwcmV0dHkgc3RhbmRhbG9uZS4gSSBkb24mIzM5O3Qgc2VlIGFueSBpbW1lZGlhdGVseSBvYnZpb3VzIGV4dGVybmFsIGRlcGVuZGVuY2llcyBiYWtlZCBpbnRvIGl0cyBkZXNpZ24uIFRoYXQmIzM5O3MgZ29vZCwgc2ltcGxpZmllcyB0aGluZ3MuIE5vdywgbGV0JiMzOTtzIHBpdm90IHRvIHRoZSBgSU5GSU5JQkFORGAgY29tcG9uZW50LiBJJiMzOTt2ZSB3b3JrZWQgd2l0aCBpdCBpbiB0aGUgcGFzdCwgYW5kIGl0JiMzOTtzIG5vdG9yaW91c2x54oCmIGludGVyY29ubmVjdGVkLiBJIHJlYWxseSBzaG91bGQgdmVyaWZ5IHRoYXQgaXQgZG9lc24mIzM5O3QgcmVseSBvbiBhbnl0aGluZyBlbHNlLCBlc3BlY2lhbGx5IGFueXRoaW5nIHBvdGVudGlhbGx5IG9ic2N1cmUgdGhhdCBjb3VsZCBjYXVzZSBpc3N1ZXMuIE5lZWQgdG8gY2hlY2sgaXRzIGRlcGVuZGVuY2llcyB0aG9yb3VnaGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc9Mj1tZW51Y29uZmlnIElORklOSUJBTkRcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtJbmZpbmlCYW5kIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjQ6XHRkZXBlbmRzIG9uIEhBU19JT01FTSBcdTAwMjZcdTAwMjYgSEFTX0RNQVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NTpcdGRlcGVuZHMgb24gTkVUXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo2Olx0ZGVwZW5kcyBvbiBJTkVUXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo3Olx0ZGVwZW5kcyBvbiAhQUxQSEFcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTgtXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZz0xOD1jb25maWcgSU5GSU5JQkFORF9VU0VSX01BRFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMTktXHR0cmlzdGF0ZSBcJiMzNDtJbmZpbmlCYW5kIHVzZXJzcGFjZSBNQUQgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6MjA6XHRkZXBlbmRzIG9uIElORklOSUJBTkRcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTIxLVx0aGVscFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTI4PWNvbmZpZyBJTkZJTklCQU5EX1VTRVJfQUNDRVNTXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgdXNlcnNwYWNlIGFjY2VzcyAodmVyYnMgYW5kIENNKVwmIzM0O1xuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6MzA6XHRkZXBlbmRzIG9uIE1NVVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMzEtXHRoZWxwXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc9NDQ9Y29uZmlnIElORklOSUJBTkRfVVNFUl9NRU1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTQ1LVx0Ym9vbFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NDY6XHRkZXBlbmRzIG9uIElORklOSUJBTkRfVVNFUl9BQ0NFU1MgIT0gblxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NDc6XHRkZXBlbmRzIG9uIE1NVVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDgtXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZz01MT1jb25maWcgSU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy01Mi1cdGJvb2wgXCYjMzQ7SW5maW5pQmFuZCBvbi1kZW1hbmQgcGFnaW5nIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjUzOlx0ZGVwZW5kcyBvbiBJTkZJTklCQU5EX1VTRVJfTUVNXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy01NC1cdHNlbGVjdCBNTVVfTk9USUZJRVJcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZz02ND1jb25maWcgSU5GSU5JQkFORF9BRERSX1RSQU5TXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy02NS1cdGJvb2wgXCYjMzQ7UkRNQS9DTVwmIzM0O1xuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NjY6XHRkZXBlbmRzIG9uIElORklOSUJBTkRcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTY3LVx0ZGVmYXVsdCB5XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc9NzI9Y29uZmlnIElORklOSUJBTkRfQUREUl9UUkFOU19DT05GSUdGU1xuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNzMtXHRib29sXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo3NDpcdGRlcGVuZHMgb24gSU5GSU5JQkFORF9BRERSX1RSQU5TIFx1MDAyNlx1MDAyNiBDT05GSUdGU19GUyBcdTAwMjZcdTAwMjYgIShJTkZJTklCQU5EPXkgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTPW0pXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03NS1cdGRlZmF1bHQgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTA5MQoJCQkJCQkJb3V0cHV0OiAyMjcKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgYW5kIFNldHRpbmcgUmVzdWx0cyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYElORklOSUJBTkRgLiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyBpdCBoaW5nZXMgb24gYEhBU19JT01FTWAsIGBIQVNfRE1BYCwgYE5FVGAsIGFuZCBgSU5FVGAgYmVpbmcgZW5hYmxlZCwgYnV0IGRlZmluaXRlbHkgKm5vdCogb24gYEFMUEhBYC4gVGhvc2UgYXJlIGFsbCBmYWlybHkgc3RhbmRhcmQgcHJlcmVxdWlzaXRlcywgbm90aGluZyB0b28gb3V0IG9mIHRoZSBvcmRpbmFyeSB0aGVyZS4gTWFrZXMgc2Vuc2UuCgpOb3csIG15IGZvY3VzIGlzIG9uIGBTTUNgLCBgSU5GSU5JQkFORGAsIGFuZCBgRElCU2DigJR0aG9zZSBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIEkmIzM5O20gd29ya2luZyB3aXRoIGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gYmVzdCAmIzM0O3NldC1yZXN1bHRzJiMzNDsgd2hpY2ggSSBhc3N1bWUgaXMgd2hhdCBJIGFtIGRvaW5nIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEzOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTTUMmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORCYjMzQ7LAogICAgJiMzNDtESUJTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c21jX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7c21jX2xpc3RlbiYjMzQ7LAogICAgJiMzNDtzbWNfcG5ldF9maW5kX3JvY2VfcmVzb3VyY2UmIzM0OywKICAgICYjMzQ7c21jX3BuZXRfZmluZF9hbHRfcm9jZSYjMzQ7LAogICAgJiMzNDtzbWNfbGxjX2NsaV9hZGRfbGluayYjMzQ7LAogICAgJiMzNDtzbWNfbGxjX3Nydl9hZGRfbGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBkZXZpY2UgcmVtb3ZhbCByYWNlIGNvbmRpdGlvbiBpbiB0aGUgU01DIChTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zKSBzdWJzeXN0ZW0gYnkgaW50cm9kdWNpbmcgcmVmZXJlbmNlIGNvdW50aW5nIGZvciBgc21jX2liX2RldmljZWAgZHVyaW5nIGNvbm5lY3Rpb24gaW5pdGlhbGl6YXRpb24uIFRoZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIGNvbm5lY3Rpb24gc2V0dXAgcGF0aHMgKGBzbWNfY29ubmVjdGAsIGBzbWNfbGlzdGVuYCkgYW5kIGxpbmsgYWRkaXRpb24gcGF0aHMgKGBzbWNfbGxjX2NsaV9hZGRfbGlua2AsIGBzbWNfbGxjX3Nydl9hZGRfbGlua2ApLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBBRl9TTUMgc29ja2V0cyBhbmQgY2FuIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7RElCUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY19jb25uZWN0JiMzNDssCiAgICAmIzM0O3NtY19saXN0ZW4mIzM0OywKICAgICYjMzQ7c21jX3BuZXRfZmluZF9yb2NlX3Jlc291cmNlJiMzNDssCiAgICAmIzM0O3NtY19wbmV0X2ZpbmRfYWx0X3JvY2UmIzM0OywKICAgICYjMzQ7c21jX2xsY19jbGlfYWRkX2xpbmsmIzM0OywKICAgICYjMzQ7c21jX2xsY19zcnZfYWRkX2xpbmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgZGV2aWNlIHJlbW92YWwgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgc3Vic3lzdGVtIGJ5IGludHJvZHVjaW5nIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgYHNtY19pYl9kZXZpY2VgIGR1cmluZyBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uLiBUaGUgY2hhbmdlcyBtb2RpZnkgY29yZSBjb25uZWN0aW9uIHNldHVwIHBhdGhzIChgc21jX2Nvbm5lY3RgLCBgc21jX2xpc3RlbmApIGFuZCBsaW5rIGFkZGl0aW9uIHBhdGhzIChgc21jX2xsY19jbGlfYWRkX2xpbmtgLCBgc21jX2xsY19zcnZfYWRkX2xpbmtgKS4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQUZfU01DIHNvY2tldHMgYW5kIGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMjo1OTo1OS44MzM3MDQxMTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQxNDI1MDQ5NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJESUJTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic21jX2Nvbm5lY3RcIixcbiAgICBcInNtY19saXN0ZW5cIixcbiAgICBcInNtY19wbmV0X2ZpbmRfcm9jZV9yZXNvdXJjZVwiLFxuICAgIFwic21jX3BuZXRfZmluZF9hbHRfcm9jZVwiLFxuICAgIFwic21jX2xsY19jbGlfYWRkX2xpbmtcIixcbiAgICBcInNtY19sbGNfc3J2X2FkZF9saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgZGV2aWNlIHJlbW92YWwgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgc3Vic3lzdGVtIGJ5IGludHJvZHVjaW5nIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgYHNtY19pYl9kZXZpY2VgIGR1cmluZyBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uLiBUaGUgY2hhbmdlcyBtb2RpZnkgY29yZSBjb25uZWN0aW9uIHNldHVwIHBhdGhzIChgc21jX2Nvbm5lY3RgLCBgc21jX2xpc3RlbmApIGFuZCBsaW5rIGFkZGl0aW9uIHBhdGhzIChgc21jX2xsY19jbGlfYWRkX2xpbmtgLCBgc21jX2xsY19zcnZfYWRkX2xpbmtgKS4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQUZfU01DIHNvY2tldHMgYW5kIGNhbiBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjU5OjU5LjgzMzcxMDMyNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEyMjgxMTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2FlNWVmZDkxYzVjM2JhZjdhZTBlOGE4NzZhMjRiY2ZhZjAxMmE3Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyA0IDEyOjU5OjU5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9zbWMvYWZfc21jLmMgYi9uZXQvc21jL2FmX3NtYy5jXFxuaW5kZXggYjVkYjY5MDczZTIwZi4uMTYwMjcxNDY0MzA1YyAxMDA2NDRcXG4tLS0gYS9uZXQvc21jL2FmX3NtYy5jXFxuKysrIGIvbmV0L3NtYy9hZl9zbWMuY1xcbkBAIC0xMjI1LDcgKzEyMjUsNyBAQCB2b2lkIHNtY19maWxsX2dpZF9saXN0KHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxcbiBcXHQgICAgICAgU01DX0dJRF9TSVpFKTtcXG4gXFxuIG91dDpcXG4tXFx0a2ZyZWUoYWx0X2luaSk7XFxuK1xcdHNtY19pbml0X2luZm9fZnJlZShhbHRfaW5pKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBzbWNfY29ubmVjdF9yZG1hX3YyX3ByZXBhcmUoc3RydWN0IHNtY19zb2NrICpzbWMsXFxuQEAgLTE1OTYsMTQgKzE1OTYsMTQgQEAgc3RhdGljIGludCBfX3NtY19jb25uZWN0KHN0cnVjdCBzbWNfc29jayAqc21jKVxcbiBcXHRTTUNfU1RBVF9DTE5UX1NVQ0NfSU5DKHNvY2tfbmV0KHNtYy1cXHUwMDNlY2xjc29jay1cXHUwMDNlc2spLCBhY2xjKTtcXG4gXFx0c21jX2Nvbm5lY3RfaXNtX3ZsYW5fY2xlYW51cChpbmkpO1xcbiBcXHRrZnJlZShidWYpO1xcbi1cXHRrZnJlZShpbmkpO1xcbitcXHRzbWNfaW5pdF9pbmZvX2ZyZWUoaW5pKTtcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiB2bGFuX2NsZWFudXA6XFxuIFxcdHNtY19jb25uZWN0X2lzbV92bGFuX2NsZWFudXAoaW5pKTtcXG4gXFx0a2ZyZWUoYnVmKTtcXG4gZmFsbGJhY2s6XFxuLVxcdGtmcmVlKGluaSk7XFxuK1xcdHNtY19pbml0X2luZm9fZnJlZShpbmkpO1xcbiBcXHRyZXR1cm4gc21jX2Nvbm5lY3RfZGVjbGluZV9mYWxsYmFjayhzbWMsIHJjLCB2ZXJzaW9uKTtcXG4gfVxcbiBcXG5AQCAtMjM0Myw3ICsyMzQzLDEwIEBAIHN0YXRpYyB2b2lkIHNtY19maW5kX3JkbWFfdjJfZGV2aWNlX3NlcnYoc3RydWN0IHNtY19zb2NrICpuZXdfc21jLFxcbiBcXG4gbm90X2ZvdW5kOlxcbiBcXHRpbmktXFx1MDAzZXNtY3JfdmVyc2lvbiBcXHUwMDI2PSB+U01DX1YyO1xcbitcXHRpZiAoaW5pLVxcdTAwM2VzbWNydjIuaWJfZGV2X3YyX3JlZilcXG4rXFx0XFx0c21jX2liZGV2X2luaXRfcHV0KGluaS1cXHUwMDNlc21jcnYyLmliX2Rldl92Mik7XFxuIFxcdGluaS1cXHUwMDNlc21jcnYyLmliX2Rldl92MiA9IE5VTEw7XFxuK1xcdGluaS1cXHUwMDNlc21jcnYyLmliX2Rldl92Ml9yZWYgPSBmYWxzZTtcXG4gXFx0aW5pLVxcdTAwM2VjaGVja19zbWNydjIgPSBmYWxzZTtcXG4gfVxcbiBcXG5AQCAtMjU4Nyw3ICsyNTkwLDcgQEAgc3RhdGljIHZvaWQgc21jX2xpc3Rlbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0c21jX2xpc3Rlbl9kZWNsaW5lKG5ld19zbWMsIHJjLCBpbmkgPyBpbmktXFx1MDAzZWZpcnN0X2NvbnRhY3RfbG9jYWwgOiAwLFxcbiBcXHRcXHRcXHQgICBwcm9wb3NhbF92ZXJzaW9uKTtcXG4gb3V0X2ZyZWU6XFxuLVxcdGtmcmVlKGluaSk7XFxuK1xcdHNtY19pbml0X2luZm9fZnJlZShpbmkpO1xcbiBcXHRrZnJlZShidWYpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmMgYi9uZXQvc21jL3NtY19jb3JlLmNcXG5pbmRleCBjZjZiNjIwZmVmMDVmLi5lNTlmMzI3ZjI5NGMyIDEwMDY0NFxcbi0tLSBhL25ldC9zbWMvc21jX2NvcmUuY1xcbisrKyBiL25ldC9zbWMvc21jX2NvcmUuY1xcbkBAIC01NSw2ICs1NSwxNyBAQCBzdGF0aWMgdm9pZCBfX3NtY19sZ3JfdGVybWluYXRlKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLCBib29sIHNvZnQpO1xcbiBcXG4gc3RhdGljIHZvaWQgc21jX2xpbmtfZG93bl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuIFxcbit2b2lkIHNtY19pbml0X2luZm9fZnJlZShzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxcbit7XFxuK1xcdGlmICghaW5pKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGlmIChpbmktXFx1MDAzZWliX2Rldl9yZWYpXFxuK1xcdFxcdHNtY19pYmRldl9pbml0X3B1dChpbmktXFx1MDAzZWliX2Rldik7XFxuK1xcdGlmIChpbmktXFx1MDAzZXNtY3J2Mi5pYl9kZXZfdjJfcmVmKVxcbitcXHRcXHRzbWNfaWJkZXZfaW5pdF9wdXQoaW5pLVxcdTAwM2VzbWNydjIuaWJfZGV2X3YyKTtcXG4rXFx0a2ZyZWUoaW5pKTtcXG4rfVxcbitcXG4gLyogcmV0dXJuIGhlYWQgb2YgbGluayBncm91cCBsaXN0IGFuZCBpdHMgbG9jayBmb3IgYSBnaXZlbiBsaW5rIGdyb3VwICovXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfaGVhZCAqc21jX2xncl9saXN0X2hlYWQoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgc3BpbmxvY2tfdCAqKmxncl9sb2NrKVxcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmggYi9uZXQvc21jL3NtY19jb3JlLmhcXG5pbmRleCA1YzE4ZjA4YTRjOGE1Li4zODVmMTZjYzUzNjhlIDEwMDY0NFxcbi0tLSBhL25ldC9zbWMvc21jX2NvcmUuaFxcbisrKyBiL25ldC9zbWMvc21jX2NvcmUuaFxcbkBAIC00MDMsNiArNDAzLDcgQEAgc3RydWN0IHNtY19pbml0X2luZm9fc21jcnYyIHtcXG4gXFxuIFxcdC8qIE91dHB1dCBmaWVsZHMgd2hlbiBzYWRkciBpcyBzZXQgKi9cXG4gXFx0c3RydWN0IHNtY19pYl9kZXZpY2VcXHQqaWJfZGV2X3YyO1xcbitcXHRib29sXFx0XFx0XFx0aWJfZGV2X3YyX3JlZjtcXG4gXFx0dThcXHRcXHRcXHRpYl9wb3J0X3YyO1xcbiBcXHR1OFxcdFxcdFxcdGliX2dpZF92MltTTUNfR0lEX1NJWkVdO1xcbiBcXG5AQCAtNDM4LDYgKzQzOSw3IEBAIHN0cnVjdCBzbWNfaW5pdF9pbmZvIHtcXG4gXFx0dThcXHRcXHRcXHRwZWVyX21hY1tFVEhfQUxFTl07XFxuIFxcdHU4XFx0XFx0XFx0cGVlcl9zeXN0ZW1pZFtTTUNfU1lTVEVNSURfTEVOXTtcXG4gXFx0c3RydWN0IHNtY19pYl9kZXZpY2VcXHQqaWJfZGV2O1xcbitcXHRib29sXFx0XFx0XFx0aWJfZGV2X3JlZjtcXG4gXFx0dThcXHRcXHRcXHRpYl9naWRbU01DX0dJRF9TSVpFXTtcXG4gXFx0dThcXHRcXHRcXHRpYl9wb3J0O1xcbiBcXHR1MzJcXHRcXHRcXHRpYl9jbGNxcG47XFxuQEAgLTU5NCw2ICs1OTYsNyBAQCB2b2lkIHNtY19ydG9rZW5fc2V0MihzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciwgaW50IHJ0b2tfaWR4LCBpbnQgbGlua19pZCxcXG4gdm9pZCBzbWNfc25kYnVmX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xcbiB2b2lkIHNtY19ybWJfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubik7XFxuIGludCBzbWNfdmxhbl9ieV90Y3BzayhzdHJ1Y3Qgc29ja2V0ICpjbGNzb2NrLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcXG4rdm9pZCBzbWNfaW5pdF9pbmZvX2ZyZWUoc3RydWN0IHNtY19pbml0X2luZm8gKmluaSk7XFxuIFxcbiB2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcXG4gaW50IHNtY19jb25uX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSk7XFxuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2liLmMgYi9uZXQvc21jL3NtY19pYi5jXFxuaW5kZXggOWJiNDk1NzA3NDQ1ZS4uMDFjOWI1YzYyZGY3NiAxMDA2NDRcXG4tLS0gYS9uZXQvc21jL3NtY19pYi5jXFxuKysrIGIvbmV0L3NtYy9zbWNfaWIuY1xcbkBAIC05NTAsNiArOTUwLDggQEAgc3RhdGljIGludCBzbWNfaWJfYWRkX2RldihzdHJ1Y3QgaWJfZGV2aWNlICppYmRldilcXG4gXFxuIFxcdHNtY2liZGV2LVxcdTAwM2VpYmRldiA9IGliZGV2O1xcbiBcXHRJTklUX1dPUksoXFx1MDAyNnNtY2liZGV2LVxcdTAwM2Vwb3J0X2V2ZW50X3dvcmssIHNtY19pYl9wb3J0X2V2ZW50X3dvcmspO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZzbWNpYmRldi1cXHUwMDNlaW5pdF9jbnQsIDApO1xcbitcXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZzbWNpYmRldi1cXHUwMDNlaW5pdF93YWl0KTtcXG4gXFx0YXRvbWljX3NldChcXHUwMDI2c21jaWJkZXYtXFx1MDAzZWxua19jbnQsIDApO1xcbiBcXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZzbWNpYmRldi1cXHUwMDNlbG5rc19kZWxldGVkKTtcXG4gXFx0bXV0ZXhfaW5pdChcXHUwMDI2c21jaWJkZXYtXFx1MDAzZW11dGV4KTtcXG5AQCAtMTAwMCw2ICsxMDAyLDkgQEAgc3RhdGljIHZvaWQgc21jX2liX3JlbW92ZV9kZXYoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHZvaWQgKmNsaWVudF9kYXRhKVxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnNtY19pYl9kZXZpY2VzLm11dGV4KTtcXG4gXFx0cHJfd2Fybl9yYXRlbGltaXRlZChcXFwic21jOiByZW1vdmluZyBpYiBkZXZpY2UgJXNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgICBzbWNpYmRldi1cXHUwMDNlaWJkZXYtXFx1MDAzZW5hbWUpO1xcbitcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNnNtY2liZGV2LVxcdTAwM2Vpbml0X2NudCkpXFxuK1xcdFxcdHdhaXRfZXZlbnQoc21jaWJkZXYtXFx1MDAzZWluaXRfd2FpdCxcXG4rXFx0XFx0XFx0ICAgIWF0b21pY19yZWFkKFxcdTAwMjZzbWNpYmRldi1cXHUwMDNlaW5pdF9jbnQpKTtcXG4gXFx0c21jX3NtY3JfdGVybWluYXRlX2FsbChzbWNpYmRldik7XFxuIFxcdHNtY19pYl9jbGVhbnVwX3Blcl9pYmRldihzbWNpYmRldik7XFxuIFxcdGliX3VucmVnaXN0ZXJfZXZlbnRfaGFuZGxlcihcXHUwMDI2c21jaWJkZXYtXFx1MDAzZWV2ZW50X2hhbmRsZXIpO1xcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19pYi5oIGIvbmV0L3NtYy9zbWNfaWIuaFxcbmluZGV4IGVmOGFjMmI3NTQ2ZGYuLjhlOWZkNWEyMDBhMmIgMTAwNjQ0XFxuLS0tIGEvbmV0L3NtYy9zbWNfaWIuaFxcbisrKyBiL25ldC9zbWMvc21jX2liLmhcXG5AQCAtNTEsNiArNTEsOCBAQCBzdHJ1Y3Qgc21jX2liX2RldmljZSB7XFx0XFx0XFx0XFx0LyogaWItZGV2aWNlIGluZm9zIGZvciBzbWMgKi9cXG4gXFx0c3RydWN0IHdvcmtfc3RydWN0XFx0cG9ydF9ldmVudF93b3JrO1xcbiBcXHR1bnNpZ25lZCBsb25nXFx0XFx0cG9ydF9ldmVudF9tYXNrO1xcbiBcXHRERUNMQVJFX0JJVE1BUChwb3J0c19nb2luZ19hd2F5LCBTTUNfTUFYX1BPUlRTKTtcXG4rXFx0YXRvbWljX3RcXHRcXHRpbml0X2NudDtcXHQvKiBudW1iZXIgb2YgZGV2aWNlIHNlbGVjdGlvbnMgKi9cXG4rXFx0d2FpdF9xdWV1ZV9oZWFkX3RcXHRpbml0X3dhaXQ7XFx0Lyogd2FpdCBmb3Igc2VsZWN0aW9ucyB0byBlbmQgKi9cXG4gXFx0YXRvbWljX3RcXHRcXHRsbmtfY250O1xcdC8qIG51bWJlciBvZiBsaW5rcyBvbiBpYmRldiAqL1xcbiBcXHR3YWl0X3F1ZXVlX2hlYWRfdFxcdGxua3NfZGVsZXRlZDtcXHQvKiB3YWl0IDQgcmVtb3ZhbCBvZiBhbGwgbGlua3MqL1xcbiBcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRtdXRleDtcXHRcXHQvKiBwcm90ZWN0IGRldiBzZXR1cCtjbGVhbnVwICovXFxuQEAgLTU5LDYgKzYxLDE3IEBAIHN0cnVjdCBzbWNfaWJfZGV2aWNlIHtcXHRcXHRcXHRcXHQvKiBpYi1kZXZpY2UgaW5mb3MgZm9yIHNtYyAqL1xcbiBcXHRpbnRcXHRcXHRcXHRuZGV2X2lmaWR4W1NNQ19NQVhfUE9SVFNdOyAvKiBuZGV2IGlmIGluZGV4ZXMgKi9cXG4gfTtcXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbWNfaWJkZXZfaW5pdF9nZXQoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2KVxcbit7XFxuK1xcdGF0b21pY19pbmMoXFx1MDAyNnNtY2liZGV2LVxcdTAwM2Vpbml0X2NudCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbWNfaWJkZXZfaW5pdF9wdXQoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2KVxcbit7XFxuK1xcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFxcdTAwMjZzbWNpYmRldi1cXHUwMDNlaW5pdF9jbnQpKVxcbitcXHRcXHR3YWtlX3VwKFxcdTAwMjZzbWNpYmRldi1cXHUwMDNlaW5pdF93YWl0KTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBfX2JlMzIgc21jX2liX2dpZF90b19pcHY0KHU4IGdpZFtTTUNfR0lEX1NJWkVdKVxcbiB7XFxuIFxcdHN0cnVjdCBpbjZfYWRkciAqYWRkcjYgPSAoc3RydWN0IGluNl9hZGRyICopZ2lkO1xcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19sbGMuYyBiL25ldC9zbWMvc21jX2xsYy5jXFxuaW5kZXggOTU0YjJmZjE4MTVjMi4uMTVhZTE5YTlkYjA3ZSAxMDA2NDRcXG4tLS0gYS9uZXQvc21jL3NtY19sbGMuY1xcbisrKyBiL25ldC9zbWMvc21jX2xsYy5jXFxuQEAgLTExMTgsNyArMTExOCw3IEBAIGludCBzbWNfbGxjX2NsaV9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqcWVudHJ5KVxcbiBvdXRfcmVqZWN0OlxcbiBcXHRzbWNfbGxjX2NsaV9hZGRfbGlua19yZWplY3QocWVudHJ5KTtcXG4gb3V0Olxcbi1cXHRrZnJlZShpbmkpO1xcbitcXHRzbWNfaW5pdF9pbmZvX2ZyZWUoaW5pKTtcXG4gXFx0a2ZyZWUocWVudHJ5KTtcXG4gXFx0cmV0dXJuIHJjO1xcbiB9XFxuQEAgLTExOTIsNyArMTE5Miw3IEBAIHN0YXRpYyB2b2lkIHNtY19sbGNfY2xpX2FkZF9saW5rX2ludml0ZShzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXFxuIFxcdHNtY19sbGNfc2VuZF9hZGRfbGluayhsaW5rLCBpbmktXFx1MDAzZWliX2Rldi1cXHUwMDNlbWFjW2luaS1cXHUwMDNlaWJfcG9ydCAtIDFdLFxcbiBcXHRcXHRcXHQgICAgICBpbmktXFx1MDAzZWliX2dpZCwgTlVMTCwgU01DX0xMQ19SRVEpO1xcbiBvdXQ6XFxuLVxcdGtmcmVlKGluaSk7XFxuK1xcdHNtY19pbml0X2luZm9fZnJlZShpbmkpO1xcbiBcXHRrZnJlZShxZW50cnkpO1xcbiB9XFxuIFxcbkBAIC0xNTEyLDcgKzE1MTIsNyBAQCBpbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbiBcXHRyYyA9IHNtY19sbGNfc3J2X2NvbmZfbGluayhsaW5rLCBsaW5rX25ldywgbGdyX25ld190KTtcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRnb3RvIG91dF9lcnI7XFxuLVxcdGtmcmVlKGluaSk7XFxuK1xcdHNtY19pbml0X2luZm9fZnJlZShpbmkpO1xcbiBcXHRyZXR1cm4gMDtcXG4gb3V0X2VycjpcXG4gXFx0aWYgKGxpbmtfbmV3KSB7XFxuQEAgLTE1MjAsNyArMTUyMCw3IEBAIGludCBzbWNfbGxjX3Nydl9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXFxuIFxcdFxcdHNtY3JfbGlua19jbGVhcihsaW5rX25ldywgZmFsc2UpO1xcbiBcXHR9XFxuIG91dDpcXG4tXFx0a2ZyZWUoaW5pKTtcXG4rXFx0c21jX2luaXRfaW5mb19mcmVlKGluaSk7XFxuIFxcdGlmIChzZW5kX3JlcV9hZGRfbGlua19yZXNwKVxcbiBcXHRcXHRzbWNfbGxjX3NlbmRfcmVxX2FkZF9saW5rX3Jlc3BvbnNlKHJlcV9xZW50cnkpO1xcbiBcXHRyZXR1cm4gcmM7XFxuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX3BuZXQuYyBiL25ldC9zbWMvc21jX3BuZXQuY1xcbmluZGV4IDYzZTI4NmUyZGZhYTguLjdlMDFlMDFhNTIyYjcgMTAwNjQ0XFxuLS0tIGEvbmV0L3NtYy9zbWNfcG5ldC5jXFxuKysrIGIvbmV0L3NtYy9zbWNfcG5ldC5jXFxuQEAgLTk4MCwxNCArOTgwLDIyIEBAIHN0YXRpYyBpbnQgc21jX3BuZXRfZGV0ZXJtaW5lX2dpZChzdHJ1Y3Qgc21jX2liX2RldmljZSAqaWJkZXYsIGludCBpLFxcbiBcXHRpZiAoIWluaS1cXHUwMDNlY2hlY2tfc21jcnYyIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhc21jX2liX2RldGVybWluZV9naWQoaWJkZXYsIGksIGluaS1cXHUwMDNldmxhbl9pZCwgaW5pLVxcdTAwM2VpYl9naWQsIE5VTEwsXFxuIFxcdFxcdFxcdFxcdCAgTlVMTCkpIHtcXG4rXFx0XFx0aWYgKGluaS1cXHUwMDNlaWJfZGV2X3JlZilcXG4rXFx0XFx0XFx0c21jX2liZGV2X2luaXRfcHV0KGluaS1cXHUwMDNlaWJfZGV2KTtcXG4rXFx0XFx0c21jX2liZGV2X2luaXRfZ2V0KGliZGV2KTtcXG4gXFx0XFx0aW5pLVxcdTAwM2VpYl9kZXYgPSBpYmRldjtcXG4rXFx0XFx0aW5pLVxcdTAwM2VpYl9kZXZfcmVmID0gdHJ1ZTtcXG4gXFx0XFx0aW5pLVxcdTAwM2VpYl9wb3J0ID0gaTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFx0aWYgKGluaS1cXHUwMDNlY2hlY2tfc21jcnYyIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhc21jX2liX2RldGVybWluZV9naWQoaWJkZXYsIGksIGluaS1cXHUwMDNldmxhbl9pZCwgaW5pLVxcdTAwM2VzbWNydjIuaWJfZ2lkX3YyLFxcbiBcXHRcXHRcXHRcXHQgIE5VTEwsIFxcdTAwMjZpbmktXFx1MDAzZXNtY3J2MikpIHtcXG4rXFx0XFx0aWYgKGluaS1cXHUwMDNlc21jcnYyLmliX2Rldl92Ml9yZWYpXFxuK1xcdFxcdFxcdHNtY19pYmRldl9pbml0X3B1dChpbmktXFx1MDAzZXNtY3J2Mi5pYl9kZXZfdjIpO1xcbitcXHRcXHRzbWNfaWJkZXZfaW5pdF9nZXQoaWJkZXYpO1xcbiBcXHRcXHRpbmktXFx1MDAzZXNtY3J2Mi5pYl9kZXZfdjIgPSBpYmRldjtcXG4rXFx0XFx0aW5pLVxcdTAwM2VzbWNydjIuaWJfZGV2X3YyX3JlZiA9IHRydWU7XFxuIFxcdFxcdGluaS1cXHUwMDNlc21jcnYyLmliX3BvcnRfdjIgPSBpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMzowMDowMC4yNDY4NTUyODJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNTM3MjkzNDUxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJESUJTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic21jX2Nvbm5lY3RcIixcbiAgICBcInNtY19saXN0ZW5cIixcbiAgICBcInNtY19wbmV0X2ZpbmRfcm9jZV9yZXNvdXJjZVwiLFxuICAgIFwic21jX3BuZXRfZmluZF9hbHRfcm9jZVwiLFxuICAgIFwic21jX2xsY19jbGlfYWRkX2xpbmtcIixcbiAgICBcInNtY19sbGNfc3J2X2FkZF9saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgZGV2aWNlIHJlbW92YWwgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgc3Vic3lzdGVtIGJ5IGludHJvZHVjaW5nIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgYHNtY19pYl9kZXZpY2VgIGR1cmluZyBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uLiBUaGUgY2hhbmdlcyBtb2RpZnkgY29yZSBjb25uZWN0aW9uIHNldHVwIHBhdGhzIChgc21jX2Nvbm5lY3RgLCBgc21jX2xpc3RlbmApIGFuZCBsaW5rIGFkZGl0aW9uIHBhdGhzIChgc21jX2xsY19jbGlfYWRkX2xpbmtgLCBgc21jX2xsY19zcnZfYWRkX2xpbmtgKS4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQUZfU01DIHNvY2tldHMgYW5kIGNhbiBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNhZTVlZmQ5MWM1YzNiYWY3YWUwZThhODc2YTI0YmNmYWYwMTJhN2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDEyOjU5OjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9hZl9zbWMuYyBiL25ldC9zbWMvYWZfc21jLmNcbmluZGV4IGI1ZGI2OTA3M2UyMGYuLjE2MDI3MTQ2NDMwNWMgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL2FmX3NtYy5jXG4rKysgYi9uZXQvc21jL2FmX3NtYy5jXG5AQCAtMTIyNSw3ICsxMjI1LDcgQEAgdm9pZCBzbWNfZmlsbF9naWRfbGlzdChzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbiBcdCAgICAgICBTTUNfR0lEX1NJWkUpO1xuIFxuIG91dDpcbi1cdGtmcmVlKGFsdF9pbmkpO1xuK1x0c21jX2luaXRfaW5mb19mcmVlKGFsdF9pbmkpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHNtY19jb25uZWN0X3JkbWFfdjJfcHJlcGFyZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcbkBAIC0xNTk2LDE0ICsxNTk2LDE0IEBAIHN0YXRpYyBpbnQgX19zbWNfY29ubmVjdChzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbiBcdFNNQ19TVEFUX0NMTlRfU1VDQ19JTkMoc29ja19uZXQoc21jLVx1MDAzZWNsY3NvY2stXHUwMDNlc2spLCBhY2xjKTtcbiBcdHNtY19jb25uZWN0X2lzbV92bGFuX2NsZWFudXAoaW5pKTtcbiBcdGtmcmVlKGJ1Zik7XG4tXHRrZnJlZShpbmkpO1xuK1x0c21jX2luaXRfaW5mb19mcmVlKGluaSk7XG4gXHRyZXR1cm4gMDtcbiBcbiB2bGFuX2NsZWFudXA6XG4gXHRzbWNfY29ubmVjdF9pc21fdmxhbl9jbGVhbnVwKGluaSk7XG4gXHRrZnJlZShidWYpO1xuIGZhbGxiYWNrOlxuLVx0a2ZyZWUoaW5pKTtcbitcdHNtY19pbml0X2luZm9fZnJlZShpbmkpO1xuIFx0cmV0dXJuIHNtY19jb25uZWN0X2RlY2xpbmVfZmFsbGJhY2soc21jLCByYywgdmVyc2lvbik7XG4gfVxuIFxuQEAgLTIzNDMsNyArMjM0MywxMCBAQCBzdGF0aWMgdm9pZCBzbWNfZmluZF9yZG1hX3YyX2RldmljZV9zZXJ2KHN0cnVjdCBzbWNfc29jayAqbmV3X3NtYyxcbiBcbiBub3RfZm91bmQ6XG4gXHRpbmktXHUwMDNlc21jcl92ZXJzaW9uIFx1MDAyNj0gflNNQ19WMjtcbitcdGlmIChpbmktXHUwMDNlc21jcnYyLmliX2Rldl92Ml9yZWYpXG4rXHRcdHNtY19pYmRldl9pbml0X3B1dChpbmktXHUwMDNlc21jcnYyLmliX2Rldl92Mik7XG4gXHRpbmktXHUwMDNlc21jcnYyLmliX2Rldl92MiA9IE5VTEw7XG4rXHRpbmktXHUwMDNlc21jcnYyLmliX2Rldl92Ml9yZWYgPSBmYWxzZTtcbiBcdGluaS1cdTAwM2VjaGVja19zbWNydjIgPSBmYWxzZTtcbiB9XG4gXG5AQCAtMjU4Nyw3ICsyNTkwLDcgQEAgc3RhdGljIHZvaWQgc21jX2xpc3Rlbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHNtY19saXN0ZW5fZGVjbGluZShuZXdfc21jLCByYywgaW5pID8gaW5pLVx1MDAzZWZpcnN0X2NvbnRhY3RfbG9jYWwgOiAwLFxuIFx0XHRcdCAgIHByb3Bvc2FsX3ZlcnNpb24pO1xuIG91dF9mcmVlOlxuLVx0a2ZyZWUoaW5pKTtcbitcdHNtY19pbml0X2luZm9fZnJlZShpbmkpO1xuIFx0a2ZyZWUoYnVmKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5jIGIvbmV0L3NtYy9zbWNfY29yZS5jXG5pbmRleCBjZjZiNjIwZmVmMDVmLi5lNTlmMzI3ZjI5NGMyIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfY29yZS5jXG4rKysgYi9uZXQvc21jL3NtY19jb3JlLmNcbkBAIC01NSw2ICs1NSwxNyBAQCBzdGF0aWMgdm9pZCBfX3NtY19sZ3JfdGVybWluYXRlKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLCBib29sIHNvZnQpO1xuIFxuIHN0YXRpYyB2b2lkIHNtY19saW5rX2Rvd25fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuIFxuK3ZvaWQgc21jX2luaXRfaW5mb19mcmVlKHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXG4re1xuK1x0aWYgKCFpbmkpXG4rXHRcdHJldHVybjtcbitcdGlmIChpbmktXHUwMDNlaWJfZGV2X3JlZilcbitcdFx0c21jX2liZGV2X2luaXRfcHV0KGluaS1cdTAwM2VpYl9kZXYpO1xuK1x0aWYgKGluaS1cdTAwM2VzbWNydjIuaWJfZGV2X3YyX3JlZilcbitcdFx0c21jX2liZGV2X2luaXRfcHV0KGluaS1cdTAwM2VzbWNydjIuaWJfZGV2X3YyKTtcbitcdGtmcmVlKGluaSk7XG4rfVxuK1xuIC8qIHJldHVybiBoZWFkIG9mIGxpbmsgZ3JvdXAgbGlzdCBhbmQgaXRzIGxvY2sgZm9yIGEgZ2l2ZW4gbGluayBncm91cCAqL1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfaGVhZCAqc21jX2xncl9saXN0X2hlYWQoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXG4gXHRcdFx0XHRcdFx0ICBzcGlubG9ja190ICoqbGdyX2xvY2spXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5oIGIvbmV0L3NtYy9zbWNfY29yZS5oXG5pbmRleCA1YzE4ZjA4YTRjOGE1Li4zODVmMTZjYzUzNjhlIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfY29yZS5oXG4rKysgYi9uZXQvc21jL3NtY19jb3JlLmhcbkBAIC00MDMsNiArNDAzLDcgQEAgc3RydWN0IHNtY19pbml0X2luZm9fc21jcnYyIHtcbiBcbiBcdC8qIE91dHB1dCBmaWVsZHMgd2hlbiBzYWRkciBpcyBzZXQgKi9cbiBcdHN0cnVjdCBzbWNfaWJfZGV2aWNlXHQqaWJfZGV2X3YyO1xuK1x0Ym9vbFx0XHRcdGliX2Rldl92Ml9yZWY7XG4gXHR1OFx0XHRcdGliX3BvcnRfdjI7XG4gXHR1OFx0XHRcdGliX2dpZF92MltTTUNfR0lEX1NJWkVdO1xuIFxuQEAgLTQzOCw2ICs0MzksNyBAQCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyB7XG4gXHR1OFx0XHRcdHBlZXJfbWFjW0VUSF9BTEVOXTtcbiBcdHU4XHRcdFx0cGVlcl9zeXN0ZW1pZFtTTUNfU1lTVEVNSURfTEVOXTtcbiBcdHN0cnVjdCBzbWNfaWJfZGV2aWNlXHQqaWJfZGV2O1xuK1x0Ym9vbFx0XHRcdGliX2Rldl9yZWY7XG4gXHR1OFx0XHRcdGliX2dpZFtTTUNfR0lEX1NJWkVdO1xuIFx0dThcdFx0XHRpYl9wb3J0O1xuIFx0dTMyXHRcdFx0aWJfY2xjcXBuO1xuQEAgLTU5NCw2ICs1OTYsNyBAQCB2b2lkIHNtY19ydG9rZW5fc2V0MihzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciwgaW50IHJ0b2tfaWR4LCBpbnQgbGlua19pZCxcbiB2b2lkIHNtY19zbmRidWZfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubik7XG4gdm9pZCBzbWNfcm1iX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xuIGludCBzbWNfdmxhbl9ieV90Y3BzayhzdHJ1Y3Qgc29ja2V0ICpjbGNzb2NrLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcbit2b2lkIHNtY19pbml0X2luZm9fZnJlZShzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcbiBcbiB2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcbiBpbnQgc21jX2Nvbm5fY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19pYi5jIGIvbmV0L3NtYy9zbWNfaWIuY1xuaW5kZXggOWJiNDk1NzA3NDQ1ZS4uMDFjOWI1YzYyZGY3NiAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jX2liLmNcbisrKyBiL25ldC9zbWMvc21jX2liLmNcbkBAIC05NTAsNiArOTUwLDggQEAgc3RhdGljIGludCBzbWNfaWJfYWRkX2RldihzdHJ1Y3QgaWJfZGV2aWNlICppYmRldilcbiBcbiBcdHNtY2liZGV2LVx1MDAzZWliZGV2ID0gaWJkZXY7XG4gXHRJTklUX1dPUksoXHUwMDI2c21jaWJkZXYtXHUwMDNlcG9ydF9ldmVudF93b3JrLCBzbWNfaWJfcG9ydF9ldmVudF93b3JrKTtcbitcdGF0b21pY19zZXQoXHUwMDI2c21jaWJkZXYtXHUwMDNlaW5pdF9jbnQsIDApO1xuK1x0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZzbWNpYmRldi1cdTAwM2Vpbml0X3dhaXQpO1xuIFx0YXRvbWljX3NldChcdTAwMjZzbWNpYmRldi1cdTAwM2VsbmtfY250LCAwKTtcbiBcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2c21jaWJkZXYtXHUwMDNlbG5rc19kZWxldGVkKTtcbiBcdG11dGV4X2luaXQoXHUwMDI2c21jaWJkZXYtXHUwMDNlbXV0ZXgpO1xuQEAgLTEwMDAsNiArMTAwMiw5IEBAIHN0YXRpYyB2b2lkIHNtY19pYl9yZW1vdmVfZGV2KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB2b2lkICpjbGllbnRfZGF0YSlcbiBcdG11dGV4X3VubG9jayhcdTAwMjZzbWNfaWJfZGV2aWNlcy5tdXRleCk7XG4gXHRwcl93YXJuX3JhdGVsaW1pdGVkKFwic21jOiByZW1vdmluZyBpYiBkZXZpY2UgJXNcXG5cIixcbiBcdFx0XHQgICAgc21jaWJkZXYtXHUwMDNlaWJkZXYtXHUwMDNlbmFtZSk7XG4rXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2c21jaWJkZXYtXHUwMDNlaW5pdF9jbnQpKVxuK1x0XHR3YWl0X2V2ZW50KHNtY2liZGV2LVx1MDAzZWluaXRfd2FpdCxcbitcdFx0XHQgICAhYXRvbWljX3JlYWQoXHUwMDI2c21jaWJkZXYtXHUwMDNlaW5pdF9jbnQpKTtcbiBcdHNtY19zbWNyX3Rlcm1pbmF0ZV9hbGwoc21jaWJkZXYpO1xuIFx0c21jX2liX2NsZWFudXBfcGVyX2liZGV2KHNtY2liZGV2KTtcbiBcdGliX3VucmVnaXN0ZXJfZXZlbnRfaGFuZGxlcihcdTAwMjZzbWNpYmRldi1cdTAwM2VldmVudF9oYW5kbGVyKTtcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19pYi5oIGIvbmV0L3NtYy9zbWNfaWIuaFxuaW5kZXggZWY4YWMyYjc1NDZkZi4uOGU5ZmQ1YTIwMGEyYiAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jX2liLmhcbisrKyBiL25ldC9zbWMvc21jX2liLmhcbkBAIC01MSw2ICs1MSw4IEBAIHN0cnVjdCBzbWNfaWJfZGV2aWNlIHtcdFx0XHRcdC8qIGliLWRldmljZSBpbmZvcyBmb3Igc21jICovXG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHBvcnRfZXZlbnRfd29yaztcbiBcdHVuc2lnbmVkIGxvbmdcdFx0cG9ydF9ldmVudF9tYXNrO1xuIFx0REVDTEFSRV9CSVRNQVAocG9ydHNfZ29pbmdfYXdheSwgU01DX01BWF9QT1JUUyk7XG4rXHRhdG9taWNfdFx0XHRpbml0X2NudDtcdC8qIG51bWJlciBvZiBkZXZpY2Ugc2VsZWN0aW9ucyAqL1xuK1x0d2FpdF9xdWV1ZV9oZWFkX3RcdGluaXRfd2FpdDtcdC8qIHdhaXQgZm9yIHNlbGVjdGlvbnMgdG8gZW5kICovXG4gXHRhdG9taWNfdFx0XHRsbmtfY250O1x0LyogbnVtYmVyIG9mIGxpbmtzIG9uIGliZGV2ICovXG4gXHR3YWl0X3F1ZXVlX2hlYWRfdFx0bG5rc19kZWxldGVkO1x0Lyogd2FpdCA0IHJlbW92YWwgb2YgYWxsIGxpbmtzKi9cbiBcdHN0cnVjdCBtdXRleFx0XHRtdXRleDtcdFx0LyogcHJvdGVjdCBkZXYgc2V0dXArY2xlYW51cCAqL1xuQEAgLTU5LDYgKzYxLDE3IEBAIHN0cnVjdCBzbWNfaWJfZGV2aWNlIHtcdFx0XHRcdC8qIGliLWRldmljZSBpbmZvcyBmb3Igc21jICovXG4gXHRpbnRcdFx0XHRuZGV2X2lmaWR4W1NNQ19NQVhfUE9SVFNdOyAvKiBuZGV2IGlmIGluZGV4ZXMgKi9cbiB9O1xuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbWNfaWJkZXZfaW5pdF9nZXQoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2KVxuK3tcbitcdGF0b21pY19pbmMoXHUwMDI2c21jaWJkZXYtXHUwMDNlaW5pdF9jbnQpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgc21jX2liZGV2X2luaXRfcHV0KHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNpYmRldilcbit7XG4rXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZzbWNpYmRldi1cdTAwM2Vpbml0X2NudCkpXG4rXHRcdHdha2VfdXAoXHUwMDI2c21jaWJkZXYtXHUwMDNlaW5pdF93YWl0KTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBfX2JlMzIgc21jX2liX2dpZF90b19pcHY0KHU4IGdpZFtTTUNfR0lEX1NJWkVdKVxuIHtcbiBcdHN0cnVjdCBpbjZfYWRkciAqYWRkcjYgPSAoc3RydWN0IGluNl9hZGRyICopZ2lkO1xuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2xsYy5jIGIvbmV0L3NtYy9zbWNfbGxjLmNcbmluZGV4IDk1NGIyZmYxODE1YzIuLjE1YWUxOWE5ZGIwN2UgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19sbGMuY1xuKysrIGIvbmV0L3NtYy9zbWNfbGxjLmNcbkBAIC0xMTE4LDcgKzExMTgsNyBAQCBpbnQgc21jX2xsY19jbGlfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSlcbiBvdXRfcmVqZWN0OlxuIFx0c21jX2xsY19jbGlfYWRkX2xpbmtfcmVqZWN0KHFlbnRyeSk7XG4gb3V0OlxuLVx0a2ZyZWUoaW5pKTtcbitcdHNtY19pbml0X2luZm9fZnJlZShpbmkpO1xuIFx0a2ZyZWUocWVudHJ5KTtcbiBcdHJldHVybiByYztcbiB9XG5AQCAtMTE5Miw3ICsxMTkyLDcgQEAgc3RhdGljIHZvaWQgc21jX2xsY19jbGlfYWRkX2xpbmtfaW52aXRlKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcdHNtY19sbGNfc2VuZF9hZGRfbGluayhsaW5rLCBpbmktXHUwMDNlaWJfZGV2LVx1MDAzZW1hY1tpbmktXHUwMDNlaWJfcG9ydCAtIDFdLFxuIFx0XHRcdCAgICAgIGluaS1cdTAwM2VpYl9naWQsIE5VTEwsIFNNQ19MTENfUkVRKTtcbiBvdXQ6XG4tXHRrZnJlZShpbmkpO1xuK1x0c21jX2luaXRfaW5mb19mcmVlKGluaSk7XG4gXHRrZnJlZShxZW50cnkpO1xuIH1cbiBcbkBAIC0xNTEyLDcgKzE1MTIsNyBAQCBpbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLFxuIFx0cmMgPSBzbWNfbGxjX3Nydl9jb25mX2xpbmsobGluaywgbGlua19uZXcsIGxncl9uZXdfdCk7XG4gXHRpZiAocmMpXG4gXHRcdGdvdG8gb3V0X2Vycjtcbi1cdGtmcmVlKGluaSk7XG4rXHRzbWNfaW5pdF9pbmZvX2ZyZWUoaW5pKTtcbiBcdHJldHVybiAwO1xuIG91dF9lcnI6XG4gXHRpZiAobGlua19uZXcpIHtcbkBAIC0xNTIwLDcgKzE1MjAsNyBAQCBpbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLFxuIFx0XHRzbWNyX2xpbmtfY2xlYXIobGlua19uZXcsIGZhbHNlKTtcbiBcdH1cbiBvdXQ6XG4tXHRrZnJlZShpbmkpO1xuK1x0c21jX2luaXRfaW5mb19mcmVlKGluaSk7XG4gXHRpZiAoc2VuZF9yZXFfYWRkX2xpbmtfcmVzcClcbiBcdFx0c21jX2xsY19zZW5kX3JlcV9hZGRfbGlua19yZXNwb25zZShyZXFfcWVudHJ5KTtcbiBcdHJldHVybiByYztcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19wbmV0LmMgYi9uZXQvc21jL3NtY19wbmV0LmNcbmluZGV4IDYzZTI4NmUyZGZhYTguLjdlMDFlMDFhNTIyYjcgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19wbmV0LmNcbisrKyBiL25ldC9zbWMvc21jX3BuZXQuY1xuQEAgLTk4MCwxNCArOTgwLDIyIEBAIHN0YXRpYyBpbnQgc21jX3BuZXRfZGV0ZXJtaW5lX2dpZChzdHJ1Y3Qgc21jX2liX2RldmljZSAqaWJkZXYsIGludCBpLFxuIFx0aWYgKCFpbmktXHUwMDNlY2hlY2tfc21jcnYyIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFzbWNfaWJfZGV0ZXJtaW5lX2dpZChpYmRldiwgaSwgaW5pLVx1MDAzZXZsYW5faWQsIGluaS1cdTAwM2VpYl9naWQsIE5VTEwsXG4gXHRcdFx0XHQgIE5VTEwpKSB7XG4rXHRcdGlmIChpbmktXHUwMDNlaWJfZGV2X3JlZilcbitcdFx0XHRzbWNfaWJkZXZfaW5pdF9wdXQoaW5pLVx1MDAzZWliX2Rldik7XG4rXHRcdHNtY19pYmRldl9pbml0X2dldChpYmRldik7XG4gXHRcdGluaS1cdTAwM2VpYl9kZXYgPSBpYmRldjtcbitcdFx0aW5pLVx1MDAzZWliX2Rldl9yZWYgPSB0cnVlO1xuIFx0XHRpbmktXHUwMDNlaWJfcG9ydCA9IGk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFx0aWYgKGluaS1cdTAwM2VjaGVja19zbWNydjIgXHUwMDI2XHUwMDI2XG4gXHQgICAgIXNtY19pYl9kZXRlcm1pbmVfZ2lkKGliZGV2LCBpLCBpbmktXHUwMDNldmxhbl9pZCwgaW5pLVx1MDAzZXNtY3J2Mi5pYl9naWRfdjIsXG4gXHRcdFx0XHQgIE5VTEwsIFx1MDAyNmluaS1cdTAwM2VzbWNydjIpKSB7XG4rXHRcdGlmIChpbmktXHUwMDNlc21jcnYyLmliX2Rldl92Ml9yZWYpXG4rXHRcdFx0c21jX2liZGV2X2luaXRfcHV0KGluaS1cdTAwM2VzbWNydjIuaWJfZGV2X3YyKTtcbitcdFx0c21jX2liZGV2X2luaXRfZ2V0KGliZGV2KTtcbiBcdFx0aW5pLVx1MDAzZXNtY3J2Mi5pYl9kZXZfdjIgPSBpYmRldjtcbitcdFx0aW5pLVx1MDAzZXNtY3J2Mi5pYl9kZXZfdjJfcmVmID0gdHJ1ZTtcbiBcdFx0aW5pLVx1MDAzZXNtY3J2Mi5pYl9wb3J0X3YyID0gaTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMzowMDowMC4yNDY4NTY2MzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzY3MzI5NDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBTTUMgU3Vic3lzdGVtIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgdG91Y2hpbmcgcXVpdGUgYSBmZXcgZmlsZXMgd2l0aGluIHRoZSBgbmV0L3NtY2AgZGlyZWN0b3J5OiBgYWZfc21jLmNgLCBgc21jX2NvcmUuY2AsIGBzbWNfY29yZS5oYCwgYHNtY19pYi5jYCwgYHNtY19pYi5oYCwgYHNtY19sbGMuY2AsIGFuZCBgc21jX3BuZXQuY2AuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCdzIGZvY3VzZWQgb24gdGhlIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgQUZfU01DIHNvY2tldHMuIFRoaXMgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIGxvdy1sZXZlbCBuZXR3b3JrIGNvbW11bmljYXRpb24gd2l0aCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBgc21jX2luaXRfaW5mb19mcmVlYCByZXBsYWNpbmcgYSBkaXJlY3QgYGtmcmVlKGluaSlgLiBUaGF0J3MgYWx3YXlzIGEgcmVkIGZsYWcgdGhhdCBtYWtlcyBtZSBwYXkgYXR0ZW50aW9uOyB0aGlzIHN1Z2dlc3RzIGEgcmVzb3VyY2UgbWFuYWdlbWVudCBpc3N1ZSwgbGlrZWx5IGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8sIG9yIHNvbWV0aGluZyBzaW1pbGFyLiAgVGhlIGFkZGl0aW9uIG9mIGBpYl9kZXZfcmVmYCBhbmQgYGliX2Rldl92Ml9yZWZgIHRvIHRoZSBgc21jX2luaXRfaW5mb2Agc3RydWN0dXJlcywgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGF0b21pY190IGluaXRfY250YCBhbmQgYHdhaXRfcXVldWVfaGVhZF90IGluaXRfd2FpdGAgdG8gdGhlIGBzbWNfaWJfZGV2aWNlYCBhcmUgY2xlYXJseSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGUgaW5jcmVtZW50aW5nIG9mIGBpbml0X2NudGAgd2hlbiBhIGRldmljZSBpcyBzZWxlY3RlZCBhbmQgdGhlIHdhaXQgaW4gYHNtY19pYl9yZW1vdmVfZGV2YCByZWFsbHkgc29saWRpZnkgdGhpczsgaXQncyBkZXNpZ25lZCB0byBwcmV2ZW50IHRoZSBkZXZpY2UgZnJvbSBiZWluZyByZW1vdmVkIHdoaWxlIHRoZXJlIGFyZSBzdGlsbCBhY3RpdmUgcmVmZXJlbmNlcyB0byBpdCBmcm9tIHRoZSBgc21jX2luaXRfaW5mb2Agc3RydWN0dXJlcy4gU28sIHRoZSBwYXRjaCBpcyB0cnlpbmcgdG8gZml4IHRoZSByYWNlIGNvbmRpdGlvbiB3aGVyZSBgc21jX2liX2RldmljZWAgY291bGQgYmUgcmVtb3ZlZCBwcmVtYXR1cmVseSwgbGVhdmluZyBkYW5nbGluZyBwb2ludGVycy4gIE1ha2VzIHNlbnNlLCB0aGF0J3MgZXhhY3RseSB0aGUga2luZCBvZiB2dWxuZXJhYmlsaXR5IEkgd291bGQgZXhwZWN0IHRvIHNlZSBpbiBhIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGxpa2UgdGhpcywgd2hlcmUgeW91IGhhdmUgbXVsdGlwbGUgdGhyZWFkcyBhbmQgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgaW50ZXJhY3Rpbmcgd2l0aCBzaGFyZWQgaGFyZHdhcmUgcmVzb3VyY2VzLlxuXG5UaGUgZmFjdCB0aGF0IHRoaXMgaXMgaW4gU01DLCBhbmQgaXQncyByZWFjaGFibGUgdmlhIEFGX1NNQywgaW5zdGFudGx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGZ1enppbmcuICBJIGtub3cgc3l6a2FsbGVyIHRhcmdldHMgQUZfU01DLCBzbyB0aGF0J3MgZ29vZC4gV2UgaGF2ZSBhIHRlc3QgaGFybmVzcyBhbHJlYWR5IGZvciB0aGlzLlxuXG5JJ2xsIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBzcGVjaWZpYyBgQ09ORklHYCByZXF1aXJlbWVudHMuIEknZCBleHBlY3QgYENPTkZJR19TTUNgIHRvIGJlIHRoZSBwcmltYXJ5IG9uZSwgYnV0IEknbGwgc2VhcmNoIHRoZSBLY29uZmlnIGZpbGVzIGp1c3QgdG8gYmUgY2VydGFpbiB0aGVyZSBhcmVuJ3QgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMgdGhhdCB3b3VsZCBtYWtlIHRoaXMgZml4IGxlc3MgYnJvYWRseSBhcHBsaWNhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDc5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTM6MDA6MDguMDE0MTkwNTc5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTk0NjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9zbWMvS2NvbmZpZzoyOmNvbmZpZyBTTUNcXG5uZXQvc21jL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcXFwiXFxuLS1cXG5uZXQvc21jL0tjb25maWctMTMtXFxubmV0L3NtYy9LY29uZmlnOjE0OmNvbmZpZyBTTUNfRElBR1xcbm5ldC9zbWMvS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvc21jL0tjb25maWctMjItXFxubmV0L3NtYy9LY29uZmlnOjIzOmNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcXG5uZXQvc21jL0tjb25maWctMjQtXFx0Ym9vbCBcXFwiR2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTM6MDA6MDguMDYwMTkwNTY0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU4NzgwNjA0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNNQyBDb25maWd1cmF0aW9uIGFuZCBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gd2UncmUgZGVhbGluZyB3aXRoIGBDT05GSUdfU01DYCDigJMgdGhhdCdzIHRoZSBjb25maWd1cmF0aW9uIHdlJ3JlIHdvcmtpbmcgd2l0aCBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gem9vbSBpbiBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIGVpdGhlciBtb2RpZmllZCBvciBuZXdseSBhZGRlZCB3aXRoaW4gdGhpcyBjb250ZXh0LiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBzdGFuZCBvdXQ6IGBzbWNfaW5pdF9pbmZvX2ZyZWVgLCBgc21jX2liX3JlbW92ZV9kZXZgLCBgc21jX3BuZXRfZGV0ZXJtaW5lX2dpZGAsIGBzbWNfZmluZF9yZG1hX3YyX2RldmljZV9zZXJ2YCwgYHNtY19saXN0ZW5fd29ya2AsIGBfX3NtY19jb25uZWN0YCwgYHNtY19maWxsX2dpZF9saXN0YCwgYHNtY19sbGNfY2xpX2FkZF9saW5rYCwgYHNtY19sbGNfY2xpX2FkZF9saW5rX2ludml0ZWAsIGFuZCBgc21jX2xsY19zcnZfYWRkX2xpbmtgLlxuXG5Mb29raW5nIGF0IHRoYXQgbGlzdCwgSSdtIHRoaW5raW5nIHRoZSByZWFsIGtleSBvbmVzIHRvIGRpc3NlY3QgZnVydGhlciBhcmU6IGBfX3NtY19jb25uZWN0YCwgYHNtY19saXN0ZW5fd29ya2AsIGBzbWNfcG5ldF9kZXRlcm1pbmVfZ2lkYCwgYW5kIGBzbWNfaWJfcmVtb3ZlX2RldmAuIFRob3NlIGZlZWwgbGlrZSB0aGUgY29yZSBvZiB0aGUgc2lnbmlmaWNhbnQgY2hhbmdlcyBoZXJlLlxuXG5TcGVjaWZpY2FsbHksIGBzbWNfaWJfcmVtb3ZlX2RldmAgc2VlbXMgaW1wb3J0YW50LiBJdCdzIHRyaWdnZXJlZCB3aGVuIGFuIEluZmluaUJhbmQgZGV2aWNlIGlzIHJlbW92ZWQsIHNvIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCBjbGVhbnVwIGlzIGhhbmRsZWQuIFRoZW4gdGhlcmUncyBgc21jX3BuZXRfZGV0ZXJtaW5lX2dpZGAsIHdoaWNoLCBmcm9tIHRoZSBuYW1lLCBzb3VuZHMgbGlrZSBpdCdzIGNydWNpYWwgZm9yIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgR0lEIHJlc29sdXRpb24uIFRoZSBmdW5jdGlvbiBgX19zbWNfY29ubmVjdGAsIHRoYXQncyBvdXIgQUZfU01DIGBjb25uZWN0KClgIGNhbGwsIHNvIHRoYXQncyBhIGNvcm5lcnN0b25lLiBGaW5hbGx5LCBgc21jX2xpc3Rlbl93b3JrYCBpcyBnb2luZyB0byBoYW5kbGUgaW5jb21pbmcgY29ubmVjdGlvbiByZXF1ZXN0cywgc28gdGhhdCdzIG9idmlvdXNseSBjcml0aWNhbC5cblxuSSdtIGdvaW5nIHRvIGRpZyBpbnRvIGBzbWNfcG5ldF9kZXRlcm1pbmVfZ2lkYCBhbmQgYHNtY19pYl9yZW1vdmVfZGV2YCBtb3JlIGNsb3NlbHkgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjE1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAwOjE0LjY0Nzk5OTI0M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA0NTA1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfcG5ldF9kZXRlcm1pbmVfZ2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX3BuZXQuYz05NTE9c3RhdGljIGludCBzbWNfcG5ldF9maW5kX25kZXZfcG5ldGlkX2J5X3RhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxubmV0L3NtYy9zbWNfcG5ldC5jLTk3Ni1cXG5uZXQvc21jL3NtY19wbmV0LmM6OTc3OnN0YXRpYyBpbnQgc21jX3BuZXRfZGV0ZXJtaW5lX2dpZChzdHJ1Y3Qgc21jX2liX2RldmljZSAqaWJkZXYsIGludCBpLFxcbm5ldC9zbWMvc21jX3BuZXQuYy05NzgtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxcbi0tXFxubmV0L3NtYy9zbWNfcG5ldC5jPTEwMDY9c3RhdGljIHZvaWQgX3NtY19wbmV0X2ZpbmRfcm9jZV9ieV9wbmV0aWQodTggKnBuZXRfaWQsXFxuLS1cXG5uZXQvc21jL3NtY19wbmV0LmMtMTAyNC1cXHRcXHRcXHQgICAgIXRlc3RfYml0KGkgLSAxLCBpYmRldi1cXHUwMDNlcG9ydHNfZ29pbmdfYXdheSkpIHtcXG5uZXQvc21jL3NtY19wbmV0LmM6MTAyNTpcXHRcXHRcXHRcXHRpZiAoIXNtY19wbmV0X2RldGVybWluZV9naWQoaWJkZXYsIGksIGluaSkpXFxubmV0L3NtYy9zbWNfcG5ldC5jLTEwMjYtXFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLS1cXG5uZXQvc21jL3NtY19wbmV0LmM9MTA0Nz1zdGF0aWMgdm9pZCBzbWNfcG5ldF9maW5kX3JkbWFfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5uZXQvc21jL3NtY19wbmV0LmMtMTA3MS1cXHRcXHRcXHQgICAgIXRlc3RfYml0KGkgLSAxLCBpYmRldi1cXHUwMDNlcG9ydHNfZ29pbmdfYXdheSkpIHtcXG5uZXQvc21jL3NtY19wbmV0LmM6MTA3MjpcXHRcXHRcXHRcXHRpZiAoIXNtY19wbmV0X2RldGVybWluZV9naWQoaWJkZXYsIGksIGluaSkpXFxubmV0L3NtYy9zbWNfcG5ldC5jLTEwNzMtXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAwOjE0LjY5NTA0OTk3OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTA0NjY2ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYHNtY19pYl9yZW1vdmVfZGV2YCBGdW5jdGlvbiBDYWxsKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBtZW50YWwgY2hlY2tsaXN0IHN0YXJ0cyB3aXRoIGBzbWNfaWJfcmVtb3ZlX2RldmAuIEkgaW1tZWRpYXRlbHkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBUaGlzIGxpa2VseSBwb2ludHMgdG8gdGhlIHJlbW92YWwgb2YgYW4gSW5maW5pQmFuZCBkZXZpY2Ugd2l0aGluIHRoZSBTTUMgKFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMpIGZyYW1ld29yay4gU28sIEkgbmVlZCB0byBjb25zaWRlcjogV2hhdCBhcmUgdGhlIHByZWNvbmRpdGlvbnMgZm9yIGNhbGxpbmcgdGhpcz8gV2hhdCByZXNvdXJjZXMgYXJlIGJlaW5nIGZyZWVkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgSSBuZWVkIHRvIHRoaW5rIGFib3V0LCBlc3BlY2lhbGx5IGlmIHRoaXMgaXMgaW4gYSBtdWx0aS10aHJlYWRlZCBvciBpbnRlcnJ1cHQgY29udGV4dD8gV2hhdCBhYm91dCBlcnJvciBoYW5kbGluZzsgaXMgdGhlcmUgc3VmZmljaWVudCBlcnJvciBjaGVja2luZyBhbmQgcmVjb3Zlcnk/IEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBxdWVzdGlvbnMgYWJvdXQgbG9ja2luZy4gSXMgdGhlcmUgYSBtdXRleCBvciBzcGlubG9jayBwcm90ZWN0aW5nIHRoZSByZWxldmFudCBkYXRhIHN0cnVjdHVyZXM/IEFuZCB3aGF0IGFib3V0IHRoZSBpbXBhY3Qgb24gY29ubmVjdGlvbnMgdXNpbmcgdGhhdCBzcGVjaWZpYyBkZXZpY2U/IERvZXMgdGhpcyBmdW5jdGlvbiBncmFjZWZ1bGx5IGhhbmRsZSB0aG9zZT8gSSdkIGV4cGVjdCBwcm9wZXIgY2xlYW51cCBvZiBhbnkgYXNzb2NpYXRlZCBRUHMgKFF1ZXVlIFBhaXJzKSwgUERzIChQcm90ZWN0aW9uIERvbWFpbnMpLCBhbmQgQ1FzIChDb21wbGV0aW9uIFF1ZXVlcykuIEZpbmFsbHksIGEgZ29vZCByZXZpZXcgbWVhbnMgdW5kZXJzdGFuZGluZyB0aGUgcG9zc2libGUgcmV0dXJuIGNvZGVzIGFuZCB0aGVpciBpbXBsaWNhdGlvbnMgZm9yIHRoZSBjYWxsZXIuIEJhc2ljYWxseSwgSSB3YW50IHRvIHNlZSBhIHJvYnVzdCwgd2VsbC1kZWZpbmVkIGZ1bmN0aW9uIHRoYXQgbGVhdmVzIHRoZSBzeXN0ZW0gaW4gYSBjb25zaXN0ZW50IHN0YXRlIGFmdGVyIHRoZSBkZXZpY2UgcmVtb3ZhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgxNSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAwOjE4LjY4NTUxOTQyNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA0NDM3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfaWJfcmVtb3ZlX2RldlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19pYi5jPTkzOD1zdGF0aWMgaW50IHNtY19pYl9hZGRfZGV2KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2KVxcbi0tXFxubmV0L3NtYy9zbWNfaWIuYy05OTUtLyogY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGliX3VucmVnaXN0ZXJfY2xpZW50KCkgKi9cXG5uZXQvc21jL3NtY19pYi5jOjk5NjpzdGF0aWMgdm9pZCBzbWNfaWJfcmVtb3ZlX2RldihzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdm9pZCAqY2xpZW50X2RhdGEpXFxubmV0L3NtYy9zbWNfaWIuYy05OTcte1xcbi0tXFxubmV0L3NtYy9zbWNfaWIuYz0xMDE1PXN0YXRpYyBzdHJ1Y3QgaWJfY2xpZW50IHNtY19pYl9jbGllbnQgPSB7XFxuLS1cXG5uZXQvc21jL3NtY19pYi5jLTEwMTctXFx0LmFkZFxcdD0gc21jX2liX2FkZF9kZXYsXFxubmV0L3NtYy9zbWNfaWIuYzoxMDE4OlxcdC5yZW1vdmUgPSBzbWNfaWJfcmVtb3ZlX2RldixcXG5uZXQvc21jL3NtY19pYi5jLTEwMTktfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTM6MDA6MTguNzMxNTcwODZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzIxMDUyOTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCBwcmVzZW50ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBJQiBEZXZpY2UgUmVtb3ZhbCBhbmQgaXRzIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYHNtY19pYl9yZW1vdmVfZGV2YCwgd2hpY2ggaXMgdGhlIGNhbGxiYWNrIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiBhbiBJbmZpbmlCYW5kIChJQikgZGV2aWNlIGlzIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgd2UgY2FuIHRyaWdnZXIgdGhpcyByZW1vdmFsIGV2ZW50IGZyb20gd2l0aGluIHN5emthbGxlci4gVGhlIGFuc3dlciBhcHBlYXJzIHRvIGJlIHllczsgd2UgaGF2ZSBhIGNvdXBsZSBvZiB2aWFibGUgYXZlbnVlczogdXRpbGl6aW5nIFJETUEgbmV0bGluayBpbnRlcmZhY2VzIG9yIHBvdGVudGlhbGx5IGJ5IHJlbW92aW5nIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgZGV2aWNlLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIFJvQ0UgKFJETUEgb3ZlciBDb252ZXJnZWQgRXRoZXJuZXQpIHNldHVwcy4gVGhpcyBnaXZlcyB1cyBhIHNvbGlkIGxlYWQgb24gcG90ZW50aWFsIGZ1enppbmcgc3RyYXRlZ2llcy4gTm93LCBsZXQncyBkaXZlIGRlZXBlciBhbmQgc2VlIGlmIHdlIGNhbiB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgcmFtaWZpY2F0aW9ucyBvZiB0aGlzIHJlbW92YWwgYnkgY2hlY2tpbmcgb3V0IHRoZSBgX19zbWNfY29ubmVjdGAgZnVuY3Rpb24gYW5kIGl0cyBjb25uZWN0aW9uIHdpdGggdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM3OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAwOjIzLjA1MjYyNjY2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3MTc4ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19zbWNfY29ubmVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL2FmX3NtYy5jPTE0OTk9c3RhdGljIGludCBzbWNfY29ubmVjdF9jaGVja19hY2xjKHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmksXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE1MTktLyogcGVyZm9ybSBzdGVwcyBiZWZvcmUgYWN0dWFsbHkgY29ubmVjdGluZyAqL1xcbm5ldC9zbWMvYWZfc21jLmM6MTUyMDpzdGF0aWMgaW50IF9fc21jX2Nvbm5lY3Qoc3RydWN0IHNtY19zb2NrICpzbWMpXFxubmV0L3NtYy9hZl9zbWMuYy0xNTIxLXtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MTYxMD1zdGF0aWMgdm9pZCBzbWNfY29ubmVjdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMTYzOS1cXG5uZXQvc21jL2FmX3NtYy5jOjE2NDA6XFx0cmMgPSBfX3NtY19jb25uZWN0KHNtYyk7XFxubmV0L3NtYy9hZl9zbWMuYy0xNjQxLVxcdGlmIChyYyBcXHUwMDNjIDApXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jPTE2NTY9aW50IHNtY19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xNzIyLVxcdH0gZWxzZSB7XFxubmV0L3NtYy9hZl9zbWMuYzoxNzIzOlxcdFxcdHJjID0gX19zbWNfY29ubmVjdChzbWMpO1xcbm5ldC9zbWMvYWZfc21jLmMtMTcyNC1cXHRcXHRpZiAocmMgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMzowMDoyMy4xMDIzNTA3MThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODgxNDI4OTE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTTUMgQ29ubmVjdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggbG9va3Mgc29saWQsIGZpeGluZyB0aGF0IG5hc3R5IGJ1ZyB3aGVyZSBkZXZpY2UgcmVtb3ZhbCBtZXNzZWQgd2l0aCBvbmdvaW5nIGNvbm5lY3Rpb25zLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBfX3NtY19jb25uZWN0YCBpcyBjYWxsZWQgZnJvbSBib3RoIGBzbWNfY29ubmVjdGAgYW5kIGBzbWNfY29ubmVjdF93b3JrYCwgd2hpY2ggaXMgYXMgZXhwZWN0ZWQuIERlZmluaXRlbHkgd29ydGggcnVubmluZyB0aGlzIHRocm91Z2ggdGhlIGZ1enppbmcgcmlnOyBJJ20gbWFya2luZyBpdCBhcyBcIlRydWVcIi4gSSdsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvbiBgX19zbWNfY29ubmVjdGAsIGBzbWNfbGlzdGVuX3dvcmtgLCBgc21jX3BuZXRfZGV0ZXJtaW5lX2dpZGAsIGFuZCBgc21jX2liX3JlbW92ZV9kZXZgIGluIHBhcnRpY3VsYXIg4oCTIHRob3NlIHNlZW0gbGlrZSBrZXkgYXJlYXMgdG8gdGFyZ2V0LlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMg4oCTIFNNQyByZWxpZXMgb24gUkRNQS9JQiBzdXBwb3J0LCBzbyBJIHdhbnQgdG8gYmUgY2VydGFpbiBub3RoaW5nIGhhcyBjaGFuZ2VkIHRoYXQgYWZmZWN0cyB0aGF0LiBUaW1lIHRvIHRha2UgYW5vdGhlciBsb29rIGF0IGBuZXQvc21jL0tjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDMxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAwOjMxLjkxNjY0MTk0N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI0NzQ1NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnPTI9Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG5uZXQvc21jL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBESUJTXFxubmV0L3NtYy9LY29uZmlnLTUtXFx0aGVscFxcbi0tXFxubmV0L3NtYy9LY29uZmlnPTE0PWNvbmZpZyBTTUNfRElBR1xcbm5ldC9zbWMvS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxubmV0L3NtYy9LY29uZmlnOjE2OlxcdGRlcGVuZHMgb24gU01DXFxubmV0L3NtYy9LY29uZmlnLTE3LVxcdGhlbHBcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZz0yMz1jb25maWcgU01DX0hTX0NUUkxfQlBGXFxubmV0L3NtYy9LY29uZmlnLTI0LVxcdGJvb2wgXFxcIkdlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcXFwiXFxubmV0L3NtYy9LY29uZmlnOjI1OlxcdGRlcGVuZHMgb24gU01DIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgQlBGX1NZU0NBTExcXG5uZXQvc21jL0tjb25maWctMjYtXFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAwOjMxLjk1OTEyMzk0MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjAzNTY1NTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIC0gVGhlIFNNQyBQdXp6bGUqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLi4uIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQgcG9pbnRzIHRvIGEgZGVwZW5kZW5jeSBjaGFpbjogaXQncyBsb29raW5nIGxpa2UgdGhpcyBmdW5jdGlvbmFsaXR5IGhpbmdlcyBvbiBgSU5FVGAsIGBJTkZJTklCQU5EYCwgYW5kLi4uIGhvbGQgb24sIHdoYXQgd2FzIHRoYXQgbGFzdCBvbmU/IGBESUJTYD8gVGhhdCBmZWVscyBhIGxpdHRsZSBvdXQgb2YgcGxhY2UuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhhdC4gVGltZSB0byBkaXZlIGludG8gdGhlIHNvdXJjZSB0cmVlLiBTcGVjaWZpY2FsbHksIGxldCBtZSB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBkZWZpbmVkIGluIHRoZSBrZXJuZWwncyBLY29uZmlnIGZpbGVzLiBUaGUgcGxhY2UgdG8gc3RhcnQgZm9yIHRoaXMgc2VlbXMgdG8gYmUgYG5ldC9zbWMvS2NvbmZpZ2AuIEknbGwgY3Jvc3MtcmVmZXJlbmNlIHdoYXQgaXMgc2FpZCB0aGVyZSBhYm91dCB0aGUgZGVwZW5kZW5jaWVzLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB3aGljaCBkZXBlbmRlbmNpZXMgYXJlIHJlcXVpcmVkIGFuZCB3aGljaCBhcmUgbm90LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjM1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTM6MDA6MzYuMTYyNjkyNjI3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFNNQ1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IElORklOSUJBTkQgXFx1MDAyNlxcdTAwMjYgRElCU1xcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBTTUMtUiBwcm92aWRlcyBhIFxcXCJzb2NrZXRzIG92ZXIgUkRNQVxcXCIgc29sdXRpb24gbWFraW5nIHVzZSBvZlxcbiAgIDc6XFx0XFx0ICBSRE1BIG92ZXIgQ29udmVyZ2VkIEV0aGVybmV0IChSb0NFKSB0ZWNobm9sb2d5IHRvIHVwZ3JhZGVcXG4gICA4OlxcdFxcdCAgQUZfSU5FVCBUQ1AgY29ubmVjdGlvbnMgdHJhbnNwYXJlbnRseS5cXG4gICA5OlxcdFxcdCAgVGhlIExpbnV4IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTTUMtUiBzb2x1dGlvbiBpcyBkZXNpZ25lZCBhc1xcbiAgMTA6XFx0XFx0ICBhIHNlcGFyYXRlIHNvY2tldCBmYW1pbHkgU01DLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBydW4gU01DIHNvY2tldCBhcHBsaWNhdGlvbnNcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIFNNQ19ESUFHXFxuICAxNTpcXHRcXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIFNNQ1xcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBTdXBwb3J0IGZvciBTTUMgc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdG9vbHMgc3VjaCBhc1xcbiAgMTk6XFx0XFx0ICBzbWNzcy5cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMzowMDozNi4xNjI3NTM1NThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcyNTU3MTE0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipOYXZpZ2F0aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIFF1aXJrcyoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgdGhpcyB0ZXJtIGBESUJTYCBwb3AgdXAsIGFuZCBmcmFua2x5LCBJJ20gZHJhd2luZyBhIGJsYW5rLiBJdCdzIHVuZmFtaWxpYXIuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGFuY2hvciBteXNlbGYgaW4gd2hhdCBJICpkbyoga25vdy4gTGV0IG1lIGNvbmZpcm0gbXkgZW5hYmxpbmcgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgSSdtIHByZXR0eSBzdXJlIGBTTUNgLCBgSU5GSU5JQkFORGAsIGFuZCBgSU5FVGAgYXJlIGludm9sdmVkLiBOb3csIGxldCdzIHRyYWNlIHRoaXMgYERJQlNgIGRvd24gdGhlIHJhYmJpdCBob2xlLlxuXG5JJ2xsIGRpdmUgaW50byB0aGUga2VybmVsIHRyZWUuIEkgbWlnaHQgaGF2ZSBtaXNyZWFkIGl0LCBvciwgaXQncyBhIHR5cG8sIG5vLi4uIGl0J3MgdGhlcmUuIEhtbSwgY291bGQgaXQgYmUgcmVsYXRlZCB0byBgSVBWNmA/IE9rYXksIEknbGwgY2hlY2sgYG5ldC9zbWMvS2NvbmZpZ2AgaW4gdGhlIG1haW5saW5lIGtlcm5lbC4gTWFpbmxpbmUgY29uZmlybXMgYGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgSVBWNmAuIFN0aWxsLCB0aGUgcXVlc3Rpb24gb2YgYERJQlNgIGxpbmdlcnMuXG5cbldhaXQsIGlzIHRoaXMgYSB0cmVlLXNwZWNpZmljIHRoaW5nIHRoZW4/IEl0ICppcyogaW4gdGhlIGZpbGUuIEFscmlnaHQsIGxldCdzIGN1dCB0aGUgR29yZGlhbiBLbm90IGFuZCBmaWd1cmUgb3V0IHdoYXQgYERJQlNgICppcyouIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBuZXcgZGVwZW5kZW5jeSBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNTEsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMzowMDo0MS44ODgzMjY5NTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTk2ODcwNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERJQlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZGlicy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvZGlicy9LY29uZmlnOjI6Y29uZmlnIERJQlNcXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvZGlicy9LY29uZmlnLTEzLVxcbmRyaXZlcnMvZGlicy9LY29uZmlnOjE0OmNvbmZpZyBESUJTX0xPXFxuZHJpdmVycy9kaWJzL0tjb25maWctMTUtXFx0Ym9vbCBcXFwiSW50cmEtT1Mgc2hvcnRjdXQgd2l0aCBkaWJzIGxvb3BiYWNrXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMzowMDo0My42ODgwMTg0ODlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI0MTkzMTYyNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNNQyBEZXBlbmRlbmN5IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGFuZCBpdCdzIGNsZWFyIHRoYXQgYERJQlNgIHN0YW5kcyBmb3IgRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nLiBHb3QgaXQuIE5vdywgZnJvbSB3aGF0IEknbSBzZWVpbmcsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGBTTUNgLCBgSU5GSU5JQkFORGAsIGFuZCBgRElCU2AuIEhvbGQgb24uLi4gaXQgbG9va3MgbGlrZSBgRElCU2AgaXMgYWN0dWFsbHkgKnJlcXVpcmVkKiBmb3IgYFNNQ2Agd2l0aGluIHRoaXMgcGFydGljdWxhciB0cmVlLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gTGV0J3MgY29uZmlybSBpZiBgU01DYCBuZWNlc3NpdGF0ZXMgYElORklOSUJBTkRgIHRvby4gWWVwLCBjb25maXJtZWQuXG5cblRoZXJlZm9yZSwgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IHNob3VsZCBkZWZpbml0ZWx5IGJlIGBbXCJTTUNcIiwgXCJJTkZJTklCQU5EXCIsIFwiRElCU1wiXWAuIFRoYXQgc2VlbXMgbG9naWNhbCBhbmQgaXMgdGhlIHNhZmVzdCBvcHRpb24uXG5cbk5vdywgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBmdW5jdGlvbnMuIExldCdzIHRha2UgYSBsb29rIGF0IGBfX3NtY19jb25uZWN0YCwgYHNtY19saXN0ZW5fd29ya2AsIGBzbWNfcG5ldF9kZXRlcm1pbmVfZ2lkYCwgYW5kIGBzbWNfaWJfcmVtb3ZlX2RldmAuIEFyZSB0aGVyZSBhbnkgb3RoZXJzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBBaCwgaGVyZSdzIG9uZTogYHNtY19pbml0X2luZm9fZnJlZWAuIEl0J3MgYSBub24tc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyB1c2VmdWwgdG8ga25vdy4gQW5kIHRoZW4gdGhlcmUncyBgc21jX2xsY19jbGlfYWRkX2xpbmtgIGFuZCBgc21jX2xsY19zcnZfYWRkX2xpbmtgLlxuXG5SaWdodCwgbGV0J3MgY3JlYXRlIGEgc29saWQgbGlzdCBvZiB0aGUgZm9jdXMgc3ltYm9scywgdG8ga2VlcCBtZSBvbiB0cmFjazpcbmBfX3NtY19jb25uZWN0YCwgYHNtY19saXN0ZW5fd29ya2AsIGBzbWNfcG5ldF9kZXRlcm1pbmVfZ2lkYCwgYHNtY19pYl9yZW1vdmVfZGV2YCwgYHNtY19sbGNfY2xpX2FkZF9saW5rYCwgYHNtY19sbGNfc3J2X2FkZF9saW5rYC5cblxuRmluYWxseSwgdG8gYmUgYWJzb2x1dGVseSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIHZlcmlmeSBpZiBgc21jX3BuZXRfZGV0ZXJtaW5lX2dpZGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIEp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3NTcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTM6MDA6NTYuMTA3MzM3Nzc1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzcwMjM0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfcG5ldF9kZXRlcm1pbmVfZ2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvc21jX3BuZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19wbmV0LmM9OTUxPXN0YXRpYyBpbnQgc21jX3BuZXRfZmluZF9uZGV2X3BuZXRpZF9ieV90YWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4tLVxcbm5ldC9zbWMvc21jX3BuZXQuYy05NzYtXFxubmV0L3NtYy9zbWNfcG5ldC5jOjk3NzpzdGF0aWMgaW50IHNtY19wbmV0X2RldGVybWluZV9naWQoc3RydWN0IHNtY19pYl9kZXZpY2UgKmliZGV2LCBpbnQgaSxcXG5uZXQvc21jL3NtY19wbmV0LmMtOTc4LVxcdFxcdFxcdFxcdCAgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcXG4tLVxcbm5ldC9zbWMvc21jX3BuZXQuYz0xMDA2PXN0YXRpYyB2b2lkIF9zbWNfcG5ldF9maW5kX3JvY2VfYnlfcG5ldGlkKHU4ICpwbmV0X2lkLFxcbi0tXFxubmV0L3NtYy9zbWNfcG5ldC5jLTEwMjQtXFx0XFx0XFx0ICAgICF0ZXN0X2JpdChpIC0gMSwgaWJkZXYtXFx1MDAzZXBvcnRzX2dvaW5nX2F3YXkpKSB7XFxubmV0L3NtYy9zbWNfcG5ldC5jOjEwMjU6XFx0XFx0XFx0XFx0aWYgKCFzbWNfcG5ldF9kZXRlcm1pbmVfZ2lkKGliZGV2LCBpLCBpbmkpKVxcbm5ldC9zbWMvc21jX3BuZXQuYy0xMDI2LVxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L3NtYy9zbWNfcG5ldC5jPTEwNDc9c3RhdGljIHZvaWQgc21jX3BuZXRfZmluZF9yZG1hX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxubmV0L3NtYy9zbWNfcG5ldC5jLTEwNzEtXFx0XFx0XFx0ICAgICF0ZXN0X2JpdChpIC0gMSwgaWJkZXYtXFx1MDAzZXBvcnRzX2dvaW5nX2F3YXkpKSB7XFxubmV0L3NtYy9zbWNfcG5ldC5jOjEwNzI6XFx0XFx0XFx0XFx0aWYgKCFzbWNfcG5ldF9kZXRlcm1pbmVfZ2lkKGliZGV2LCBpLCBpbmkpKVxcbm5ldC9zbWMvc21jX3BuZXQuYy0xMDczLVxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMzowMDo1Ni4xNTEwNDY4NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDA5NzQzNTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnVuY3Rpb24ncyBTdGF0aWMgTmF0dXJlKipcblxuT2theSwgc28gdGhlIHByb21wdCBlbXBoYXNpemVzIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGF0IGBzbWNfcG5ldF9kZXRlcm1pbmVfZ2lkYCBpcyAqc3RhdGljKi4gVGhhdCdzIHRoZSBmaXJzdCByZWQgZmxhZy4gVGhlIGNvbXBpbGVyIHR5cGljYWxseSBpbmxpbmVzIHRoZXNlLCB3aGljaCBtZWFucyB0aGV5IHdvbid0IGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgbWFraW5nIGRlYnVnZ2luZyBvciBleHRlcm5hbCBhY2Nlc3MgcHJvYmxlbWF0aWMuIFRpbWUgdG8gaW52ZXN0aWdhdGUuIExldCdzIHRyYWNlIGl0cyBjYWxsZXJzLiBBaGEsIGJvdGggYF9zbWNfcG5ldF9maW5kX3JvY2VfYnlfcG5ldGlkYCBhbmQgYHNtY19wbmV0X2ZpbmRfcmRtYV9kZXZgIGFyZSBhbHNvIHN0YXRpYy4gVGhpcyBjb25maXJtcyBteSBpbml0aWFsIGNvbmNlcm4uIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGlkZW50aWZ5IGFueSBub24tc3RhdGljIGFsdGVybmF0aXZlcyBvciBkZXRlcm1pbmUgdGhlIGp1c3RpZmljYXRpb24gZm9yIHdoeSB0aGVzZSBhcmUgc3RhdGljLCBnaXZlbiB0aGUgZ3VpZGVsaW5lcy4gVGhlIHNlYXJjaCBmb3IgYSBub24tc3RhdGljIG9wdGlvbiBiZWdpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTQ5LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAxOjA0LjE2MDc5Mzk4MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwODEzNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX3BuZXRfZmluZF9yZG1hX2RldlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL3NtY19wbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfcG5ldC5jPTEwMzU9dm9pZCBzbWNfcG5ldF9maW5kX2FsdF9yb2NlKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxcbi0tXFxubmV0L3NtYy9zbWNfcG5ldC5jLTEwNDYtICovXFxubmV0L3NtYy9zbWNfcG5ldC5jOjEwNDc6c3RhdGljIHZvaWQgc21jX3BuZXRfZmluZF9yZG1hX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbm5ldC9zbWMvc21jX3BuZXQuYy0xMDQ4LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXFxuLS1cXG5uZXQvc21jL3NtY19wbmV0LmM9MTA4Nj1zdGF0aWMgdm9pZCBzbWNfcG5ldF9maW5kX3JvY2VfYnlfcG5ldGlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxubmV0L3NtYy9zbWNfcG5ldC5jLTEwOTgtXFx0ICAgIHNtY19wbmV0X2ZpbmRfbmRldl9wbmV0aWRfYnlfdGFibGUobmRldiwgbmRldl9wbmV0aWQpKSB7XFxubmV0L3NtYy9zbWNfcG5ldC5jOjEwOTk6XFx0XFx0c21jX3BuZXRfZmluZF9yZG1hX2RldihiYXNlX25kZXYsIGluaSk7XFxubmV0L3NtYy9zbWNfcG5ldC5jLTExMDAtXFx0XFx0cmV0dXJuOyAvKiBwbmV0aWQgY291bGQgbm90IGJlIGRldGVybWluZWQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTM6MDE6MDQuMjA0ODg0MzE3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5ODU5ODgxMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgc21jX3BuZXRfZmluZF9yb2NlX2J5X3BuZXRpZGAgQ2FsbGVycyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgc21jX3BuZXRfZmluZF9yb2NlX2J5X3BuZXRpZGAuIFRpbWUgdG8gdHJhY2UgZG93biBpdHMgY2FsbGVycy4gSSdtIHRoaW5raW5nLCB0aGlzIGlzIHByb2JhYmx5IGEgZnVuY3Rpb24gdGhhdCBsb29rcyB1cCBSb0NFIGluZm9ybWF0aW9uIGJhc2VkIG9uIGEgUE5FVCBJRCwgc28gSSBuZWVkIHRvIHNlZSAqd2hvKiBpcyBtYWtpbmcgdGhlc2UgY2FsbHMuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzLCBwZXJoYXBzIHdpdGhpbiB0aGUgUkRNQSBzdGFjaywgb3Igc29tZXRoaW5nIGhpZ2hlci1sZXZlbCBsaWtlIGFuIGFwcGxpY2F0aW9uIHRyeWluZyB0byB1dGlsaXplIFJvQ0U/IFRoZSBjYWxsZXIgY29udGV4dCB3aWxsIHJlYWxseSBnaXZlIG1lIHRoZSBjbHVlcyBJIG5lZWQuIExldCdzIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBjaGVjayDigJMgbWF5YmUgYSBzdGF0aWMgYW5hbHlzaXMgb3IgZ3JlcCB0aHJvdWdoIHRoZSBjb2RlYmFzZSwgdG8gaWRlbnRpZnkgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIGFuZCBhbnkgcmVsZXZhbnQgcGFyYW1ldGVycyBwYXNzZWQuIElzIHRoZXJlIGFueSBleGlzdGluZyBkb2N1bWVudGF0aW9uIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiB0aGlzPyBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgaGVscCBtZSBkZXRlcm1pbmU6IGFyZSB3ZSBsb29raW5nIGF0IGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgYSBwb3RlbnRpYWwgZXJyb3Igc291cmNlLCBvciBhIGNyaXRpY2FsIGRhdGEgcGF0aD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIHBhcmFtb3VudCBiZWZvcmUgSSBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjYzMCwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAxOjA5LjE5MDg3NDc3MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM3NTY4MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX3BuZXRfZmluZF9yb2NlX2J5X3BuZXRpZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL3NtY19wbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfcG5ldC5jPTk3Nz1zdGF0aWMgaW50IHNtY19wbmV0X2RldGVybWluZV9naWQoc3RydWN0IHNtY19pYl9kZXZpY2UgKmliZGV2LCBpbnQgaSxcXG4tLVxcbm5ldC9zbWMvc21jX3BuZXQuYy0xMDA1LS8qIGZpbmQgYSByb2NlIGRldmljZSBmb3IgdGhlIGdpdmVuIHBuZXRpZCAqL1xcbm5ldC9zbWMvc21jX3BuZXQuYzoxMDA2OnN0YXRpYyB2b2lkIF9zbWNfcG5ldF9maW5kX3JvY2VfYnlfcG5ldGlkKHU4ICpwbmV0X2lkLFxcbm5ldC9zbWMvc21jX3BuZXQuYy0xMDA3LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSxcXG4tLVxcbm5ldC9zbWMvc21jX3BuZXQuYz0xMDM1PXZvaWQgc21jX3BuZXRfZmluZF9hbHRfcm9jZShzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcXG4tLVxcbm5ldC9zbWMvc21jX3BuZXQuYy0xMDQwLVxcbm5ldC9zbWMvc21jX3BuZXQuYzoxMDQxOlxcdF9zbWNfcG5ldF9maW5kX3JvY2VfYnlfcG5ldGlkKGxnci1cXHUwMDNlcG5ldF9pZCwgaW5pLCBrbm93bl9kZXYsIG5ldCk7XFxubmV0L3NtYy9zbWNfcG5ldC5jLTEwNDItfVxcbi0tXFxubmV0L3NtYy9zbWNfcG5ldC5jPTEwNDc9c3RhdGljIHZvaWQgc21jX3BuZXRfZmluZF9yZG1hX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxubmV0L3NtYy9zbWNfcG5ldC5jLTEwODUtICovXFxubmV0L3NtYy9zbWNfcG5ldC5jOjEwODY6c3RhdGljIHZvaWQgc21jX3BuZXRfZmluZF9yb2NlX2J5X3BuZXRpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG5uZXQvc21jL3NtY19wbmV0LmMtMTA4Ny1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcXG4tLVxcbm5ldC9zbWMvc21jX3BuZXQuYy0xMTAxLVxcdH1cXG5uZXQvc21jL3NtY19wbmV0LmM6MTEwMjpcXHRfc21jX3BuZXRfZmluZF9yb2NlX2J5X3BuZXRpZChuZGV2X3BuZXRpZCwgaW5pLCBOVUxMLCBuZXQpO1xcbm5ldC9zbWMvc21jX3BuZXQuYy0xMTAzLX1cXG4tLVxcbm5ldC9zbWMvc21jX3BuZXQuYz0xMTM1PXZvaWQgc21jX3BuZXRfZmluZF9yb2NlX3Jlc291cmNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcXG4tLVxcbm5ldC9zbWMvc21jX3BuZXQuYy0xMTQ2LVxcdGlmIChkZXYpIHtcXG5uZXQvc21jL3NtY19wbmV0LmM6MTE0NzpcXHRcXHRzbWNfcG5ldF9maW5kX3JvY2VfYnlfcG5ldGlkKGRldiwgaW5pKTtcXG5uZXQvc21jL3NtY19wbmV0LmMtMTE0OC1cXHRcXHRkZXZfcHV0KGRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAxOjA5LjIzNDYzODQ0N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDc5OTIzNTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgQVBJIEVudHJ5cG9pbnRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHByZWZlcnJlZCBBUEkgZW50cnlwb2ludHMgYmFzZWQgb24gdGhlIGd1aWRlbGluZSBvZiBwcmlvcml0aXppbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlcnMuXG5cbkZpcnN0LCBJIHNlZSB0aGF0IGBzbWNfcG5ldF9maW5kX3JvY2VfcmVzb3VyY2VgIGFuZCBgc21jX3BuZXRfZmluZF9hbHRfcm9jZWAgYXJlIGFscmVhZHkgbm9uLXN0YXRpYywgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIGxldCdzIHRyYWNlIHRocm91Z2ggdGhlIG90aGVyIGZ1bmN0aW9ucy5cblxuYF9fc21jX2Nvbm5lY3RgIGlzIHN0YXRpYywgc28gSSBpbW1lZGlhdGVseSBuZWVkIHRvIGludmVzdGlnYXRlIGl0cyBjYWxsZXJzLiAgSSBzZWUgYHNtY19jb25uZWN0YCBhbmQgYHNtY19jb25uZWN0X3dvcmtgIGNhbGxpbmcgaXQuIEJ1dCwgY3JpdGljYWxseSwgYHNtY19jb25uZWN0YCBpdHNlbGYgaXMgbm9uLXN0YXRpYy4gQmluZ28hIFRoaXMgaXMgbGlrZWx5IGEgZ29vZCBjYW5kaWRhdGUuXG5cbk5leHQsIGBzbWNfbGlzdGVuX3dvcmtgIGlzIHN0YXRpYywgYW5kIGl0J3MgYSB3b3JrcXVldWUgZnVuY3Rpb24uIEl0J3MgaW5pdGlhbGl6ZWQgaW4gYHNtY190Y3BfbGlzdGVuX3dvcmtgLCB3aGlsZSBgc21jX2xpc3RlbmAgaXMgbm9uLXN0YXRpYy4gU28sIGBzbWNfbGlzdGVuYCBsb29rcyBsaWtlIHRoZSBiZXR0ZXIgY2hvaWNlIGhlcmUuXG5cbk5vdywgbGV0J3MgbW92ZSBvbiB0byBgc21jX2liX3JlbW92ZV9kZXZgLiBJdCdzIHN0YXRpYywgYW5kIGl0J3MgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCdzIGFuIElCIGNsaWVudCBjYWxsYmFjayByZWdpc3RlcmVkIHZpYSBgaWJfcmVnaXN0ZXJfY2xpZW50YC4gU2luY2UgaXQncyBhIGZ1bmN0aW9uIHBvaW50ZXIsIGl0IHdvbid0IGJlIGlubGluZWQuIFRoYXQgbWVhbnMgaXQgd2lsbCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIG1ha2luZyBpdCBhIHZpYWJsZSBvcHRpb24gZGVzcGl0ZSBiZWluZyBzdGF0aWMuIFRoZSBmYWN0IHRoYXQgaXQncyAqbm90KiBpbmxpbmVkIGlzIGtleSBoZXJlLCBhY2NvcmRpbmcgdG8gdGhlIHByb21wdC4gSSBjb3VsZCBhbHNvIHVzZSBgc21jX2liX2FkZF9kZXZgIGJ1dCBJJ2xsIHN0aWNrIHdpdGggYHNtY19pYl9yZW1vdmVfZGV2YCBmb3Igbm93LlxuXG5GaW5hbGx5LCBgc21jX2xsY19jbGlfYWRkX2xpbmtgIGFuZCBgc21jX2xsY19zcnZfYWRkX2xpbmtgIGFyZSB0aGFua2Z1bGx5IG5vbi1zdGF0aWMsIHNvIHdlJ3JlIGdvb2QgdGhlcmUuXG5cblNvLCBzdW1taW5nIGl0IHVwLCBteSBmb2N1cyBzeW1ib2xzLCBiYXNlZCBvbiB0aGUgbm9uLXN0YXRpYy9ub24taW5saW5lZCBwcmVmZXJlbmNlLCBhcmUgbm93OlxuXG4qICAgYHNtY19jb25uZWN0YFxuKiAgIGBzbWNfbGlzdGVuYFxuKiAgIGBzbWNfcG5ldF9maW5kX3JvY2VfcmVzb3VyY2VgXG4qICAgYHNtY19wbmV0X2ZpbmRfYWx0X3JvY2VgXG4qICAgYHNtY19pYl9yZW1vdmVfZGV2YFxuKiAgIGBzbWNfbGxjX2NsaV9hZGRfbGlua2BcbiogICBgc21jX2xsY19zcnZfYWRkX2xpbmtgXG5cbkknbGwgd2FudCB0byB2ZXJpZnkgdGhlIGRldGFpbHMgYXJvdW5kIGBzbWNfY29ubmVjdGAgYW5kIGBzbWNfbGlzdGVuYCB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGVpciBiZWhhdmlvciBhbmQgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MjksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTM6MDE6MTguMzE0NTY1MTM4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDgxMzMwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfY29ubmVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL2FmX3NtYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvYWZfc21jLmM9NzM9c3RhdGljIHZvaWQgc21jX3RjcF9saXN0ZW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7XFxubmV0L3NtYy9hZl9zbWMuYzo3NDpzdGF0aWMgdm9pZCBzbWNfY29ubmVjdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTtcXG5uZXQvc21jL2FmX3NtYy5jLTc1LVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0zMjg9aW50IHNtY19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTM0Ni1cXHRpZiAoY2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2c21jLVxcdTAwM2Vjb25uZWN0X3dvcmspKVxcbm5ldC9zbWMvYWZfc21jLmM6MzQ3OlxcdFxcdHNvY2tfcHV0KFxcdTAwMjZzbWMtXFx1MDAzZXNrKTsgLyogc29ja19ob2xkIGluIHNtY19jb25uZWN0IGZvciBwYXNzaXZlIGNsb3NpbmcgKi9cXG5uZXQvc21jL2FmX3NtYy5jLTM0OC1cXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9Mzk1PXZvaWQgc21jX3NrX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIGludCBwcm90b2NvbClcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtNDA0LVxcdElOSVRfV09SSyhcXHUwMDI2c21jLVxcdTAwM2V0Y3BfbGlzdGVuX3dvcmssIHNtY190Y3BfbGlzdGVuX3dvcmspO1xcbm5ldC9zbWMvYWZfc21jLmM6NDA1OlxcdElOSVRfV09SSyhcXHUwMDI2c21jLVxcdTAwM2Vjb25uZWN0X3dvcmssIHNtY19jb25uZWN0X3dvcmspO1xcbm5ldC9zbWMvYWZfc21jLmMtNDA2LVxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZzbWMtXFx1MDAzZWNvbm4udHhfd29yaywgc21jX3R4X3dvcmspO1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz05MzE9c3RhdGljIGludCBzbWNfc3dpdGNoX3RvX2ZhbGxiYWNrKHN0cnVjdCBzbWNfc29jayAqc21jLCBpbnQgcmVhc29uX2NvZGUpXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTk2My0vKiBmYWxsIGJhY2sgZHVyaW5nIGNvbm5lY3QgKi9cXG5uZXQvc21jL2FmX3NtYy5jOjk2NDpzdGF0aWMgaW50IHNtY19jb25uZWN0X2ZhbGxiYWNrKHN0cnVjdCBzbWNfc29jayAqc21jLCBpbnQgcmVhc29uX2NvZGUpXFxubmV0L3NtYy9hZl9zbWMuYy05NjUte1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy05ODMtLyogZGVjbGluZSBhbmQgZmFsbCBiYWNrIGR1cmluZyBjb25uZWN0ICovXFxubmV0L3NtYy9hZl9zbWMuYzo5ODQ6c3RhdGljIGludCBzbWNfY29ubmVjdF9kZWNsaW5lX2ZhbGxiYWNrKHN0cnVjdCBzbWNfc29jayAqc21jLCBpbnQgcmVhc29uX2NvZGUsXFxubmV0L3NtYy9hZl9zbWMuYy05ODUtXFx0XFx0XFx0XFx0XFx0dTggdmVyc2lvbilcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMTAwNC1cXHR9XFxubmV0L3NtYy9hZl9zbWMuYzoxMDA1OlxcdHJldHVybiBzbWNfY29ubmVjdF9mYWxsYmFjayhzbWMsIHJlYXNvbl9jb2RlKTtcXG5uZXQvc21jL2FmX3NtYy5jLTEwMDYtfVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0xMDA4PXN0YXRpYyB2b2lkIHNtY19jb25uX2Fib3J0KHN0cnVjdCBzbWNfc29jayAqc21jLCBpbnQgbG9jYWxfZmlyc3QpXFxubmV0L3NtYy9hZl9zbWMuYy0xMDA5LXtcXG5uZXQvc21jL2FmX3NtYy5jOjEwMTA6XFx0c3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uID0gXFx1MDAyNnNtYy1cXHUwMDNlY29ubjtcXG5uZXQvc21jL2FmX3NtYy5jLTEwMTEtXFx0c3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IgPSBjb25uLVxcdTAwM2VsZ3I7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jPTEwNjY9c3RhdGljIGludCBzbWNfZmluZF9pc21fdjJfZGV2aWNlX2NsbnQoc3RydWN0IHNtY19zb2NrICpzbWMsXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTExMTItLyogQ2hlY2sgZm9yIFZMQU4gSUQgYW5kIHJlZ2lzdGVyIGl0IG9uIElTTSBkZXZpY2UganVzdCBmb3IgQ0xDIGhhbmRzaGFrZSAqL1xcbm5ldC9zbWMvYWZfc21jLmM6MTExMzpzdGF0aWMgaW50IHNtY19jb25uZWN0X2lzbV92bGFuX3NldHVwKHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXFxubmV0L3NtYy9hZl9zbWMuYy0xMTE0LXtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MTEyMD1zdGF0aWMgaW50IHNtY19maW5kX3Byb3Bvc2FsX2RldmljZXMoc3RydWN0IHNtY19zb2NrICpzbWMsXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTExMjctXFx0ICAgIHNtY19maW5kX2lzbV9kZXZpY2Uoc21jLCBpbmkpIHx8XFxubmV0L3NtYy9hZl9zbWMuYzoxMTI4OlxcdCAgICBzbWNfY29ubmVjdF9pc21fdmxhbl9zZXR1cChpbmkpKVxcbm5ldC9zbWMvYWZfc21jLmMtMTEyOS1cXHRcXHRpbmktXFx1MDAzZXNtY2RfdmVyc2lvbiBcXHUwMDI2PSB+U01DX1YxO1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xMTcyLSAqL1xcbm5ldC9zbWMvYWZfc21jLmM6MTE3MzpzdGF0aWMgaW50IHNtY19jb25uZWN0X2lzbV92bGFuX2NsZWFudXAoc3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcXG5uZXQvc21jL2FmX3NtYy5jLTExNzQte1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xMTg3LS8qIENMQyBoYW5kc2hha2UgZHVyaW5nIGNvbm5lY3QgKi9cXG5uZXQvc21jL2FmX3NtYy5jOjExODg6c3RhdGljIGludCBzbWNfY29ubmVjdF9jbGMoc3RydWN0IHNtY19zb2NrICpzbWMsXFxubmV0L3NtYy9hZl9zbWMuYy0xMTg5LVxcdFxcdFxcdCAgIHN0cnVjdCBzbWNfY2xjX21zZ19hY2NlcHRfY29uZmlybSAqYWNsYyxcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MTIwMz12b2lkIHNtY19maWxsX2dpZF9saXN0KHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xMjMwLVxcbm5ldC9zbWMvYWZfc21jLmM6MTIzMTpzdGF0aWMgaW50IHNtY19jb25uZWN0X3JkbWFfdjJfcHJlcGFyZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcXG5uZXQvc21jL2FmX3NtYy5jLTEyMzItXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzbWNfY2xjX21zZ19hY2NlcHRfY29uZmlybSAqYWNsYyxcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMTI2Ni0vKiBzZXR1cCBmb3IgUkRNQSBjb25uZWN0aW9uIG9mIGNsaWVudCAqL1xcbm5ldC9zbWMvYWZfc21jLmM6MTI2NzpzdGF0aWMgaW50IHNtY19jb25uZWN0X3JkbWEoc3RydWN0IHNtY19zb2NrICpzbWMsXFxubmV0L3NtYy9hZl9zbWMuYy0xMjY4LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc21jX2NsY19tc2dfYWNjZXB0X2NvbmZpcm0gKmFjbGMsXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTEyODMtXFxubmV0L3NtYy9hZl9zbWMuYzoxMjg0OlxcdHJlYXNvbl9jb2RlID0gc21jX2Nvbm5lY3RfcmRtYV92Ml9wcmVwYXJlKHNtYywgYWNsYywgaW5pKTtcXG5uZXQvc21jL2FmX3NtYy5jLTEyODUtXFx0aWYgKHJlYXNvbl9jb2RlKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0xMzk5PXNtY192Ml9kZXRlcm1pbmVfYWNjZXB0ZWRfY2hpZChzdHJ1Y3Qgc21jX2NsY19tc2dfYWNjZXB0X2NvbmZpcm0gKmFjbGMsXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE0MTUtLyogc2V0dXAgZm9yIElTTSBjb25uZWN0aW9uIG9mIGNsaWVudCAqL1xcbm5ldC9zbWMvYWZfc21jLmM6MTQxNjpzdGF0aWMgaW50IHNtY19jb25uZWN0X2lzbShzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcXG5uZXQvc21jL2FmX3NtYy5jLTE0MTctXFx0XFx0XFx0ICAgc3RydWN0IHNtY19jbGNfbXNnX2FjY2VwdF9jb25maXJtICphY2xjLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xNDk4LS8qIGNoZWNrIGlmIHJlY2VpdmVkIGFjY2VwdCB0eXBlIGFuZCB2ZXJzaW9uIG1hdGNoZXMgYSBwcm9wb3NlZCBvbmUgKi9cXG5uZXQvc21jL2FmX3NtYy5jOjE0OTk6c3RhdGljIGludCBzbWNfY29ubmVjdF9jaGVja19hY2xjKHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmksXFxubmV0L3NtYy9hZl9zbWMuYy0xNTAwLVxcdFxcdFxcdFxcdCAgc3RydWN0IHNtY19jbGNfbXNnX2FjY2VwdF9jb25maXJtICphY2xjKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xNTE5LS8qIHBlcmZvcm0gc3RlcHMgYmVmb3JlIGFjdHVhbGx5IGNvbm5lY3RpbmcgKi9cXG5uZXQvc21jL2FmX3NtYy5jOjE1MjA6c3RhdGljIGludCBfX3NtY19jb25uZWN0KHN0cnVjdCBzbWNfc29jayAqc21jKVxcbm5ldC9zbWMvYWZfc21jLmMtMTUyMS17XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE1MjgtXFx0aWYgKHNtYy1cXHUwMDNldXNlX2ZhbGxiYWNrKVxcbm5ldC9zbWMvYWZfc21jLmM6MTUyOTpcXHRcXHRyZXR1cm4gc21jX2Nvbm5lY3RfZmFsbGJhY2soc21jLCBzbWMtXFx1MDAzZWZhbGxiYWNrX3Jzbik7XFxubmV0L3NtYy9hZl9zbWMuYy0xNTMwLVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xNTMyLVxcdGlmICghdGNwX3NrKHNtYy1cXHUwMDNlY2xjc29jay1cXHUwMDNlc2spLVxcdTAwM2VzeW5fc21jKVxcbm5ldC9zbWMvYWZfc21jLmM6MTUzMzpcXHRcXHRyZXR1cm4gc21jX2Nvbm5lY3RfZmFsbGJhY2soc21jLCBTTUNfQ0xDX0RFQ0xfUEVFUk5PU01DKTtcXG5uZXQvc21jL2FmX3NtYy5jLTE1MzQtXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE1MzYtXFx0aWYgKHVzaW5nX2lwc2VjKHNtYykpXFxubmV0L3NtYy9hZl9zbWMuYzoxNTM3OlxcdFxcdHJldHVybiBzbWNfY29ubmVjdF9kZWNsaW5lX2ZhbGxiYWNrKHNtYywgU01DX0NMQ19ERUNMX0lQU0VDLFxcbm5ldC9zbWMvYWZfc21jLmMtMTUzOC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgdmVyc2lvbik7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE1NDEtXFx0aWYgKCFpbmkpXFxubmV0L3NtYy9hZl9zbWMuYzoxNTQyOlxcdFxcdHJldHVybiBzbWNfY29ubmVjdF9kZWNsaW5lX2ZhbGxiYWNrKHNtYywgU01DX0NMQ19ERUNMX01FTSxcXG5uZXQvc21jL2FmX3NtYy5jLTE1NDMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHZlcnNpb24pO1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xNTY4LVxcdC8qIHBlcmZvcm0gQ0xDIGhhbmRzaGFrZSAqL1xcbm5ldC9zbWMvYWZfc21jLmM6MTU2OTpcXHRyYyA9IHNtY19jb25uZWN0X2NsYyhzbWMsIGFjbGMsIGluaSk7XFxubmV0L3NtYy9hZl9zbWMuYy0xNTcwLVxcdGlmIChyYykge1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xNTc5LVxcdC8qIGNoZWNrIGlmIHNtYyBtb2RlcyBhbmQgdmVyc2lvbnMgb2YgQ0xDIHByb3Bvc2FsIGFuZCBhY2NlcHQgbWF0Y2ggKi9cXG5uZXQvc21jL2FmX3NtYy5jOjE1ODA6XFx0cmMgPSBzbWNfY29ubmVjdF9jaGVja19hY2xjKGluaSwgYWNsYyk7XFxubmV0L3NtYy9hZl9zbWMuYy0xNTgxLVxcdHZlcnNpb24gPSBhY2xjLVxcdTAwM2VoZHIudmVyc2lvbiA9PSBTTUNfVjEgPyBTTUNfVjEgOiBTTUNfVjI7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE1ODctXFx0XFx0aW5pLVxcdTAwM2VzbWNyX3ZlcnNpb24gPSB2ZXJzaW9uO1xcbm5ldC9zbWMvYWZfc21jLmM6MTU4ODpcXHRcXHRyYyA9IHNtY19jb25uZWN0X3JkbWEoc21jLCBhY2xjLCBpbmkpO1xcbm5ldC9zbWMvYWZfc21jLmMtMTU4OS1cXHR9IGVsc2UgaWYgKGFjbGMtXFx1MDAzZWhkci50eXBldjEgPT0gU01DX1RZUEVfRCkge1xcbm5ldC9zbWMvYWZfc21jLmMtMTU5MC1cXHRcXHRpbmktXFx1MDAzZXNtY2RfdmVyc2lvbiA9IHZlcnNpb247XFxubmV0L3NtYy9hZl9zbWMuYzoxNTkxOlxcdFxcdHJjID0gc21jX2Nvbm5lY3RfaXNtKHNtYywgYWNsYywgaW5pKTtcXG5uZXQvc21jL2FmX3NtYy5jLTE1OTItXFx0fVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xNTk2LVxcdFNNQ19TVEFUX0NMTlRfU1VDQ19JTkMoc29ja19uZXQoc21jLVxcdTAwM2VjbGNzb2NrLVxcdTAwM2VzayksIGFjbGMpO1xcbm5ldC9zbWMvYWZfc21jLmM6MTU5NzpcXHRzbWNfY29ubmVjdF9pc21fdmxhbl9jbGVhbnVwKGluaSk7XFxubmV0L3NtYy9hZl9zbWMuYy0xNTk4LVxcdGtmcmVlKGJ1Zik7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE2MDItdmxhbl9jbGVhbnVwOlxcbm5ldC9zbWMvYWZfc21jLmM6MTYwMzpcXHRzbWNfY29ubmVjdF9pc21fdmxhbl9jbGVhbnVwKGluaSk7XFxubmV0L3NtYy9hZl9zbWMuYy0xNjA0LVxcdGtmcmVlKGJ1Zik7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE2MDYtXFx0c21jX2luaXRfaW5mb19mcmVlKGluaSk7XFxubmV0L3NtYy9hZl9zbWMuYzoxNjA3OlxcdHJldHVybiBzbWNfY29ubmVjdF9kZWNsaW5lX2ZhbGxiYWNrKHNtYywgcmMsIHZlcnNpb24pO1xcbm5ldC9zbWMvYWZfc21jLmMtMTYwOC19XFxubmV0L3NtYy9hZl9zbWMuYy0xNjA5LVxcbm5ldC9zbWMvYWZfc21jLmM6MTYxMDpzdGF0aWMgdm9pZCBzbWNfY29ubmVjdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvc21jL2FmX3NtYy5jLTE2MTEte1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xNjM5LVxcbm5ldC9zbWMvYWZfc21jLmM6MTY0MDpcXHRyYyA9IF9fc21jX2Nvbm5lY3Qoc21jKTtcXG5uZXQvc21jL2FmX3NtYy5jLTE2NDEtXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMTY1NS1cXG5uZXQvc21jL2FmX3NtYy5jOjE2NTY6aW50IHNtY19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbm5ldC9zbWMvYWZfc21jLmMtMTY1Ny1cXHRcXHRpbnQgYWxlbiwgaW50IGZsYWdzKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xNzIyLVxcdH0gZWxzZSB7XFxubmV0L3NtYy9hZl9zbWMuYzoxNzIzOlxcdFxcdHJjID0gX19zbWNfY29ubmVjdChzbWMpO1xcbm5ldC9zbWMvYWZfc21jLmMtMTcyNC1cXHRcXHRpZiAocmMgXFx1MDAzYyAwKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0yMjgxPXN0YXRpYyBpbnQgc21jX2xpc3Rlbl9yZG1hX3JlZyhzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMsIGJvb2wgbG9jYWxfZmlyc3QpXFxubmV0L3NtYy9hZl9zbWMuYy0yMjgyLXtcXG5uZXQvc21jL2FmX3NtYy5jOjIyODM6XFx0c3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uID0gXFx1MDAyNm5ld19zbWMtXFx1MDAzZWNvbm47XFxubmV0L3NtYy9hZl9zbWMuYy0yMjg0LVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0zMTk5PWludCBzbWNfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMzIwMi1cXHR1bmlvbiBzbWNfaG9zdF9jdXJzb3IgY29ucywgdXJnO1xcbm5ldC9zbWMvYWZfc21jLmM6MzIwMzpcXHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm47XFxubmV0L3NtYy9hZl9zbWMuYy0zMjA0LVxcdHN0cnVjdCBzbWNfc29jayAqc21jO1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0zMzMzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHNtY19zb2NrX29wcyA9IHtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMzMzNy1cXHQuYmluZFxcdFxcdD0gc21jX2JpbmQsXFxubmV0L3NtYy9hZl9zbWMuYzozMzM4OlxcdC5jb25uZWN0XFx0PSBzbWNfY29ubmVjdCxcXG5uZXQvc21jL2FmX3NtYy5jLTMzMzktXFx0LnNvY2tldHBhaXJcXHQ9IHNvY2tfbm9fc29ja2V0cGFpcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTM6MDE6MTguMzU5MzgzNjIzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMjYxMDY3NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipDb25uZWN0aW5nIHRoZSBEb3RzIGluIFNvY2tldCBNYW5hZ2VtZW50KipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBgc21jX2Nvbm5lY3RgLiBUaGF0J3MgcHJldHR5IGNsZWFyIC0gaXQncyB0aGUgc29ja2V0J3MgYC5jb25uZWN0YCBvcGVyYXRpb24sIG5vIHF1ZXN0aW9uLiBEZWZpbml0ZWx5IGEgdXNlZnVsIG1uZW1vbmljLCBhIGdvb2QgZm9jdXMgc3ltYm9sIHRvIHdvcmsgd2l0aC4gSXQncyBjb25jaXNlIGFuZCBwb2ludHMgZGlyZWN0bHkgdG8gdGhlIGZ1bmN0aW9uJ3MgcHVycG9zZS5cblxuTm93LCBsZXQncyBtb3ZlIG9uIHRvIGBzbWNfbGlzdGVuYC4gSXQgc2VlbXMgcmVhc29uYWJsZSB0byBhc3N1bWUgdGhpcyBjb3JyZXNwb25kcyB0byB0aGUgc29ja2V0J3MgYC5saXN0ZW5gIG9wZXJhdGlvbi4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uIGFuZCB0aGUgZXN0YWJsaXNoZWQgcGF0dGVybiwgdGhpcyBmZWVscyBoaWdobHkgcHJvYmFibGUuIEJ1dCwganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgYXZvaWQgYXNzdW1wdGlvbnMsIGxldCdzIHZlcmlmeSB0aGF0IHF1aWNrbHkuIE5vIGhhcm0gaW4gY29uZmlybWluZyB0aGUgaHlwb3RoZXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzNTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMzowMToyMi40ODU0OTM1MzZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODA2Njc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19saXN0ZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9hZl9zbWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL2FmX3NtYy5jPTE4NzI9c3RhdGljIGludCBzbWNyX3NlcnZfY29uZl9maXJzdF9saW5rKHN0cnVjdCBzbWNfc29jayAqc21jKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xOTI0LS8qIGxpc3RlbiB3b3JrZXI6IGZpbmlzaCAqL1xcbm5ldC9zbWMvYWZfc21jLmM6MTkyNTpzdGF0aWMgdm9pZCBzbWNfbGlzdGVuX291dChzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMpXFxubmV0L3NtYy9hZl9zbWMuYy0xOTI2LXtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMTkzMi1cXG5uZXQvc21jL2FmX3NtYy5jOjE5MzM6XFx0cmVsZWFzZV9zb2NrKG5ld3NtY3NrKTsgLyogbG9jayBpbiBzbWNfbGlzdGVuX3dvcmsoKSAqL1xcbm5ldC9zbWMvYWZfc21jLmMtMTkzNC1cXHRpZiAobHNtYy1cXHUwMDNlc2suc2tfc3RhdGUgPT0gU01DX0xJU1RFTikge1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xOTQ3LS8qIGxpc3RlbiB3b3JrZXI6IGZpbmlzaCBpbiBzdGF0ZSBjb25uZWN0ZWQgKi9cXG5uZXQvc21jL2FmX3NtYy5jOjE5NDg6c3RhdGljIHZvaWQgc21jX2xpc3Rlbl9vdXRfY29ubmVjdGVkKHN0cnVjdCBzbWNfc29jayAqbmV3X3NtYylcXG5uZXQvc21jL2FmX3NtYy5jLTE5NDkte1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xOTU0LVxcbm5ldC9zbWMvYWZfc21jLmM6MTk1NTpcXHRzbWNfbGlzdGVuX291dChuZXdfc21jKTtcXG5uZXQvc21jL2FmX3NtYy5jLTE5NTYtfVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xOTU4LS8qIGxpc3RlbiB3b3JrZXI6IGZpbmlzaCBpbiBlcnJvciBzdGF0ZSAqL1xcbm5ldC9zbWMvYWZfc21jLmM6MTk1OTpzdGF0aWMgdm9pZCBzbWNfbGlzdGVuX291dF9lcnIoc3RydWN0IHNtY19zb2NrICpuZXdfc21jKVxcbm5ldC9zbWMvYWZfc21jLmMtMTk2MC17XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE5NjgtXFxubmV0L3NtYy9hZl9zbWMuYzoxOTY5OlxcdHNtY19saXN0ZW5fb3V0KG5ld19zbWMpO1xcbm5ldC9zbWMvYWZfc21jLmMtMTk3MC19XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE5NzItLyogbGlzdGVuIHdvcmtlcjogZGVjbGluZSBhbmQgZmFsbCBiYWNrIGlmIHBvc3NpYmxlICovXFxubmV0L3NtYy9hZl9zbWMuYzoxOTczOnN0YXRpYyB2b2lkIHNtY19saXN0ZW5fZGVjbGluZShzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMsIGludCByZWFzb25fY29kZSxcXG5uZXQvc21jL2FmX3NtYy5jLTE5NzQtXFx0XFx0XFx0ICAgICAgIGludCBsb2NhbF9maXJzdCwgdTggdmVyc2lvbilcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMTk4MC1cXHRcXHQvKiBlcnJvciwgbm8gZmFsbGJhY2sgcG9zc2libGUgKi9cXG5uZXQvc21jL2FmX3NtYy5jOjE5ODE6XFx0XFx0c21jX2xpc3Rlbl9vdXRfZXJyKG5ld19zbWMpO1xcbm5ldC9zbWMvYWZfc21jLmMtMTk4Mi1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE5ODUtXFx0XFx0aWYgKHNtY19jbGNfc2VuZF9kZWNsaW5lKG5ld19zbWMsIHJlYXNvbl9jb2RlLCB2ZXJzaW9uKSBcXHUwMDNjIDApIHtcXG5uZXQvc21jL2FmX3NtYy5jOjE5ODY6XFx0XFx0XFx0c21jX2xpc3Rlbl9vdXRfZXJyKG5ld19zbWMpO1xcbm5ldC9zbWMvYWZfc21jLmMtMTk4Ny1cXHRcXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE5ODktXFx0fVxcbm5ldC9zbWMvYWZfc21jLmM6MTk5MDpcXHRzbWNfbGlzdGVuX291dF9jb25uZWN0ZWQobmV3X3NtYyk7XFxubmV0L3NtYy9hZl9zbWMuYy0xOTkxLX1cXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMTk5My0vKiBsaXN0ZW4gd29ya2VyOiB2ZXJzaW9uIGNoZWNraW5nICovXFxubmV0L3NtYy9hZl9zbWMuYzoxOTk0OnN0YXRpYyBpbnQgc21jX2xpc3Rlbl92Ml9jaGVjayhzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMsXFxubmV0L3NtYy9hZl9zbWMuYy0xOTk1LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc21jX2NsY19tc2dfcHJvcG9zYWwgKnBjbGMsXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTIwNTUtLyogbGlzdGVuIHdvcmtlcjogY2hlY2sgcHJlZml4ZXMgKi9cXG5uZXQvc21jL2FmX3NtYy5jOjIwNTY6c3RhdGljIGludCBzbWNfbGlzdGVuX3ByZnhfY2hlY2soc3RydWN0IHNtY19zb2NrICpuZXdfc21jLFxcbm5ldC9zbWMvYWZfc21jLmMtMjA1Ny1cXHRcXHRcXHRcXHQgc3RydWN0IHNtY19jbGNfbXNnX3Byb3Bvc2FsICpwY2xjKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0yMDczLS8qIGxpc3RlbiB3b3JrZXI6IGluaXRpYWxpemUgY29ubmVjdGlvbiBhbmQgYnVmZmVycyAqL1xcbm5ldC9zbWMvYWZfc21jLmM6MjA3NDpzdGF0aWMgaW50IHNtY19saXN0ZW5fcmRtYV9pbml0KHN0cnVjdCBzbWNfc29jayAqbmV3X3NtYyxcXG5uZXQvc21jL2FmX3NtYy5jLTIwNzUtXFx0XFx0XFx0XFx0c3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjA5My0vKiBsaXN0ZW4gd29ya2VyOiBpbml0aWFsaXplIGNvbm5lY3Rpb24gYW5kIGJ1ZmZlcnMgZm9yIFNNQy1EICovXFxubmV0L3NtYy9hZl9zbWMuYzoyMDk0OnN0YXRpYyBpbnQgc21jX2xpc3Rlbl9pc21faW5pdChzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMsXFxubmV0L3NtYy9hZl9zbWMuYy0yMDk1LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0yMTYwPXN0YXRpYyB2b2lkIHNtY19maW5kX2lzbV92Ml9kZXZpY2Vfc2VydihzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMsXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTIyMzEtXFx0XFx0aW5pLVxcdTAwM2Vpc21fc2VsZWN0ZWQgPSBpO1xcbm5ldC9zbWMvYWZfc21jLmM6MjIzMjpcXHRcXHRyYyA9IHNtY19saXN0ZW5faXNtX2luaXQobmV3X3NtYywgaW5pKTtcXG5uZXQvc21jL2FmX3NtYy5jLTIyMzMtXFx0XFx0aWYgKHJjKSB7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jPTIyNTA9c3RhdGljIHZvaWQgc21jX2ZpbmRfaXNtX3YxX2RldmljZV9zZXJ2KHN0cnVjdCBzbWNfc29jayAqbmV3X3NtYyxcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjI2OC1cXHRpbmktXFx1MDAzZWlzbV9zZWxlY3RlZCA9IDA7XFxubmV0L3NtYy9hZl9zbWMuYzoyMjY5OlxcdHJjID0gc21jX2xpc3Rlbl9pc21faW5pdChuZXdfc21jLCBpbmkpO1xcbm5ldC9zbWMvYWZfc21jLmMtMjI3MC1cXHRpZiAoIXJjKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0yMjgwLS8qIGxpc3RlbiB3b3JrZXI6IHJlZ2lzdGVyIGJ1ZmZlcnMgKi9cXG5uZXQvc21jL2FmX3NtYy5jOjIyODE6c3RhdGljIGludCBzbWNfbGlzdGVuX3JkbWFfcmVnKHN0cnVjdCBzbWNfc29jayAqbmV3X3NtYywgYm9vbCBsb2NhbF9maXJzdClcXG5uZXQvc21jL2FmX3NtYy5jLTIyODIte1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0yMjk5PXN0YXRpYyB2b2lkIHNtY19maW5kX3JkbWFfdjJfZGV2aWNlX3NlcnYoc3RydWN0IHNtY19zb2NrICpuZXdfc21jLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0yMzMyLVxcdGluaS1cXHUwMDNlc21jcl92ZXJzaW9uID0gU01DX1YyO1xcbm5ldC9zbWMvYWZfc21jLmM6MjMzMzpcXHRyYyA9IHNtY19saXN0ZW5fcmRtYV9pbml0KG5ld19zbWMsIGluaSk7XFxubmV0L3NtYy9hZl9zbWMuYy0yMzM0LVxcdGlmICghcmMpIHtcXG5uZXQvc21jL2FmX3NtYy5jOjIzMzU6XFx0XFx0cmMgPSBzbWNfbGlzdGVuX3JkbWFfcmVnKG5ld19zbWMsIGluaS1cXHUwMDNlZmlyc3RfY29udGFjdF9sb2NhbCk7XFxubmV0L3NtYy9hZl9zbWMuYy0yMzM2LVxcdFxcdGlmIChyYylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MjM1Mz1zdGF0aWMgaW50IHNtY19maW5kX3JkbWFfdjFfZGV2aWNlX3NlcnYoc3RydWN0IHNtY19zb2NrICpuZXdfc21jLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0yMzcwLVxcdH1cXG5uZXQvc21jL2FmX3NtYy5jOjIzNzE6XFx0cmMgPSBzbWNfbGlzdGVuX3JkbWFfaW5pdChuZXdfc21jLCBpbmkpO1xcbm5ldC9zbWMvYWZfc21jLmMtMjM3Mi1cXHRpZiAocmMpXFxubmV0L3NtYy9hZl9zbWMuYy0yMzczLVxcdFxcdHJldHVybiByYztcXG5uZXQvc21jL2FmX3NtYy5jOjIzNzQ6XFx0cmV0dXJuIHNtY19saXN0ZW5fcmRtYV9yZWcobmV3X3NtYywgaW5pLVxcdTAwM2VmaXJzdF9jb250YWN0X2xvY2FsKTtcXG5uZXQvc21jL2FmX3NtYy5jLTIzNzUtfVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0yMzc3LS8qIGRldGVybWluZSB0aGUgbG9jYWwgZGV2aWNlIG1hdGNoaW5nIHRvIHByb3Bvc2FsICovXFxubmV0L3NtYy9hZl9zbWMuYzoyMzc4OnN0YXRpYyBpbnQgc21jX2xpc3Rlbl9maW5kX2RldmljZShzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMsXFxubmV0L3NtYy9hZl9zbWMuYy0yMzc5LVxcdFxcdFxcdFxcdCAgc3RydWN0IHNtY19jbGNfbXNnX3Byb3Bvc2FsICpwY2xjLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0yMzg5LVxcdC8qIGNoZWNrIGZvciBtYXRjaGluZyBJUCBwcmVmaXggYW5kIHN1Ym5ldCBsZW5ndGggKFYxKSAqL1xcbm5ldC9zbWMvYWZfc21jLmM6MjM5MDpcXHRwcmZ4X3JjID0gc21jX2xpc3Rlbl9wcmZ4X2NoZWNrKG5ld19zbWMsIHBjbGMpO1xcbm5ldC9zbWMvYWZfc21jLmMtMjM5MS1cXHRpZiAocHJmeF9yYylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjQyNS0vKiBsaXN0ZW4gd29ya2VyOiBmaW5pc2ggUkRNQSBzZXR1cCAqL1xcbm5ldC9zbWMvYWZfc21jLmM6MjQyNjpzdGF0aWMgaW50IHNtY19saXN0ZW5fcmRtYV9maW5pc2goc3RydWN0IHNtY19zb2NrICpuZXdfc21jLFxcbm5ldC9zbWMvYWZfc21jLmMtMjQyNy1cXHRcXHRcXHRcXHQgIHN0cnVjdCBzbWNfY2xjX21zZ19hY2NlcHRfY29uZmlybSAqY2NsYyxcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjQ1MS0vKiBzZXR1cCBmb3IgY29ubmVjdGlvbiBvZiBzZXJ2ZXIgKi9cXG5uZXQvc21jL2FmX3NtYy5jOjI0NTI6c3RhdGljIHZvaWQgc21jX2xpc3Rlbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvc21jL2FmX3NtYy5jLTI0NTMte1xcbm5ldC9zbWMvYWZfc21jLmMtMjQ1NC1cXHRzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHNtY19zb2NrLFxcbm5ldC9zbWMvYWZfc21jLmM6MjQ1NTpcXHRcXHRcXHRcXHRcXHRcXHRzbWNfbGlzdGVuX3dvcmspO1xcbm5ldC9zbWMvYWZfc21jLmMtMjQ1Ni1cXHRzdHJ1Y3Qgc29ja2V0ICpuZXdjbGNzb2NrID0gbmV3X3NtYy1cXHUwMDNlY2xjc29jaztcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjQ2NC1cXG5uZXQvc21jL2FmX3NtYy5jOjI0NjU6XFx0bG9ja19zb2NrKFxcdTAwMjZuZXdfc21jLVxcdTAwM2Vzayk7IC8qIHJlbGVhc2UgaW4gc21jX2xpc3Rlbl9vdXQoKSAqL1xcbm5ldC9zbWMvYWZfc21jLmMtMjQ2Ni1cXHRpZiAobmV3X3NtYy1cXHUwMDNlbGlzdGVuX3NtYy1cXHUwMDNlc2suc2tfc3RhdGUgIT0gU01DX0xJU1RFTilcXG5uZXQvc21jL2FmX3NtYy5jOjI0Njc6XFx0XFx0cmV0dXJuIHNtY19saXN0ZW5fb3V0X2VycihuZXdfc21jKTtcXG5uZXQvc21jL2FmX3NtYy5jLTI0NjgtXFxubmV0L3NtYy9hZl9zbWMuYy0yNDY5LVxcdGlmIChuZXdfc21jLVxcdTAwM2V1c2VfZmFsbGJhY2spIHtcXG5uZXQvc21jL2FmX3NtYy5jOjI0NzA6XFx0XFx0c21jX2xpc3Rlbl9vdXRfY29ubmVjdGVkKG5ld19zbWMpO1xcbm5ldC9zbWMvYWZfc21jLmMtMjQ3MS1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTI0NzctXFx0XFx0aWYgKHJjKVxcbm5ldC9zbWMvYWZfc21jLmM6MjQ3ODpcXHRcXHRcXHRzbWNfbGlzdGVuX291dF9lcnIobmV3X3NtYyk7XFxubmV0L3NtYy9hZl9zbWMuYy0yNDc5LVxcdFxcdGVsc2VcXG5uZXQvc21jL2FmX3NtYy5jOjI0ODA6XFx0XFx0XFx0c21jX2xpc3Rlbl9vdXRfY29ubmVjdGVkKG5ld19zbWMpO1xcbm5ldC9zbWMvYWZfc21jLmMtMjQ4MS1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTI1MTMtXFx0LyogaW5pdGlhbCB2ZXJzaW9uIGNoZWNraW5nICovXFxubmV0L3NtYy9hZl9zbWMuYzoyNTE0OlxcdHJjID0gc21jX2xpc3Rlbl92Ml9jaGVjayhuZXdfc21jLCBwY2xjLCBpbmkpO1xcbm5ldC9zbWMvYWZfc21jLmMtMjUxNS1cXHRpZiAocmMpXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTI1MjYtXFx0LyogZGV0ZXJtaW5lIElTTSBvciBSb0NFIGRldmljZSB1c2VkIGZvciBjb25uZWN0aW9uICovXFxubmV0L3NtYy9hZl9zbWMuYzoyNTI3OlxcdHJjID0gc21jX2xpc3Rlbl9maW5kX2RldmljZShuZXdfc21jLCBwY2xjLCBpbmkpO1xcbm5ldC9zbWMvYWZfc21jLmMtMjUyOC1cXHRpZiAocmMpXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTI1NTktXFxubmV0L3NtYy9hZl9zbWMuYzoyNTYwOlxcdC8qIGZjZSBzbWMgcmVsZWFzZSB2ZXJzaW9uIGlzIG5lZWRlZCBpbiBzbWNfbGlzdGVuX3JkbWFfZmluaXNoLFxcbm5ldC9zbWMvYWZfc21jLmMtMjU2MS1cXHQgKiBzbyBzYXZlIGZjZSBpbmZvIGhlcmUuXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTI1NjYtXFx0aWYgKCFpbmktXFx1MDAzZWlzX3NtY2QpIHtcXG5uZXQvc21jL2FmX3NtYy5jOjI1Njc6XFx0XFx0cmMgPSBzbWNfbGlzdGVuX3JkbWFfZmluaXNoKG5ld19zbWMsIGNjbGMsXFxubmV0L3NtYy9hZl9zbWMuYy0yNTY4LVxcdFxcdFxcdFxcdFxcdCAgICBpbmktXFx1MDAzZWZpcnN0X2NvbnRhY3RfbG9jYWwsIGluaSk7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTI1ODItXFx0U01DX1NUQVRfU0VSVl9TVUNDX0lOQyhzb2NrX25ldChuZXdjbGNzb2NrLVxcdTAwM2VzayksIGluaSk7XFxubmV0L3NtYy9hZl9zbWMuYzoyNTgzOlxcdC8qIHNtY19saXN0ZW5fb3V0KCkgd2lsbCByZWxlYXNlIHNtY3NrICovXFxubmV0L3NtYy9hZl9zbWMuYzoyNTg0OlxcdHNtY19saXN0ZW5fb3V0X2Nvbm5lY3RlZChuZXdfc21jKTtcXG5uZXQvc21jL2FmX3NtYy5jLTI1ODUtXFx0Z290byBvdXRfZnJlZTtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjU4OS1vdXRfZGVjbDpcXG5uZXQvc21jL2FmX3NtYy5jOjI1OTA6XFx0c21jX2xpc3Rlbl9kZWNsaW5lKG5ld19zbWMsIHJjLCBpbmkgPyBpbmktXFx1MDAzZWZpcnN0X2NvbnRhY3RfbG9jYWwgOiAwLFxcbm5ldC9zbWMvYWZfc21jLmMtMjU5MS1cXHRcXHRcXHQgICBwcm9wb3NhbF92ZXJzaW9uKTtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MjU5Nz1zdGF0aWMgdm9pZCBzbWNfdGNwX2xpc3Rlbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjYxOC1cXHRcXHRuZXdfc21jLVxcdTAwM2VmYWxsYmFja19yc24gPSBsc21jLVxcdTAwM2VmYWxsYmFja19yc247XFxubmV0L3NtYy9hZl9zbWMuYzoyNjE5OlxcdFxcdHNvY2tfaG9sZChsc2spOyAvKiBzb2NrX3B1dCBpbiBzbWNfbGlzdGVuX3dvcmsgKi9cXG5uZXQvc21jL2FmX3NtYy5jOjI2MjA6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZuZXdfc21jLVxcdTAwM2VzbWNfbGlzdGVuX3dvcmssIHNtY19saXN0ZW5fd29yayk7XFxubmV0L3NtYy9hZl9zbWMuYy0yNjIxLVxcdFxcdHNtY19jb3B5X3NvY2tfc2V0dGluZ3NfdG9fc21jKG5ld19zbWMpO1xcbm5ldC9zbWMvYWZfc21jLmMtMjYyMi1cXHRcXHRzb2NrX2hvbGQoXFx1MDAyNm5ld19zbWMtXFx1MDAzZXNrKTsgLyogc29ja19wdXQgaW4gcGFzc2l2ZSBjbG9zaW5nICovXFxubmV0L3NtYy9hZl9zbWMuYzoyNjIzOlxcdFxcdGlmICghcXVldWVfd29yayhzbWNfaHNfd3EsIFxcdTAwMjZuZXdfc21jLVxcdTAwM2VzbWNfbGlzdGVuX3dvcmspKVxcbm5ldC9zbWMvYWZfc21jLmMtMjYyNC1cXHRcXHRcXHRzb2NrX3B1dChcXHUwMDI2bmV3X3NtYy1cXHUwMDNlc2spO1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0yNjMyPXN0YXRpYyB2b2lkIHNtY19jbGNzb2NrX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKmxpc3Rlbl9jbGNzb2NrKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0yNjQ5LVxcbm5ldC9zbWMvYWZfc21jLmM6MjY1MDppbnQgc21jX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgYmFja2xvZylcXG5uZXQvc21jL2FmX3NtYy5jLTI2NTEte1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0yNzE2PWludCBzbWNfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld19zb2NrLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0yNzQ1LVxcdFxcdHRpbWVvID0gc2NoZWR1bGVfdGltZW91dCh0aW1lbyk7XFxubmV0L3NtYy9hZl9zbWMuYzoyNzQ2OlxcdFxcdC8qIHdha2V1cCBieSBza19kYXRhX3JlYWR5IGluIHNtY19saXN0ZW5fd29yaygpICovXFxubmV0L3NtYy9hZl9zbWMuYy0yNzQ3LVxcdFxcdHNjaGVkX2Fubm90YXRlX3NsZWVwKCk7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jPTI4ODc9X19wb2xsX3Qgc21jX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTI5MTAtXFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBTTUNfTElTVEVOKSB7XFxubmV0L3NtYy9hZl9zbWMuYzoyOTExOlxcdFxcdFxcdC8qIHdva2VuIHVwIGJ5IHNrX2RhdGFfcmVhZHkgaW4gc21jX2xpc3Rlbl93b3JrKCkgKi9cXG5uZXQvc21jL2FmX3NtYy5jLTI5MTItXFx0XFx0XFx0bWFzayB8PSBzbWNfYWNjZXB0X3BvbGwoc2spO1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0zMzMzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHNtY19zb2NrX29wcyA9IHtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMzM0My1cXHQuaW9jdGxcXHRcXHQ9IHNtY19pb2N0bCxcXG5uZXQvc21jL2FmX3NtYy5jOjMzNDQ6XFx0Lmxpc3RlblxcdFxcdD0gc21jX2xpc3RlbixcXG5uZXQvc21jL2FmX3NtYy5jLTMzNDUtXFx0LnNodXRkb3duXFx0PSBzbWNfc2h1dGRvd24sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAxOjIyLjUzMDMwNDg2MloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzE0NjY5OTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgU01DIExpc3RlbmluZyBQcm9jZXNzIGFuZCBBUEkgRGVzaWduKipcblxuUmlnaHQsIHNvIGBzbWNfbGlzdGVuYCBpcyB0aGUgc29ja2V0J3MgYC5saXN0ZW5gIGNhbGwsIHRoYXQncyBzdHJhaWdodGZvcndhcmQuIEl0J3MgdGhlIGVudHJ5IHBvaW50IHRvIGdldCB0aGUgc29ja2V0IHJlYWR5IHRvIGFjY2VwdCBjb25uZWN0aW9ucy4gQnV0IHRoZSBhY3R1YWwgaGVhdnkgbGlmdGluZywgdGhlIGNvbm5lY3Rpb24gc2V0dXAgYW5kIGhhbmRsaW5nLCB0aGF0J3MgYWxsIGRvbmUgaW4gYHNtY19saXN0ZW5fd29ya2AuIEFuZCwgaWYgSSdtIHJlbWVtYmVyaW5nIHJpZ2h0LCBgc21jX2xpc3Rlbl93b3JrYCBpcyBzdGF0aWMuIE5vdywgdGhlIHByb21wdCBkb2VzIHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYyBBUEkgZW50cnlwb2ludHMuIFRoZSByZWFzb25pbmcgdGhlcmUgaXMgZm9yIHRoZSBjbGFyaXR5IG9mIHRoZSBhZGRyZXNzIG9mIGRpc3RpbmN0IHN5bWJvbHMgYW5kIHJlZHVjaW5nIHBvc3NpYmxlIGlubGluaW5nIGNvbXBsZXhpdHkuXG5cbkJ1dCB3YWl0IGEgbWludXRlLCBgc21jX2xpc3Rlbl93b3JrYCBpcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiwgYW5kIHRoYXQgbWVhbnMgaXQgKmNhbid0KiBiZSBpbmxpbmVkLiBJdCdzIHBhc3NlZCB0byBgSU5JVF9XT1JLYC4gU28sIHRoZSB3aG9sZSBzdGF0aWMvbm9uLXN0YXRpYyB0aGluZyBtaWdodCBub3QgbWF0dGVyIGluIHRoaXMgc3BlY2lmaWMgY2FzZSwgc2luY2UgaXQgKmhhcyogYSBzeW1ib2wgYWRkcmVzcy5cblxuT2theSwgc28gbG9va2luZyBhdCB0aGF0IHRob3VnaHQgcHJvY2Vzcywgd2UgbWF5IHByZWZlciB1c2luZyBgc21jX2xpc3RlbmAgYW5kIGBzbWNfY29ubmVjdGAgYXMgdGhlIEFQSSBmb3IgdGhpcyBraW5kIG9mIHdvcmsuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGhvdyBgc21jX2xsY19jbGlfYWRkX2xpbmtgIGFuZCBgc21jX2xsY19zcnZfYWRkX2xpbmtgIGhhbmRsZSB0aGlzIGluIHRoZSBzYW1lIGNvZGUgYmFzZS4gVGhhdCB3b3VsZCBnaXZlIG1lIHNvbWUgaW5zaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5NjgsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTM6MDE6MjguMjQ0OTc3OTcxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzk4ODU1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfbGxjX2NsaV9hZGRfbGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL3NtY19sbGMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19sbGMuYz04ODc9c3RhdGljIGludCBzbWNfbGxjX2NsaV9ya2V5X2V4Y2hhbmdlKHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTkzMC0vKiBwcmVwYXJlIGFuZCBzZW5kIGFuIGFkZCBsaW5rIHJlamVjdCByZXNwb25zZSAqL1xcbm5ldC9zbWMvc21jX2xsYy5jOjkzMTpzdGF0aWMgaW50IHNtY19sbGNfY2xpX2FkZF9saW5rX3JlamVjdChzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSlcXG5uZXQvc21jL3NtY19sbGMuYy05MzIte1xcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmM9MTAyMD1zdGF0aWMgdm9pZCBzbWNfbGxjX3NhdmVfYWRkX2xpbmtfaW5mbyhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0xMDMwLS8qIGFzIGFuIFNNQyBjbGllbnQsIHByb2Nlc3MgYW4gYWRkIGxpbmsgcmVxdWVzdCAqL1xcbm5ldC9zbWMvc21jX2xsYy5jOjEwMzE6aW50IHNtY19sbGNfY2xpX2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaywgc3RydWN0IHNtY19sbGNfcWVudHJ5ICpxZW50cnkpXFxubmV0L3NtYy9zbWNfbGxjLmMtMTAzMi17XFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0xMTE4LW91dF9yZWplY3Q6XFxubmV0L3NtYy9zbWNfbGxjLmM6MTExOTpcXHRzbWNfbGxjX2NsaV9hZGRfbGlua19yZWplY3QocWVudHJ5KTtcXG5uZXQvc21jL3NtY19sbGMuYy0xMTIwLW91dDpcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTExMjY9c3RhdGljIHZvaWQgc21jX2xsY19zZW5kX3JlcXVlc3RfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rKVxcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmMtMTE2NC0vKiBhcyBhbiBTTUMgY2xpZW50LCBpbnZpdGUgc2VydmVyIHRvIHN0YXJ0IHRoZSBhZGRfbGluayBwcm9jZXNzaW5nICovXFxubmV0L3NtYy9zbWNfbGxjLmM6MTE2NTpzdGF0aWMgdm9pZCBzbWNfbGxjX2NsaV9hZGRfbGlua19pbnZpdGUoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbm5ldC9zbWMvc21jX2xsYy5jLTExNjYtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHNtY19sbGNfcWVudHJ5ICpxZW50cnkpXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYz0xMjE3PXN0YXRpYyB2b2lkIHNtY19sbGNfcHJvY2Vzc19jbGlfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0xMjI0LVxcdGlmIChzbWNfbGxjX2lzX2xvY2FsX2FkZF9saW5rKFxcdTAwMjZxZW50cnktXFx1MDAzZW1zZykpXFxubmV0L3NtYy9zbWNfbGxjLmM6MTIyNTpcXHRcXHRzbWNfbGxjX2NsaV9hZGRfbGlua19pbnZpdGUocWVudHJ5LVxcdTAwM2VsaW5rLCBxZW50cnkpO1xcbm5ldC9zbWMvc21jX2xsYy5jLTEyMjYtXFx0ZWxzZVxcbm5ldC9zbWMvc21jX2xsYy5jOjEyMjc6XFx0XFx0c21jX2xsY19jbGlfYWRkX2xpbmsocWVudHJ5LVxcdTAwM2VsaW5rLCBxZW50cnkpO1xcbm5ldC9zbWMvc21jX2xsYy5jLTEyMjgtXFx0dXBfd3JpdGUoXFx1MDAyNmxnci1cXHUwMDNlbGxjX2NvbmZfbXV0ZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMzowMToyOC4yODg5NzA5MjZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ1NDk1MjE2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBGdW5jdGlvbiBTeW1ib2wgVmlzaWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uIHN5bWJvbHMgYW5kIGhvdyB0aGV5J3JlIHVzZWQuIEl0J3MgY2xlYXIgdGhhdCBib3RoIGBzbWNfbGxjX2NsaV9hZGRfbGlua2AgYW5kIGBzbWNfbGxjX3Nydl9hZGRfbGlua2AgYXJlIG5vbi1zdGF0aWMg4oCTIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIFRoaXMgbWVhbnMgdGhleSBhcmUgbGlrZWx5IGVudHJ5IHBvaW50cyBvciBleHBvc2VkIGludGVyZmFjZXMuXG5cblRoaXMgbmFycm93cyBkb3duIG15IGZvY3VzLiAgQmFzZWQgb24gdGhpcywgdGhlIHByaW1hcnkgY2FuZGlkYXRlcyBmb3Igc3ltYm9scyBvZiBpbnRlcmVzdCBhcmUgZ29pbmcgdG8gYmUgdGhvc2UgdGhhdCBhcmUgbm90IHN0YXRpYywgaW4gcGFydGljdWxhciwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6IGBzbWNfY29ubmVjdGAsIGBzbWNfbGlzdGVuYCwgYHNtY19wbmV0X2ZpbmRfcm9jZV9yZXNvdXJjZWAsIGBzbWNfcG5ldF9maW5kX2FsdF9yb2NlYCwgYHNtY19sbGNfY2xpX2FkZF9saW5rYCwgYW5kIGBzbWNfbGxjX3Nydl9hZGRfbGlua2AuIFRoZXNlIGFyZSB0aGUgb25lcyB3aGVyZSBnbG9iYWwgdmlzaWJpbGl0eSBpcyBleHBlY3RlZC5cblxuQnV0IGhvbGQgb27igKYgYHNtY19pYl9yZW1vdmVfZGV2YCBpcyAqc3RhdGljKiwgYW5kIGl0J3MgYSBrZXkgZnVuY3Rpb24gdGhhdCBoYXMgYmVlbiBtb2RpZmllZCwgd2hpY2ggaXMgYSBiaXQgb2YgYSBjdXJ2ZWJhbGwuIFRoYXQncyBpbW1lZGlhdGVseSBhIHJlZCBmbGFnLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhpcyBzdGF0aWMgZnVuY3Rpb24gaXMgaW1wb3J0YW50LiBDbGVhcmx5LCBpdCdzIG5vdCBhIGRpcmVjdCwgZXh0ZXJuYWxseSB2aXNpYmxlIGVudHJ5IHBvaW50LiBTbywgSSBoYXZlIHRvIHNlZSBpZiBzb21ldGhpbmcgY2FsbHMgaXQgb3IgaXMgcmVsYXRlZCB0byBpdC5cblxuQWhhISBgc21jX2liX3JlbW92ZV9kZXZgIGlzIHJlZ2lzdGVyZWQgaW4gYHNtY19pYl9jbGllbnRgLiBUaGF0J3MgYSB2aXRhbCBjbHVlLiBOb3cgSSBuZWVkIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoZSBjbGllbnQgbGV2ZWwuIEkgd2FzIGNvbnNpZGVyaW5nIGBzbWNfaWJfYWRkX2RldmAgYW5kIGBzbWNfaWJfcmVtb3ZlX2RldmAgZGlyZWN0bHksIGJ1dCB0aGV5IGFyZSBib3RoIHN0YXRpYy4gV2hhdCBhYm91dCBgc21jX2liX3JlZ2lzdGVyX2NsaWVudGA/IFRoYXQgb25lIGlzIGxpa2VseSBtb3JlIHJlbGV2YW50LiBJIHNob3VsZCBkZWx2ZSBpbnRvIHRoYXQgb25lIGFuZCBzZWUgaWYgdGhlcmUgaXMgc29tZXRoaW5nIGludGVyZXN0aW5nIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDI1NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMzowMTozNy43NDM5MjUyNjlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNDc1MjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19pYl9yZWdpc3Rlcl9jbGllbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9zbWNfaWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19pYi5jPTEwMTU9c3RhdGljIHN0cnVjdCBpYl9jbGllbnQgc21jX2liX2NsaWVudCA9IHtcXG4tLVxcbm5ldC9zbWMvc21jX2liLmMtMTAyMC1cXG5uZXQvc21jL3NtY19pYi5jOjEwMjE6aW50IF9faW5pdCBzbWNfaWJfcmVnaXN0ZXJfY2xpZW50KHZvaWQpXFxubmV0L3NtYy9zbWNfaWIuYy0xMDIyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTM6MDE6MzcuNzg2NDA4OTM0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxNDk5NzM3OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBBc3Nlc3NtZW50IG9mIHRoZSBTTUMgSW5pdGlhbGl6YXRpb24gUHJvY2VzcyoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgYHNtY19pYl9yZWdpc3Rlcl9jbGllbnRgIGlzIGVzc2VudGlhbGx5IHRoZSBpbml0aWFsaXphdGlvbiBzdGFnZSwgZnVuY3Rpb25pbmcgbGlrZSBhbiBgX19pbml0X19gIG1ldGhvZC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byByZW1lbWJlci5cblxuTXkgZm9jdXMgc2hvdWxkIGJlIG9uIGBzbWNfY29ubmVjdGAsIGBzbWNfbGlzdGVuYCwgYHNtY19sbGNfY2xpX2FkZF9saW5rYCwgYW5kIGBzbWNfbGxjX3Nydl9hZGRfbGlua2AuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGZvciBoYW5kbGluZyB0aGUgb3ZlcmFsbCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGxpbmsgYWRkaXRpb24gcHJvY2VkdXJlcy4gVGhleSdyZSBkZWZpbml0ZWx5IHRoZSBwbGFjZXMgd2hlcmUgYHNtY19pbml0X2luZm9gIGlzIGJlaW5nIGFsbG9jYXRlZCBhbmQgc3Vic2VxdWVudGx5IHV0aWxpemVkLCB3aGljaCBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZW50aXJlIHN5c3RlbSBvcGVyYXRlcy5cblxuTGV0J3MgZGlnIGEgYml0IGRlZXBlciBpbnRvIGBzbWNfbGxjX3Nydl9hZGRfbGlua2Agc3BlY2lmaWNhbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhcnQgYmV0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTA0OSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMzowMTo0NS45MzYzODUzMDFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNzIwMjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19sbGNfc3J2X2FkZF9saW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvc21jX2xsYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2xsYy5jPTEzOTc9c3RhdGljIHZvaWQgc21jX2xsY19zZW5kX3JlcV9hZGRfbGlua19yZXNwb25zZShzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSlcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTE0MDUtXFxubmV0L3NtYy9zbWNfbGxjLmM6MTQwNjppbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbm5ldC9zbWMvc21jX2xsYy5jLTE0MDctXFx0XFx0XFx0IHN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqcmVxX3FlbnRyeSlcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTE1Mjk9c3RhdGljIHZvaWQgc21jX2xsY19wcm9jZXNzX3Nydl9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncilcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTE1MzctXFx0ZG93bl93cml0ZShcXHUwMDI2bGdyLVxcdTAwM2VsbGNfY29uZl9tdXRleCk7XFxubmV0L3NtYy9zbWNfbGxjLmM6MTUzODpcXHRyYyA9IHNtY19sbGNfc3J2X2FkZF9saW5rKGxpbmssIHFlbnRyeSk7XFxubmV0L3NtYy9zbWNfbGxjLmMtMTUzOS1cXHRpZiAoIXJjIFxcdTAwMjZcXHUwMDI2IGxnci1cXHUwMDNldHlwZSA9PSBTTUNfTEdSX1NZTU1FVFJJQykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMzowMTo0NS45OTcxMTE1MzVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzg3NTk0OTcxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipOb24tU3RhdGljIEZ1bmN0aW9uIENvbmZpcm1hdGlvbiBcdTAwMjYgTmV4dCBTdGVwcyoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYHNtY19sbGNfc3J2X2FkZF9saW5rYCBpcyAqZGVmaW5pdGVseSogbm9uLXN0YXRpYy4gTm93LCBJIG5lZWQgdG8gc2VlIHdoYXQncyBnb2luZyBvbiBlbHNld2hlcmUgaW4gdGhlIGNvZGUuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgYHNtY19wbmV0X2ZpbmRfcm9jZV9yZXNvdXJjZWAgYW5kIGBzbWNfcG5ldF9maW5kX2FsdF9yb2NlYCBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGludGVyYWN0LCBhbmQgd2hldGhlciB0aGV5IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSB1c2Ugb2YgYSBub24tc3RhdGljIGZ1bmN0aW9uIGhlcmUuIEtub3dpbmcgdGhlIGNvbm5lY3Rpb25zIGJldHdlZW4gdGhlc2UgaXMga2V5IGZvciBkZWJ1Z2dpbmcgb3IgdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NzA3LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTM6MDE6NTMuODczMDYzODJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTAyODUxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfcG5ldF9maW5kX3JvY2VfcmVzb3VyY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9zbWNfcG5ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX3BuZXQuYz0xMTA1PXN0YXRpYyB2b2lkIHNtY19wbmV0X2ZpbmRfaXNtX2J5X3BuZXRpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4tLVxcbm5ldC9zbWMvc21jX3BuZXQuYy0xMTM0LSAqL1xcbm5ldC9zbWMvc21jX3BuZXQuYzoxMTM1OnZvaWQgc21jX3BuZXRfZmluZF9yb2NlX3Jlc291cmNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcXG5uZXQvc21jL3NtY19wbmV0LmMtMTEzNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAxOjUzLjk4MjEwMzY4OVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTA5ODE3NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBzbWNfcG5ldF9maW5kX3JvY2VfcmVzb3VyY2VgIGFuZCBJdHMgSW1wbGljYXRpb25zKipcblxuQWxyaWdodCwgc28gdGhlIGNsdWUgaXMgdGhhdCBgc21jX3BuZXRfZmluZF9yb2NlX3Jlc291cmNlYCBpc24ndCBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVkIG15IGludGVyZXN0LiBOb24tc3RhdGljIGltcGxpZXMgaXQncyBlaXRoZXIgcGFydCBvZiBzb21lIGJyb2FkZXIgQVBJIGV4cG9zZWQgZm9yIG90aGVyIGNvbXBvbmVudHMgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBwb3RlbnRpYWxseSBjYWxsYWJsZSBmcm9tIG91dHNpZGUgaXRzIGltbWVkaWF0ZSBzY29wZS4gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyB0byBub3RlLlxuXG5Ob3csIHdoZXJlIGRvZXMgdGhhdCBsZWFkPyBXZWxsLCBiYXNlZCBvbiB0aGUgY29udGV4dCBJIHdvdWxkIHRoZW4gd2FudCB0byBwaXZvdCBhbmQgZXhwbG9yZSB0aGUgc3Vycm91bmRpbmcgY29kZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgYHNtY19wbmV0X2ZpbmRfYWx0X3JvY2VgLiBBIGZ1bmN0aW9uIHdpdGggYSBuYW1lIGxpa2UgdGhhdCBzdWdnZXN0cyBhIGNvbXBsZW1lbnRhcnkgb3IgcmVsYXRlZCBmdW5jdGlvbi4gUGVyaGFwcyBpdCdzIGNhbGxlZCBpbnRlcm5hbGx5IGJ5IHRoZSBmaXJzdCBvbmUsIG9yIG1heWJlIGl0IHBlcmZvcm1zIGFuIGFsdGVybmF0aXZlIHNlYXJjaCBzdHJhdGVneSB3aGVuIHRoZSBpbml0aWFsIGZ1bmN0aW9uIGZhaWxzLiBLbm93aW5nIGl0cyByZWxhdGlvbnNoaXAgd291bGQgYmUgdXNlZnVsLiBJJ2Qgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgb2YgdGhpcyBmdW5jdGlvbiBhcyB3ZWxsLCB3aGljaCB3aWxsIHRlbGwgbWUgaXRzIHB1cnBvc2UuIElzIHRoZSBmaXJzdCBmdW5jdGlvbiBqdXN0IGEgd3JhcHBlciBmb3IgaXQsIG9yIGlzIHRoZSByZWxhdGlvbnNoaXAgbW9yZSBjb21wbGV4PyBLbm93aW5nIHRoZSBpbnRlcmZhY2Ugd291bGQgYmUgdmVyeSBoZWxwZnVsLiBXaGF0J3MgdGhlIGVycm9yIGhhbmRsaW5nIGxpa2UgZm9yIHRoZSB0d28gZnVuY3Rpb25zPyBJcyB0aGVyZSBhIHNoYXJlZCBkYXRhIHN0cnVjdHVyZSwgYSBjb21tb24gc2V0IG9mIHJlc291cmNlcz8gVW5kZXJzdGFuZGluZyB0aGUgY29udHJvbCBmbG93IGJldHdlZW4gdGhlc2UgdHdvIGlzIGNyaXRpY2FsIGZvciBhbnkgZGVidWdnaW5nIG9yIG9wdGltaXphdGlvbiB0aGF0IG1heSBjb21lIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjEwMCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAxOjU5Ljg5MTkyMzc2OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMTc1MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19wbmV0X2ZpbmRfYWx0X3JvY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9zbWNfcG5ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX3BuZXQuYz0xMDA2PXN0YXRpYyB2b2lkIF9zbWNfcG5ldF9maW5kX3JvY2VfYnlfcG5ldGlkKHU4ICpwbmV0X2lkLFxcbi0tXFxubmV0L3NtYy9zbWNfcG5ldC5jLTEwMzQtLyogZmluZCBhbHRlcm5hdGUgcm9jZSBkZXZpY2Ugd2l0aCBzYW1lIHBuZXRfaWQsIHZsYW5faWQgYW5kIG5ldCBuYW1lc3BhY2UgKi9cXG5uZXQvc21jL3NtY19wbmV0LmM6MTAzNTp2b2lkIHNtY19wbmV0X2ZpbmRfYWx0X3JvY2Uoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXFxubmV0L3NtYy9zbWNfcG5ldC5jLTEwMzYtXFx0XFx0XFx0ICAgIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAxOjU5Ljk5MjEwNDk5OFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDA0ODUyMDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgVGhpbmtpbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBzbWNfcG5ldF9maW5kX2FsdF9yb2NlYCBpcywgYXMgSSBzdXNwZWN0ZWQsICpub3QqIGRlY2xhcmVkIHN0YXRpYy4gVGhhdCdzIGdvb2QgdG8gaGF2ZSBuYWlsZWQgZG93bi5cblxuTm93LCBteSBtaW5kIGlzIGNpcmNsaW5nIHRoZSByZWxldmFudCBzeW1ib2xzLiBJJ20gZm9jdXNpbmcgb246IGBzbWNfY29ubmVjdGAsIGBzbWNfbGlzdGVuYCwgYHNtY19wbmV0X2ZpbmRfcm9jZV9yZXNvdXJjZWAsIGBzbWNfcG5ldF9maW5kX2FsdF9yb2NlYCwgYHNtY19sbGNfY2xpX2FkZF9saW5rYCwgYW5kIGBzbWNfbGxjX3Nydl9hZGRfbGlua2AuIFRoZXNlIGFyZSB0aGUga2V5IHBpZWNlcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGFsbCBmaXRzIHRvZ2V0aGVyLlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIEkgbmVlZCB0byBxdWlja2x5IHJlLWV4YW1pbmUgdGhlIGNvbmZpZ3VyYXRpb24uIEkgd2FzIHRoaW5raW5nIG9mIGBTTUNgLCBgSU5GSU5JQkFORGAsIGFuZCBgRElCU2AuLi4gYnV0IEkgc2hvdWxkIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgYERJQlNgIGlzIHJlYWxseSBpbiB0aGUgbWFpbmxpbmUga2VybmVsIGFuZCB0aGF0IEkgaGF2ZW4ndCBtaXhlZCBpdCB1cCB3aXRoIHNvbWV0aGluZyBlbHNlLiBJdCdzIGVhc3kgdG8gbWlzaW50ZXJwcmV0IHRoaW5ncyB3aGVuIHlvdSdyZSBkZWVwIGluIHRoZSB3ZWVkcy4gVGltZSB0byBkb3VibGUtY2hlY2sgYG5ldC9zbWMvS2NvbmZpZ2AgYWdhaW4gdG8gYmUgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY2NjIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTM6MDI6MDUuMzk2OTU5Mjc5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjkzNDY4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL0tjb25maWc9Mj1jb25maWcgU01DXFxubmV0L3NtYy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XFxcIlxcbm5ldC9zbWMvS2NvbmZpZzo0OlxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EIFxcdTAwMjZcXHUwMDI2IERJQlNcXG5uZXQvc21jL0tjb25maWctNS1cXHRoZWxwXFxuLS1cXG5uZXQvc21jL0tjb25maWc9MTQ9Y29uZmlnIFNNQ19ESUFHXFxubmV0L3NtYy9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG5uZXQvc21jL0tjb25maWc6MTY6XFx0ZGVwZW5kcyBvbiBTTUNcXG5uZXQvc21jL0tjb25maWctMTctXFx0aGVscFxcbi0tXFxubmV0L3NtYy9LY29uZmlnPTIzPWNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcXG5uZXQvc21jL0tjb25maWctMjQtXFx0Ym9vbCBcXFwiR2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1xcXCJcXG5uZXQvc21jL0tjb25maWc6MjU6XFx0ZGVwZW5kcyBvbiBTTUMgXFx1MDAyNlxcdTAwMjYgQlBGX0pJVCBcXHUwMDI2XFx1MDAyNiBCUEZfU1lTQ0FMTFxcbm5ldC9zbWMvS2NvbmZpZy0yNi1cXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTM6MDI6MDUuNDczODk4ODUxWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5NzE0MzYzNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIFJlcXVpcmVtZW50cyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgdGhpcyBwYXRjaCdzIHN1Y2Nlc3MgaGluZ2VzIG9uIGEgZmV3IGtleSBjb21wb25lbnRzLiBJIHNlZSBpdCdzIGRlcGVuZGVudCBvbiBgSU5FVGAsIGBJTkZJTklCQU5EYCwgYW5kLCBjcnVjaWFsbHksIGBESUJTYC4gU28sIHRoZSBwcmVzZW5jZSBvZiBgRElCU2AgaXMgbm9uLW5lZ290aWFibGUuIE5vdywgYSBxdWljayBjaGVja+KApiBpcyBgRElCU2AgYSBjb25maWd1cmF0aW9uIG9wdGlvbj8gWWVwLCBjb25maXJtZWQuIEkgY2FuIHNlZSBpdCBkZWZpbmVkIGluIGBkcml2ZXJzL2RpYnMvS2NvbmZpZ2AgYXMgYGNvbmZpZyBESUJTYC4gR29vZC4gVGhhdCBjb25maXJtcyB0aGF0IGBFbmFibGVDb25maWdzYCBzaG91bGQgYWJzb2x1dGVseSBpbmNsdWRlIGBTTUNgLCBgSU5GSU5JQkFORGAsIGFuZCBgRElCU2AuXG5cbkxldCdzIHJlY2FwIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZXNlIHJlcXVpcmVtZW50cy4gVGhpcyBwYXRjaCBhaW1zIHRvIHBhdGNoIGEgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSAob3Igc2ltaWxhciBpc3N1ZSkgbHVya2luZyB3aXRoaW4gdGhlIFNNQyBzdWJzeXN0ZW0uIEl0J3MgdHJpZ2dlcmVkIHdoZW4gYW4gSUIgZGV2aWNlIGlzIHJlbW92ZWQgbWlkLWNvbm5lY3Rpb24gc2V0dXAuIFRoZSBmaXg/IFJlZmVyZW5jZSBjb3VudGluZyBmb3IgYHNtY19pYl9kZXZpY2VgIGR1cmluZyB0aGUgY3JpdGljYWwgYHNtY19pbml0X2luZm9gIHBoYXNlLiBUaGUgY29kZSB0b3VjaGVzIGtleSBjb25uZWN0aW9uIHNldHVwIGZ1bmN0aW9uczogYHNtY19jb25uZWN0YCwgYHNtY19saXN0ZW5gLCBhbmQgYWxzbyBsaW5rIGFkZGl0aW9uIHBhdGhzIGxpa2UgYHNtY19sbGNfY2xpX2FkZF9saW5rYCBhbmQgYHNtY19sbGNfc3J2X2FkZF9saW5rYC4gVGhlc2UgcGF0aHMgYXJlIGFsbCBhY2Nlc3NpYmxlIGFuZCBwb3RlbnRpYWxseSBmdXp6YWJsZSB0aHJvdWdoIEFGX1NNQyBzb2NrZXRzLlxuXG5UaGlzIGlzIHdvcnRoIGZ1enppbmcuIEkgaGF2ZSBhIGxpc3Qgb2YgdGFyZ2V0cyBmb3IgZnV6emluZzogYHNtY19jb25uZWN0YCwgYHNtY19saXN0ZW5gLCBgc21jX3BuZXRfZmluZF9yb2NlX3Jlc291cmNlYCwgYHNtY19wbmV0X2ZpbmRfYWx0X3JvY2VgLCBgc21jX2xsY19jbGlfYWRkX2xpbmtgLCBhbmQgYHNtY19sbGNfc3J2X2FkZF9saW5rYC4gVGhlc2UgYXJlIGFsbCBwcmltZSBjYW5kaWRhdGVzLlxuXG5Ob3csIEkgc2hvdWxkIGNoZWNrIGlmIGBESUJTYCBoYXMgYW55IGRlcGVuZGVuY2llcyBvZiBpdHMgb3duLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzM1MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMzowMjoxMy40NDUzMzk0NzVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2Mjg4OTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kaWJzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kaWJzL0tjb25maWc9MTQ9Y29uZmlnIERJQlNfTE9cXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xNS1cXHRib29sIFxcXCJJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcXFwiXFxuZHJpdmVycy9kaWJzL0tjb25maWc6MTY6XFx0ZGVwZW5kcyBvbiBESUJTXFxuZHJpdmVycy9kaWJzL0tjb25maWctMTctXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAyOjEzLjUxMTYzNzQyOVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDA4OTQ5MzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEZXBlbmRlbmN5IEFuYWx5c2lzIGZvciBhIFNwZWNpZmljIE1vZHVsZSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZm9jdXNpbmcgb24gdGhpcyBgRElCU2AgbW9kdWxlLCBhbmQgZnJvbSB3aGF0IEkgY2FuIHJlY2FsbCwgaXQncyBwcmV0dHkgc3RhbmRhbG9uZS4gSSBkb24ndCBzZWUgYW55IGltbWVkaWF0ZWx5IG9idmlvdXMgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIGJha2VkIGludG8gaXRzIGRlc2lnbi4gVGhhdCdzIGdvb2QsIHNpbXBsaWZpZXMgdGhpbmdzLiBOb3csIGxldCdzIHBpdm90IHRvIHRoZSBgSU5GSU5JQkFORGAgY29tcG9uZW50LiBJJ3ZlIHdvcmtlZCB3aXRoIGl0IGluIHRoZSBwYXN0LCBhbmQgaXQncyBub3RvcmlvdXNseeKApiBpbnRlcmNvbm5lY3RlZC4gSSByZWFsbHkgc2hvdWxkIHZlcmlmeSB0aGF0IGl0IGRvZXNuJ3QgcmVseSBvbiBhbnl0aGluZyBlbHNlLCBlc3BlY2lhbGx5IGFueXRoaW5nIHBvdGVudGlhbGx5IG9ic2N1cmUgdGhhdCBjb3VsZCBjYXVzZSBpc3N1ZXMuIE5lZWQgdG8gY2hlY2sgaXRzIGRlcGVuZGVuY2llcyB0aG9yb3VnaGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODE2OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEzOjAyOjIwLjkyMDU4OTkwMVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU4NDg1NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZz0yPW1lbnVjb25maWcgSU5GSU5JQkFORFxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkluZmluaUJhbmQgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo0OlxcdGRlcGVuZHMgb24gSEFTX0lPTUVNIFxcdTAwMjZcXHUwMDI2IEhBU19ETUFcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo1OlxcdGRlcGVuZHMgb24gTkVUXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NjpcXHRkZXBlbmRzIG9uIElORVRcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo3OlxcdGRlcGVuZHMgb24gIUFMUEhBXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctOC1cXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTE4PWNvbmZpZyBJTkZJTklCQU5EX1VTRVJfTUFEXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMTktXFx0dHJpc3RhdGUgXFxcIkluZmluaUJhbmQgdXNlcnNwYWNlIE1BRCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjIwOlxcdGRlcGVuZHMgb24gSU5GSU5JQkFORFxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTIxLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTI4PWNvbmZpZyBJTkZJTklCQU5EX1VTRVJfQUNDRVNTXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMjktXFx0dHJpc3RhdGUgXFxcIkluZmluaUJhbmQgdXNlcnNwYWNlIGFjY2VzcyAodmVyYnMgYW5kIENNKVxcXCJcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzozMDpcXHRkZXBlbmRzIG9uIE1NVVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTMxLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTQ0PWNvbmZpZyBJTkZJTklCQU5EX1VTRVJfTUVNXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDUtXFx0Ym9vbFxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjQ2OlxcdGRlcGVuZHMgb24gSU5GSU5JQkFORF9VU0VSX0FDQ0VTUyAhPSBuXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NDc6XFx0ZGVwZW5kcyBvbiBNTVVcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy00OC1cXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTUxPWNvbmZpZyBJTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkdcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy01Mi1cXHRib29sIFxcXCJJbmZpbmlCYW5kIG9uLWRlbWFuZCBwYWdpbmcgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo1MzpcXHRkZXBlbmRzIG9uIElORklOSUJBTkRfVVNFUl9NRU1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy01NC1cXHRzZWxlY3QgTU1VX05PVElGSUVSXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZz02ND1jb25maWcgSU5GSU5JQkFORF9BRERSX1RSQU5TXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNjUtXFx0Ym9vbCBcXFwiUkRNQS9DTVxcXCJcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo2NjpcXHRkZXBlbmRzIG9uIElORklOSUJBTkRcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy02Ny1cXHRkZWZhdWx0IHlcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTcyPWNvbmZpZyBJTkZJTklCQU5EX0FERFJfVFJBTlNfQ09ORklHRlNcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03My1cXHRib29sXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NzQ6XFx0ZGVwZW5kcyBvbiBJTkZJTklCQU5EX0FERFJfVFJBTlMgXFx1MDAyNlxcdTAwMjYgQ09ORklHRlNfRlMgXFx1MDAyNlxcdTAwMjYgIShJTkZJTklCQU5EPXkgXFx1MDAyNlxcdTAwMjYgQ09ORklHRlNfRlM9bSlcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03NS1cXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTM6MDI6MjAuOTk2NDQzNTEzWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyODU0OTc1NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgYW5kIFNldHRpbmcgUmVzdWx0cyoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBJTkZJTklCQU5EYC4gU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDsgaXQgaGluZ2VzIG9uIGBIQVNfSU9NRU1gLCBgSEFTX0RNQWAsIGBORVRgLCBhbmQgYElORVRgIGJlaW5nIGVuYWJsZWQsIGJ1dCBkZWZpbml0ZWx5ICpub3QqIG9uIGBBTFBIQWAuIFRob3NlIGFyZSBhbGwgZmFpcmx5IHN0YW5kYXJkIHByZXJlcXVpc2l0ZXMsIG5vdGhpbmcgdG9vIG91dCBvZiB0aGUgb3JkaW5hcnkgdGhlcmUuIE1ha2VzIHNlbnNlLlxuXG5Ob3csIG15IGZvY3VzIGlzIG9uIGBTTUNgLCBgSU5GSU5JQkFORGAsIGFuZCBgRElCU2DigJR0aG9zZSBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIEknbSB3b3JraW5nIHdpdGggaGVyZS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGJlc3QgXCJzZXQtcmVzdWx0c1wiIHdoaWNoIEkgYXNzdW1lIGlzIHdoYXQgSSBhbSBkb2luZyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTA5MSwiT3V0cHV0VG9rZW5zIjoyMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMzowMjozMy44NTE0MjI0MDNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ3NzQ5NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNNQ1wiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiRElCU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19jb25uZWN0XCIsXG4gICAgXCJzbWNfbGlzdGVuXCIsXG4gICAgXCJzbWNfcG5ldF9maW5kX3JvY2VfcmVzb3VyY2VcIixcbiAgICBcInNtY19wbmV0X2ZpbmRfYWx0X3JvY2VcIixcbiAgICBcInNtY19sbGNfY2xpX2FkZF9saW5rXCIsXG4gICAgXCJzbWNfbGxjX3Nydl9hZGRfbGlua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGRldmljZSByZW1vdmFsIHJhY2UgY29uZGl0aW9uIGluIHRoZSBTTUMgKFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMpIHN1YnN5c3RlbSBieSBpbnRyb2R1Y2luZyByZWZlcmVuY2UgY291bnRpbmcgZm9yIGBzbWNfaWJfZGV2aWNlYCBkdXJpbmcgY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbi4gVGhlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgY29ubmVjdGlvbiBzZXR1cCBwYXRocyAoYHNtY19jb25uZWN0YCwgYHNtY19saXN0ZW5gKSBhbmQgbGluayBhZGRpdGlvbiBwYXRocyAoYHNtY19sbGNfY2xpX2FkZF9saW5rYCwgYHNtY19sbGNfc3J2X2FkZF9saW5rYCkuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFGX1NNQyBzb2NrZXRzIGFuZCBjYW4gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNNQ1wiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiRElCU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19jb25uZWN0XCIsXG4gICAgXCJzbWNfbGlzdGVuXCIsXG4gICAgXCJzbWNfcG5ldF9maW5kX3JvY2VfcmVzb3VyY2VcIixcbiAgICBcInNtY19wbmV0X2ZpbmRfYWx0X3JvY2VcIixcbiAgICBcInNtY19sbGNfY2xpX2FkZF9saW5rXCIsXG4gICAgXCJzbWNfbGxjX3Nydl9hZGRfbGlua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGRldmljZSByZW1vdmFsIHJhY2UgY29uZGl0aW9uIGluIHRoZSBTTUMgKFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMpIHN1YnN5c3RlbSBieSBpbnRyb2R1Y2luZyByZWZlcmVuY2UgY291bnRpbmcgZm9yIGBzbWNfaWJfZGV2aWNlYCBkdXJpbmcgY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbi4gVGhlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgY29ubmVjdGlvbiBzZXR1cCBwYXRocyAoYHNtY19jb25uZWN0YCwgYHNtY19saXN0ZW5gKSBhbmQgbGluayBhZGRpdGlvbiBwYXRocyAoYHNtY19sbGNfY2xpX2FkZF9saW5rYCwgYHNtY19sbGNfc3J2X2FkZF9saW5rYCkuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFGX1NNQyBzb2NrZXRzIGFuZCBjYW4gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8hrln[1] Phase: Succeeded StartedAt: 2026-08-04 13:02:45 +0000 UTC FinishedAt: 2026-08-04 13:02:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hrln[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-04 13:02:45 +0000 UTC FinishedAt: 2026-08-04 13:02:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hrln[2] Phase: Succeeded StartedAt: 2026-08-04 13:02:45 +0000 UTC FinishedAt: 2026-08-04 16:45:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:02:45 +0000 UTC FinishedAt: 2026-08-04 16:45:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:02:45 +0000 UTC FinishedAt: 2026-08-04 13:02:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:02:45 +0000 UTC FinishedAt: 2026-08-04 13:02:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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-workflow8hrln/series-workflow8hrln-convert-artifact-3726544488/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:02:55 +0000 UTC FinishedAt: 2026-08-04 13:21:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:02:55 +0000 UTC FinishedAt: 2026-08-04 13:21:00 +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:*fad7cf4a-4788-4b3f-b794-8430b9d3aacc,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-workflow8hrln/series-workflow8hrln-convert-artifact-3726544488/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": "739df701-c51c-4e88-9603-dc4a54681548", "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-workflow8hrln/series-workflow8hrln-build-action-2371032030/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:02:55 +0000 UTC FinishedAt: 2026-08-04 13:20:50 +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:*fad7cf4a-4788-4b3f-b794-8430b9d3aacc,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-workflow8hrln/series-workflow8hrln-convert-artifact-3726544488/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": "739df701-c51c-4e88-9603-dc4a54681548", "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-workflow8hrln/series-workflow8hrln-build-action-2371032030/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:21:00 +0000 UTC FinishedAt: 2026-08-04 13:21:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:21:00 +0000 UTC FinishedAt: 2026-08-04 13:21:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:21:00 +0000 UTC FinishedAt: 2026-08-04 13:21:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:21:00 +0000 UTC FinishedAt: 2026-08-04 13:21:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-workflow8hrln/series-workflow8hrln-convert-artifact-2890651215/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:21:10 +0000 UTC FinishedAt: 2026-08-04 13:23:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:21:10 +0000 UTC FinishedAt: 2026-08-04 13:22:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*739df701-c51c-4e88-9603-dc4a54681548,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-workflow8hrln/series-workflow8hrln-build-action-2371032030/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-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:23:00 +0000 UTC FinishedAt: 2026-08-04 13:23:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:23:00 +0000 UTC FinishedAt: 2026-08-04 13:23:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:23:00 +0000 UTC FinishedAt: 2026-08-04 13:40:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:23:00 +0000 UTC FinishedAt: 2026-08-04 13:40:12 +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:*fad7cf4a-4788-4b3f-b794-8430b9d3aacc,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-workflow8hrln/series-workflow8hrln-convert-artifact-2890651215/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": "f3a01589-4e80-4a60-83b9-b6621dfa78df", "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-workflow8hrln/series-workflow8hrln-build-action-1996971619/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:23:00 +0000 UTC FinishedAt: 2026-08-04 13:40:02 +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:*fad7cf4a-4788-4b3f-b794-8430b9d3aacc,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-workflow8hrln/series-workflow8hrln-convert-artifact-2890651215/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": "f3a01589-4e80-4a60-83b9-b6621dfa78df", "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-workflow8hrln/series-workflow8hrln-build-action-1996971619/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:40:12 +0000 UTC FinishedAt: 2026-08-04 13:40:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:40:12 +0000 UTC FinishedAt: 2026-08-04 13:40:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:40:12 +0000 UTC FinishedAt: 2026-08-04 13:42:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:40:12 +0000 UTC FinishedAt: 2026-08-04 13:41:52 +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:*f3a01589-4e80-4a60-83b9-b6621dfa78df,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-workflow8hrln/series-workflow8hrln-build-action-1996971619/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-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:42:02 +0000 UTC FinishedAt: 2026-08-04 16:45:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:42:02 +0000 UTC FinishedAt: 2026-08-04 16:45:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"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:*739df701-c51c-4e88-9603-dc4a54681548,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f3a01589-4e80-4a60-83b9-b6621dfa78df,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-workflow8hrln/series-workflow8hrln-build-action-2371032030/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-workflow8hrln/series-workflow8hrln-build-action-1996971619/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:42:02 +0000 UTC FinishedAt: 2026-08-04 13:42:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:42:02 +0000 UTC FinishedAt: 2026-08-04 13:42:07 +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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"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-workflow8hrln/series-workflow8hrln-convert-artifact-1647699208/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:42:02 +0000 UTC FinishedAt: 2026-08-04 13:42:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:42:02 +0000 UTC FinishedAt: 2026-08-04 13:42:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:42:02 +0000 UTC FinishedAt: 2026-08-04 13:42:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:42:12 +0000 UTC FinishedAt: 2026-08-04 16:45:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hrln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"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":["smc_connect","smc_listen","smc_pnet_find_roce_resource","smc_pnet_find_alt_roce","smc_llc_cli_add_link","smc_llc_srv_add_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"f909508b-2868-40c8-84cd-c5e1d135d42d","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-04 13:42:12 +0000 UTC FinishedAt: 2026-08-04 16:45:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*739df701-c51c-4e88-9603-dc4a54681548,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f3a01589-4e80-4a60-83b9-b6621dfa78df,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-workflow8hrln/series-workflow8hrln-build-action-2371032030/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-workflow8hrln/series-workflow8hrln-build-action-1996971619/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-workflow8hrln/series-workflow8hrln-convert-artifact-1647699208/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,}