Name: series-workflowbnqs7 Phase: Succeeded StartedAt: 2026-07-31 19:41:40 +0000 UTC FinishedAt: 2026-07-31 23:55:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbnqs7[0] Phase: Succeeded StartedAt: 2026-07-31 19:41:40 +0000 UTC FinishedAt: 2026-07-31 20:05:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbnqs7[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 19:41:40 +0000 UTC FinishedAt: 2026-07-31 20:05:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NBD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NBD" ], "series_id": "a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "nbd_ioctl", "nbd_genl_connect", "nbd_genl_reconfigure", "nbd_genl_disconnect" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTkJEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmJkX2lvY3RsJiMzNDssCiAgICAmIzM0O25iZF9nZW5sX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfcmVjb25maWd1cmUmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfZGlzY29ubmVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgZHJpdmVyLCBjaGFuZ2luZyBob3cgc29ja2V0cyBhcmUgYWRkZWQsIGhvdyBmYWxsYmFjayBjb25uZWN0aW9ucyBhcmUgZm91bmQsIGFuZCBob3cgYmxvY2sgc2l6ZXMgYXJlIHNldC4gSXQgYWxzbyBpbnRyb2R1Y2VzIGEgbmV3IG1vZHVsZSBwYXJhbWV0ZXIgZm9yIGhhcmR3YXJlIHF1ZXVlcyBhbmQgcmVmYWN0b3JzIG5ldGxpbmsgc29ja2V0IHBhcnNpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBOQkQgbG9naWMgcmVhY2hhYmxlIHZpYSBpb2N0bCBhbmQgbmV0bGluaywgc28gdGhleSBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGNlMjNmOTI1ZmM0ZGQ1NGE2YWQ5YmQ5MDZlODBjOWYzMTI1MmRkOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDIwOjA0OjI3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbmJkLmMgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXG5pbmRleCA4ZjEwNzYyZTkwZWY3Li4yMTk0YzdkN2IyZWFlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay9uYmQuY1xuQEAgLTE2Niw2ICYjNDM7MTY2LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKm5iZF9kYmdfZGlyO1xuIFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmJkc19tYXggPSAxNjtcbiBzdGF0aWMgaW50IG1heF9wYXJ0ID0gMTY7XG4mIzQzO3N0YXRpYyBpbnQgbnJfaHdfcXVldWVzID0gMTtcbiBzdGF0aWMgaW50IHBhcnRfc2hpZnQ7XG4gXG4gc3RhdGljIGludCBuYmRfZGV2X2RiZ19pbml0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpO1xuQEAgLTMzMSw3ICYjNDM7MzMyLDggQEAgc3RhdGljIHZvaWQgbmJkX21hcmtfbnNvY2tfZGVhZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxuIFx0bnNvY2stXHUwMDNlc2VudCA9IDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpXG4mIzQzO3N0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUsXG4mIzQzO1x0XHRcdGJvb2wgZnJlZXplKVxuIHtcbiBcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuIFx0aW50IGVycm9yO1xuQEAgLTM3MSw3ICYjNDM7MzczLDEzIEBAIHN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpXG4gXG4gXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gYmxrc2l6ZTtcbiBcdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gYmxrc2l6ZTtcbi1cdGVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZsaW0pO1xuJiM0MztcbiYjNDM7XHRpZiAoZnJlZXplKVxuJiM0MztcdFx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsXG4mIzQzO1x0XHRcdFx0XHUwMDI2bGltKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRlcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZsaW0pO1xuJiM0MztcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuQEAgLTEwNjEsNDAgJiM0MzsxMDY5LDMxIEBAIHN0YXRpYyBpbnQgZmluZF9mYWxsYmFjayhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgaW5kZXgpXG4gXHRpbnQgbmV3X2luZGV4ID0gLTE7XG4gXHRzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrID0gY29uZmlnLVx1MDAzZXNvY2tzW2luZGV4XTtcbiBcdGludCBmYWxsYmFjayA9IG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4O1xuJiM0MztcdGludCBpO1xuIFxuIFx0aWYgKHRlc3RfYml0KE5CRF9SVF9ESVNDT05ORUNURUQsIFx1MDAyNmNvbmZpZy1cdTAwM2VydW50aW1lX2ZsYWdzKSlcbiBcdFx0cmV0dXJuIG5ld19pbmRleDtcbiBcbi1cdGlmIChjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIFx1MDAzYz0gMSkge1xuLVx0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC1cdTAwM2VkaXNrKSxcbi1cdFx0XHRcdCAgICBcJiMzNDtEZWFkIGNvbm5lY3Rpb24sIGZhaWxlZCB0byBmaW5kIGEgZmFsbGJhY2tcXG5cJiMzNDspO1xuLVx0XHRyZXR1cm4gbmV3X2luZGV4O1xuLVx0fVxuJiM0MztcdGlmIChjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIFx1MDAzYz0gMSlcbiYjNDM7XHRcdGdvdG8gbm9fZmFsbGJhY2s7XG4gXG4gXHRpZiAoZmFsbGJhY2sgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBmYWxsYmFjayBcdTAwM2MgY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9ucyBcdTAwMjZcdTAwMjZcbiBcdCAgICAhY29uZmlnLVx1MDAzZXNvY2tzW2ZhbGxiYWNrXS1cdTAwM2VkZWFkKVxuIFx0XHRyZXR1cm4gZmFsbGJhY2s7XG4gXG4tXHRpZiAobnNvY2stXHUwMDNlZmFsbGJhY2tfaW5kZXggXHUwMDNjIDAgfHxcbi1cdCAgICBuc29jay1cdTAwM2VmYWxsYmFja19pbmRleCBcdTAwM2U9IGNvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnMgfHxcbi1cdCAgICBjb25maWctXHUwMDNlc29ja3NbbnNvY2stXHUwMDNlZmFsbGJhY2tfaW5kZXhdLVx1MDAzZWRlYWQpIHtcbi1cdFx0aW50IGk7XG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdFx0aWYgKGkgPT0gaW5kZXgpXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRpZiAoIWNvbmZpZy1cdTAwM2Vzb2Nrc1tpXS1cdTAwM2VkZWFkKSB7XG4tXHRcdFx0XHRuZXdfaW5kZXggPSBpO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXHRcdG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4ID0gbmV3X2luZGV4O1xuLVx0XHRpZiAobmV3X2luZGV4IFx1MDAzYyAwKSB7XG4tXHRcdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtXHUwMDNlZGlzayksXG4tXHRcdFx0XHRcdCAgICBcJiMzNDtEZWFkIGNvbm5lY3Rpb24sIGZhaWxlZCB0byBmaW5kIGEgZmFsbGJhY2tcXG5cJiMzNDspO1xuLVx0XHRcdHJldHVybiBuZXdfaW5kZXg7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9uczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChpICE9IGluZGV4IFx1MDAyNlx1MDAyNiAhY29uZmlnLVx1MDAzZXNvY2tzW2ldLVx1MDAzZWRlYWQpIHtcbiYjNDM7XHRcdFx0bmV3X2luZGV4ID0gaTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdH1cbi1cdG5ld19pbmRleCA9IG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4O1xuJiM0MztcdG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4ID0gbmV3X2luZGV4O1xuJiM0MztcdGlmIChuZXdfaW5kZXggXHUwMDNlPSAwKVxuJiM0MztcdFx0cmV0dXJuIG5ld19pbmRleDtcbiYjNDM7XG4mIzQzO25vX2ZhbGxiYWNrOlxuJiM0MztcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLVx1MDAzZWRpc2spLFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7RGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXFxuXCYjMzQ7KTtcbiBcdHJldHVybiBuZXdfaW5kZXg7XG4gfVxuIFxuQEAgLTEyODEsMjMgJiM0MzsxMjgwLDIzIEBAIHN0YXRpYyBpbnQgbmJkX2FkZF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcsXG4gXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xuIFx0c3RydWN0IG5iZF9zb2NrICoqc29ja3M7XG4gXHRzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrO1xuLVx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xuIFx0aW50IGVycjtcbiBcbiBcdC8qIEFyZyB3aWxsIGJlIGNhc3QgdG8gaW50LCBjaGVjayBpdCB0byBhdm9pZCBvdmVyZmxvdyAqL1xuIFx0aWYgKGFyZyBcdTAwM2UgSU5UX01BWClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChuYmQtXHUwMDNlcGlkKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRpc2tfdG9fZGV2KG5iZC1cdTAwM2VkaXNrKSxcbiYjNDM7XHRcdFx0XCYjMzQ7Q2Fubm90IGFkZCBzb2NrZXQgdG8gYSBydW5uaW5nIGRldmljZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRzb2NrID0gbmJkX2dldF9zb2NrZXQobmJkLCBhcmcsIFx1MDAyNmVycik7XG4gXHRpZiAoIXNvY2spXG4gXHRcdHJldHVybiBlcnI7XG4gXHRuYmRfcmVjbGFzc2lmeV9zb2NrZXQoc29jayk7XG4gXG4tXHQvKlxuLVx0ICogV2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJiMzOTt0IGdldCBhbnkgZXJyYW50IHJlcXVlc3RzIHdoaWxlIHdlJiMzOTtyZVxuLVx0ICogcmVhbGxvY2F0aW5nIHRoZSAtXHUwMDNlc29ja3MgYXJyYXkuXG4tXHQgKi9cbi1cdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSk7XG4tXG4gXHRpZiAoIW5ldGxpbmsgXHUwMDI2XHUwMDI2ICFuYmQtXHUwMDNldGFza19zZXR1cCBcdTAwMjZcdTAwMjZcbiBcdCAgICAhdGVzdF9iaXQoTkJEX1JUX0JPVU5ELCBcdTAwMjZjb25maWctXHUwMDNlcnVudGltZV9mbGFncykpXG4gXHRcdG5iZC1cdTAwM2V0YXNrX3NldHVwID0gY3VycmVudDtcbkBAIC0xMzM3LDEyICYjNDM7MTMzNiwxMCBAQCBzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxuIFx0SU5JVF9XT1JLKFx1MDAyNm5zb2NrLVx1MDAzZXdvcmssIG5iZF9wZW5kaW5nX2NtZF93b3JrKTtcbiBcdHNvY2tzW2NvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnMmIzQzOyYjNDM7XSA9IG5zb2NrO1xuIFx0YXRvbWljX2luYyhcdTAwMjZjb25maWctXHUwMDNlbGl2ZV9jb25uZWN0aW9ucyk7XG4tXHRibGtfbXFfdW5mcmVlemVfcXVldWUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIG1lbWZsYWdzKTtcbiBcbiBcdHJldHVybiAwO1xuIFxuIHB1dF9zb2NrZXQ6XG4tXHRibGtfbXFfdW5mcmVlemVfcXVldWUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIG1lbWZsYWdzKTtcbiBcdHNvY2tmZF9wdXQoc29jayk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbkBAIC0xNDcxLDggJiM0MzsxNDY4LDEzIEBAIHN0YXRpYyB2b2lkIG5iZF9jb25maWdfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4gXHRpZiAocmVmY291bnRfZGVjX2FuZF9tdXRleF9sb2NrKFx1MDAyNm5iZC1cdTAwM2Vjb25maWdfcmVmcyxcbiBcdFx0XHRcdFx0XHUwMDI2bmJkLVx1MDAzZWNvbmZpZ19sb2NrKSkge1xuIFx0XHRzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnID0gbmJkLVx1MDAzZWNvbmZpZztcbiYjNDM7XHRcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuIFx0XHRuYmRfZGV2X2RiZ19jbG9zZShuYmQpO1xuIFx0XHRpbnZhbGlkYXRlX2Rpc2sobmJkLVx1MDAzZWRpc2spO1xuJiM0MztcdFx0LyogcmVzZXQgd3JpdGUgY2FjaGUgKi9cbiYjNDM7XHRcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuJiM0MztcdFx0bGltLmZlYXR1cmVzIFx1MDAyNj0gfihCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX0ZVQSk7XG4mIzQzO1x0XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSwgXHUwMDI2bGltKTtcbiBcdFx0aWYgKG5iZC1cdTAwM2Vjb25maWctXHUwMDNlYnl0ZXNpemUpXG4gXHRcdFx0a29iamVjdF91ZXZlbnQoXHUwMDI2bmJkX3RvX2RldihuYmQpLVx1MDAzZWtvYmosIEtPQkpfQ0hBTkdFKTtcbiBcdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChOQkRfUlRfSEFTX1BJRF9GSUxFLFxuQEAgLTE1NzQsNyAmIzQzOzE1NzYsNyBAQCBzdGF0aWMgaW50IG5iZF9zdGFydF9kZXZpY2Uoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbiBcdFx0YXJncy1cdTAwM2VpbmRleCA9IGk7XG4gXHRcdHF1ZXVlX3dvcmsobmJkLVx1MDAzZXJlY3Zfd29ya3EsIFx1MDAyNmFyZ3MtXHUwMDNld29yayk7XG4gXHR9XG4tXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgY29uZmlnLVx1MDAzZWJ5dGVzaXplLCBuYmRfYmxrc2l6ZShjb25maWcpKTtcbiYjNDM7XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgY29uZmlnLVx1MDAzZWJ5dGVzaXplLCBuYmRfYmxrc2l6ZShjb25maWcpLCBmYWxzZSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbmJkX3N0YXJ0X2RldmljZV9pb2N0bChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuQEAgLTE2NDIsMTMgJiM0MzsxNjQ0LDEzIEBAIHN0YXRpYyBpbnQgX19uYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCxcbiBcdGNhc2UgTkJEX1NFVF9TT0NLOlxuIFx0XHRyZXR1cm4gbmJkX2FkZF9zb2NrZXQobmJkLCBhcmcsIGZhbHNlKTtcbiBcdGNhc2UgTkJEX1NFVF9CTEtTSVpFOlxuLVx0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgY29uZmlnLVx1MDAzZWJ5dGVzaXplLCBhcmcpO1xuJiM0MztcdFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGNvbmZpZy1cdTAwM2VieXRlc2l6ZSwgYXJnLCB0cnVlKTtcbiBcdGNhc2UgTkJEX1NFVF9TSVpFOlxuLVx0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYXJnLCBuYmRfYmxrc2l6ZShjb25maWcpKTtcbiYjNDM7XHRcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBhcmcsIG5iZF9ibGtzaXplKGNvbmZpZyksIHRydWUpO1xuIFx0Y2FzZSBOQkRfU0VUX1NJWkVfQkxPQ0tTOlxuIFx0XHRpZiAoY2hlY2tfc2hsX292ZXJmbG93KGFyZywgY29uZmlnLVx1MDAzZWJsa3NpemVfYml0cywgXHUwMDI2Ynl0ZXNpemUpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZykpO1xuJiM0MztcdFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGJ5dGVzaXplLCBuYmRfYmxrc2l6ZShjb25maWcpLCB0cnVlKTtcbiBcdGNhc2UgTkJEX1NFVF9USU1FT1VUOlxuIFx0XHRuYmRfc2V0X2NtZF90aW1lb3V0KG5iZCwgYXJnKTtcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTk0MSw3ICYjNDM7MTk0Myw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBuYmRfbXFfb3BzID0ge1xuIFx0LnRpbWVvdXRcdD0gbmJkX3htaXRfdGltZW91dCxcbiB9O1xuIFxuLXN0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcylcbiYjNDM7c3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzLFxuJiM0MztcdFx0XHRcdCAgICAgICBpbnQgbnJfaHdfcXVldWVzKVxuIHtcbiBcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0ge1xuIFx0XHQubWF4X2h3X3NlY3RvcnNcdFx0PSA2NTUzNixcbkBAIC0xOTU4LDcgJiM0MzsxOTYxLDcgQEAgc3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdG5iZC1cdTAwM2V0YWdfc2V0Lm9wcyA9IFx1MDAyNm5iZF9tcV9vcHM7XG4tXHRuYmQtXHUwMDNldGFnX3NldC5ucl9od19xdWV1ZXMgPSAxO1xuJiM0MztcdG5iZC1cdTAwM2V0YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IG5yX2h3X3F1ZXVlcztcbiBcdG5iZC1cdTAwM2V0YWdfc2V0LnF1ZXVlX2RlcHRoID0gMTI4O1xuIFx0bmJkLVx1MDAzZXRhZ19zZXQubnVtYV9ub2RlID0gTlVNQV9OT19OT0RFO1xuIFx0bmJkLVx1MDAzZXRhZ19zZXQuY21kX3NpemUgPSBzaXplb2Yoc3RydWN0IG5iZF9jbWQpO1xuQEAgLTIxMDMsMTAgJiM0MzsyMTA2LDYyIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfc2l6ZV9zZXQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbiBcdFx0YnNpemUgPSBubGFfZ2V0X3U2NChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX0JMT0NLX1NJWkVfQllURVNdKTtcbiBcbiBcdGlmIChieXRlcyAhPSBjb25maWctXHUwMDNlYnl0ZXNpemUgfHwgYnNpemUgIT0gbmJkX2Jsa3NpemUoY29uZmlnKSlcbi1cdFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGJ5dGVzLCBic2l6ZSk7XG4mIzQzO1x0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXMsIGJzaXplLCB0cnVlKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogV2FsayB0aGUgTkJEX0FUVFJfU09DS0VUUyBuZXN0ZWQgbGlzdCBjYW4gY2FsbCBAY2IgZm9yIGVhY2ggc29ja2V0IGZkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBmZHMgd2Fsa2VkLCBvciBhIG5lZ2F0aXZlIGVycm5vLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBuYmRfZ2VubF9mb3JlYWNoX3NvY2soc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiYjNDM7XHRcdGludCAoKmNiKShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpLFxuJiM0MztcdFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBubGF0dHIgKmF0dHI7XG4mIzQzO1x0aW50IHJlbSwgY291bnQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLCByZW0pIHtcbiYjNDM7XHRcdHN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCAmIzQzOyAxXTtcbiYjNDM7XHRcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5sYV90eXBlKGF0dHIpICE9IE5CRF9TT0NLX0lURU0pIHtcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0O3NvY2tzIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBTT0NLX0lURU0gYXR0clxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCxcbiYjNDM7XHRcdFx0XHRcdFx0YXR0cixcbiYjNDM7XHRcdFx0XHRcdFx0bmJkX3NvY2tfcG9saWN5LFxuJiM0MztcdFx0XHRcdFx0XHRpbmZvLVx1MDAzZWV4dGFjaykpIHtcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0O2Vycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGNvdW50JiM0MzsmIzQzOztcbiYjNDM7XHRcdGlmIChjYikge1xuJiM0MztcdFx0XHRyZXQgPSBjYihuYmQsIChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNlIDApXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGNvdW50O1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBjb3VudDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2Ioc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGZkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBuYmRfZGV2aWNlICpuYmQ7XG5AQCAtMjE1OSw3ICYjNDM7MjIxNCwxMSBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdG11dGV4X3VubG9jayhcdTAwMjZuYmRfaW5kZXhfbXV0ZXgpO1xuIFxuIFx0aWYgKCFuYmQpIHtcbi1cdFx0bmJkID0gbmJkX2Rldl9hZGQoaW5kZXgsIDIpO1xuJiM0MztcdFx0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIE5VTEwsIE5VTEwpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRuYmQgPSBuYmRfZGV2X2FkZChpbmRleCwgMiwgcmV0IFx1MDAzZSAwID8gcmV0IDogMSk7XG4gXHRcdGlmIChJU19FUlIobmJkKSkge1xuIFx0XHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gYWRkIG5ldyBkZXZpY2VcXG5cJiMzNDspO1xuIFx0XHRcdHJldHVybiBQVFJfRVJSKG5iZCk7XG5AQCAtMjIyNiwzNiAmIzQzOzIyODUsOSBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10pIHtcbi1cdFx0c3RydWN0IG5sYXR0ciAqYXR0cjtcbi1cdFx0aW50IHJlbSwgZmQ7XG4tXG4tXHRcdG5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSxcbi1cdFx0XHRcdCAgICByZW0pIHtcbi1cdFx0XHRzdHJ1Y3QgbmxhdHRyICpzb2Nrc1tOQkRfU09DS19NQVgmIzQzOzFdO1xuLVxuLVx0XHRcdGlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7XG4tXHRcdFx0XHRwcl9lcnIoXCYjMzQ7c29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXFxuXCYjMzQ7KTtcbi1cdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXHRcdFx0cmV0ID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHNvY2tzLCBOQkRfU09DS19NQVgsXG4tXHRcdFx0XHRcdFx0XHQgIGF0dHIsXG4tXHRcdFx0XHRcdFx0XHQgIG5iZF9zb2NrX3BvbGljeSxcbi1cdFx0XHRcdFx0XHRcdCAgaW5mby1cdTAwM2VleHRhY2spO1xuLVx0XHRcdGlmIChyZXQgIT0gMCkge1xuLVx0XHRcdFx0cHJfZXJyKFwmIzM0O2Vycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XFxuXCYjMzQ7KTtcbi1cdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXHRcdFx0aWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRmZCA9IChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKTtcbi1cdFx0XHRyZXQgPSBuYmRfYWRkX3NvY2tldChuYmQsIGZkLCB0cnVlKTtcbi1cdFx0XHRpZiAocmV0KVxuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdH1cbi1cdH1cbiYjNDM7XHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiLCBuYmQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIG91dDtcbiBcbiBcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX0JBQ0tFTkRfSURFTlRJRklFUl0pIHtcbiBcdFx0bmJkLVx1MDAzZWJhY2tlbmQgPSBubGFfc3RyZHVwKGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkFDS0VORF9JREVOVElGSUVSXSxcbkBAIC0yMzQ0LDYgJiM0MzsyMzc2LDIwIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfZGlzY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZClcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSBuYmRfcmVjb25uZWN0X3NvY2tldChuYmQsIGZkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyZXQpIHtcbiYjNDM7XHRcdGRldl9pbmZvKG5iZF90b19kZXYobmJkKSwgXCYjMzQ7cmVjb25uZWN0ZWQgc29ja2V0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHJldCA9PSAtRU5PU1BDKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZCA9IE5VTEw7XG5AQCAtMjQ0MCw0MCAmIzQzOzI0ODYsMTAgQEAgc3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSkge1xuLVx0XHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xuLVx0XHRpbnQgcmVtLCBmZDtcbi1cbi1cdFx0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLFxuLVx0XHRcdFx0ICAgIHJlbSkge1xuLVx0XHRcdHN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCYjNDM7MV07XG4tXG4tXHRcdFx0aWYgKG5sYV90eXBlKGF0dHIpICE9IE5CRF9TT0NLX0lURU0pIHtcbi1cdFx0XHRcdHByX2VycihcJiMzNDtzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcXG5cJiMzNDspO1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCxcbi1cdFx0XHRcdFx0XHRcdCAgYXR0cixcbi1cdFx0XHRcdFx0XHRcdCAgbmJkX3NvY2tfcG9saWN5LFxuLVx0XHRcdFx0XHRcdFx0ICBpbmZvLVx1MDAzZWV4dGFjayk7XG4tXHRcdFx0aWYgKHJldCAhPSAwKSB7XG4tXHRcdFx0XHRwcl9lcnIoXCYjMzQ7ZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcXG5cJiMzNDspO1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdGZkID0gKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pO1xuLVx0XHRcdHJldCA9IG5iZF9yZWNvbm5lY3Rfc29ja2V0KG5iZCwgZmQpO1xuLVx0XHRcdGlmIChyZXQpIHtcbi1cdFx0XHRcdGlmIChyZXQgPT0gLUVOT1NQQylcbi1cdFx0XHRcdFx0cmV0ID0gMDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRkZXZfaW5mbyhuYmRfdG9fZGV2KG5iZCksIFwmIzM0O3JlY29ubmVjdGVkIHNvY2tldFxcblwmIzM0Oyk7XG4tXHRcdH1cbi1cdH1cbiYjNDM7XHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2IsIG5iZCk7XG4mIzQzO1x0LyogZm9yZWFjaF9zb2NrIHJldHVybnMgYSBwb3NpdGl2ZSBjb3VudCBvbiBzdWNjZXNzOyBkb2l0IG11c3QgcmV0dXJuIDAgKi9cbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMClcbiYjNDM7XHRcdHJldCA9IDA7XG4gb3V0OlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5iZC1cdTAwM2Vjb25maWdfbG9jayk7XG4gXHRuYmRfY29uZmlnX3B1dChuYmQpO1xuQEAgLTI3MjUsOCAmIzQzOzI3NDEsMTAgQEAgc3RhdGljIGludCBfX2luaXQgbmJkX2luaXQodm9pZClcbiBcdH1cbiBcdG5iZF9kYmdfaW5pdCgpO1xuIFxuJiM0MztcdGlmIChucl9od19xdWV1ZXMgXHUwMDNjIDEpXG4mIzQzO1x0XHRucl9od19xdWV1ZXMgPSAxO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmJkc19tYXg7IGkmIzQzOyYjNDM7KVxuLVx0XHRuYmRfZGV2X2FkZChpLCAxKTtcbiYjNDM7XHRcdG5iZF9kZXZfYWRkKGksIDEsIG5yX2h3X3F1ZXVlcyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjc4NywzICYjNDM7MjgwNSw2IEBAIG1vZHVsZV9wYXJhbShuYmRzX21heCwgaW50LCAwNDQ0KTtcbiBNT0RVTEVfUEFSTV9ERVNDKG5iZHNfbWF4LCBcJiMzNDtudW1iZXIgb2YgbmV0d29yayBibG9jayBkZXZpY2VzIHRvIGluaXRpYWxpemUgKGRlZmF1bHQ6IDE2KVwmIzM0Oyk7XG4gbW9kdWxlX3BhcmFtKG1heF9wYXJ0LCBpbnQsIDA0NDQpO1xuIE1PRFVMRV9QQVJNX0RFU0MobWF4X3BhcnQsIFwmIzM0O251bWJlciBvZiBwYXJ0aXRpb25zIHBlciBkZXZpY2UgKGRlZmF1bHQ6IDE2KVwmIzM0Oyk7XG4mIzQzO21vZHVsZV9wYXJhbShucl9od19xdWV1ZXMsIGludCwgMDQ0NCk7XG4mIzQzO01PRFVMRV9QQVJNX0RFU0MobnJfaHdfcXVldWVzLFxuJiM0MztcJiMzNDtudW1iZXIgb2YgaGFyZHdhcmUgcXVldWVzIGZvciBkZXZpY2VzIHByZS1jcmVhdGVkIGF0IG1vZHVsZSBsb2FkIChkZWZhdWx0OiAxKS4gXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9OQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuYmRfaW9jdGwmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfY29ubmVjdCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9yZWNvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9kaXNjb25uZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIsIGNoYW5naW5nIGhvdyBzb2NrZXRzIGFyZSBhZGRlZCwgaG93IGZhbGxiYWNrIGNvbm5lY3Rpb25zIGFyZSBmb3VuZCwgYW5kIGhvdyBibG9jayBzaXplcyBhcmUgc2V0LiBJdCBhbHNvIGludHJvZHVjZXMgYSBuZXcgbW9kdWxlIHBhcmFtZXRlciBmb3IgaGFyZHdhcmUgcXVldWVzIGFuZCByZWZhY3RvcnMgbmV0bGluayBzb2NrZXQgcGFyc2luZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIE5CRCBsb2dpYyByZWFjaGFibGUgdmlhIGlvY3RsIGFuZCBuZXRsaW5rLCBzbyB0aGV5IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0Y2UyM2Y5MjVmYzRkZDU0YTZhZDliZDkwNmU4MGM5ZjMxMjUyZGQ5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMzEgMjA6MDQ6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL25iZC5jIGIvZHJpdmVycy9ibG9jay9uYmQuYwppbmRleCA4ZjEwNzYyZTkwZWY3Li4yMTk0YzdkN2IyZWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKQEAgLTE2Niw2ICYjNDM7MTY2LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKm5iZF9kYmdfZGlyOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IG5iZHNfbWF4ID0gMTY7CiBzdGF0aWMgaW50IG1heF9wYXJ0ID0gMTY7CiYjNDM7c3RhdGljIGludCBucl9od19xdWV1ZXMgPSAxOwogc3RhdGljIGludCBwYXJ0X3NoaWZ0OwogCiBzdGF0aWMgaW50IG5iZF9kZXZfZGJnX2luaXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCk7CkBAIC0zMzEsNyAmIzQzOzMzMiw4IEBAIHN0YXRpYyB2b2lkIG5iZF9tYXJrX25zb2NrX2RlYWQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IG5iZF9zb2NrICpuc29jaywKIAluc29jay0mZ3Q7c2VudCA9IDA7CiB9CiAKLXN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpCiYjNDM7c3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSwKJiM0MzsJCQlib29sIGZyZWV6ZSkKIHsKIAlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTsKIAlpbnQgZXJyb3I7CkBAIC0zNzEsNyAmIzQzOzM3MywxMyBAQCBzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKQogCiAJbGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IGJsa3NpemU7CiAJbGltLnBoeXNpY2FsX2Jsb2NrX3NpemUgPSBibGtzaXplOwotCWVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKG5iZC0mZ3Q7ZGlzay0mZ3Q7cXVldWUsICZhbXA7bGltKTsKJiM0MzsKJiM0MzsJaWYgKGZyZWV6ZSkKJiM0MzsJCWVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKG5iZC0mZ3Q7ZGlzay0mZ3Q7cXVldWUsCiYjNDM7CQkJCSZhbXA7bGltKTsKJiM0MzsJZWxzZQomIzQzOwkJZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShuYmQtJmd0O2Rpc2stJmd0O3F1ZXVlLCAmYW1wO2xpbSk7CiYjNDM7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTEwNjEsNDAgJiM0MzsxMDY5LDMxIEBAIHN0YXRpYyBpbnQgZmluZF9mYWxsYmFjayhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgaW5kZXgpCiAJaW50IG5ld19pbmRleCA9IC0xOwogCXN0cnVjdCBuYmRfc29jayAqbnNvY2sgPSBjb25maWctJmd0O3NvY2tzW2luZGV4XTsKIAlpbnQgZmFsbGJhY2sgPSBuc29jay0mZ3Q7ZmFsbGJhY2tfaW5kZXg7CiYjNDM7CWludCBpOwogCiAJaWYgKHRlc3RfYml0KE5CRF9SVF9ESVNDT05ORUNURUQsICZhbXA7Y29uZmlnLSZndDtydW50aW1lX2ZsYWdzKSkKIAkJcmV0dXJuIG5ld19pbmRleDsKIAotCWlmIChjb25maWctJmd0O251bV9jb25uZWN0aW9ucyAmbHQ7PSAxKSB7Ci0JCWRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLSZndDtkaXNrKSwKLQkJCQkgICAgJiMzNDtEZWFkIGNvbm5lY3Rpb24sIGZhaWxlZCB0byBmaW5kIGEgZmFsbGJhY2tcbiYjMzQ7KTsKLQkJcmV0dXJuIG5ld19pbmRleDsKLQl9CiYjNDM7CWlmIChjb25maWctJmd0O251bV9jb25uZWN0aW9ucyAmbHQ7PSAxKQomIzQzOwkJZ290byBub19mYWxsYmFjazsKIAogCWlmIChmYWxsYmFjayAmZ3Q7PSAwICZhbXA7JmFtcDsgZmFsbGJhY2sgJmx0OyBjb25maWctJmd0O251bV9jb25uZWN0aW9ucyAmYW1wOyZhbXA7CiAJICAgICFjb25maWctJmd0O3NvY2tzW2ZhbGxiYWNrXS0mZ3Q7ZGVhZCkKIAkJcmV0dXJuIGZhbGxiYWNrOwogCi0JaWYgKG5zb2NrLSZndDtmYWxsYmFja19pbmRleCAmbHQ7IDAgfHwKLQkgICAgbnNvY2stJmd0O2ZhbGxiYWNrX2luZGV4ICZndDs9IGNvbmZpZy0mZ3Q7bnVtX2Nvbm5lY3Rpb25zIHx8Ci0JICAgIGNvbmZpZy0mZ3Q7c29ja3NbbnNvY2stJmd0O2ZhbGxiYWNrX2luZGV4XS0mZ3Q7ZGVhZCkgewotCQlpbnQgaTsKLQkJZm9yIChpID0gMDsgaSAmbHQ7IGNvbmZpZy0mZ3Q7bnVtX2Nvbm5lY3Rpb25zOyBpJiM0MzsmIzQzOykgewotCQkJaWYgKGkgPT0gaW5kZXgpCi0JCQkJY29udGludWU7Ci0JCQlpZiAoIWNvbmZpZy0mZ3Q7c29ja3NbaV0tJmd0O2RlYWQpIHsKLQkJCQluZXdfaW5kZXggPSBpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCW5zb2NrLSZndDtmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDsKLQkJaWYgKG5ld19pbmRleCAmbHQ7IDApIHsKLQkJCWRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLSZndDtkaXNrKSwKLQkJCQkJICAgICYjMzQ7RGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXG4mIzM0Oyk7Ci0JCQlyZXR1cm4gbmV3X2luZGV4OwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY29uZmlnLSZndDtudW1fY29ubmVjdGlvbnM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoaSAhPSBpbmRleCAmYW1wOyZhbXA7ICFjb25maWctJmd0O3NvY2tzW2ldLSZndDtkZWFkKSB7CiYjNDM7CQkJbmV3X2luZGV4ID0gaTsKJiM0MzsJCQlicmVhazsKIAkJfQogCX0KLQluZXdfaW5kZXggPSBuc29jay0mZ3Q7ZmFsbGJhY2tfaW5kZXg7CiYjNDM7CW5zb2NrLSZndDtmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDsKJiM0MzsJaWYgKG5ld19pbmRleCAmZ3Q7PSAwKQomIzQzOwkJcmV0dXJuIG5ld19pbmRleDsKJiM0MzsKJiM0Mztub19mYWxsYmFjazoKJiM0MzsJZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtJmd0O2Rpc2spLAomIzQzOwkJCSAgICAmIzM0O0RlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xuJiMzNDspOwogCXJldHVybiBuZXdfaW5kZXg7CiB9CiAKQEAgLTEyODEsMjMgJiM0MzsxMjgwLDIzIEBAIHN0YXRpYyBpbnQgbmJkX2FkZF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcsCiAJc3RydWN0IHNvY2tldCAqc29jazsKIAlzdHJ1Y3QgbmJkX3NvY2sgKipzb2NrczsKIAlzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrOwotCXVuc2lnbmVkIGludCBtZW1mbGFnczsKIAlpbnQgZXJyOwogCiAJLyogQXJnIHdpbGwgYmUgY2FzdCB0byBpbnQsIGNoZWNrIGl0IHRvIGF2b2lkIG92ZXJmbG93ICovCiAJaWYgKGFyZyAmZ3Q7IElOVF9NQVgpCiAJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAobmJkLSZndDtwaWQpIHsKJiM0MzsJCWRldl9lcnIoZGlza190b19kZXYobmJkLSZndDtkaXNrKSwKJiM0MzsJCQkmIzM0O0Nhbm5vdCBhZGQgc29ja2V0IHRvIGEgcnVubmluZyBkZXZpY2VcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CX0KJiM0MzsKIAlzb2NrID0gbmJkX2dldF9zb2NrZXQobmJkLCBhcmcsICZhbXA7ZXJyKTsKIAlpZiAoIXNvY2spCiAJCXJldHVybiBlcnI7CiAJbmJkX3JlY2xhc3NpZnlfc29ja2V0KHNvY2spOwogCi0JLyoKLQkgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24mIzM5O3QgZ2V0IGFueSBlcnJhbnQgcmVxdWVzdHMgd2hpbGUgd2UmIzM5O3JlCi0JICogcmVhbGxvY2F0aW5nIHRoZSAtJmd0O3NvY2tzIGFycmF5LgotCSAqLwotCW1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShuYmQtJmd0O2Rpc2stJmd0O3F1ZXVlKTsKLQogCWlmICghbmV0bGluayAmYW1wOyZhbXA7ICFuYmQtJmd0O3Rhc2tfc2V0dXAgJmFtcDsmYW1wOwogCSAgICAhdGVzdF9iaXQoTkJEX1JUX0JPVU5ELCAmYW1wO2NvbmZpZy0mZ3Q7cnVudGltZV9mbGFncykpCiAJCW5iZC0mZ3Q7dGFza19zZXR1cCA9IGN1cnJlbnQ7CkBAIC0xMzM3LDEyICYjNDM7MTMzNiwxMCBAQCBzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLAogCUlOSVRfV09SSygmYW1wO25zb2NrLSZndDt3b3JrLCBuYmRfcGVuZGluZ19jbWRfd29yayk7CiAJc29ja3NbY29uZmlnLSZndDtudW1fY29ubmVjdGlvbnMmIzQzOyYjNDM7XSA9IG5zb2NrOwogCWF0b21pY19pbmMoJmFtcDtjb25maWctJmd0O2xpdmVfY29ubmVjdGlvbnMpOwotCWJsa19tcV91bmZyZWV6ZV9xdWV1ZShuYmQtJmd0O2Rpc2stJmd0O3F1ZXVlLCBtZW1mbGFncyk7CiAKIAlyZXR1cm4gMDsKIAogcHV0X3NvY2tldDoKLQlibGtfbXFfdW5mcmVlemVfcXVldWUobmJkLSZndDtkaXNrLSZndDtxdWV1ZSwgbWVtZmxhZ3MpOwogCXNvY2tmZF9wdXQoc29jayk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTE0NzEsOCAmIzQzOzE0NjgsMTMgQEAgc3RhdGljIHZvaWQgbmJkX2NvbmZpZ19wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCkKIAlpZiAocmVmY291bnRfZGVjX2FuZF9tdXRleF9sb2NrKCZhbXA7bmJkLSZndDtjb25maWdfcmVmcywKIAkJCQkJJmFtcDtuYmQtJmd0O2NvbmZpZ19sb2NrKSkgewogCQlzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnID0gbmJkLSZndDtjb25maWc7CiYjNDM7CQlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTsKIAkJbmJkX2Rldl9kYmdfY2xvc2UobmJkKTsKIAkJaW52YWxpZGF0ZV9kaXNrKG5iZC0mZ3Q7ZGlzayk7CiYjNDM7CQkvKiByZXNldCB3cml0ZSBjYWNoZSAqLwomIzQzOwkJbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShuYmQtJmd0O2Rpc2stJmd0O3F1ZXVlKTsKJiM0MzsJCWxpbS5mZWF0dXJlcyAmYW1wOz0gfihCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX0ZVQSk7CiYjNDM7CQlxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShuYmQtJmd0O2Rpc2stJmd0O3F1ZXVlLCAmYW1wO2xpbSk7CiAJCWlmIChuYmQtJmd0O2NvbmZpZy0mZ3Q7Ynl0ZXNpemUpCiAJCQlrb2JqZWN0X3VldmVudCgmYW1wO25iZF90b19kZXYobmJkKS0mZ3Q7a29iaiwgS09CSl9DSEFOR0UpOwogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KE5CRF9SVF9IQVNfUElEX0ZJTEUsCkBAIC0xNTc0LDcgJiM0MzsxNTc2LDcgQEAgc3RhdGljIGludCBuYmRfc3RhcnRfZGV2aWNlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpCiAJCWFyZ3MtJmd0O2luZGV4ID0gaTsKIAkJcXVldWVfd29yayhuYmQtJmd0O3JlY3Zfd29ya3EsICZhbXA7YXJncy0mZ3Q7d29yayk7CiAJfQotCXJldHVybiBuYmRfc2V0X3NpemUobmJkLCBjb25maWctJmd0O2J5dGVzaXplLCBuYmRfYmxrc2l6ZShjb25maWcpKTsKJiM0MzsJcmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGNvbmZpZy0mZ3Q7Ynl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZyksIGZhbHNlKTsKIH0KIAogc3RhdGljIGludCBuYmRfc3RhcnRfZGV2aWNlX2lvY3RsKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpCkBAIC0xNjQyLDEzICYjNDM7MTY0NCwxMyBAQCBzdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsCiAJY2FzZSBOQkRfU0VUX1NPQ0s6CiAJCXJldHVybiBuYmRfYWRkX3NvY2tldChuYmQsIGFyZywgZmFsc2UpOwogCWNhc2UgTkJEX1NFVF9CTEtTSVpFOgotCQlyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgY29uZmlnLSZndDtieXRlc2l6ZSwgYXJnKTsKJiM0MzsJCXJldHVybiBuYmRfc2V0X3NpemUobmJkLCBjb25maWctJmd0O2J5dGVzaXplLCBhcmcsIHRydWUpOwogCWNhc2UgTkJEX1NFVF9TSVpFOgotCQlyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYXJnLCBuYmRfYmxrc2l6ZShjb25maWcpKTsKJiM0MzsJCXJldHVybiBuYmRfc2V0X3NpemUobmJkLCBhcmcsIG5iZF9ibGtzaXplKGNvbmZpZyksIHRydWUpOwogCWNhc2UgTkJEX1NFVF9TSVpFX0JMT0NLUzoKIAkJaWYgKGNoZWNrX3NobF9vdmVyZmxvdyhhcmcsIGNvbmZpZy0mZ3Q7Ymxrc2l6ZV9iaXRzLCAmYW1wO2J5dGVzaXplKSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQlyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZykpOwomIzQzOwkJcmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGJ5dGVzaXplLCBuYmRfYmxrc2l6ZShjb25maWcpLCB0cnVlKTsKIAljYXNlIE5CRF9TRVRfVElNRU9VVDoKIAkJbmJkX3NldF9jbWRfdGltZW91dChuYmQsIGFyZyk7CiAJCXJldHVybiAwOwpAQCAtMTk0MSw3ICYjNDM7MTk0Myw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBuYmRfbXFfb3BzID0gewogCS50aW1lb3V0CT0gbmJkX3htaXRfdGltZW91dCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcykKJiM0MztzdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMsCiYjNDM7CQkJCSAgICAgICBpbnQgbnJfaHdfcXVldWVzKQogewogCXN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gewogCQkubWF4X2h3X3NlY3RvcnMJCT0gNjU1MzYsCkBAIC0xOTU4LDcgJiM0MzsxOTYxLDcgQEAgc3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzKQogCQlnb3RvIG91dDsKIAogCW5iZC0mZ3Q7dGFnX3NldC5vcHMgPSAmYW1wO25iZF9tcV9vcHM7Ci0JbmJkLSZndDt0YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IDE7CiYjNDM7CW5iZC0mZ3Q7dGFnX3NldC5ucl9od19xdWV1ZXMgPSBucl9od19xdWV1ZXM7CiAJbmJkLSZndDt0YWdfc2V0LnF1ZXVlX2RlcHRoID0gMTI4OwogCW5iZC0mZ3Q7dGFnX3NldC5udW1hX25vZGUgPSBOVU1BX05PX05PREU7CiAJbmJkLSZndDt0YWdfc2V0LmNtZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBuYmRfY21kKTsKQEAgLTIxMDMsMTAgJiM0MzsyMTA2LDYyIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfc2l6ZV9zZXQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCkKIAkJYnNpemUgPSBubGFfZ2V0X3U2NChpbmZvLSZndDthdHRyc1tOQkRfQVRUUl9CTE9DS19TSVpFX0JZVEVTXSk7CiAKIAlpZiAoYnl0ZXMgIT0gY29uZmlnLSZndDtieXRlc2l6ZSB8fCBic2l6ZSAhPSBuYmRfYmxrc2l6ZShjb25maWcpKQotCQlyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXMsIGJzaXplKTsKJiM0MzsJCXJldHVybiBuYmRfc2V0X3NpemUobmJkLCBieXRlcywgYnNpemUsIHRydWUpOwogCXJldHVybiAwOwogfQogCiYjNDM7LyoKJiM0MzsgKiBXYWxrIHRoZSBOQkRfQVRUUl9TT0NLRVRTIG5lc3RlZCBsaXN0IGNhbiBjYWxsIEBjYiBmb3IgZWFjaCBzb2NrZXQgZmQuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBmZHMgd2Fsa2VkLCBvciBhIG5lZ2F0aXZlIGVycm5vLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgbmJkX2dlbmxfZm9yZWFjaF9zb2NrKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sCiYjNDM7CQlpbnQgKCpjYikoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGZkKSwKJiM0MzsJCXN0cnVjdCBuYmRfZGV2aWNlICpuYmQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmxhdHRyICphdHRyOwomIzQzOwlpbnQgcmVtLCBjb3VudCA9IDA7CiYjNDM7CiYjNDM7CWlmICghaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfU09DS0VUU10pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLSZndDthdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSwgcmVtKSB7CiYjNDM7CQlzdHJ1Y3QgbmxhdHRyICpzb2Nrc1tOQkRfU09DS19NQVggJiM0MzsgMV07CiYjNDM7CQlpbnQgcmV0OwomIzQzOwomIzQzOwkJaWYgKG5sYV90eXBlKGF0dHIpICE9IE5CRF9TT0NLX0lURU0pIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDtzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCwKJiM0MzsJCQkJCQlhdHRyLAomIzQzOwkJCQkJCW5iZF9zb2NrX3BvbGljeSwKJiM0MzsJCQkJCQlpbmZvLSZndDtleHRhY2spKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7ZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICghc29ja3NbTkJEX1NPQ0tfRkRdKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJY291bnQmIzQzOyYjNDM7OwomIzQzOwkJaWYgKGNiKSB7CiYjNDM7CQkJcmV0ID0gY2IobmJkLCAoaW50KW5sYV9nZXRfdTMyKHNvY2tzW05CRF9TT0NLX0ZEXSkpOwomIzQzOwkJCWlmIChyZXQgJmd0OyAwKQomIzQzOwkJCQlyZXR1cm4gY291bnQ7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJcmV0dXJuIGNvdW50OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpCiYjNDM7ewomIzQzOwlyZXR1cm4gbmJkX2FkZF9zb2NrZXQobmJkLCBmZCwgdHJ1ZSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IG5iZF9kZXZpY2UgKm5iZDsKQEAgLTIxNTksNyAmIzQzOzIyMTQsMTEgQEAgc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJbXV0ZXhfdW5sb2NrKCZhbXA7bmJkX2luZGV4X211dGV4KTsKIAogCWlmICghbmJkKSB7Ci0JCW5iZCA9IG5iZF9kZXZfYWRkKGluZGV4LCAyKTsKJiM0MzsJCXJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBOVUxMLCBOVUxMKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQluYmQgPSBuYmRfZGV2X2FkZChpbmRleCwgMiwgcmV0ICZndDsgMCA/IHJldCA6IDEpOwogCQlpZiAoSVNfRVJSKG5iZCkpIHsKIAkJCXByX2VycigmIzM0O2ZhaWxlZCB0byBhZGQgbmV3IGRldmljZVxuJiMzNDspOwogCQkJcmV0dXJuIFBUUl9FUlIobmJkKTsKQEAgLTIyMjYsMzYgJiM0MzsyMjg1LDkgQEAgc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCX0KIAl9CiAKLQlpZiAoaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfU09DS0VUU10pIHsKLQkJc3RydWN0IG5sYXR0ciAqYXR0cjsKLQkJaW50IHJlbSwgZmQ7Ci0KLQkJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLSZndDthdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSwKLQkJCQkgICAgcmVtKSB7Ci0JCQlzdHJ1Y3QgbmxhdHRyICpzb2Nrc1tOQkRfU09DS19NQVgmIzQzOzFdOwotCi0JCQlpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkgewotCQkJCXByX2VycigmIzM0O3NvY2tzIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBTT0NLX0lURU0gYXR0clxuJiMzNDspOwotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCwKLQkJCQkJCQkgIGF0dHIsCi0JCQkJCQkJICBuYmRfc29ja19wb2xpY3ksCi0JCQkJCQkJICBpbmZvLSZndDtleHRhY2spOwotCQkJaWYgKHJldCAhPSAwKSB7Ci0JCQkJcHJfZXJyKCYjMzQ7ZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcbiYjMzQ7KTsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJaWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pCi0JCQkJY29udGludWU7Ci0JCQlmZCA9IChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKTsKLQkJCXJldCA9IG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpOwotCQkJaWYgKHJldCkKLQkJCQlnb3RvIG91dDsKLQkJfQotCX0KJiM0MzsJcmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYiwgbmJkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dDsKIAogCWlmIChpbmZvLSZndDthdHRyc1tOQkRfQVRUUl9CQUNLRU5EX0lERU5USUZJRVJdKSB7CiAJCW5iZC0mZ3Q7YmFja2VuZCA9IG5sYV9zdHJkdXAoaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfQkFDS0VORF9JREVOVElGSUVSXSwKQEAgLTIzNDQsNiAmIzQzOzIzNzYsMjAgQEAgc3RhdGljIGludCBuYmRfZ2VubF9kaXNjb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZCkKJiM0Mzt7CiYjNDM7CWludCByZXQgPSBuYmRfcmVjb25uZWN0X3NvY2tldChuYmQsIGZkKTsKJiM0MzsKJiM0MzsJaWYgKCFyZXQpIHsKJiM0MzsJCWRldl9pbmZvKG5iZF90b19kZXYobmJkKSwgJiMzNDtyZWNvbm5lY3RlZCBzb2NrZXRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChyZXQgPT0gLUVOT1NQQykKJiM0MzsJCXJldHVybiAxOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25maWd1cmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgbmJkX2RldmljZSAqbmJkID0gTlVMTDsKQEAgLTI0NDAsNDAgJiM0MzsyNDg2LDEwIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25maWd1cmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJfQogCX0KIAotCWlmIChpbmZvLSZndDthdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSkgewotCQlzdHJ1Y3QgbmxhdHRyICphdHRyOwotCQlpbnQgcmVtLCBmZDsKLQotCQlubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tJmd0O2F0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLAotCQkJCSAgICByZW0pIHsKLQkJCXN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCYjNDM7MV07Ci0KLQkJCWlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7Ci0JCQkJcHJfZXJyKCYjMzQ7c29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXG4mIzM0Oyk7Ci0JCQkJcmV0ID0gLUVJTlZBTDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCXJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLAotCQkJCQkJCSAgYXR0ciwKLQkJCQkJCQkgIG5iZF9zb2NrX3BvbGljeSwKLQkJCQkJCQkgIGluZm8tJmd0O2V4dGFjayk7Ci0JCQlpZiAocmV0ICE9IDApIHsKLQkJCQlwcl9lcnIoJiMzNDtlcnJvciBwcm9jZXNzaW5nIHNvY2sgbGlzdFxuJiMzNDspOwotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSkKLQkJCQljb250aW51ZTsKLQkJCWZkID0gKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pOwotCQkJcmV0ID0gbmJkX3JlY29ubmVjdF9zb2NrZXQobmJkLCBmZCk7Ci0JCQlpZiAocmV0KSB7Ci0JCQkJaWYgKHJldCA9PSAtRU5PU1BDKQotCQkJCQlyZXQgPSAwOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJZGV2X2luZm8obmJkX3RvX2RldihuYmQpLCAmIzM0O3JlY29ubmVjdGVkIHNvY2tldFxuJiMzNDspOwotCQl9Ci0JfQomIzQzOwlyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2IsIG5iZCk7CiYjNDM7CS8qIGZvcmVhY2hfc29jayByZXR1cm5zIGEgcG9zaXRpdmUgY291bnQgb24gc3VjY2VzczsgZG9pdCBtdXN0IHJldHVybiAwICovCiYjNDM7CWlmIChyZXQgJmd0Oz0gMCkKJiM0MzsJCXJldCA9IDA7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7bmJkLSZndDtjb25maWdfbG9jayk7CiAJbmJkX2NvbmZpZ19wdXQobmJkKTsKQEAgLTI3MjUsOCAmIzQzOzI3NDEsMTAgQEAgc3RhdGljIGludCBfX2luaXQgbmJkX2luaXQodm9pZCkKIAl9CiAJbmJkX2RiZ19pbml0KCk7CiAKJiM0MzsJaWYgKG5yX2h3X3F1ZXVlcyAmbHQ7IDEpCiYjNDM7CQlucl9od19xdWV1ZXMgPSAxOwogCWZvciAoaSA9IDA7IGkgJmx0OyBuYmRzX21heDsgaSYjNDM7JiM0MzspCi0JCW5iZF9kZXZfYWRkKGksIDEpOwomIzQzOwkJbmJkX2Rldl9hZGQoaSwgMSwgbnJfaHdfcXVldWVzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjc4NywzICYjNDM7MjgwNSw2IEBAIG1vZHVsZV9wYXJhbShuYmRzX21heCwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobmJkc19tYXgsICYjMzQ7bnVtYmVyIG9mIG5ldHdvcmsgYmxvY2sgZGV2aWNlcyB0byBpbml0aWFsaXplIChkZWZhdWx0OiAxNikmIzM0Oyk7CiBtb2R1bGVfcGFyYW0obWF4X3BhcnQsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1heF9wYXJ0LCAmIzM0O251bWJlciBvZiBwYXJ0aXRpb25zIHBlciBkZXZpY2UgKGRlZmF1bHQ6IDE2KSYjMzQ7KTsKJiM0Mzttb2R1bGVfcGFyYW0obnJfaHdfcXVldWVzLCBpbnQsIDA0NDQpOwomIzQzO01PRFVMRV9QQVJNX0RFU0MobnJfaHdfcXVldWVzLAomIzQzOyYjMzQ7bnVtYmVyIG9mIGhhcmR3YXJlIHF1ZXVlcyBmb3IgZGV2aWNlcyBwcmUtY3JlYXRlZCBhdCBtb2R1bGUgbG9hZCAoZGVmYXVsdDogMSkuICYjMzQ7KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk3MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDY4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5CRCBEcml2ZXIgUGF0Y2ggZm9yIEZ1enppbmcgT3Bwb3J0dW5pdGllcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgdGhlIE5CRCBkcml2ZXIsIGBkcml2ZXJzL2Jsb2NrL25iZC5jYCwgYW5kIGl0JiMzOTtzIG1ha2luZyBzb21lIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2VzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgbmVlZHMgZnV6emluZywgZXNwZWNpYWxseSBnaXZlbiB0aGF0IGl04oCZcyB0b3VjaGluZyBjb3JlIGxvZ2ljIGFjY2Vzc2VkIHZpYSBib3RoIGlvY3RsIGFuZCBOZXRsaW5rLiBMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgaW1wbGljYXRpb25zIGFuZCBmaWd1cmUgb3V0IHRoZSBiZXN0IGF0dGFjayBzdXJmYWNlLgoKRmlyc3QsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vZHVsZSBwYXJhbWV0ZXIsIGBucl9od19xdWV1ZXNgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGFyZWEuIFRoZW4sIGBuYmRfc2V0X3NpemVgIGlzIG1vZGlmaWVkIHRvIGhhbmRsZSBhIGBmcmVlemVgIHBhcmFtZXRlciwgd2hpY2ggaXMgYSBiaXQgY29uY2VybmluZywgYmVjYXVzZSB0aGlzIHN1Z2dlc3RzIGEgc3RhdGUgY2hhbmdlIHRoYXQgY291bGQgaW1wYWN0IGRldmljZSBiZWhhdmlvci4gRml4aW5nIHRoZSBgZmluZF9mYWxsYmFja2AgbG9naWMgaXMgYW5vdGhlciBwb2ludCBvZiBpbnRlcmVzdDsgYnVnIGZpeGVzIG9mdGVuIGV4cG9zZSBuZXcgY29kZSBwYXRocy4gUHJldmVudGluZyBzb2NrZXQgYWRkaXRpb25zIHRvIGEgcnVubmluZyBkZXZpY2UgaW4gYG5iZF9hZGRfc29ja2V0YCBpcyBhIGdvb2QgZGVmZW5zaXZlIGNoYW5nZSwgYnV0IHRoZSByZW1vdmFsIG9mIHRoZSBxdWV1ZSBmcmVlemluZy91bmZyZWV6aW5nIGNhbGxzIGlzIG5vdGV3b3J0aHksIGJlY2F1c2UgaXQgY2hhbmdlcyB0aGUgZXhpc3RpbmcgY29kZSwgZXZlbiBpZiB0byBwcm90ZWN0IHRoZSBzeXN0ZW0uIFRoZSByZXNldCBvZiB3cml0ZSBjYWNoZSBmZWF0dXJlcyBpbiBgbmJkX2NvbmZpZ19wdXRgIGlzIGFub3RoZXIgZmxhZyB0aGF0IGl0IGlzIHRvdWNoaW5nIHNlbnNpdGl2ZSBhcmVhcyBvZiB0aGUgZHJpdmVyLiBQbHVzLCBzZXR0aW5nIGBucl9od19xdWV1ZXNgIGluIGBuYmRfZGV2X2FkZGAgbWVhbnMgdGhlcmUmIzM5O3MgYSBuZXcgcGFyYW1ldGVyIGJlaW5nIGludHJvZHVjZWQgYXQgZGV2aWNlIGFkZGl0aW9uLiBSZWZhY3RvcmluZyBOZXRsaW5rIHNvY2tldCBwYXJzaW5nIGludG8gYG5iZF9nZW5sX2ZvcmVhY2hfc29ja2AgYW5kIHVzaW5nIGl0IGluIGBuYmRfZ2VubF9jb25uZWN0YCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYCBpcyBhIGJpZyBmdW5jdGlvbmFsIGNoYW5nZSB3aGljaCBuZWVkcyBmdXp6aW5nIGFzIHdlbGwuCgpUaGUgZ29hbCBpcyB0byBmaW5kIHRoZSByaWdodCBmb2N1cyBzeW1ib2xzIHRvIHRhcmdldC4KCk5vdywgbW9zdCBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIHdoaWNoIG1ha2VzIGRpcmVjdCBmdXp6aW5nIGEgbGl0dGxlIHRyaWNraWVyLCBidXQgdGhleSBhcmUgc3RpbGwgaW1wb3J0YW50LiBUaGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIGlkZWFsIGZvciBmdXp6aW5nLCBnaXZlbiB0aGF0IHRoZXkgYXJlIG1vc3QgbGlrZWx5IHRvIGJlIGV4cG9zZWQgYXMgZXh0ZXJuYWwgQVBJLiBJIHRoaW5rIGBuYmRfaW9jdGxgLCBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGFuZCBgbmJkX2dlbmxfZGlzY29ubmVjdGAgYXJlIGdvb2QgY2FuZGlkYXRlcy4gRXZlbiB0aG91Z2ggc29tZSBvZiB0aGVzZSBhcmUgc3RhdGljLCBpZiB0aGV5IGFyZSBub3QgaW5saW5lZCwgdGhleSBhcmUgZ29vZCBlbnRyeSBwb2ludHMuCgpHaXZlbiB0aGUgcHJpb3JpdHkgZm9yIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLCBJIG5lZWQgdG8gdmVyaWZ5IHdoaWNoIGFyZSBleHBvc2VkLiBUaW1lIHRvIGdvIGh1bnRpbmcgaW4gYGRyaXZlcnMvYmxvY2svbmJkLmNgIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/aW50IG5iZF9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz0xNjMyPXN0YXRpYyBpbnQgX19uYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCxcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2NzgtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2Nzk6c3RhdGljIGludCBuYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjgwLVx0XHQgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQ2hlY2tpbmcgZm9yIE5ldGxpbmsgQ2FsbGJhY2tzKioKCkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAgaW50byB0aGlzIG5ldyBtb2R1bGUsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB3ZSYjMzk7dmUgY292ZXJlZCB0aGUgYmFzaWNzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGV4cGxpY2l0bHkgdmVyaWZ5IHRoYXQgd2UmIzM5O3JlIHByb3Blcmx5IGhhbmRsaW5nIGFueSBhbmQgYWxsIHJlbGV2YW50IE5ldGxpbmsgY2FsbGJhY2tzLiBUaGlzIGlzIGZvdW5kYXRpb25hbDsgd2l0aG91dCB0aGlzIGNoZWNrZWQgYW5kIHdvcmtpbmcgY29ycmVjdGx5LCBpdCYjMzk7cyBqdXN0IG5vdCBnb2luZyB0byBnbywgYW5kIGNvdWxkIGludHJvZHVjZSByZWFsbHkgaGFyZC10by1kZWJ1ZyBwcm9ibGVtcyBkb3duc3RyZWFtLiBJIG5lZWQgdG8gcmFwaWRseSBjb25maXJtIHRoYXQgd2UgaGF2ZSB0aGUgbmVjZXNzYXJ5IG1lY2hhbmlzbXMgaW4gcGxhY2UgdG8gcmVjZWl2ZSBhbmQgcHJvY2VzcyBtZXNzYWdlcywgZXNwZWNpYWxseSBhbnl0aGluZyBhc3luY2hyb25vdXMuIENvbnNpZGVyIGFsbCBwb3RlbnRpYWwgTmV0bGluayBtZXNzYWdlIHR5cGVzLiBBbSBJIHNldCB1cCB0byBoYW5kbGUgdGhlbSBhbGw/IEFyZSB3ZSBldmVuICpleHBlY3RpbmcqIHNwZWNpZmljIHR5cGVzIGluIHRoaXMgY29udGV4dD8gTGV0JiMzOTtzIHF1aWNrbHkgcmV2aWV3IHRoZSByZWdpc3RlcmVkIGhhbmRsZXJzLCB0aGUgZmlsdGVyIGNyaXRlcmlhLCB0aGUgYnVmZmVycyB1c2VkLCBhbmQgZW5zdXJlIGRhdGEgaXMgYmVpbmcgcHJvcGVybHkgZXh0cmFjdGVkIGFuZCBoYW5kbGVkLiBUaW1lIHRvIGNvbmZpcm0gaWYgd2UmIzM5O3JlIGVmZmVjdGl2ZWx5IGxpc3RlbmluZyBhbmQgYWN0aW5nIGFwcHJvcHJpYXRlbHkgdG8gZXh0ZXJuYWwga2VybmVsIGV2ZW50cywgb3IgcmlzayB3YXN0aW5nIG91ciB0aW1lIGNoYXNpbmcgZ2hvc3RzIGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25iZF9nZW5sX2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MjExOD1zdGF0aWMgaW50IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE1OS1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjE2MDpzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxNjEte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE2NC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjE2NTpzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE2Ni17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMjg3LVxuZHJpdmVycy9ibG9jay9uYmQuYzoyMjg4Olx0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYiwgbmJkKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjI4OS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yNTAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmJkX2Nvbm5lY3RfZ2VubF9vcHNbXSA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MDUtXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjUwNjpcdFx0LmRvaXRcdD0gbmJkX2dlbmxfY29ubmVjdCxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUwNy1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAwMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgYG5iZF9nZW5sX3JlY29uZmlndXJlYCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAgZnVuY3Rpb24uIEkmIzM5O20gYXNzdW1pbmcgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgZ2VuZXJpYyBuZXRsaW5rIGludGVyZmFjZSBmb3IgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgY29uZmlndXJhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHRzIGFyZTogSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIFdoYXQgcGFyYW1ldGVycyBkb2VzIGl0IHRha2U/IFdoYXQgZG9lcyBpdCAqZG8qIHdpdGggdGhvc2UgcGFyYW1ldGVycz8gSXMgdGhpcyBhIGNvbXBsZXRlIHJlY29uZmlndXJhdGlvbiByb3V0aW5lIG9yIGEgcGllY2Ugb2YgYSBsYXJnZXIgcHV6emxlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBOQkQgc2V0dXAgYW5kIHRlYXItZG93biBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gbG9va2luZyBmb3Igd2hlcmUgdGhpcyBmaXRzIGluIHJlbGF0aW9uIHRvIHRoZSBtYWluIGRyaXZlciBsb29wLCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIGFuZCBkYXRhIHRyYW5zZmVyLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGhhbmRsZSB0aGluZ3MgbGlrZSBjaGFuZ2luZyB0aGUgYmxvY2sgc2l6ZSwgcGVyaGFwcyB0aGUgYWxsb3dlZCBtYXhpbXVtIGJsb2NrIHNpemUsIG9yIG1heWJlIGV2ZW4gZmVhdHVyZXMgcmVsYXRlZCB0byBzZWN1cml0eSBvciBlbmNyeXB0aW9uIG5lZ290aWF0aW9uLCBvciBwZXJoYXBzIGV2ZW4gcXVldWUgZGVwdGggbGltaXRhdGlvbnMuIFRoZSBkZXZpbCYjMzk7cyBpbiB0aGUgZGV0YWlsczsgSSYjMzk7bSBhbnRpY2lwYXRpbmcgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm46IEFyZSB0aGVyZSBwcm9wZXIgbG9ja2luZyBtZWNoYW5pc21zIHRvIGVuc3VyZSB0aHJlYWQtc2FmZXR5LCBlc3BlY2lhbGx5IGlmIHRoaXMgaXMgYmVpbmcgY2FsbGVkIGZyb20gYSB1c2VyLXNwYWNlIHV0aWxpdHk/IFdoYXQmIzM5O3MgdGhlIGVycm9yIGhhbmRsaW5nIGxpa2U/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb24sIGVzcGVjaWFsbHkgaW4gYSBoZWF2aWx5LXRocmVhZGVkIGVudmlyb25tZW50PyBJIGFsc28gbmVlZCB0byBjb25zaWRlciBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zIGFuZCBpZiB0aGUgcmVjb25maWd1cmUgaXMgcHJvcGVybHkgdmFsaWRhdGluZyBpbnB1dHMuIEFscmlnaHQsIGxldCYjMzk7cyBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIGlmIG15IGFzc3VtcHRpb25zIGhvbGQgd2F0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmJkX2dlbmxfcmVjb25maWd1cmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MjM3OT1zdGF0aWMgaW50IG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzOTItXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIzOTM6c3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzk0LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI1MDI9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBuYmRfY29ubmVjdF9nZW5sX29wc1tdID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUxNS1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTE2Olx0XHQuZG9pdFx0PSBuYmRfZ2VubF9yZWNvbmZpZ3VyZSxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUxNy1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYyNAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRGlzY29ubmVjdCBGdW5jdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBuYmRfZ2VubF9kaXNjb25uZWN0YC4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB3aGVyZSBjbGllbnQgZGlzY29ubmVjdGlvbnMgYXJlIGFjdHVhbGx5ICpoYW5kbGVkKiB3aXRoaW4gdGhlIE5CRCAoTmV0d29yayBCbG9jayBEZXZpY2UpIGtlcm5lbCBtb2R1bGUsIGZyb20gYSBnZW5lcmljIG5ldGxpbmsgcGVyc3BlY3RpdmUuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4YWN0IHNlcXVlbmNlIG9mIGV2ZW50cyB0aGF0IHRyaWdnZXJzIHRoaXMgZnVuY3Rpb24sIGFuZCB3aGF0IHRoZSBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludHMgYXJlLiBXaGF0IHN0YXRlIHRyYW5zaXRpb25zIGFyZSBpbnZvbHZlZD8gV2hhdCBsb2NrcyBhcmUgaGVsZCwgYW5kIGZvciBob3cgbG9uZz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHJhY2UgY29uZGl0aW9ucyB0aGF0IGNvdWxkIGJlIGV4cGxvaXRlZCBoZXJlPyBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBncmFjZWZ1bGx5IChvciBub3QpIGl0IGhhbmRsZXMgcGFydGlhbGx5IGNvbXBsZXRlZCBvcGVyYXRpb25zIGR1cmluZyBhIGRpc2Nvbm5lY3Qg4oCTIGRvZXMgaXQgbGVhdmUgdGhlIGJsb2NrIGRldmljZSBpbiBhIGNvbnNpc3RlbnQgc3RhdGU/IFdoYXQgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3Igb25nb2luZyBJL08/IEdvdHRhIGVuc3VyZSB3ZSBhcmVuJiMzOTt0IGludHJvZHVjaW5nIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGhlcmUuIE15IGZvY3VzIHdpbGwgYmUgb24gbWVtb3J5IG1hbmFnZW1lbnQgdG9vOyBob3cgZWZmaWNpZW50bHkgYXJlIHJlc291cmNlcyBmcmVlZD8gQW55IGNoYW5jZSBvZiBsZWFrcz8gTGV0JiMzOTtzIGNoZWNrIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBzdXJwcmlzZXMgaXQgaG9sZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25iZF9nZW5sX2Rpc2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MjMyMz1zdGF0aWMgdm9pZCBuYmRfZGlzY29ubmVjdF9hbmRfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzQzLVxuZHJpdmVycy9ibG9jay9uYmQuYzoyMzQ0OnN0YXRpYyBpbnQgbmJkX2dlbmxfZGlzY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzQ1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI1MDI9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBuYmRfY29ubmVjdF9nZW5sX29wc1tdID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUxMC1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTExOlx0XHQuZG9pdFx0PSBuYmRfZ2VubF9kaXNjb25uZWN0LFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTEyLVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxNDEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgYG5iZF9nZW5sX3N0YXR1c2AqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoaW5ncy4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gY2hlY2sgYG5iZF9nZW5sX3N0YXR1c2AuIEl0JiMzOTtzIHRoZSBnby10byBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB3aGVyZSB0aGluZ3Mgc3RhbmQgd2l0aCB0aGUgR2VuZXJpYyBOZXRsaW5rIGludGVyZmFjZSBhbmQsIG1vcmUgc3BlY2lmaWNhbGx5LCBOZXR3b3JrIEJsb2NrIERldmljZSBpbnRlcmFjdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcgb2YgdGhlIGRldmljZSBzdGF0dXMsIHdoZXRoZXIgb3Igbm90IHRoZSBzdWJzeXN0ZW0gaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LCBhbnkgcmVjZW50IGVycm9ycyBpdCYjMzk7cyBlbmNvdW50ZXJlZCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBnZW5lcmFsIGhlYWx0aCBvZiB0aGUgTkJEIHByb3RvY29sIGF0IHRoZSBHZW5lcmljIE5ldGxpbmsgbGV2ZWwuIFRoaXMgd2lsbCwgaG9wZWZ1bGx5LCBxdWlja2x5IGlsbHVtaW5hdGUgdGhlIHByb2JsZW0uIEZyb20gdGhlcmUsIEkgY2FuIHBpbnBvaW50IHdoYXQgdGhlIG5leHQgbG9naWNhbCBpbnZlc3RpZ2F0aW9uIGlzLiBQZXJoYXBzIGEgZGVlcGVyIGRpdmUgaW50byBzcGVjaWZpYyBlcnJvciBjb2Rlcywgb3IgbWF5YmUgaXTigJlzIGEgZGVwZW5kZW5jeSBpc3N1ZSB3aXRoIGEgcmVsYXRlZCBtb2R1bGUuIEVpdGhlciB3YXksIGBuYmRfZ2VubF9zdGF0dXNgIGlzIHRoZSBnYXRld2F5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25iZF9nZW5sX3N0YXR1cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz0xNzU9c3RhdGljIHZvaWQgbmJkX2Nvbm5lY3RfcmVwbHkoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgaW50IGluZGV4KTtcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTc2OnN0YXRpYyBpbnQgbmJkX2dlbmxfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xNzctc3RhdGljIHZvaWQgbmJkX2RlYWRfbGlua193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yNTAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmJkX2Nvbm5lY3RfZ2VubF9vcHNbXSA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MjAtXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjUyMTpcdFx0LmRvaXRcdD0gbmJkX2dlbmxfc3RhdHVzLFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTIyLVx0fSxcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI1NzQ9c3RhdGljIGludCBzdGF0dXNfY2IoaW50IGlkLCB2b2lkICpwdHIsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTc5LVxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTgwOnN0YXRpYyBpbnQgbmJkX2dlbmxfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1ODEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc2NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIEludGVyZmFjZSoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBjb3JlIGVudHJ5IHBvaW50cyBmb3IgdGhpcyBOQkQgZHJpdmVyLiBGaXJzdCBvZmYsIEkmIzM5O3ZlIGdvdCBgbmJkX2lvY3RsYCwgd2hpY2ggSSBleHBlY3QgdG8gaGFuZGxlIHRoZSBjbGFzc2ljIGlvY3RsIGNhbGxzIOKAkyB0aG9zZSBhcmUgdGhlIGJyZWFkIGFuZCBidXR0ZXIgZm9yIGludGVyYWN0aW9uLiBUaGVuIHRoZXJlIGFyZSB0aGUgZ2VubCAoR2VuZXJpYyBOZXRsaW5rKSBmdW5jdGlvbnM6IGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYG5iZF9nZW5sX2Rpc2Nvbm5lY3RgLCBhbmQgYG5iZF9nZW5sX3N0YXR1c2AuIFRob3NlIGFyZSBsaWtlbHkgdGhlIG1vZGVybiwgbW9yZSByb2J1c3QgaW50ZXJmYWNlIGxldmVyYWdpbmcgdGhlIE5ldGxpbmsgcHJvdG9jb2wuIEFuZCwgb2YgY291cnNlLCB0aGVyZSYjMzk7cyBgbmJkX2luaXRgLCB3aGljaCBJJiMzOTtkIGltbWVkaWF0ZWx5IHBlZyBhcyB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUsIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBkcml2ZXImIzM5O3MgZW52aXJvbm1lbnQuIE5vdywgbGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIE5CRCBpcyBldmVuIGNvbmZpZ3VyZWQgaW50byB0aGUga2VybmVsLiBUaW1lIHRvIGNoZWNrIHRoZSBLY29uZmlnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0RFVl9OQkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTE5ND1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTUtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTk2OmNvbmZpZyBCTEtfREVWX05CRFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5Ny1cdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgYmxvY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOgoKKipVbnBhY2tpbmcgRGVwZW5kZW5jaWVzOiBCTEtcX0RFVlxfTkJEKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBgQkxLX0RFVl9OQkRgLi4uIHdoYXQgb3RoZXIgcGllY2VzIG9mIHRoZSBrZXJuZWwgcHV6emxlIGRvZXMgKml0KiBsZWFuIG9uPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmb3VuZGF0aW9uYWwgcmVxdWlyZW1lbnRzLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IHVuZGVyc3RhbmRpbmcgaXRzIGRpcmVjdCBmdW5jdGlvbmFsaXR5LCBidXQgYWxzbyBhYm91dCBtYXBwaW5nIG91dCBpdHMgcmVsYXRpb25zaGlwcyB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJiMzOTttIGVzc2VudGlhbGx5IGJ1aWxkaW5nIGEgZGVwZW5kZW5jeSBncmFwaCBpbiBteSBoZWFkLiBXaGF0IG90aGVyIHN1YnN5c3RlbXMgb3Iga2VybmVsIG1vZHVsZXMgZG9lcyBpdCBjYWxsPyBXaGF0IGluZnJhc3RydWN0dXJlIGRvZXMgaXQgbGV2ZXJhZ2U/IFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGJlIGNyaXRpY2FsIHRvIGZ1bGx5IGdyYXNwaW5nIGl0cyByb2xlIGFuZCBiZWhhdmlvci4gU28sIGxldCYjMzk7cyBzdGFydCBwZWVsaW5nIGJhY2sgdGhlIGxheWVycyBhbmQgc2VlIHdoYXQgbWFrZXMgdGhpcyB0aGluZyB0aWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTk2Olx0Y29uZmlnIEJMS19ERVZfTkJEXG4gMTk3Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gMTk4Olx0XHRkZXBlbmRzIG9uIE5FVFxuIDE5OTpcdFx0aGVscFxuIDIwMDpcdFx0ICBTYXlpbmcgWSBoZXJlIHdpbGwgYWxsb3cgeW91ciBjb21wdXRlciB0byBiZSBhIGNsaWVudCBmb3IgbmV0d29ya1xuIDIwMTpcdFx0ICBibG9jayBkZXZpY2VzLCBpLmUuIGl0IHdpbGwgYmUgYWJsZSB0byB1c2UgYmxvY2sgZGV2aWNlcyBleHBvcnRlZCBieVxuIDIwMjpcdFx0ICBzZXJ2ZXJzIChtb3VudCBmaWxlIHN5c3RlbXMgb24gdGhlbSBldGMuKS4gQ29tbXVuaWNhdGlvbiBiZXR3ZWVuXG4gMjAzOlx0XHQgIGNsaWVudCBhbmQgc2VydmVyIHdvcmtzIG92ZXIgVENQL0lQIG5ldHdvcmtpbmcsIGJ1dCB0byB0aGUgY2xpZW50XG4gMjA0Olx0XHQgIHByb2dyYW0gdGhpcyBpcyBoaWRkZW46IGl0IGxvb2tzIGxpa2UgYSByZWd1bGFyIGxvY2FsIGZpbGUgYWNjZXNzIHRvXG4gMjA1Olx0XHQgIGEgYmxvY2sgZGV2aWNlIHNwZWNpYWwgZmlsZSBzdWNoIGFzIC9kZXYvbmQwLlxuIDIwNjpcdFxuIDIwNzpcdFx0ICBOZXR3b3JrIGJsb2NrIGRldmljZXMgYWxzbyBhbGxvd3MgeW91IHRvIHJ1biBhIGJsb2NrLWRldmljZSBpblxuIDIwODpcdFx0ICB1c2VybGFuZCAobWFraW5nIHNlcnZlciBhbmQgY2xpZW50IHBoeXNpY2FsbHkgdGhlIHNhbWUgY29tcHV0ZXIsXG4gMjA5Olx0XHQgIGNvbW11bmljYXRpbmcgdXNpbmcgdGhlIGxvb3BiYWNrIG5ldHdvcmsgZGV2aWNlKS5cbiAyMTA6XHRcbiAyMTE6XHRcdCAgUmVhZCBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmxvY2tkZXYvbmJkLnJzdFx1MDAzZSBmb3IgbW9yZSBpbmZvcm1hdGlvbixcbiAyMTI6XHRcdCAgZXNwZWNpYWxseSBhYm91dCB3aGVyZSB0byBmaW5kIHRoZSBzZXJ2ZXIgY29kZSwgd2hpY2ggcnVucyBpbiB1c2VyXG4gMjEzOlx0XHQgIHNwYWNlIGFuZCBkb2VzIG5vdCBuZWVkIHNwZWNpYWwga2VybmVsIHN1cHBvcnQuXG4gMjE0Olx0XG4gMjE1Olx0XHQgIE5vdGUgdGhhdCB0aGlzIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIG5ldHdvcmsgZmlsZSBzeXN0ZW1zIE5GU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTczNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJMS19ERVZfTkJEIE1vZHVsZSoqCgpPa2F5LCBzbyBgQkxLX0RFVl9OQkRgIHJlcXVpcmVzIGBORVRgLiBUaGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g7IHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBhcmUganVzdCBgQkxLX0RFVl9OQkRgLiBOb3csIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBUaGUgcHJvbXB0IGVtcGhhc2l6ZXMgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBMZXQmIzM5O3Mgc2VlIGlmIGFueSBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBub24tc3RhdGljLiBIYW5nIG9uLi4uIGBuYmRfaW9jdGxgIGlzICpzdGF0aWMqLiBBbmQgc28gaXMgYG5iZF9nZW5sX2Nvbm5lY3RgLiBIbW0uLi4gYXJlIHRoZXJlICphbnkqIG1vZGlmaWVkIGZ1bmN0aW9ucyB0aGF0IGFyZW4mIzM5O3Qgc3RhdGljPyBMb29rcyBsaWtlIG5vLCB0aGV5IGFyZSBhbGwgc3RhdGljLgoKQnV0IHRoZSBndWlkYW5jZSBJJiMzOTttIGdpdmVuIHByZWZlcnMgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMuIElmICphbGwqIG9mIHRoZSBlbnRyeSBwb2ludHMgYXJlIHN0YXRpYywgdGhlbiB3ZSBjYW4gc3RpbGwgdXNlIHRoZSBzdGF0aWMgb25lcyBpZiB0aGV5IGFyZSBub3QgaW5saW5lZC4gUmlnaHQ/IExldCBtZSBjaGVjay4gYG5iZF9pb2N0bGAsIGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYW5kIGBuYmRfZ2VubF9kaXNjb25uZWN0YCBhcmUgYWxsIHJlZ2lzdGVyZWQgaW4gc3RydWN0cywgbWVhbmluZyB0aGV5JiMzOTtyZSBub3QgaW5saW5lZC4gT2theSwgc28gdGhhdCBzaG91bGQgYmUgZmluZSB0aGVuLiBXYWl0LCBJIHRoaW5rIGBuYmRfaW9jdGxgIGdldHMgY2FsbGVkIGJ5IHNvbWV0aGluZyBpbiBgbmJkX2ZvcHNgLCBzbyBJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgdGhhdC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuYmRfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MTYyMj1zdGF0aWMgdm9pZCBuYmRfc2V0X2NtZF90aW1lb3V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHU2NCB0aW1lb3V0KVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYzMS0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGNvbmZpZ19sb2NrIGhlbGQgKi9cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTYzMjpzdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MzMtXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2NzgtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2Nzk6c3RhdGljIGludCBuYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjgwLVx0XHQgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTcwMS1cdCAgICAoY21kID09IE5CRF9ESVNDT05ORUNUIHx8IGNtZCA9PSBOQkRfQ0xFQVJfU09DSykpXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3MDI6XHRcdGVycm9yID0gX19uYmRfaW9jdGwoYmRldiwgbmJkLCBjbWQsIGFyZyk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MDMtXHRlbHNlXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0xODA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbmJkX2ZvcHMgPVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTgxMC1cdC5yZWxlYXNlID1cdG5iZF9yZWxlYXNlLFxuZHJpdmVycy9ibG9jay9uYmQuYzoxODExOlx0LmlvY3RsID1cdG5iZF9pb2N0bCxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTgxMjpcdC5jb21wYXRfaW9jdGwgPVx0bmJkX2lvY3RsLFxuZHJpdmVycy9ibG9jay9uYmQuYy0xODEzLVx0LmZyZWVfZGlzayA9XHRuYmRfZnJlZV9kaXNrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcxNwoJCQkJCQkJb3V0cHV0OiAxNTEKCQkJCQkJCXRob3VnaHRzOiA3OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOQkQgRHJpdmVyIFBhdGNoIGZvciBGdXp6aW5nIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIE5CRCBkcml2ZXIsIGFuZCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyBpZGVudGlmeWluZyB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gSXQmIzM5O3MgY2xlYXIgdGhhdCBgbmJkX2lvY3RsYCBoYW5kbGVzIHRoZSBpb2N0bCBpbnRlcmZhY2UsIGFuZCBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGFuZCBgbmJkX2dlbmxfZGlzY29ubmVjdGAgYXJlIHRoZSBOZXRsaW5rIGhhbmRsZXJzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoZSByaWdodCBmdW5jdGlvbnMgdG8gdGFyZ2V0IHdpdGggZnV6emluZy4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gaW5jbHVkZSB0aG9zZSwgYWxvbmcgd2l0aCBgbmJkX2FkZF9zb2NrZXRgLCBgbmJkX3NldF9zaXplYCwgYGZpbmRfZmFsbGJhY2tgLCBgbmJkX2NvbmZpZ19wdXRgLCBgbmJkX3N0YXJ0X2RldmljZWAsIGFuZCBgbmJkX2Rldl9hZGRgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBtb3N0IGNyaXRpY2FsIHBvaW50cy4gSG93ZXZlciwgSSBuZWVkIHRvIHN0aWNrIHdpdGggd2hhdCB0aGUgcHJvbXB0IHNheXMsIHdoaWNoIGlzIHRvICYjMzQ7UHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zJiMzNDsuCgpBbHJpZ2h0LCBzbyBhIHF1aWNrIGNoZWNrIHRlbGxzIG1lIHRoYXQgYG5iZF9hZGRfc29ja2V0YCwgYG5iZF9zZXRfc2l6ZWAsIGV0Yy4gYXJlIHN0YXRpYywgd2hpY2ggSSBleHBlY3RlZC4gSG93ZXZlciwgYG5iZF9pb2N0bGAgYW5kIGBuYmRfZ2VubF9jb25uZWN0YCBhcmUgZW50cnkgcG9pbnRzLCBhbmQgYWxzbyBzdGF0aWMuIEJ1dCB0aGVzZSBhcmVuJiMzOTt0IGlubGluZWQsIHRoZXkgYXJlIHJlZ2lzdGVyZWQgYXMgY2FsbGJhY2tzLiBJdCBsb29rcyBsaWtlIHRoZSBtb3N0IHN1aXRhYmxlIGVudHJ5IHBvaW50cyBhcmUgdGhlIGlvY3RsIGFuZCBOZXRsaW5rIGhhbmRsZXJzOiBgbmJkX2lvY3RsYCwgYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBhbmQgYG5iZF9nZW5sX2Rpc2Nvbm5lY3RgLiBUaGF0JiMzOTtzIHdoYXQgSSB3aWxsIGJlIHRhcmdldGluZy4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgd2lsbCB2ZXJpZnkgdGhhdCBgbmJkX2lvY3RsYCBpcyBpbmRlZWQgc3RhdGljLiBPa2F5LCB5ZXMsIGl0JiMzOTtzIGBzdGF0aWMgaW50IG5iZF9pb2N0bCguLi4pYC4KClRoaXMgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgbGlrZSB0aGUgYG5yX2h3X3F1ZXVlc2AgbW9kdWxlIHBhcmFtZXRlciwgdGhlIGFkZGl0aW9uIG9mIHRoZSBgZnJlZXplYCBib29sZWFuIHRvIGBuYmRfc2V0X3NpemVgLCBmaXhlcyB0byBgZmluZF9mYWxsYmFja2AsIGFuZCBjaGFuZ2VzIHRvIHByZXZlbnQgYWRkaW5nIHNvY2tldHMgdG8gYSBydW5uaW5nIGRldmljZS4gVGhlIE5ldGxpbmsgc29ja2V0IHBhcnNpbmcgaGFzIGJlZW4gcmVmYWN0b3JlZCBhcyB3ZWxsLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNvdWxkIGJlbmVmaXQgZnJvbSBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9OQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuYmRfaW9jdGwmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfY29ubmVjdCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9yZWNvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9kaXNjb25uZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIsIGNoYW5naW5nIGhvdyBzb2NrZXRzIGFyZSBhZGRlZCwgaG93IGZhbGxiYWNrIGNvbm5lY3Rpb25zIGFyZSBmb3VuZCwgYW5kIGhvdyBibG9jayBzaXplcyBhcmUgc2V0LiBJdCBhbHNvIGludHJvZHVjZXMgYSBuZXcgbW9kdWxlIHBhcmFtZXRlciBmb3IgaGFyZHdhcmUgcXVldWVzIGFuZCByZWZhY3RvcnMgbmV0bGluayBzb2NrZXQgcGFyc2luZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIE5CRCBsb2dpYyByZWFjaGFibGUgdmlhIGlvY3RsIGFuZCBuZXRsaW5rLCBzbyB0aGV5IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTkJEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmJkX2lvY3RsJiMzNDssCiAgICAmIzM0O25iZF9nZW5sX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfcmVjb25maWd1cmUmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfZGlzY29ubmVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgZHJpdmVyLCBjaGFuZ2luZyBob3cgc29ja2V0cyBhcmUgYWRkZWQsIGhvdyBmYWxsYmFjayBjb25uZWN0aW9ucyBhcmUgZm91bmQsIGFuZCBob3cgYmxvY2sgc2l6ZXMgYXJlIHNldC4gSXQgYWxzbyBpbnRyb2R1Y2VzIGEgbmV3IG1vZHVsZSBwYXJhbWV0ZXIgZm9yIGhhcmR3YXJlIHF1ZXVlcyBhbmQgcmVmYWN0b3JzIG5ldGxpbmsgc29ja2V0IHBhcnNpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBOQkQgbG9naWMgcmVhY2hhYmxlIHZpYSBpb2N0bCBhbmQgbmV0bGluaywgc28gdGhleSBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6MDQ6MjguODY5MjI4MjY3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5MjYzMDg3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYmRfaW9jdGxcIixcbiAgICBcIm5iZF9nZW5sX2Nvbm5lY3RcIixcbiAgICBcIm5iZF9nZW5sX3JlY29uZmlndXJlXCIsXG4gICAgXCJuYmRfZ2VubF9kaXNjb25uZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIGRyaXZlciwgY2hhbmdpbmcgaG93IHNvY2tldHMgYXJlIGFkZGVkLCBob3cgZmFsbGJhY2sgY29ubmVjdGlvbnMgYXJlIGZvdW5kLCBhbmQgaG93IGJsb2NrIHNpemVzIGFyZSBzZXQuIEl0IGFsc28gaW50cm9kdWNlcyBhIG5ldyBtb2R1bGUgcGFyYW1ldGVyIGZvciBoYXJkd2FyZSBxdWV1ZXMgYW5kIHJlZmFjdG9ycyBuZXRsaW5rIHNvY2tldCBwYXJzaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgTkJEIGxvZ2ljIHJlYWNoYWJsZSB2aWEgaW9jdGwgYW5kIG5ldGxpbmssIHNvIHRoZXkgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6MDQ6MjguODY5MjM1MDQ3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDE1MjUzMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0Y2UyM2Y5MjVmYzRkZDU0YTZhZDliZDkwNmU4MGM5ZjMxMjUyZGQ5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMxIDIwOjA0OjI3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbmJkLmMgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXFxuaW5kZXggOGYxMDc2MmU5MGVmNy4uMjE5NGM3ZDdiMmVhZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jXFxuKysrIGIvZHJpdmVycy9ibG9jay9uYmQuY1xcbkBAIC0xNjYsNiArMTY2LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKm5iZF9kYmdfZGlyO1xcbiBcXG4gc3RhdGljIHVuc2lnbmVkIGludCBuYmRzX21heCA9IDE2O1xcbiBzdGF0aWMgaW50IG1heF9wYXJ0ID0gMTY7XFxuK3N0YXRpYyBpbnQgbnJfaHdfcXVldWVzID0gMTtcXG4gc3RhdGljIGludCBwYXJ0X3NoaWZ0O1xcbiBcXG4gc3RhdGljIGludCBuYmRfZGV2X2RiZ19pbml0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpO1xcbkBAIC0zMzEsNyArMzMyLDggQEAgc3RhdGljIHZvaWQgbmJkX21hcmtfbnNvY2tfZGVhZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxcbiBcXHRuc29jay1cXHUwMDNlc2VudCA9IDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpXFxuK3N0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUsXFxuK1xcdFxcdFxcdGJvb2wgZnJlZXplKVxcbiB7XFxuIFxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xcbiBcXHRpbnQgZXJyb3I7XFxuQEAgLTM3MSw3ICszNzMsMTMgQEAgc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcXG4gXFxuIFxcdGxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSBibGtzaXplO1xcbiBcXHRsaW0ucGh5c2ljYWxfYmxvY2tfc2l6ZSA9IGJsa3NpemU7XFxuLVxcdGVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUsIFxcdTAwMjZsaW0pO1xcbitcXG4rXFx0aWYgKGZyZWV6ZSlcXG4rXFx0XFx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obmJkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNmxpbSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlLCBcXHUwMDI2bGltKTtcXG4rXFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXG5AQCAtMTA2MSw0MCArMTA2OSwzMSBAQCBzdGF0aWMgaW50IGZpbmRfZmFsbGJhY2soc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGluZGV4KVxcbiBcXHRpbnQgbmV3X2luZGV4ID0gLTE7XFxuIFxcdHN0cnVjdCBuYmRfc29jayAqbnNvY2sgPSBjb25maWctXFx1MDAzZXNvY2tzW2luZGV4XTtcXG4gXFx0aW50IGZhbGxiYWNrID0gbnNvY2stXFx1MDAzZWZhbGxiYWNrX2luZGV4O1xcbitcXHRpbnQgaTtcXG4gXFxuIFxcdGlmICh0ZXN0X2JpdChOQkRfUlRfRElTQ09OTkVDVEVELCBcXHUwMDI2Y29uZmlnLVxcdTAwM2VydW50aW1lX2ZsYWdzKSlcXG4gXFx0XFx0cmV0dXJuIG5ld19pbmRleDtcXG4gXFxuLVxcdGlmIChjb25maWctXFx1MDAzZW51bV9jb25uZWN0aW9ucyBcXHUwMDNjPSAxKSB7XFxuLVxcdFxcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLVxcdTAwM2VkaXNrKSxcXG4tXFx0XFx0XFx0XFx0ICAgIFxcXCJEZWFkIGNvbm5lY3Rpb24sIGZhaWxlZCB0byBmaW5kIGEgZmFsbGJhY2tcXFxcblxcXCIpO1xcbi1cXHRcXHRyZXR1cm4gbmV3X2luZGV4O1xcbi1cXHR9XFxuK1xcdGlmIChjb25maWctXFx1MDAzZW51bV9jb25uZWN0aW9ucyBcXHUwMDNjPSAxKVxcbitcXHRcXHRnb3RvIG5vX2ZhbGxiYWNrO1xcbiBcXG4gXFx0aWYgKGZhbGxiYWNrIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgZmFsbGJhY2sgXFx1MDAzYyBjb25maWctXFx1MDAzZW51bV9jb25uZWN0aW9ucyBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIWNvbmZpZy1cXHUwMDNlc29ja3NbZmFsbGJhY2tdLVxcdTAwM2VkZWFkKVxcbiBcXHRcXHRyZXR1cm4gZmFsbGJhY2s7XFxuIFxcbi1cXHRpZiAobnNvY2stXFx1MDAzZWZhbGxiYWNrX2luZGV4IFxcdTAwM2MgMCB8fFxcbi1cXHQgICAgbnNvY2stXFx1MDAzZWZhbGxiYWNrX2luZGV4IFxcdTAwM2U9IGNvbmZpZy1cXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIHx8XFxuLVxcdCAgICBjb25maWctXFx1MDAzZXNvY2tzW25zb2NrLVxcdTAwM2VmYWxsYmFja19pbmRleF0tXFx1MDAzZWRlYWQpIHtcXG4tXFx0XFx0aW50IGk7XFxuLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjb25maWctXFx1MDAzZW51bV9jb25uZWN0aW9uczsgaSsrKSB7XFxuLVxcdFxcdFxcdGlmIChpID09IGluZGV4KVxcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0XFx0aWYgKCFjb25maWctXFx1MDAzZXNvY2tzW2ldLVxcdTAwM2VkZWFkKSB7XFxuLVxcdFxcdFxcdFxcdG5ld19pbmRleCA9IGk7XFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdH1cXG4tXFx0XFx0bnNvY2stXFx1MDAzZWZhbGxiYWNrX2luZGV4ID0gbmV3X2luZGV4O1xcbi1cXHRcXHRpZiAobmV3X2luZGV4IFxcdTAwM2MgMCkge1xcbi1cXHRcXHRcXHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC1cXHUwMDNlZGlzayksXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBcXFwiRGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0cmV0dXJuIG5ld19pbmRleDtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvbmZpZy1cXHUwMDNlbnVtX2Nvbm5lY3Rpb25zOyBpKyspIHtcXG4rXFx0XFx0aWYgKGkgIT0gaW5kZXggXFx1MDAyNlxcdTAwMjYgIWNvbmZpZy1cXHUwMDNlc29ja3NbaV0tXFx1MDAzZWRlYWQpIHtcXG4rXFx0XFx0XFx0bmV3X2luZGV4ID0gaTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbi1cXHRuZXdfaW5kZXggPSBuc29jay1cXHUwMDNlZmFsbGJhY2tfaW5kZXg7XFxuK1xcdG5zb2NrLVxcdTAwM2VmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDtcXG4rXFx0aWYgKG5ld19pbmRleCBcXHUwMDNlPSAwKVxcbitcXHRcXHRyZXR1cm4gbmV3X2luZGV4O1xcbitcXG4rbm9fZmFsbGJhY2s6XFxuK1xcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLVxcdTAwM2VkaXNrKSxcXG4rXFx0XFx0XFx0ICAgIFxcXCJEZWFkIGNvbm5lY3Rpb24sIGZhaWxlZCB0byBmaW5kIGEgZmFsbGJhY2tcXFxcblxcXCIpO1xcbiBcXHRyZXR1cm4gbmV3X2luZGV4O1xcbiB9XFxuIFxcbkBAIC0xMjgxLDIzICsxMjgwLDIzIEBAIHN0YXRpYyBpbnQgbmJkX2FkZF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcsXFxuIFxcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XFxuIFxcdHN0cnVjdCBuYmRfc29jayAqKnNvY2tzO1xcbiBcXHRzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrO1xcbi1cXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHQvKiBBcmcgd2lsbCBiZSBjYXN0IHRvIGludCwgY2hlY2sgaXQgdG8gYXZvaWQgb3ZlcmZsb3cgKi9cXG4gXFx0aWYgKGFyZyBcXHUwMDNlIElOVF9NQVgpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKG5iZC1cXHUwMDNlcGlkKSB7XFxuK1xcdFxcdGRldl9lcnIoZGlza190b19kZXYobmJkLVxcdTAwM2VkaXNrKSxcXG4rXFx0XFx0XFx0XFxcIkNhbm5vdCBhZGQgc29ja2V0IHRvIGEgcnVubmluZyBkZXZpY2VcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXHR9XFxuK1xcbiBcXHRzb2NrID0gbmJkX2dldF9zb2NrZXQobmJkLCBhcmcsIFxcdTAwMjZlcnIpO1xcbiBcXHRpZiAoIXNvY2spXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdG5iZF9yZWNsYXNzaWZ5X3NvY2tldChzb2NrKTtcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGdldCBhbnkgZXJyYW50IHJlcXVlc3RzIHdoaWxlIHdlJ3JlXFxuLVxcdCAqIHJlYWxsb2NhdGluZyB0aGUgLVxcdTAwM2Vzb2NrcyBhcnJheS5cXG4tXFx0ICovXFxuLVxcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG4tXFxuIFxcdGlmICghbmV0bGluayBcXHUwMDI2XFx1MDAyNiAhbmJkLVxcdTAwM2V0YXNrX3NldHVwIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhdGVzdF9iaXQoTkJEX1JUX0JPVU5ELCBcXHUwMDI2Y29uZmlnLVxcdTAwM2VydW50aW1lX2ZsYWdzKSlcXG4gXFx0XFx0bmJkLVxcdTAwM2V0YXNrX3NldHVwID0gY3VycmVudDtcXG5AQCAtMTMzNywxMiArMTMzNiwxMCBAQCBzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxcbiBcXHRJTklUX1dPUksoXFx1MDAyNm5zb2NrLVxcdTAwM2V3b3JrLCBuYmRfcGVuZGluZ19jbWRfd29yayk7XFxuIFxcdHNvY2tzW2NvbmZpZy1cXHUwMDNlbnVtX2Nvbm5lY3Rpb25zKytdID0gbnNvY2s7XFxuIFxcdGF0b21pY19pbmMoXFx1MDAyNmNvbmZpZy1cXHUwMDNlbGl2ZV9jb25uZWN0aW9ucyk7XFxuLVxcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlLCBtZW1mbGFncyk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIHB1dF9zb2NrZXQ6XFxuLVxcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlLCBtZW1mbGFncyk7XFxuIFxcdHNvY2tmZF9wdXQoc29jayk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG5AQCAtMTQ3MSw4ICsxNDY4LDEzIEBAIHN0YXRpYyB2b2lkIG5iZF9jb25maWdfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuIFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX211dGV4X2xvY2soXFx1MDAyNm5iZC1cXHUwMDNlY29uZmlnX3JlZnMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZuYmQtXFx1MDAzZWNvbmZpZ19sb2NrKSkge1xcbiBcXHRcXHRzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnID0gbmJkLVxcdTAwM2Vjb25maWc7XFxuK1xcdFxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xcbiBcXHRcXHRuYmRfZGV2X2RiZ19jbG9zZShuYmQpO1xcbiBcXHRcXHRpbnZhbGlkYXRlX2Rpc2sobmJkLVxcdTAwM2VkaXNrKTtcXG4rXFx0XFx0LyogcmVzZXQgd3JpdGUgY2FjaGUgKi9cXG4rXFx0XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG4rXFx0XFx0bGltLmZlYXR1cmVzIFxcdTAwMjY9IH4oQkxLX0ZFQVRfV1JJVEVfQ0FDSEUgfCBCTEtfRkVBVF9GVUEpO1xcbitcXHRcXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlLCBcXHUwMDI2bGltKTtcXG4gXFx0XFx0aWYgKG5iZC1cXHUwMDNlY29uZmlnLVxcdTAwM2VieXRlc2l6ZSlcXG4gXFx0XFx0XFx0a29iamVjdF91ZXZlbnQoXFx1MDAyNm5iZF90b19kZXYobmJkKS1cXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xcbiBcXHRcXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KE5CRF9SVF9IQVNfUElEX0ZJTEUsXFxuQEAgLTE1NzQsNyArMTU3Niw3IEBAIHN0YXRpYyBpbnQgbmJkX3N0YXJ0X2RldmljZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbiBcXHRcXHRhcmdzLVxcdTAwM2VpbmRleCA9IGk7XFxuIFxcdFxcdHF1ZXVlX3dvcmsobmJkLVxcdTAwM2VyZWN2X3dvcmtxLCBcXHUwMDI2YXJncy1cXHUwMDNld29yayk7XFxuIFxcdH1cXG4tXFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGNvbmZpZy1cXHUwMDNlYnl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZykpO1xcbitcXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgY29uZmlnLVxcdTAwM2VieXRlc2l6ZSwgbmJkX2Jsa3NpemUoY29uZmlnKSwgZmFsc2UpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IG5iZF9zdGFydF9kZXZpY2VfaW9jdGwoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG5AQCAtMTY0MiwxMyArMTY0NCwxMyBAQCBzdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXFxuIFxcdGNhc2UgTkJEX1NFVF9TT0NLOlxcbiBcXHRcXHRyZXR1cm4gbmJkX2FkZF9zb2NrZXQobmJkLCBhcmcsIGZhbHNlKTtcXG4gXFx0Y2FzZSBOQkRfU0VUX0JMS1NJWkU6XFxuLVxcdFxcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBjb25maWctXFx1MDAzZWJ5dGVzaXplLCBhcmcpO1xcbitcXHRcXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgY29uZmlnLVxcdTAwM2VieXRlc2l6ZSwgYXJnLCB0cnVlKTtcXG4gXFx0Y2FzZSBOQkRfU0VUX1NJWkU6XFxuLVxcdFxcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBhcmcsIG5iZF9ibGtzaXplKGNvbmZpZykpO1xcbitcXHRcXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYXJnLCBuYmRfYmxrc2l6ZShjb25maWcpLCB0cnVlKTtcXG4gXFx0Y2FzZSBOQkRfU0VUX1NJWkVfQkxPQ0tTOlxcbiBcXHRcXHRpZiAoY2hlY2tfc2hsX292ZXJmbG93KGFyZywgY29uZmlnLVxcdTAwM2VibGtzaXplX2JpdHMsIFxcdTAwMjZieXRlc2l6ZSkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRcXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZykpO1xcbitcXHRcXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZyksIHRydWUpO1xcbiBcXHRjYXNlIE5CRF9TRVRfVElNRU9VVDpcXG4gXFx0XFx0bmJkX3NldF9jbWRfdGltZW91dChuYmQsIGFyZyk7XFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xOTQxLDcgKzE5NDMsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgbmJkX21xX29wcyA9IHtcXG4gXFx0LnRpbWVvdXRcXHQ9IG5iZF94bWl0X3RpbWVvdXQsXFxuIH07XFxuIFxcbi1zdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMpXFxuK3N0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGludCBucl9od19xdWV1ZXMpXFxuIHtcXG4gXFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSB7XFxuIFxcdFxcdC5tYXhfaHdfc2VjdG9yc1xcdFxcdD0gNjU1MzYsXFxuQEAgLTE5NTgsNyArMTk2MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcylcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRuYmQtXFx1MDAzZXRhZ19zZXQub3BzID0gXFx1MDAyNm5iZF9tcV9vcHM7XFxuLVxcdG5iZC1cXHUwMDNldGFnX3NldC5ucl9od19xdWV1ZXMgPSAxO1xcbitcXHRuYmQtXFx1MDAzZXRhZ19zZXQubnJfaHdfcXVldWVzID0gbnJfaHdfcXVldWVzO1xcbiBcXHRuYmQtXFx1MDAzZXRhZ19zZXQucXVldWVfZGVwdGggPSAxMjg7XFxuIFxcdG5iZC1cXHUwMDNldGFnX3NldC5udW1hX25vZGUgPSBOVU1BX05PX05PREU7XFxuIFxcdG5iZC1cXHUwMDNldGFnX3NldC5jbWRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbmJkX2NtZCk7XFxuQEAgLTIxMDMsMTAgKzIxMDYsNjIgQEAgc3RhdGljIGludCBuYmRfZ2VubF9zaXplX3NldChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbiBcXHRcXHRic2l6ZSA9IG5sYV9nZXRfdTY0KGluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX0JMT0NLX1NJWkVfQllURVNdKTtcXG4gXFxuIFxcdGlmIChieXRlcyAhPSBjb25maWctXFx1MDAzZWJ5dGVzaXplIHx8IGJzaXplICE9IG5iZF9ibGtzaXplKGNvbmZpZykpXFxuLVxcdFxcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBieXRlcywgYnNpemUpO1xcbitcXHRcXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXMsIGJzaXplLCB0cnVlKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFdhbGsgdGhlIE5CRF9BVFRSX1NPQ0tFVFMgbmVzdGVkIGxpc3QgY2FuIGNhbGwgQGNiIGZvciBlYWNoIHNvY2tldCBmZC5cXG4rICpcXG4rICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZmRzIHdhbGtlZCwgb3IgYSBuZWdhdGl2ZSBlcnJuby5cXG4rICovXFxuK3N0YXRpYyBpbnQgbmJkX2dlbmxfZm9yZWFjaF9zb2NrKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuK1xcdFxcdGludCAoKmNiKShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpLFxcbitcXHRcXHRzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbit7XFxuK1xcdHN0cnVjdCBubGF0dHIgKmF0dHI7XFxuK1xcdGludCByZW0sIGNvdW50ID0gMDtcXG4rXFxuK1xcdGlmICghaW5mby1cXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLVxcdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSwgcmVtKSB7XFxuK1xcdFxcdHN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCArIDFdO1xcbitcXHRcXHRpbnQgcmV0O1xcbitcXG4rXFx0XFx0aWYgKG5sYV90eXBlKGF0dHIpICE9IE5CRF9TT0NLX0lURU0pIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRhdHRyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRuYmRfc29ja19wb2xpY3ksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdGluZm8tXFx1MDAzZWV4dGFjaykpIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJlcnJvciBwcm9jZXNzaW5nIHNvY2sgbGlzdFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRjb3VudCsrO1xcbitcXHRcXHRpZiAoY2IpIHtcXG4rXFx0XFx0XFx0cmV0ID0gY2IobmJkLCAoaW50KW5sYV9nZXRfdTMyKHNvY2tzW05CRF9TT0NLX0ZEXSkpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGNvdW50O1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdHJldHVybiBjb3VudDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2Ioc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGZkKVxcbit7XFxuK1xcdHJldHVybiBuYmRfYWRkX3NvY2tldChuYmQsIGZkLCB0cnVlKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZDtcXG5AQCAtMjE1OSw3ICsyMjE0LDExIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNm5iZF9pbmRleF9tdXRleCk7XFxuIFxcbiBcXHRpZiAoIW5iZCkge1xcbi1cXHRcXHRuYmQgPSBuYmRfZGV2X2FkZChpbmRleCwgMik7XFxuK1xcdFxcdHJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBOVUxMLCBOVUxMKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRuYmQgPSBuYmRfZGV2X2FkZChpbmRleCwgMiwgcmV0IFxcdTAwM2UgMCA/IHJldCA6IDEpO1xcbiBcXHRcXHRpZiAoSVNfRVJSKG5iZCkpIHtcXG4gXFx0XFx0XFx0cHJfZXJyKFxcXCJmYWlsZWQgdG8gYWRkIG5ldyBkZXZpY2VcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihuYmQpO1xcbkBAIC0yMjI2LDM2ICsyMjg1LDkgQEAgc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKSB7XFxuLVxcdFxcdHN0cnVjdCBubGF0dHIgKmF0dHI7XFxuLVxcdFxcdGludCByZW0sIGZkO1xcbi1cXG4tXFx0XFx0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLVxcdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSxcXG4tXFx0XFx0XFx0XFx0ICAgIHJlbSkge1xcbi1cXHRcXHRcXHRzdHJ1Y3QgbmxhdHRyICpzb2Nrc1tOQkRfU09DS19NQVgrMV07XFxuLVxcbi1cXHRcXHRcXHRpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkge1xcbi1cXHRcXHRcXHRcXHRwcl9lcnIoXFxcInNvY2tzIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBTT0NLX0lURU0gYXR0clxcXFxuXFxcIik7XFxuLVxcdFxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGF0dHIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbmJkX3NvY2tfcG9saWN5LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuLVxcdFxcdFxcdGlmIChyZXQgIT0gMCkge1xcbi1cXHRcXHRcXHRcXHRwcl9lcnIoXFxcImVycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0aWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHRmZCA9IChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKTtcXG4tXFx0XFx0XFx0cmV0ID0gbmJkX2FkZF9zb2NrZXQobmJkLCBmZCwgdHJ1ZSk7XFxuLVxcdFxcdFxcdGlmIChyZXQpXFxuLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4rXFx0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYiwgbmJkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX0JBQ0tFTkRfSURFTlRJRklFUl0pIHtcXG4gXFx0XFx0bmJkLVxcdTAwM2ViYWNrZW5kID0gbmxhX3N0cmR1cChpbmZvLVxcdTAwM2VhdHRyc1tOQkRfQVRUUl9CQUNLRU5EX0lERU5USUZJRVJdLFxcbkBAIC0yMzQ0LDYgKzIzNzYsMjAgQEAgc3RhdGljIGludCBuYmRfZ2VubF9kaXNjb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZClcXG4re1xcbitcXHRpbnQgcmV0ID0gbmJkX3JlY29ubmVjdF9zb2NrZXQobmJkLCBmZCk7XFxuK1xcbitcXHRpZiAoIXJldCkge1xcbitcXHRcXHRkZXZfaW5mbyhuYmRfdG9fZGV2KG5iZCksIFxcXCJyZWNvbm5lY3RlZCBzb2NrZXRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJldCA9PSAtRU5PU1BDKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiB7XFxuIFxcdHN0cnVjdCBuYmRfZGV2aWNlICpuYmQgPSBOVUxMO1xcbkBAIC0yNDQwLDQwICsyNDg2LDEwIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25maWd1cmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10pIHtcXG4tXFx0XFx0c3RydWN0IG5sYXR0ciAqYXR0cjtcXG4tXFx0XFx0aW50IHJlbSwgZmQ7XFxuLVxcbi1cXHRcXHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLFxcbi1cXHRcXHRcXHRcXHQgICAgcmVtKSB7XFxuLVxcdFxcdFxcdHN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCsxXTtcXG4tXFxuLVxcdFxcdFxcdGlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7XFxuLVxcdFxcdFxcdFxcdHByX2VycihcXFwic29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0cmV0ID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHNvY2tzLCBOQkRfU09DS19NQVgsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgYXR0cixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBuYmRfc29ja19wb2xpY3ksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG4tXFx0XFx0XFx0aWYgKHJldCAhPSAwKSB7XFxuLVxcdFxcdFxcdFxcdHByX2VycihcXFwiZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi1cXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcXG4tXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdFxcdGZkID0gKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pO1xcbi1cXHRcXHRcXHRyZXQgPSBuYmRfcmVjb25uZWN0X3NvY2tldChuYmQsIGZkKTtcXG4tXFx0XFx0XFx0aWYgKHJldCkge1xcbi1cXHRcXHRcXHRcXHRpZiAocmV0ID09IC1FTk9TUEMpXFxuLVxcdFxcdFxcdFxcdFxcdHJldCA9IDA7XFxuLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGRldl9pbmZvKG5iZF90b19kZXYobmJkKSwgXFxcInJlY29ubmVjdGVkIHNvY2tldFxcXFxuXFxcIik7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbitcXHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2IsIG5iZCk7XFxuK1xcdC8qIGZvcmVhY2hfc29jayByZXR1cm5zIGEgcG9zaXRpdmUgY291bnQgb24gc3VjY2VzczsgZG9pdCBtdXN0IHJldHVybiAwICovXFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMClcXG4rXFx0XFx0cmV0ID0gMDtcXG4gb3V0OlxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNm5iZC1cXHUwMDNlY29uZmlnX2xvY2spO1xcbiBcXHRuYmRfY29uZmlnX3B1dChuYmQpO1xcbkBAIC0yNzI1LDggKzI3NDEsMTAgQEAgc3RhdGljIGludCBfX2luaXQgbmJkX2luaXQodm9pZClcXG4gXFx0fVxcbiBcXHRuYmRfZGJnX2luaXQoKTtcXG4gXFxuK1xcdGlmIChucl9od19xdWV1ZXMgXFx1MDAzYyAxKVxcbitcXHRcXHRucl9od19xdWV1ZXMgPSAxO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbmJkc19tYXg7IGkrKylcXG4tXFx0XFx0bmJkX2Rldl9hZGQoaSwgMSk7XFxuK1xcdFxcdG5iZF9kZXZfYWRkKGksIDEsIG5yX2h3X3F1ZXVlcyk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0yNzg3LDMgKzI4MDUsNiBAQCBtb2R1bGVfcGFyYW0obmJkc19tYXgsIGludCwgMDQ0NCk7XFxuIE1PRFVMRV9QQVJNX0RFU0MobmJkc19tYXgsIFxcXCJudW1iZXIgb2YgbmV0d29yayBibG9jayBkZXZpY2VzIHRvIGluaXRpYWxpemUgKGRlZmF1bHQ6IDE2KVxcXCIpO1xcbiBtb2R1bGVfcGFyYW0obWF4X3BhcnQsIGludCwgMDQ0NCk7XFxuIE1PRFVMRV9QQVJNX0RFU0MobWF4X3BhcnQsIFxcXCJudW1iZXIgb2YgcGFydGl0aW9ucyBwZXIgZGV2aWNlIChkZWZhdWx0OiAxNilcXFwiKTtcXG4rbW9kdWxlX3BhcmFtKG5yX2h3X3F1ZXVlcywgaW50LCAwNDQ0KTtcXG4rTU9EVUxFX1BBUk1fREVTQyhucl9od19xdWV1ZXMsXFxuK1xcXCJudW1iZXIgb2YgaGFyZHdhcmUgcXVldWVzIGZvciBkZXZpY2VzIHByZS1jcmVhdGVkIGF0IG1vZHVsZSBsb2FkIChkZWZhdWx0OiAxKS4gXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIwOjA0OjI5LjQxMzc3NDA3NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUwMzgxNzQ4OTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTkJEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmJkX2lvY3RsXCIsXG4gICAgXCJuYmRfZ2VubF9jb25uZWN0XCIsXG4gICAgXCJuYmRfZ2VubF9yZWNvbmZpZ3VyZVwiLFxuICAgIFwibmJkX2dlbmxfZGlzY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIsIGNoYW5naW5nIGhvdyBzb2NrZXRzIGFyZSBhZGRlZCwgaG93IGZhbGxiYWNrIGNvbm5lY3Rpb25zIGFyZSBmb3VuZCwgYW5kIGhvdyBibG9jayBzaXplcyBhcmUgc2V0LiBJdCBhbHNvIGludHJvZHVjZXMgYSBuZXcgbW9kdWxlIHBhcmFtZXRlciBmb3IgaGFyZHdhcmUgcXVldWVzIGFuZCByZWZhY3RvcnMgbmV0bGluayBzb2NrZXQgcGFyc2luZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIE5CRCBsb2dpYyByZWFjaGFibGUgdmlhIGlvY3RsIGFuZCBuZXRsaW5rLCBzbyB0aGV5IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRjZTIzZjkyNWZjNGRkNTRhNmFkOWJkOTA2ZTgwYzlmMzEyNTJkZDlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAyMDowNDoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbmJkLmMgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXG5pbmRleCA4ZjEwNzYyZTkwZWY3Li4yMTk0YzdkN2IyZWFlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuY1xuKysrIGIvZHJpdmVycy9ibG9jay9uYmQuY1xuQEAgLTE2Niw2ICsxNjYsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbmJkX2RiZ19kaXI7XG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCBuYmRzX21heCA9IDE2O1xuIHN0YXRpYyBpbnQgbWF4X3BhcnQgPSAxNjtcbitzdGF0aWMgaW50IG5yX2h3X3F1ZXVlcyA9IDE7XG4gc3RhdGljIGludCBwYXJ0X3NoaWZ0O1xuIFxuIHN0YXRpYyBpbnQgbmJkX2Rldl9kYmdfaW5pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKTtcbkBAIC0zMzEsNyArMzMyLDggQEAgc3RhdGljIHZvaWQgbmJkX21hcmtfbnNvY2tfZGVhZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxuIFx0bnNvY2stXHUwMDNlc2VudCA9IDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpXG4rc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSxcbitcdFx0XHRib29sIGZyZWV6ZSlcbiB7XG4gXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbiBcdGludCBlcnJvcjtcbkBAIC0zNzEsNyArMzczLDEzIEBAIHN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpXG4gXG4gXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gYmxrc2l6ZTtcbiBcdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gYmxrc2l6ZTtcbi1cdGVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZsaW0pO1xuK1xuK1x0aWYgKGZyZWV6ZSlcbitcdFx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsXG4rXHRcdFx0XHRcdTAwMjZsaW0pO1xuK1x0ZWxzZVxuK1x0XHRlcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZsaW0pO1xuK1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG5AQCAtMTA2MSw0MCArMTA2OSwzMSBAQCBzdGF0aWMgaW50IGZpbmRfZmFsbGJhY2soc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGluZGV4KVxuIFx0aW50IG5ld19pbmRleCA9IC0xO1xuIFx0c3RydWN0IG5iZF9zb2NrICpuc29jayA9IGNvbmZpZy1cdTAwM2Vzb2Nrc1tpbmRleF07XG4gXHRpbnQgZmFsbGJhY2sgPSBuc29jay1cdTAwM2VmYWxsYmFja19pbmRleDtcbitcdGludCBpO1xuIFxuIFx0aWYgKHRlc3RfYml0KE5CRF9SVF9ESVNDT05ORUNURUQsIFx1MDAyNmNvbmZpZy1cdTAwM2VydW50aW1lX2ZsYWdzKSlcbiBcdFx0cmV0dXJuIG5ld19pbmRleDtcbiBcbi1cdGlmIChjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIFx1MDAzYz0gMSkge1xuLVx0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC1cdTAwM2VkaXNrKSxcbi1cdFx0XHRcdCAgICBcIkRlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xcblwiKTtcbi1cdFx0cmV0dXJuIG5ld19pbmRleDtcbi1cdH1cbitcdGlmIChjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIFx1MDAzYz0gMSlcbitcdFx0Z290byBub19mYWxsYmFjaztcbiBcbiBcdGlmIChmYWxsYmFjayBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGZhbGxiYWNrIFx1MDAzYyBjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFjb25maWctXHUwMDNlc29ja3NbZmFsbGJhY2tdLVx1MDAzZWRlYWQpXG4gXHRcdHJldHVybiBmYWxsYmFjaztcbiBcbi1cdGlmIChuc29jay1cdTAwM2VmYWxsYmFja19pbmRleCBcdTAwM2MgMCB8fFxuLVx0ICAgIG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4IFx1MDAzZT0gY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9ucyB8fFxuLVx0ICAgIGNvbmZpZy1cdTAwM2Vzb2Nrc1tuc29jay1cdTAwM2VmYWxsYmFja19pbmRleF0tXHUwMDNlZGVhZCkge1xuLVx0XHRpbnQgaTtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9uczsgaSsrKSB7XG4tXHRcdFx0aWYgKGkgPT0gaW5kZXgpXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRpZiAoIWNvbmZpZy1cdTAwM2Vzb2Nrc1tpXS1cdTAwM2VkZWFkKSB7XG4tXHRcdFx0XHRuZXdfaW5kZXggPSBpO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXHRcdG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4ID0gbmV3X2luZGV4O1xuLVx0XHRpZiAobmV3X2luZGV4IFx1MDAzYyAwKSB7XG4tXHRcdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtXHUwMDNlZGlzayksXG4tXHRcdFx0XHRcdCAgICBcIkRlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xcblwiKTtcbi1cdFx0XHRyZXR1cm4gbmV3X2luZGV4O1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9uczsgaSsrKSB7XG4rXHRcdGlmIChpICE9IGluZGV4IFx1MDAyNlx1MDAyNiAhY29uZmlnLVx1MDAzZXNvY2tzW2ldLVx1MDAzZWRlYWQpIHtcbitcdFx0XHRuZXdfaW5kZXggPSBpO1xuK1x0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG4tXHRuZXdfaW5kZXggPSBuc29jay1cdTAwM2VmYWxsYmFja19pbmRleDtcbitcdG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4ID0gbmV3X2luZGV4O1xuK1x0aWYgKG5ld19pbmRleCBcdTAwM2U9IDApXG4rXHRcdHJldHVybiBuZXdfaW5kZXg7XG4rXG4rbm9fZmFsbGJhY2s6XG4rXHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC1cdTAwM2VkaXNrKSxcbitcdFx0XHQgICAgXCJEZWFkIGNvbm5lY3Rpb24sIGZhaWxlZCB0byBmaW5kIGEgZmFsbGJhY2tcXG5cIik7XG4gXHRyZXR1cm4gbmV3X2luZGV4O1xuIH1cbiBcbkBAIC0xMjgxLDIzICsxMjgwLDIzIEBAIHN0YXRpYyBpbnQgbmJkX2FkZF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcsXG4gXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xuIFx0c3RydWN0IG5iZF9zb2NrICoqc29ja3M7XG4gXHRzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrO1xuLVx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xuIFx0aW50IGVycjtcbiBcbiBcdC8qIEFyZyB3aWxsIGJlIGNhc3QgdG8gaW50LCBjaGVjayBpdCB0byBhdm9pZCBvdmVyZmxvdyAqL1xuIFx0aWYgKGFyZyBcdTAwM2UgSU5UX01BWClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAobmJkLVx1MDAzZXBpZCkge1xuK1x0XHRkZXZfZXJyKGRpc2tfdG9fZGV2KG5iZC1cdTAwM2VkaXNrKSxcbitcdFx0XHRcIkNhbm5vdCBhZGQgc29ja2V0IHRvIGEgcnVubmluZyBkZXZpY2VcXG5cIik7XG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXHR9XG4rXG4gXHRzb2NrID0gbmJkX2dldF9zb2NrZXQobmJkLCBhcmcsIFx1MDAyNmVycik7XG4gXHRpZiAoIXNvY2spXG4gXHRcdHJldHVybiBlcnI7XG4gXHRuYmRfcmVjbGFzc2lmeV9zb2NrZXQoc29jayk7XG4gXG4tXHQvKlxuLVx0ICogV2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0IGFueSBlcnJhbnQgcmVxdWVzdHMgd2hpbGUgd2UncmVcbi1cdCAqIHJlYWxsb2NhdGluZyB0aGUgLVx1MDAzZXNvY2tzIGFycmF5LlxuLVx0ICovXG4tXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuLVxuIFx0aWYgKCFuZXRsaW5rIFx1MDAyNlx1MDAyNiAhbmJkLVx1MDAzZXRhc2tfc2V0dXAgXHUwMDI2XHUwMDI2XG4gXHQgICAgIXRlc3RfYml0KE5CRF9SVF9CT1VORCwgXHUwMDI2Y29uZmlnLVx1MDAzZXJ1bnRpbWVfZmxhZ3MpKVxuIFx0XHRuYmQtXHUwMDNldGFza19zZXR1cCA9IGN1cnJlbnQ7XG5AQCAtMTMzNywxMiArMTMzNiwxMCBAQCBzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxuIFx0SU5JVF9XT1JLKFx1MDAyNm5zb2NrLVx1MDAzZXdvcmssIG5iZF9wZW5kaW5nX2NtZF93b3JrKTtcbiBcdHNvY2tzW2NvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnMrK10gPSBuc29jaztcbiBcdGF0b21pY19pbmMoXHUwMDI2Y29uZmlnLVx1MDAzZWxpdmVfY29ubmVjdGlvbnMpO1xuLVx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBtZW1mbGFncyk7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbiBwdXRfc29ja2V0OlxuLVx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBtZW1mbGFncyk7XG4gXHRzb2NrZmRfcHV0KHNvY2spO1xuIFx0cmV0dXJuIGVycjtcbiB9XG5AQCAtMTQ3MSw4ICsxNDY4LDEzIEBAIHN0YXRpYyB2b2lkIG5iZF9jb25maWdfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4gXHRpZiAocmVmY291bnRfZGVjX2FuZF9tdXRleF9sb2NrKFx1MDAyNm5iZC1cdTAwM2Vjb25maWdfcmVmcyxcbiBcdFx0XHRcdFx0XHUwMDI2bmJkLVx1MDAzZWNvbmZpZ19sb2NrKSkge1xuIFx0XHRzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnID0gbmJkLVx1MDAzZWNvbmZpZztcbitcdFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG4gXHRcdG5iZF9kZXZfZGJnX2Nsb3NlKG5iZCk7XG4gXHRcdGludmFsaWRhdGVfZGlzayhuYmQtXHUwMDNlZGlzayk7XG4rXHRcdC8qIHJlc2V0IHdyaXRlIGNhY2hlICovXG4rXHRcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuK1x0XHRsaW0uZmVhdHVyZXMgXHUwMDI2PSB+KEJMS19GRUFUX1dSSVRFX0NBQ0hFIHwgQkxLX0ZFQVRfRlVBKTtcbitcdFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIFx1MDAyNmxpbSk7XG4gXHRcdGlmIChuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWJ5dGVzaXplKVxuIFx0XHRcdGtvYmplY3RfdWV2ZW50KFx1MDAyNm5iZF90b19kZXYobmJkKS1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XG4gXHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTkJEX1JUX0hBU19QSURfRklMRSxcbkBAIC0xNTc0LDcgKzE1NzYsNyBAQCBzdGF0aWMgaW50IG5iZF9zdGFydF9kZXZpY2Uoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbiBcdFx0YXJncy1cdTAwM2VpbmRleCA9IGk7XG4gXHRcdHF1ZXVlX3dvcmsobmJkLVx1MDAzZXJlY3Zfd29ya3EsIFx1MDAyNmFyZ3MtXHUwMDNld29yayk7XG4gXHR9XG4tXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgY29uZmlnLVx1MDAzZWJ5dGVzaXplLCBuYmRfYmxrc2l6ZShjb25maWcpKTtcbitcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBjb25maWctXHUwMDNlYnl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZyksIGZhbHNlKTtcbiB9XG4gXG4gc3RhdGljIGludCBuYmRfc3RhcnRfZGV2aWNlX2lvY3RsKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5AQCAtMTY0MiwxMyArMTY0NCwxMyBAQCBzdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXG4gXHRjYXNlIE5CRF9TRVRfU09DSzpcbiBcdFx0cmV0dXJuIG5iZF9hZGRfc29ja2V0KG5iZCwgYXJnLCBmYWxzZSk7XG4gXHRjYXNlIE5CRF9TRVRfQkxLU0laRTpcbi1cdFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGNvbmZpZy1cdTAwM2VieXRlc2l6ZSwgYXJnKTtcbitcdFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGNvbmZpZy1cdTAwM2VieXRlc2l6ZSwgYXJnLCB0cnVlKTtcbiBcdGNhc2UgTkJEX1NFVF9TSVpFOlxuLVx0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYXJnLCBuYmRfYmxrc2l6ZShjb25maWcpKTtcbitcdFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGFyZywgbmJkX2Jsa3NpemUoY29uZmlnKSwgdHJ1ZSk7XG4gXHRjYXNlIE5CRF9TRVRfU0laRV9CTE9DS1M6XG4gXHRcdGlmIChjaGVja19zaGxfb3ZlcmZsb3coYXJnLCBjb25maWctXHUwMDNlYmxrc2l6ZV9iaXRzLCBcdTAwMjZieXRlc2l6ZSkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBieXRlc2l6ZSwgbmJkX2Jsa3NpemUoY29uZmlnKSk7XG4rXHRcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBieXRlc2l6ZSwgbmJkX2Jsa3NpemUoY29uZmlnKSwgdHJ1ZSk7XG4gXHRjYXNlIE5CRF9TRVRfVElNRU9VVDpcbiBcdFx0bmJkX3NldF9jbWRfdGltZW91dChuYmQsIGFyZyk7XG4gXHRcdHJldHVybiAwO1xuQEAgLTE5NDEsNyArMTk0Myw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBuYmRfbXFfb3BzID0ge1xuIFx0LnRpbWVvdXRcdD0gbmJkX3htaXRfdGltZW91dCxcbiB9O1xuIFxuLXN0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcylcbitzdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMsXG4rXHRcdFx0XHQgICAgICAgaW50IG5yX2h3X3F1ZXVlcylcbiB7XG4gXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbSA9IHtcbiBcdFx0Lm1heF9od19zZWN0b3JzXHRcdD0gNjU1MzYsXG5AQCAtMTk1OCw3ICsxOTYxLDcgQEAgc3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdG5iZC1cdTAwM2V0YWdfc2V0Lm9wcyA9IFx1MDAyNm5iZF9tcV9vcHM7XG4tXHRuYmQtXHUwMDNldGFnX3NldC5ucl9od19xdWV1ZXMgPSAxO1xuK1x0bmJkLVx1MDAzZXRhZ19zZXQubnJfaHdfcXVldWVzID0gbnJfaHdfcXVldWVzO1xuIFx0bmJkLVx1MDAzZXRhZ19zZXQucXVldWVfZGVwdGggPSAxMjg7XG4gXHRuYmQtXHUwMDNldGFnX3NldC5udW1hX25vZGUgPSBOVU1BX05PX05PREU7XG4gXHRuYmQtXHUwMDNldGFnX3NldC5jbWRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbmJkX2NtZCk7XG5AQCAtMjEwMywxMCArMjEwNiw2MiBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX3NpemVfc2V0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4gXHRcdGJzaXplID0gbmxhX2dldF91NjQoaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9CTE9DS19TSVpFX0JZVEVTXSk7XG4gXG4gXHRpZiAoYnl0ZXMgIT0gY29uZmlnLVx1MDAzZWJ5dGVzaXplIHx8IGJzaXplICE9IG5iZF9ibGtzaXplKGNvbmZpZykpXG4tXHRcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBieXRlcywgYnNpemUpO1xuK1x0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXMsIGJzaXplLCB0cnVlKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKlxuKyAqIFdhbGsgdGhlIE5CRF9BVFRSX1NPQ0tFVFMgbmVzdGVkIGxpc3QgY2FuIGNhbGwgQGNiIGZvciBlYWNoIHNvY2tldCBmZC5cbisgKlxuKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGZkcyB3YWxrZWQsIG9yIGEgbmVnYXRpdmUgZXJybm8uXG4rICovXG4rc3RhdGljIGludCBuYmRfZ2VubF9mb3JlYWNoX3NvY2soc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbitcdFx0aW50ICgqY2IpKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZCksXG4rXHRcdHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4re1xuK1x0c3RydWN0IG5sYXR0ciAqYXR0cjtcbitcdGludCByZW0sIGNvdW50ID0gMDtcbitcbitcdGlmICghaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sIHJlbSkge1xuK1x0XHRzdHJ1Y3QgbmxhdHRyICpzb2Nrc1tOQkRfU09DS19NQVggKyAxXTtcbitcdFx0aW50IHJldDtcbitcbitcdFx0aWYgKG5sYV90eXBlKGF0dHIpICE9IE5CRF9TT0NLX0lURU0pIHtcbitcdFx0XHRwcl9lcnIoXCJzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcXG5cIik7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcbitcdFx0aWYgKG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxuK1x0XHRcdFx0XHRcdGF0dHIsXG4rXHRcdFx0XHRcdFx0bmJkX3NvY2tfcG9saWN5LFxuK1x0XHRcdFx0XHRcdGluZm8tXHUwMDNlZXh0YWNrKSkge1xuK1x0XHRcdHByX2VycihcImVycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XFxuXCIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXG4rXHRcdGlmICghc29ja3NbTkJEX1NPQ0tfRkRdKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRjb3VudCsrO1xuK1x0XHRpZiAoY2IpIHtcbitcdFx0XHRyZXQgPSBjYihuYmQsIChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKSk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2UgMClcbitcdFx0XHRcdHJldHVybiBjb3VudDtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0fVxuK1x0fVxuK1x0cmV0dXJuIGNvdW50O1xuK31cbitcbitzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpXG4re1xuK1x0cmV0dXJuIG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpO1xuK31cbitcbiBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgbmJkX2RldmljZSAqbmJkO1xuQEAgLTIxNTksNyArMjIxNCwxMSBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdG11dGV4X3VubG9jayhcdTAwMjZuYmRfaW5kZXhfbXV0ZXgpO1xuIFxuIFx0aWYgKCFuYmQpIHtcbi1cdFx0bmJkID0gbmJkX2Rldl9hZGQoaW5kZXgsIDIpO1xuK1x0XHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgTlVMTCwgTlVMTCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0bmJkID0gbmJkX2Rldl9hZGQoaW5kZXgsIDIsIHJldCBcdTAwM2UgMCA/IHJldCA6IDEpO1xuIFx0XHRpZiAoSVNfRVJSKG5iZCkpIHtcbiBcdFx0XHRwcl9lcnIoXCJmYWlsZWQgdG8gYWRkIG5ldyBkZXZpY2VcXG5cIik7XG4gXHRcdFx0cmV0dXJuIFBUUl9FUlIobmJkKTtcbkBAIC0yMjI2LDM2ICsyMjg1LDkgQEAgc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKSB7XG4tXHRcdHN0cnVjdCBubGF0dHIgKmF0dHI7XG4tXHRcdGludCByZW0sIGZkO1xuLVxuLVx0XHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sXG4tXHRcdFx0XHQgICAgcmVtKSB7XG4tXHRcdFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYKzFdO1xuLVxuLVx0XHRcdGlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7XG4tXHRcdFx0XHRwcl9lcnIoXCJzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcXG5cIik7XG4tXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVx0XHRcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxuLVx0XHRcdFx0XHRcdFx0ICBhdHRyLFxuLVx0XHRcdFx0XHRcdFx0ICBuYmRfc29ja19wb2xpY3ksXG4tXHRcdFx0XHRcdFx0XHQgIGluZm8tXHUwMDNlZXh0YWNrKTtcbi1cdFx0XHRpZiAocmV0ICE9IDApIHtcbi1cdFx0XHRcdHByX2VycihcImVycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XFxuXCIpO1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdGZkID0gKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pO1xuLVx0XHRcdHJldCA9IG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpO1xuLVx0XHRcdGlmIChyZXQpXG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0fVxuLVx0fVxuK1x0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYiwgbmJkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0O1xuIFxuIFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkFDS0VORF9JREVOVElGSUVSXSkge1xuIFx0XHRuYmQtXHUwMDNlYmFja2VuZCA9IG5sYV9zdHJkdXAoaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9CQUNLRU5EX0lERU5USUZJRVJdLFxuQEAgLTIzNDQsNiArMjM3NiwyMCBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX2Rpc2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZClcbit7XG4rXHRpbnQgcmV0ID0gbmJkX3JlY29ubmVjdF9zb2NrZXQobmJkLCBmZCk7XG4rXG4rXHRpZiAoIXJldCkge1xuK1x0XHRkZXZfaW5mbyhuYmRfdG9fZGV2KG5iZCksIFwicmVjb25uZWN0ZWQgc29ja2V0XFxuXCIpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGlmIChyZXQgPT0gLUVOT1NQQylcbitcdFx0cmV0dXJuIDE7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiBzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZCA9IE5VTEw7XG5AQCAtMjQ0MCw0MCArMjQ4NiwxMCBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKSB7XG4tXHRcdHN0cnVjdCBubGF0dHIgKmF0dHI7XG4tXHRcdGludCByZW0sIGZkO1xuLVxuLVx0XHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sXG4tXHRcdFx0XHQgICAgcmVtKSB7XG4tXHRcdFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYKzFdO1xuLVxuLVx0XHRcdGlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7XG4tXHRcdFx0XHRwcl9lcnIoXCJzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcXG5cIik7XG4tXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVx0XHRcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxuLVx0XHRcdFx0XHRcdFx0ICBhdHRyLFxuLVx0XHRcdFx0XHRcdFx0ICBuYmRfc29ja19wb2xpY3ksXG4tXHRcdFx0XHRcdFx0XHQgIGluZm8tXHUwMDNlZXh0YWNrKTtcbi1cdFx0XHRpZiAocmV0ICE9IDApIHtcbi1cdFx0XHRcdHByX2VycihcImVycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XFxuXCIpO1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdGZkID0gKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pO1xuLVx0XHRcdHJldCA9IG5iZF9yZWNvbm5lY3Rfc29ja2V0KG5iZCwgZmQpO1xuLVx0XHRcdGlmIChyZXQpIHtcbi1cdFx0XHRcdGlmIChyZXQgPT0gLUVOT1NQQylcbi1cdFx0XHRcdFx0cmV0ID0gMDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRkZXZfaW5mbyhuYmRfdG9fZGV2KG5iZCksIFwicmVjb25uZWN0ZWQgc29ja2V0XFxuXCIpO1xuLVx0XHR9XG4tXHR9XG4rXHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2IsIG5iZCk7XG4rXHQvKiBmb3JlYWNoX3NvY2sgcmV0dXJucyBhIHBvc2l0aXZlIGNvdW50IG9uIHN1Y2Nlc3M7IGRvaXQgbXVzdCByZXR1cm4gMCAqL1xuK1x0aWYgKHJldCBcdTAwM2U9IDApXG4rXHRcdHJldCA9IDA7XG4gb3V0OlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5iZC1cdTAwM2Vjb25maWdfbG9jayk7XG4gXHRuYmRfY29uZmlnX3B1dChuYmQpO1xuQEAgLTI3MjUsOCArMjc0MSwxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBuYmRfaW5pdCh2b2lkKVxuIFx0fVxuIFx0bmJkX2RiZ19pbml0KCk7XG4gXG4rXHRpZiAobnJfaHdfcXVldWVzIFx1MDAzYyAxKVxuK1x0XHRucl9od19xdWV1ZXMgPSAxO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmJkc19tYXg7IGkrKylcbi1cdFx0bmJkX2Rldl9hZGQoaSwgMSk7XG4rXHRcdG5iZF9kZXZfYWRkKGksIDEsIG5yX2h3X3F1ZXVlcyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjc4NywzICsyODA1LDYgQEAgbW9kdWxlX3BhcmFtKG5iZHNfbWF4LCBpbnQsIDA0NDQpO1xuIE1PRFVMRV9QQVJNX0RFU0MobmJkc19tYXgsIFwibnVtYmVyIG9mIG5ldHdvcmsgYmxvY2sgZGV2aWNlcyB0byBpbml0aWFsaXplIChkZWZhdWx0OiAxNilcIik7XG4gbW9kdWxlX3BhcmFtKG1heF9wYXJ0LCBpbnQsIDA0NDQpO1xuIE1PRFVMRV9QQVJNX0RFU0MobWF4X3BhcnQsIFwibnVtYmVyIG9mIHBhcnRpdGlvbnMgcGVyIGRldmljZSAoZGVmYXVsdDogMTYpXCIpO1xuK21vZHVsZV9wYXJhbShucl9od19xdWV1ZXMsIGludCwgMDQ0NCk7XG4rTU9EVUxFX1BBUk1fREVTQyhucl9od19xdWV1ZXMsXG4rXCJudW1iZXIgb2YgaGFyZHdhcmUgcXVldWVzIGZvciBkZXZpY2VzIHByZS1jcmVhdGVkIGF0IG1vZHVsZSBsb2FkIChkZWZhdWx0OiAxKS4gXCIpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6MDQ6MjkuNDEzNzc2NTg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzMTU5MTgwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOQkQgRHJpdmVyIFBhdGNoIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGZvciB0aGUgTkJEIGRyaXZlciwgYGRyaXZlcnMvYmxvY2svbmJkLmNgLCBhbmQgaXQncyBtYWtpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIG5lZWRzIGZ1enppbmcsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhhdCBpdOKAmXMgdG91Y2hpbmcgY29yZSBsb2dpYyBhY2Nlc3NlZCB2aWEgYm90aCBpb2N0bCBhbmQgTmV0bGluay4gTGV0J3MgYnJlYWsgZG93biB0aGUgaW1wbGljYXRpb25zIGFuZCBmaWd1cmUgb3V0IHRoZSBiZXN0IGF0dGFjayBzdXJmYWNlLlxuXG5GaXJzdCwgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW9kdWxlIHBhcmFtZXRlciwgYG5yX2h3X3F1ZXVlc2AuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgYXJlYS4gVGhlbiwgYG5iZF9zZXRfc2l6ZWAgaXMgbW9kaWZpZWQgdG8gaGFuZGxlIGEgYGZyZWV6ZWAgcGFyYW1ldGVyLCB3aGljaCBpcyBhIGJpdCBjb25jZXJuaW5nLCBiZWNhdXNlIHRoaXMgc3VnZ2VzdHMgYSBzdGF0ZSBjaGFuZ2UgdGhhdCBjb3VsZCBpbXBhY3QgZGV2aWNlIGJlaGF2aW9yLiBGaXhpbmcgdGhlIGBmaW5kX2ZhbGxiYWNrYCBsb2dpYyBpcyBhbm90aGVyIHBvaW50IG9mIGludGVyZXN0OyBidWcgZml4ZXMgb2Z0ZW4gZXhwb3NlIG5ldyBjb2RlIHBhdGhzLiBQcmV2ZW50aW5nIHNvY2tldCBhZGRpdGlvbnMgdG8gYSBydW5uaW5nIGRldmljZSBpbiBgbmJkX2FkZF9zb2NrZXRgIGlzIGEgZ29vZCBkZWZlbnNpdmUgY2hhbmdlLCBidXQgdGhlIHJlbW92YWwgb2YgdGhlIHF1ZXVlIGZyZWV6aW5nL3VuZnJlZXppbmcgY2FsbHMgaXMgbm90ZXdvcnRoeSwgYmVjYXVzZSBpdCBjaGFuZ2VzIHRoZSBleGlzdGluZyBjb2RlLCBldmVuIGlmIHRvIHByb3RlY3QgdGhlIHN5c3RlbS4gVGhlIHJlc2V0IG9mIHdyaXRlIGNhY2hlIGZlYXR1cmVzIGluIGBuYmRfY29uZmlnX3B1dGAgaXMgYW5vdGhlciBmbGFnIHRoYXQgaXQgaXMgdG91Y2hpbmcgc2Vuc2l0aXZlIGFyZWFzIG9mIHRoZSBkcml2ZXIuIFBsdXMsIHNldHRpbmcgYG5yX2h3X3F1ZXVlc2AgaW4gYG5iZF9kZXZfYWRkYCBtZWFucyB0aGVyZSdzIGEgbmV3IHBhcmFtZXRlciBiZWluZyBpbnRyb2R1Y2VkIGF0IGRldmljZSBhZGRpdGlvbi4gUmVmYWN0b3JpbmcgTmV0bGluayBzb2NrZXQgcGFyc2luZyBpbnRvIGBuYmRfZ2VubF9mb3JlYWNoX3NvY2tgIGFuZCB1c2luZyBpdCBpbiBgbmJkX2dlbmxfY29ubmVjdGAgYW5kIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAgaXMgYSBiaWcgZnVuY3Rpb25hbCBjaGFuZ2Ugd2hpY2ggbmVlZHMgZnV6emluZyBhcyB3ZWxsLlxuXG5UaGUgZ29hbCBpcyB0byBmaW5kIHRoZSByaWdodCBmb2N1cyBzeW1ib2xzIHRvIHRhcmdldC5cblxuTm93LCBtb3N0IG9mIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHN0YXRpYywgd2hpY2ggbWFrZXMgZGlyZWN0IGZ1enppbmcgYSBsaXR0bGUgdHJpY2tpZXIsIGJ1dCB0aGV5IGFyZSBzdGlsbCBpbXBvcnRhbnQuIFRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgaWRlYWwgZm9yIGZ1enppbmcsIGdpdmVuIHRoYXQgdGhleSBhcmUgbW9zdCBsaWtlbHkgdG8gYmUgZXhwb3NlZCBhcyBleHRlcm5hbCBBUEkuIEkgdGhpbmsgYG5iZF9pb2N0bGAsIGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYW5kIGBuYmRfZ2VubF9kaXNjb25uZWN0YCBhcmUgZ29vZCBjYW5kaWRhdGVzLiBFdmVuIHRob3VnaCBzb21lIG9mIHRoZXNlIGFyZSBzdGF0aWMsIGlmIHRoZXkgYXJlIG5vdCBpbmxpbmVkLCB0aGV5IGFyZSBnb29kIGVudHJ5IHBvaW50cy5cblxuR2l2ZW4gdGhlIHByaW9yaXR5IGZvciBub24tc3RhdGljIGVudHJ5IHBvaW50cywgSSBuZWVkIHRvIHZlcmlmeSB3aGljaCBhcmUgZXhwb3NlZC4gVGltZSB0byBnbyBodW50aW5nIGluIGBkcml2ZXJzL2Jsb2NrL25iZC5jYCFcblxuXG4iLCJJbnB1dFRva2VucyI6Njk3MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIwOjA0OjM5LjcyOTY5ODA2MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDgzNDQyNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT9pbnQgbmJkX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuYz0xNjMyPXN0YXRpYyBpbnQgX19uYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY3OC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2Nzk6c3RhdGljIGludCBuYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY4MC1cXHRcXHQgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMDowNDo0MC4xMzgwNDY1OTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDM4NzUxODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkNoZWNraW5nIGZvciBOZXRsaW5rIENhbGxiYWNrcyoqXG5cbkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAgaW50byB0aGlzIG5ldyBtb2R1bGUsIGxldCdzIGp1c3QgbWFrZSBzdXJlIHdlJ3ZlIGNvdmVyZWQgdGhlIGJhc2ljcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBleHBsaWNpdGx5IHZlcmlmeSB0aGF0IHdlJ3JlIHByb3Blcmx5IGhhbmRsaW5nIGFueSBhbmQgYWxsIHJlbGV2YW50IE5ldGxpbmsgY2FsbGJhY2tzLiBUaGlzIGlzIGZvdW5kYXRpb25hbDsgd2l0aG91dCB0aGlzIGNoZWNrZWQgYW5kIHdvcmtpbmcgY29ycmVjdGx5LCBpdCdzIGp1c3Qgbm90IGdvaW5nIHRvIGdvLCBhbmQgY291bGQgaW50cm9kdWNlIHJlYWxseSBoYXJkLXRvLWRlYnVnIHByb2JsZW1zIGRvd25zdHJlYW0uIEkgbmVlZCB0byByYXBpZGx5IGNvbmZpcm0gdGhhdCB3ZSBoYXZlIHRoZSBuZWNlc3NhcnkgbWVjaGFuaXNtcyBpbiBwbGFjZSB0byByZWNlaXZlIGFuZCBwcm9jZXNzIG1lc3NhZ2VzLCBlc3BlY2lhbGx5IGFueXRoaW5nIGFzeW5jaHJvbm91cy4gQ29uc2lkZXIgYWxsIHBvdGVudGlhbCBOZXRsaW5rIG1lc3NhZ2UgdHlwZXMuIEFtIEkgc2V0IHVwIHRvIGhhbmRsZSB0aGVtIGFsbD8gQXJlIHdlIGV2ZW4gKmV4cGVjdGluZyogc3BlY2lmaWMgdHlwZXMgaW4gdGhpcyBjb250ZXh0PyBMZXQncyBxdWlja2x5IHJldmlldyB0aGUgcmVnaXN0ZXJlZCBoYW5kbGVycywgdGhlIGZpbHRlciBjcml0ZXJpYSwgdGhlIGJ1ZmZlcnMgdXNlZCwgYW5kIGVuc3VyZSBkYXRhIGlzIGJlaW5nIHByb3Blcmx5IGV4dHJhY3RlZCBhbmQgaGFuZGxlZC4gVGltZSB0byBjb25maXJtIGlmIHdlJ3JlIGVmZmVjdGl2ZWx5IGxpc3RlbmluZyBhbmQgYWN0aW5nIGFwcHJvcHJpYXRlbHkgdG8gZXh0ZXJuYWwga2VybmVsIGV2ZW50cywgb3IgcmlzayB3YXN0aW5nIG91ciB0aW1lIGNoYXNpbmcgZ2hvc3RzIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzM0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMDowNDo0NC4xNzY4MDM1NjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM1NzQ3OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmJkX2dlbmxfY29ubmVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmM9MjExOD1zdGF0aWMgaW50IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTU5LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjE2MDpzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTYxLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE2NC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIxNjU6c3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTY2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjI4Ny1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIyODg6XFx0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYiwgbmJkKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIyODktXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI1MDI9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBuYmRfY29ubmVjdF9nZW5sX29wc1tdID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTA1LVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI1MDY6XFx0XFx0LmRvaXRcXHQ9IG5iZF9nZW5sX2Nvbm5lY3QsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTA3LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIwOjA0OjQ0LjI1MDM4MjU1N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMDY1OTkyNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgYG5iZF9nZW5sX3JlY29uZmlndXJlYCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgbmJkX2dlbmxfcmVjb25maWd1cmVgIGZ1bmN0aW9uLiBJJ20gYXNzdW1pbmcgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBnZW5lcmljIG5ldGxpbmsgaW50ZXJmYWNlIGZvciBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodHMgYXJlOiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gV2hhdCBwYXJhbWV0ZXJzIGRvZXMgaXQgdGFrZT8gV2hhdCBkb2VzIGl0ICpkbyogd2l0aCB0aG9zZSBwYXJhbWV0ZXJzPyBJcyB0aGlzIGEgY29tcGxldGUgcmVjb25maWd1cmF0aW9uIHJvdXRpbmUgb3IgYSBwaWVjZSBvZiBhIGxhcmdlciBwdXp6bGU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIE5CRCBzZXR1cCBhbmQgdGVhci1kb3duIHByb2Nlc3MuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgZm9yIHdoZXJlIHRoaXMgZml0cyBpbiByZWxhdGlvbiB0byB0aGUgbWFpbiBkcml2ZXIgbG9vcCwgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBhbmQgZGF0YSB0cmFuc2Zlci4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGhhbmRsZSB0aGluZ3MgbGlrZSBjaGFuZ2luZyB0aGUgYmxvY2sgc2l6ZSwgcGVyaGFwcyB0aGUgYWxsb3dlZCBtYXhpbXVtIGJsb2NrIHNpemUsIG9yIG1heWJlIGV2ZW4gZmVhdHVyZXMgcmVsYXRlZCB0byBzZWN1cml0eSBvciBlbmNyeXB0aW9uIG5lZ290aWF0aW9uLCBvciBwZXJoYXBzIGV2ZW4gcXVldWUgZGVwdGggbGltaXRhdGlvbnMuIFRoZSBkZXZpbCdzIGluIHRoZSBkZXRhaWxzOyBJJ20gYW50aWNpcGF0aW5nIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuOiBBcmUgdGhlcmUgcHJvcGVyIGxvY2tpbmcgbWVjaGFuaXNtcyB0byBlbnN1cmUgdGhyZWFkLXNhZmV0eSwgZXNwZWNpYWxseSBpZiB0aGlzIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGEgdXNlci1zcGFjZSB1dGlsaXR5PyBXaGF0J3MgdGhlIGVycm9yIGhhbmRsaW5nIGxpa2U/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb24sIGVzcGVjaWFsbHkgaW4gYSBoZWF2aWx5LXRocmVhZGVkIGVudmlyb25tZW50PyBJIGFsc28gbmVlZCB0byBjb25zaWRlciBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zIGFuZCBpZiB0aGUgcmVjb25maWd1cmUgaXMgcHJvcGVybHkgdmFsaWRhdGluZyBpbnB1dHMuIEFscmlnaHQsIGxldCdzIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaWYgbXkgYXNzdW1wdGlvbnMgaG9sZCB3YXRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAwMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIwOjA0OjQ4LjI1Njk4Mzk2NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDQ4NzE0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYmRfZ2VubF9yZWNvbmZpZ3VyZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmM9MjM3OT1zdGF0aWMgaW50IG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM5Mi1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIzOTM6c3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM5NC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI1MDI9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBuYmRfY29ubmVjdF9nZW5sX29wc1tdID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTE1LVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI1MTY6XFx0XFx0LmRvaXRcXHQ9IG5iZF9nZW5sX3JlY29uZmlndXJlLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUxNy1cXHR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMDowNDo0OC4zMzE0NzUzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5Mjc5NTEwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEaXNjb25uZWN0IEZ1bmN0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgbmJkX2dlbmxfZGlzY29ubmVjdGAuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgd2hlcmUgY2xpZW50IGRpc2Nvbm5lY3Rpb25zIGFyZSBhY3R1YWxseSAqaGFuZGxlZCogd2l0aGluIHRoZSBOQkQgKE5ldHdvcmsgQmxvY2sgRGV2aWNlKSBrZXJuZWwgbW9kdWxlLCBmcm9tIGEgZ2VuZXJpYyBuZXRsaW5rIHBlcnNwZWN0aXZlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBleGFjdCBzZXF1ZW5jZSBvZiBldmVudHMgdGhhdCB0cmlnZ2VycyB0aGlzIGZ1bmN0aW9uLCBhbmQgd2hhdCB0aGUgcG90ZW50aWFsIGZhaWx1cmUgcG9pbnRzIGFyZS4gV2hhdCBzdGF0ZSB0cmFuc2l0aW9ucyBhcmUgaW52b2x2ZWQ/IFdoYXQgbG9ja3MgYXJlIGhlbGQsIGFuZCBmb3IgaG93IGxvbmc/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyByYWNlIGNvbmRpdGlvbnMgdGhhdCBjb3VsZCBiZSBleHBsb2l0ZWQgaGVyZT8gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBncmFjZWZ1bGx5IChvciBub3QpIGl0IGhhbmRsZXMgcGFydGlhbGx5IGNvbXBsZXRlZCBvcGVyYXRpb25zIGR1cmluZyBhIGRpc2Nvbm5lY3Qg4oCTIGRvZXMgaXQgbGVhdmUgdGhlIGJsb2NrIGRldmljZSBpbiBhIGNvbnNpc3RlbnQgc3RhdGU/IFdoYXQgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3Igb25nb2luZyBJL08/IEdvdHRhIGVuc3VyZSB3ZSBhcmVuJ3QgaW50cm9kdWNpbmcgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgaGVyZS4gTXkgZm9jdXMgd2lsbCBiZSBvbiBtZW1vcnkgbWFuYWdlbWVudCB0b287IGhvdyBlZmZpY2llbnRseSBhcmUgcmVzb3VyY2VzIGZyZWVkPyBBbnkgY2hhbmNlIG9mIGxlYWtzPyBMZXQncyBjaGVjayB0aGUgY29kZSBhbmQgc2VlIHdoYXQgc3VycHJpc2VzIGl0IGhvbGRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjI0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6MDQ6NTEuOTI0MjczMTIzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Nzk0MTgyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYmRfZ2VubF9kaXNjb25uZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuYz0yMzIzPXN0YXRpYyB2b2lkIG5iZF9kaXNjb25uZWN0X2FuZF9wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM0My1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIzNDQ6c3RhdGljIGludCBuYmRfZ2VubF9kaXNjb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzQ1LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MjUwMj1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5iZF9jb25uZWN0X2dlbmxfb3BzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MTAtXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjUxMTpcXHRcXHQuZG9pdFxcdD0gbmJkX2dlbmxfZGlzY29ubmVjdCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MTItXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6MDQ6NTEuOTkyMjIxODE5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NjMzMzYzNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBgbmJkX2dlbmxfc3RhdHVzYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoaW5ncy4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gY2hlY2sgYG5iZF9nZW5sX3N0YXR1c2AuIEl0J3MgdGhlIGdvLXRvIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHdoZXJlIHRoaW5ncyBzdGFuZCB3aXRoIHRoZSBHZW5lcmljIE5ldGxpbmsgaW50ZXJmYWNlIGFuZCwgbW9yZSBzcGVjaWZpY2FsbHksIE5ldHdvcmsgQmxvY2sgRGV2aWNlIGludGVyYWN0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gZ2V0IGEgaGlnaC1sZXZlbCBvdmVydmlldyBvZiB0aGUgZGV2aWNlIHN0YXR1cywgd2hldGhlciBvciBub3QgdGhlIHN1YnN5c3RlbSBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHksIGFueSByZWNlbnQgZXJyb3JzIGl0J3MgZW5jb3VudGVyZWQsIGFuZCwgb2YgY291cnNlLCB0aGUgZ2VuZXJhbCBoZWFsdGggb2YgdGhlIE5CRCBwcm90b2NvbCBhdCB0aGUgR2VuZXJpYyBOZXRsaW5rIGxldmVsLiBUaGlzIHdpbGwsIGhvcGVmdWxseSwgcXVpY2tseSBpbGx1bWluYXRlIHRoZSBwcm9ibGVtLiBGcm9tIHRoZXJlLCBJIGNhbiBwaW5wb2ludCB3aGF0IHRoZSBuZXh0IGxvZ2ljYWwgaW52ZXN0aWdhdGlvbiBpcy4gUGVyaGFwcyBhIGRlZXBlciBkaXZlIGludG8gc3BlY2lmaWMgZXJyb3IgY29kZXMsIG9yIG1heWJlIGl04oCZcyBhIGRlcGVuZGVuY3kgaXNzdWUgd2l0aCBhIHJlbGF0ZWQgbW9kdWxlLiBFaXRoZXIgd2F5LCBgbmJkX2dlbmxfc3RhdHVzYCBpcyB0aGUgZ2F0ZXdheSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjdXJyZW50IGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE0MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIwOjA0OjU1Ljk1NTU2MDY3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzM0NzM1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYmRfZ2VubF9zdGF0dXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jPTE3NT1zdGF0aWMgdm9pZCBuYmRfY29ubmVjdF9yZXBseShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBpbnQgaW5kZXgpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTc2OnN0YXRpYyBpbnQgbmJkX2dlbmxfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTc3LXN0YXRpYyB2b2lkIG5iZF9kZWFkX2xpbmtfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0yNTAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmJkX2Nvbm5lY3RfZ2VubF9vcHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUyMC1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTIxOlxcdFxcdC5kb2l0XFx0PSBuYmRfZ2VubF9zdGF0dXMsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTIyLVxcdH0sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI1NzQ9c3RhdGljIGludCBzdGF0dXNfY2IoaW50IGlkLCB2b2lkICpwdHIsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1NzktXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTgwOnN0YXRpYyBpbnQgbmJkX2dlbmxfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTgxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6MDQ6NTYuMDMyOTEyMTA1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzQ4NTcyNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIEludGVyZmFjZSoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgY29yZSBlbnRyeSBwb2ludHMgZm9yIHRoaXMgTkJEIGRyaXZlci4gRmlyc3Qgb2ZmLCBJJ3ZlIGdvdCBgbmJkX2lvY3RsYCwgd2hpY2ggSSBleHBlY3QgdG8gaGFuZGxlIHRoZSBjbGFzc2ljIGlvY3RsIGNhbGxzIOKAkyB0aG9zZSBhcmUgdGhlIGJyZWFkIGFuZCBidXR0ZXIgZm9yIGludGVyYWN0aW9uLiBUaGVuIHRoZXJlIGFyZSB0aGUgZ2VubCAoR2VuZXJpYyBOZXRsaW5rKSBmdW5jdGlvbnM6IGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYG5iZF9nZW5sX2Rpc2Nvbm5lY3RgLCBhbmQgYG5iZF9nZW5sX3N0YXR1c2AuIFRob3NlIGFyZSBsaWtlbHkgdGhlIG1vZGVybiwgbW9yZSByb2J1c3QgaW50ZXJmYWNlIGxldmVyYWdpbmcgdGhlIE5ldGxpbmsgcHJvdG9jb2wuIEFuZCwgb2YgY291cnNlLCB0aGVyZSdzIGBuYmRfaW5pdGAsIHdoaWNoIEknZCBpbW1lZGlhdGVseSBwZWcgYXMgdGhlIG1vZHVsZSBpbml0aWFsaXphdGlvbiByb3V0aW5lLCByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgZHJpdmVyJ3MgZW52aXJvbm1lbnQuIE5vdywgbGV0J3MgcXVpY2tseSBjb25maXJtIHdoZXRoZXIgTkJEIGlzIGV2ZW4gY29uZmlndXJlZCBpbnRvIHRoZSBrZXJuZWwuIFRpbWUgdG8gY2hlY2sgdGhlIEtjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzY0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6MDU6MDAuMjY3NzcyNTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMjAzMDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX05CRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTE5ND1zb3VyY2UgXFxcImRyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTUtXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE5Njpjb25maWcgQkxLX0RFVl9OQkRcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk3LVxcdHRyaXN0YXRlIFxcXCJOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMDowNTowMC4zNDg5ODAxMDVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzNDEzMDExNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6XG5cbioqVW5wYWNraW5nIERlcGVuZGVuY2llczogQkxLXFxfREVWXFxfTkJEKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgYEJMS19ERVZfTkJEYC4uLiB3aGF0IG90aGVyIHBpZWNlcyBvZiB0aGUga2VybmVsIHB1enpsZSBkb2VzICppdCogbGVhbiBvbj9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZm91bmRhdGlvbmFsIHJlcXVpcmVtZW50cy4gVGhpcyBpc24ndCBqdXN0IGFib3V0IHVuZGVyc3RhbmRpbmcgaXRzIGRpcmVjdCBmdW5jdGlvbmFsaXR5LCBidXQgYWxzbyBhYm91dCBtYXBwaW5nIG91dCBpdHMgcmVsYXRpb25zaGlwcyB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJ20gZXNzZW50aWFsbHkgYnVpbGRpbmcgYSBkZXBlbmRlbmN5IGdyYXBoIGluIG15IGhlYWQuIFdoYXQgb3RoZXIgc3Vic3lzdGVtcyBvciBrZXJuZWwgbW9kdWxlcyBkb2VzIGl0IGNhbGw/IFdoYXQgaW5mcmFzdHJ1Y3R1cmUgZG9lcyBpdCBsZXZlcmFnZT8gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUgY3JpdGljYWwgdG8gZnVsbHkgZ3Jhc3BpbmcgaXRzIHJvbGUgYW5kIGJlaGF2aW9yLiBTbywgbGV0J3Mgc3RhcnQgcGVlbGluZyBiYWNrIHRoZSBsYXllcnMgYW5kIHNlZSB3aGF0IG1ha2VzIHRoaXMgdGhpbmcgdGljay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNjUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMDowNTowMy41ODMxMTMxMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjIzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5NixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5NjpcXHRjb25maWcgQkxLX0RFVl9OQkRcXG4gMTk3OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcbiAxOTg6XFx0XFx0ZGVwZW5kcyBvbiBORVRcXG4gMTk5OlxcdFxcdGhlbHBcXG4gMjAwOlxcdFxcdCAgU2F5aW5nIFkgaGVyZSB3aWxsIGFsbG93IHlvdXIgY29tcHV0ZXIgdG8gYmUgYSBjbGllbnQgZm9yIG5ldHdvcmtcXG4gMjAxOlxcdFxcdCAgYmxvY2sgZGV2aWNlcywgaS5lLiBpdCB3aWxsIGJlIGFibGUgdG8gdXNlIGJsb2NrIGRldmljZXMgZXhwb3J0ZWQgYnlcXG4gMjAyOlxcdFxcdCAgc2VydmVycyAobW91bnQgZmlsZSBzeXN0ZW1zIG9uIHRoZW0gZXRjLikuIENvbW11bmljYXRpb24gYmV0d2VlblxcbiAyMDM6XFx0XFx0ICBjbGllbnQgYW5kIHNlcnZlciB3b3JrcyBvdmVyIFRDUC9JUCBuZXR3b3JraW5nLCBidXQgdG8gdGhlIGNsaWVudFxcbiAyMDQ6XFx0XFx0ICBwcm9ncmFtIHRoaXMgaXMgaGlkZGVuOiBpdCBsb29rcyBsaWtlIGEgcmVndWxhciBsb2NhbCBmaWxlIGFjY2VzcyB0b1xcbiAyMDU6XFx0XFx0ICBhIGJsb2NrIGRldmljZSBzcGVjaWFsIGZpbGUgc3VjaCBhcyAvZGV2L25kMC5cXG4gMjA2OlxcdFxcbiAyMDc6XFx0XFx0ICBOZXR3b3JrIGJsb2NrIGRldmljZXMgYWxzbyBhbGxvd3MgeW91IHRvIHJ1biBhIGJsb2NrLWRldmljZSBpblxcbiAyMDg6XFx0XFx0ICB1c2VybGFuZCAobWFraW5nIHNlcnZlciBhbmQgY2xpZW50IHBoeXNpY2FsbHkgdGhlIHNhbWUgY29tcHV0ZXIsXFxuIDIwOTpcXHRcXHQgIGNvbW11bmljYXRpbmcgdXNpbmcgdGhlIGxvb3BiYWNrIG5ldHdvcmsgZGV2aWNlKS5cXG4gMjEwOlxcdFxcbiAyMTE6XFx0XFx0ICBSZWFkIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmxvY2tkZXYvbmJkLnJzdFxcdTAwM2UgZm9yIG1vcmUgaW5mb3JtYXRpb24sXFxuIDIxMjpcXHRcXHQgIGVzcGVjaWFsbHkgYWJvdXQgd2hlcmUgdG8gZmluZCB0aGUgc2VydmVyIGNvZGUsIHdoaWNoIHJ1bnMgaW4gdXNlclxcbiAyMTM6XFx0XFx0ICBzcGFjZSBhbmQgZG9lcyBub3QgbmVlZCBzcGVjaWFsIGtlcm5lbCBzdXBwb3J0LlxcbiAyMTQ6XFx0XFxuIDIxNTpcXHRcXHQgIE5vdGUgdGhhdCB0aGlzIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIG5ldHdvcmsgZmlsZSBzeXN0ZW1zIE5GU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMDowNTowMy41ODMyMzc3NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTU3Mjg4NTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQkxLX0RFVl9OQkQgTW9kdWxlKipcblxuT2theSwgc28gYEJMS19ERVZfTkJEYCByZXF1aXJlcyBgTkVUYC4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g7IHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBhcmUganVzdCBgQkxLX0RFVl9OQkRgLiBOb3csIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBUaGUgcHJvbXB0IGVtcGhhc2l6ZXMgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBMZXQncyBzZWUgaWYgYW55IG9mIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIG5vbi1zdGF0aWMuIEhhbmcgb24uLi4gYG5iZF9pb2N0bGAgaXMgKnN0YXRpYyouIEFuZCBzbyBpcyBgbmJkX2dlbmxfY29ubmVjdGAuIEhtbS4uLiBhcmUgdGhlcmUgKmFueSogbW9kaWZpZWQgZnVuY3Rpb25zIHRoYXQgYXJlbid0IHN0YXRpYz8gTG9va3MgbGlrZSBubywgdGhleSBhcmUgYWxsIHN0YXRpYy5cblxuQnV0IHRoZSBndWlkYW5jZSBJJ20gZ2l2ZW4gcHJlZmVycyBub24tc3RhdGljIGVudHJ5IHBvaW50cy4gSWYgKmFsbCogb2YgdGhlIGVudHJ5IHBvaW50cyBhcmUgc3RhdGljLCB0aGVuIHdlIGNhbiBzdGlsbCB1c2UgdGhlIHN0YXRpYyBvbmVzIGlmIHRoZXkgYXJlIG5vdCBpbmxpbmVkLiBSaWdodD8gTGV0IG1lIGNoZWNrLiBgbmJkX2lvY3RsYCwgYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBhbmQgYG5iZF9nZW5sX2Rpc2Nvbm5lY3RgIGFyZSBhbGwgcmVnaXN0ZXJlZCBpbiBzdHJ1Y3RzLCBtZWFuaW5nIHRoZXkncmUgbm90IGlubGluZWQuIE9rYXksIHNvIHRoYXQgc2hvdWxkIGJlIGZpbmUgdGhlbi4gV2FpdCwgSSB0aGluayBgbmJkX2lvY3RsYCBnZXRzIGNhbGxlZCBieSBzb21ldGhpbmcgaW4gYG5iZF9mb3BzYCwgc28gSSBzaG91bGQgcHJvYmFibHkgdmVyaWZ5IHRoYXQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3MzYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMDowNTowOC43NDA1Mjg3ODhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMjcwNDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5iZF9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmM9MTYyMj1zdGF0aWMgdm9pZCBuYmRfc2V0X2NtZF90aW1lb3V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHU2NCB0aW1lb3V0KVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjMxLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggY29uZmlnX2xvY2sgaGVsZCAqL1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTYzMjpzdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjMzLVxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY3OC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2Nzk6c3RhdGljIGludCBuYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY4MC1cXHRcXHQgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzAxLVxcdCAgICAoY21kID09IE5CRF9ESVNDT05ORUNUIHx8IGNtZCA9PSBOQkRfQ0xFQVJfU09DSykpXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzAyOlxcdFxcdGVycm9yID0gX19uYmRfaW9jdGwoYmRldiwgbmJkLCBjbWQsIGFyZyk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzAzLVxcdGVsc2VcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MTgwNj1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG5iZF9mb3BzID1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTgxMC1cXHQucmVsZWFzZSA9XFx0bmJkX3JlbGVhc2UsXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxODExOlxcdC5pb2N0bCA9XFx0bmJkX2lvY3RsLFxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTgxMjpcXHQuY29tcGF0X2lvY3RsID1cXHRuYmRfaW9jdGwsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xODEzLVxcdC5mcmVlX2Rpc2sgPVxcdG5iZF9mcmVlX2Rpc2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIwOjA1OjA4LjgzMTgwNDE5M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDgyMDQ2Mjc5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5CRCBEcml2ZXIgUGF0Y2ggZm9yIEZ1enppbmcgRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIE5CRCBkcml2ZXIsIGFuZCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyBpZGVudGlmeWluZyB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gSXQncyBjbGVhciB0aGF0IGBuYmRfaW9jdGxgIGhhbmRsZXMgdGhlIGlvY3RsIGludGVyZmFjZSwgYW5kIGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYW5kIGBuYmRfZ2VubF9kaXNjb25uZWN0YCBhcmUgdGhlIE5ldGxpbmsgaGFuZGxlcnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBnZXQgdGhlIHJpZ2h0IGZ1bmN0aW9ucyB0byB0YXJnZXQgd2l0aCBmdXp6aW5nLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGluY2x1ZGUgdGhvc2UsIGFsb25nIHdpdGggYG5iZF9hZGRfc29ja2V0YCwgYG5iZF9zZXRfc2l6ZWAsIGBmaW5kX2ZhbGxiYWNrYCwgYG5iZF9jb25maWdfcHV0YCwgYG5iZF9zdGFydF9kZXZpY2VgLCBhbmQgYG5iZF9kZXZfYWRkYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgbW9zdCBjcml0aWNhbCBwb2ludHMuIEhvd2V2ZXIsIEkgbmVlZCB0byBzdGljayB3aXRoIHdoYXQgdGhlIHByb21wdCBzYXlzLCB3aGljaCBpcyB0byBcIlByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1wiLlxuXG5BbHJpZ2h0LCBzbyBhIHF1aWNrIGNoZWNrIHRlbGxzIG1lIHRoYXQgYG5iZF9hZGRfc29ja2V0YCwgYG5iZF9zZXRfc2l6ZWAsIGV0Yy4gYXJlIHN0YXRpYywgd2hpY2ggSSBleHBlY3RlZC4gSG93ZXZlciwgYG5iZF9pb2N0bGAgYW5kIGBuYmRfZ2VubF9jb25uZWN0YCBhcmUgZW50cnkgcG9pbnRzLCBhbmQgYWxzbyBzdGF0aWMuIEJ1dCB0aGVzZSBhcmVuJ3QgaW5saW5lZCwgdGhleSBhcmUgcmVnaXN0ZXJlZCBhcyBjYWxsYmFja3MuIEl0IGxvb2tzIGxpa2UgdGhlIG1vc3Qgc3VpdGFibGUgZW50cnkgcG9pbnRzIGFyZSB0aGUgaW9jdGwgYW5kIE5ldGxpbmsgaGFuZGxlcnM6IGBuYmRfaW9jdGxgLCBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGFuZCBgbmJkX2dlbmxfZGlzY29ubmVjdGAuIFRoYXQncyB3aGF0IEkgd2lsbCBiZSB0YXJnZXRpbmcuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgd2lsbCB2ZXJpZnkgdGhhdCBgbmJkX2lvY3RsYCBpcyBpbmRlZWQgc3RhdGljLiBPa2F5LCB5ZXMsIGl0J3MgYHN0YXRpYyBpbnQgbmJkX2lvY3RsKC4uLilgLlxuXG5UaGlzIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIGxpa2UgdGhlIGBucl9od19xdWV1ZXNgIG1vZHVsZSBwYXJhbWV0ZXIsIHRoZSBhZGRpdGlvbiBvZiB0aGUgYGZyZWV6ZWAgYm9vbGVhbiB0byBgbmJkX3NldF9zaXplYCwgZml4ZXMgdG8gYGZpbmRfZmFsbGJhY2tgLCBhbmQgY2hhbmdlcyB0byBwcmV2ZW50IGFkZGluZyBzb2NrZXRzIHRvIGEgcnVubmluZyBkZXZpY2UuIFRoZSBOZXRsaW5rIHNvY2tldCBwYXJzaW5nIGhhcyBiZWVuIHJlZmFjdG9yZWQgYXMgd2VsbC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjb3VsZCBiZW5lZml0IGZyb20gZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MTcsIk91dHB1dFRva2VucyI6MTUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIwOjA1OjE5LjY1MjI2OTUxOFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzI0ODc2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYmRfaW9jdGxcIixcbiAgICBcIm5iZF9nZW5sX2Nvbm5lY3RcIixcbiAgICBcIm5iZF9nZW5sX3JlY29uZmlndXJlXCIsXG4gICAgXCJuYmRfZ2VubF9kaXNjb25uZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIGRyaXZlciwgY2hhbmdpbmcgaG93IHNvY2tldHMgYXJlIGFkZGVkLCBob3cgZmFsbGJhY2sgY29ubmVjdGlvbnMgYXJlIGZvdW5kLCBhbmQgaG93IGJsb2NrIHNpemVzIGFyZSBzZXQuIEl0IGFsc28gaW50cm9kdWNlcyBhIG5ldyBtb2R1bGUgcGFyYW1ldGVyIGZvciBoYXJkd2FyZSBxdWV1ZXMgYW5kIHJlZmFjdG9ycyBuZXRsaW5rIHNvY2tldCBwYXJzaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgTkJEIGxvZ2ljIHJlYWNoYWJsZSB2aWEgaW9jdGwgYW5kIG5ldGxpbmssIHNvIHRoZXkgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX05CRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5iZF9pb2N0bFwiLFxuICAgIFwibmJkX2dlbmxfY29ubmVjdFwiLFxuICAgIFwibmJkX2dlbmxfcmVjb25maWd1cmVcIixcbiAgICBcIm5iZF9nZW5sX2Rpc2Nvbm5lY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgZHJpdmVyLCBjaGFuZ2luZyBob3cgc29ja2V0cyBhcmUgYWRkZWQsIGhvdyBmYWxsYmFjayBjb25uZWN0aW9ucyBhcmUgZm91bmQsIGFuZCBob3cgYmxvY2sgc2l6ZXMgYXJlIHNldC4gSXQgYWxzbyBpbnRyb2R1Y2VzIGEgbmV3IG1vZHVsZSBwYXJhbWV0ZXIgZm9yIGhhcmR3YXJlIHF1ZXVlcyBhbmQgcmVmYWN0b3JzIG5ldGxpbmsgc29ja2V0IHBhcnNpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBOQkQgbG9naWMgcmVhY2hhYmxlIHZpYSBpb2N0bCBhbmQgbmV0bGluaywgc28gdGhleSBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowbnqs7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 19:41:40 +0000 UTC FinishedAt: 2026-07-31 20:05:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NBD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NBD" ], "series_id": "a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "nbd_ioctl", "nbd_genl_connect", "nbd_genl_reconfigure", "nbd_genl_disconnect" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTkJEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmJkX2lvY3RsJiMzNDssCiAgICAmIzM0O25iZF9nZW5sX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfcmVjb25maWd1cmUmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfZGlzY29ubmVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgZHJpdmVyLCBjaGFuZ2luZyBob3cgc29ja2V0cyBhcmUgYWRkZWQsIGhvdyBmYWxsYmFjayBjb25uZWN0aW9ucyBhcmUgZm91bmQsIGFuZCBob3cgYmxvY2sgc2l6ZXMgYXJlIHNldC4gSXQgYWxzbyBpbnRyb2R1Y2VzIGEgbmV3IG1vZHVsZSBwYXJhbWV0ZXIgZm9yIGhhcmR3YXJlIHF1ZXVlcyBhbmQgcmVmYWN0b3JzIG5ldGxpbmsgc29ja2V0IHBhcnNpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBOQkQgbG9naWMgcmVhY2hhYmxlIHZpYSBpb2N0bCBhbmQgbmV0bGluaywgc28gdGhleSBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGNlMjNmOTI1ZmM0ZGQ1NGE2YWQ5YmQ5MDZlODBjOWYzMTI1MmRkOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDIwOjA0OjI3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbmJkLmMgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXG5pbmRleCA4ZjEwNzYyZTkwZWY3Li4yMTk0YzdkN2IyZWFlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay9uYmQuY1xuQEAgLTE2Niw2ICYjNDM7MTY2LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKm5iZF9kYmdfZGlyO1xuIFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmJkc19tYXggPSAxNjtcbiBzdGF0aWMgaW50IG1heF9wYXJ0ID0gMTY7XG4mIzQzO3N0YXRpYyBpbnQgbnJfaHdfcXVldWVzID0gMTtcbiBzdGF0aWMgaW50IHBhcnRfc2hpZnQ7XG4gXG4gc3RhdGljIGludCBuYmRfZGV2X2RiZ19pbml0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpO1xuQEAgLTMzMSw3ICYjNDM7MzMyLDggQEAgc3RhdGljIHZvaWQgbmJkX21hcmtfbnNvY2tfZGVhZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxuIFx0bnNvY2stXHUwMDNlc2VudCA9IDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpXG4mIzQzO3N0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUsXG4mIzQzO1x0XHRcdGJvb2wgZnJlZXplKVxuIHtcbiBcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuIFx0aW50IGVycm9yO1xuQEAgLTM3MSw3ICYjNDM7MzczLDEzIEBAIHN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpXG4gXG4gXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gYmxrc2l6ZTtcbiBcdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gYmxrc2l6ZTtcbi1cdGVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZsaW0pO1xuJiM0MztcbiYjNDM7XHRpZiAoZnJlZXplKVxuJiM0MztcdFx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsXG4mIzQzO1x0XHRcdFx0XHUwMDI2bGltKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRlcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZsaW0pO1xuJiM0MztcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuQEAgLTEwNjEsNDAgJiM0MzsxMDY5LDMxIEBAIHN0YXRpYyBpbnQgZmluZF9mYWxsYmFjayhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgaW5kZXgpXG4gXHRpbnQgbmV3X2luZGV4ID0gLTE7XG4gXHRzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrID0gY29uZmlnLVx1MDAzZXNvY2tzW2luZGV4XTtcbiBcdGludCBmYWxsYmFjayA9IG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4O1xuJiM0MztcdGludCBpO1xuIFxuIFx0aWYgKHRlc3RfYml0KE5CRF9SVF9ESVNDT05ORUNURUQsIFx1MDAyNmNvbmZpZy1cdTAwM2VydW50aW1lX2ZsYWdzKSlcbiBcdFx0cmV0dXJuIG5ld19pbmRleDtcbiBcbi1cdGlmIChjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIFx1MDAzYz0gMSkge1xuLVx0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC1cdTAwM2VkaXNrKSxcbi1cdFx0XHRcdCAgICBcJiMzNDtEZWFkIGNvbm5lY3Rpb24sIGZhaWxlZCB0byBmaW5kIGEgZmFsbGJhY2tcXG5cJiMzNDspO1xuLVx0XHRyZXR1cm4gbmV3X2luZGV4O1xuLVx0fVxuJiM0MztcdGlmIChjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIFx1MDAzYz0gMSlcbiYjNDM7XHRcdGdvdG8gbm9fZmFsbGJhY2s7XG4gXG4gXHRpZiAoZmFsbGJhY2sgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBmYWxsYmFjayBcdTAwM2MgY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9ucyBcdTAwMjZcdTAwMjZcbiBcdCAgICAhY29uZmlnLVx1MDAzZXNvY2tzW2ZhbGxiYWNrXS1cdTAwM2VkZWFkKVxuIFx0XHRyZXR1cm4gZmFsbGJhY2s7XG4gXG4tXHRpZiAobnNvY2stXHUwMDNlZmFsbGJhY2tfaW5kZXggXHUwMDNjIDAgfHxcbi1cdCAgICBuc29jay1cdTAwM2VmYWxsYmFja19pbmRleCBcdTAwM2U9IGNvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnMgfHxcbi1cdCAgICBjb25maWctXHUwMDNlc29ja3NbbnNvY2stXHUwMDNlZmFsbGJhY2tfaW5kZXhdLVx1MDAzZWRlYWQpIHtcbi1cdFx0aW50IGk7XG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdFx0aWYgKGkgPT0gaW5kZXgpXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRpZiAoIWNvbmZpZy1cdTAwM2Vzb2Nrc1tpXS1cdTAwM2VkZWFkKSB7XG4tXHRcdFx0XHRuZXdfaW5kZXggPSBpO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXHRcdG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4ID0gbmV3X2luZGV4O1xuLVx0XHRpZiAobmV3X2luZGV4IFx1MDAzYyAwKSB7XG4tXHRcdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtXHUwMDNlZGlzayksXG4tXHRcdFx0XHRcdCAgICBcJiMzNDtEZWFkIGNvbm5lY3Rpb24sIGZhaWxlZCB0byBmaW5kIGEgZmFsbGJhY2tcXG5cJiMzNDspO1xuLVx0XHRcdHJldHVybiBuZXdfaW5kZXg7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9uczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChpICE9IGluZGV4IFx1MDAyNlx1MDAyNiAhY29uZmlnLVx1MDAzZXNvY2tzW2ldLVx1MDAzZWRlYWQpIHtcbiYjNDM7XHRcdFx0bmV3X2luZGV4ID0gaTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdH1cbi1cdG5ld19pbmRleCA9IG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4O1xuJiM0MztcdG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4ID0gbmV3X2luZGV4O1xuJiM0MztcdGlmIChuZXdfaW5kZXggXHUwMDNlPSAwKVxuJiM0MztcdFx0cmV0dXJuIG5ld19pbmRleDtcbiYjNDM7XG4mIzQzO25vX2ZhbGxiYWNrOlxuJiM0MztcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLVx1MDAzZWRpc2spLFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7RGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXFxuXCYjMzQ7KTtcbiBcdHJldHVybiBuZXdfaW5kZXg7XG4gfVxuIFxuQEAgLTEyODEsMjMgJiM0MzsxMjgwLDIzIEBAIHN0YXRpYyBpbnQgbmJkX2FkZF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcsXG4gXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xuIFx0c3RydWN0IG5iZF9zb2NrICoqc29ja3M7XG4gXHRzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrO1xuLVx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xuIFx0aW50IGVycjtcbiBcbiBcdC8qIEFyZyB3aWxsIGJlIGNhc3QgdG8gaW50LCBjaGVjayBpdCB0byBhdm9pZCBvdmVyZmxvdyAqL1xuIFx0aWYgKGFyZyBcdTAwM2UgSU5UX01BWClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChuYmQtXHUwMDNlcGlkKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRpc2tfdG9fZGV2KG5iZC1cdTAwM2VkaXNrKSxcbiYjNDM7XHRcdFx0XCYjMzQ7Q2Fubm90IGFkZCBzb2NrZXQgdG8gYSBydW5uaW5nIGRldmljZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRzb2NrID0gbmJkX2dldF9zb2NrZXQobmJkLCBhcmcsIFx1MDAyNmVycik7XG4gXHRpZiAoIXNvY2spXG4gXHRcdHJldHVybiBlcnI7XG4gXHRuYmRfcmVjbGFzc2lmeV9zb2NrZXQoc29jayk7XG4gXG4tXHQvKlxuLVx0ICogV2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJiMzOTt0IGdldCBhbnkgZXJyYW50IHJlcXVlc3RzIHdoaWxlIHdlJiMzOTtyZVxuLVx0ICogcmVhbGxvY2F0aW5nIHRoZSAtXHUwMDNlc29ja3MgYXJyYXkuXG4tXHQgKi9cbi1cdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSk7XG4tXG4gXHRpZiAoIW5ldGxpbmsgXHUwMDI2XHUwMDI2ICFuYmQtXHUwMDNldGFza19zZXR1cCBcdTAwMjZcdTAwMjZcbiBcdCAgICAhdGVzdF9iaXQoTkJEX1JUX0JPVU5ELCBcdTAwMjZjb25maWctXHUwMDNlcnVudGltZV9mbGFncykpXG4gXHRcdG5iZC1cdTAwM2V0YXNrX3NldHVwID0gY3VycmVudDtcbkBAIC0xMzM3LDEyICYjNDM7MTMzNiwxMCBAQCBzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxuIFx0SU5JVF9XT1JLKFx1MDAyNm5zb2NrLVx1MDAzZXdvcmssIG5iZF9wZW5kaW5nX2NtZF93b3JrKTtcbiBcdHNvY2tzW2NvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnMmIzQzOyYjNDM7XSA9IG5zb2NrO1xuIFx0YXRvbWljX2luYyhcdTAwMjZjb25maWctXHUwMDNlbGl2ZV9jb25uZWN0aW9ucyk7XG4tXHRibGtfbXFfdW5mcmVlemVfcXVldWUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIG1lbWZsYWdzKTtcbiBcbiBcdHJldHVybiAwO1xuIFxuIHB1dF9zb2NrZXQ6XG4tXHRibGtfbXFfdW5mcmVlemVfcXVldWUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIG1lbWZsYWdzKTtcbiBcdHNvY2tmZF9wdXQoc29jayk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbkBAIC0xNDcxLDggJiM0MzsxNDY4LDEzIEBAIHN0YXRpYyB2b2lkIG5iZF9jb25maWdfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4gXHRpZiAocmVmY291bnRfZGVjX2FuZF9tdXRleF9sb2NrKFx1MDAyNm5iZC1cdTAwM2Vjb25maWdfcmVmcyxcbiBcdFx0XHRcdFx0XHUwMDI2bmJkLVx1MDAzZWNvbmZpZ19sb2NrKSkge1xuIFx0XHRzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnID0gbmJkLVx1MDAzZWNvbmZpZztcbiYjNDM7XHRcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuIFx0XHRuYmRfZGV2X2RiZ19jbG9zZShuYmQpO1xuIFx0XHRpbnZhbGlkYXRlX2Rpc2sobmJkLVx1MDAzZWRpc2spO1xuJiM0MztcdFx0LyogcmVzZXQgd3JpdGUgY2FjaGUgKi9cbiYjNDM7XHRcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuJiM0MztcdFx0bGltLmZlYXR1cmVzIFx1MDAyNj0gfihCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX0ZVQSk7XG4mIzQzO1x0XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSwgXHUwMDI2bGltKTtcbiBcdFx0aWYgKG5iZC1cdTAwM2Vjb25maWctXHUwMDNlYnl0ZXNpemUpXG4gXHRcdFx0a29iamVjdF91ZXZlbnQoXHUwMDI2bmJkX3RvX2RldihuYmQpLVx1MDAzZWtvYmosIEtPQkpfQ0hBTkdFKTtcbiBcdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChOQkRfUlRfSEFTX1BJRF9GSUxFLFxuQEAgLTE1NzQsNyAmIzQzOzE1NzYsNyBAQCBzdGF0aWMgaW50IG5iZF9zdGFydF9kZXZpY2Uoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbiBcdFx0YXJncy1cdTAwM2VpbmRleCA9IGk7XG4gXHRcdHF1ZXVlX3dvcmsobmJkLVx1MDAzZXJlY3Zfd29ya3EsIFx1MDAyNmFyZ3MtXHUwMDNld29yayk7XG4gXHR9XG4tXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgY29uZmlnLVx1MDAzZWJ5dGVzaXplLCBuYmRfYmxrc2l6ZShjb25maWcpKTtcbiYjNDM7XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgY29uZmlnLVx1MDAzZWJ5dGVzaXplLCBuYmRfYmxrc2l6ZShjb25maWcpLCBmYWxzZSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbmJkX3N0YXJ0X2RldmljZV9pb2N0bChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuQEAgLTE2NDIsMTMgJiM0MzsxNjQ0LDEzIEBAIHN0YXRpYyBpbnQgX19uYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCxcbiBcdGNhc2UgTkJEX1NFVF9TT0NLOlxuIFx0XHRyZXR1cm4gbmJkX2FkZF9zb2NrZXQobmJkLCBhcmcsIGZhbHNlKTtcbiBcdGNhc2UgTkJEX1NFVF9CTEtTSVpFOlxuLVx0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgY29uZmlnLVx1MDAzZWJ5dGVzaXplLCBhcmcpO1xuJiM0MztcdFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGNvbmZpZy1cdTAwM2VieXRlc2l6ZSwgYXJnLCB0cnVlKTtcbiBcdGNhc2UgTkJEX1NFVF9TSVpFOlxuLVx0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYXJnLCBuYmRfYmxrc2l6ZShjb25maWcpKTtcbiYjNDM7XHRcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBhcmcsIG5iZF9ibGtzaXplKGNvbmZpZyksIHRydWUpO1xuIFx0Y2FzZSBOQkRfU0VUX1NJWkVfQkxPQ0tTOlxuIFx0XHRpZiAoY2hlY2tfc2hsX292ZXJmbG93KGFyZywgY29uZmlnLVx1MDAzZWJsa3NpemVfYml0cywgXHUwMDI2Ynl0ZXNpemUpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZykpO1xuJiM0MztcdFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGJ5dGVzaXplLCBuYmRfYmxrc2l6ZShjb25maWcpLCB0cnVlKTtcbiBcdGNhc2UgTkJEX1NFVF9USU1FT1VUOlxuIFx0XHRuYmRfc2V0X2NtZF90aW1lb3V0KG5iZCwgYXJnKTtcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTk0MSw3ICYjNDM7MTk0Myw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBuYmRfbXFfb3BzID0ge1xuIFx0LnRpbWVvdXRcdD0gbmJkX3htaXRfdGltZW91dCxcbiB9O1xuIFxuLXN0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcylcbiYjNDM7c3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzLFxuJiM0MztcdFx0XHRcdCAgICAgICBpbnQgbnJfaHdfcXVldWVzKVxuIHtcbiBcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0ge1xuIFx0XHQubWF4X2h3X3NlY3RvcnNcdFx0PSA2NTUzNixcbkBAIC0xOTU4LDcgJiM0MzsxOTYxLDcgQEAgc3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdG5iZC1cdTAwM2V0YWdfc2V0Lm9wcyA9IFx1MDAyNm5iZF9tcV9vcHM7XG4tXHRuYmQtXHUwMDNldGFnX3NldC5ucl9od19xdWV1ZXMgPSAxO1xuJiM0MztcdG5iZC1cdTAwM2V0YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IG5yX2h3X3F1ZXVlcztcbiBcdG5iZC1cdTAwM2V0YWdfc2V0LnF1ZXVlX2RlcHRoID0gMTI4O1xuIFx0bmJkLVx1MDAzZXRhZ19zZXQubnVtYV9ub2RlID0gTlVNQV9OT19OT0RFO1xuIFx0bmJkLVx1MDAzZXRhZ19zZXQuY21kX3NpemUgPSBzaXplb2Yoc3RydWN0IG5iZF9jbWQpO1xuQEAgLTIxMDMsMTAgJiM0MzsyMTA2LDYyIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfc2l6ZV9zZXQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbiBcdFx0YnNpemUgPSBubGFfZ2V0X3U2NChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX0JMT0NLX1NJWkVfQllURVNdKTtcbiBcbiBcdGlmIChieXRlcyAhPSBjb25maWctXHUwMDNlYnl0ZXNpemUgfHwgYnNpemUgIT0gbmJkX2Jsa3NpemUoY29uZmlnKSlcbi1cdFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGJ5dGVzLCBic2l6ZSk7XG4mIzQzO1x0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXMsIGJzaXplLCB0cnVlKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogV2FsayB0aGUgTkJEX0FUVFJfU09DS0VUUyBuZXN0ZWQgbGlzdCBjYW4gY2FsbCBAY2IgZm9yIGVhY2ggc29ja2V0IGZkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBmZHMgd2Fsa2VkLCBvciBhIG5lZ2F0aXZlIGVycm5vLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBuYmRfZ2VubF9mb3JlYWNoX3NvY2soc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiYjNDM7XHRcdGludCAoKmNiKShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpLFxuJiM0MztcdFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBubGF0dHIgKmF0dHI7XG4mIzQzO1x0aW50IHJlbSwgY291bnQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLCByZW0pIHtcbiYjNDM7XHRcdHN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCAmIzQzOyAxXTtcbiYjNDM7XHRcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5sYV90eXBlKGF0dHIpICE9IE5CRF9TT0NLX0lURU0pIHtcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0O3NvY2tzIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBTT0NLX0lURU0gYXR0clxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCxcbiYjNDM7XHRcdFx0XHRcdFx0YXR0cixcbiYjNDM7XHRcdFx0XHRcdFx0bmJkX3NvY2tfcG9saWN5LFxuJiM0MztcdFx0XHRcdFx0XHRpbmZvLVx1MDAzZWV4dGFjaykpIHtcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0O2Vycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGNvdW50JiM0MzsmIzQzOztcbiYjNDM7XHRcdGlmIChjYikge1xuJiM0MztcdFx0XHRyZXQgPSBjYihuYmQsIChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNlIDApXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGNvdW50O1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBjb3VudDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2Ioc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGZkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBuYmRfZGV2aWNlICpuYmQ7XG5AQCAtMjE1OSw3ICYjNDM7MjIxNCwxMSBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdG11dGV4X3VubG9jayhcdTAwMjZuYmRfaW5kZXhfbXV0ZXgpO1xuIFxuIFx0aWYgKCFuYmQpIHtcbi1cdFx0bmJkID0gbmJkX2Rldl9hZGQoaW5kZXgsIDIpO1xuJiM0MztcdFx0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIE5VTEwsIE5VTEwpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRuYmQgPSBuYmRfZGV2X2FkZChpbmRleCwgMiwgcmV0IFx1MDAzZSAwID8gcmV0IDogMSk7XG4gXHRcdGlmIChJU19FUlIobmJkKSkge1xuIFx0XHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gYWRkIG5ldyBkZXZpY2VcXG5cJiMzNDspO1xuIFx0XHRcdHJldHVybiBQVFJfRVJSKG5iZCk7XG5AQCAtMjIyNiwzNiAmIzQzOzIyODUsOSBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10pIHtcbi1cdFx0c3RydWN0IG5sYXR0ciAqYXR0cjtcbi1cdFx0aW50IHJlbSwgZmQ7XG4tXG4tXHRcdG5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSxcbi1cdFx0XHRcdCAgICByZW0pIHtcbi1cdFx0XHRzdHJ1Y3QgbmxhdHRyICpzb2Nrc1tOQkRfU09DS19NQVgmIzQzOzFdO1xuLVxuLVx0XHRcdGlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7XG4tXHRcdFx0XHRwcl9lcnIoXCYjMzQ7c29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXFxuXCYjMzQ7KTtcbi1cdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXHRcdFx0cmV0ID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHNvY2tzLCBOQkRfU09DS19NQVgsXG4tXHRcdFx0XHRcdFx0XHQgIGF0dHIsXG4tXHRcdFx0XHRcdFx0XHQgIG5iZF9zb2NrX3BvbGljeSxcbi1cdFx0XHRcdFx0XHRcdCAgaW5mby1cdTAwM2VleHRhY2spO1xuLVx0XHRcdGlmIChyZXQgIT0gMCkge1xuLVx0XHRcdFx0cHJfZXJyKFwmIzM0O2Vycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XFxuXCYjMzQ7KTtcbi1cdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXHRcdFx0aWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRmZCA9IChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKTtcbi1cdFx0XHRyZXQgPSBuYmRfYWRkX3NvY2tldChuYmQsIGZkLCB0cnVlKTtcbi1cdFx0XHRpZiAocmV0KVxuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdH1cbi1cdH1cbiYjNDM7XHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiLCBuYmQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIG91dDtcbiBcbiBcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX0JBQ0tFTkRfSURFTlRJRklFUl0pIHtcbiBcdFx0bmJkLVx1MDAzZWJhY2tlbmQgPSBubGFfc3RyZHVwKGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkFDS0VORF9JREVOVElGSUVSXSxcbkBAIC0yMzQ0LDYgJiM0MzsyMzc2LDIwIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfZGlzY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZClcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSBuYmRfcmVjb25uZWN0X3NvY2tldChuYmQsIGZkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyZXQpIHtcbiYjNDM7XHRcdGRldl9pbmZvKG5iZF90b19kZXYobmJkKSwgXCYjMzQ7cmVjb25uZWN0ZWQgc29ja2V0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHJldCA9PSAtRU5PU1BDKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZCA9IE5VTEw7XG5AQCAtMjQ0MCw0MCAmIzQzOzI0ODYsMTAgQEAgc3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSkge1xuLVx0XHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xuLVx0XHRpbnQgcmVtLCBmZDtcbi1cbi1cdFx0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLFxuLVx0XHRcdFx0ICAgIHJlbSkge1xuLVx0XHRcdHN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCYjNDM7MV07XG4tXG4tXHRcdFx0aWYgKG5sYV90eXBlKGF0dHIpICE9IE5CRF9TT0NLX0lURU0pIHtcbi1cdFx0XHRcdHByX2VycihcJiMzNDtzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcXG5cJiMzNDspO1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCxcbi1cdFx0XHRcdFx0XHRcdCAgYXR0cixcbi1cdFx0XHRcdFx0XHRcdCAgbmJkX3NvY2tfcG9saWN5LFxuLVx0XHRcdFx0XHRcdFx0ICBpbmZvLVx1MDAzZWV4dGFjayk7XG4tXHRcdFx0aWYgKHJldCAhPSAwKSB7XG4tXHRcdFx0XHRwcl9lcnIoXCYjMzQ7ZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcXG5cJiMzNDspO1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdGZkID0gKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pO1xuLVx0XHRcdHJldCA9IG5iZF9yZWNvbm5lY3Rfc29ja2V0KG5iZCwgZmQpO1xuLVx0XHRcdGlmIChyZXQpIHtcbi1cdFx0XHRcdGlmIChyZXQgPT0gLUVOT1NQQylcbi1cdFx0XHRcdFx0cmV0ID0gMDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRkZXZfaW5mbyhuYmRfdG9fZGV2KG5iZCksIFwmIzM0O3JlY29ubmVjdGVkIHNvY2tldFxcblwmIzM0Oyk7XG4tXHRcdH1cbi1cdH1cbiYjNDM7XHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2IsIG5iZCk7XG4mIzQzO1x0LyogZm9yZWFjaF9zb2NrIHJldHVybnMgYSBwb3NpdGl2ZSBjb3VudCBvbiBzdWNjZXNzOyBkb2l0IG11c3QgcmV0dXJuIDAgKi9cbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMClcbiYjNDM7XHRcdHJldCA9IDA7XG4gb3V0OlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5iZC1cdTAwM2Vjb25maWdfbG9jayk7XG4gXHRuYmRfY29uZmlnX3B1dChuYmQpO1xuQEAgLTI3MjUsOCAmIzQzOzI3NDEsMTAgQEAgc3RhdGljIGludCBfX2luaXQgbmJkX2luaXQodm9pZClcbiBcdH1cbiBcdG5iZF9kYmdfaW5pdCgpO1xuIFxuJiM0MztcdGlmIChucl9od19xdWV1ZXMgXHUwMDNjIDEpXG4mIzQzO1x0XHRucl9od19xdWV1ZXMgPSAxO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmJkc19tYXg7IGkmIzQzOyYjNDM7KVxuLVx0XHRuYmRfZGV2X2FkZChpLCAxKTtcbiYjNDM7XHRcdG5iZF9kZXZfYWRkKGksIDEsIG5yX2h3X3F1ZXVlcyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjc4NywzICYjNDM7MjgwNSw2IEBAIG1vZHVsZV9wYXJhbShuYmRzX21heCwgaW50LCAwNDQ0KTtcbiBNT0RVTEVfUEFSTV9ERVNDKG5iZHNfbWF4LCBcJiMzNDtudW1iZXIgb2YgbmV0d29yayBibG9jayBkZXZpY2VzIHRvIGluaXRpYWxpemUgKGRlZmF1bHQ6IDE2KVwmIzM0Oyk7XG4gbW9kdWxlX3BhcmFtKG1heF9wYXJ0LCBpbnQsIDA0NDQpO1xuIE1PRFVMRV9QQVJNX0RFU0MobWF4X3BhcnQsIFwmIzM0O251bWJlciBvZiBwYXJ0aXRpb25zIHBlciBkZXZpY2UgKGRlZmF1bHQ6IDE2KVwmIzM0Oyk7XG4mIzQzO21vZHVsZV9wYXJhbShucl9od19xdWV1ZXMsIGludCwgMDQ0NCk7XG4mIzQzO01PRFVMRV9QQVJNX0RFU0MobnJfaHdfcXVldWVzLFxuJiM0MztcJiMzNDtudW1iZXIgb2YgaGFyZHdhcmUgcXVldWVzIGZvciBkZXZpY2VzIHByZS1jcmVhdGVkIGF0IG1vZHVsZSBsb2FkIChkZWZhdWx0OiAxKS4gXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9OQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuYmRfaW9jdGwmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfY29ubmVjdCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9yZWNvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9kaXNjb25uZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIsIGNoYW5naW5nIGhvdyBzb2NrZXRzIGFyZSBhZGRlZCwgaG93IGZhbGxiYWNrIGNvbm5lY3Rpb25zIGFyZSBmb3VuZCwgYW5kIGhvdyBibG9jayBzaXplcyBhcmUgc2V0LiBJdCBhbHNvIGludHJvZHVjZXMgYSBuZXcgbW9kdWxlIHBhcmFtZXRlciBmb3IgaGFyZHdhcmUgcXVldWVzIGFuZCByZWZhY3RvcnMgbmV0bGluayBzb2NrZXQgcGFyc2luZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIE5CRCBsb2dpYyByZWFjaGFibGUgdmlhIGlvY3RsIGFuZCBuZXRsaW5rLCBzbyB0aGV5IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0Y2UyM2Y5MjVmYzRkZDU0YTZhZDliZDkwNmU4MGM5ZjMxMjUyZGQ5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMzEgMjA6MDQ6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL25iZC5jIGIvZHJpdmVycy9ibG9jay9uYmQuYwppbmRleCA4ZjEwNzYyZTkwZWY3Li4yMTk0YzdkN2IyZWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKQEAgLTE2Niw2ICYjNDM7MTY2LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKm5iZF9kYmdfZGlyOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IG5iZHNfbWF4ID0gMTY7CiBzdGF0aWMgaW50IG1heF9wYXJ0ID0gMTY7CiYjNDM7c3RhdGljIGludCBucl9od19xdWV1ZXMgPSAxOwogc3RhdGljIGludCBwYXJ0X3NoaWZ0OwogCiBzdGF0aWMgaW50IG5iZF9kZXZfZGJnX2luaXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCk7CkBAIC0zMzEsNyAmIzQzOzMzMiw4IEBAIHN0YXRpYyB2b2lkIG5iZF9tYXJrX25zb2NrX2RlYWQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IG5iZF9zb2NrICpuc29jaywKIAluc29jay0mZ3Q7c2VudCA9IDA7CiB9CiAKLXN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpCiYjNDM7c3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSwKJiM0MzsJCQlib29sIGZyZWV6ZSkKIHsKIAlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTsKIAlpbnQgZXJyb3I7CkBAIC0zNzEsNyAmIzQzOzM3MywxMyBAQCBzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKQogCiAJbGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IGJsa3NpemU7CiAJbGltLnBoeXNpY2FsX2Jsb2NrX3NpemUgPSBibGtzaXplOwotCWVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKG5iZC0mZ3Q7ZGlzay0mZ3Q7cXVldWUsICZhbXA7bGltKTsKJiM0MzsKJiM0MzsJaWYgKGZyZWV6ZSkKJiM0MzsJCWVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKG5iZC0mZ3Q7ZGlzay0mZ3Q7cXVldWUsCiYjNDM7CQkJCSZhbXA7bGltKTsKJiM0MzsJZWxzZQomIzQzOwkJZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShuYmQtJmd0O2Rpc2stJmd0O3F1ZXVlLCAmYW1wO2xpbSk7CiYjNDM7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTEwNjEsNDAgJiM0MzsxMDY5LDMxIEBAIHN0YXRpYyBpbnQgZmluZF9mYWxsYmFjayhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgaW5kZXgpCiAJaW50IG5ld19pbmRleCA9IC0xOwogCXN0cnVjdCBuYmRfc29jayAqbnNvY2sgPSBjb25maWctJmd0O3NvY2tzW2luZGV4XTsKIAlpbnQgZmFsbGJhY2sgPSBuc29jay0mZ3Q7ZmFsbGJhY2tfaW5kZXg7CiYjNDM7CWludCBpOwogCiAJaWYgKHRlc3RfYml0KE5CRF9SVF9ESVNDT05ORUNURUQsICZhbXA7Y29uZmlnLSZndDtydW50aW1lX2ZsYWdzKSkKIAkJcmV0dXJuIG5ld19pbmRleDsKIAotCWlmIChjb25maWctJmd0O251bV9jb25uZWN0aW9ucyAmbHQ7PSAxKSB7Ci0JCWRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLSZndDtkaXNrKSwKLQkJCQkgICAgJiMzNDtEZWFkIGNvbm5lY3Rpb24sIGZhaWxlZCB0byBmaW5kIGEgZmFsbGJhY2tcbiYjMzQ7KTsKLQkJcmV0dXJuIG5ld19pbmRleDsKLQl9CiYjNDM7CWlmIChjb25maWctJmd0O251bV9jb25uZWN0aW9ucyAmbHQ7PSAxKQomIzQzOwkJZ290byBub19mYWxsYmFjazsKIAogCWlmIChmYWxsYmFjayAmZ3Q7PSAwICZhbXA7JmFtcDsgZmFsbGJhY2sgJmx0OyBjb25maWctJmd0O251bV9jb25uZWN0aW9ucyAmYW1wOyZhbXA7CiAJICAgICFjb25maWctJmd0O3NvY2tzW2ZhbGxiYWNrXS0mZ3Q7ZGVhZCkKIAkJcmV0dXJuIGZhbGxiYWNrOwogCi0JaWYgKG5zb2NrLSZndDtmYWxsYmFja19pbmRleCAmbHQ7IDAgfHwKLQkgICAgbnNvY2stJmd0O2ZhbGxiYWNrX2luZGV4ICZndDs9IGNvbmZpZy0mZ3Q7bnVtX2Nvbm5lY3Rpb25zIHx8Ci0JICAgIGNvbmZpZy0mZ3Q7c29ja3NbbnNvY2stJmd0O2ZhbGxiYWNrX2luZGV4XS0mZ3Q7ZGVhZCkgewotCQlpbnQgaTsKLQkJZm9yIChpID0gMDsgaSAmbHQ7IGNvbmZpZy0mZ3Q7bnVtX2Nvbm5lY3Rpb25zOyBpJiM0MzsmIzQzOykgewotCQkJaWYgKGkgPT0gaW5kZXgpCi0JCQkJY29udGludWU7Ci0JCQlpZiAoIWNvbmZpZy0mZ3Q7c29ja3NbaV0tJmd0O2RlYWQpIHsKLQkJCQluZXdfaW5kZXggPSBpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCW5zb2NrLSZndDtmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDsKLQkJaWYgKG5ld19pbmRleCAmbHQ7IDApIHsKLQkJCWRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLSZndDtkaXNrKSwKLQkJCQkJICAgICYjMzQ7RGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXG4mIzM0Oyk7Ci0JCQlyZXR1cm4gbmV3X2luZGV4OwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY29uZmlnLSZndDtudW1fY29ubmVjdGlvbnM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoaSAhPSBpbmRleCAmYW1wOyZhbXA7ICFjb25maWctJmd0O3NvY2tzW2ldLSZndDtkZWFkKSB7CiYjNDM7CQkJbmV3X2luZGV4ID0gaTsKJiM0MzsJCQlicmVhazsKIAkJfQogCX0KLQluZXdfaW5kZXggPSBuc29jay0mZ3Q7ZmFsbGJhY2tfaW5kZXg7CiYjNDM7CW5zb2NrLSZndDtmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDsKJiM0MzsJaWYgKG5ld19pbmRleCAmZ3Q7PSAwKQomIzQzOwkJcmV0dXJuIG5ld19pbmRleDsKJiM0MzsKJiM0Mztub19mYWxsYmFjazoKJiM0MzsJZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtJmd0O2Rpc2spLAomIzQzOwkJCSAgICAmIzM0O0RlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xuJiMzNDspOwogCXJldHVybiBuZXdfaW5kZXg7CiB9CiAKQEAgLTEyODEsMjMgJiM0MzsxMjgwLDIzIEBAIHN0YXRpYyBpbnQgbmJkX2FkZF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcsCiAJc3RydWN0IHNvY2tldCAqc29jazsKIAlzdHJ1Y3QgbmJkX3NvY2sgKipzb2NrczsKIAlzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrOwotCXVuc2lnbmVkIGludCBtZW1mbGFnczsKIAlpbnQgZXJyOwogCiAJLyogQXJnIHdpbGwgYmUgY2FzdCB0byBpbnQsIGNoZWNrIGl0IHRvIGF2b2lkIG92ZXJmbG93ICovCiAJaWYgKGFyZyAmZ3Q7IElOVF9NQVgpCiAJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAobmJkLSZndDtwaWQpIHsKJiM0MzsJCWRldl9lcnIoZGlza190b19kZXYobmJkLSZndDtkaXNrKSwKJiM0MzsJCQkmIzM0O0Nhbm5vdCBhZGQgc29ja2V0IHRvIGEgcnVubmluZyBkZXZpY2VcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CX0KJiM0MzsKIAlzb2NrID0gbmJkX2dldF9zb2NrZXQobmJkLCBhcmcsICZhbXA7ZXJyKTsKIAlpZiAoIXNvY2spCiAJCXJldHVybiBlcnI7CiAJbmJkX3JlY2xhc3NpZnlfc29ja2V0KHNvY2spOwogCi0JLyoKLQkgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24mIzM5O3QgZ2V0IGFueSBlcnJhbnQgcmVxdWVzdHMgd2hpbGUgd2UmIzM5O3JlCi0JICogcmVhbGxvY2F0aW5nIHRoZSAtJmd0O3NvY2tzIGFycmF5LgotCSAqLwotCW1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShuYmQtJmd0O2Rpc2stJmd0O3F1ZXVlKTsKLQogCWlmICghbmV0bGluayAmYW1wOyZhbXA7ICFuYmQtJmd0O3Rhc2tfc2V0dXAgJmFtcDsmYW1wOwogCSAgICAhdGVzdF9iaXQoTkJEX1JUX0JPVU5ELCAmYW1wO2NvbmZpZy0mZ3Q7cnVudGltZV9mbGFncykpCiAJCW5iZC0mZ3Q7dGFza19zZXR1cCA9IGN1cnJlbnQ7CkBAIC0xMzM3LDEyICYjNDM7MTMzNiwxMCBAQCBzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLAogCUlOSVRfV09SSygmYW1wO25zb2NrLSZndDt3b3JrLCBuYmRfcGVuZGluZ19jbWRfd29yayk7CiAJc29ja3NbY29uZmlnLSZndDtudW1fY29ubmVjdGlvbnMmIzQzOyYjNDM7XSA9IG5zb2NrOwogCWF0b21pY19pbmMoJmFtcDtjb25maWctJmd0O2xpdmVfY29ubmVjdGlvbnMpOwotCWJsa19tcV91bmZyZWV6ZV9xdWV1ZShuYmQtJmd0O2Rpc2stJmd0O3F1ZXVlLCBtZW1mbGFncyk7CiAKIAlyZXR1cm4gMDsKIAogcHV0X3NvY2tldDoKLQlibGtfbXFfdW5mcmVlemVfcXVldWUobmJkLSZndDtkaXNrLSZndDtxdWV1ZSwgbWVtZmxhZ3MpOwogCXNvY2tmZF9wdXQoc29jayk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTE0NzEsOCAmIzQzOzE0NjgsMTMgQEAgc3RhdGljIHZvaWQgbmJkX2NvbmZpZ19wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCkKIAlpZiAocmVmY291bnRfZGVjX2FuZF9tdXRleF9sb2NrKCZhbXA7bmJkLSZndDtjb25maWdfcmVmcywKIAkJCQkJJmFtcDtuYmQtJmd0O2NvbmZpZ19sb2NrKSkgewogCQlzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnID0gbmJkLSZndDtjb25maWc7CiYjNDM7CQlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTsKIAkJbmJkX2Rldl9kYmdfY2xvc2UobmJkKTsKIAkJaW52YWxpZGF0ZV9kaXNrKG5iZC0mZ3Q7ZGlzayk7CiYjNDM7CQkvKiByZXNldCB3cml0ZSBjYWNoZSAqLwomIzQzOwkJbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShuYmQtJmd0O2Rpc2stJmd0O3F1ZXVlKTsKJiM0MzsJCWxpbS5mZWF0dXJlcyAmYW1wOz0gfihCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX0ZVQSk7CiYjNDM7CQlxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShuYmQtJmd0O2Rpc2stJmd0O3F1ZXVlLCAmYW1wO2xpbSk7CiAJCWlmIChuYmQtJmd0O2NvbmZpZy0mZ3Q7Ynl0ZXNpemUpCiAJCQlrb2JqZWN0X3VldmVudCgmYW1wO25iZF90b19kZXYobmJkKS0mZ3Q7a29iaiwgS09CSl9DSEFOR0UpOwogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KE5CRF9SVF9IQVNfUElEX0ZJTEUsCkBAIC0xNTc0LDcgJiM0MzsxNTc2LDcgQEAgc3RhdGljIGludCBuYmRfc3RhcnRfZGV2aWNlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpCiAJCWFyZ3MtJmd0O2luZGV4ID0gaTsKIAkJcXVldWVfd29yayhuYmQtJmd0O3JlY3Zfd29ya3EsICZhbXA7YXJncy0mZ3Q7d29yayk7CiAJfQotCXJldHVybiBuYmRfc2V0X3NpemUobmJkLCBjb25maWctJmd0O2J5dGVzaXplLCBuYmRfYmxrc2l6ZShjb25maWcpKTsKJiM0MzsJcmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGNvbmZpZy0mZ3Q7Ynl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZyksIGZhbHNlKTsKIH0KIAogc3RhdGljIGludCBuYmRfc3RhcnRfZGV2aWNlX2lvY3RsKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpCkBAIC0xNjQyLDEzICYjNDM7MTY0NCwxMyBAQCBzdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsCiAJY2FzZSBOQkRfU0VUX1NPQ0s6CiAJCXJldHVybiBuYmRfYWRkX3NvY2tldChuYmQsIGFyZywgZmFsc2UpOwogCWNhc2UgTkJEX1NFVF9CTEtTSVpFOgotCQlyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgY29uZmlnLSZndDtieXRlc2l6ZSwgYXJnKTsKJiM0MzsJCXJldHVybiBuYmRfc2V0X3NpemUobmJkLCBjb25maWctJmd0O2J5dGVzaXplLCBhcmcsIHRydWUpOwogCWNhc2UgTkJEX1NFVF9TSVpFOgotCQlyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYXJnLCBuYmRfYmxrc2l6ZShjb25maWcpKTsKJiM0MzsJCXJldHVybiBuYmRfc2V0X3NpemUobmJkLCBhcmcsIG5iZF9ibGtzaXplKGNvbmZpZyksIHRydWUpOwogCWNhc2UgTkJEX1NFVF9TSVpFX0JMT0NLUzoKIAkJaWYgKGNoZWNrX3NobF9vdmVyZmxvdyhhcmcsIGNvbmZpZy0mZ3Q7Ymxrc2l6ZV9iaXRzLCAmYW1wO2J5dGVzaXplKSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQlyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZykpOwomIzQzOwkJcmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGJ5dGVzaXplLCBuYmRfYmxrc2l6ZShjb25maWcpLCB0cnVlKTsKIAljYXNlIE5CRF9TRVRfVElNRU9VVDoKIAkJbmJkX3NldF9jbWRfdGltZW91dChuYmQsIGFyZyk7CiAJCXJldHVybiAwOwpAQCAtMTk0MSw3ICYjNDM7MTk0Myw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBuYmRfbXFfb3BzID0gewogCS50aW1lb3V0CT0gbmJkX3htaXRfdGltZW91dCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcykKJiM0MztzdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMsCiYjNDM7CQkJCSAgICAgICBpbnQgbnJfaHdfcXVldWVzKQogewogCXN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gewogCQkubWF4X2h3X3NlY3RvcnMJCT0gNjU1MzYsCkBAIC0xOTU4LDcgJiM0MzsxOTYxLDcgQEAgc3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzKQogCQlnb3RvIG91dDsKIAogCW5iZC0mZ3Q7dGFnX3NldC5vcHMgPSAmYW1wO25iZF9tcV9vcHM7Ci0JbmJkLSZndDt0YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IDE7CiYjNDM7CW5iZC0mZ3Q7dGFnX3NldC5ucl9od19xdWV1ZXMgPSBucl9od19xdWV1ZXM7CiAJbmJkLSZndDt0YWdfc2V0LnF1ZXVlX2RlcHRoID0gMTI4OwogCW5iZC0mZ3Q7dGFnX3NldC5udW1hX25vZGUgPSBOVU1BX05PX05PREU7CiAJbmJkLSZndDt0YWdfc2V0LmNtZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBuYmRfY21kKTsKQEAgLTIxMDMsMTAgJiM0MzsyMTA2LDYyIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfc2l6ZV9zZXQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCkKIAkJYnNpemUgPSBubGFfZ2V0X3U2NChpbmZvLSZndDthdHRyc1tOQkRfQVRUUl9CTE9DS19TSVpFX0JZVEVTXSk7CiAKIAlpZiAoYnl0ZXMgIT0gY29uZmlnLSZndDtieXRlc2l6ZSB8fCBic2l6ZSAhPSBuYmRfYmxrc2l6ZShjb25maWcpKQotCQlyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXMsIGJzaXplKTsKJiM0MzsJCXJldHVybiBuYmRfc2V0X3NpemUobmJkLCBieXRlcywgYnNpemUsIHRydWUpOwogCXJldHVybiAwOwogfQogCiYjNDM7LyoKJiM0MzsgKiBXYWxrIHRoZSBOQkRfQVRUUl9TT0NLRVRTIG5lc3RlZCBsaXN0IGNhbiBjYWxsIEBjYiBmb3IgZWFjaCBzb2NrZXQgZmQuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBmZHMgd2Fsa2VkLCBvciBhIG5lZ2F0aXZlIGVycm5vLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgbmJkX2dlbmxfZm9yZWFjaF9zb2NrKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sCiYjNDM7CQlpbnQgKCpjYikoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGZkKSwKJiM0MzsJCXN0cnVjdCBuYmRfZGV2aWNlICpuYmQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmxhdHRyICphdHRyOwomIzQzOwlpbnQgcmVtLCBjb3VudCA9IDA7CiYjNDM7CiYjNDM7CWlmICghaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfU09DS0VUU10pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLSZndDthdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSwgcmVtKSB7CiYjNDM7CQlzdHJ1Y3QgbmxhdHRyICpzb2Nrc1tOQkRfU09DS19NQVggJiM0MzsgMV07CiYjNDM7CQlpbnQgcmV0OwomIzQzOwomIzQzOwkJaWYgKG5sYV90eXBlKGF0dHIpICE9IE5CRF9TT0NLX0lURU0pIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDtzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCwKJiM0MzsJCQkJCQlhdHRyLAomIzQzOwkJCQkJCW5iZF9zb2NrX3BvbGljeSwKJiM0MzsJCQkJCQlpbmZvLSZndDtleHRhY2spKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7ZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICghc29ja3NbTkJEX1NPQ0tfRkRdKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJY291bnQmIzQzOyYjNDM7OwomIzQzOwkJaWYgKGNiKSB7CiYjNDM7CQkJcmV0ID0gY2IobmJkLCAoaW50KW5sYV9nZXRfdTMyKHNvY2tzW05CRF9TT0NLX0ZEXSkpOwomIzQzOwkJCWlmIChyZXQgJmd0OyAwKQomIzQzOwkJCQlyZXR1cm4gY291bnQ7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJcmV0dXJuIGNvdW50OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpCiYjNDM7ewomIzQzOwlyZXR1cm4gbmJkX2FkZF9zb2NrZXQobmJkLCBmZCwgdHJ1ZSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IG5iZF9kZXZpY2UgKm5iZDsKQEAgLTIxNTksNyAmIzQzOzIyMTQsMTEgQEAgc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJbXV0ZXhfdW5sb2NrKCZhbXA7bmJkX2luZGV4X211dGV4KTsKIAogCWlmICghbmJkKSB7Ci0JCW5iZCA9IG5iZF9kZXZfYWRkKGluZGV4LCAyKTsKJiM0MzsJCXJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBOVUxMLCBOVUxMKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQluYmQgPSBuYmRfZGV2X2FkZChpbmRleCwgMiwgcmV0ICZndDsgMCA/IHJldCA6IDEpOwogCQlpZiAoSVNfRVJSKG5iZCkpIHsKIAkJCXByX2VycigmIzM0O2ZhaWxlZCB0byBhZGQgbmV3IGRldmljZVxuJiMzNDspOwogCQkJcmV0dXJuIFBUUl9FUlIobmJkKTsKQEAgLTIyMjYsMzYgJiM0MzsyMjg1LDkgQEAgc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCX0KIAl9CiAKLQlpZiAoaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfU09DS0VUU10pIHsKLQkJc3RydWN0IG5sYXR0ciAqYXR0cjsKLQkJaW50IHJlbSwgZmQ7Ci0KLQkJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLSZndDthdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSwKLQkJCQkgICAgcmVtKSB7Ci0JCQlzdHJ1Y3QgbmxhdHRyICpzb2Nrc1tOQkRfU09DS19NQVgmIzQzOzFdOwotCi0JCQlpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkgewotCQkJCXByX2VycigmIzM0O3NvY2tzIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBTT0NLX0lURU0gYXR0clxuJiMzNDspOwotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCwKLQkJCQkJCQkgIGF0dHIsCi0JCQkJCQkJICBuYmRfc29ja19wb2xpY3ksCi0JCQkJCQkJICBpbmZvLSZndDtleHRhY2spOwotCQkJaWYgKHJldCAhPSAwKSB7Ci0JCQkJcHJfZXJyKCYjMzQ7ZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcbiYjMzQ7KTsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJaWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pCi0JCQkJY29udGludWU7Ci0JCQlmZCA9IChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKTsKLQkJCXJldCA9IG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpOwotCQkJaWYgKHJldCkKLQkJCQlnb3RvIG91dDsKLQkJfQotCX0KJiM0MzsJcmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYiwgbmJkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dDsKIAogCWlmIChpbmZvLSZndDthdHRyc1tOQkRfQVRUUl9CQUNLRU5EX0lERU5USUZJRVJdKSB7CiAJCW5iZC0mZ3Q7YmFja2VuZCA9IG5sYV9zdHJkdXAoaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfQkFDS0VORF9JREVOVElGSUVSXSwKQEAgLTIzNDQsNiAmIzQzOzIzNzYsMjAgQEAgc3RhdGljIGludCBuYmRfZ2VubF9kaXNjb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZCkKJiM0Mzt7CiYjNDM7CWludCByZXQgPSBuYmRfcmVjb25uZWN0X3NvY2tldChuYmQsIGZkKTsKJiM0MzsKJiM0MzsJaWYgKCFyZXQpIHsKJiM0MzsJCWRldl9pbmZvKG5iZF90b19kZXYobmJkKSwgJiMzNDtyZWNvbm5lY3RlZCBzb2NrZXRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChyZXQgPT0gLUVOT1NQQykKJiM0MzsJCXJldHVybiAxOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25maWd1cmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgbmJkX2RldmljZSAqbmJkID0gTlVMTDsKQEAgLTI0NDAsNDAgJiM0MzsyNDg2LDEwIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25maWd1cmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJfQogCX0KIAotCWlmIChpbmZvLSZndDthdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSkgewotCQlzdHJ1Y3QgbmxhdHRyICphdHRyOwotCQlpbnQgcmVtLCBmZDsKLQotCQlubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tJmd0O2F0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLAotCQkJCSAgICByZW0pIHsKLQkJCXN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCYjNDM7MV07Ci0KLQkJCWlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7Ci0JCQkJcHJfZXJyKCYjMzQ7c29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXG4mIzM0Oyk7Ci0JCQkJcmV0ID0gLUVJTlZBTDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCXJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLAotCQkJCQkJCSAgYXR0ciwKLQkJCQkJCQkgIG5iZF9zb2NrX3BvbGljeSwKLQkJCQkJCQkgIGluZm8tJmd0O2V4dGFjayk7Ci0JCQlpZiAocmV0ICE9IDApIHsKLQkJCQlwcl9lcnIoJiMzNDtlcnJvciBwcm9jZXNzaW5nIHNvY2sgbGlzdFxuJiMzNDspOwotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSkKLQkJCQljb250aW51ZTsKLQkJCWZkID0gKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pOwotCQkJcmV0ID0gbmJkX3JlY29ubmVjdF9zb2NrZXQobmJkLCBmZCk7Ci0JCQlpZiAocmV0KSB7Ci0JCQkJaWYgKHJldCA9PSAtRU5PU1BDKQotCQkJCQlyZXQgPSAwOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJZGV2X2luZm8obmJkX3RvX2RldihuYmQpLCAmIzM0O3JlY29ubmVjdGVkIHNvY2tldFxuJiMzNDspOwotCQl9Ci0JfQomIzQzOwlyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2IsIG5iZCk7CiYjNDM7CS8qIGZvcmVhY2hfc29jayByZXR1cm5zIGEgcG9zaXRpdmUgY291bnQgb24gc3VjY2VzczsgZG9pdCBtdXN0IHJldHVybiAwICovCiYjNDM7CWlmIChyZXQgJmd0Oz0gMCkKJiM0MzsJCXJldCA9IDA7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7bmJkLSZndDtjb25maWdfbG9jayk7CiAJbmJkX2NvbmZpZ19wdXQobmJkKTsKQEAgLTI3MjUsOCAmIzQzOzI3NDEsMTAgQEAgc3RhdGljIGludCBfX2luaXQgbmJkX2luaXQodm9pZCkKIAl9CiAJbmJkX2RiZ19pbml0KCk7CiAKJiM0MzsJaWYgKG5yX2h3X3F1ZXVlcyAmbHQ7IDEpCiYjNDM7CQlucl9od19xdWV1ZXMgPSAxOwogCWZvciAoaSA9IDA7IGkgJmx0OyBuYmRzX21heDsgaSYjNDM7JiM0MzspCi0JCW5iZF9kZXZfYWRkKGksIDEpOwomIzQzOwkJbmJkX2Rldl9hZGQoaSwgMSwgbnJfaHdfcXVldWVzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjc4NywzICYjNDM7MjgwNSw2IEBAIG1vZHVsZV9wYXJhbShuYmRzX21heCwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobmJkc19tYXgsICYjMzQ7bnVtYmVyIG9mIG5ldHdvcmsgYmxvY2sgZGV2aWNlcyB0byBpbml0aWFsaXplIChkZWZhdWx0OiAxNikmIzM0Oyk7CiBtb2R1bGVfcGFyYW0obWF4X3BhcnQsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1heF9wYXJ0LCAmIzM0O251bWJlciBvZiBwYXJ0aXRpb25zIHBlciBkZXZpY2UgKGRlZmF1bHQ6IDE2KSYjMzQ7KTsKJiM0Mzttb2R1bGVfcGFyYW0obnJfaHdfcXVldWVzLCBpbnQsIDA0NDQpOwomIzQzO01PRFVMRV9QQVJNX0RFU0MobnJfaHdfcXVldWVzLAomIzQzOyYjMzQ7bnVtYmVyIG9mIGhhcmR3YXJlIHF1ZXVlcyBmb3IgZGV2aWNlcyBwcmUtY3JlYXRlZCBhdCBtb2R1bGUgbG9hZCAoZGVmYXVsdDogMSkuICYjMzQ7KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk3MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDY4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5CRCBEcml2ZXIgUGF0Y2ggZm9yIEZ1enppbmcgT3Bwb3J0dW5pdGllcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgdGhlIE5CRCBkcml2ZXIsIGBkcml2ZXJzL2Jsb2NrL25iZC5jYCwgYW5kIGl0JiMzOTtzIG1ha2luZyBzb21lIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2VzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgbmVlZHMgZnV6emluZywgZXNwZWNpYWxseSBnaXZlbiB0aGF0IGl04oCZcyB0b3VjaGluZyBjb3JlIGxvZ2ljIGFjY2Vzc2VkIHZpYSBib3RoIGlvY3RsIGFuZCBOZXRsaW5rLiBMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgaW1wbGljYXRpb25zIGFuZCBmaWd1cmUgb3V0IHRoZSBiZXN0IGF0dGFjayBzdXJmYWNlLgoKRmlyc3QsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vZHVsZSBwYXJhbWV0ZXIsIGBucl9od19xdWV1ZXNgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGFyZWEuIFRoZW4sIGBuYmRfc2V0X3NpemVgIGlzIG1vZGlmaWVkIHRvIGhhbmRsZSBhIGBmcmVlemVgIHBhcmFtZXRlciwgd2hpY2ggaXMgYSBiaXQgY29uY2VybmluZywgYmVjYXVzZSB0aGlzIHN1Z2dlc3RzIGEgc3RhdGUgY2hhbmdlIHRoYXQgY291bGQgaW1wYWN0IGRldmljZSBiZWhhdmlvci4gRml4aW5nIHRoZSBgZmluZF9mYWxsYmFja2AgbG9naWMgaXMgYW5vdGhlciBwb2ludCBvZiBpbnRlcmVzdDsgYnVnIGZpeGVzIG9mdGVuIGV4cG9zZSBuZXcgY29kZSBwYXRocy4gUHJldmVudGluZyBzb2NrZXQgYWRkaXRpb25zIHRvIGEgcnVubmluZyBkZXZpY2UgaW4gYG5iZF9hZGRfc29ja2V0YCBpcyBhIGdvb2QgZGVmZW5zaXZlIGNoYW5nZSwgYnV0IHRoZSByZW1vdmFsIG9mIHRoZSBxdWV1ZSBmcmVlemluZy91bmZyZWV6aW5nIGNhbGxzIGlzIG5vdGV3b3J0aHksIGJlY2F1c2UgaXQgY2hhbmdlcyB0aGUgZXhpc3RpbmcgY29kZSwgZXZlbiBpZiB0byBwcm90ZWN0IHRoZSBzeXN0ZW0uIFRoZSByZXNldCBvZiB3cml0ZSBjYWNoZSBmZWF0dXJlcyBpbiBgbmJkX2NvbmZpZ19wdXRgIGlzIGFub3RoZXIgZmxhZyB0aGF0IGl0IGlzIHRvdWNoaW5nIHNlbnNpdGl2ZSBhcmVhcyBvZiB0aGUgZHJpdmVyLiBQbHVzLCBzZXR0aW5nIGBucl9od19xdWV1ZXNgIGluIGBuYmRfZGV2X2FkZGAgbWVhbnMgdGhlcmUmIzM5O3MgYSBuZXcgcGFyYW1ldGVyIGJlaW5nIGludHJvZHVjZWQgYXQgZGV2aWNlIGFkZGl0aW9uLiBSZWZhY3RvcmluZyBOZXRsaW5rIHNvY2tldCBwYXJzaW5nIGludG8gYG5iZF9nZW5sX2ZvcmVhY2hfc29ja2AgYW5kIHVzaW5nIGl0IGluIGBuYmRfZ2VubF9jb25uZWN0YCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYCBpcyBhIGJpZyBmdW5jdGlvbmFsIGNoYW5nZSB3aGljaCBuZWVkcyBmdXp6aW5nIGFzIHdlbGwuCgpUaGUgZ29hbCBpcyB0byBmaW5kIHRoZSByaWdodCBmb2N1cyBzeW1ib2xzIHRvIHRhcmdldC4KCk5vdywgbW9zdCBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIHdoaWNoIG1ha2VzIGRpcmVjdCBmdXp6aW5nIGEgbGl0dGxlIHRyaWNraWVyLCBidXQgdGhleSBhcmUgc3RpbGwgaW1wb3J0YW50LiBUaGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIGlkZWFsIGZvciBmdXp6aW5nLCBnaXZlbiB0aGF0IHRoZXkgYXJlIG1vc3QgbGlrZWx5IHRvIGJlIGV4cG9zZWQgYXMgZXh0ZXJuYWwgQVBJLiBJIHRoaW5rIGBuYmRfaW9jdGxgLCBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGFuZCBgbmJkX2dlbmxfZGlzY29ubmVjdGAgYXJlIGdvb2QgY2FuZGlkYXRlcy4gRXZlbiB0aG91Z2ggc29tZSBvZiB0aGVzZSBhcmUgc3RhdGljLCBpZiB0aGV5IGFyZSBub3QgaW5saW5lZCwgdGhleSBhcmUgZ29vZCBlbnRyeSBwb2ludHMuCgpHaXZlbiB0aGUgcHJpb3JpdHkgZm9yIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLCBJIG5lZWQgdG8gdmVyaWZ5IHdoaWNoIGFyZSBleHBvc2VkLiBUaW1lIHRvIGdvIGh1bnRpbmcgaW4gYGRyaXZlcnMvYmxvY2svbmJkLmNgIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/aW50IG5iZF9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz0xNjMyPXN0YXRpYyBpbnQgX19uYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCxcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2NzgtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2Nzk6c3RhdGljIGludCBuYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjgwLVx0XHQgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQ2hlY2tpbmcgZm9yIE5ldGxpbmsgQ2FsbGJhY2tzKioKCkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAgaW50byB0aGlzIG5ldyBtb2R1bGUsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB3ZSYjMzk7dmUgY292ZXJlZCB0aGUgYmFzaWNzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGV4cGxpY2l0bHkgdmVyaWZ5IHRoYXQgd2UmIzM5O3JlIHByb3Blcmx5IGhhbmRsaW5nIGFueSBhbmQgYWxsIHJlbGV2YW50IE5ldGxpbmsgY2FsbGJhY2tzLiBUaGlzIGlzIGZvdW5kYXRpb25hbDsgd2l0aG91dCB0aGlzIGNoZWNrZWQgYW5kIHdvcmtpbmcgY29ycmVjdGx5LCBpdCYjMzk7cyBqdXN0IG5vdCBnb2luZyB0byBnbywgYW5kIGNvdWxkIGludHJvZHVjZSByZWFsbHkgaGFyZC10by1kZWJ1ZyBwcm9ibGVtcyBkb3duc3RyZWFtLiBJIG5lZWQgdG8gcmFwaWRseSBjb25maXJtIHRoYXQgd2UgaGF2ZSB0aGUgbmVjZXNzYXJ5IG1lY2hhbmlzbXMgaW4gcGxhY2UgdG8gcmVjZWl2ZSBhbmQgcHJvY2VzcyBtZXNzYWdlcywgZXNwZWNpYWxseSBhbnl0aGluZyBhc3luY2hyb25vdXMuIENvbnNpZGVyIGFsbCBwb3RlbnRpYWwgTmV0bGluayBtZXNzYWdlIHR5cGVzLiBBbSBJIHNldCB1cCB0byBoYW5kbGUgdGhlbSBhbGw/IEFyZSB3ZSBldmVuICpleHBlY3RpbmcqIHNwZWNpZmljIHR5cGVzIGluIHRoaXMgY29udGV4dD8gTGV0JiMzOTtzIHF1aWNrbHkgcmV2aWV3IHRoZSByZWdpc3RlcmVkIGhhbmRsZXJzLCB0aGUgZmlsdGVyIGNyaXRlcmlhLCB0aGUgYnVmZmVycyB1c2VkLCBhbmQgZW5zdXJlIGRhdGEgaXMgYmVpbmcgcHJvcGVybHkgZXh0cmFjdGVkIGFuZCBoYW5kbGVkLiBUaW1lIHRvIGNvbmZpcm0gaWYgd2UmIzM5O3JlIGVmZmVjdGl2ZWx5IGxpc3RlbmluZyBhbmQgYWN0aW5nIGFwcHJvcHJpYXRlbHkgdG8gZXh0ZXJuYWwga2VybmVsIGV2ZW50cywgb3IgcmlzayB3YXN0aW5nIG91ciB0aW1lIGNoYXNpbmcgZ2hvc3RzIGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25iZF9nZW5sX2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MjExOD1zdGF0aWMgaW50IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE1OS1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjE2MDpzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxNjEte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE2NC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjE2NTpzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE2Ni17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMjg3LVxuZHJpdmVycy9ibG9jay9uYmQuYzoyMjg4Olx0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYiwgbmJkKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjI4OS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yNTAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmJkX2Nvbm5lY3RfZ2VubF9vcHNbXSA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MDUtXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjUwNjpcdFx0LmRvaXRcdD0gbmJkX2dlbmxfY29ubmVjdCxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUwNy1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAwMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgYG5iZF9nZW5sX3JlY29uZmlndXJlYCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAgZnVuY3Rpb24uIEkmIzM5O20gYXNzdW1pbmcgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgZ2VuZXJpYyBuZXRsaW5rIGludGVyZmFjZSBmb3IgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgY29uZmlndXJhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHRzIGFyZTogSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIFdoYXQgcGFyYW1ldGVycyBkb2VzIGl0IHRha2U/IFdoYXQgZG9lcyBpdCAqZG8qIHdpdGggdGhvc2UgcGFyYW1ldGVycz8gSXMgdGhpcyBhIGNvbXBsZXRlIHJlY29uZmlndXJhdGlvbiByb3V0aW5lIG9yIGEgcGllY2Ugb2YgYSBsYXJnZXIgcHV6emxlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBOQkQgc2V0dXAgYW5kIHRlYXItZG93biBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gbG9va2luZyBmb3Igd2hlcmUgdGhpcyBmaXRzIGluIHJlbGF0aW9uIHRvIHRoZSBtYWluIGRyaXZlciBsb29wLCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIGFuZCBkYXRhIHRyYW5zZmVyLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGhhbmRsZSB0aGluZ3MgbGlrZSBjaGFuZ2luZyB0aGUgYmxvY2sgc2l6ZSwgcGVyaGFwcyB0aGUgYWxsb3dlZCBtYXhpbXVtIGJsb2NrIHNpemUsIG9yIG1heWJlIGV2ZW4gZmVhdHVyZXMgcmVsYXRlZCB0byBzZWN1cml0eSBvciBlbmNyeXB0aW9uIG5lZ290aWF0aW9uLCBvciBwZXJoYXBzIGV2ZW4gcXVldWUgZGVwdGggbGltaXRhdGlvbnMuIFRoZSBkZXZpbCYjMzk7cyBpbiB0aGUgZGV0YWlsczsgSSYjMzk7bSBhbnRpY2lwYXRpbmcgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm46IEFyZSB0aGVyZSBwcm9wZXIgbG9ja2luZyBtZWNoYW5pc21zIHRvIGVuc3VyZSB0aHJlYWQtc2FmZXR5LCBlc3BlY2lhbGx5IGlmIHRoaXMgaXMgYmVpbmcgY2FsbGVkIGZyb20gYSB1c2VyLXNwYWNlIHV0aWxpdHk/IFdoYXQmIzM5O3MgdGhlIGVycm9yIGhhbmRsaW5nIGxpa2U/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb24sIGVzcGVjaWFsbHkgaW4gYSBoZWF2aWx5LXRocmVhZGVkIGVudmlyb25tZW50PyBJIGFsc28gbmVlZCB0byBjb25zaWRlciBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zIGFuZCBpZiB0aGUgcmVjb25maWd1cmUgaXMgcHJvcGVybHkgdmFsaWRhdGluZyBpbnB1dHMuIEFscmlnaHQsIGxldCYjMzk7cyBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIGlmIG15IGFzc3VtcHRpb25zIGhvbGQgd2F0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmJkX2dlbmxfcmVjb25maWd1cmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MjM3OT1zdGF0aWMgaW50IG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzOTItXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIzOTM6c3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzk0LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI1MDI9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBuYmRfY29ubmVjdF9nZW5sX29wc1tdID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUxNS1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTE2Olx0XHQuZG9pdFx0PSBuYmRfZ2VubF9yZWNvbmZpZ3VyZSxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUxNy1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYyNAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRGlzY29ubmVjdCBGdW5jdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBuYmRfZ2VubF9kaXNjb25uZWN0YC4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB3aGVyZSBjbGllbnQgZGlzY29ubmVjdGlvbnMgYXJlIGFjdHVhbGx5ICpoYW5kbGVkKiB3aXRoaW4gdGhlIE5CRCAoTmV0d29yayBCbG9jayBEZXZpY2UpIGtlcm5lbCBtb2R1bGUsIGZyb20gYSBnZW5lcmljIG5ldGxpbmsgcGVyc3BlY3RpdmUuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4YWN0IHNlcXVlbmNlIG9mIGV2ZW50cyB0aGF0IHRyaWdnZXJzIHRoaXMgZnVuY3Rpb24sIGFuZCB3aGF0IHRoZSBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludHMgYXJlLiBXaGF0IHN0YXRlIHRyYW5zaXRpb25zIGFyZSBpbnZvbHZlZD8gV2hhdCBsb2NrcyBhcmUgaGVsZCwgYW5kIGZvciBob3cgbG9uZz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHJhY2UgY29uZGl0aW9ucyB0aGF0IGNvdWxkIGJlIGV4cGxvaXRlZCBoZXJlPyBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBncmFjZWZ1bGx5IChvciBub3QpIGl0IGhhbmRsZXMgcGFydGlhbGx5IGNvbXBsZXRlZCBvcGVyYXRpb25zIGR1cmluZyBhIGRpc2Nvbm5lY3Qg4oCTIGRvZXMgaXQgbGVhdmUgdGhlIGJsb2NrIGRldmljZSBpbiBhIGNvbnNpc3RlbnQgc3RhdGU/IFdoYXQgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3Igb25nb2luZyBJL08/IEdvdHRhIGVuc3VyZSB3ZSBhcmVuJiMzOTt0IGludHJvZHVjaW5nIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGhlcmUuIE15IGZvY3VzIHdpbGwgYmUgb24gbWVtb3J5IG1hbmFnZW1lbnQgdG9vOyBob3cgZWZmaWNpZW50bHkgYXJlIHJlc291cmNlcyBmcmVlZD8gQW55IGNoYW5jZSBvZiBsZWFrcz8gTGV0JiMzOTtzIGNoZWNrIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBzdXJwcmlzZXMgaXQgaG9sZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25iZF9nZW5sX2Rpc2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MjMyMz1zdGF0aWMgdm9pZCBuYmRfZGlzY29ubmVjdF9hbmRfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzQzLVxuZHJpdmVycy9ibG9jay9uYmQuYzoyMzQ0OnN0YXRpYyBpbnQgbmJkX2dlbmxfZGlzY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzQ1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI1MDI9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBuYmRfY29ubmVjdF9nZW5sX29wc1tdID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUxMC1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTExOlx0XHQuZG9pdFx0PSBuYmRfZ2VubF9kaXNjb25uZWN0LFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTEyLVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxNDEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgYG5iZF9nZW5sX3N0YXR1c2AqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoaW5ncy4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gY2hlY2sgYG5iZF9nZW5sX3N0YXR1c2AuIEl0JiMzOTtzIHRoZSBnby10byBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB3aGVyZSB0aGluZ3Mgc3RhbmQgd2l0aCB0aGUgR2VuZXJpYyBOZXRsaW5rIGludGVyZmFjZSBhbmQsIG1vcmUgc3BlY2lmaWNhbGx5LCBOZXR3b3JrIEJsb2NrIERldmljZSBpbnRlcmFjdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcgb2YgdGhlIGRldmljZSBzdGF0dXMsIHdoZXRoZXIgb3Igbm90IHRoZSBzdWJzeXN0ZW0gaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LCBhbnkgcmVjZW50IGVycm9ycyBpdCYjMzk7cyBlbmNvdW50ZXJlZCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBnZW5lcmFsIGhlYWx0aCBvZiB0aGUgTkJEIHByb3RvY29sIGF0IHRoZSBHZW5lcmljIE5ldGxpbmsgbGV2ZWwuIFRoaXMgd2lsbCwgaG9wZWZ1bGx5LCBxdWlja2x5IGlsbHVtaW5hdGUgdGhlIHByb2JsZW0uIEZyb20gdGhlcmUsIEkgY2FuIHBpbnBvaW50IHdoYXQgdGhlIG5leHQgbG9naWNhbCBpbnZlc3RpZ2F0aW9uIGlzLiBQZXJoYXBzIGEgZGVlcGVyIGRpdmUgaW50byBzcGVjaWZpYyBlcnJvciBjb2Rlcywgb3IgbWF5YmUgaXTigJlzIGEgZGVwZW5kZW5jeSBpc3N1ZSB3aXRoIGEgcmVsYXRlZCBtb2R1bGUuIEVpdGhlciB3YXksIGBuYmRfZ2VubF9zdGF0dXNgIGlzIHRoZSBnYXRld2F5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25iZF9nZW5sX3N0YXR1cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz0xNzU9c3RhdGljIHZvaWQgbmJkX2Nvbm5lY3RfcmVwbHkoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgaW50IGluZGV4KTtcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTc2OnN0YXRpYyBpbnQgbmJkX2dlbmxfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xNzctc3RhdGljIHZvaWQgbmJkX2RlYWRfbGlua193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yNTAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmJkX2Nvbm5lY3RfZ2VubF9vcHNbXSA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MjAtXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjUyMTpcdFx0LmRvaXRcdD0gbmJkX2dlbmxfc3RhdHVzLFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTIyLVx0fSxcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI1NzQ9c3RhdGljIGludCBzdGF0dXNfY2IoaW50IGlkLCB2b2lkICpwdHIsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTc5LVxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTgwOnN0YXRpYyBpbnQgbmJkX2dlbmxfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1ODEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc2NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIEludGVyZmFjZSoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBjb3JlIGVudHJ5IHBvaW50cyBmb3IgdGhpcyBOQkQgZHJpdmVyLiBGaXJzdCBvZmYsIEkmIzM5O3ZlIGdvdCBgbmJkX2lvY3RsYCwgd2hpY2ggSSBleHBlY3QgdG8gaGFuZGxlIHRoZSBjbGFzc2ljIGlvY3RsIGNhbGxzIOKAkyB0aG9zZSBhcmUgdGhlIGJyZWFkIGFuZCBidXR0ZXIgZm9yIGludGVyYWN0aW9uLiBUaGVuIHRoZXJlIGFyZSB0aGUgZ2VubCAoR2VuZXJpYyBOZXRsaW5rKSBmdW5jdGlvbnM6IGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYG5iZF9nZW5sX2Rpc2Nvbm5lY3RgLCBhbmQgYG5iZF9nZW5sX3N0YXR1c2AuIFRob3NlIGFyZSBsaWtlbHkgdGhlIG1vZGVybiwgbW9yZSByb2J1c3QgaW50ZXJmYWNlIGxldmVyYWdpbmcgdGhlIE5ldGxpbmsgcHJvdG9jb2wuIEFuZCwgb2YgY291cnNlLCB0aGVyZSYjMzk7cyBgbmJkX2luaXRgLCB3aGljaCBJJiMzOTtkIGltbWVkaWF0ZWx5IHBlZyBhcyB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUsIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBkcml2ZXImIzM5O3MgZW52aXJvbm1lbnQuIE5vdywgbGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIE5CRCBpcyBldmVuIGNvbmZpZ3VyZWQgaW50byB0aGUga2VybmVsLiBUaW1lIHRvIGNoZWNrIHRoZSBLY29uZmlnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0RFVl9OQkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTE5ND1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTUtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTk2OmNvbmZpZyBCTEtfREVWX05CRFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5Ny1cdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgYmxvY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOgoKKipVbnBhY2tpbmcgRGVwZW5kZW5jaWVzOiBCTEtcX0RFVlxfTkJEKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBgQkxLX0RFVl9OQkRgLi4uIHdoYXQgb3RoZXIgcGllY2VzIG9mIHRoZSBrZXJuZWwgcHV6emxlIGRvZXMgKml0KiBsZWFuIG9uPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmb3VuZGF0aW9uYWwgcmVxdWlyZW1lbnRzLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IHVuZGVyc3RhbmRpbmcgaXRzIGRpcmVjdCBmdW5jdGlvbmFsaXR5LCBidXQgYWxzbyBhYm91dCBtYXBwaW5nIG91dCBpdHMgcmVsYXRpb25zaGlwcyB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJiMzOTttIGVzc2VudGlhbGx5IGJ1aWxkaW5nIGEgZGVwZW5kZW5jeSBncmFwaCBpbiBteSBoZWFkLiBXaGF0IG90aGVyIHN1YnN5c3RlbXMgb3Iga2VybmVsIG1vZHVsZXMgZG9lcyBpdCBjYWxsPyBXaGF0IGluZnJhc3RydWN0dXJlIGRvZXMgaXQgbGV2ZXJhZ2U/IFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGJlIGNyaXRpY2FsIHRvIGZ1bGx5IGdyYXNwaW5nIGl0cyByb2xlIGFuZCBiZWhhdmlvci4gU28sIGxldCYjMzk7cyBzdGFydCBwZWVsaW5nIGJhY2sgdGhlIGxheWVycyBhbmQgc2VlIHdoYXQgbWFrZXMgdGhpcyB0aGluZyB0aWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTk2Olx0Y29uZmlnIEJMS19ERVZfTkJEXG4gMTk3Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gMTk4Olx0XHRkZXBlbmRzIG9uIE5FVFxuIDE5OTpcdFx0aGVscFxuIDIwMDpcdFx0ICBTYXlpbmcgWSBoZXJlIHdpbGwgYWxsb3cgeW91ciBjb21wdXRlciB0byBiZSBhIGNsaWVudCBmb3IgbmV0d29ya1xuIDIwMTpcdFx0ICBibG9jayBkZXZpY2VzLCBpLmUuIGl0IHdpbGwgYmUgYWJsZSB0byB1c2UgYmxvY2sgZGV2aWNlcyBleHBvcnRlZCBieVxuIDIwMjpcdFx0ICBzZXJ2ZXJzIChtb3VudCBmaWxlIHN5c3RlbXMgb24gdGhlbSBldGMuKS4gQ29tbXVuaWNhdGlvbiBiZXR3ZWVuXG4gMjAzOlx0XHQgIGNsaWVudCBhbmQgc2VydmVyIHdvcmtzIG92ZXIgVENQL0lQIG5ldHdvcmtpbmcsIGJ1dCB0byB0aGUgY2xpZW50XG4gMjA0Olx0XHQgIHByb2dyYW0gdGhpcyBpcyBoaWRkZW46IGl0IGxvb2tzIGxpa2UgYSByZWd1bGFyIGxvY2FsIGZpbGUgYWNjZXNzIHRvXG4gMjA1Olx0XHQgIGEgYmxvY2sgZGV2aWNlIHNwZWNpYWwgZmlsZSBzdWNoIGFzIC9kZXYvbmQwLlxuIDIwNjpcdFxuIDIwNzpcdFx0ICBOZXR3b3JrIGJsb2NrIGRldmljZXMgYWxzbyBhbGxvd3MgeW91IHRvIHJ1biBhIGJsb2NrLWRldmljZSBpblxuIDIwODpcdFx0ICB1c2VybGFuZCAobWFraW5nIHNlcnZlciBhbmQgY2xpZW50IHBoeXNpY2FsbHkgdGhlIHNhbWUgY29tcHV0ZXIsXG4gMjA5Olx0XHQgIGNvbW11bmljYXRpbmcgdXNpbmcgdGhlIGxvb3BiYWNrIG5ldHdvcmsgZGV2aWNlKS5cbiAyMTA6XHRcbiAyMTE6XHRcdCAgUmVhZCBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmxvY2tkZXYvbmJkLnJzdFx1MDAzZSBmb3IgbW9yZSBpbmZvcm1hdGlvbixcbiAyMTI6XHRcdCAgZXNwZWNpYWxseSBhYm91dCB3aGVyZSB0byBmaW5kIHRoZSBzZXJ2ZXIgY29kZSwgd2hpY2ggcnVucyBpbiB1c2VyXG4gMjEzOlx0XHQgIHNwYWNlIGFuZCBkb2VzIG5vdCBuZWVkIHNwZWNpYWwga2VybmVsIHN1cHBvcnQuXG4gMjE0Olx0XG4gMjE1Olx0XHQgIE5vdGUgdGhhdCB0aGlzIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIG5ldHdvcmsgZmlsZSBzeXN0ZW1zIE5GU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTczNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJMS19ERVZfTkJEIE1vZHVsZSoqCgpPa2F5LCBzbyBgQkxLX0RFVl9OQkRgIHJlcXVpcmVzIGBORVRgLiBUaGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g7IHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBhcmUganVzdCBgQkxLX0RFVl9OQkRgLiBOb3csIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBUaGUgcHJvbXB0IGVtcGhhc2l6ZXMgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBMZXQmIzM5O3Mgc2VlIGlmIGFueSBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBub24tc3RhdGljLiBIYW5nIG9uLi4uIGBuYmRfaW9jdGxgIGlzICpzdGF0aWMqLiBBbmQgc28gaXMgYG5iZF9nZW5sX2Nvbm5lY3RgLiBIbW0uLi4gYXJlIHRoZXJlICphbnkqIG1vZGlmaWVkIGZ1bmN0aW9ucyB0aGF0IGFyZW4mIzM5O3Qgc3RhdGljPyBMb29rcyBsaWtlIG5vLCB0aGV5IGFyZSBhbGwgc3RhdGljLgoKQnV0IHRoZSBndWlkYW5jZSBJJiMzOTttIGdpdmVuIHByZWZlcnMgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMuIElmICphbGwqIG9mIHRoZSBlbnRyeSBwb2ludHMgYXJlIHN0YXRpYywgdGhlbiB3ZSBjYW4gc3RpbGwgdXNlIHRoZSBzdGF0aWMgb25lcyBpZiB0aGV5IGFyZSBub3QgaW5saW5lZC4gUmlnaHQ/IExldCBtZSBjaGVjay4gYG5iZF9pb2N0bGAsIGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYW5kIGBuYmRfZ2VubF9kaXNjb25uZWN0YCBhcmUgYWxsIHJlZ2lzdGVyZWQgaW4gc3RydWN0cywgbWVhbmluZyB0aGV5JiMzOTtyZSBub3QgaW5saW5lZC4gT2theSwgc28gdGhhdCBzaG91bGQgYmUgZmluZSB0aGVuLiBXYWl0LCBJIHRoaW5rIGBuYmRfaW9jdGxgIGdldHMgY2FsbGVkIGJ5IHNvbWV0aGluZyBpbiBgbmJkX2ZvcHNgLCBzbyBJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgdGhhdC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuYmRfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MTYyMj1zdGF0aWMgdm9pZCBuYmRfc2V0X2NtZF90aW1lb3V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHU2NCB0aW1lb3V0KVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYzMS0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGNvbmZpZ19sb2NrIGhlbGQgKi9cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTYzMjpzdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MzMtXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2NzgtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2Nzk6c3RhdGljIGludCBuYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjgwLVx0XHQgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTcwMS1cdCAgICAoY21kID09IE5CRF9ESVNDT05ORUNUIHx8IGNtZCA9PSBOQkRfQ0xFQVJfU09DSykpXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3MDI6XHRcdGVycm9yID0gX19uYmRfaW9jdGwoYmRldiwgbmJkLCBjbWQsIGFyZyk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MDMtXHRlbHNlXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0xODA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbmJkX2ZvcHMgPVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTgxMC1cdC5yZWxlYXNlID1cdG5iZF9yZWxlYXNlLFxuZHJpdmVycy9ibG9jay9uYmQuYzoxODExOlx0LmlvY3RsID1cdG5iZF9pb2N0bCxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTgxMjpcdC5jb21wYXRfaW9jdGwgPVx0bmJkX2lvY3RsLFxuZHJpdmVycy9ibG9jay9uYmQuYy0xODEzLVx0LmZyZWVfZGlzayA9XHRuYmRfZnJlZV9kaXNrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcxNwoJCQkJCQkJb3V0cHV0OiAxNTEKCQkJCQkJCXRob3VnaHRzOiA3OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOQkQgRHJpdmVyIFBhdGNoIGZvciBGdXp6aW5nIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIE5CRCBkcml2ZXIsIGFuZCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyBpZGVudGlmeWluZyB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gSXQmIzM5O3MgY2xlYXIgdGhhdCBgbmJkX2lvY3RsYCBoYW5kbGVzIHRoZSBpb2N0bCBpbnRlcmZhY2UsIGFuZCBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGFuZCBgbmJkX2dlbmxfZGlzY29ubmVjdGAgYXJlIHRoZSBOZXRsaW5rIGhhbmRsZXJzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoZSByaWdodCBmdW5jdGlvbnMgdG8gdGFyZ2V0IHdpdGggZnV6emluZy4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gaW5jbHVkZSB0aG9zZSwgYWxvbmcgd2l0aCBgbmJkX2FkZF9zb2NrZXRgLCBgbmJkX3NldF9zaXplYCwgYGZpbmRfZmFsbGJhY2tgLCBgbmJkX2NvbmZpZ19wdXRgLCBgbmJkX3N0YXJ0X2RldmljZWAsIGFuZCBgbmJkX2Rldl9hZGRgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBtb3N0IGNyaXRpY2FsIHBvaW50cy4gSG93ZXZlciwgSSBuZWVkIHRvIHN0aWNrIHdpdGggd2hhdCB0aGUgcHJvbXB0IHNheXMsIHdoaWNoIGlzIHRvICYjMzQ7UHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zJiMzNDsuCgpBbHJpZ2h0LCBzbyBhIHF1aWNrIGNoZWNrIHRlbGxzIG1lIHRoYXQgYG5iZF9hZGRfc29ja2V0YCwgYG5iZF9zZXRfc2l6ZWAsIGV0Yy4gYXJlIHN0YXRpYywgd2hpY2ggSSBleHBlY3RlZC4gSG93ZXZlciwgYG5iZF9pb2N0bGAgYW5kIGBuYmRfZ2VubF9jb25uZWN0YCBhcmUgZW50cnkgcG9pbnRzLCBhbmQgYWxzbyBzdGF0aWMuIEJ1dCB0aGVzZSBhcmVuJiMzOTt0IGlubGluZWQsIHRoZXkgYXJlIHJlZ2lzdGVyZWQgYXMgY2FsbGJhY2tzLiBJdCBsb29rcyBsaWtlIHRoZSBtb3N0IHN1aXRhYmxlIGVudHJ5IHBvaW50cyBhcmUgdGhlIGlvY3RsIGFuZCBOZXRsaW5rIGhhbmRsZXJzOiBgbmJkX2lvY3RsYCwgYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBhbmQgYG5iZF9nZW5sX2Rpc2Nvbm5lY3RgLiBUaGF0JiMzOTtzIHdoYXQgSSB3aWxsIGJlIHRhcmdldGluZy4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgd2lsbCB2ZXJpZnkgdGhhdCBgbmJkX2lvY3RsYCBpcyBpbmRlZWQgc3RhdGljLiBPa2F5LCB5ZXMsIGl0JiMzOTtzIGBzdGF0aWMgaW50IG5iZF9pb2N0bCguLi4pYC4KClRoaXMgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgbGlrZSB0aGUgYG5yX2h3X3F1ZXVlc2AgbW9kdWxlIHBhcmFtZXRlciwgdGhlIGFkZGl0aW9uIG9mIHRoZSBgZnJlZXplYCBib29sZWFuIHRvIGBuYmRfc2V0X3NpemVgLCBmaXhlcyB0byBgZmluZF9mYWxsYmFja2AsIGFuZCBjaGFuZ2VzIHRvIHByZXZlbnQgYWRkaW5nIHNvY2tldHMgdG8gYSBydW5uaW5nIGRldmljZS4gVGhlIE5ldGxpbmsgc29ja2V0IHBhcnNpbmcgaGFzIGJlZW4gcmVmYWN0b3JlZCBhcyB3ZWxsLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNvdWxkIGJlbmVmaXQgZnJvbSBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9OQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuYmRfaW9jdGwmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfY29ubmVjdCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9yZWNvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9kaXNjb25uZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIsIGNoYW5naW5nIGhvdyBzb2NrZXRzIGFyZSBhZGRlZCwgaG93IGZhbGxiYWNrIGNvbm5lY3Rpb25zIGFyZSBmb3VuZCwgYW5kIGhvdyBibG9jayBzaXplcyBhcmUgc2V0LiBJdCBhbHNvIGludHJvZHVjZXMgYSBuZXcgbW9kdWxlIHBhcmFtZXRlciBmb3IgaGFyZHdhcmUgcXVldWVzIGFuZCByZWZhY3RvcnMgbmV0bGluayBzb2NrZXQgcGFyc2luZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIE5CRCBsb2dpYyByZWFjaGFibGUgdmlhIGlvY3RsIGFuZCBuZXRsaW5rLCBzbyB0aGV5IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTkJEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmJkX2lvY3RsJiMzNDssCiAgICAmIzM0O25iZF9nZW5sX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfcmVjb25maWd1cmUmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfZGlzY29ubmVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgZHJpdmVyLCBjaGFuZ2luZyBob3cgc29ja2V0cyBhcmUgYWRkZWQsIGhvdyBmYWxsYmFjayBjb25uZWN0aW9ucyBhcmUgZm91bmQsIGFuZCBob3cgYmxvY2sgc2l6ZXMgYXJlIHNldC4gSXQgYWxzbyBpbnRyb2R1Y2VzIGEgbmV3IG1vZHVsZSBwYXJhbWV0ZXIgZm9yIGhhcmR3YXJlIHF1ZXVlcyBhbmQgcmVmYWN0b3JzIG5ldGxpbmsgc29ja2V0IHBhcnNpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBOQkQgbG9naWMgcmVhY2hhYmxlIHZpYSBpb2N0bCBhbmQgbmV0bGluaywgc28gdGhleSBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6MDQ6MjguODY5MjI4MjY3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5MjYzMDg3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYmRfaW9jdGxcIixcbiAgICBcIm5iZF9nZW5sX2Nvbm5lY3RcIixcbiAgICBcIm5iZF9nZW5sX3JlY29uZmlndXJlXCIsXG4gICAgXCJuYmRfZ2VubF9kaXNjb25uZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIGRyaXZlciwgY2hhbmdpbmcgaG93IHNvY2tldHMgYXJlIGFkZGVkLCBob3cgZmFsbGJhY2sgY29ubmVjdGlvbnMgYXJlIGZvdW5kLCBhbmQgaG93IGJsb2NrIHNpemVzIGFyZSBzZXQuIEl0IGFsc28gaW50cm9kdWNlcyBhIG5ldyBtb2R1bGUgcGFyYW1ldGVyIGZvciBoYXJkd2FyZSBxdWV1ZXMgYW5kIHJlZmFjdG9ycyBuZXRsaW5rIHNvY2tldCBwYXJzaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgTkJEIGxvZ2ljIHJlYWNoYWJsZSB2aWEgaW9jdGwgYW5kIG5ldGxpbmssIHNvIHRoZXkgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6MDQ6MjguODY5MjM1MDQ3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDE1MjUzMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0Y2UyM2Y5MjVmYzRkZDU0YTZhZDliZDkwNmU4MGM5ZjMxMjUyZGQ5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMxIDIwOjA0OjI3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbmJkLmMgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXFxuaW5kZXggOGYxMDc2MmU5MGVmNy4uMjE5NGM3ZDdiMmVhZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jXFxuKysrIGIvZHJpdmVycy9ibG9jay9uYmQuY1xcbkBAIC0xNjYsNiArMTY2LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKm5iZF9kYmdfZGlyO1xcbiBcXG4gc3RhdGljIHVuc2lnbmVkIGludCBuYmRzX21heCA9IDE2O1xcbiBzdGF0aWMgaW50IG1heF9wYXJ0ID0gMTY7XFxuK3N0YXRpYyBpbnQgbnJfaHdfcXVldWVzID0gMTtcXG4gc3RhdGljIGludCBwYXJ0X3NoaWZ0O1xcbiBcXG4gc3RhdGljIGludCBuYmRfZGV2X2RiZ19pbml0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpO1xcbkBAIC0zMzEsNyArMzMyLDggQEAgc3RhdGljIHZvaWQgbmJkX21hcmtfbnNvY2tfZGVhZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxcbiBcXHRuc29jay1cXHUwMDNlc2VudCA9IDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpXFxuK3N0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUsXFxuK1xcdFxcdFxcdGJvb2wgZnJlZXplKVxcbiB7XFxuIFxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xcbiBcXHRpbnQgZXJyb3I7XFxuQEAgLTM3MSw3ICszNzMsMTMgQEAgc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcXG4gXFxuIFxcdGxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSBibGtzaXplO1xcbiBcXHRsaW0ucGh5c2ljYWxfYmxvY2tfc2l6ZSA9IGJsa3NpemU7XFxuLVxcdGVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUsIFxcdTAwMjZsaW0pO1xcbitcXG4rXFx0aWYgKGZyZWV6ZSlcXG4rXFx0XFx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obmJkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNmxpbSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlLCBcXHUwMDI2bGltKTtcXG4rXFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXG5AQCAtMTA2MSw0MCArMTA2OSwzMSBAQCBzdGF0aWMgaW50IGZpbmRfZmFsbGJhY2soc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGluZGV4KVxcbiBcXHRpbnQgbmV3X2luZGV4ID0gLTE7XFxuIFxcdHN0cnVjdCBuYmRfc29jayAqbnNvY2sgPSBjb25maWctXFx1MDAzZXNvY2tzW2luZGV4XTtcXG4gXFx0aW50IGZhbGxiYWNrID0gbnNvY2stXFx1MDAzZWZhbGxiYWNrX2luZGV4O1xcbitcXHRpbnQgaTtcXG4gXFxuIFxcdGlmICh0ZXN0X2JpdChOQkRfUlRfRElTQ09OTkVDVEVELCBcXHUwMDI2Y29uZmlnLVxcdTAwM2VydW50aW1lX2ZsYWdzKSlcXG4gXFx0XFx0cmV0dXJuIG5ld19pbmRleDtcXG4gXFxuLVxcdGlmIChjb25maWctXFx1MDAzZW51bV9jb25uZWN0aW9ucyBcXHUwMDNjPSAxKSB7XFxuLVxcdFxcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLVxcdTAwM2VkaXNrKSxcXG4tXFx0XFx0XFx0XFx0ICAgIFxcXCJEZWFkIGNvbm5lY3Rpb24sIGZhaWxlZCB0byBmaW5kIGEgZmFsbGJhY2tcXFxcblxcXCIpO1xcbi1cXHRcXHRyZXR1cm4gbmV3X2luZGV4O1xcbi1cXHR9XFxuK1xcdGlmIChjb25maWctXFx1MDAzZW51bV9jb25uZWN0aW9ucyBcXHUwMDNjPSAxKVxcbitcXHRcXHRnb3RvIG5vX2ZhbGxiYWNrO1xcbiBcXG4gXFx0aWYgKGZhbGxiYWNrIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgZmFsbGJhY2sgXFx1MDAzYyBjb25maWctXFx1MDAzZW51bV9jb25uZWN0aW9ucyBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIWNvbmZpZy1cXHUwMDNlc29ja3NbZmFsbGJhY2tdLVxcdTAwM2VkZWFkKVxcbiBcXHRcXHRyZXR1cm4gZmFsbGJhY2s7XFxuIFxcbi1cXHRpZiAobnNvY2stXFx1MDAzZWZhbGxiYWNrX2luZGV4IFxcdTAwM2MgMCB8fFxcbi1cXHQgICAgbnNvY2stXFx1MDAzZWZhbGxiYWNrX2luZGV4IFxcdTAwM2U9IGNvbmZpZy1cXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIHx8XFxuLVxcdCAgICBjb25maWctXFx1MDAzZXNvY2tzW25zb2NrLVxcdTAwM2VmYWxsYmFja19pbmRleF0tXFx1MDAzZWRlYWQpIHtcXG4tXFx0XFx0aW50IGk7XFxuLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjb25maWctXFx1MDAzZW51bV9jb25uZWN0aW9uczsgaSsrKSB7XFxuLVxcdFxcdFxcdGlmIChpID09IGluZGV4KVxcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0XFx0aWYgKCFjb25maWctXFx1MDAzZXNvY2tzW2ldLVxcdTAwM2VkZWFkKSB7XFxuLVxcdFxcdFxcdFxcdG5ld19pbmRleCA9IGk7XFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdH1cXG4tXFx0XFx0bnNvY2stXFx1MDAzZWZhbGxiYWNrX2luZGV4ID0gbmV3X2luZGV4O1xcbi1cXHRcXHRpZiAobmV3X2luZGV4IFxcdTAwM2MgMCkge1xcbi1cXHRcXHRcXHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC1cXHUwMDNlZGlzayksXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBcXFwiRGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0cmV0dXJuIG5ld19pbmRleDtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvbmZpZy1cXHUwMDNlbnVtX2Nvbm5lY3Rpb25zOyBpKyspIHtcXG4rXFx0XFx0aWYgKGkgIT0gaW5kZXggXFx1MDAyNlxcdTAwMjYgIWNvbmZpZy1cXHUwMDNlc29ja3NbaV0tXFx1MDAzZWRlYWQpIHtcXG4rXFx0XFx0XFx0bmV3X2luZGV4ID0gaTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbi1cXHRuZXdfaW5kZXggPSBuc29jay1cXHUwMDNlZmFsbGJhY2tfaW5kZXg7XFxuK1xcdG5zb2NrLVxcdTAwM2VmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDtcXG4rXFx0aWYgKG5ld19pbmRleCBcXHUwMDNlPSAwKVxcbitcXHRcXHRyZXR1cm4gbmV3X2luZGV4O1xcbitcXG4rbm9fZmFsbGJhY2s6XFxuK1xcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLVxcdTAwM2VkaXNrKSxcXG4rXFx0XFx0XFx0ICAgIFxcXCJEZWFkIGNvbm5lY3Rpb24sIGZhaWxlZCB0byBmaW5kIGEgZmFsbGJhY2tcXFxcblxcXCIpO1xcbiBcXHRyZXR1cm4gbmV3X2luZGV4O1xcbiB9XFxuIFxcbkBAIC0xMjgxLDIzICsxMjgwLDIzIEBAIHN0YXRpYyBpbnQgbmJkX2FkZF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcsXFxuIFxcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XFxuIFxcdHN0cnVjdCBuYmRfc29jayAqKnNvY2tzO1xcbiBcXHRzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrO1xcbi1cXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHQvKiBBcmcgd2lsbCBiZSBjYXN0IHRvIGludCwgY2hlY2sgaXQgdG8gYXZvaWQgb3ZlcmZsb3cgKi9cXG4gXFx0aWYgKGFyZyBcXHUwMDNlIElOVF9NQVgpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKG5iZC1cXHUwMDNlcGlkKSB7XFxuK1xcdFxcdGRldl9lcnIoZGlza190b19kZXYobmJkLVxcdTAwM2VkaXNrKSxcXG4rXFx0XFx0XFx0XFxcIkNhbm5vdCBhZGQgc29ja2V0IHRvIGEgcnVubmluZyBkZXZpY2VcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXHR9XFxuK1xcbiBcXHRzb2NrID0gbmJkX2dldF9zb2NrZXQobmJkLCBhcmcsIFxcdTAwMjZlcnIpO1xcbiBcXHRpZiAoIXNvY2spXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdG5iZF9yZWNsYXNzaWZ5X3NvY2tldChzb2NrKTtcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGdldCBhbnkgZXJyYW50IHJlcXVlc3RzIHdoaWxlIHdlJ3JlXFxuLVxcdCAqIHJlYWxsb2NhdGluZyB0aGUgLVxcdTAwM2Vzb2NrcyBhcnJheS5cXG4tXFx0ICovXFxuLVxcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG4tXFxuIFxcdGlmICghbmV0bGluayBcXHUwMDI2XFx1MDAyNiAhbmJkLVxcdTAwM2V0YXNrX3NldHVwIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhdGVzdF9iaXQoTkJEX1JUX0JPVU5ELCBcXHUwMDI2Y29uZmlnLVxcdTAwM2VydW50aW1lX2ZsYWdzKSlcXG4gXFx0XFx0bmJkLVxcdTAwM2V0YXNrX3NldHVwID0gY3VycmVudDtcXG5AQCAtMTMzNywxMiArMTMzNiwxMCBAQCBzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxcbiBcXHRJTklUX1dPUksoXFx1MDAyNm5zb2NrLVxcdTAwM2V3b3JrLCBuYmRfcGVuZGluZ19jbWRfd29yayk7XFxuIFxcdHNvY2tzW2NvbmZpZy1cXHUwMDNlbnVtX2Nvbm5lY3Rpb25zKytdID0gbnNvY2s7XFxuIFxcdGF0b21pY19pbmMoXFx1MDAyNmNvbmZpZy1cXHUwMDNlbGl2ZV9jb25uZWN0aW9ucyk7XFxuLVxcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlLCBtZW1mbGFncyk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIHB1dF9zb2NrZXQ6XFxuLVxcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlLCBtZW1mbGFncyk7XFxuIFxcdHNvY2tmZF9wdXQoc29jayk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG5AQCAtMTQ3MSw4ICsxNDY4LDEzIEBAIHN0YXRpYyB2b2lkIG5iZF9jb25maWdfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuIFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX211dGV4X2xvY2soXFx1MDAyNm5iZC1cXHUwMDNlY29uZmlnX3JlZnMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZuYmQtXFx1MDAzZWNvbmZpZ19sb2NrKSkge1xcbiBcXHRcXHRzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnID0gbmJkLVxcdTAwM2Vjb25maWc7XFxuK1xcdFxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xcbiBcXHRcXHRuYmRfZGV2X2RiZ19jbG9zZShuYmQpO1xcbiBcXHRcXHRpbnZhbGlkYXRlX2Rpc2sobmJkLVxcdTAwM2VkaXNrKTtcXG4rXFx0XFx0LyogcmVzZXQgd3JpdGUgY2FjaGUgKi9cXG4rXFx0XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG4rXFx0XFx0bGltLmZlYXR1cmVzIFxcdTAwMjY9IH4oQkxLX0ZFQVRfV1JJVEVfQ0FDSEUgfCBCTEtfRkVBVF9GVUEpO1xcbitcXHRcXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlLCBcXHUwMDI2bGltKTtcXG4gXFx0XFx0aWYgKG5iZC1cXHUwMDNlY29uZmlnLVxcdTAwM2VieXRlc2l6ZSlcXG4gXFx0XFx0XFx0a29iamVjdF91ZXZlbnQoXFx1MDAyNm5iZF90b19kZXYobmJkKS1cXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xcbiBcXHRcXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KE5CRF9SVF9IQVNfUElEX0ZJTEUsXFxuQEAgLTE1NzQsNyArMTU3Niw3IEBAIHN0YXRpYyBpbnQgbmJkX3N0YXJ0X2RldmljZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbiBcXHRcXHRhcmdzLVxcdTAwM2VpbmRleCA9IGk7XFxuIFxcdFxcdHF1ZXVlX3dvcmsobmJkLVxcdTAwM2VyZWN2X3dvcmtxLCBcXHUwMDI2YXJncy1cXHUwMDNld29yayk7XFxuIFxcdH1cXG4tXFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGNvbmZpZy1cXHUwMDNlYnl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZykpO1xcbitcXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgY29uZmlnLVxcdTAwM2VieXRlc2l6ZSwgbmJkX2Jsa3NpemUoY29uZmlnKSwgZmFsc2UpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IG5iZF9zdGFydF9kZXZpY2VfaW9jdGwoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG5AQCAtMTY0MiwxMyArMTY0NCwxMyBAQCBzdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXFxuIFxcdGNhc2UgTkJEX1NFVF9TT0NLOlxcbiBcXHRcXHRyZXR1cm4gbmJkX2FkZF9zb2NrZXQobmJkLCBhcmcsIGZhbHNlKTtcXG4gXFx0Y2FzZSBOQkRfU0VUX0JMS1NJWkU6XFxuLVxcdFxcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBjb25maWctXFx1MDAzZWJ5dGVzaXplLCBhcmcpO1xcbitcXHRcXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgY29uZmlnLVxcdTAwM2VieXRlc2l6ZSwgYXJnLCB0cnVlKTtcXG4gXFx0Y2FzZSBOQkRfU0VUX1NJWkU6XFxuLVxcdFxcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBhcmcsIG5iZF9ibGtzaXplKGNvbmZpZykpO1xcbitcXHRcXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYXJnLCBuYmRfYmxrc2l6ZShjb25maWcpLCB0cnVlKTtcXG4gXFx0Y2FzZSBOQkRfU0VUX1NJWkVfQkxPQ0tTOlxcbiBcXHRcXHRpZiAoY2hlY2tfc2hsX292ZXJmbG93KGFyZywgY29uZmlnLVxcdTAwM2VibGtzaXplX2JpdHMsIFxcdTAwMjZieXRlc2l6ZSkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRcXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZykpO1xcbitcXHRcXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZyksIHRydWUpO1xcbiBcXHRjYXNlIE5CRF9TRVRfVElNRU9VVDpcXG4gXFx0XFx0bmJkX3NldF9jbWRfdGltZW91dChuYmQsIGFyZyk7XFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xOTQxLDcgKzE5NDMsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgbmJkX21xX29wcyA9IHtcXG4gXFx0LnRpbWVvdXRcXHQ9IG5iZF94bWl0X3RpbWVvdXQsXFxuIH07XFxuIFxcbi1zdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMpXFxuK3N0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGludCBucl9od19xdWV1ZXMpXFxuIHtcXG4gXFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSB7XFxuIFxcdFxcdC5tYXhfaHdfc2VjdG9yc1xcdFxcdD0gNjU1MzYsXFxuQEAgLTE5NTgsNyArMTk2MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcylcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRuYmQtXFx1MDAzZXRhZ19zZXQub3BzID0gXFx1MDAyNm5iZF9tcV9vcHM7XFxuLVxcdG5iZC1cXHUwMDNldGFnX3NldC5ucl9od19xdWV1ZXMgPSAxO1xcbitcXHRuYmQtXFx1MDAzZXRhZ19zZXQubnJfaHdfcXVldWVzID0gbnJfaHdfcXVldWVzO1xcbiBcXHRuYmQtXFx1MDAzZXRhZ19zZXQucXVldWVfZGVwdGggPSAxMjg7XFxuIFxcdG5iZC1cXHUwMDNldGFnX3NldC5udW1hX25vZGUgPSBOVU1BX05PX05PREU7XFxuIFxcdG5iZC1cXHUwMDNldGFnX3NldC5jbWRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbmJkX2NtZCk7XFxuQEAgLTIxMDMsMTAgKzIxMDYsNjIgQEAgc3RhdGljIGludCBuYmRfZ2VubF9zaXplX3NldChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbiBcXHRcXHRic2l6ZSA9IG5sYV9nZXRfdTY0KGluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX0JMT0NLX1NJWkVfQllURVNdKTtcXG4gXFxuIFxcdGlmIChieXRlcyAhPSBjb25maWctXFx1MDAzZWJ5dGVzaXplIHx8IGJzaXplICE9IG5iZF9ibGtzaXplKGNvbmZpZykpXFxuLVxcdFxcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBieXRlcywgYnNpemUpO1xcbitcXHRcXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXMsIGJzaXplLCB0cnVlKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFdhbGsgdGhlIE5CRF9BVFRSX1NPQ0tFVFMgbmVzdGVkIGxpc3QgY2FuIGNhbGwgQGNiIGZvciBlYWNoIHNvY2tldCBmZC5cXG4rICpcXG4rICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZmRzIHdhbGtlZCwgb3IgYSBuZWdhdGl2ZSBlcnJuby5cXG4rICovXFxuK3N0YXRpYyBpbnQgbmJkX2dlbmxfZm9yZWFjaF9zb2NrKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuK1xcdFxcdGludCAoKmNiKShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpLFxcbitcXHRcXHRzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbit7XFxuK1xcdHN0cnVjdCBubGF0dHIgKmF0dHI7XFxuK1xcdGludCByZW0sIGNvdW50ID0gMDtcXG4rXFxuK1xcdGlmICghaW5mby1cXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLVxcdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSwgcmVtKSB7XFxuK1xcdFxcdHN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCArIDFdO1xcbitcXHRcXHRpbnQgcmV0O1xcbitcXG4rXFx0XFx0aWYgKG5sYV90eXBlKGF0dHIpICE9IE5CRF9TT0NLX0lURU0pIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRhdHRyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRuYmRfc29ja19wb2xpY3ksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdGluZm8tXFx1MDAzZWV4dGFjaykpIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJlcnJvciBwcm9jZXNzaW5nIHNvY2sgbGlzdFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRjb3VudCsrO1xcbitcXHRcXHRpZiAoY2IpIHtcXG4rXFx0XFx0XFx0cmV0ID0gY2IobmJkLCAoaW50KW5sYV9nZXRfdTMyKHNvY2tzW05CRF9TT0NLX0ZEXSkpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGNvdW50O1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdHJldHVybiBjb3VudDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2Ioc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGZkKVxcbit7XFxuK1xcdHJldHVybiBuYmRfYWRkX3NvY2tldChuYmQsIGZkLCB0cnVlKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZDtcXG5AQCAtMjE1OSw3ICsyMjE0LDExIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNm5iZF9pbmRleF9tdXRleCk7XFxuIFxcbiBcXHRpZiAoIW5iZCkge1xcbi1cXHRcXHRuYmQgPSBuYmRfZGV2X2FkZChpbmRleCwgMik7XFxuK1xcdFxcdHJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBOVUxMLCBOVUxMKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRuYmQgPSBuYmRfZGV2X2FkZChpbmRleCwgMiwgcmV0IFxcdTAwM2UgMCA/IHJldCA6IDEpO1xcbiBcXHRcXHRpZiAoSVNfRVJSKG5iZCkpIHtcXG4gXFx0XFx0XFx0cHJfZXJyKFxcXCJmYWlsZWQgdG8gYWRkIG5ldyBkZXZpY2VcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihuYmQpO1xcbkBAIC0yMjI2LDM2ICsyMjg1LDkgQEAgc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKSB7XFxuLVxcdFxcdHN0cnVjdCBubGF0dHIgKmF0dHI7XFxuLVxcdFxcdGludCByZW0sIGZkO1xcbi1cXG4tXFx0XFx0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLVxcdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSxcXG4tXFx0XFx0XFx0XFx0ICAgIHJlbSkge1xcbi1cXHRcXHRcXHRzdHJ1Y3QgbmxhdHRyICpzb2Nrc1tOQkRfU09DS19NQVgrMV07XFxuLVxcbi1cXHRcXHRcXHRpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkge1xcbi1cXHRcXHRcXHRcXHRwcl9lcnIoXFxcInNvY2tzIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBTT0NLX0lURU0gYXR0clxcXFxuXFxcIik7XFxuLVxcdFxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGF0dHIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbmJkX3NvY2tfcG9saWN5LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuLVxcdFxcdFxcdGlmIChyZXQgIT0gMCkge1xcbi1cXHRcXHRcXHRcXHRwcl9lcnIoXFxcImVycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0aWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHRmZCA9IChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKTtcXG4tXFx0XFx0XFx0cmV0ID0gbmJkX2FkZF9zb2NrZXQobmJkLCBmZCwgdHJ1ZSk7XFxuLVxcdFxcdFxcdGlmIChyZXQpXFxuLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4rXFx0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYiwgbmJkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX0JBQ0tFTkRfSURFTlRJRklFUl0pIHtcXG4gXFx0XFx0bmJkLVxcdTAwM2ViYWNrZW5kID0gbmxhX3N0cmR1cChpbmZvLVxcdTAwM2VhdHRyc1tOQkRfQVRUUl9CQUNLRU5EX0lERU5USUZJRVJdLFxcbkBAIC0yMzQ0LDYgKzIzNzYsMjAgQEAgc3RhdGljIGludCBuYmRfZ2VubF9kaXNjb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZClcXG4re1xcbitcXHRpbnQgcmV0ID0gbmJkX3JlY29ubmVjdF9zb2NrZXQobmJkLCBmZCk7XFxuK1xcbitcXHRpZiAoIXJldCkge1xcbitcXHRcXHRkZXZfaW5mbyhuYmRfdG9fZGV2KG5iZCksIFxcXCJyZWNvbm5lY3RlZCBzb2NrZXRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJldCA9PSAtRU5PU1BDKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiB7XFxuIFxcdHN0cnVjdCBuYmRfZGV2aWNlICpuYmQgPSBOVUxMO1xcbkBAIC0yNDQwLDQwICsyNDg2LDEwIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25maWd1cmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10pIHtcXG4tXFx0XFx0c3RydWN0IG5sYXR0ciAqYXR0cjtcXG4tXFx0XFx0aW50IHJlbSwgZmQ7XFxuLVxcbi1cXHRcXHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLFxcbi1cXHRcXHRcXHRcXHQgICAgcmVtKSB7XFxuLVxcdFxcdFxcdHN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCsxXTtcXG4tXFxuLVxcdFxcdFxcdGlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7XFxuLVxcdFxcdFxcdFxcdHByX2VycihcXFwic29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0cmV0ID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHNvY2tzLCBOQkRfU09DS19NQVgsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgYXR0cixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBuYmRfc29ja19wb2xpY3ksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG4tXFx0XFx0XFx0aWYgKHJldCAhPSAwKSB7XFxuLVxcdFxcdFxcdFxcdHByX2VycihcXFwiZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi1cXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcXG4tXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdFxcdGZkID0gKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pO1xcbi1cXHRcXHRcXHRyZXQgPSBuYmRfcmVjb25uZWN0X3NvY2tldChuYmQsIGZkKTtcXG4tXFx0XFx0XFx0aWYgKHJldCkge1xcbi1cXHRcXHRcXHRcXHRpZiAocmV0ID09IC1FTk9TUEMpXFxuLVxcdFxcdFxcdFxcdFxcdHJldCA9IDA7XFxuLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGRldl9pbmZvKG5iZF90b19kZXYobmJkKSwgXFxcInJlY29ubmVjdGVkIHNvY2tldFxcXFxuXFxcIik7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbitcXHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2IsIG5iZCk7XFxuK1xcdC8qIGZvcmVhY2hfc29jayByZXR1cm5zIGEgcG9zaXRpdmUgY291bnQgb24gc3VjY2VzczsgZG9pdCBtdXN0IHJldHVybiAwICovXFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMClcXG4rXFx0XFx0cmV0ID0gMDtcXG4gb3V0OlxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNm5iZC1cXHUwMDNlY29uZmlnX2xvY2spO1xcbiBcXHRuYmRfY29uZmlnX3B1dChuYmQpO1xcbkBAIC0yNzI1LDggKzI3NDEsMTAgQEAgc3RhdGljIGludCBfX2luaXQgbmJkX2luaXQodm9pZClcXG4gXFx0fVxcbiBcXHRuYmRfZGJnX2luaXQoKTtcXG4gXFxuK1xcdGlmIChucl9od19xdWV1ZXMgXFx1MDAzYyAxKVxcbitcXHRcXHRucl9od19xdWV1ZXMgPSAxO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbmJkc19tYXg7IGkrKylcXG4tXFx0XFx0bmJkX2Rldl9hZGQoaSwgMSk7XFxuK1xcdFxcdG5iZF9kZXZfYWRkKGksIDEsIG5yX2h3X3F1ZXVlcyk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0yNzg3LDMgKzI4MDUsNiBAQCBtb2R1bGVfcGFyYW0obmJkc19tYXgsIGludCwgMDQ0NCk7XFxuIE1PRFVMRV9QQVJNX0RFU0MobmJkc19tYXgsIFxcXCJudW1iZXIgb2YgbmV0d29yayBibG9jayBkZXZpY2VzIHRvIGluaXRpYWxpemUgKGRlZmF1bHQ6IDE2KVxcXCIpO1xcbiBtb2R1bGVfcGFyYW0obWF4X3BhcnQsIGludCwgMDQ0NCk7XFxuIE1PRFVMRV9QQVJNX0RFU0MobWF4X3BhcnQsIFxcXCJudW1iZXIgb2YgcGFydGl0aW9ucyBwZXIgZGV2aWNlIChkZWZhdWx0OiAxNilcXFwiKTtcXG4rbW9kdWxlX3BhcmFtKG5yX2h3X3F1ZXVlcywgaW50LCAwNDQ0KTtcXG4rTU9EVUxFX1BBUk1fREVTQyhucl9od19xdWV1ZXMsXFxuK1xcXCJudW1iZXIgb2YgaGFyZHdhcmUgcXVldWVzIGZvciBkZXZpY2VzIHByZS1jcmVhdGVkIGF0IG1vZHVsZSBsb2FkIChkZWZhdWx0OiAxKS4gXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIwOjA0OjI5LjQxMzc3NDA3NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUwMzgxNzQ4OTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTkJEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmJkX2lvY3RsXCIsXG4gICAgXCJuYmRfZ2VubF9jb25uZWN0XCIsXG4gICAgXCJuYmRfZ2VubF9yZWNvbmZpZ3VyZVwiLFxuICAgIFwibmJkX2dlbmxfZGlzY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIsIGNoYW5naW5nIGhvdyBzb2NrZXRzIGFyZSBhZGRlZCwgaG93IGZhbGxiYWNrIGNvbm5lY3Rpb25zIGFyZSBmb3VuZCwgYW5kIGhvdyBibG9jayBzaXplcyBhcmUgc2V0LiBJdCBhbHNvIGludHJvZHVjZXMgYSBuZXcgbW9kdWxlIHBhcmFtZXRlciBmb3IgaGFyZHdhcmUgcXVldWVzIGFuZCByZWZhY3RvcnMgbmV0bGluayBzb2NrZXQgcGFyc2luZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIE5CRCBsb2dpYyByZWFjaGFibGUgdmlhIGlvY3RsIGFuZCBuZXRsaW5rLCBzbyB0aGV5IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRjZTIzZjkyNWZjNGRkNTRhNmFkOWJkOTA2ZTgwYzlmMzEyNTJkZDlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAyMDowNDoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbmJkLmMgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXG5pbmRleCA4ZjEwNzYyZTkwZWY3Li4yMTk0YzdkN2IyZWFlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuY1xuKysrIGIvZHJpdmVycy9ibG9jay9uYmQuY1xuQEAgLTE2Niw2ICsxNjYsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbmJkX2RiZ19kaXI7XG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCBuYmRzX21heCA9IDE2O1xuIHN0YXRpYyBpbnQgbWF4X3BhcnQgPSAxNjtcbitzdGF0aWMgaW50IG5yX2h3X3F1ZXVlcyA9IDE7XG4gc3RhdGljIGludCBwYXJ0X3NoaWZ0O1xuIFxuIHN0YXRpYyBpbnQgbmJkX2Rldl9kYmdfaW5pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKTtcbkBAIC0zMzEsNyArMzMyLDggQEAgc3RhdGljIHZvaWQgbmJkX21hcmtfbnNvY2tfZGVhZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxuIFx0bnNvY2stXHUwMDNlc2VudCA9IDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpXG4rc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSxcbitcdFx0XHRib29sIGZyZWV6ZSlcbiB7XG4gXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbiBcdGludCBlcnJvcjtcbkBAIC0zNzEsNyArMzczLDEzIEBAIHN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpXG4gXG4gXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gYmxrc2l6ZTtcbiBcdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gYmxrc2l6ZTtcbi1cdGVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZsaW0pO1xuK1xuK1x0aWYgKGZyZWV6ZSlcbitcdFx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsXG4rXHRcdFx0XHRcdTAwMjZsaW0pO1xuK1x0ZWxzZVxuK1x0XHRlcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZsaW0pO1xuK1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG5AQCAtMTA2MSw0MCArMTA2OSwzMSBAQCBzdGF0aWMgaW50IGZpbmRfZmFsbGJhY2soc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGluZGV4KVxuIFx0aW50IG5ld19pbmRleCA9IC0xO1xuIFx0c3RydWN0IG5iZF9zb2NrICpuc29jayA9IGNvbmZpZy1cdTAwM2Vzb2Nrc1tpbmRleF07XG4gXHRpbnQgZmFsbGJhY2sgPSBuc29jay1cdTAwM2VmYWxsYmFja19pbmRleDtcbitcdGludCBpO1xuIFxuIFx0aWYgKHRlc3RfYml0KE5CRF9SVF9ESVNDT05ORUNURUQsIFx1MDAyNmNvbmZpZy1cdTAwM2VydW50aW1lX2ZsYWdzKSlcbiBcdFx0cmV0dXJuIG5ld19pbmRleDtcbiBcbi1cdGlmIChjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIFx1MDAzYz0gMSkge1xuLVx0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC1cdTAwM2VkaXNrKSxcbi1cdFx0XHRcdCAgICBcIkRlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xcblwiKTtcbi1cdFx0cmV0dXJuIG5ld19pbmRleDtcbi1cdH1cbitcdGlmIChjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIFx1MDAzYz0gMSlcbitcdFx0Z290byBub19mYWxsYmFjaztcbiBcbiBcdGlmIChmYWxsYmFjayBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGZhbGxiYWNrIFx1MDAzYyBjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFjb25maWctXHUwMDNlc29ja3NbZmFsbGJhY2tdLVx1MDAzZWRlYWQpXG4gXHRcdHJldHVybiBmYWxsYmFjaztcbiBcbi1cdGlmIChuc29jay1cdTAwM2VmYWxsYmFja19pbmRleCBcdTAwM2MgMCB8fFxuLVx0ICAgIG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4IFx1MDAzZT0gY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9ucyB8fFxuLVx0ICAgIGNvbmZpZy1cdTAwM2Vzb2Nrc1tuc29jay1cdTAwM2VmYWxsYmFja19pbmRleF0tXHUwMDNlZGVhZCkge1xuLVx0XHRpbnQgaTtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9uczsgaSsrKSB7XG4tXHRcdFx0aWYgKGkgPT0gaW5kZXgpXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRpZiAoIWNvbmZpZy1cdTAwM2Vzb2Nrc1tpXS1cdTAwM2VkZWFkKSB7XG4tXHRcdFx0XHRuZXdfaW5kZXggPSBpO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXHRcdG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4ID0gbmV3X2luZGV4O1xuLVx0XHRpZiAobmV3X2luZGV4IFx1MDAzYyAwKSB7XG4tXHRcdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtXHUwMDNlZGlzayksXG4tXHRcdFx0XHRcdCAgICBcIkRlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xcblwiKTtcbi1cdFx0XHRyZXR1cm4gbmV3X2luZGV4O1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9uczsgaSsrKSB7XG4rXHRcdGlmIChpICE9IGluZGV4IFx1MDAyNlx1MDAyNiAhY29uZmlnLVx1MDAzZXNvY2tzW2ldLVx1MDAzZWRlYWQpIHtcbitcdFx0XHRuZXdfaW5kZXggPSBpO1xuK1x0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG4tXHRuZXdfaW5kZXggPSBuc29jay1cdTAwM2VmYWxsYmFja19pbmRleDtcbitcdG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4ID0gbmV3X2luZGV4O1xuK1x0aWYgKG5ld19pbmRleCBcdTAwM2U9IDApXG4rXHRcdHJldHVybiBuZXdfaW5kZXg7XG4rXG4rbm9fZmFsbGJhY2s6XG4rXHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC1cdTAwM2VkaXNrKSxcbitcdFx0XHQgICAgXCJEZWFkIGNvbm5lY3Rpb24sIGZhaWxlZCB0byBmaW5kIGEgZmFsbGJhY2tcXG5cIik7XG4gXHRyZXR1cm4gbmV3X2luZGV4O1xuIH1cbiBcbkBAIC0xMjgxLDIzICsxMjgwLDIzIEBAIHN0YXRpYyBpbnQgbmJkX2FkZF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcsXG4gXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xuIFx0c3RydWN0IG5iZF9zb2NrICoqc29ja3M7XG4gXHRzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrO1xuLVx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xuIFx0aW50IGVycjtcbiBcbiBcdC8qIEFyZyB3aWxsIGJlIGNhc3QgdG8gaW50LCBjaGVjayBpdCB0byBhdm9pZCBvdmVyZmxvdyAqL1xuIFx0aWYgKGFyZyBcdTAwM2UgSU5UX01BWClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAobmJkLVx1MDAzZXBpZCkge1xuK1x0XHRkZXZfZXJyKGRpc2tfdG9fZGV2KG5iZC1cdTAwM2VkaXNrKSxcbitcdFx0XHRcIkNhbm5vdCBhZGQgc29ja2V0IHRvIGEgcnVubmluZyBkZXZpY2VcXG5cIik7XG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXHR9XG4rXG4gXHRzb2NrID0gbmJkX2dldF9zb2NrZXQobmJkLCBhcmcsIFx1MDAyNmVycik7XG4gXHRpZiAoIXNvY2spXG4gXHRcdHJldHVybiBlcnI7XG4gXHRuYmRfcmVjbGFzc2lmeV9zb2NrZXQoc29jayk7XG4gXG4tXHQvKlxuLVx0ICogV2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0IGFueSBlcnJhbnQgcmVxdWVzdHMgd2hpbGUgd2UncmVcbi1cdCAqIHJlYWxsb2NhdGluZyB0aGUgLVx1MDAzZXNvY2tzIGFycmF5LlxuLVx0ICovXG4tXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuLVxuIFx0aWYgKCFuZXRsaW5rIFx1MDAyNlx1MDAyNiAhbmJkLVx1MDAzZXRhc2tfc2V0dXAgXHUwMDI2XHUwMDI2XG4gXHQgICAgIXRlc3RfYml0KE5CRF9SVF9CT1VORCwgXHUwMDI2Y29uZmlnLVx1MDAzZXJ1bnRpbWVfZmxhZ3MpKVxuIFx0XHRuYmQtXHUwMDNldGFza19zZXR1cCA9IGN1cnJlbnQ7XG5AQCAtMTMzNywxMiArMTMzNiwxMCBAQCBzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxuIFx0SU5JVF9XT1JLKFx1MDAyNm5zb2NrLVx1MDAzZXdvcmssIG5iZF9wZW5kaW5nX2NtZF93b3JrKTtcbiBcdHNvY2tzW2NvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnMrK10gPSBuc29jaztcbiBcdGF0b21pY19pbmMoXHUwMDI2Y29uZmlnLVx1MDAzZWxpdmVfY29ubmVjdGlvbnMpO1xuLVx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBtZW1mbGFncyk7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbiBwdXRfc29ja2V0OlxuLVx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBtZW1mbGFncyk7XG4gXHRzb2NrZmRfcHV0KHNvY2spO1xuIFx0cmV0dXJuIGVycjtcbiB9XG5AQCAtMTQ3MSw4ICsxNDY4LDEzIEBAIHN0YXRpYyB2b2lkIG5iZF9jb25maWdfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4gXHRpZiAocmVmY291bnRfZGVjX2FuZF9tdXRleF9sb2NrKFx1MDAyNm5iZC1cdTAwM2Vjb25maWdfcmVmcyxcbiBcdFx0XHRcdFx0XHUwMDI2bmJkLVx1MDAzZWNvbmZpZ19sb2NrKSkge1xuIFx0XHRzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnID0gbmJkLVx1MDAzZWNvbmZpZztcbitcdFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG4gXHRcdG5iZF9kZXZfZGJnX2Nsb3NlKG5iZCk7XG4gXHRcdGludmFsaWRhdGVfZGlzayhuYmQtXHUwMDNlZGlzayk7XG4rXHRcdC8qIHJlc2V0IHdyaXRlIGNhY2hlICovXG4rXHRcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuK1x0XHRsaW0uZmVhdHVyZXMgXHUwMDI2PSB+KEJMS19GRUFUX1dSSVRFX0NBQ0hFIHwgQkxLX0ZFQVRfRlVBKTtcbitcdFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIFx1MDAyNmxpbSk7XG4gXHRcdGlmIChuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWJ5dGVzaXplKVxuIFx0XHRcdGtvYmplY3RfdWV2ZW50KFx1MDAyNm5iZF90b19kZXYobmJkKS1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XG4gXHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTkJEX1JUX0hBU19QSURfRklMRSxcbkBAIC0xNTc0LDcgKzE1NzYsNyBAQCBzdGF0aWMgaW50IG5iZF9zdGFydF9kZXZpY2Uoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbiBcdFx0YXJncy1cdTAwM2VpbmRleCA9IGk7XG4gXHRcdHF1ZXVlX3dvcmsobmJkLVx1MDAzZXJlY3Zfd29ya3EsIFx1MDAyNmFyZ3MtXHUwMDNld29yayk7XG4gXHR9XG4tXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgY29uZmlnLVx1MDAzZWJ5dGVzaXplLCBuYmRfYmxrc2l6ZShjb25maWcpKTtcbitcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBjb25maWctXHUwMDNlYnl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZyksIGZhbHNlKTtcbiB9XG4gXG4gc3RhdGljIGludCBuYmRfc3RhcnRfZGV2aWNlX2lvY3RsKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5AQCAtMTY0MiwxMyArMTY0NCwxMyBAQCBzdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXG4gXHRjYXNlIE5CRF9TRVRfU09DSzpcbiBcdFx0cmV0dXJuIG5iZF9hZGRfc29ja2V0KG5iZCwgYXJnLCBmYWxzZSk7XG4gXHRjYXNlIE5CRF9TRVRfQkxLU0laRTpcbi1cdFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGNvbmZpZy1cdTAwM2VieXRlc2l6ZSwgYXJnKTtcbitcdFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGNvbmZpZy1cdTAwM2VieXRlc2l6ZSwgYXJnLCB0cnVlKTtcbiBcdGNhc2UgTkJEX1NFVF9TSVpFOlxuLVx0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYXJnLCBuYmRfYmxrc2l6ZShjb25maWcpKTtcbitcdFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGFyZywgbmJkX2Jsa3NpemUoY29uZmlnKSwgdHJ1ZSk7XG4gXHRjYXNlIE5CRF9TRVRfU0laRV9CTE9DS1M6XG4gXHRcdGlmIChjaGVja19zaGxfb3ZlcmZsb3coYXJnLCBjb25maWctXHUwMDNlYmxrc2l6ZV9iaXRzLCBcdTAwMjZieXRlc2l6ZSkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBieXRlc2l6ZSwgbmJkX2Jsa3NpemUoY29uZmlnKSk7XG4rXHRcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBieXRlc2l6ZSwgbmJkX2Jsa3NpemUoY29uZmlnKSwgdHJ1ZSk7XG4gXHRjYXNlIE5CRF9TRVRfVElNRU9VVDpcbiBcdFx0bmJkX3NldF9jbWRfdGltZW91dChuYmQsIGFyZyk7XG4gXHRcdHJldHVybiAwO1xuQEAgLTE5NDEsNyArMTk0Myw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBuYmRfbXFfb3BzID0ge1xuIFx0LnRpbWVvdXRcdD0gbmJkX3htaXRfdGltZW91dCxcbiB9O1xuIFxuLXN0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcylcbitzdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMsXG4rXHRcdFx0XHQgICAgICAgaW50IG5yX2h3X3F1ZXVlcylcbiB7XG4gXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbSA9IHtcbiBcdFx0Lm1heF9od19zZWN0b3JzXHRcdD0gNjU1MzYsXG5AQCAtMTk1OCw3ICsxOTYxLDcgQEAgc3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdG5iZC1cdTAwM2V0YWdfc2V0Lm9wcyA9IFx1MDAyNm5iZF9tcV9vcHM7XG4tXHRuYmQtXHUwMDNldGFnX3NldC5ucl9od19xdWV1ZXMgPSAxO1xuK1x0bmJkLVx1MDAzZXRhZ19zZXQubnJfaHdfcXVldWVzID0gbnJfaHdfcXVldWVzO1xuIFx0bmJkLVx1MDAzZXRhZ19zZXQucXVldWVfZGVwdGggPSAxMjg7XG4gXHRuYmQtXHUwMDNldGFnX3NldC5udW1hX25vZGUgPSBOVU1BX05PX05PREU7XG4gXHRuYmQtXHUwMDNldGFnX3NldC5jbWRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbmJkX2NtZCk7XG5AQCAtMjEwMywxMCArMjEwNiw2MiBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX3NpemVfc2V0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4gXHRcdGJzaXplID0gbmxhX2dldF91NjQoaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9CTE9DS19TSVpFX0JZVEVTXSk7XG4gXG4gXHRpZiAoYnl0ZXMgIT0gY29uZmlnLVx1MDAzZWJ5dGVzaXplIHx8IGJzaXplICE9IG5iZF9ibGtzaXplKGNvbmZpZykpXG4tXHRcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBieXRlcywgYnNpemUpO1xuK1x0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXMsIGJzaXplLCB0cnVlKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKlxuKyAqIFdhbGsgdGhlIE5CRF9BVFRSX1NPQ0tFVFMgbmVzdGVkIGxpc3QgY2FuIGNhbGwgQGNiIGZvciBlYWNoIHNvY2tldCBmZC5cbisgKlxuKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGZkcyB3YWxrZWQsIG9yIGEgbmVnYXRpdmUgZXJybm8uXG4rICovXG4rc3RhdGljIGludCBuYmRfZ2VubF9mb3JlYWNoX3NvY2soc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbitcdFx0aW50ICgqY2IpKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZCksXG4rXHRcdHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4re1xuK1x0c3RydWN0IG5sYXR0ciAqYXR0cjtcbitcdGludCByZW0sIGNvdW50ID0gMDtcbitcbitcdGlmICghaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sIHJlbSkge1xuK1x0XHRzdHJ1Y3QgbmxhdHRyICpzb2Nrc1tOQkRfU09DS19NQVggKyAxXTtcbitcdFx0aW50IHJldDtcbitcbitcdFx0aWYgKG5sYV90eXBlKGF0dHIpICE9IE5CRF9TT0NLX0lURU0pIHtcbitcdFx0XHRwcl9lcnIoXCJzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcXG5cIik7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcbitcdFx0aWYgKG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxuK1x0XHRcdFx0XHRcdGF0dHIsXG4rXHRcdFx0XHRcdFx0bmJkX3NvY2tfcG9saWN5LFxuK1x0XHRcdFx0XHRcdGluZm8tXHUwMDNlZXh0YWNrKSkge1xuK1x0XHRcdHByX2VycihcImVycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XFxuXCIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXG4rXHRcdGlmICghc29ja3NbTkJEX1NPQ0tfRkRdKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRjb3VudCsrO1xuK1x0XHRpZiAoY2IpIHtcbitcdFx0XHRyZXQgPSBjYihuYmQsIChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKSk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2UgMClcbitcdFx0XHRcdHJldHVybiBjb3VudDtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0fVxuK1x0fVxuK1x0cmV0dXJuIGNvdW50O1xuK31cbitcbitzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpXG4re1xuK1x0cmV0dXJuIG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpO1xuK31cbitcbiBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgbmJkX2RldmljZSAqbmJkO1xuQEAgLTIxNTksNyArMjIxNCwxMSBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdG11dGV4X3VubG9jayhcdTAwMjZuYmRfaW5kZXhfbXV0ZXgpO1xuIFxuIFx0aWYgKCFuYmQpIHtcbi1cdFx0bmJkID0gbmJkX2Rldl9hZGQoaW5kZXgsIDIpO1xuK1x0XHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgTlVMTCwgTlVMTCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0bmJkID0gbmJkX2Rldl9hZGQoaW5kZXgsIDIsIHJldCBcdTAwM2UgMCA/IHJldCA6IDEpO1xuIFx0XHRpZiAoSVNfRVJSKG5iZCkpIHtcbiBcdFx0XHRwcl9lcnIoXCJmYWlsZWQgdG8gYWRkIG5ldyBkZXZpY2VcXG5cIik7XG4gXHRcdFx0cmV0dXJuIFBUUl9FUlIobmJkKTtcbkBAIC0yMjI2LDM2ICsyMjg1LDkgQEAgc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKSB7XG4tXHRcdHN0cnVjdCBubGF0dHIgKmF0dHI7XG4tXHRcdGludCByZW0sIGZkO1xuLVxuLVx0XHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sXG4tXHRcdFx0XHQgICAgcmVtKSB7XG4tXHRcdFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYKzFdO1xuLVxuLVx0XHRcdGlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7XG4tXHRcdFx0XHRwcl9lcnIoXCJzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcXG5cIik7XG4tXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVx0XHRcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxuLVx0XHRcdFx0XHRcdFx0ICBhdHRyLFxuLVx0XHRcdFx0XHRcdFx0ICBuYmRfc29ja19wb2xpY3ksXG4tXHRcdFx0XHRcdFx0XHQgIGluZm8tXHUwMDNlZXh0YWNrKTtcbi1cdFx0XHRpZiAocmV0ICE9IDApIHtcbi1cdFx0XHRcdHByX2VycihcImVycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XFxuXCIpO1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdGZkID0gKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pO1xuLVx0XHRcdHJldCA9IG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpO1xuLVx0XHRcdGlmIChyZXQpXG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0fVxuLVx0fVxuK1x0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYiwgbmJkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0O1xuIFxuIFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkFDS0VORF9JREVOVElGSUVSXSkge1xuIFx0XHRuYmQtXHUwMDNlYmFja2VuZCA9IG5sYV9zdHJkdXAoaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9CQUNLRU5EX0lERU5USUZJRVJdLFxuQEAgLTIzNDQsNiArMjM3NiwyMCBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX2Rpc2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZClcbit7XG4rXHRpbnQgcmV0ID0gbmJkX3JlY29ubmVjdF9zb2NrZXQobmJkLCBmZCk7XG4rXG4rXHRpZiAoIXJldCkge1xuK1x0XHRkZXZfaW5mbyhuYmRfdG9fZGV2KG5iZCksIFwicmVjb25uZWN0ZWQgc29ja2V0XFxuXCIpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGlmIChyZXQgPT0gLUVOT1NQQylcbitcdFx0cmV0dXJuIDE7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiBzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZCA9IE5VTEw7XG5AQCAtMjQ0MCw0MCArMjQ4NiwxMCBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKSB7XG4tXHRcdHN0cnVjdCBubGF0dHIgKmF0dHI7XG4tXHRcdGludCByZW0sIGZkO1xuLVxuLVx0XHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sXG4tXHRcdFx0XHQgICAgcmVtKSB7XG4tXHRcdFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYKzFdO1xuLVxuLVx0XHRcdGlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7XG4tXHRcdFx0XHRwcl9lcnIoXCJzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcXG5cIik7XG4tXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVx0XHRcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxuLVx0XHRcdFx0XHRcdFx0ICBhdHRyLFxuLVx0XHRcdFx0XHRcdFx0ICBuYmRfc29ja19wb2xpY3ksXG4tXHRcdFx0XHRcdFx0XHQgIGluZm8tXHUwMDNlZXh0YWNrKTtcbi1cdFx0XHRpZiAocmV0ICE9IDApIHtcbi1cdFx0XHRcdHByX2VycihcImVycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XFxuXCIpO1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdGZkID0gKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pO1xuLVx0XHRcdHJldCA9IG5iZF9yZWNvbm5lY3Rfc29ja2V0KG5iZCwgZmQpO1xuLVx0XHRcdGlmIChyZXQpIHtcbi1cdFx0XHRcdGlmIChyZXQgPT0gLUVOT1NQQylcbi1cdFx0XHRcdFx0cmV0ID0gMDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRkZXZfaW5mbyhuYmRfdG9fZGV2KG5iZCksIFwicmVjb25uZWN0ZWQgc29ja2V0XFxuXCIpO1xuLVx0XHR9XG4tXHR9XG4rXHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2IsIG5iZCk7XG4rXHQvKiBmb3JlYWNoX3NvY2sgcmV0dXJucyBhIHBvc2l0aXZlIGNvdW50IG9uIHN1Y2Nlc3M7IGRvaXQgbXVzdCByZXR1cm4gMCAqL1xuK1x0aWYgKHJldCBcdTAwM2U9IDApXG4rXHRcdHJldCA9IDA7XG4gb3V0OlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5iZC1cdTAwM2Vjb25maWdfbG9jayk7XG4gXHRuYmRfY29uZmlnX3B1dChuYmQpO1xuQEAgLTI3MjUsOCArMjc0MSwxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBuYmRfaW5pdCh2b2lkKVxuIFx0fVxuIFx0bmJkX2RiZ19pbml0KCk7XG4gXG4rXHRpZiAobnJfaHdfcXVldWVzIFx1MDAzYyAxKVxuK1x0XHRucl9od19xdWV1ZXMgPSAxO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmJkc19tYXg7IGkrKylcbi1cdFx0bmJkX2Rldl9hZGQoaSwgMSk7XG4rXHRcdG5iZF9kZXZfYWRkKGksIDEsIG5yX2h3X3F1ZXVlcyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjc4NywzICsyODA1LDYgQEAgbW9kdWxlX3BhcmFtKG5iZHNfbWF4LCBpbnQsIDA0NDQpO1xuIE1PRFVMRV9QQVJNX0RFU0MobmJkc19tYXgsIFwibnVtYmVyIG9mIG5ldHdvcmsgYmxvY2sgZGV2aWNlcyB0byBpbml0aWFsaXplIChkZWZhdWx0OiAxNilcIik7XG4gbW9kdWxlX3BhcmFtKG1heF9wYXJ0LCBpbnQsIDA0NDQpO1xuIE1PRFVMRV9QQVJNX0RFU0MobWF4X3BhcnQsIFwibnVtYmVyIG9mIHBhcnRpdGlvbnMgcGVyIGRldmljZSAoZGVmYXVsdDogMTYpXCIpO1xuK21vZHVsZV9wYXJhbShucl9od19xdWV1ZXMsIGludCwgMDQ0NCk7XG4rTU9EVUxFX1BBUk1fREVTQyhucl9od19xdWV1ZXMsXG4rXCJudW1iZXIgb2YgaGFyZHdhcmUgcXVldWVzIGZvciBkZXZpY2VzIHByZS1jcmVhdGVkIGF0IG1vZHVsZSBsb2FkIChkZWZhdWx0OiAxKS4gXCIpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6MDQ6MjkuNDEzNzc2NTg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzMTU5MTgwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOQkQgRHJpdmVyIFBhdGNoIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGZvciB0aGUgTkJEIGRyaXZlciwgYGRyaXZlcnMvYmxvY2svbmJkLmNgLCBhbmQgaXQncyBtYWtpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIG5lZWRzIGZ1enppbmcsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhhdCBpdOKAmXMgdG91Y2hpbmcgY29yZSBsb2dpYyBhY2Nlc3NlZCB2aWEgYm90aCBpb2N0bCBhbmQgTmV0bGluay4gTGV0J3MgYnJlYWsgZG93biB0aGUgaW1wbGljYXRpb25zIGFuZCBmaWd1cmUgb3V0IHRoZSBiZXN0IGF0dGFjayBzdXJmYWNlLlxuXG5GaXJzdCwgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW9kdWxlIHBhcmFtZXRlciwgYG5yX2h3X3F1ZXVlc2AuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgYXJlYS4gVGhlbiwgYG5iZF9zZXRfc2l6ZWAgaXMgbW9kaWZpZWQgdG8gaGFuZGxlIGEgYGZyZWV6ZWAgcGFyYW1ldGVyLCB3aGljaCBpcyBhIGJpdCBjb25jZXJuaW5nLCBiZWNhdXNlIHRoaXMgc3VnZ2VzdHMgYSBzdGF0ZSBjaGFuZ2UgdGhhdCBjb3VsZCBpbXBhY3QgZGV2aWNlIGJlaGF2aW9yLiBGaXhpbmcgdGhlIGBmaW5kX2ZhbGxiYWNrYCBsb2dpYyBpcyBhbm90aGVyIHBvaW50IG9mIGludGVyZXN0OyBidWcgZml4ZXMgb2Z0ZW4gZXhwb3NlIG5ldyBjb2RlIHBhdGhzLiBQcmV2ZW50aW5nIHNvY2tldCBhZGRpdGlvbnMgdG8gYSBydW5uaW5nIGRldmljZSBpbiBgbmJkX2FkZF9zb2NrZXRgIGlzIGEgZ29vZCBkZWZlbnNpdmUgY2hhbmdlLCBidXQgdGhlIHJlbW92YWwgb2YgdGhlIHF1ZXVlIGZyZWV6aW5nL3VuZnJlZXppbmcgY2FsbHMgaXMgbm90ZXdvcnRoeSwgYmVjYXVzZSBpdCBjaGFuZ2VzIHRoZSBleGlzdGluZyBjb2RlLCBldmVuIGlmIHRvIHByb3RlY3QgdGhlIHN5c3RlbS4gVGhlIHJlc2V0IG9mIHdyaXRlIGNhY2hlIGZlYXR1cmVzIGluIGBuYmRfY29uZmlnX3B1dGAgaXMgYW5vdGhlciBmbGFnIHRoYXQgaXQgaXMgdG91Y2hpbmcgc2Vuc2l0aXZlIGFyZWFzIG9mIHRoZSBkcml2ZXIuIFBsdXMsIHNldHRpbmcgYG5yX2h3X3F1ZXVlc2AgaW4gYG5iZF9kZXZfYWRkYCBtZWFucyB0aGVyZSdzIGEgbmV3IHBhcmFtZXRlciBiZWluZyBpbnRyb2R1Y2VkIGF0IGRldmljZSBhZGRpdGlvbi4gUmVmYWN0b3JpbmcgTmV0bGluayBzb2NrZXQgcGFyc2luZyBpbnRvIGBuYmRfZ2VubF9mb3JlYWNoX3NvY2tgIGFuZCB1c2luZyBpdCBpbiBgbmJkX2dlbmxfY29ubmVjdGAgYW5kIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAgaXMgYSBiaWcgZnVuY3Rpb25hbCBjaGFuZ2Ugd2hpY2ggbmVlZHMgZnV6emluZyBhcyB3ZWxsLlxuXG5UaGUgZ29hbCBpcyB0byBmaW5kIHRoZSByaWdodCBmb2N1cyBzeW1ib2xzIHRvIHRhcmdldC5cblxuTm93LCBtb3N0IG9mIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHN0YXRpYywgd2hpY2ggbWFrZXMgZGlyZWN0IGZ1enppbmcgYSBsaXR0bGUgdHJpY2tpZXIsIGJ1dCB0aGV5IGFyZSBzdGlsbCBpbXBvcnRhbnQuIFRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgaWRlYWwgZm9yIGZ1enppbmcsIGdpdmVuIHRoYXQgdGhleSBhcmUgbW9zdCBsaWtlbHkgdG8gYmUgZXhwb3NlZCBhcyBleHRlcm5hbCBBUEkuIEkgdGhpbmsgYG5iZF9pb2N0bGAsIGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYW5kIGBuYmRfZ2VubF9kaXNjb25uZWN0YCBhcmUgZ29vZCBjYW5kaWRhdGVzLiBFdmVuIHRob3VnaCBzb21lIG9mIHRoZXNlIGFyZSBzdGF0aWMsIGlmIHRoZXkgYXJlIG5vdCBpbmxpbmVkLCB0aGV5IGFyZSBnb29kIGVudHJ5IHBvaW50cy5cblxuR2l2ZW4gdGhlIHByaW9yaXR5IGZvciBub24tc3RhdGljIGVudHJ5IHBvaW50cywgSSBuZWVkIHRvIHZlcmlmeSB3aGljaCBhcmUgZXhwb3NlZC4gVGltZSB0byBnbyBodW50aW5nIGluIGBkcml2ZXJzL2Jsb2NrL25iZC5jYCFcblxuXG4iLCJJbnB1dFRva2VucyI6Njk3MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIwOjA0OjM5LjcyOTY5ODA2MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDgzNDQyNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT9pbnQgbmJkX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuYz0xNjMyPXN0YXRpYyBpbnQgX19uYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY3OC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2Nzk6c3RhdGljIGludCBuYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY4MC1cXHRcXHQgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMDowNDo0MC4xMzgwNDY1OTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDM4NzUxODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkNoZWNraW5nIGZvciBOZXRsaW5rIENhbGxiYWNrcyoqXG5cbkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAgaW50byB0aGlzIG5ldyBtb2R1bGUsIGxldCdzIGp1c3QgbWFrZSBzdXJlIHdlJ3ZlIGNvdmVyZWQgdGhlIGJhc2ljcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBleHBsaWNpdGx5IHZlcmlmeSB0aGF0IHdlJ3JlIHByb3Blcmx5IGhhbmRsaW5nIGFueSBhbmQgYWxsIHJlbGV2YW50IE5ldGxpbmsgY2FsbGJhY2tzLiBUaGlzIGlzIGZvdW5kYXRpb25hbDsgd2l0aG91dCB0aGlzIGNoZWNrZWQgYW5kIHdvcmtpbmcgY29ycmVjdGx5LCBpdCdzIGp1c3Qgbm90IGdvaW5nIHRvIGdvLCBhbmQgY291bGQgaW50cm9kdWNlIHJlYWxseSBoYXJkLXRvLWRlYnVnIHByb2JsZW1zIGRvd25zdHJlYW0uIEkgbmVlZCB0byByYXBpZGx5IGNvbmZpcm0gdGhhdCB3ZSBoYXZlIHRoZSBuZWNlc3NhcnkgbWVjaGFuaXNtcyBpbiBwbGFjZSB0byByZWNlaXZlIGFuZCBwcm9jZXNzIG1lc3NhZ2VzLCBlc3BlY2lhbGx5IGFueXRoaW5nIGFzeW5jaHJvbm91cy4gQ29uc2lkZXIgYWxsIHBvdGVudGlhbCBOZXRsaW5rIG1lc3NhZ2UgdHlwZXMuIEFtIEkgc2V0IHVwIHRvIGhhbmRsZSB0aGVtIGFsbD8gQXJlIHdlIGV2ZW4gKmV4cGVjdGluZyogc3BlY2lmaWMgdHlwZXMgaW4gdGhpcyBjb250ZXh0PyBMZXQncyBxdWlja2x5IHJldmlldyB0aGUgcmVnaXN0ZXJlZCBoYW5kbGVycywgdGhlIGZpbHRlciBjcml0ZXJpYSwgdGhlIGJ1ZmZlcnMgdXNlZCwgYW5kIGVuc3VyZSBkYXRhIGlzIGJlaW5nIHByb3Blcmx5IGV4dHJhY3RlZCBhbmQgaGFuZGxlZC4gVGltZSB0byBjb25maXJtIGlmIHdlJ3JlIGVmZmVjdGl2ZWx5IGxpc3RlbmluZyBhbmQgYWN0aW5nIGFwcHJvcHJpYXRlbHkgdG8gZXh0ZXJuYWwga2VybmVsIGV2ZW50cywgb3IgcmlzayB3YXN0aW5nIG91ciB0aW1lIGNoYXNpbmcgZ2hvc3RzIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzM0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMDowNDo0NC4xNzY4MDM1NjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM1NzQ3OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmJkX2dlbmxfY29ubmVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmM9MjExOD1zdGF0aWMgaW50IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTU5LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjE2MDpzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTYxLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE2NC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIxNjU6c3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTY2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjI4Ny1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIyODg6XFx0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYiwgbmJkKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIyODktXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI1MDI9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBuYmRfY29ubmVjdF9nZW5sX29wc1tdID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTA1LVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI1MDY6XFx0XFx0LmRvaXRcXHQ9IG5iZF9nZW5sX2Nvbm5lY3QsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTA3LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIwOjA0OjQ0LjI1MDM4MjU1N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMDY1OTkyNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgYG5iZF9nZW5sX3JlY29uZmlndXJlYCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgbmJkX2dlbmxfcmVjb25maWd1cmVgIGZ1bmN0aW9uLiBJJ20gYXNzdW1pbmcgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBnZW5lcmljIG5ldGxpbmsgaW50ZXJmYWNlIGZvciBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodHMgYXJlOiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gV2hhdCBwYXJhbWV0ZXJzIGRvZXMgaXQgdGFrZT8gV2hhdCBkb2VzIGl0ICpkbyogd2l0aCB0aG9zZSBwYXJhbWV0ZXJzPyBJcyB0aGlzIGEgY29tcGxldGUgcmVjb25maWd1cmF0aW9uIHJvdXRpbmUgb3IgYSBwaWVjZSBvZiBhIGxhcmdlciBwdXp6bGU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIE5CRCBzZXR1cCBhbmQgdGVhci1kb3duIHByb2Nlc3MuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgZm9yIHdoZXJlIHRoaXMgZml0cyBpbiByZWxhdGlvbiB0byB0aGUgbWFpbiBkcml2ZXIgbG9vcCwgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBhbmQgZGF0YSB0cmFuc2Zlci4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGhhbmRsZSB0aGluZ3MgbGlrZSBjaGFuZ2luZyB0aGUgYmxvY2sgc2l6ZSwgcGVyaGFwcyB0aGUgYWxsb3dlZCBtYXhpbXVtIGJsb2NrIHNpemUsIG9yIG1heWJlIGV2ZW4gZmVhdHVyZXMgcmVsYXRlZCB0byBzZWN1cml0eSBvciBlbmNyeXB0aW9uIG5lZ290aWF0aW9uLCBvciBwZXJoYXBzIGV2ZW4gcXVldWUgZGVwdGggbGltaXRhdGlvbnMuIFRoZSBkZXZpbCdzIGluIHRoZSBkZXRhaWxzOyBJJ20gYW50aWNpcGF0aW5nIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuOiBBcmUgdGhlcmUgcHJvcGVyIGxvY2tpbmcgbWVjaGFuaXNtcyB0byBlbnN1cmUgdGhyZWFkLXNhZmV0eSwgZXNwZWNpYWxseSBpZiB0aGlzIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGEgdXNlci1zcGFjZSB1dGlsaXR5PyBXaGF0J3MgdGhlIGVycm9yIGhhbmRsaW5nIGxpa2U/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb24sIGVzcGVjaWFsbHkgaW4gYSBoZWF2aWx5LXRocmVhZGVkIGVudmlyb25tZW50PyBJIGFsc28gbmVlZCB0byBjb25zaWRlciBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zIGFuZCBpZiB0aGUgcmVjb25maWd1cmUgaXMgcHJvcGVybHkgdmFsaWRhdGluZyBpbnB1dHMuIEFscmlnaHQsIGxldCdzIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaWYgbXkgYXNzdW1wdGlvbnMgaG9sZCB3YXRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAwMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIwOjA0OjQ4LjI1Njk4Mzk2NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDQ4NzE0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYmRfZ2VubF9yZWNvbmZpZ3VyZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmM9MjM3OT1zdGF0aWMgaW50IG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM5Mi1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIzOTM6c3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM5NC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI1MDI9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBuYmRfY29ubmVjdF9nZW5sX29wc1tdID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTE1LVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI1MTY6XFx0XFx0LmRvaXRcXHQ9IG5iZF9nZW5sX3JlY29uZmlndXJlLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUxNy1cXHR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMDowNDo0OC4zMzE0NzUzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5Mjc5NTEwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEaXNjb25uZWN0IEZ1bmN0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgbmJkX2dlbmxfZGlzY29ubmVjdGAuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgd2hlcmUgY2xpZW50IGRpc2Nvbm5lY3Rpb25zIGFyZSBhY3R1YWxseSAqaGFuZGxlZCogd2l0aGluIHRoZSBOQkQgKE5ldHdvcmsgQmxvY2sgRGV2aWNlKSBrZXJuZWwgbW9kdWxlLCBmcm9tIGEgZ2VuZXJpYyBuZXRsaW5rIHBlcnNwZWN0aXZlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBleGFjdCBzZXF1ZW5jZSBvZiBldmVudHMgdGhhdCB0cmlnZ2VycyB0aGlzIGZ1bmN0aW9uLCBhbmQgd2hhdCB0aGUgcG90ZW50aWFsIGZhaWx1cmUgcG9pbnRzIGFyZS4gV2hhdCBzdGF0ZSB0cmFuc2l0aW9ucyBhcmUgaW52b2x2ZWQ/IFdoYXQgbG9ja3MgYXJlIGhlbGQsIGFuZCBmb3IgaG93IGxvbmc/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyByYWNlIGNvbmRpdGlvbnMgdGhhdCBjb3VsZCBiZSBleHBsb2l0ZWQgaGVyZT8gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBncmFjZWZ1bGx5IChvciBub3QpIGl0IGhhbmRsZXMgcGFydGlhbGx5IGNvbXBsZXRlZCBvcGVyYXRpb25zIGR1cmluZyBhIGRpc2Nvbm5lY3Qg4oCTIGRvZXMgaXQgbGVhdmUgdGhlIGJsb2NrIGRldmljZSBpbiBhIGNvbnNpc3RlbnQgc3RhdGU/IFdoYXQgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3Igb25nb2luZyBJL08/IEdvdHRhIGVuc3VyZSB3ZSBhcmVuJ3QgaW50cm9kdWNpbmcgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgaGVyZS4gTXkgZm9jdXMgd2lsbCBiZSBvbiBtZW1vcnkgbWFuYWdlbWVudCB0b287IGhvdyBlZmZpY2llbnRseSBhcmUgcmVzb3VyY2VzIGZyZWVkPyBBbnkgY2hhbmNlIG9mIGxlYWtzPyBMZXQncyBjaGVjayB0aGUgY29kZSBhbmQgc2VlIHdoYXQgc3VycHJpc2VzIGl0IGhvbGRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjI0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6MDQ6NTEuOTI0MjczMTIzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Nzk0MTgyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYmRfZ2VubF9kaXNjb25uZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuYz0yMzIzPXN0YXRpYyB2b2lkIG5iZF9kaXNjb25uZWN0X2FuZF9wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM0My1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIzNDQ6c3RhdGljIGludCBuYmRfZ2VubF9kaXNjb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzQ1LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MjUwMj1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5iZF9jb25uZWN0X2dlbmxfb3BzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MTAtXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjUxMTpcXHRcXHQuZG9pdFxcdD0gbmJkX2dlbmxfZGlzY29ubmVjdCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MTItXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6MDQ6NTEuOTkyMjIxODE5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NjMzMzYzNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBgbmJkX2dlbmxfc3RhdHVzYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoaW5ncy4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gY2hlY2sgYG5iZF9nZW5sX3N0YXR1c2AuIEl0J3MgdGhlIGdvLXRvIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHdoZXJlIHRoaW5ncyBzdGFuZCB3aXRoIHRoZSBHZW5lcmljIE5ldGxpbmsgaW50ZXJmYWNlIGFuZCwgbW9yZSBzcGVjaWZpY2FsbHksIE5ldHdvcmsgQmxvY2sgRGV2aWNlIGludGVyYWN0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gZ2V0IGEgaGlnaC1sZXZlbCBvdmVydmlldyBvZiB0aGUgZGV2aWNlIHN0YXR1cywgd2hldGhlciBvciBub3QgdGhlIHN1YnN5c3RlbSBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHksIGFueSByZWNlbnQgZXJyb3JzIGl0J3MgZW5jb3VudGVyZWQsIGFuZCwgb2YgY291cnNlLCB0aGUgZ2VuZXJhbCBoZWFsdGggb2YgdGhlIE5CRCBwcm90b2NvbCBhdCB0aGUgR2VuZXJpYyBOZXRsaW5rIGxldmVsLiBUaGlzIHdpbGwsIGhvcGVmdWxseSwgcXVpY2tseSBpbGx1bWluYXRlIHRoZSBwcm9ibGVtLiBGcm9tIHRoZXJlLCBJIGNhbiBwaW5wb2ludCB3aGF0IHRoZSBuZXh0IGxvZ2ljYWwgaW52ZXN0aWdhdGlvbiBpcy4gUGVyaGFwcyBhIGRlZXBlciBkaXZlIGludG8gc3BlY2lmaWMgZXJyb3IgY29kZXMsIG9yIG1heWJlIGl04oCZcyBhIGRlcGVuZGVuY3kgaXNzdWUgd2l0aCBhIHJlbGF0ZWQgbW9kdWxlLiBFaXRoZXIgd2F5LCBgbmJkX2dlbmxfc3RhdHVzYCBpcyB0aGUgZ2F0ZXdheSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjdXJyZW50IGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE0MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIwOjA0OjU1Ljk1NTU2MDY3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzM0NzM1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYmRfZ2VubF9zdGF0dXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jPTE3NT1zdGF0aWMgdm9pZCBuYmRfY29ubmVjdF9yZXBseShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBpbnQgaW5kZXgpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTc2OnN0YXRpYyBpbnQgbmJkX2dlbmxfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTc3LXN0YXRpYyB2b2lkIG5iZF9kZWFkX2xpbmtfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0yNTAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmJkX2Nvbm5lY3RfZ2VubF9vcHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUyMC1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTIxOlxcdFxcdC5kb2l0XFx0PSBuYmRfZ2VubF9zdGF0dXMsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTIyLVxcdH0sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI1NzQ9c3RhdGljIGludCBzdGF0dXNfY2IoaW50IGlkLCB2b2lkICpwdHIsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1NzktXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTgwOnN0YXRpYyBpbnQgbmJkX2dlbmxfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTgxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6MDQ6NTYuMDMyOTEyMTA1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzQ4NTcyNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIEludGVyZmFjZSoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgY29yZSBlbnRyeSBwb2ludHMgZm9yIHRoaXMgTkJEIGRyaXZlci4gRmlyc3Qgb2ZmLCBJJ3ZlIGdvdCBgbmJkX2lvY3RsYCwgd2hpY2ggSSBleHBlY3QgdG8gaGFuZGxlIHRoZSBjbGFzc2ljIGlvY3RsIGNhbGxzIOKAkyB0aG9zZSBhcmUgdGhlIGJyZWFkIGFuZCBidXR0ZXIgZm9yIGludGVyYWN0aW9uLiBUaGVuIHRoZXJlIGFyZSB0aGUgZ2VubCAoR2VuZXJpYyBOZXRsaW5rKSBmdW5jdGlvbnM6IGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYG5iZF9nZW5sX2Rpc2Nvbm5lY3RgLCBhbmQgYG5iZF9nZW5sX3N0YXR1c2AuIFRob3NlIGFyZSBsaWtlbHkgdGhlIG1vZGVybiwgbW9yZSByb2J1c3QgaW50ZXJmYWNlIGxldmVyYWdpbmcgdGhlIE5ldGxpbmsgcHJvdG9jb2wuIEFuZCwgb2YgY291cnNlLCB0aGVyZSdzIGBuYmRfaW5pdGAsIHdoaWNoIEknZCBpbW1lZGlhdGVseSBwZWcgYXMgdGhlIG1vZHVsZSBpbml0aWFsaXphdGlvbiByb3V0aW5lLCByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgZHJpdmVyJ3MgZW52aXJvbm1lbnQuIE5vdywgbGV0J3MgcXVpY2tseSBjb25maXJtIHdoZXRoZXIgTkJEIGlzIGV2ZW4gY29uZmlndXJlZCBpbnRvIHRoZSBrZXJuZWwuIFRpbWUgdG8gY2hlY2sgdGhlIEtjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzY0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6MDU6MDAuMjY3NzcyNTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMjAzMDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX05CRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTE5ND1zb3VyY2UgXFxcImRyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTUtXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE5Njpjb25maWcgQkxLX0RFVl9OQkRcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk3LVxcdHRyaXN0YXRlIFxcXCJOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMDowNTowMC4zNDg5ODAxMDVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzNDEzMDExNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6XG5cbioqVW5wYWNraW5nIERlcGVuZGVuY2llczogQkxLXFxfREVWXFxfTkJEKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgYEJMS19ERVZfTkJEYC4uLiB3aGF0IG90aGVyIHBpZWNlcyBvZiB0aGUga2VybmVsIHB1enpsZSBkb2VzICppdCogbGVhbiBvbj9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZm91bmRhdGlvbmFsIHJlcXVpcmVtZW50cy4gVGhpcyBpc24ndCBqdXN0IGFib3V0IHVuZGVyc3RhbmRpbmcgaXRzIGRpcmVjdCBmdW5jdGlvbmFsaXR5LCBidXQgYWxzbyBhYm91dCBtYXBwaW5nIG91dCBpdHMgcmVsYXRpb25zaGlwcyB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJ20gZXNzZW50aWFsbHkgYnVpbGRpbmcgYSBkZXBlbmRlbmN5IGdyYXBoIGluIG15IGhlYWQuIFdoYXQgb3RoZXIgc3Vic3lzdGVtcyBvciBrZXJuZWwgbW9kdWxlcyBkb2VzIGl0IGNhbGw/IFdoYXQgaW5mcmFzdHJ1Y3R1cmUgZG9lcyBpdCBsZXZlcmFnZT8gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUgY3JpdGljYWwgdG8gZnVsbHkgZ3Jhc3BpbmcgaXRzIHJvbGUgYW5kIGJlaGF2aW9yLiBTbywgbGV0J3Mgc3RhcnQgcGVlbGluZyBiYWNrIHRoZSBsYXllcnMgYW5kIHNlZSB3aGF0IG1ha2VzIHRoaXMgdGhpbmcgdGljay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNjUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMDowNTowMy41ODMxMTMxMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjIzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5NixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5NjpcXHRjb25maWcgQkxLX0RFVl9OQkRcXG4gMTk3OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcbiAxOTg6XFx0XFx0ZGVwZW5kcyBvbiBORVRcXG4gMTk5OlxcdFxcdGhlbHBcXG4gMjAwOlxcdFxcdCAgU2F5aW5nIFkgaGVyZSB3aWxsIGFsbG93IHlvdXIgY29tcHV0ZXIgdG8gYmUgYSBjbGllbnQgZm9yIG5ldHdvcmtcXG4gMjAxOlxcdFxcdCAgYmxvY2sgZGV2aWNlcywgaS5lLiBpdCB3aWxsIGJlIGFibGUgdG8gdXNlIGJsb2NrIGRldmljZXMgZXhwb3J0ZWQgYnlcXG4gMjAyOlxcdFxcdCAgc2VydmVycyAobW91bnQgZmlsZSBzeXN0ZW1zIG9uIHRoZW0gZXRjLikuIENvbW11bmljYXRpb24gYmV0d2VlblxcbiAyMDM6XFx0XFx0ICBjbGllbnQgYW5kIHNlcnZlciB3b3JrcyBvdmVyIFRDUC9JUCBuZXR3b3JraW5nLCBidXQgdG8gdGhlIGNsaWVudFxcbiAyMDQ6XFx0XFx0ICBwcm9ncmFtIHRoaXMgaXMgaGlkZGVuOiBpdCBsb29rcyBsaWtlIGEgcmVndWxhciBsb2NhbCBmaWxlIGFjY2VzcyB0b1xcbiAyMDU6XFx0XFx0ICBhIGJsb2NrIGRldmljZSBzcGVjaWFsIGZpbGUgc3VjaCBhcyAvZGV2L25kMC5cXG4gMjA2OlxcdFxcbiAyMDc6XFx0XFx0ICBOZXR3b3JrIGJsb2NrIGRldmljZXMgYWxzbyBhbGxvd3MgeW91IHRvIHJ1biBhIGJsb2NrLWRldmljZSBpblxcbiAyMDg6XFx0XFx0ICB1c2VybGFuZCAobWFraW5nIHNlcnZlciBhbmQgY2xpZW50IHBoeXNpY2FsbHkgdGhlIHNhbWUgY29tcHV0ZXIsXFxuIDIwOTpcXHRcXHQgIGNvbW11bmljYXRpbmcgdXNpbmcgdGhlIGxvb3BiYWNrIG5ldHdvcmsgZGV2aWNlKS5cXG4gMjEwOlxcdFxcbiAyMTE6XFx0XFx0ICBSZWFkIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmxvY2tkZXYvbmJkLnJzdFxcdTAwM2UgZm9yIG1vcmUgaW5mb3JtYXRpb24sXFxuIDIxMjpcXHRcXHQgIGVzcGVjaWFsbHkgYWJvdXQgd2hlcmUgdG8gZmluZCB0aGUgc2VydmVyIGNvZGUsIHdoaWNoIHJ1bnMgaW4gdXNlclxcbiAyMTM6XFx0XFx0ICBzcGFjZSBhbmQgZG9lcyBub3QgbmVlZCBzcGVjaWFsIGtlcm5lbCBzdXBwb3J0LlxcbiAyMTQ6XFx0XFxuIDIxNTpcXHRcXHQgIE5vdGUgdGhhdCB0aGlzIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIG5ldHdvcmsgZmlsZSBzeXN0ZW1zIE5GU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMDowNTowMy41ODMyMzc3NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTU3Mjg4NTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQkxLX0RFVl9OQkQgTW9kdWxlKipcblxuT2theSwgc28gYEJMS19ERVZfTkJEYCByZXF1aXJlcyBgTkVUYC4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g7IHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBhcmUganVzdCBgQkxLX0RFVl9OQkRgLiBOb3csIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBUaGUgcHJvbXB0IGVtcGhhc2l6ZXMgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBMZXQncyBzZWUgaWYgYW55IG9mIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIG5vbi1zdGF0aWMuIEhhbmcgb24uLi4gYG5iZF9pb2N0bGAgaXMgKnN0YXRpYyouIEFuZCBzbyBpcyBgbmJkX2dlbmxfY29ubmVjdGAuIEhtbS4uLiBhcmUgdGhlcmUgKmFueSogbW9kaWZpZWQgZnVuY3Rpb25zIHRoYXQgYXJlbid0IHN0YXRpYz8gTG9va3MgbGlrZSBubywgdGhleSBhcmUgYWxsIHN0YXRpYy5cblxuQnV0IHRoZSBndWlkYW5jZSBJJ20gZ2l2ZW4gcHJlZmVycyBub24tc3RhdGljIGVudHJ5IHBvaW50cy4gSWYgKmFsbCogb2YgdGhlIGVudHJ5IHBvaW50cyBhcmUgc3RhdGljLCB0aGVuIHdlIGNhbiBzdGlsbCB1c2UgdGhlIHN0YXRpYyBvbmVzIGlmIHRoZXkgYXJlIG5vdCBpbmxpbmVkLiBSaWdodD8gTGV0IG1lIGNoZWNrLiBgbmJkX2lvY3RsYCwgYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBhbmQgYG5iZF9nZW5sX2Rpc2Nvbm5lY3RgIGFyZSBhbGwgcmVnaXN0ZXJlZCBpbiBzdHJ1Y3RzLCBtZWFuaW5nIHRoZXkncmUgbm90IGlubGluZWQuIE9rYXksIHNvIHRoYXQgc2hvdWxkIGJlIGZpbmUgdGhlbi4gV2FpdCwgSSB0aGluayBgbmJkX2lvY3RsYCBnZXRzIGNhbGxlZCBieSBzb21ldGhpbmcgaW4gYG5iZF9mb3BzYCwgc28gSSBzaG91bGQgcHJvYmFibHkgdmVyaWZ5IHRoYXQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3MzYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMDowNTowOC43NDA1Mjg3ODhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMjcwNDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5iZF9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmM9MTYyMj1zdGF0aWMgdm9pZCBuYmRfc2V0X2NtZF90aW1lb3V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHU2NCB0aW1lb3V0KVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjMxLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggY29uZmlnX2xvY2sgaGVsZCAqL1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTYzMjpzdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjMzLVxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY3OC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2Nzk6c3RhdGljIGludCBuYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY4MC1cXHRcXHQgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzAxLVxcdCAgICAoY21kID09IE5CRF9ESVNDT05ORUNUIHx8IGNtZCA9PSBOQkRfQ0xFQVJfU09DSykpXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzAyOlxcdFxcdGVycm9yID0gX19uYmRfaW9jdGwoYmRldiwgbmJkLCBjbWQsIGFyZyk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzAzLVxcdGVsc2VcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MTgwNj1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG5iZF9mb3BzID1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTgxMC1cXHQucmVsZWFzZSA9XFx0bmJkX3JlbGVhc2UsXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxODExOlxcdC5pb2N0bCA9XFx0bmJkX2lvY3RsLFxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTgxMjpcXHQuY29tcGF0X2lvY3RsID1cXHRuYmRfaW9jdGwsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xODEzLVxcdC5mcmVlX2Rpc2sgPVxcdG5iZF9mcmVlX2Rpc2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIwOjA1OjA4LjgzMTgwNDE5M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDgyMDQ2Mjc5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5CRCBEcml2ZXIgUGF0Y2ggZm9yIEZ1enppbmcgRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIE5CRCBkcml2ZXIsIGFuZCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyBpZGVudGlmeWluZyB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gSXQncyBjbGVhciB0aGF0IGBuYmRfaW9jdGxgIGhhbmRsZXMgdGhlIGlvY3RsIGludGVyZmFjZSwgYW5kIGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYW5kIGBuYmRfZ2VubF9kaXNjb25uZWN0YCBhcmUgdGhlIE5ldGxpbmsgaGFuZGxlcnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBnZXQgdGhlIHJpZ2h0IGZ1bmN0aW9ucyB0byB0YXJnZXQgd2l0aCBmdXp6aW5nLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGluY2x1ZGUgdGhvc2UsIGFsb25nIHdpdGggYG5iZF9hZGRfc29ja2V0YCwgYG5iZF9zZXRfc2l6ZWAsIGBmaW5kX2ZhbGxiYWNrYCwgYG5iZF9jb25maWdfcHV0YCwgYG5iZF9zdGFydF9kZXZpY2VgLCBhbmQgYG5iZF9kZXZfYWRkYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgbW9zdCBjcml0aWNhbCBwb2ludHMuIEhvd2V2ZXIsIEkgbmVlZCB0byBzdGljayB3aXRoIHdoYXQgdGhlIHByb21wdCBzYXlzLCB3aGljaCBpcyB0byBcIlByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1wiLlxuXG5BbHJpZ2h0LCBzbyBhIHF1aWNrIGNoZWNrIHRlbGxzIG1lIHRoYXQgYG5iZF9hZGRfc29ja2V0YCwgYG5iZF9zZXRfc2l6ZWAsIGV0Yy4gYXJlIHN0YXRpYywgd2hpY2ggSSBleHBlY3RlZC4gSG93ZXZlciwgYG5iZF9pb2N0bGAgYW5kIGBuYmRfZ2VubF9jb25uZWN0YCBhcmUgZW50cnkgcG9pbnRzLCBhbmQgYWxzbyBzdGF0aWMuIEJ1dCB0aGVzZSBhcmVuJ3QgaW5saW5lZCwgdGhleSBhcmUgcmVnaXN0ZXJlZCBhcyBjYWxsYmFja3MuIEl0IGxvb2tzIGxpa2UgdGhlIG1vc3Qgc3VpdGFibGUgZW50cnkgcG9pbnRzIGFyZSB0aGUgaW9jdGwgYW5kIE5ldGxpbmsgaGFuZGxlcnM6IGBuYmRfaW9jdGxgLCBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGFuZCBgbmJkX2dlbmxfZGlzY29ubmVjdGAuIFRoYXQncyB3aGF0IEkgd2lsbCBiZSB0YXJnZXRpbmcuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgd2lsbCB2ZXJpZnkgdGhhdCBgbmJkX2lvY3RsYCBpcyBpbmRlZWQgc3RhdGljLiBPa2F5LCB5ZXMsIGl0J3MgYHN0YXRpYyBpbnQgbmJkX2lvY3RsKC4uLilgLlxuXG5UaGlzIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIGxpa2UgdGhlIGBucl9od19xdWV1ZXNgIG1vZHVsZSBwYXJhbWV0ZXIsIHRoZSBhZGRpdGlvbiBvZiB0aGUgYGZyZWV6ZWAgYm9vbGVhbiB0byBgbmJkX3NldF9zaXplYCwgZml4ZXMgdG8gYGZpbmRfZmFsbGJhY2tgLCBhbmQgY2hhbmdlcyB0byBwcmV2ZW50IGFkZGluZyBzb2NrZXRzIHRvIGEgcnVubmluZyBkZXZpY2UuIFRoZSBOZXRsaW5rIHNvY2tldCBwYXJzaW5nIGhhcyBiZWVuIHJlZmFjdG9yZWQgYXMgd2VsbC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjb3VsZCBiZW5lZml0IGZyb20gZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MTcsIk91dHB1dFRva2VucyI6MTUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIwOjA1OjE5LjY1MjI2OTUxOFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzI0ODc2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYmRfaW9jdGxcIixcbiAgICBcIm5iZF9nZW5sX2Nvbm5lY3RcIixcbiAgICBcIm5iZF9nZW5sX3JlY29uZmlndXJlXCIsXG4gICAgXCJuYmRfZ2VubF9kaXNjb25uZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIGRyaXZlciwgY2hhbmdpbmcgaG93IHNvY2tldHMgYXJlIGFkZGVkLCBob3cgZmFsbGJhY2sgY29ubmVjdGlvbnMgYXJlIGZvdW5kLCBhbmQgaG93IGJsb2NrIHNpemVzIGFyZSBzZXQuIEl0IGFsc28gaW50cm9kdWNlcyBhIG5ldyBtb2R1bGUgcGFyYW1ldGVyIGZvciBoYXJkd2FyZSBxdWV1ZXMgYW5kIHJlZmFjdG9ycyBuZXRsaW5rIHNvY2tldCBwYXJzaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgTkJEIGxvZ2ljIHJlYWNoYWJsZSB2aWEgaW9jdGwgYW5kIG5ldGxpbmssIHNvIHRoZXkgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX05CRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5iZF9pb2N0bFwiLFxuICAgIFwibmJkX2dlbmxfY29ubmVjdFwiLFxuICAgIFwibmJkX2dlbmxfcmVjb25maWd1cmVcIixcbiAgICBcIm5iZF9nZW5sX2Rpc2Nvbm5lY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgZHJpdmVyLCBjaGFuZ2luZyBob3cgc29ja2V0cyBhcmUgYWRkZWQsIGhvdyBmYWxsYmFjayBjb25uZWN0aW9ucyBhcmUgZm91bmQsIGFuZCBob3cgYmxvY2sgc2l6ZXMgYXJlIHNldC4gSXQgYWxzbyBpbnRyb2R1Y2VzIGEgbmV3IG1vZHVsZSBwYXJhbWV0ZXIgZm9yIGhhcmR3YXJlIHF1ZXVlcyBhbmQgcmVmYWN0b3JzIG5ldGxpbmsgc29ja2V0IHBhcnNpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBOQkQgbG9naWMgcmVhY2hhYmxlIHZpYSBpb2N0bCBhbmQgbmV0bGluaywgc28gdGhleSBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowbnqs7[1] Phase: Succeeded StartedAt: 2026-07-31 20:05:32 +0000 UTC FinishedAt: 2026-07-31 20:05:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbnqs7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-31 20:05:32 +0000 UTC FinishedAt: 2026-07-31 20:05:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbnqs7[2] Phase: Succeeded StartedAt: 2026-07-31 20:05:32 +0000 UTC FinishedAt: 2026-07-31 23:55:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-31 20:05:32 +0000 UTC FinishedAt: 2026-07-31 23:55:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-31 20:05:32 +0000 UTC FinishedAt: 2026-07-31 20:05:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-31 20:05:32 +0000 UTC FinishedAt: 2026-07-31 20:05:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowbnqs7/series-workflowbnqs7-convert-artifact-1127649480/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-31 20:05:43 +0000 UTC FinishedAt: 2026-07-31 20:25:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-31 20:05:44 +0000 UTC FinishedAt: 2026-07-31 20:25:28 +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:*e3a95747-de92-4276-bcfd-790d752eb321,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-workflowbnqs7/series-workflowbnqs7-convert-artifact-1127649480/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": "66789b92-2974-4762-9998-1854f6086541", "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-workflowbnqs7/series-workflowbnqs7-build-action-2551479614/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-31 20:05:44 +0000 UTC FinishedAt: 2026-07-31 20:25:18 +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:*e3a95747-de92-4276-bcfd-790d752eb321,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-workflowbnqs7/series-workflowbnqs7-convert-artifact-1127649480/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": "66789b92-2974-4762-9998-1854f6086541", "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-workflowbnqs7/series-workflowbnqs7-build-action-2551479614/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-31 20:25:28 +0000 UTC FinishedAt: 2026-07-31 20:25:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-31 20:25:28 +0000 UTC FinishedAt: 2026-07-31 20:25:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-31 20:25:28 +0000 UTC FinishedAt: 2026-07-31 20:25:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-31 20:25:28 +0000 UTC FinishedAt: 2026-07-31 20:25:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowbnqs7/series-workflowbnqs7-convert-artifact-1215401903/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-31 20:25:38 +0000 UTC FinishedAt: 2026-07-31 20:27:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-31 20:25:38 +0000 UTC FinishedAt: 2026-07-31 20:27:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*66789b92-2974-4762-9998-1854f6086541,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-workflowbnqs7/series-workflowbnqs7-build-action-2551479614/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-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-31 20:27:57 +0000 UTC FinishedAt: 2026-07-31 20:27:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-31 20:27:57 +0000 UTC FinishedAt: 2026-07-31 20:27:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-31 20:27:57 +0000 UTC FinishedAt: 2026-07-31 20:48:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-31 20:27:57 +0000 UTC FinishedAt: 2026-07-31 20:48:30 +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:*e3a95747-de92-4276-bcfd-790d752eb321,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-workflowbnqs7/series-workflowbnqs7-convert-artifact-1215401903/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": "8aed596c-e1eb-405e-80cd-533496510324", "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-workflowbnqs7/series-workflowbnqs7-build-action-1652644675/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-31 20:27:57 +0000 UTC FinishedAt: 2026-07-31 20:48:19 +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:*e3a95747-de92-4276-bcfd-790d752eb321,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-workflowbnqs7/series-workflowbnqs7-convert-artifact-1215401903/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": "8aed596c-e1eb-405e-80cd-533496510324", "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-workflowbnqs7/series-workflowbnqs7-build-action-1652644675/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-31 20:48:30 +0000 UTC FinishedAt: 2026-07-31 20:48:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-31 20:48:30 +0000 UTC FinishedAt: 2026-07-31 20:48:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-31 20:48:30 +0000 UTC FinishedAt: 2026-07-31 20:50:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-31 20:48:30 +0000 UTC FinishedAt: 2026-07-31 20:50:20 +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:*8aed596c-e1eb-405e-80cd-533496510324,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-workflowbnqs7/series-workflowbnqs7-build-action-1652644675/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-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-31 20:50:37 +0000 UTC FinishedAt: 2026-07-31 23:55:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-31 20:50:37 +0000 UTC FinishedAt: 2026-07-31 23:55:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"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:*66789b92-2974-4762-9998-1854f6086541,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8aed596c-e1eb-405e-80cd-533496510324,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-workflowbnqs7/series-workflowbnqs7-build-action-2551479614/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-workflowbnqs7/series-workflowbnqs7-build-action-1652644675/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-31 20:50:37 +0000 UTC FinishedAt: 2026-07-31 20:51:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-31 20:50:37 +0000 UTC FinishedAt: 2026-07-31 20:50:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"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-workflowbnqs7/series-workflowbnqs7-convert-artifact-1218940008/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-31 20:50:37 +0000 UTC FinishedAt: 2026-07-31 20:50:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-31 20:50:37 +0000 UTC FinishedAt: 2026-07-31 20:50:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-31 20:50:39 +0000 UTC FinishedAt: 2026-07-31 20:50:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-31 20:51:03 +0000 UTC FinishedAt: 2026-07-31 23:55:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbnqs7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a6c49d8e-c9cc-4cce-ba2b-eb6f01a57724","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-31 20:51:03 +0000 UTC FinishedAt: 2026-07-31 23:55:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*66789b92-2974-4762-9998-1854f6086541,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8aed596c-e1eb-405e-80cd-533496510324,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-workflowbnqs7/series-workflowbnqs7-build-action-2551479614/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-workflowbnqs7/series-workflowbnqs7-build-action-1652644675/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-workflowbnqs7/series-workflowbnqs7-convert-artifact-1218940008/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,}